Repository: GoogleCloudPlatform/gcpdiag Branch: main Commit: bcb1d5d39e45 Files: 2970 Total size: 19.9 MB Directory structure: gitextract_sa7cb22i/ ├── .bumpversion.cfg ├── .coveragerc ├── .devcontainer/ │ ├── README.md │ └── devcontainer.json ├── .gitallowed ├── .github/ │ └── workflows/ │ ├── code-analysis.yml │ ├── scorecard.yml │ └── test.yml ├── .gitignore ├── .isort.cfg ├── .pre-commit-config.yaml ├── .pylint-dictionary.txt ├── .pylintrc ├── .safety-policy.yml ├── .style.yapf ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── PRIVACY.md ├── Pipfile ├── README.md ├── bin/ │ ├── changelog_generator.py │ ├── curl-wrap.sh │ ├── gcpdiag │ ├── gcpdiag-dockerized │ ├── gcpdiag-mocked │ ├── generate_steps.py │ ├── json-cleaner │ ├── pipenv-dockerized │ ├── precommit-gke-eol-file.sh │ ├── precommit-required-files │ ├── precommit-required-files-wrapper │ ├── precommit-todo-annotations │ ├── runbook-starter-code-generator │ ├── steps_table.md │ ├── templates/ │ │ ├── diagnostic-tree.jinja │ │ ├── python-file.py.tpl │ │ ├── runbook-starter-code.py.tpl │ │ ├── runbook-test.py.tpl │ │ └── steps.jinja │ └── terraform ├── cookiecutter-gcpdiag-rule/ │ ├── cookiecutter.json │ ├── cookiecutter_runner.py │ ├── hooks/ │ │ └── post_gen_project.py │ └── {{cookiecutter.__name}}/ │ ├── gcpdiag/ │ │ └── lint/ │ │ └── {{cookiecutter.product}}/ │ │ └── {{cookiecutter.severity.lower()}}_{{cookiecutter.year}}_{{cookiecutter.number}}_{{cookiecutter.__name}}.py │ └── website/ │ └── content/ │ └── en/ │ └── rules/ │ └── {{cookiecutter.product}}/ │ └── {{cookiecutter.severity}}/ │ └── {{cookiecutter.year}}_{{cookiecutter.number}}.md ├── docker/ │ ├── gcpdiag/ │ │ ├── Dockerfile │ │ ├── Makefile │ │ └── entrypoint.sh │ ├── hugo/ │ │ ├── Dockerfile │ │ ├── Makefile │ │ └── README.md │ ├── pipenv-python-3.12/ │ │ ├── Dockerfile │ │ ├── Makefile │ │ └── entrypoint.sh │ ├── pipenv-python-3.7/ │ │ ├── Dockerfile │ │ ├── Makefile │ │ └── entrypoint.sh │ └── pipenv-python-3.9/ │ ├── Dockerfile │ ├── Makefile │ └── entrypoint.sh ├── gcpdiag/ │ ├── __init__.py │ ├── async_queries/ │ │ ├── __init__.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── api_slowtest.py │ │ │ ├── constant_time_retry_strategy.py │ │ │ ├── default_random.py │ │ │ ├── exponential_random_retry_strategy.py │ │ │ ├── exponential_random_retry_strategy_test.py │ │ │ ├── gcpdiag_creds.py │ │ │ ├── get_api.py │ │ │ ├── sleeper.py │ │ │ └── test_webserver.py │ │ ├── dataproc/ │ │ │ ├── __init__.py │ │ │ ├── dataproc.py │ │ │ └── dataproc_test.py │ │ ├── project/ │ │ │ ├── __init__.py │ │ │ ├── get_project.py │ │ │ └── project.py │ │ ├── project_regions.py │ │ ├── project_regions_test.py │ │ ├── py.typed │ │ └── utils/ │ │ ├── __init__.py │ │ ├── fake_api.py │ │ ├── loader.py │ │ └── protocols.py │ ├── caching.py │ ├── caching_test.py │ ├── config.py │ ├── config_test.py │ ├── context.py │ ├── executor.py │ ├── executor_test.py │ ├── hooks.py │ ├── lint/ │ │ ├── __init__.py │ │ ├── apigee/ │ │ │ ├── __init__.py │ │ │ ├── apigee_rules_snapshot_test.py │ │ │ ├── err_2022_001_p4sa_perm.py │ │ │ ├── err_2022_002_p4sa_kms_key_perm.py │ │ │ ├── err_2023_001_vpc_peering_created.py │ │ │ ├── err_2023_002_routing_with_mig.py │ │ │ ├── err_2023_003_pga_on_mig_subnet.py │ │ │ ├── err_2023_004_p4nsa_perm.py │ │ │ ├── err_2023_005_fw_rule_xlb_to_mig.py │ │ │ ├── err_2023_006_multiple_migs_for_multiple_regions.py │ │ │ ├── snapshots/ │ │ │ │ ├── ERR_2022_001.txt │ │ │ │ ├── ERR_2022_002.txt │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2023_003.txt │ │ │ │ ├── ERR_2023_004.txt │ │ │ │ ├── ERR_2023_005.txt │ │ │ │ ├── ERR_2023_006.txt │ │ │ │ ├── WARN_2021_001.txt │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ └── WARN_2022_002.txt │ │ │ ├── warn_2021_001_empty_env.py │ │ │ ├── warn_2022_001_env_groups_created.py │ │ │ └── warn_2022_002_env_not_attached.py │ │ ├── asm/ │ │ │ ├── __init__.py │ │ │ ├── asm_rules_snapshot_test.py │ │ │ ├── err_2023_001_traffic_4xx.py │ │ │ ├── err_2023_002_traffic_5xx.py │ │ │ ├── err_2024_001_secret_not_found.py │ │ │ ├── err_2024_002_istiod_resource_issues.py │ │ │ ├── snapshots/ │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── ERR_2024_002.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2024_001.txt │ │ │ │ ├── WARN_2025_001.txt │ │ │ │ └── WARN_2025_002.txt │ │ │ ├── warn_2023_001_grpc_reset.py │ │ │ ├── warn_2024_001_webhook.py │ │ │ ├── warn_2025_001_delayedconnect111.py │ │ │ └── warn_2025_002_protocolerror.py │ │ ├── bigquery/ │ │ │ ├── __init__.py │ │ │ ├── bigquery_rules_snapshot_test.py │ │ │ ├── err_2022_001_concurrent_dml_updates.py │ │ │ ├── err_2022_002_response_too_large.py │ │ │ ├── err_2022_003_permission_denied_drive_credentials.py │ │ │ ├── err_2022_004_exceeded_limit_shuffle.py │ │ │ ├── err_2023_001_job_not_found_error.py │ │ │ ├── err_2023_002_dataset_not_found.py │ │ │ ├── err_2023_003_resource_exceeded.py │ │ │ ├── err_2023_004_concurrent_dml.py │ │ │ ├── err_2023_005_outdated_credentials_for_scheduled_queries.py │ │ │ ├── err_2023_006_bigquery_policy_do_not_belong_to_user.py │ │ │ ├── err_2023_007_data_transfer_service_agent_does_not_exist.py │ │ │ ├── err_2023_008_user_not_authorized_to_perform_this_action.py │ │ │ ├── err_2023_009_not_consistent_with_destination_dataset.py │ │ │ ├── err_2024_001_query_too_complex.py │ │ │ ├── snapshots/ │ │ │ │ ├── ERR_2022_001.txt │ │ │ │ ├── ERR_2022_002.txt │ │ │ │ ├── ERR_2022_003.txt │ │ │ │ ├── ERR_2022_004.txt │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2023_003.txt │ │ │ │ ├── ERR_2023_004.txt │ │ │ │ ├── ERR_2023_005.txt │ │ │ │ ├── ERR_2023_006.txt │ │ │ │ ├── ERR_2023_007.txt │ │ │ │ ├── ERR_2023_008.txt │ │ │ │ ├── ERR_2023_009.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ ├── WARN_2022_002.txt │ │ │ │ ├── WARN_2022_003.txt │ │ │ │ ├── WARN_2022_004.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ ├── WARN_2023_003.txt │ │ │ │ ├── WARN_2023_004.txt │ │ │ │ ├── WARN_2024_001.txt │ │ │ │ ├── WARN_2024_002.txt │ │ │ │ ├── WARN_2024_003.txt │ │ │ │ ├── WARN_2024_004.txt │ │ │ │ ├── WARN_2024_005.txt │ │ │ │ └── WARN_2024_006.txt │ │ │ ├── warn_2022_001_exceeded_rate_limits.py │ │ │ ├── warn_2022_002_column_level_security.py │ │ │ ├── warn_2022_003_copy_job_quota.py │ │ │ ├── warn_2022_004_cross_region_copy_job_quota.py │ │ │ ├── warn_2023_001_query_job_timed_out.py │ │ │ ├── warn_2023_002_wildcard_tables_query.py │ │ │ ├── warn_2023_003_too_many_output_column.py │ │ │ ├── warn_2023_004_bigquery_kms_errors.py │ │ │ ├── warn_2024_001_imports_or_query_appends_per_table.py │ │ │ ├── warn_2024_002_invalid_external_connection.py │ │ │ ├── warn_2024_003_too_many_concurrent_api_requests.py │ │ │ ├── warn_2024_004_too_many_concurrent_queries.py │ │ │ ├── warn_2024_005_exceeded_partition_modifications.py │ │ │ └── warn_2024_006_tabledata_list_bytes_exceeded.py │ │ ├── billing/ │ │ │ ├── __init__.py │ │ │ ├── billing_rules_snapshot_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ ├── WARN_2022_002.txt │ │ │ │ └── WARN_2022_003.txt │ │ │ ├── warn_2022_001_project_billing_enabled.py │ │ │ ├── warn_2022_002_stray_billing_accounts.py │ │ │ └── warn_2022_003_cost_anomalies.py │ │ ├── cloudrun/ │ │ │ ├── __init__.py │ │ │ ├── cloud_rules_snapshot_test.py │ │ │ ├── err_2022_001_missing_cloudrun_serviceagent_role.py │ │ │ └── snapshots/ │ │ │ └── ERR_2022_001.txt │ │ ├── cloudsql/ │ │ │ ├── __init__.py │ │ │ ├── bp_2023_001_public_ip.py │ │ │ ├── bp_2023_002_automated_backup.py │ │ │ ├── bp_2023_003_log_output_flag.py │ │ │ ├── bp_ext_2023_001_maint_window.py │ │ │ ├── bp_ext_2023_002_del_protection.py │ │ │ ├── bp_ext_2023_003_auto_storage_increases.py │ │ │ ├── bp_ext_2023_004_sla.py │ │ │ ├── cloudsql_rules_snapshot_test.py │ │ │ ├── err_2023_001_instance_in_suspended.py │ │ │ ├── sec_2023_001_public_acess.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2023_001.txt │ │ │ │ ├── BP_2023_002.txt │ │ │ │ ├── BP_2023_003.txt │ │ │ │ ├── BP_EXT_2023_001.txt │ │ │ │ ├── BP_EXT_2023_002.txt │ │ │ │ ├── BP_EXT_2023_003.txt │ │ │ │ ├── BP_EXT_2023_004.txt │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── SEC_2023_001.txt │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ └── WARN_2023_003.txt │ │ │ ├── warn_2022_001_docker_bridge_network.py │ │ │ ├── warn_2023_002_high_cpu_usage.py │ │ │ └── warn_2023_003_high_mem_usage.py │ │ ├── command.py │ │ ├── command_test.py │ │ ├── composer/ │ │ │ ├── __init__.py │ │ │ ├── bp_2023_001_debug_logging_level.py │ │ │ ├── bp_2023_002_parallelism.py │ │ │ ├── bp_2023_003_statsd.py │ │ │ ├── bp_ext_2023_001_number_of_schedulers.py │ │ │ ├── bp_ext_2023_002_xss_vulnerable_versions.py │ │ │ ├── composer_rules_snapshot_test.py │ │ │ ├── err_2022_001_composer_p4sa_permissions.py │ │ │ ├── err_2022_002_composer_sa_permissions.py │ │ │ ├── err_2023_001_composer_not_in_error_state.py │ │ │ ├── err_2023_002_verify_ip_range.py │ │ │ ├── err_2023_003_dag_timeout_killing.py │ │ │ ├── err_2023_004_zombie_detection.py │ │ │ ├── err_2023_005_environment_delete_fail_nat_config.py │ │ │ ├── err_2024_001_no_error_surfaced.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2023_001.txt │ │ │ │ ├── BP_2023_002.txt │ │ │ │ ├── BP_2023_003.txt │ │ │ │ ├── BP_EXT_2023_001.txt │ │ │ │ ├── BP_EXT_2023_002.txt │ │ │ │ ├── ERR_2022_001.txt │ │ │ │ ├── ERR_2022_002.txt │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2023_003.txt │ │ │ │ ├── ERR_2023_004.txt │ │ │ │ ├── ERR_2023_005.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ ├── WARN_2022_002.txt │ │ │ │ ├── WARN_2022_003.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ ├── WARN_2023_003.txt │ │ │ │ ├── WARN_2023_004.txt │ │ │ │ ├── WARN_2023_005.txt │ │ │ │ ├── WARN_2023_006.txt │ │ │ │ ├── WARN_2023_007.txt │ │ │ │ ├── WARN_2023_008.txt │ │ │ │ ├── WARN_2023_009.txt │ │ │ │ ├── WARN_2024_001.txt │ │ │ │ ├── WARN_2024_002.txt │ │ │ │ └── WARN_2024_003.txt │ │ │ ├── warn_2022_001_composer2_p4sa_permissions.py │ │ │ ├── warn_2022_002_fluentd_pod_crashloop.py │ │ │ ├── warn_2022_003_total_dag_parse_time.py │ │ │ ├── warn_2023_001_kerberos_support.py │ │ │ ├── warn_2023_002_task_sigkill.py │ │ │ ├── warn_2023_003_task_fail_resource_pressure.py │ │ │ ├── warn_2023_004_high_database_cpu_usage.py │ │ │ ├── warn_2023_005_environment_is_consistently_healthy.py │ │ │ ├── warn_2023_006_schedulers_are_healthy.py │ │ │ ├── warn_2023_007_high_scheduler_cpu_usage.py │ │ │ ├── warn_2023_008_composer_airflow_db_is_healthy.py │ │ │ ├── warn_2023_009_composer_intermittent_task_failure_issue.py │ │ │ ├── warn_2024_001_low_scheduler_cpu_usuage.py │ │ │ ├── warn_2024_002_worker_pod_eviction.py │ │ │ └── warn_2024_003_composer_api_disabled.py │ │ ├── dataflow/ │ │ │ ├── __init__.py │ │ │ ├── bp_2023_001_dataflow_supported_sdk_version_check.py │ │ │ ├── dataflow_rules_snapshot_test.py │ │ │ ├── err_2023_001_dataflow_sa_perm_check.py │ │ │ ├── err_2023_002_dataflow_ip_space_exhausted.py │ │ │ ├── err_2023_003_dataflow_subnet_format_check.py │ │ │ ├── err_2023_004_dataflow_org_policy_violated.py │ │ │ ├── err_2023_005_dataflow_credential_perm_issue.py │ │ │ ├── err_2023_006_dataflow_private_google_access_check.py │ │ │ ├── err_2023_007_dataflow_missing_firewall_issue.py │ │ │ ├── err_2023_008_dataflow_sa_worker_perm_check.py │ │ │ ├── err_2023_009_splunk_err_invalid_cert.py │ │ │ ├── err_2023_010_bq_streaming_insert_missing_field.py │ │ │ ├── err_2023_011_bq_streaming_insert_mismatch_column.py │ │ │ ├── err_2023_012_dataflow_spanner_oom.py │ │ │ ├── err_2023_013_dataflow_spanner_deadline_exceeded.py │ │ │ ├── err_2024_001_dataflow_gce_quotas.py │ │ │ ├── err_2024_002_dataflow_key_commit.py │ │ │ ├── err_2024_003_dataflow_write_truncate_unbounded.py │ │ │ ├── err_2024_004_missing_gcs_permission_temp_bucket.py │ │ │ ├── err_2024_005_dataflow_not_creating_pubsub_subscription.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2023_001.txt │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2023_003.txt │ │ │ │ ├── ERR_2023_004.txt │ │ │ │ ├── ERR_2023_005.txt │ │ │ │ ├── ERR_2023_006.txt │ │ │ │ ├── ERR_2023_007.txt │ │ │ │ ├── ERR_2023_008.txt │ │ │ │ ├── ERR_2023_009.txt │ │ │ │ ├── ERR_2023_010.txt │ │ │ │ ├── ERR_2023_011.txt │ │ │ │ ├── ERR_2023_012.txt │ │ │ │ ├── ERR_2023_013.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── ERR_2024_002.txt │ │ │ │ ├── ERR_2024_003.txt │ │ │ │ ├── ERR_2024_004.txt │ │ │ │ ├── ERR_2024_005.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_003.txt │ │ │ │ ├── WARN_2023_004.txt │ │ │ │ ├── WARN_2023_006.txt │ │ │ │ ├── WARN_2024_001.txt │ │ │ │ └── WARN_2024_002.txt │ │ │ ├── warn_2023_001_dataflow_hot_key.py │ │ │ ├── warn_2023_003_dataflow_worker_logs_throttled.py │ │ │ ├── warn_2023_004_dataflow_stuck_at_draining.py │ │ │ ├── warn_2023_006_dataflow_stuck_at_cancelling.py │ │ │ ├── warn_2024_001_dataflow_operation_ongoing.py │ │ │ └── warn_2024_002_dataflow_streaming_appliance_commit_failed.py │ │ ├── datafusion/ │ │ │ ├── __init__.py │ │ │ ├── datafusion_rules_snapshot_test.py │ │ │ ├── err_2022_001_connectivity_dataproc_vms.py │ │ │ ├── err_2022_002_shared_vpc_ip_range.py │ │ │ ├── err_2022_003_private_peering.py │ │ │ ├── err_2022_004_cloud_datafusion_sa_permissions.py │ │ │ ├── err_2022_005_host_vpc_permissions.py │ │ │ ├── err_2022_006_private_google_access.py │ │ │ ├── err_2022_007_cloud_datafusion_sa_permissions.py │ │ │ ├── err_2022_008_cloud_datafusion_sa_permissions.py │ │ │ ├── err_2022_009_cloud_dataproc_sa_permissions.py │ │ │ ├── err_2022_010_cloud_datafusion_sa_permissions.py │ │ │ ├── err_2022_011_cloud_datafusion_sa_permissions.py │ │ │ ├── err_2024_001_delete_operation_failing.py │ │ │ ├── snapshots/ │ │ │ │ ├── ERR_2022_001.txt │ │ │ │ ├── ERR_2022_002.txt │ │ │ │ ├── ERR_2022_003.txt │ │ │ │ ├── ERR_2022_004.txt │ │ │ │ ├── ERR_2022_005.txt │ │ │ │ ├── ERR_2022_006.txt │ │ │ │ ├── ERR_2022_007.txt │ │ │ │ ├── ERR_2022_008.txt │ │ │ │ ├── ERR_2022_009.txt │ │ │ │ ├── ERR_2022_010.txt │ │ │ │ ├── ERR_2022_011.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── WARN_2024_001.txt │ │ │ │ ├── WARN_2024_002.txt │ │ │ │ ├── WARN_2024_003.txt │ │ │ │ ├── WARN_2024_004.txt │ │ │ │ └── WARN_2024_005.txt │ │ │ ├── warn_2024_001_data_fusion_version.py │ │ │ ├── warn_2024_002_instance_state_running.py │ │ │ ├── warn_2024_003_cluster_scaling_down_disabled.py │ │ │ ├── warn_2024_004_datafusion_dataproc_compatabillity.py │ │ │ └── warn_2024_005_datafusion_dataproc_compatability_preference.py │ │ ├── dataproc/ │ │ │ ├── __init__.py │ │ │ ├── bp_2021_001_logging_enabled.py │ │ │ ├── bp_2022_001_monitoring_enabled.py │ │ │ ├── bp_2022_098_another_dummy_async_rule.py │ │ │ ├── bp_2022_099_dummy_async_rule.py │ │ │ ├── dataproc_rules_snapshot_test.py │ │ │ ├── err_2022_002_image_versions.py │ │ │ ├── err_2022_002_image_versions_test.py │ │ │ ├── err_2022_003_dataproc_sa_permissions.py │ │ │ ├── err_2022_004_dpgce_connectivity.py │ │ │ ├── err_2023_001_initialization_action_timeout.py │ │ │ ├── err_2023_002_orphaned_yarn_application.py │ │ │ ├── err_2023_003_dataproc_permission.py │ │ │ ├── err_2023_004_dataproc_firewall_issue.py │ │ │ ├── err_2023_005_dataproc_quota.py │ │ │ ├── err_2023_006_shared_vpc_permission.py │ │ │ ├── err_2023_007_cluster_creation_stockout.py │ │ │ ├── err_2023_008_bad_dirs.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2021_001.txt │ │ │ │ ├── BP_2022_001.txt │ │ │ │ ├── BP_2022_098.txt │ │ │ │ ├── BP_2022_099.txt │ │ │ │ ├── ERR_2022_002.txt │ │ │ │ ├── ERR_2022_003.txt │ │ │ │ ├── ERR_2022_004.txt │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2023_003.txt │ │ │ │ ├── ERR_2023_004.txt │ │ │ │ ├── ERR_2023_005.txt │ │ │ │ ├── ERR_2023_006.txt │ │ │ │ ├── ERR_2023_007.txt │ │ │ │ ├── ERR_2023_008.txt │ │ │ │ ├── WARN_2021_001.txt │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ ├── WARN_2022_002.txt │ │ │ │ ├── WARN_2022_003.txt │ │ │ │ ├── WARN_2022_004.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ ├── WARN_2024_001.txt │ │ │ │ └── WARN_2024_002.txt │ │ │ ├── warn_2021_001_cluster_status_running.py │ │ │ ├── warn_2022_001_cluster_local_ssd_failed_stop.py │ │ │ ├── warn_2022_002_job_throttling_rate_limit.py │ │ │ ├── warn_2022_003_sa_permissions.py │ │ │ ├── warn_2022_004_cluster_status_running_async.py │ │ │ ├── warn_2023_001_job_throttling_too_many.py │ │ │ ├── warn_2023_002_high_system_memory_usage.py │ │ │ ├── warn_2024_001_safemode.py │ │ │ └── warn_2024_002_hdfs_write_issue.py │ │ ├── gae/ │ │ │ ├── __init__.py │ │ │ ├── err_2023_001_appengine_vpc_connector_policy.py │ │ │ ├── err_2023_002_appengine_vpc_connector_subnet_overlap.py │ │ │ ├── err_2025_001_gae_default_service_account_is_deleted.py │ │ │ ├── gae_rules_snapshot_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2025_001.txt │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ └── WARN_2022_002.txt │ │ │ ├── warn_2022_001_appengine_standard_deprecated_runtimes.py │ │ │ └── warn_2022_002_appengine_flexible_deprecated_runtimes.py │ │ ├── gcb/ │ │ │ ├── __init__.py │ │ │ ├── err_2022_001_missing_cloudbuild_editor_role.py │ │ │ ├── err_2022_002_build_failed_whithout_artifact_registry_permission.py │ │ │ ├── err_2022_003_build_failed_with_logs_bucket_retention_policy.py │ │ │ ├── err_2022_004_missing_cloudbuild_service_agent_role.py │ │ │ ├── gcb_rules_snapshot_test.py │ │ │ └── snapshots/ │ │ │ ├── ERR_2022_001.txt │ │ │ ├── ERR_2022_002.txt │ │ │ ├── ERR_2022_003.txt │ │ │ └── ERR_2022_004.txt │ │ ├── gce/ │ │ │ ├── __init__.py │ │ │ ├── bp_2021_001_serial_logging_enabled.py │ │ │ ├── bp_2022_003_unused_boot_disks.py │ │ │ ├── bp_2023_001_ntp_config.py │ │ │ ├── bp_2024_001_legacy_monitoring_agent.py │ │ │ ├── bp_2024_002_legacy_logging_agent.py │ │ │ ├── bp_ext_2021_003_secure_boot_enabled.py │ │ │ ├── bp_ext_2022_001_vm_manager_enabled.py │ │ │ ├── bp_ext_2023_001_gce_scopes.py │ │ │ ├── bp_ext_2024_001_no_public_ip.py │ │ │ ├── bp_ext_2024_002_calculate_vm_iops_throughput.py │ │ │ ├── err_2021_001_mig_scaleup_failed.py │ │ │ ├── err_2021_002_osconfig_perm.py │ │ │ ├── err_2021_003_api_service_agent.py │ │ │ ├── err_2021_004_secure_boot_failed.py │ │ │ ├── err_2021_005_mount_errors.py │ │ │ ├── err_2022_001_quota_exceeded.py │ │ │ ├── err_2022_002_premium_guestos_activation_failed.py │ │ │ ├── err_2024_001_snapshot_rate_limit.py │ │ │ ├── err_2024_002_performance.py │ │ │ ├── err_2024_003_vm_secure_boot_failures.py │ │ │ ├── err_2024_004_ops_agent.py │ │ │ ├── gce_rules_snapshot_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2021_001.txt │ │ │ │ ├── BP_2022_003.txt │ │ │ │ ├── BP_2023_001.txt │ │ │ │ ├── BP_2024_001.txt │ │ │ │ ├── BP_2024_002.txt │ │ │ │ ├── BP_EXT_2021_003.txt │ │ │ │ ├── BP_EXT_2022_001.txt │ │ │ │ ├── BP_EXT_2023_001.txt │ │ │ │ ├── BP_EXT_2024_001.txt │ │ │ │ ├── BP_EXT_2024_002.txt │ │ │ │ ├── BP_EXT_2024_003.txt │ │ │ │ ├── ERR_2021_001.txt │ │ │ │ ├── ERR_2021_002.txt │ │ │ │ ├── ERR_2021_003.txt │ │ │ │ ├── ERR_2021_004.txt │ │ │ │ ├── ERR_2021_005.txt │ │ │ │ ├── ERR_2022_001.txt │ │ │ │ ├── ERR_2022_002.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── ERR_2024_002.txt │ │ │ │ ├── ERR_2024_003.txt │ │ │ │ ├── ERR_2024_004.txt │ │ │ │ ├── WARN_2021_001.txt │ │ │ │ ├── WARN_2021_002.txt │ │ │ │ ├── WARN_2021_003.txt │ │ │ │ ├── WARN_2021_004.txt │ │ │ │ ├── WARN_2021_005.txt │ │ │ │ ├── WARN_2021_006.txt │ │ │ │ ├── WARN_2021_007.txt │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ ├── WARN_2022_002.txt │ │ │ │ ├── WARN_2022_003.txt │ │ │ │ ├── WARN_2022_004.txt │ │ │ │ ├── WARN_2022_005.txt │ │ │ │ ├── WARN_2022_006.txt │ │ │ │ ├── WARN_2022_007.txt │ │ │ │ ├── WARN_2022_008.txt │ │ │ │ ├── WARN_2022_009.txt │ │ │ │ ├── WARN_2022_010.txt │ │ │ │ ├── WARN_2022_011.txt │ │ │ │ ├── WARN_2022_012.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ └── WARN_2024_001.txt │ │ │ ├── utils.py │ │ │ ├── utils_test.py │ │ │ ├── warn_2021_001_logging_perm.py │ │ │ ├── warn_2021_002_disk_latency.py │ │ │ ├── warn_2021_003_monitoring_permissions.py │ │ │ ├── warn_2021_004_disk_full_serial_messages.py │ │ │ ├── warn_2021_005_out_of_memory.py │ │ │ ├── warn_2021_006_kernel_panic.py │ │ │ ├── warn_2021_007_bsod.py │ │ │ ├── warn_2022_001_iap_tcp_forwarding.py │ │ │ ├── warn_2022_002_duplicated_named_ports.py │ │ │ ├── warn_2022_003_vm_instances_quota.py │ │ │ ├── warn_2022_004_docker_bridge_network.py │ │ │ ├── warn_2022_005_cpu_quota.py │ │ │ ├── warn_2022_006_gpu_quota.py │ │ │ ├── warn_2022_007_cloudsql_admin_scope.py │ │ │ ├── warn_2022_008_ip_address_quota.py │ │ │ ├── warn_2022_009_disk_quota.py │ │ │ ├── warn_2022_010_resource_availability.py │ │ │ ├── warn_2022_011_valid_sa.py │ │ │ ├── warn_2022_012_windows_kms.py │ │ │ ├── warn_2023_001_snapshot_policies_on_unused_disks.py │ │ │ └── warn_2023_002_airflowtask_oom.py │ │ ├── gcf/ │ │ │ ├── __init__.py │ │ │ ├── err_2022_001_missing_cloudfunctions_serviceagent_role.py │ │ │ ├── err_2022_002_cloudfunctions_org_policy_violation.py │ │ │ ├── err_2022_003_cloudfunctions_memory_limit_exceeded.py │ │ │ ├── gcf_rules_snapshot_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── ERR_2022_001.txt │ │ │ │ ├── ERR_2022_002.txt │ │ │ │ ├── ERR_2022_003.txt │ │ │ │ ├── WARN_2021_001.txt │ │ │ │ └── WARN_2021_002.txt │ │ │ ├── warn_2021_001_cloudfunctions_deprecated_runtimes.py │ │ │ └── warn_2021_002_cloudfunctions_request_aborted.py │ │ ├── gcs/ │ │ │ ├── __init__.py │ │ │ ├── bp_2022_001_bucket_access_uniform.py │ │ │ ├── gcs_rules_snapshot_test.py │ │ │ └── snapshots/ │ │ │ └── BP_2022_001.txt │ │ ├── gke/ │ │ │ ├── __init__.py │ │ │ ├── bp_2021_001_cloudops_enabled.py │ │ │ ├── bp_2022_001_regional_cluster.py │ │ │ ├── bp_2022_002_unique_subnets.py │ │ │ ├── bp_2022_003_cluster_eol.py │ │ │ ├── bp_2022_004_http_load_balancing_disabled.py │ │ │ ├── bp_2023_001_network_policy_minimum_requirements.py │ │ │ ├── bp_2023_002_stateful_workloads_not_on_preemptible_node.py │ │ │ ├── bp_2023_004_vpc_native_cluster.py │ │ │ ├── bp_2023_005_gateway_crd.py │ │ │ ├── bp_2025_001_gke_nodelocal_dnscache_enabled.py │ │ │ ├── bp_ext_2022_001_groups_enabled.py │ │ │ ├── bp_ext_2023_001_maintenance_window.py │ │ │ ├── bp_ext_2023_002_private_cluster.py │ │ │ ├── eol_parser.sh │ │ │ ├── err_2021_001_logging_perm.py │ │ │ ├── err_2021_002_monitoring_perm.py │ │ │ ├── err_2021_003_kms_key_enabled.py │ │ │ ├── err_2021_004_node_connection_apiserver.py │ │ │ ├── err_2021_005_node_connection_storage.py │ │ │ ├── err_2021_006_scaleup_failed.py │ │ │ ├── err_2021_007_gke_sa.py │ │ │ ├── err_2021_008_api_service_agent.py │ │ │ ├── err_2021_009_nodepool_version_skew.py │ │ │ ├── err_2021_010_internal_forwarding_rule_limits.py │ │ │ ├── err_2021_011_ip_masq_not_reporting_errors.py │ │ │ ├── err_2021_012_np_sa_enabled.py │ │ │ ├── err_2021_013_connectivity_cluster_rules.py │ │ │ ├── err_2021_014_connectivity_master.py │ │ │ ├── err_2021_015_connectivity_vms.py │ │ │ ├── err_2022_001_connectivity_pod_to_pod.py │ │ │ ├── err_2022_002_private_google_access.py │ │ │ ├── err_2022_003_ingress_healthcheck.py │ │ │ ├── err_2023_001_containerfilesystem_quota.py │ │ │ ├── err_2023_002_private_routes_based.py │ │ │ ├── err_2023_003_containerd_bad_config_file.py │ │ │ ├── err_2023_004_ingress_config.py │ │ │ ├── err_2023_005_gke_cni_issue.py │ │ │ ├── err_2023_006_gw_controller_annotation_error.py │ │ │ ├── err_2023_007_gw_controller_http_route_misconfig.py │ │ │ ├── err_2023_008_crashloopbackoff.py │ │ │ ├── err_2023_009_missing_cpu_req.py │ │ │ ├── err_2023_010_nodelocal_timeout.py │ │ │ ├── err_2023_011_wi_pod_ip_not_found.py │ │ │ ├── err_2023_012_missing_mem_request.py │ │ │ ├── err_2024_001_psa_violoations.py │ │ │ ├── err_2024_002_webhook_failure_no_endpoint.py │ │ │ ├── err_2024_003_default_node_serviceaccount_perm.py │ │ │ ├── err_2025_001_serial_port_logging.py │ │ │ ├── gke_rules_snapshot_test.py │ │ │ ├── sec_2021_001_np_uses_default_sa.py │ │ │ ├── sec_2023_001_worload_id.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2021_001.txt │ │ │ │ ├── BP_2022_001.txt │ │ │ │ ├── BP_2022_002.txt │ │ │ │ ├── BP_2022_003.txt │ │ │ │ ├── BP_2022_004.txt │ │ │ │ ├── BP_2023_001.txt │ │ │ │ ├── BP_2023_002.txt │ │ │ │ ├── BP_2023_004.txt │ │ │ │ ├── BP_2023_005.txt │ │ │ │ ├── BP_2025_001.txt │ │ │ │ ├── BP_EXT_2022_001.txt │ │ │ │ ├── BP_EXT_2023_001.txt │ │ │ │ ├── BP_EXT_2023_002.txt │ │ │ │ ├── ERR_2021_001.txt │ │ │ │ ├── ERR_2021_002.txt │ │ │ │ ├── ERR_2021_003.txt │ │ │ │ ├── ERR_2021_004.txt │ │ │ │ ├── ERR_2021_005.txt │ │ │ │ ├── ERR_2021_006.txt │ │ │ │ ├── ERR_2021_007.txt │ │ │ │ ├── ERR_2021_008.txt │ │ │ │ ├── ERR_2021_009.txt │ │ │ │ ├── ERR_2021_010.txt │ │ │ │ ├── ERR_2021_011.txt │ │ │ │ ├── ERR_2021_012.txt │ │ │ │ ├── ERR_2021_013.txt │ │ │ │ ├── ERR_2021_014.txt │ │ │ │ ├── ERR_2021_015.txt │ │ │ │ ├── ERR_2022_001.txt │ │ │ │ ├── ERR_2022_002.txt │ │ │ │ ├── ERR_2022_003.txt │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2023_003.txt │ │ │ │ ├── ERR_2023_004.txt │ │ │ │ ├── ERR_2023_005.txt │ │ │ │ ├── ERR_2023_006.txt │ │ │ │ ├── ERR_2023_007.txt │ │ │ │ ├── ERR_2023_008.txt │ │ │ │ ├── ERR_2023_009.txt │ │ │ │ ├── ERR_2023_010.txt │ │ │ │ ├── ERR_2023_011.txt │ │ │ │ ├── ERR_2023_012.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── ERR_2024_002.txt │ │ │ │ ├── ERR_2024_003.txt │ │ │ │ ├── ERR_2025_001.txt │ │ │ │ ├── SEC_2021_001.txt │ │ │ │ ├── SEC_2023_001.txt │ │ │ │ ├── WARN_2021_001.txt │ │ │ │ ├── WARN_2021_002.txt │ │ │ │ ├── WARN_2021_003.txt │ │ │ │ ├── WARN_2021_004.txt │ │ │ │ ├── WARN_2021_005.txt │ │ │ │ ├── WARN_2021_006.txt │ │ │ │ ├── WARN_2021_007.txt │ │ │ │ ├── WARN_2021_008.txt │ │ │ │ ├── WARN_2021_009.txt │ │ │ │ ├── WARN_2022_001.txt │ │ │ │ ├── WARN_2022_002.txt │ │ │ │ ├── WARN_2022_003.txt │ │ │ │ ├── WARN_2022_004.txt │ │ │ │ ├── WARN_2022_005.txt │ │ │ │ ├── WARN_2022_006.txt │ │ │ │ ├── WARN_2022_007.txt │ │ │ │ ├── WARN_2022_008.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ ├── WARN_2023_003.txt │ │ │ │ ├── WARN_2023_004.txt │ │ │ │ ├── WARN_2024_001.txt │ │ │ │ ├── WARN_2024_002.txt │ │ │ │ ├── WARN_2024_003.txt │ │ │ │ ├── WARN_2024_004.txt │ │ │ │ ├── WARN_2024_005.txt │ │ │ │ ├── WARN_2024_007.txt │ │ │ │ └── WARN_2025_001.txt │ │ │ ├── util.py │ │ │ ├── warn_2021_001_cluster_version.py │ │ │ ├── warn_2021_002_nodes_version.py │ │ │ ├── warn_2021_003_pod_cidr_cluster_size.py │ │ │ ├── warn_2021_004_system_workloads_stable.py │ │ │ ├── warn_2021_005_disk_latency.py │ │ │ ├── warn_2021_006_node_conntrack_full.py │ │ │ ├── warn_2021_007_disk_full.py │ │ │ ├── warn_2021_008_gke_istio_incompatible_versions.py │ │ │ ├── warn_2021_009_node_deprecated_image_types.py │ │ │ ├── warn_2022_001_wi_with_regional_cluster.py │ │ │ ├── warn_2022_002_md_concealment.py │ │ │ ├── warn_2022_003_firewall_rules_permission.py │ │ │ ├── warn_2022_004_logging_api_disabled.py │ │ │ ├── warn_2022_005_nvdia_gpu.py │ │ │ ├── warn_2022_006_nap_node_image_types.py │ │ │ ├── warn_2022_007_storage_scope.py │ │ │ ├── warn_2022_008_dns_lookup_timeout_intra_node_visibility.py │ │ │ ├── warn_2023_001_containerfilesystem_scope.py │ │ │ ├── warn_2023_002_metadata_server_timeout.py │ │ │ ├── warn_2023_003_monitoring_api_disabled.py │ │ │ ├── warn_2023_004_too_few_pods_per_node.py │ │ │ ├── warn_2024_001_cluster_nap_limits_prevent_autoscaling.py │ │ │ ├── warn_2024_002_ksa_exceed.py │ │ │ ├── warn_2024_003_ingress_svc_notfound.py │ │ │ ├── warn_2024_004_ingress_backendcrd.py │ │ │ ├── warn_2024_005_ingress_servicetype.py │ │ │ ├── warn_2024_007_loadbalancer_ipv6_no_internal_range.py │ │ │ └── warn_2025_001_loadbalancer_ipv6_no_external_range.py │ │ ├── iam/ │ │ │ ├── __init__.py │ │ │ ├── bp_2023_001_auto_grant_editor_role_default_sa.py │ │ │ ├── iam_rules_snapshot_test.py │ │ │ ├── sec_2021_001_sa_permissions.py │ │ │ ├── sec_2024_001_unused_sa.py │ │ │ └── snapshots/ │ │ │ ├── BP_2023_001.txt │ │ │ ├── SEC_2021_001.txt │ │ │ └── SEC_2024_001.txt │ │ ├── interconnect/ │ │ │ ├── __init__.py │ │ │ ├── bp_2023_001_high_availability.py │ │ │ ├── interconnect_rules_snapshot_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2023_001.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ ├── WARN_2023_003.txt │ │ │ │ └── WARN_2025_001.txt │ │ │ ├── warn_2023_001_legacy_dataplane.py │ │ │ ├── warn_2023_002_defunct_attachment.py │ │ │ ├── warn_2023_003_link_maintenance.py │ │ │ └── warn_2025_001_check_interconnect_mtu.py │ │ ├── lb/ │ │ │ ├── __init__.py │ │ │ ├── bp_2022_001_lbpolicy_for_sessionaffinity.py │ │ │ ├── bp_2023_001_cloudcdn_for_lb_backend_services.py │ │ │ ├── bp_2023_002_healthcheck_logging_for_backend_services.py │ │ │ ├── bp_2024_001_sessionaffinity_for_lb_backendservices.py │ │ │ ├── bp_2024_002_global_access_for_regional_ilb.py │ │ │ ├── bp_2025_001_protocol_for_lb_backendservices.py │ │ │ ├── bp_2025_002_timeout_sec_for_lb_backendservices.py │ │ │ ├── bp_2025_003_connection_draining_backend_services.py │ │ │ ├── lb_rules_snapshot_test.py │ │ │ └── snapshots/ │ │ │ ├── BP_2022_001.txt │ │ │ ├── BP_2023_001.txt │ │ │ ├── BP_2023_002.txt │ │ │ ├── BP_2024_001.txt │ │ │ ├── BP_2024_002.txt │ │ │ ├── BP_2025_001.txt │ │ │ ├── BP_2025_002.txt │ │ │ └── BP_2025_003.txt │ │ ├── lint_rule_repository_test.py │ │ ├── looker/ │ │ │ ├── __init__.py │ │ │ ├── bp_2025_001_get_all_instances.py │ │ │ ├── bp_2025_002_lsp_high_intensity_queries_bq.py │ │ │ ├── bp_2025_003_get_all_lags_operations.py │ │ │ ├── looker_rules_snapshot_test.py │ │ │ └── snapshots/ │ │ │ ├── BP_2025_001.txt │ │ │ ├── BP_2025_002.txt │ │ │ └── BP_2025_003.txt │ │ ├── notebooks/ │ │ │ ├── __init__.py │ │ │ ├── bp_2023_001_enable_report_system_health.py │ │ │ ├── bp_2023_002_instances_upgrade_available.py │ │ │ ├── bp_2023_003_runtimes_upgrade_available.py │ │ │ ├── bp_2023_004_runtime_idle_shutdown.py │ │ │ ├── err_2023_001_instances_health_state.py │ │ │ ├── err_2023_002_create_notebook_compute_subnetworks_permissions_missing.py │ │ │ ├── err_2023_003_create_notebook_permissions_missing.py │ │ │ ├── err_2023_004_runtimes_health_state.py │ │ │ ├── err_2024_001_executor_explicit_project_permissions.py │ │ │ ├── notebooks_rules_snapshot_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2023_001.txt │ │ │ │ ├── BP_2023_002.txt │ │ │ │ ├── BP_2023_003.txt │ │ │ │ ├── BP_2023_004.txt │ │ │ │ ├── ERR_2023_001.txt │ │ │ │ ├── ERR_2023_002.txt │ │ │ │ ├── ERR_2023_003.txt │ │ │ │ ├── ERR_2023_004.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ └── WARN_2023_003.txt │ │ │ ├── warn_2023_001_notebooks_oom.py │ │ │ ├── warn_2023_002_data_disk_utilization.py │ │ │ └── warn_2023_003_boot_disk_utilization.py │ │ ├── output/ │ │ │ ├── __init__.py │ │ │ ├── api_output.py │ │ │ ├── base_output.py │ │ │ ├── csv_output.py │ │ │ ├── json_output.py │ │ │ └── terminal_output.py │ │ ├── pubsub/ │ │ │ ├── __init__.py │ │ │ ├── bp_2024_001_ouma_less_one_day.py │ │ │ ├── err_2024_001_bq_subscription_table_not_found.py │ │ │ ├── err_2024_002_vpc_sc_new_subs_create_policy_violated.py │ │ │ ├── err_2024_003_snapshot_creation_fails.py │ │ │ ├── err_2025_001_push_service_agent_permission.py │ │ │ ├── pubsub_rules_snapshot_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── BP_2024_001.txt │ │ │ │ ├── ERR_2024_001.txt │ │ │ │ ├── ERR_2024_002.txt │ │ │ │ ├── ERR_2024_003.txt │ │ │ │ ├── ERR_2025_001.txt │ │ │ │ ├── WARN_2023_001.txt │ │ │ │ ├── WARN_2023_002.txt │ │ │ │ ├── WARN_2023_003.txt │ │ │ │ ├── WARN_2023_004.txt │ │ │ │ ├── WARN_2023_005.txt │ │ │ │ ├── WARN_2023_006.txt │ │ │ │ ├── WARN_2024_001.txt │ │ │ │ ├── WARN_2024_002.txt │ │ │ │ └── WARN_2024_003.txt │ │ │ ├── warn_2023_001_detached_subscription_exists.py │ │ │ ├── warn_2023_002_bq_subscription_has_dlq_topic.py │ │ │ ├── warn_2023_003_topic_atleastone_sub.py │ │ │ ├── warn_2023_004_orphaned_subscription_exists.py │ │ │ ├── warn_2023_005_bq_subscription_permisions.py │ │ │ ├── warn_2023_006_push_requests_failing.py │ │ │ ├── warn_2024_001_dead_letter_queues_permissions.py │ │ │ ├── warn_2024_002_gcs_subscription_permissions.py │ │ │ └── warn_2024_003_cmek_topic_permissions.py │ │ ├── snapshot_test_base.py │ │ ├── tpu/ │ │ │ ├── __init__.py │ │ │ ├── snapshots/ │ │ │ │ └── WARN_2022_001.txt │ │ │ ├── tpu_rules_snapshot_test.py │ │ │ └── warn_2022_001_stockout.py │ │ ├── vertex/ │ │ │ ├── __init__.py │ │ │ ├── snapshots/ │ │ │ │ └── WARN_2023_001.txt │ │ │ ├── vertex_rules_snapshot_test.py │ │ │ └── warn_2023_001_featurestores_state.py │ │ └── vpc/ │ │ ├── __init__.py │ │ ├── bp_2022_001_pga_next_hop.py │ │ ├── bp_2023_001_public_zone_logging.py │ │ ├── sec_2023_001_public_zone_dnssec.py │ │ ├── snapshots/ │ │ │ ├── BP_2022_001.txt │ │ │ ├── BP_2023_001.txt │ │ │ ├── SEC_2023_001.txt │ │ │ ├── WARN_2022_001.txt │ │ │ ├── WARN_2023_001.txt │ │ │ ├── WARN_2023_002.txt │ │ │ └── WARN_2024_001.txt │ │ ├── vpc_rules_snapshot_test.py │ │ ├── warn_2022_001_project_level_quota.py │ │ ├── warn_2023_001_psa_no_export_custom_routes.py │ │ ├── warn_2023_002_private_zone_attachment.py │ │ └── warn_2024_001_unused_reserved_ip_addresses.py │ ├── models.py │ ├── models_test.py │ ├── product_list.py │ ├── queries/ │ │ ├── __init__.py │ │ ├── apigee.py │ │ ├── apigee_stub.py │ │ ├── apigee_test.py │ │ ├── apis.py │ │ ├── apis_stub.py │ │ ├── apis_test.py │ │ ├── apis_utils.py │ │ ├── apis_utils_test.py │ │ ├── artifact_registry.py │ │ ├── artifact_registry_stub.py │ │ ├── artifact_registry_test.py │ │ ├── bigquery.py │ │ ├── bigquery_stub.py │ │ ├── bigquery_test.py │ │ ├── billing.py │ │ ├── billing_stub.py │ │ ├── billing_test.py │ │ ├── cloudasset.py │ │ ├── cloudasset_stub.py │ │ ├── cloudasset_test.py │ │ ├── cloudrun.py │ │ ├── cloudrun_stub.py │ │ ├── cloudrun_test.py │ │ ├── cloudsql.py │ │ ├── cloudsql_stub.py │ │ ├── cloudsql_test.py │ │ ├── composer.py │ │ ├── composer_stub.py │ │ ├── composer_test.py │ │ ├── crm.py │ │ ├── crm_stub.py │ │ ├── crm_test.py │ │ ├── dataflow.py │ │ ├── dataflow_stub.py │ │ ├── dataflow_test.py │ │ ├── datafusion.py │ │ ├── datafusion_stub.py │ │ ├── datafusion_test.py │ │ ├── dataproc.py │ │ ├── dataproc_stub.py │ │ ├── dataproc_test.py │ │ ├── dns.py │ │ ├── dns_stub.py │ │ ├── gae.py │ │ ├── gae_stub.py │ │ ├── gae_test.py │ │ ├── gcb.py │ │ ├── gcb_stub.py │ │ ├── gcb_test.py │ │ ├── gce.py │ │ ├── gce_stub.py │ │ ├── gce_test.py │ │ ├── gcf.py │ │ ├── gcf_stub.py │ │ ├── gcf_test.py │ │ ├── gcs.py │ │ ├── gcs_stub.py │ │ ├── gcs_test.py │ │ ├── generic_api/ │ │ │ ├── api_build/ │ │ │ │ ├── __init__.py │ │ │ │ ├── api.py │ │ │ │ ├── api_unittest.py │ │ │ │ ├── generic_api_stub.py │ │ │ │ ├── get_generic.py │ │ │ │ └── service_factory.py │ │ │ └── datafusion/ │ │ │ ├── __init__.py │ │ │ ├── datafusion.py │ │ │ ├── datafusion_stub.py │ │ │ └── datafusion_test.py │ │ ├── gke.py │ │ ├── gke_stub.py │ │ ├── gke_test.py │ │ ├── iam.py │ │ ├── iam_stub.py │ │ ├── iam_test.py │ │ ├── interconnect.py │ │ ├── interconnect_stub.py │ │ ├── interconnect_test.py │ │ ├── kms.py │ │ ├── kms_stub.py │ │ ├── kms_test.py │ │ ├── kubectl.py │ │ ├── kubectl_stub.py │ │ ├── lb.py │ │ ├── lb_stub.py │ │ ├── lb_test.py │ │ ├── logs.py │ │ ├── logs_helper/ │ │ │ ├── __init__.py │ │ │ ├── logs_query.py │ │ │ ├── logs_query_test.py │ │ │ ├── search_exprs.py │ │ │ └── search_exprs_test.py │ │ ├── logs_stub.py │ │ ├── logs_test.py │ │ ├── looker.py │ │ ├── looker_stub.py │ │ ├── looker_test.py │ │ ├── monitoring.py │ │ ├── monitoring_stub.py │ │ ├── monitoring_test.py │ │ ├── network.py │ │ ├── network_stub.py │ │ ├── network_test.py │ │ ├── networkmanagement.py │ │ ├── networkmanagement_stub.py │ │ ├── notebooks.py │ │ ├── notebooks_stub.py │ │ ├── notebooks_test.py │ │ ├── orgpolicy.py │ │ ├── orgpolicy_test.py │ │ ├── osconfig.py │ │ ├── osconfig_stub.py │ │ ├── osconfig_test.py │ │ ├── pubsub.py │ │ ├── pubsub_stub.py │ │ ├── pubsub_test.py │ │ ├── quotas.py │ │ ├── recommender_stub.py │ │ ├── vertex.py │ │ ├── vertex_stub.py │ │ ├── vertex_test.py │ │ ├── vpn.py │ │ ├── vpn_stub.py │ │ ├── vpn_test.py │ │ ├── web.py │ │ ├── web_stub.py │ │ └── web_test.py │ ├── rule_classes.py │ ├── runbook/ │ │ ├── __init__.py │ │ ├── bigquery/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── failed_query.py │ │ │ ├── failed_query_test.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── snapshots/ │ │ │ │ └── failed_query.txt │ │ │ └── templates/ │ │ │ ├── generics.jinja │ │ │ └── permissions.jinja │ │ ├── cloudrun/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── service_deployment.py │ │ │ ├── service_deployment_test.py │ │ │ ├── snapshots/ │ │ │ │ └── service_deployment.txt │ │ │ └── templates/ │ │ │ └── service_deployment.jinja │ │ ├── command.py │ │ ├── command_test.py │ │ ├── constants.py │ │ ├── crm/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ └── templates/ │ │ │ └── orgpolicy.jinja │ │ ├── dataflow/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── failed_streaming_pipeline.py │ │ │ ├── failed_streaming_pipeline_test.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── job_permissions.py │ │ │ ├── job_permissions_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── failed_streaming_pipeline.txt │ │ │ │ └── job_permissions.txt │ │ │ └── templates/ │ │ │ ├── generics.jinja │ │ │ └── permissions.jinja │ │ ├── dataproc/ │ │ │ ├── __init__.py │ │ │ ├── cluster_creation.py │ │ │ ├── cluster_creation_test.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── cluster_creation.txt │ │ │ │ └── spark_job_failures.txt │ │ │ ├── spark_job_failures.py │ │ │ ├── spark_job_failures_test.py │ │ │ └── templates/ │ │ │ ├── dataproc_attributes.jinja │ │ │ ├── job.jinja │ │ │ ├── logs_related.jinja │ │ │ ├── network.jinja │ │ │ └── permissions.jinja │ │ ├── exceptions.py │ │ ├── flags.py │ │ ├── gce/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── disk_performance_benchmark/ │ │ │ │ ├── a-family.json │ │ │ │ ├── c-family.json │ │ │ │ ├── e-family.json │ │ │ │ ├── f-family.json │ │ │ │ ├── g-family.json │ │ │ │ ├── h-family.json │ │ │ │ ├── limits_per_gb.json │ │ │ │ ├── m-family.json │ │ │ │ ├── n-family.json │ │ │ │ ├── t-family.json │ │ │ │ └── z-family.json │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── guestos_bootup.py │ │ │ ├── guestos_bootup_test.py │ │ │ ├── ops_agent.py │ │ │ ├── ops_agent_test.py │ │ │ ├── serial_log_analyzer.py │ │ │ ├── serial_log_analyzer_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── guestos_bootup.txt │ │ │ │ ├── ops_agent.txt │ │ │ │ ├── serial_log_analyzer.txt │ │ │ │ ├── ssh.txt │ │ │ │ ├── vm_creation.txt │ │ │ │ ├── vm_performance.txt │ │ │ │ └── vm_termination.txt │ │ │ ├── ssh.py │ │ │ ├── ssh_test.py │ │ │ ├── templates/ │ │ │ │ ├── generics.jinja │ │ │ │ ├── instance_property.jinja │ │ │ │ ├── mig_autoscaling.jinja │ │ │ │ ├── permissions.jinja │ │ │ │ ├── vm_attributes.jinja │ │ │ │ ├── vm_creation.jinja │ │ │ │ ├── vm_metadata.jinja │ │ │ │ ├── vm_ops.jinja │ │ │ │ ├── vm_performance.jinja │ │ │ │ ├── vm_serial_log.jinja │ │ │ │ ├── vm_termination.jinja │ │ │ │ └── vpc_connectivity.jinja │ │ │ ├── util/ │ │ │ │ ├── __init__.py │ │ │ │ └── util_test.py │ │ │ ├── vm_creation.py │ │ │ ├── vm_creation_test.py │ │ │ ├── vm_performance.py │ │ │ ├── vm_performance_test.py │ │ │ ├── vm_termination.py │ │ │ └── vm_termination_test.py │ │ ├── gcf/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── failed_deployments.py │ │ │ ├── failed_deployments_test.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── snapshots/ │ │ │ │ └── failed_deployments.txt │ │ │ └── templates/ │ │ │ └── failed_deployments.jinja │ │ ├── gcp/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ └── templates/ │ │ │ ├── api.jinja │ │ │ └── resource_attribute.jinja │ │ ├── gke/ │ │ │ ├── __init__.py │ │ │ ├── cluster_autoscaler.py │ │ │ ├── cluster_autoscaler_test.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── gke_ip_masq_standard.py │ │ │ ├── gke_ip_masq_standard_test.py │ │ │ ├── image_pull.py │ │ │ ├── image_pull_test.py │ │ │ ├── ip_exhaustion.py │ │ │ ├── ip_exhaustion_test.py │ │ │ ├── logs.py │ │ │ ├── logs_test.py │ │ │ ├── monitoring_configuration.py │ │ │ ├── monitoring_configuration_test.py │ │ │ ├── node_auto_repair.py │ │ │ ├── node_auto_repair_test.py │ │ │ ├── node_bootstrapping.py │ │ │ ├── node_bootstrapping_test.py │ │ │ ├── node_unavailability.py │ │ │ ├── node_unavailability_test.py │ │ │ ├── resource_quotas.py │ │ │ ├── resource_quotas_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── cluster_autoscaler.txt │ │ │ │ ├── gke_ip_masq_standard.txt │ │ │ │ ├── image_pull.txt │ │ │ │ ├── ip_exhaustion.txt │ │ │ │ ├── logs.txt │ │ │ │ ├── monitoring_configuration.txt │ │ │ │ ├── node_auto_repair.txt │ │ │ │ ├── node_bootstrapping.txt │ │ │ │ ├── node_unavailability.txt │ │ │ │ └── resource_quotas.txt │ │ │ └── templates/ │ │ │ ├── clusterautoscaler.jinja │ │ │ ├── imagepull.jinja │ │ │ ├── ipexhaustion.jinja │ │ │ ├── ipmasq_standard.jinja │ │ │ ├── logs.jinja │ │ │ ├── monitoring_configuration.jinja │ │ │ ├── nodeautorepair.jinja │ │ │ ├── nodebootstrapping.jinja │ │ │ ├── nodeunavailability.jinja │ │ │ └── resourcequotas.jinja │ │ ├── iam/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ └── templates/ │ │ │ ├── permissions.jinja │ │ │ └── service_account.jinja │ │ ├── interconnect/ │ │ │ ├── __init__.py │ │ │ ├── bgp_down_flap.py │ │ │ ├── bgp_down_flap_test.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── snapshots/ │ │ │ │ └── bgp_down_flap.txt │ │ │ └── templates/ │ │ │ └── bgp_down_flap.jinja │ │ ├── lb/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── latency.py │ │ │ ├── latency_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── latency.txt │ │ │ │ ├── ssl_certificates.txt │ │ │ │ └── unhealthy_backends.txt │ │ │ ├── ssl_certificates.py │ │ │ ├── ssl_certificates_test.py │ │ │ ├── templates/ │ │ │ │ ├── latency.jinja │ │ │ │ ├── ssl_certificates.jinja │ │ │ │ └── unhealthy_backends.jinja │ │ │ ├── unhealthy_backends.py │ │ │ └── unhealthy_backends_test.py │ │ ├── logs/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ └── templates/ │ │ │ └── logging.jinja │ │ ├── monitoring/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ └── templates/ │ │ │ └── metrics.jinja │ │ ├── nat/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── out_of_resources.py │ │ │ ├── out_of_resources_test.py │ │ │ ├── public_nat_ip_allocation_failed.py │ │ │ ├── public_nat_ip_allocation_failed_test.py │ │ │ ├── snapshots/ │ │ │ │ └── public_nat_ip_allocation_failed.txt │ │ │ ├── templates/ │ │ │ │ ├── nat_ip_allocation_failed.jinja │ │ │ │ └── nat_out_of_resources.jinja │ │ │ ├── utils.py │ │ │ └── utils_test.py │ │ ├── op.py │ │ ├── op_test.py │ │ ├── output/ │ │ │ ├── __init__.py │ │ │ ├── api_output.py │ │ │ ├── base_output.py │ │ │ └── terminal_output.py │ │ ├── pubsub/ │ │ │ ├── __init__.py │ │ │ ├── bigquery_subscription_delivery.py │ │ │ ├── bigquery_subscription_delivery_test.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── gcs_subscription_delivery.py │ │ │ ├── gcs_subscription_delivery_test.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── pull_subscription_delivery.py │ │ │ ├── pull_subscription_delivery_test.py │ │ │ ├── push_subscription_delivery.py │ │ │ ├── push_subscription_delivery_test.py │ │ │ ├── snapshots/ │ │ │ │ ├── bigquery_subscription_delivery.txt │ │ │ │ ├── gcs_subscription_delivery.txt │ │ │ │ ├── pull_subscription_delivery.txt │ │ │ │ └── push_subscription_delivery.txt │ │ │ └── templates/ │ │ │ └── generics.jinja │ │ ├── report.py │ │ ├── report_test.py │ │ ├── runbook_test.py │ │ ├── snapshot_test_base.py │ │ ├── util.py │ │ ├── util_test.py │ │ ├── vertex/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── snapshots/ │ │ │ │ └── workbench_instance_stuck_in_provisioning.txt │ │ │ ├── templates/ │ │ │ │ ├── workbench_compute.jinja │ │ │ │ ├── workbench_container.jinja │ │ │ │ ├── workbench_environment_version.jinja │ │ │ │ ├── workbench_images.jinja │ │ │ │ ├── workbench_ip.jinja │ │ │ │ ├── workbench_jupyter_port.jinja │ │ │ │ ├── workbench_jupyter_space.jinja │ │ │ │ ├── workbench_scripts.jinja │ │ │ │ ├── workbench_state.jinja │ │ │ │ └── workbench_system_logs.jinja │ │ │ ├── workbench_instance_stuck_in_provisioning.py │ │ │ └── workbench_instance_stuck_in_provisioning_test.py │ │ ├── vpc/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── flags.py │ │ │ ├── generalized_steps.py │ │ │ ├── generalized_steps_test.py │ │ │ ├── snapshots/ │ │ │ │ └── vm_external_ip_connectivity.txt │ │ │ ├── templates/ │ │ │ │ ├── rca.jinja │ │ │ │ └── vm_external_ip_connectivity.jinja │ │ │ ├── util.py │ │ │ ├── vm_external_ip_connectivity.py │ │ │ └── vm_external_ip_connectivity_test.py │ │ └── vpn/ │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── flags.py │ │ ├── generalized_steps.py │ │ ├── generalized_steps_test.py │ │ ├── snapshots/ │ │ │ └── vpn_tunnel_check.txt │ │ ├── templates/ │ │ │ └── vpn_check.jinja │ │ ├── vpn_tunnel_check.py │ │ └── vpn_tunnel_check_test.py │ ├── search/ │ │ ├── __init__.py │ │ ├── command.py │ │ ├── command_test.py │ │ ├── util.py │ │ └── util_test.py │ ├── types.py │ ├── types_test.py │ ├── utils.py │ └── utils_test.py ├── pyinstaller/ │ ├── hook-gcpdiag.lint.py │ ├── hook-gcpdiag.queries.py │ ├── hook-gcpdiag.runbook.py │ └── hook-googleapiclient.model.py ├── pyinstaller.spec ├── requirements.in ├── requirements.txt ├── test-data/ │ ├── Makefile.inc │ ├── README.md │ ├── apigee1/ │ │ ├── Makefile │ │ ├── apigee1.tf │ │ ├── json-dumps/ │ │ │ ├── apigee-envgroups-attachments-empty.json │ │ │ ├── apigee-envgroups-gcpdiag-demo-envgroup-1-attachments.json │ │ │ ├── apigee-envgroups.json │ │ │ ├── apigee-instances-gcpdiag-apigee1-inst1-aaaa-attachments.json │ │ │ ├── apigee-instances.json │ │ │ ├── apigee-key.json │ │ │ ├── apigee-organization.json │ │ │ ├── apigee-organizations.json │ │ │ ├── compute-effective-firewalls-apigee-network.json │ │ │ ├── compute-migs-us-central1.json │ │ │ ├── compute-network-apigee-network.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-subnetworks-aggregated.json │ │ │ ├── compute-subnetworks-apigee-subnetwork.json │ │ │ ├── compute-templates.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── kms-key-iam-policy.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── bigquery1/ │ │ ├── Makefile │ │ ├── job.tf │ │ ├── json-dumps/ │ │ │ ├── ancestor.json │ │ │ ├── bigquery-failed-job.json │ │ │ ├── iam-policy.json │ │ │ ├── job_get_invalid-region_id.json │ │ │ ├── job_get_us_IS.json │ │ │ ├── job_get_us_csv.json │ │ │ ├── job_get_us_duplicate.json │ │ │ ├── job_get_us_error.json │ │ │ ├── job_get_us_errors.json │ │ │ ├── job_get_us_job.json │ │ │ ├── job_get_us_job1.json │ │ │ ├── job_get_us_job2.json │ │ │ ├── job_get_us_notfound.json │ │ │ ├── job_get_us_running.json │ │ │ ├── job_get_us_success.json │ │ │ ├── job_get_us_unknown.json │ │ │ ├── job_results_us_IS_.json │ │ │ ├── job_results_us_mockresult1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── billing1/ │ │ ├── Makefile │ │ └── json-dumps/ │ │ ├── all_billing_account_projects.json │ │ ├── all_billing_accounts.json │ │ ├── billing_account.json │ │ ├── cost_insights.json │ │ ├── project.json │ │ ├── project_billing_info.json │ │ ├── projects.json │ │ └── services.json │ ├── cloudasset1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── project.json │ │ │ ├── search-all-resources-us-central1.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variable.tf │ ├── cloudrun1/ │ │ ├── Makefile │ │ ├── cloudrun1.tf │ │ ├── json-dumps/ │ │ │ ├── cloudrun_services.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── locations.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── cloudrun2/ │ │ ├── Makefile │ │ ├── artifact_registry.tf │ │ ├── build_configs/ │ │ │ └── deploy_run_with_bad_container/ │ │ │ ├── Dockerfile │ │ │ └── cloudbuild.yaml │ │ ├── cloud_run.tf │ │ ├── json-dumps/ │ │ │ ├── cloudrun_services.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── locations.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── cloudsql1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── cloudsql-instances.json │ │ │ ├── iam-policy.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── sql1.tf │ │ └── variables.tf │ ├── composer1/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── composer-env1.tf │ │ ├── composer-env2.tf │ │ ├── json-dumps/ │ │ │ ├── composer-environments-us-central1.json │ │ │ ├── compute-regions.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-account-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── provider.tf │ │ └── variables.tf │ ├── dataflow1/ │ │ ├── Makefile │ │ ├── bucket.tf │ │ ├── job.tf │ │ ├── json-dumps/ │ │ │ ├── dataflow-jobs-aggregated.json │ │ │ ├── dataflow-jobs-us-central1-2024-06-19_09_43_07-14927685200167458422.json │ │ │ ├── dataflow-jobs-us-central1-streaming.json │ │ │ ├── dataflow-jobs-us-central1.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── log-exclusions.json │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── streaming_job.tf │ │ └── variables.tf │ ├── datafusion1/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── datafusion.tf │ │ ├── json-dumps/ │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-subnetworks-aggregated.json │ │ │ ├── compute-subnetworks-europe-west4.json │ │ │ ├── compute-subnetworks-us-central1.json │ │ │ ├── datafusion-default-application-pipeline1-preferences.json │ │ │ ├── datafusion-default-applications.json │ │ │ ├── datafusion-default-namespace-preferences.json │ │ │ ├── datafusion-default-user-compute-profile.json │ │ │ ├── datafusion-instances.json │ │ │ ├── datafusion-instances1.json │ │ │ ├── datafusion-system-compute-profile.json │ │ │ ├── datafusion-system-preferences.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-account-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── namespaces.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── dataproc1/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── dataproc_cluster.tf │ │ ├── job.tf │ │ ├── json-dumps/ │ │ │ ├── autoscaling-policy.json │ │ │ ├── compute-instances-us-central1-a.json │ │ │ ├── compute-instances-us-central1-b.json │ │ │ ├── compute-instances-us-central1-c.json │ │ │ ├── compute-instances-us-central1-f.json │ │ │ ├── compute-network-test-bad-network.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-subnetworks-aggregated.json │ │ │ ├── connectivity-test.json │ │ │ ├── dataproc-clusters-us-central1.json │ │ │ ├── dataproc-job-failed.json │ │ │ ├── dataproc-job-success.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── network.tf │ │ ├── project.tf │ │ ├── provider.tf │ │ └── variables.tf │ ├── dataproc2/ │ │ └── json-dumps/ │ │ ├── logging-entries-1.json │ │ ├── project.json │ │ └── services.json │ ├── dataproc3/ │ │ └── json-dumps/ │ │ ├── logging-entries-1.json │ │ ├── project.json │ │ └── services.json │ ├── fw-policy/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── firewall.tf │ │ ├── fw-policy.tf │ │ ├── json-dumps/ │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-instances-europe-west2-b.json │ │ │ ├── compute-migs-europe-west2-b.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── compute-subnetworks-aggregated.json │ │ │ ├── compute-subnetworks-europe-west4.json │ │ │ ├── compute-zones.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-roles-custom.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── org-constraint-compute.disableSerialPortAccess.json │ │ │ ├── org-constraint-compute.disableSerialPortLogging.json │ │ │ ├── org-constraint-compute.disableSshInBrowser.json │ │ │ ├── org-constraint-compute.requireOsLogin.json │ │ │ ├── org-constraint-compute.requireShieldedVm.json │ │ │ ├── org-constraint-custom.arEnforceImmutableTags.json │ │ │ ├── org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json │ │ │ ├── org-constraint-iam.disableCrossProjectServiceAccountUsage.json │ │ │ ├── org-constraints.json │ │ │ ├── org-policies.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── org-policy.tf │ │ ├── project.tf │ │ └── variables.tf │ ├── gaes1/ │ │ ├── Makefile │ │ ├── gaes1-bucket-object.tf │ │ ├── gaes1-bucket.tf │ │ ├── gaes1.tf │ │ ├── json-dumps/ │ │ │ ├── appengine_services.json │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ ├── services.json │ │ │ └── versions.json │ │ ├── project.tf │ │ └── variables.tf │ ├── gcb1/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── artifact_registry.tf │ │ ├── buckets.tf │ │ ├── build_configs/ │ │ │ ├── .gitignore │ │ │ ├── cloudbuild1.yaml.tpl │ │ │ ├── cloudbuild2.yaml.tpl │ │ │ ├── cloudbuild3.yaml.tpl │ │ │ └── cloudbuild4.yaml.tpl │ │ ├── build_configs.tf │ │ ├── json-dumps/ │ │ │ ├── artifact-registry-policy.json │ │ │ ├── artifact-registry-project-settings.json │ │ │ ├── bucket-gcpdiag-gcb1-bucket1-aaaa.json │ │ │ ├── cloudbuild-empty.json │ │ │ ├── cloudbuild-triggers.json │ │ │ ├── cloudbuild-us-central1.json │ │ │ ├── cloudbuild.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── service_accounts.tf │ │ ├── source_repository.tf │ │ ├── trigger.tf │ │ └── variables.tf │ ├── gce-image-license/ │ │ ├── Makefile │ │ └── json-dumps/ │ │ ├── centos-cloud-licenses.json │ │ ├── cos-cloud-licenses.json │ │ ├── debian-cloud-licenses.json │ │ ├── fedora-cloud-licenses.json │ │ ├── fedora-coreos-cloud-licenses.json │ │ ├── opensuse-cloud-licenses.json │ │ ├── rhel-cloud-licenses.json │ │ ├── rhel-sap-cloud-licenses.json │ │ ├── rocky-linux-cloud-licenses.json │ │ ├── suse-cloud-licenses.json │ │ ├── suse-sap-cloud-licenses.json │ │ ├── ubuntu-os-cloud-licenses.json │ │ ├── ubuntu-os-pro-cloud-licenses.json │ │ ├── windows-cloud-licenses.json │ │ └── windows-sql-cloud-licenses.json │ ├── gce1/ │ │ ├── Makefile │ │ ├── gce1.tf │ │ ├── gce2.tf │ │ ├── gke.tf │ │ ├── healthchecks.tf │ │ ├── ig1.tf │ │ ├── json-dumps/ │ │ │ ├── compute-disks-europe-west1-b.json │ │ │ ├── compute-disks-europe-west2-b.json │ │ │ ├── compute-disks-europe-west4-a.json │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-igs-aggregated.json │ │ │ ├── compute-igs-europe-west1-b.json │ │ │ ├── compute-igs-europe-west2-b.json │ │ │ ├── compute-igs-europe-west4-a.json │ │ │ ├── compute-igs-europe-west4-b.json │ │ │ ├── compute-instances-aggregated.json │ │ │ ├── compute-instances-europe-west1-b-2.json │ │ │ ├── compute-instances-europe-west1-b.json │ │ │ ├── compute-instances-europe-west2-b.json │ │ │ ├── compute-instances-europe-west4-a-2.json │ │ │ ├── compute-instances-europe-west4-a.json │ │ │ ├── compute-instances-europe-west4-b.json │ │ │ ├── compute-licenses.json │ │ │ ├── compute-migs-aggregated.json │ │ │ ├── compute-migs-europe-west1-b.json │ │ │ ├── compute-migs-europe-west2-b.json │ │ │ ├── compute-migs-europe-west4-a.json │ │ │ ├── compute-negs-empty.json │ │ │ ├── compute-negs-europe-west1-b.json │ │ │ ├── compute-negs-europe-west4-b.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-network-routes.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-serial-port-output-1010101010.json │ │ │ ├── compute-serial-port-output-1010101011.json │ │ │ ├── compute-subnetwork-policy.json │ │ │ ├── compute-subnetworks-aggregated.json │ │ │ ├── compute-subnetworks-europe-west4.json │ │ │ ├── compute-templates.json │ │ │ ├── compute-zones.json │ │ │ ├── healthChecks.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-roles-get.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── mig.tf │ │ ├── neg1.tf │ │ ├── project.tf │ │ ├── terraform │ │ └── variables.tf │ ├── gce2/ │ │ ├── Makefile │ │ ├── gce_faulty_ssh.tf │ │ ├── gce_valid_ssh.tf │ │ ├── json-dumps/ │ │ │ ├── compute-disks-europe-west1-b.json │ │ │ ├── compute-disks-europe-west2-a.json │ │ │ ├── compute-disks-europe-west2-b.json │ │ │ ├── compute-disks-europe-west4-a.json │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-igs-europe-west1-b.json │ │ │ ├── compute-igs-europe-west2-b.json │ │ │ ├── compute-igs-europe-west4-a.json │ │ │ ├── compute-instances-europe-west1-b-2.json │ │ │ ├── compute-instances-europe-west1-b.json │ │ │ ├── compute-instances-europe-west2-a.json │ │ │ ├── compute-instances-europe-west2-b.json │ │ │ ├── compute-instances-europe-west4-a-2.json │ │ │ ├── compute-instances-europe-west4-a.json │ │ │ ├── compute-licenses.json │ │ │ ├── compute-migs-europe-west1-b.json │ │ │ ├── compute-migs-europe-west2-b.json │ │ │ ├── compute-migs-europe-west4-a.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-network-routes.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-serial-port-output-1010101010.json │ │ │ ├── compute-serial-port-output-1010101011.json │ │ │ ├── compute-serial-port-output-faulty-linux-ssh.json │ │ │ ├── compute-serial-port-output-faulty-windows-ssh.json │ │ │ ├── compute-serial-port-output-valid-linux-ssh.json │ │ │ ├── compute-serial-port-output-valid-windows-ssh.json │ │ │ ├── compute-subnetwork-policy.json │ │ │ ├── compute-subnetworks-aggregated.json │ │ │ ├── compute-subnetworks-europe-west4.json │ │ │ ├── compute-templates.json │ │ │ ├── compute-zones.json │ │ │ ├── healthChecks.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-roles-get.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── gce3/ │ │ ├── Makefile │ │ ├── faulty-opsagent.tf │ │ ├── json-dumps/ │ │ │ ├── compute-disks-europe-west2-b.json │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-instances-europe-west2-a.json │ │ │ ├── compute-instances-europe-west2-b.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-zones.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-roles-custom.json │ │ │ ├── iam-roles-get.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── org-constraint-compute.disableSerialPortAccess.json │ │ │ ├── org-constraint-compute.disableSerialPortLogging.json │ │ │ ├── org-constraint-compute.disableSshInBrowser.json │ │ │ ├── org-constraint-compute.requireOsLogin.json │ │ │ ├── org-constraint-compute.requireShieldedVm.json │ │ │ ├── org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json │ │ │ ├── org-constraint-iam.disableCrossProjectServiceAccountUsage.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── orgpolicy.tf │ │ ├── project.tf │ │ ├── terraform │ │ ├── variables.tf │ │ └── working-opsagent.tf │ ├── gce4/ │ │ ├── Makefile │ │ ├── gce_faulty_ssh.tf │ │ ├── gce_valid_ssh.tf │ │ ├── json-dumps/ │ │ │ ├── compute-disks-europe-west1-b.json │ │ │ ├── compute-disks-europe-west2-a.json │ │ │ ├── compute-disks-europe-west2-b.json │ │ │ ├── compute-disks-europe-west4-a.json │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-igs-europe-west1-b.json │ │ │ ├── compute-igs-europe-west2-b.json │ │ │ ├── compute-igs-europe-west4-a.json │ │ │ ├── compute-instances-europe-west1-b-2.json │ │ │ ├── compute-instances-europe-west1-b.json │ │ │ ├── compute-instances-europe-west2-a.json │ │ │ ├── compute-instances-europe-west2-b.json │ │ │ ├── compute-instances-europe-west4-a-2.json │ │ │ ├── compute-instances-europe-west4-a.json │ │ │ ├── compute-licenses.json │ │ │ ├── compute-migs-europe-west1-b.json │ │ │ ├── compute-migs-europe-west2-b.json │ │ │ ├── compute-migs-europe-west4-a.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-network-routes.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-serial-port-output-1010101010.json │ │ │ ├── compute-serial-port-output-1010101011.json │ │ │ ├── compute-serial-port-output-faulty-linux-ssh.json │ │ │ ├── compute-serial-port-output-faulty-windows-ssh.json │ │ │ ├── compute-serial-port-output-valid-linux-ssh.json │ │ │ ├── compute-serial-port-output-valid-windows-ssh.json │ │ │ ├── compute-subnetwork-policy.json │ │ │ ├── compute-subnetworks-aggregated.json │ │ │ ├── compute-subnetworks-europe-west4.json │ │ │ ├── compute-templates.json │ │ │ ├── compute-zones.json │ │ │ ├── global-operations.json │ │ │ ├── healthChecks.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-roles-get.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── gce5/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── compute-disks-europe-west2-b.json │ │ │ ├── compute-disks-us-central1-c.json │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-instances-aggregated.json │ │ │ ├── compute-instances-europe-west2-b.json │ │ │ ├── compute-instances-us-central1-c.json │ │ │ ├── compute-migs-aggregated.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-zones.json │ │ │ ├── global-operations.json │ │ │ ├── healthChecks.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── main.tf │ │ ├── project.tf │ │ └── variables.tf │ ├── gce6/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── compute-disks-europe-west2-b.json │ │ │ ├── compute-disks-us-central1-c.json │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-instances-aggregated.json │ │ │ ├── compute-instances-us-central1-c.json │ │ │ ├── compute-migs-aggregated.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── global-operations.json │ │ │ ├── healthChecks.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── main.tf │ │ ├── project.tf │ │ └── variables.tf │ ├── gcf1/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── gcf1.tf │ │ ├── json-dumps/ │ │ │ ├── cloudfunctions-empty.json │ │ │ ├── cloudfunctions-us-central1.json │ │ │ ├── cloudfunctions.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── sample-code/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ └── variables.tf │ ├── gcf2/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── gcf2.tf │ │ ├── json-dumps/ │ │ │ ├── cloudfunctions-empty.json │ │ │ ├── cloudfunctions-europe-west2.json │ │ │ ├── cloudfunctions.json │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── sourcecode/ │ │ │ ├── memalloc.py │ │ │ └── requirements.txt │ │ └── variables.tf │ ├── gcs1/ │ │ ├── Makefile │ │ ├── gcs1.tf │ │ ├── json-dumps/ │ │ │ ├── bucket-gcpdiag-gcs1bucket2-aaaa.json │ │ │ ├── bucket-roles.json │ │ │ ├── project.json │ │ │ ├── services.json │ │ │ └── storage.json │ │ ├── project.tf │ │ └── variables.tf │ ├── gke1/ │ │ ├── Makefile │ │ ├── firewall.tf.old │ │ ├── gke1.tf │ │ ├── gke2.tf │ │ ├── gke3.tf │ │ ├── gke4.tf │ │ ├── gke5.tf │ │ ├── gke6.tf │ │ ├── json-dumps/ │ │ │ ├── backendServices.json │ │ │ ├── compute-addresses.json │ │ │ ├── compute-disks-europe-west1-b.json │ │ │ ├── compute-disks-europe-west4-a.json │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-igs-empty.json │ │ │ ├── compute-instances-aggregated.json │ │ │ ├── compute-instances-empty.json │ │ │ ├── compute-instances-europe-west4-a.json │ │ │ ├── compute-interconnect1.json │ │ │ ├── compute-interconnect2.json │ │ │ ├── compute-interconnect3.json │ │ │ ├── compute-interconnect4.json │ │ │ ├── compute-interconnects.json │ │ │ ├── compute-migs-aggregated.json │ │ │ ├── compute-migs-empty.json │ │ │ ├── compute-migs-europe-west4-a.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-routers-europe-west4.json │ │ │ ├── compute-routers-us-east4.json │ │ │ ├── compute-routers-us-west2.json │ │ │ ├── compute-subnetwork-policy.json │ │ │ ├── compute-subnetworks-aggregated.json │ │ │ ├── compute-subnetworks-europe-west4.json │ │ │ ├── compute-templates.json │ │ │ ├── compute-zones.json │ │ │ ├── container-clusters.json │ │ │ ├── container-kubectl.json │ │ │ ├── container-server-config-europe-west4-a.json │ │ │ ├── container-server-config-europe-west4.json │ │ │ ├── forwardingRules.json │ │ │ ├── healthChecks.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-roles-custom.json │ │ │ ├── iam-roles-get.json │ │ │ ├── iam-service-account-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── instances.json │ │ │ ├── interconnect-attachment1.json │ │ │ ├── interconnect-attachments.json │ │ │ ├── kms-key-destroyed.json │ │ │ ├── kms-key-disabled.json │ │ │ ├── kms-key-enabled.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── org-constraint-compute.disableSerialPortAccess.json │ │ │ ├── org-constraint-compute.disableSerialPortLogging.json │ │ │ ├── org-constraint-compute.disableSshInBrowser.json │ │ │ ├── org-constraint-compute.requireOsLogin.json │ │ │ ├── org-constraint-compute.requireShieldedVm.json │ │ │ ├── org-constraint-custom.arEnforceImmutableTags.json │ │ │ ├── org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json │ │ │ ├── org-constraint-iam.disableCrossProjectServiceAccountUsage.json │ │ │ ├── org-constraints.json │ │ │ ├── org-policies.json │ │ │ ├── project.json │ │ │ ├── services.json │ │ │ ├── subscriptions.json │ │ │ └── topics.json │ │ ├── project.tf │ │ └── variables.tf │ ├── gke2/ │ │ ├── Makefile │ │ └── json-dumps/ │ │ ├── compute-disks-empty.json │ │ ├── compute-disks-europe-west10-a.json │ │ ├── compute-disks-europe-west2-b.json │ │ ├── compute-effective-firewalls-default.json │ │ ├── compute-igs-empty.json │ │ ├── compute-igs-europe-west2-b.json │ │ ├── compute-instances-empty.json │ │ ├── compute-instances-europe-west10-a.json │ │ ├── compute-instances-europe-west2-b.json │ │ ├── compute-interconnects.json │ │ ├── compute-migs-empty.json │ │ ├── compute-migs-europe-west10-a.json │ │ ├── compute-migs-europe-west2-b.json │ │ ├── compute-network-default.json │ │ ├── compute-project.json │ │ ├── compute-regions.json │ │ ├── compute-routers-europe-west4.json │ │ ├── compute-subnetwork-policy.json │ │ ├── compute-subnetworks-aggregated.json │ │ ├── compute-templates.json │ │ ├── compute-zones.json │ │ ├── container-clusters.json │ │ ├── container-server-config-europe-west10-a.json │ │ ├── container-server-config-europe-west10.json │ │ ├── iam-policy.json │ │ ├── iam-roles-custom.json │ │ ├── iam-roles-get.json │ │ ├── iam-service-account-policy.json │ │ ├── iam-service-accounts.json │ │ ├── logging-entries-1.json │ │ ├── monitoring-query.json │ │ ├── project.json │ │ └── services.json │ ├── gke3/ │ │ ├── Makefile │ │ ├── cluster-1.tf │ │ ├── json-dumps/ │ │ │ ├── container-cluster-cluster-1.json │ │ │ ├── container-clusters.json │ │ │ ├── logging-entries-1.json │ │ │ ├── logging-entries-2.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── network.tf │ │ ├── project.tf │ │ └── variables.tf │ ├── gke4/ │ │ ├── Makefile │ │ ├── cluster.tf │ │ ├── json-dumps/ │ │ │ ├── container-clusters.json │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── iam1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── monitoring-query.json │ │ │ ├── org-constraint-compute.disableSerialPortAccess.json │ │ │ ├── org-constraint-compute.disableSerialPortLogging.json │ │ │ ├── org-constraint-compute.disableSshInBrowser.json │ │ │ ├── org-constraint-compute.requireOsLogin.json │ │ │ ├── org-constraint-compute.requireShieldedVm.json │ │ │ ├── org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json │ │ │ ├── org-constraint-iam.disableCrossProjectServiceAccountUsage.json │ │ │ ├── org-constraints.json │ │ │ ├── org-policies.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── interconnect1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── compute-interconnects.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── compute-routers-routerStatus-dummy-router1.json │ │ │ ├── compute-routers-routerStatus-dummy-router11.json │ │ │ ├── compute-routers-routerStatus-dummy-router2.json │ │ │ ├── compute-routers-routerStatus-dummy-router3.json │ │ │ ├── compute-routers-us-central1.json │ │ │ ├── compute-routers-us-east4.json │ │ │ ├── compute-routers-us-west2.json │ │ │ ├── interconnect-attachments.json │ │ │ ├── logging-entries-1.json │ │ │ └── project.json │ │ ├── project.tf │ │ └── variables.tf │ ├── lb1/ │ │ ├── Makefile │ │ ├── http-lb-mig.tf │ │ ├── json-dumps/ │ │ │ ├── compute-aggregated-backendServices.json │ │ │ ├── compute-aggregated-forwardingRules.json │ │ │ ├── compute-backendServices.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── healthChecks.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── lb2/ │ │ ├── Makefile │ │ ├── http-lb-mig.tf │ │ ├── json-dumps/ │ │ │ ├── backendService-web-backend-service-get-health-instanceGroups-lb-backend-example-us-east1-b.json │ │ │ ├── compute-aggregated-backendServices.json │ │ │ ├── compute-aggregated-forwardingRules.json │ │ │ ├── compute-backendServices-europe-west4.json │ │ │ ├── compute-igs-aggregated.json │ │ │ ├── compute-igs-us-east1-b.json │ │ │ ├── compute-instances-europe-west4-b.json │ │ │ ├── compute-instances-us-east1-b.json │ │ │ ├── compute-negs-europe-west4-b.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── compute-serial-port-output-neg-vm.json │ │ │ ├── compute-serial-port-output-vm-pn3l.json │ │ │ ├── compute-zones.json │ │ │ ├── healthChecks.json │ │ │ ├── lb-insights-europe-west4.json │ │ │ ├── lb-insights-global.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ ├── regionBackendService-backend-service-2-europe-west4-get-health-networkEndpointGroups-neg1-europe-west4-b.json │ │ │ ├── regionHealthChecks-europe-west4.json │ │ │ └── services.json │ │ ├── passthrough-lb-neg.tf │ │ ├── project.tf │ │ └── variables.tf │ ├── lb3/ │ │ ├── Makefile │ │ ├── certs.tf │ │ ├── https-lb.tf │ │ ├── json-dumps/ │ │ │ ├── compute-aggregated-backendServices.json │ │ │ ├── compute-aggregated-forwardingRules.json │ │ │ ├── compute-aggregated-targetHttpsProxies.json │ │ │ ├── compute-sslCertificates.json │ │ │ ├── compute-targetHttpsProxies.json │ │ │ ├── compute-targetSslProxies.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── ssl-lb.tf │ │ ├── update_ip.py │ │ └── variables.tf │ ├── looker1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── logging-entries-1.json │ │ │ ├── looker-instances.json │ │ │ ├── looker.json │ │ │ ├── operation.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── nat1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── compute-instances-europe-west4-a.json │ │ │ ├── compute-instances-us-central1-a.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-network-nat-vpc-network.json │ │ │ ├── compute-network-nat_vpc_network.json │ │ │ ├── compute-routers-europe-west4.json │ │ │ ├── compute-routers-natIpInfo-public-nat-cloud-router.json │ │ │ ├── compute-routers-natMappingInfo-public-nat-cloud-router.json │ │ │ ├── compute-routers-natMappingInfo-public_nat_cloud_router.json │ │ │ ├── compute-routers-routerStatus-public-nat-cloud-router.json │ │ │ ├── compute-routers-routerStatus-public_nat_cloud_router.json │ │ │ ├── compute-routers-us-central1.json │ │ │ ├── monitoring-query-nat-allocation-failed.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── public-cloud-nat.tf │ │ └── variables.tf │ ├── notebooks1/ │ │ ├── Makefile │ │ ├── instances1.tf │ │ ├── json-dumps/ │ │ │ ├── health-state.json │ │ │ ├── instances.json │ │ │ ├── is-upgradeable.json │ │ │ ├── project.json │ │ │ ├── runtimes.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── runtimes1.tf │ │ └── variables.tf │ ├── notebooks2/ │ │ ├── Makefile │ │ ├── instance_ok.tf │ │ ├── instance_provisioning_stuck.tf │ │ ├── json-dumps/ │ │ │ ├── compute-instances-disks-us-west1-a.json │ │ │ ├── compute-instances-us-west1-a.json │ │ │ ├── compute-serial-port-output-notebooks2instance-ok.json │ │ │ ├── compute-serial-port-output-notebooks2instance-provisioning-stuck.json │ │ │ ├── logging-entries-1.json │ │ │ ├── monitoring-query.json │ │ │ ├── notebooks2instance-ok-check-upgradability.json │ │ │ ├── notebooks2instance-provisioning-stuck-check-upgradability.json │ │ │ ├── org-constraint-compute.disableSerialPortAccess.json │ │ │ ├── org-constraint-compute.disableSerialPortLogging.json │ │ │ ├── org-constraint-compute.disableSshInBrowser.json │ │ │ ├── org-constraint-compute.requireOsLogin.json │ │ │ ├── org-constraint-compute.requireShieldedVm.json │ │ │ ├── org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json │ │ │ ├── org-constraint-iam.disableCrossProjectServiceAccountUsage.json │ │ │ ├── project.json │ │ │ ├── services.json │ │ │ └── workbench-instances.json │ │ ├── network.tf │ │ ├── project.tf │ │ └── variables.tf │ ├── osconfig1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── inventories.json │ │ │ ├── inventory.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── pubsub1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── bq-subscription.json │ │ │ ├── bucket-roles.json │ │ │ ├── gcs-subscription.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ ├── pull-subscription.json │ │ │ ├── services.json │ │ │ ├── subscriptions-iam.json │ │ │ ├── subscriptions.json │ │ │ ├── topic-iam.json │ │ │ └── topics.json │ │ ├── project.tf │ │ ├── pubsub1.tf │ │ └── variables.tf │ ├── tpu1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── logging-entries-1.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── vertex1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── featurestores.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ ├── variables.tf │ │ └── vertex1.tf │ ├── vpc1/ │ │ ├── Makefile │ │ ├── json-dumps/ │ │ │ ├── compute-addresses.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-project.json │ │ │ ├── compute-regions.json │ │ │ ├── monitoring-query.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── project.tf │ │ └── variables.tf │ ├── vpc2/ │ │ ├── Makefile │ │ ├── external_connectivity_private_instance_faulty.tf │ │ ├── external_connectivity_private_instance_valid.tf │ │ ├── external_connectivity_public_instance_faulty.tf │ │ ├── external_connectivity_public_instance_valid.tf │ │ ├── json-dumps/ │ │ │ ├── compute-disks-europe-west2-b.json │ │ │ ├── compute-effective-firewalls-default.json │ │ │ ├── compute-instances-europe-west2-b.json │ │ │ ├── compute-instances-us-central1-a.json │ │ │ ├── compute-network-default.json │ │ │ ├── compute-network-routes.json │ │ │ ├── compute-project.json │ │ │ ├── compute-zones.json │ │ │ ├── connectivity-test.json │ │ │ ├── iam-policy.json │ │ │ ├── iam-service-accounts.json │ │ │ ├── monitoring-query-instance-dropped-received-packets-count.json │ │ │ ├── monitoring-query-nat-allocation-failed.json │ │ │ ├── monitoring-query-nat-dropped-received-packets-count.json │ │ │ ├── monitoring-query-nat-dropped-sent-packets-count.json │ │ │ ├── project.json │ │ │ └── services.json │ │ ├── network.tf │ │ ├── project.tf │ │ └── variables.tf │ ├── vpn/ │ │ └── json-dumps/ │ │ ├── compute-project.json │ │ ├── logging-entries-1.json │ │ ├── monitoring-query.json │ │ ├── project.json │ │ ├── vpn-tunnel-1.json │ │ └── vpn-tunnel-down.json │ └── web/ │ ├── Makefile │ └── static/ │ ├── cloud-google-com-data-fusion-docs-concepts-configure-clusters │ ├── cloud-google-com-data-fusion-docs-support-version-support-policy │ └── cloud-google-com-kubernetes-engine-docs-release-schedule └── website/ ├── api_render.py ├── archetypes/ │ └── default.md ├── assets/ │ ├── pdoc_templates/ │ │ ├── frame.html.jinja2 │ │ └── module.html.jinja2 │ └── scss/ │ └── _variables_project.scss ├── config.toml ├── content/ │ └── en/ │ ├── _index.html │ ├── docs/ │ │ ├── _index.md │ │ ├── authentication.md │ │ ├── development/ │ │ │ ├── _index.md │ │ │ ├── architecture.md │ │ │ └── environment.md │ │ ├── running.md │ │ └── usage.md │ ├── privacy.md │ ├── rules/ │ │ ├── _index.md │ │ ├── apigee/ │ │ │ ├── ERR/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ └── 2023_006.md │ │ │ ├── WARN/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2022_001.md │ │ │ │ └── 2022_002.md │ │ │ └── _index.md │ │ ├── asm/ │ │ │ ├── ERR/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2024_001.md │ │ │ │ └── 2024_002.md │ │ │ ├── WARN/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2025_001.md │ │ │ │ └── 2025_002.md │ │ │ └── _index.md │ │ ├── bigquery/ │ │ │ ├── ERR/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2022_004.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ ├── 2023_006.md │ │ │ │ ├── 2023_007.md │ │ │ │ ├── 2023_008.md │ │ │ │ ├── 2023_009.md │ │ │ │ └── 2024_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2022_004.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ ├── 2024_003.md │ │ │ │ ├── 2024_004.md │ │ │ │ ├── 2024_005.md │ │ │ │ └── 2024_006.md │ │ │ └── _index.md │ │ ├── billing/ │ │ │ ├── WARN/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ └── 2022_003.md │ │ │ └── _index.md │ │ ├── cloudrun/ │ │ │ ├── ERR/ │ │ │ │ └── 2022_001.md │ │ │ └── _index.md │ │ ├── cloudsql/ │ │ │ ├── BP/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ └── 2023_003.md │ │ │ ├── BP_EXT/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ └── 2023_004.md │ │ │ ├── ERR/ │ │ │ │ └── 2023_001.md │ │ │ ├── SEC/ │ │ │ │ └── 2023_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ └── 2023_003.md │ │ │ └── _index.md │ │ ├── composer/ │ │ │ ├── BP/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ └── 2023_003.md │ │ │ ├── BP_EXT/ │ │ │ │ ├── 2023_001.md │ │ │ │ └── 2023_002.md │ │ │ ├── ERR/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ └── 2024_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ ├── 2023_006.md │ │ │ │ ├── 2023_007.md │ │ │ │ ├── 2023_008.md │ │ │ │ ├── 2023_009.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ └── 2024_003.md │ │ │ └── _index.md │ │ ├── dataflow/ │ │ │ ├── BP/ │ │ │ │ └── 2023_001.md │ │ │ ├── ERR/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ ├── 2023_006.md │ │ │ │ ├── 2023_007.md │ │ │ │ ├── 2023_008.md │ │ │ │ ├── 2023_009.md │ │ │ │ ├── 2023_010.md │ │ │ │ ├── 2023_011.md │ │ │ │ ├── 2023_012.md │ │ │ │ ├── 2023_013.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ ├── 2024_003.md │ │ │ │ ├── 2024_004.md │ │ │ │ └── 2024_005.md │ │ │ ├── WARN/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_006.md │ │ │ │ ├── 2024_001.md │ │ │ │ └── 2024_002.md │ │ │ └── _index.md │ │ ├── datafusion/ │ │ │ ├── ERR/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2022_004.md │ │ │ │ ├── 2022_005.md │ │ │ │ ├── 2022_006.md │ │ │ │ ├── 2022_007.md │ │ │ │ ├── 2022_008.md │ │ │ │ ├── 2022_009.md │ │ │ │ ├── 2022_010.md │ │ │ │ ├── 2022_011.md │ │ │ │ └── 2024_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ ├── 2024_003.md │ │ │ │ ├── 2024_004.md │ │ │ │ └── 2024_005.md │ │ │ └── _index.md │ │ ├── dataproc/ │ │ │ ├── BP/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_098.md │ │ │ │ └── 2022_099.md │ │ │ ├── ERR/ │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2022_004.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ ├── 2023_006.md │ │ │ │ ├── 2023_007.md │ │ │ │ └── 2023_008.md │ │ │ ├── WARN/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2022_004.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2024_001.md │ │ │ │ └── 2024_002.md │ │ │ └── _index.md │ │ ├── gae/ │ │ │ ├── ERR/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ └── 2025_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2022_001.md │ │ │ │ └── 2022_002.md │ │ │ └── _index.md │ │ ├── gcb/ │ │ │ ├── ERR/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ └── 2022_004.md │ │ │ └── _index.md │ │ ├── gce/ │ │ │ ├── BP/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2024_001.md │ │ │ │ └── 2024_002.md │ │ │ ├── BP_EXT/ │ │ │ │ ├── 2021_003.md │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2024_001.md │ │ │ │ └── 2024_002.md │ │ │ ├── ERR/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2021_002.md │ │ │ │ ├── 2021_003.md │ │ │ │ ├── 2021_004.md │ │ │ │ ├── 2021_005.md │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ ├── 2024_003.md │ │ │ │ └── 2024_004.md │ │ │ ├── WARN/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2021_002.md │ │ │ │ ├── 2021_003.md │ │ │ │ ├── 2021_004.md │ │ │ │ ├── 2021_005.md │ │ │ │ ├── 2021_006.md │ │ │ │ ├── 2021_007.md │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2022_004.md │ │ │ │ ├── 2022_005.md │ │ │ │ ├── 2022_006.md │ │ │ │ ├── 2022_007.md │ │ │ │ ├── 2022_008.md │ │ │ │ ├── 2022_009.md │ │ │ │ ├── 2022_010.md │ │ │ │ ├── 2022_011.md │ │ │ │ ├── 2022_012.md │ │ │ │ ├── 2023_001.md │ │ │ │ └── 2023_002.md │ │ │ └── _index.md │ │ ├── gcf/ │ │ │ ├── ERR/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ └── 2022_003.md │ │ │ ├── WARN/ │ │ │ │ ├── 2021_001.md │ │ │ │ └── 2021_002.md │ │ │ └── _index.md │ │ ├── gcs/ │ │ │ ├── BP/ │ │ │ │ └── 2022_001.md │ │ │ └── _index.md │ │ ├── gke/ │ │ │ ├── BP/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2022_004.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ └── 2025_001.md │ │ │ ├── BP_EXT/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2023_001.md │ │ │ │ └── 2023_002.md │ │ │ ├── ERR/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2021_002.md │ │ │ │ ├── 2021_003.md │ │ │ │ ├── 2021_004.md │ │ │ │ ├── 2021_005.md │ │ │ │ ├── 2021_006.md │ │ │ │ ├── 2021_007.md │ │ │ │ ├── 2021_008.md │ │ │ │ ├── 2021_009.md │ │ │ │ ├── 2021_010.md │ │ │ │ ├── 2021_011.md │ │ │ │ ├── 2021_012.md │ │ │ │ ├── 2021_013.md │ │ │ │ ├── 2021_014.md │ │ │ │ ├── 2021_015.md │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ ├── 2023_006.md │ │ │ │ ├── 2023_007.md │ │ │ │ ├── 2023_008.md │ │ │ │ ├── 2023_009.md │ │ │ │ ├── 2023_010.md │ │ │ │ ├── 2023_011.md │ │ │ │ ├── 2023_012.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ ├── 2024_003.md │ │ │ │ └── 2025_001.md │ │ │ ├── SEC/ │ │ │ │ ├── 2021_001.md │ │ │ │ └── 2023_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2021_001.md │ │ │ │ ├── 2021_002.md │ │ │ │ ├── 2021_003.md │ │ │ │ ├── 2021_004.md │ │ │ │ ├── 2021_005.md │ │ │ │ ├── 2021_006.md │ │ │ │ ├── 2021_007.md │ │ │ │ ├── 2021_008.md │ │ │ │ ├── 2021_009.md │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2022_002.md │ │ │ │ ├── 2022_003.md │ │ │ │ ├── 2022_004.md │ │ │ │ ├── 2022_005.md │ │ │ │ ├── 2022_006.md │ │ │ │ ├── 2022_007.md │ │ │ │ ├── 2022_008.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ ├── 2024_003.md │ │ │ │ ├── 2024_004.md │ │ │ │ ├── 2024_005.md │ │ │ │ ├── 2024_007.md │ │ │ │ └── 2025_001.md │ │ │ └── _index.md │ │ ├── iam/ │ │ │ ├── BP/ │ │ │ │ └── 2023_001.md │ │ │ ├── SEC/ │ │ │ │ ├── 2021_001.md │ │ │ │ └── 2024_001.md │ │ │ └── _index.md │ │ ├── interconnect/ │ │ │ ├── BP/ │ │ │ │ └── 2023_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ └── 2025_001.md │ │ │ └── _index.md │ │ ├── lb/ │ │ │ ├── BP/ │ │ │ │ ├── 2022_001.md │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ ├── 2025_001.md │ │ │ │ ├── 2025_002.md │ │ │ │ └── 2025_003.md │ │ │ └── _index.md │ │ ├── looker/ │ │ │ ├── BP/ │ │ │ │ ├── 2025_001.md │ │ │ │ ├── 2025_002.md │ │ │ │ └── 2025_003.md │ │ │ └── _index.md │ │ ├── notebooks/ │ │ │ ├── BP/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ └── 2023_004.md │ │ │ ├── ERR/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ └── 2024_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ └── 2023_003.md │ │ │ └── _index.md │ │ ├── pubsub/ │ │ │ ├── BP/ │ │ │ │ └── 2024_001.md │ │ │ ├── ERR/ │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ ├── 2024_003.md │ │ │ │ └── 2025_001.md │ │ │ ├── WARN/ │ │ │ │ ├── 2023_001.md │ │ │ │ ├── 2023_002.md │ │ │ │ ├── 2023_003.md │ │ │ │ ├── 2023_004.md │ │ │ │ ├── 2023_005.md │ │ │ │ ├── 2023_006.md │ │ │ │ ├── 2024_001.md │ │ │ │ ├── 2024_002.md │ │ │ │ └── 2024_003.md │ │ │ └── _index.md │ │ ├── tpu/ │ │ │ ├── WARN/ │ │ │ │ └── 2022_001.md │ │ │ └── _index.md │ │ ├── vertex/ │ │ │ ├── WARN/ │ │ │ │ └── 2023_001.md │ │ │ └── _index.md │ │ └── vpc/ │ │ ├── BP/ │ │ │ ├── 2022_001.md │ │ │ └── 2023_001.md │ │ ├── SEC/ │ │ │ └── 2023_001.md │ │ ├── WARN/ │ │ │ ├── 2022_001.md │ │ │ ├── 2023_001.md │ │ │ ├── 2023_002.md │ │ │ └── 2024_001.md │ │ └── _index.md │ ├── runbook/ │ │ ├── _index.md │ │ ├── diagnostic-trees/ │ │ │ ├── _index.md │ │ │ ├── bigquery/ │ │ │ │ ├── _index.md │ │ │ │ └── failed-query.md │ │ │ ├── cloudrun/ │ │ │ │ ├── _index.md │ │ │ │ └── service-deployment.md │ │ │ ├── dataflow/ │ │ │ │ ├── _index.md │ │ │ │ ├── failed-streaming-pipeline.md │ │ │ │ └── job-permissions.md │ │ │ ├── dataproc/ │ │ │ │ ├── _index.md │ │ │ │ ├── cluster-creation.md │ │ │ │ └── spark-job-failures.md │ │ │ ├── gce/ │ │ │ │ ├── _index.md │ │ │ │ ├── guestos-bootup.md │ │ │ │ ├── ops-agent.md │ │ │ │ ├── serial-log-analyzer.md │ │ │ │ ├── ssh.md │ │ │ │ ├── vm-creation.md │ │ │ │ ├── vm-performance.md │ │ │ │ └── vm-termination.md │ │ │ ├── gcf/ │ │ │ │ ├── _index.md │ │ │ │ └── failed-deployments.md │ │ │ ├── gke/ │ │ │ │ ├── _index.md │ │ │ │ ├── cluster-autoscaler.md │ │ │ │ ├── gke-ip-masq-standard.md │ │ │ │ ├── image-pull.md │ │ │ │ ├── ip-exhaustion.md │ │ │ │ ├── logs.md │ │ │ │ ├── monitoring-configuration.md │ │ │ │ ├── node-auto-repair.md │ │ │ │ ├── node-bootstrapping.md │ │ │ │ ├── node-unavailability.md │ │ │ │ └── resource-quotas.md │ │ │ ├── interconnect/ │ │ │ │ ├── _index.md │ │ │ │ └── bgp-down-flap.md │ │ │ ├── lb/ │ │ │ │ ├── _index.md │ │ │ │ ├── latency.md │ │ │ │ ├── ssl-certificates.md │ │ │ │ └── unhealthy-backends.md │ │ │ ├── nat/ │ │ │ │ ├── _index.md │ │ │ │ └── public-nat-ip-allocation-failed.md │ │ │ ├── pubsub/ │ │ │ │ ├── _index.md │ │ │ │ ├── bigquery-subscription-delivery.md │ │ │ │ ├── gcs-subscription-delivery.md │ │ │ │ ├── pull-subscription-delivery.md │ │ │ │ └── push-subscription-delivery.md │ │ │ ├── vertex/ │ │ │ │ ├── _index.md │ │ │ │ └── workbench-instance-stuck-in-provisioning.md │ │ │ ├── vpc/ │ │ │ │ ├── _index.md │ │ │ │ └── vm-external-ip-connectivity.md │ │ │ └── vpn/ │ │ │ ├── _index.md │ │ │ └── vpn-tunnel-check.md │ │ └── steps/ │ │ ├── _index.md │ │ ├── bigquery/ │ │ │ ├── _index.md │ │ │ ├── big-query-end.md │ │ │ ├── big-query-error-identification.md │ │ │ ├── big-query-failed-query-start.md │ │ │ ├── big-query-job-exists.md │ │ │ ├── check-bq-job-has-error.md │ │ │ ├── check-bq-job-has-failed.md │ │ │ ├── check-permissions.md │ │ │ ├── confirm-bq-job-is-done.md │ │ │ └── run-permission-checks.md │ │ ├── cloudrun/ │ │ │ ├── _index.md │ │ │ ├── container-failed-to-start-step.md │ │ │ ├── image-was-not-found-step.md │ │ │ ├── no-permission-for-image-step.md │ │ │ ├── service-deployment-code-step.md │ │ │ └── service-deployment-start.md │ │ ├── crm/ │ │ │ ├── _index.md │ │ │ └── org-policy-check.md │ │ ├── dataflow/ │ │ │ ├── _index.md │ │ │ ├── dataflow-permissions-end.md │ │ │ ├── dataflow-resource-permissions.md │ │ │ ├── dataflow-user-account-permissions.md │ │ │ ├── dataflow-worker-service-account-permissions.md │ │ │ ├── failed-streaming-pipeline-end.md │ │ │ ├── failed-streaming-pipeline-start.md │ │ │ ├── job-graph-is-constructed.md │ │ │ ├── job-is-streaming.md │ │ │ ├── job-logs-visible.md │ │ │ ├── job-state.md │ │ │ └── valid-sdk.md │ │ ├── dataproc/ │ │ │ ├── _index.md │ │ │ ├── check-autoscaling-policy.md │ │ │ ├── check-bq-connector.md │ │ │ ├── check-cluster-network-connectivity.md │ │ │ ├── check-cluster-network.md │ │ │ ├── check-cluster-quota.md │ │ │ ├── check-cluster-stock-out.md │ │ │ ├── check-cluster-version.md │ │ │ ├── check-gc-pause.md │ │ │ ├── check-gcs-connector.md │ │ │ ├── check-if-job-failed.md │ │ │ ├── check-init-script-failure.md │ │ │ ├── check-job-throttling.md │ │ │ ├── check-killing-orphaned-application.md │ │ │ ├── check-logs-exist.md │ │ │ ├── check-master-oom.md │ │ │ ├── check-permissions.md │ │ │ ├── check-port-exhaustion.md │ │ │ ├── check-preemptible.md │ │ │ ├── check-private-google-access.md │ │ │ ├── check-python-import-failure.md │ │ │ ├── check-shared-vpc-roles.md │ │ │ ├── check-shuffle-failures.md │ │ │ ├── check-shuffle-service-kill.md │ │ │ ├── check-stackdriver-setting.md │ │ │ ├── check-sw-preemption.md │ │ │ ├── check-task-not-found.md │ │ │ ├── check-worker-disk-usage-issue.md │ │ │ ├── check-worker-oom.md │ │ │ ├── check-yarn-runtime-exception.md │ │ │ ├── cluster-creation-end.md │ │ │ ├── cluster-creation-quota.md │ │ │ ├── cluster-creation-start.md │ │ │ ├── cluster-creation-stockout.md │ │ │ ├── cluster-details-dependency-gateway.md │ │ │ ├── cluster-details.md │ │ │ ├── cluster-exists.md │ │ │ ├── cluster-in-error.md │ │ │ ├── data-proc-cluster-exists.md │ │ │ ├── internal-ip-gateway.md │ │ │ ├── job-details-dependency-gateway.md │ │ │ ├── job-exists.md │ │ │ ├── job-start.md │ │ │ ├── service-account-exists.md │ │ │ └── spark-job-end.md │ │ ├── gce/ │ │ │ ├── _index.md │ │ │ ├── analysing-serial-logs-end.md │ │ │ ├── check-live-migrations.md │ │ │ ├── check-serial-port-logging.md │ │ │ ├── cloud-init-checks.md │ │ │ ├── compute-cluster-manager-termination.md │ │ │ ├── cpu-overcommitment-check.md │ │ │ ├── disk-avg-io-latency-check.md │ │ │ ├── disk-health-check.md │ │ │ ├── disk-iops-throughput-utilisation-checks.md │ │ │ ├── gce-firewall-allows-ssh.md │ │ │ ├── gce-iam-policy-check.md │ │ │ ├── gce-log-check.md │ │ │ ├── gce-vpc-connectivity-check.md │ │ │ ├── gcp-ssh-permissions.md │ │ │ ├── guest-os-issued-shutdown.md │ │ │ ├── guestos-bootup-start.md │ │ │ ├── high-vm-cpu-utilization.md │ │ │ ├── high-vm-disk-utilization.md │ │ │ ├── high-vm-memory-utilization.md │ │ │ ├── host-error.md │ │ │ ├── instance-property-check.md │ │ │ ├── investigate-guest-os-issued-shutdown.md │ │ │ ├── investigate-logging-monitoring.md │ │ │ ├── investigate-vm-creation-log-failure.md │ │ │ ├── linux-guest-os-checks.md │ │ │ ├── managed-instance-group-recreation.md │ │ │ ├── mig-autoscaling-policy-check.md │ │ │ ├── multiple-termination-check.md │ │ │ ├── number-of-terminations.md │ │ │ ├── ops-agent-end.md │ │ │ ├── ops-agent-start.md │ │ │ ├── os-login-status-check.md │ │ │ ├── posix-user-has-valid-ssh-key-check.md │ │ │ ├── preemptible-instance.md │ │ │ ├── scheduled-stop-policy.md │ │ │ ├── serial-log-analyzer-start.md │ │ │ ├── shielded-vm-integrity-failure.md │ │ │ ├── single-termination-check.md │ │ │ ├── ssh-end.md │ │ │ ├── ssh-in-browser-check.md │ │ │ ├── ssh-start.md │ │ │ ├── stop-operation-gateway.md │ │ │ ├── terminate-on-host-maintenance.md │ │ │ ├── termination-operation-type.md │ │ │ ├── user-or-service-account-initiated-stop.md │ │ │ ├── vm-duplicate-ssh-keys-check.md │ │ │ ├── vm-guest-os-type.md │ │ │ ├── vm-has-a-service-account.md │ │ │ ├── vm-has-ops-agent.md │ │ │ ├── vm-lifecycle-state.md │ │ │ ├── vm-metadata-check.md │ │ │ ├── vm-performance-checks.md │ │ │ ├── vm-performance-end.md │ │ │ ├── vm-performance-start.md │ │ │ ├── vm-scope.md │ │ │ ├── vm-serial-logs-check.md │ │ │ ├── vm-termination-end.md │ │ │ ├── vm-termination-start.md │ │ │ ├── vm-termination-type.md │ │ │ └── windows-guest-os-checks.md │ │ ├── gcf/ │ │ │ ├── _index.md │ │ │ ├── default-service-account-check.md │ │ │ ├── failed-deployment-end-step.md │ │ │ ├── failed-deployments-start.md │ │ │ ├── function-global-scope-check.md │ │ │ ├── location-constraint-check.md │ │ │ └── user-service-account-check.md │ │ ├── gcp/ │ │ │ ├── _index.md │ │ │ ├── human-task.md │ │ │ ├── resource-attribute-check.md │ │ │ └── service-api-status-check.md │ │ ├── gcpdiag/ │ │ │ ├── _index.md │ │ │ ├── end-step.md │ │ │ └── start-step.md │ │ ├── gke/ │ │ │ ├── _index.md │ │ │ ├── api-enabled.md │ │ │ ├── ca-disabled-annotation.md │ │ │ ├── ca-failed-to-evict-pods.md │ │ │ ├── ca-instance-timeout.md │ │ │ ├── ca-ip-space-exhausted.md │ │ │ ├── ca-min-resource-limit-exceeded.md │ │ │ ├── ca-min-size-reached.md │ │ │ ├── ca-no-place-to-move-pods.md │ │ │ ├── ca-not-safe-to-evict-annotation.md │ │ │ ├── ca-out-of-resources.md │ │ │ ├── ca-pod-controller-not-found.md │ │ │ ├── ca-pod-kube-system-unmovable.md │ │ │ ├── ca-pod-not-enough-pdb.md │ │ │ ├── ca-pod-unexpected-error.md │ │ │ ├── ca-pods-not-backed-by-controller.md │ │ │ ├── ca-quota-exceeded.md │ │ │ ├── ca-service-account-deleted.md │ │ │ ├── check-config-map.md │ │ │ ├── check-daemon-set.md │ │ │ ├── check-destination-ip.md │ │ │ ├── check-node-ip.md │ │ │ ├── check-pod-ip.md │ │ │ ├── cluster-autoscaler-end.md │ │ │ ├── cluster-autoscaler-start.md │ │ │ ├── cluster-level-logging-enabled.md │ │ │ ├── cluster-level-monitoring-configuration-enabled.md │ │ │ ├── cluster-version.md │ │ │ ├── gke-ip-masq-standard-end.md │ │ │ ├── gke-ip-masq-standard-start.md │ │ │ ├── image-connection-timeout-restricted-private.md │ │ │ ├── image-connection-timeout.md │ │ │ ├── image-dns-issue.md │ │ │ ├── image-forbidden.md │ │ │ ├── image-not-found-insufficient-scope.md │ │ │ ├── image-not-found.md │ │ │ ├── image-pull-end.md │ │ │ ├── image-pull-start.md │ │ │ ├── ip-exhaustion-end.md │ │ │ ├── ip-exhaustion-start.md │ │ │ ├── live-migration.md │ │ │ ├── logging-api-enabled.md │ │ │ ├── logging-write-api-quota-exceeded.md │ │ │ ├── logs-end.md │ │ │ ├── logs-start.md │ │ │ ├── monitoring-api-configuration-enabled.md │ │ │ ├── monitoring-configuration-end.md │ │ │ ├── monitoring-configuration-start.md │ │ │ ├── node-auto-repair-end.md │ │ │ ├── node-auto-repair-start.md │ │ │ ├── node-bootstrapping-end.md │ │ │ ├── node-bootstrapping-start.md │ │ │ ├── node-disk-full.md │ │ │ ├── node-insert-check.md │ │ │ ├── node-ip-range-exhaustion.md │ │ │ ├── node-not-ready.md │ │ │ ├── node-pool-cloud-logging-access-scope.md │ │ │ ├── node-pool-cloud-monitoring-access-scope-configuration.md │ │ │ ├── node-pool-scope.md │ │ │ ├── node-pool-upgrade.md │ │ │ ├── node-registration-success.md │ │ │ ├── node-removed-by-autoscaler.md │ │ │ ├── node-unavailability-end.md │ │ │ ├── node-unavailability-start.md │ │ │ ├── nodeproblem.md │ │ │ ├── pod-ip-range-exhaustion.md │ │ │ ├── preemption-condition.md │ │ │ ├── resource-quota-exceeded.md │ │ │ ├── resource-quotas-end.md │ │ │ ├── resource-quotas-start.md │ │ │ ├── service-account-logging-permission.md │ │ │ ├── service-account-monitoring-permission-configuration.md │ │ │ ├── service-account-permission.md │ │ │ ├── unallocatable-gpu.md │ │ │ └── unallocatable-tpu.md │ │ ├── iam/ │ │ │ ├── _index.md │ │ │ ├── iam-policy-check.md │ │ │ └── vm-has-an-active-service-account.md │ │ ├── interconnect/ │ │ │ ├── _index.md │ │ │ ├── bgp-down-flap-end.md │ │ │ ├── bgp-down-flap-start.md │ │ │ ├── check-bgp-down.md │ │ │ ├── check-bgp-flap.md │ │ │ ├── check-cloud-router-maintenance.md │ │ │ └── check-interconnect-maintenance.md │ │ ├── lb/ │ │ │ ├── _index.md │ │ │ ├── analyze-certificate-status.md │ │ │ ├── analyze-domain-statuses.md │ │ │ ├── analyze-failed-caa-check.md │ │ │ ├── analyze-failed-not-visible-domains.md │ │ │ ├── analyze-latest-health-check-log.md │ │ │ ├── analyze-provisioning-domains.md │ │ │ ├── analyze-rate-limited-domains.md │ │ │ ├── analyze-timeout-health-check-log.md │ │ │ ├── analyze-unhealthy-health-check-log.md │ │ │ ├── analyze-unknown-health-check-log.md │ │ │ ├── check-certificate-attachment.md │ │ │ ├── check-past-health-check-success.md │ │ │ ├── check-provisioning-time.md │ │ │ ├── check-vm-performance.md │ │ │ ├── latency-end.md │ │ │ ├── lb-backend-latency-check.md │ │ │ ├── lb-error-rate-check.md │ │ │ ├── lb-latency-start.md │ │ │ ├── lb-request-count-check.md │ │ │ ├── ssl-certificates-end.md │ │ │ ├── ssl-certificates-start.md │ │ │ ├── unhealthy-backends-end.md │ │ │ ├── unhealthy-backends-start.md │ │ │ ├── validate-backend-service-port-configuration.md │ │ │ ├── validate-backend-service-protocol-configuration.md │ │ │ ├── verify-dns-records.md │ │ │ ├── verify-firewall-rules.md │ │ │ ├── verify-forwarding-rules-port.md │ │ │ ├── verify-health-check-logging-enabled.md │ │ │ └── verify-no-certificate-map-conflict.md │ │ ├── logs/ │ │ │ ├── _index.md │ │ │ ├── check-issue-log-entry.md │ │ │ └── logs-check.md │ │ ├── monitoring/ │ │ │ ├── _index.md │ │ │ └── time-series-check.md │ │ ├── nat/ │ │ │ ├── _index.md │ │ │ ├── nat-allocation-failed-check.md │ │ │ ├── nat-dropped-received-packet-check.md │ │ │ ├── nat-ip-allocation-auto-only.md │ │ │ ├── nat-ip-allocation-failed-end.md │ │ │ ├── nat-ip-allocation-failed-start.md │ │ │ ├── nat-ip-allocation-manual-only.md │ │ │ ├── nat-ip-allocation-method-check.md │ │ │ ├── nat-ip-exhaustion-check.md │ │ │ └── nat-resource-exhaustion-check.md │ │ ├── pubsub/ │ │ │ ├── _index.md │ │ │ ├── active-subscription.md │ │ │ ├── big-query-table-existence-check.md │ │ │ ├── big-query-writer-permission-check.md │ │ │ ├── check-gcs-bucket.md │ │ │ ├── check-service-account-permissions.md │ │ │ ├── dead-letter-topic-permissions.md │ │ │ ├── dead-letter-topic.md │ │ │ ├── end-step.md │ │ │ ├── gcs-subscription-delivery-end.md │ │ │ ├── gcs-subscription-delivery-start.md │ │ │ ├── gcs-subscription-existence-check.md │ │ │ ├── investigate-bq-push-errors.md │ │ │ ├── pubsub-quotas.md │ │ │ ├── pull-rate.md │ │ │ ├── pull-subscription-delivery-end.md │ │ │ ├── pull-subscription-delivery-start.md │ │ │ ├── push-subscription-delivery-end.md │ │ │ ├── push-subscription-delivery-start.md │ │ │ ├── push_subscription_delivery-end.md │ │ │ ├── response-code-step.md │ │ │ ├── start-step.md │ │ │ ├── subscription-existence-check.md │ │ │ ├── subscription-status-check.md │ │ │ ├── throughput-qualification.md │ │ │ └── vpc-sc-step.md │ │ ├── vertex/ │ │ │ ├── _index.md │ │ │ ├── check-workbench-instance-compute-engine-ssh.md │ │ │ ├── check-workbench-instance-custom-scripts.md │ │ │ ├── check-workbench-instance-external-ip-disabled.md │ │ │ ├── check-workbench-instance-is-using-latest-env-version.md │ │ │ ├── check-workbench-instance-jupyter-space.md │ │ │ ├── check-workbench-instance-performance.md │ │ │ ├── check-workbench-instance-syslogs-jupyter-running-on-port-8080.md │ │ │ ├── check-workbench-instance-using-custom-container.md │ │ │ ├── check-workbench-instance-using-official-image.md │ │ │ ├── decision-check-workbench-instance-system-logging.md │ │ │ ├── workbench-instance-stuck-in-provisioning-end.md │ │ │ └── workbench-instance-stuck-in-provisioning-start.md │ │ ├── vpc/ │ │ │ ├── _index.md │ │ │ ├── external-interface-check.md │ │ │ ├── internal-interface-check.md │ │ │ ├── vm-external-ip-connectivity-end.md │ │ │ ├── vm-external-ip-connectivity-start.md │ │ │ ├── vm-external-ip-connectivity-test.md │ │ │ ├── vm-has-external-ip.md │ │ │ ├── vpc-firewall-check.md │ │ │ └── vpc-route-check.md │ │ └── vpn/ │ │ ├── _index.md │ │ ├── tunnel-down-status-reason.md │ │ ├── tunnel-packets-drop-check.md │ │ ├── tunnel-packets-utilization-check.md │ │ ├── vpn-tunnel-check-end.md │ │ └── vpn-tunnel-status.md │ └── search.md ├── go.mod ├── go.sum ├── hugo.sh ├── i18n/ │ └── en.toml └── layouts/ ├── 404.html ├── docs/ │ └── baseof.html ├── partials/ │ ├── navbar.html │ └── page-meta-links.html └── shortcodes/ └── blocks/ ├── cover.html ├── feature.html └── section.html ================================================ FILE CONTENTS ================================================ ================================================ FILE: .bumpversion.cfg ================================================ [bumpversion] current_version = 0.81-test parse = (?P\d+)\.(?P\d+)(-(?P.*))? message = Bump version: {current_version} -> {new_version} serialize = {major}.{minor}-{release} {major}.{minor} [bumpversion:part:release] optional_value = release values = test release [bumpversion:file:gcpdiag/config.py] search = VERSION = '{current_version}' replace = VERSION = '{new_version}' ================================================ FILE: .coveragerc ================================================ [run] omit = *_test.py *_stub.py ================================================ FILE: .devcontainer/README.md ================================================ # Remote Container [Remote Container](https://code.visualstudio.com/docs/remote/containers) (aka Development Container) enables development fully inside a container, which allows for reproducible environments. Besides allowing for an easier getting started experience, the environment can be rebuild with `git reset --hard` and a container rebuild. ## Setup ### Requirements Install the requirements on a Linux host: 1. Install podman on the machine with `apt-get install podman -y` 1. Ensure you follow all the instructions for correct setup of podman on Debian-like distros. Please consult any public (or internal) documentation for the setup 2. Link podman as docker executable to avoid any overseen issues `ln -s /usr/bin/podman /usr/bin/docker` 3. Clone the repository in a folder of your choice on your host ### Open on a Workstation To open the project in a remote container please follow the official [documentation](https://code.visualstudio.com/docs/remote/containers#_open-an-existing-workspace-in-a-container) or the short-listed steps: 1. Ensure you have [VS Code](https://code.visualstudio.com/) installed 2. Ensure the [Remote - Container](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension is installed in VS Code 3. Open the source code folder in VS Code and click the pop-up "Reopen in Container" - If the pop-up does not show up by default, please consult the [documentation](https://code.visualstudio.com/docs/remote/containers#_open-an-existing-workspace-in-a-container) ### Open on a Remote Instance via SSH The advantage of development via SSH (especially from non-Linux workstations) are a local UI renderer (VS Code), without having to rely on graphical remoting protocols such as Chrome Remote Desktop. Additionally, it gives the power of any possible instance and still has a local UX even though the code execution happens in the Cloud. For more details please consult the [documentation](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host#_connect-using-the-remote-ssh-extension-recommended) or the following short-listed steps: 1. Ensure you have [VS Code](https://code.visualstudio.com/) installed locally 2. Ensure the [Remote - Container](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) & [Remote - SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) extensions are installed in VS Code 3. Connect to the remote machine via SSH following the [documentation](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host#_connect-using-the-remote-ssh-extension-recommended) 4. Open the container on the remote similar to a local [workstation setup](#open-on-a-workstation) - If any issue occurs please consult the [documentation](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host) The `git push` operation will need to be executed over SSH connection on the host (not in the container). ## Known Issues - On the first start it might happen that VS Code does not correctly pick up the `pipenv` venv - As a workaround, restarting the container might help. Otherwise, please follow the [documentation](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host#_connect-using-the-remote-ssh-extension-recommended) to manually select an interpreter - On the first start it might happen that VS Code does not correctly source the `pipenv` venv for new terminals - As a workaround, restarting the container might help. Otherwise, please execute `pipenv shell` manually ## Limitations - `git commit` needs to be run in the container to allow correct execution of git hooks - `git push` needs to be run on the host for authentication (especially in Google internal environments) ## Possible future improvements - [ ] Install a Python linter (i.e. pylint) in the container to enable it by default for all developers - [ ] Install a Python formatter in the container to enable it by default for all developers ================================================ FILE: .devcontainer/devcontainer.json ================================================ { "name": "gcpdiag", "image": "us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-3.12:0.87", // Using our current test image - "latest"/"stable" tags do not exist at the moment // Use the following snippet for building the image locally and not pulling it from the remote //"build": { // "dockerfile": "../docker/pipenv-python-3.12/Dockerfile", // "context": "../docker/pipenv-python-3.12", // "args": {} //}, "customizations": { "vscode": { "settings": { "python.defaultInterpreterPath": "/usr/local/bin/python", "python.linting.enabled": true, "python.linting.pylintEnabled": true, "python.envFile": "${workspaceFolder}/.devcontainer/.env" // Forcing some specific env settings for debugging any dynamic python file - normal env vars are not correctly picked up }, "extensions": [ "ms-python.python", "ms-python.vscode-pylance" ] } }, "remoteEnv": { "PYTHONPATH": "/workspace" // required for bin/gcpdiag to correctly locate the modules / duplication of the .env file - no other workaround found }, "onCreateCommand": "PATH=$HOME/.local/bin:$PATH && pipenv install --dev", // We need to execute the commands very early to allow VS Code (-extensions) to correctly pick up the pipenv venv "postCreateCommand": "pipenv run pre-commit install", "remoteUser": "root", // Podman specific settings "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z", "workspaceFolder": "/workspace", //"runArgs": [ // "--userns=keep-id" // Causes issue with uid mappings on host, which we need for git to work properly - files are owned by random uids due to the uid mapping //], "containerUser": "root" } ================================================ FILE: .gitallowed ================================================ gcpdiag/queries/client_secrets.json website/content/en/docs/authentication.md ================================================ FILE: .github/workflows/code-analysis.yml ================================================ name: Code analysis on: pull_request: push: # Declare default permissions as Read only. permissions: read-all env: PIPENV_VENV_IN_PROJECT: enabled jobs: pre-commit: runs-on: ubuntu-latest timeout-minutes: 10 permissions: contents: read # Required for actions/cache to save and restore caches actions: write steps: - name: Install Graphviz run: sudo apt-get install -y graphviz - name: Install Ruby run: | sudo apt-get install -y ruby - name: Checkout repository uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 #v4 - name: Set up Python id: setup-python uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 #v5 with: python-version: 3.12 - name: Set up Terraform uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd # v3.1.2 with: terraform_version: 1.0.6 - name: Install pipenv run: python -m pip install --require-hashes -r requirements.txt - name: Restore pipenv cache id: cache-pipenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #v4 with: path: ./.venv key: codeanaysis-${{ runner.os }}-python-${{ steps.setup-python.outputs.python-version }}-pipenv-${{ hashFiles('Pipfile.lock') }} - name: Install dependencies if: steps.cache-pipenv.outputs.cache-hit != 'true' run: pipenv install --deploy --dev - name: Run pre-commit uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 ================================================ FILE: .github/workflows/scorecard.yml ================================================ # This workflow uses actions that are not certified by GitHub. They are provided # by a third-party and are governed by separate terms of service, privacy # policy, and support documentation. name: Scorecard supply-chain security on: # For Branch-Protection check. Only the default branch is supported. See # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection branch_protection_rule: # To guarantee Maintained check is occasionally updated. See # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained schedule: - cron: '33 12 * * 0' push: branches: [ "main" ] # Declare default permissions as read only. permissions: read-all jobs: analysis: name: Scorecard analysis runs-on: ubuntu-latest permissions: # Needed to upload the results to code-scanning dashboard. security-events: write # Needed to publish results and get a badge (see publish_results below). id-token: write steps: - name: "Checkout code" uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: persist-credentials: false - name: "Run analysis" uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 with: results_file: gcpdiag-scorecard-results.sarif results_format: sarif # Public repositories: # - Publish results to OpenSSF REST API for easy access by consumers # - Allows the repository to include the Scorecard badge. # - See https://github.com/ossf/scorecard-action#publishing-results. publish_results: true # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: gcpdiag-scorecard-results path: gcpdiag-scorecard-results.sarif retention-days: 5 # Upload the results to GitHub's code scanning dashboard (optional). # Commenting out will disable upload of results to your repo's Code Scanning dashboard - name: "Upload to code-scanning" uses: github/codeql-action/upload-sarif@df559355d593797519d70b90fc8edd5db049e7a2 # v3 with: sarif_file: gcpdiag-scorecard-results.sarif ================================================ FILE: .github/workflows/test.yml ================================================ name: Test on: pull_request: push: # Declare default permissions as read only. permissions: read-all env: PIPENV_VENV_IN_PROJECT: enabled jobs: make-test: runs-on: ubuntu-latest timeout-minutes: 10 permissions: contents: read # Required for actions/cache to save and restore caches actions: write steps: - name: Checkout repository uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 #v4 - name: Set up Python id: setup-python uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 #v5 with: python-version: 3.12 - name: Install pipenv run: python -m pip install --require-hashes --no-deps -r requirements.txt - name: Restore pipenv cache id: cache-pipenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #v4 with: path: ./.venv key: test-${{ runner.os }}-python-${{ steps.setup-python.outputs.python-version }}-pipenv-${{ hashFiles('Pipfile.lock') }} - name: Install dependencies if: steps.cache-pipenv.outputs.cache-hit != 'true' run: pipenv install --deploy --dev - name: Run make test run: pipenv run make test # The gcpdiag.dev website is no longer on github pages, but it's still good to build it in an action to find errors. - name: Hugo build run: | docker run --rm \ --user "$(id -u):$(id -g)" \ -e HUGO_CACHEDIR=/src/.hugo_cache \ -v "${{ github.workspace }}/website:/src" \ -w /src \ us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-hugo:0.3 \ build ================================================ FILE: .gitignore ================================================ .coverage dist .pipenv-dockerized *.pyc __pycache__ .terraform terraform.tfstate terraform.tfstate.backup terraform.tfstate.*.backup .terraform.tfstate.lock.info .venv *.lock.hcl .pyinstaller.build .*.swp website/public website/resources crash.*.log gcpdiag-config gcpdiag/testpsa.py .vscode/launch.json **/.DS_STORE venv/ ================================================ FILE: .isort.cfg ================================================ [settings] profile= ================================================ FILE: .pre-commit-config.yaml ================================================ # Copyright 2021 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. exclude: '/snapshots/' repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-added-large-files args: ['--maxkb=600'] - id: check-ast - id: check-case-conflict - id: check-executables-have-shebangs - id: check-merge-conflict - id: check-toml - id: check-vcs-permalinks - id: check-yaml - id: detect-private-key - id: end-of-file-fixer - id: mixed-line-ending - id: trailing-whitespace exclude: .bumpversion.cfg - repo: https://github.com/asottile/pyupgrade rev: v2.29.0 hooks: - id: pyupgrade args: [--py36-plus] - repo: https://github.com/codespell-project/codespell rev: v2.3.0 hooks: - id: codespell exclude: (^test-data/.*|^.*_test\.py$|^.*_unittest\.py$|^.*\.lock$|^pyinstaller/.*$|^.*\.spec$|^website/content/en/runbook/.*$|^gcpdiag/lint/snapshots/.*$|^gcpdiag/runbook/snapshots/.*$) - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.2.0 hooks: - id: mypy exclude: bin/gcpdiag args: ['--ignore-missing-imports', '--scripts-are-modules', '--implicit-optional', '--no-namespace-packages', '--install-types', '--non-interactive'] - repo: https://github.com/timothycrosley/isort rev: 5.12.0 hooks: - id: isort - repo: https://github.com/google/yapf rev: v0.40.2 hooks: - id: yapf - repo: https://github.com/pylint-dev/pylint rev: v3.3.1 hooks: - id: pylint - repo: https://github.com/antonbabenko/pre-commit-terraform rev: v1.96.1 hooks: - id: terraform_fmt - id: terraform_validate - repo: local hooks: - id: gcpdiag-custom-rule name: Check that there are required files for each lint rule entry: ./bin/precommit-required-files-wrapper lint language: script files: ^gcpdiag/lint/[^/]+/(bp|warn|err|sec)_.*.py exclude: .*_test.py - repo: local hooks: - id: gcpdiag-custom-runbook-rule name: Check and generate runbook docs entry: ./bin/precommit-required-files-wrapper runbook language: script files: ^gcpdiag/runbook/[^/]+/.*.py exclude: > .*_test.py| ^gcpdiag/runbook/(output|report)| ^gcpdiag/runbook/[^/]+/snapshots/| ^gcpdiag/runbook/[^/]+/(constants|command|flags|util).py| ^gcpdiag/runbook/(constants|command|flags|exceptions|report|util).py - repo: local hooks: - id: todo-annotations name: Check presence of "TODO:" comments entry: ./bin/precommit-todo-annotations language: script - repo: https://github.com/markdownlint/markdownlint rev: v0.13.0 hooks: - id: markdownlint files: \.(jinja)$ entry: mdl --rules MD034 ================================================ FILE: .pylint-dictionary.txt ================================================ ack aiohttp aiplatform allowedPolicyMemberDomains api apigee Apigee Apigee's ApigeeX apis APIs apiserver APIState args Args argv ASM async asyncio atleast attr auth autoscaler Autoscaler autoscaling Autoscaling autoscalingpolicy backend Backend backends balancer Balancer balancers behaviour BFD bigquery Bigquery bigquerydatatransfer bool boolen bootable BQ byol camelcase cb CDF CDN cgroup Chrony cidr cli cloudaudit cloudbuild cloudfunctions cloudrun cloudsql CLUSTERHASH CLUSTERNAME CNI computeProfiles config configs conntrack containerd coroutine Crashloopbackoff CRD crm CRM Crypto CryptoKey CSV daemonset dataflow Dataflow datafusion Datafusion dataplane Dataplane dataproc Dataproc DataTime datatypes datetime dateutil debian decrypt Decrypter deque dev DiagnosticTree dicts diskcache DLQ dml DML dns DNS docstring DT Ee EFI eg elif Enablement Encrypter endstep Enum env environmentId envs eol EOL eval exampledagname failureInfo featurestore featurestores Featurestores filesystem filesystems fluentd formater formatter frozenset functon fw gae GAE gcb gce GCE gcf GCF gcfs gcloud gcp GCP GcpApiError gcpbackendpolicies gcpdiag gcpdiag's gcpgatewaypolicies gcr GCR gcs GCS Generatlized getIamPolicy gke GKE GKE's GKEs GLB Globals googleapiclient googleapis gserviceaccount gzip healthcheck healthcheckpolicies HEC hostname HPA http Http HttpError iam IAM IAP iff IInvestigates iLB inlined inlining instanceId instantiation intranode io ip IPAddrOrNet ips IPs isclose istio Istio istiod Iterable Jinja json jupyter Jupyter Jupyterlab Kerberos Keybased keyname keyvalue kms KMS KSA kube kubeclt kubeconfig kubectl Kubectl Kubelet kubernetes Kubernetes kwargs lifecycle linters LintRuleRepository linux listPolicy liveness LLC loadbalancing locationId LogsQuery logWriter lse masq maxPartittions metaclass Metaclass metricWriter mig migs MIG's MIGs misconfiguration misconfigurations misconfigured MQL myapp mysql namespace namespaces nat Negsignal networkmanagement nic nodepool nodepools notpresent NTP OAuth occuring ok onboarding onload OOM organizationAdmin os osconfig OSS ouma overlayfs Paramaters parens parseable partitionSizeBytes PCollection PCollections Peerings performnce permisssion PGA php PID pre precommit preemptible prefetch Prefetch programmatically projectId ProjectPolicy PSA pubsub Pubsub pvpanic py pyinstaller RDP recommender recommened regexes repo Repor repr req requireShieldedVm resourcemanager retryable ru runbook runbook's runbooks runnable runtimeId runtimes sa Safemode SA's SAs scaleup scheduler's schedulers SDK Serverless serviceaccounts serviceAgent serviceId servicenetworking shouldnot SIGKILL skanzhelev SLA SLO Splunk SSD SSL stackdriver Stackdriver stateful Stateful Statsd StatsD stderr stdout stockout str stringification subagent subagents subclassed subclasses submodules subnet Subnet subnets subnetwork Subnetwork subnetworks subpackages subprocess subqueries supernet sys syslog syslogs systemd targetResources TBD TCP Terraform testfiles testproject testuser timeframe tmp tmux toml TP TPC TPU Truthy Typcial udp UDP UI unacked Unacked undeliverable unhandled unittest unknowd untrusted updateing upgradability upgradable uptime Uptime uri URI url URLMap urls useExternalIp usuage util Util utils verifications vm VM vmCanIpForward vmExternalIpAccess VM's VMs vpc VPC VpcFirewallRule webhook whitespaces worklaods writeable XLB XSS xz yaml Yaml ================================================ FILE: .pylintrc ================================================ # This Pylint rcfile contains a best-effort configuration to uphold the # best-practices and style described in the Google Python style guide: # https://google.github.io/styleguide/pyguide.html # # Its canonical open-source location is: # https://google.github.io/styleguide/pylintrc [MASTER] # Add files or directories. They should be base names, not # paths. ignore=third_party # Files or directories matching the regex patterns are skipped. The regex # matches against base names, not paths. ignore-patterns= # Add files or directories matching the regex patterns to the ignore-list. # The regex matches against paths. ignore-paths=cookiecutter-gcpdiag-rule/.* # Pickle collected data for later comparisons. persistent=no # List of plugins (as comma separated values of python modules names) to load, # usually to register additional checkers. load-plugins= # Use multiple processes to speed up Pylint. jobs=4 # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. unsafe-load-any-extension=no [MESSAGES CONTROL] # Only show warnings with the listed confidence levels. Leave empty to show # all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED confidence= # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). See also the "--disable" option for examples. #enable= # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifiers separated by comma (,) or put this # option multiple times (only on the command line, not in the configuration # file where it should appear only once).You can also use "--disable=all" to # disable everything first and then reenable specific checks. For example, if # you want to run only the similarities checker, you can use "--disable=all # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use"--disable=all --enable=classes # --disable=W" disable=abstract-method, apply-builtin, arguments-differ, attribute-defined-outside-init, backtick, bad-option-value, basestring-builtin, buffer-builtin, c-extension-no-member, consider-using-enumerate, cmp-builtin, cmp-method, coerce-builtin, coerce-method, consider-using-f-string, delslice-method, div-method, duplicate-code, eq-without-hash, execfile-builtin, file-builtin, filter-builtin-not-iterating, fixme, getslice-method, global-statement, hex-method, idiv-method, implicit-str-concat-in-sequence, import-error, import-self, import-star-module-level, inconsistent-return-statements, input-builtin, intern-builtin, invalid-str-codec, locally-disabled, long-builtin, long-suffix, map-builtin-not-iterating, misplaced-comparison-constant, missing-function-docstring, metaclass-assignment, next-method-called, next-method-defined, no-absolute-import, no-else-break, no-else-continue, no-else-raise, no-else-return, no-init, # added no-member, no-name-in-module, no-self-use, nonzero-method, oct-method, old-division, old-ne-operator, old-octal-literal, old-raise-syntax, parameter-unpacking, print-statement, raising-string, range-builtin-not-iterating, raw_input-builtin, rdiv-method, reduce-builtin, relative-import, reload-builtin, round-builtin, setslice-method, signature-differs, spelling, standarderror-builtin, suppressed-message, sys-max-int, too-few-public-methods, too-many-ancestors, too-many-arguments, too-many-boolean-expressions, too-many-branches, too-many-instance-attributes, too-many-locals, too-many-nested-blocks, too-many-public-methods, too-many-return-statements, too-many-statements, trailing-newlines, unichr-builtin, unicode-builtin, unnecessary-pass, unpacking-in-except, useless-else-on-loop, useless-object-inheritance, useless-suppression, using-cmp-argument, wrong-import-order, xrange-builtin, zip-builtin-not-iterating, [REPORTS] # Set the output format. Available formats are text, parseable, colorized, msvs # (visual studio) and html. You can also give a reporter class, eg # mypackage.mymodule.MyReporterClass. output-format=text # Tells whether to display a full report or only the messages reports=no # Python expression which should return a note less than 10 (10 is the highest # note). You have access to the variables errors warning, statement which # respectively contain the number of errors / warnings messages and the total # number of statements analyzed. This is used by the global evaluation report # (RP0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) # Template used to display messages. This is a python new-style format string # used to format the message information. See doc for all details #msg-template= [BASIC] # Good variable names which should always be accepted, separated by a comma good-names=main,_ # Bad variable names which should always be refused, separated by a comma bad-names= # Colon-delimited sets of names that determine each other's naming style when # the name regexes allow several styles. name-group= # Include a hint for the correct naming format with invalid-name include-naming-hint=no # List of decorators that produce properties, such as abc.abstractproperty. Add # to this list to register other decorators that produce valid properties. property-classes=abc.abstractproperty,cached_property.cached_property,cached_property.threaded_cached_property,cached_property.cached_property_with_ttl,cached_property.threaded_cached_property_with_ttl # Regular expression matching correct function names function-rgx=^(?:(?PsetUp|tearDown|setUpModule|tearDownModule)|(?P_?[A-Z][a-zA-Z0-9]*)|(?P_?[a-z][a-z0-9_]*))$ # Regular expression matching correct variable names variable-rgx=^[a-z][a-z0-9_]*$ # Regular expression matching correct constant names const-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$ # Regular expression matching correct attribute names attr-rgx=^_{0,2}[a-z][a-z0-9_]*$ # Regular expression matching correct argument names argument-rgx=^[a-z][a-z0-9_]*$ # Regular expression matching correct class attribute names class-attribute-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$ # Regular expression matching correct inline iteration names inlinevar-rgx=^[a-z][a-z0-9_]*$ # Regular expression matching correct class names class-rgx=^_?[A-Z][a-zA-Z0-9]*$ # Regular expression matching correct module names module-rgx=^(_?[a-z][a-z0-9_]*|__init__)$ # Regular expression matching correct method names method-rgx=(?x)^(?:(?P_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass|(test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next)|(?P_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P_{0,2}[a-z][a-z0-9_]*))$ # Regular expression which should only match function or class names that do # not require a docstring. no-docstring-rgx=(__.*__|main|test.*|.*test|.*Test)$ # Minimum line length for functions/classes that require docstrings, shorter # ones are exempt. docstring-min-length=10 [TYPECHECK] # List of decorators that produce context managers, such as # contextlib.contextmanager. Add to this list to register other decorators that # produce valid context managers. contextmanager-decorators=contextlib.contextmanager,contextlib2.contextmanager # Tells whether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). ignore-mixin-members=yes # List of module names for which member attributes should not be checked # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis. It # supports qualified module names, as well as Unix pattern matching. ignored-modules= # List of class names for which member attributes should not be checked (useful # for classes with dynamically set attributes). This supports the use of # qualified names. ignored-classes=optparse.Values,thread._local,_thread._local # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E1101 when accessed. Python regular # expressions are accepted. generated-members= [FORMAT] # Maximum number of characters on a single line. max-line-length=100 # TODO(https://github.com/PyCQA/pylint/issues/3352): Direct pylint to exempt # lines made too long by directives to pytype. # Regexp for a line that is allowed to be longer than the limit. ignore-long-lines=(?x)( ^\s*(\#\ )??$| ^\s*(from\s+\S+\s+)?import\s+.+$) # Allow the body of an if to be on the same line as the test if there is no # else. single-line-if-stmt=yes # Maximum number of lines in a module max-module-lines=99999 # String used as indentation unit. The internal Google style guide mandates 2 # spaces. Google's externally-published style guide says 4, consistent with # PEP 8. Here, we use 2 spaces, for conformity with many open-sourced Google # projects (like TensorFlow). indent-string=' ' # Number of spaces of indent required inside a hanging or continued line. indent-after-paren=4 # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. expected-line-ending-format= [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. notes=TODO [STRING] # This flag controls whether inconsistent-quotes generates a warning when the # character used as a quote delimiter is used inconsistently within a module. check-quote-consistency=yes [VARIABLES] # Tells whether we should check for unused import in __init__ files. init-import=no # A regular expression matching the name of dummy variables (i.e. expectedly # not used). dummy-variables-rgx=^\*{0,2}(_$|unused_|dummy_) # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. additional-builtins= # List of strings which can identify a callback function by name. A callback # name must start or end with one of those strings. callbacks=cb_,_cb # List of qualified module names which can have objects that can redefine # builtins. redefining-builtins-modules=six,six.moves,past.builtins,future.builtins,functools [LOGGING] # Logging modules to check that the string format arguments are in logging # function parameter format logging-modules=logging,absl.logging,tensorflow.io.logging [SIMILARITIES] # Minimum lines number of a similarity. min-similarity-lines=4 # Ignore comments when computing similarities. ignore-comments=yes # Ignore docstrings when computing similarities. ignore-docstrings=yes # Ignore imports when computing similarities. ignore-imports=no [SPELLING] # run with "make spelling" or a command like: # pip install PyEnchant # pylint --disable all --enable spelling --spelling-dict en_US gcpdiag # # Spelling dictionary name. Available dictionaries: none. To make it working # install python-enchant package. spelling-dict= # List of comma separated words that should not be checked. spelling-ignore-words= # A path to a file that contains private dictionary; one word per line. spelling-private-dict-file=.pylint-dictionary.txt # Tells whether to store unknown words to indicated private dictionary in # --spelling-private-dict-file option instead of raising a message. spelling-store-unknown-words=no [IMPORTS] # Deprecated modules which should not be used, separated by a comma deprecated-modules=regsub, TERMIOS, Bastion, rexec, sets # Create a graph of every (i.e. internal and external) dependencies in the # given file (report RP0402 must not be disabled) import-graph= # Create a graph of external dependencies in the given file (report RP0402 must # not be disabled) ext-import-graph= # Create a graph of internal dependencies in the given file (report RP0402 must # not be disabled) int-import-graph= # Force import order to recognize a module as part of the standard # compatibility libraries. known-standard-library= # Force import order to recognize a module as part of a third party library. known-third-party=enchant, absl # Analyse import fallback blocks. This can be used to support both Python 2 and # 3 compatible code, which means that the block might have code that exists # only in one or another interpreter, leading to false positives when analysed. analyse-fallback-blocks=no [CLASSES] # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__, __new__, setUp # List of member names, which should be excluded from the protected access # warning. exclude-protected=_asdict, _fields, _replace, _source, _make # List of valid names for the first argument in a class method. valid-classmethod-first-arg=cls, class_ # List of valid names for the first argument in a metaclass class method. valid-metaclass-classmethod-first-arg=mcs [EXCEPTIONS] # Exceptions that will emit a warning when being caught. Defaults to # "Exception" overgeneral-exceptions=builtins.StandardError, builtins.Exception, builtins.BaseException [DESIGN] # Increase allowed positional arguments from default (5) max-positional-arguments=8 ================================================ FILE: .safety-policy.yml ================================================ security: ignore-vulnerabilities: # Waiting for upstream fix for CVE-2025-69872 in diskcache "86338": ================================================ FILE: .style.yapf ================================================ [style] based_on_style = google indent_width = 2 ================================================ FILE: .vscode/extensions.json ================================================ { "recommendations": [ "ms-python.pylint", "ms-python.mypy-type-checker", "eeyore.yapf" ] } ================================================ FILE: .vscode/settings.json ================================================ { "editor.formatOnSave": true, "editor.insertSpaces": true, "editor.tabSize": 2, "files.insertFinalNewline": true, "files.trimTrailingWhitespace": true, "[python]": { "editor.defaultFormatter": "eeyore.yapf", "editor.codeActionsOnSave": { "source.organizeImports": "always" }, }, "pylint.severity": { "refactor": "Warning", }, "mypy-type-checker.args": [ "--follow-imports=silent", "--ignore-missing-imports", "--show-column-numbers", "--no-pretty", "--scripts-are-modules" ], "python.terminal.activateEnvInCurrentTerminal": true, "python.testing.pytestArgs": [ "gcpdiag" ], "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true, } ================================================ FILE: CHANGELOG.md ================================================ # Changelog ## 0.79 (2025-05-27) ### New Lints - lb/bp/2025\_003: new rule: lint rule for best practices for load balancer backend service connection draining setting. - lb/bp/2025\_002: new rule: Lint rule for backend service timeout best practice on load balancer. - interconnect/warn/2025\_001: interconnect rule: check interconnect MTU mismatch ### New Runbooks - interconnect/bgp-down-flap: interconnect BGP down flap runbook - gce/vm-creation: \[New Runbook\] GCE VM Creation runbook - gce/guestos-boot-up: \[New Runbook\] Guest OS boot-up issues ### New Queries - orgpolicy.\_get\_available\_org\_constraints: list all the org constraints available for a particular resource. Args: resource\_id: The resource ID. resource\_type: The resource type (project or organization). Returns: A list of available org policy constraints. Raises: utils.GcpApiError: on API errors. - billing.get\_billing\_info: Get Billing Information for a project, caching the result. - orgpolicy.get\_all\_project\_org\_policies: list all the org policies set for a particular resource. Args: project\_id: The project ID. Returns: A dictionary of PolicyConstraint objects, keyed by constraint name. Raises: utils.GcpApiError: on API errors. - network.get\_router\_by\_name ### New Features - Implement \--test-release flag in gcpdiag docker - Improved output message quality for all runbooks. - Add Bundle execution usage details to internal \+ external docs - Adding exceptions in constructing API endpoints for different services. - Add markdownlint precommit and graphviz dependencies - Add ossf scorecard Github Action and update pre-commit hooks ### Fixes - Update `job_id` parameter. - Update service name parameter. - Update output messages for interconnect and dataproc runbooks. - Update `cluster_name` parameter. - Disambiguate `name` parameter for GKE and GCF runbooks; fix GCF failed deployments template bug. - Update dataflow/dataproc jinja templates. - \[Bundles\] Fix missing `runbook_name` error. - \[gcpdiag runbook cli\] Fix missing json report error. - Fix missing import errors. - Fix `report.run_start_time` error. - Update pipenv to use the latest version to fix import errors. - Update Github Actions workflow to use a newer python version to fix tests. - Create exception for missing runbook parameters. - Update `README.md`. - Fix dataproc runbook parameter bug. - Improve Runbooks Response handling. - Use the diagnostic engines runbook loader for tests. - Update ops agent onboarding parameters. - Update artifact config. - Update artifact upload version. - Use scope instead of region wording in the unhealthy backends runbook. - Fix ossf scorecard action filename in config; re-enable pylint now that sub dependency setuptools is fixed ([https://github.com/pypa/setuptools/issues/4892\#issuecomment-2740696126](https://github.com/pypa/setuptools/issues/4892#issuecomment-2740696126)). - Migrate info logs to debug logs for messages with PII / SPII. - Disable py lint. - Deprecate unused gh-pages github action ([https://github.com/GoogleCloudPlatform/gcpdiag/actions/runs/13902316282/job/38976483921](https://github.com/GoogleCloudPlatform/gcpdiag/actions/runs/13902316282/job/38976483921)). - Improve the message when HC logs are not enabled. - github: Bump jinja2 from 3.1.5 to 3.1.6. ## 0.78 (2025-03-04) #### New Lints gke/warn/2025\_001: new rule: GKE external LB services are successfully created without encountering IP allocation failures due to external IPv6 subnet configurations. asm/warn/2025\_002: new rule: Upstream connection established successfully with no protocol errors asm/warn/2025\_001: new rule: ASM: Envoy doesn't report connection failure gke/err/2025\_001: GKE cluster complies with the serial port logging organization policy. #### New Runbooks gcf/failed-deployments: Cloud Run Functions runbook to assist users to check reasons for failed deployments of Gen2 cloud functions nat/public-nat-ip-allocation-failed: public nat ip allocation failed runbook dataproc/spark-job-failures: Dataproc Spark Job Runbook lb/latency: new runbook: Load Balancer Latency v1 #### New Queries gce.get\_global\_operations: Returns global operations object in the given project id. cloudasset.search\_all\_resources: Searches all cloud asset inventory in the project. lb.get\_load\_balancer\_type\_name: Returns a human-readable name for the given load balancer type. dataproc.list\_auto\_scaling\_policies: Lists all autoscaling policies in the given project and region. ### New Features pre-commit codespell check eliminate typos in the repositories Step class attributes interpolation in step names Check deprecated parameters in runbooks Migrate repository to python 3.12 output/api\_output.py: implement api output module Create threading.local() in op.py for data isolation. #### Fixes Update gke/err/2024\_003 to check for `container.defaultNodeServiceAccount` role Update formatting/style of all runbooks. fix runbook functionality to properly detect pod IP exhaustion and node IP exhaustion Explicitly handle HTTP 401 errors - Add step_error for exceptions caused by GcpApiError - Handle edge case where Improve error handling for iam.roles() ## 0.77 (2024-11-13) #### New Lint Rules - gke/err/2024\_002: gke webhook failure endpoints not available - gke/warn/2024\_007: GKE cluster in a dual-stack with external IPv6 access #### New Runbooks - lb/ssl-certificate: Runbook for troubleshooting LB SSL certificates issues - gke/node-unavailablity: Identifies the reasons for a GKE node being unavailable #### New Queries - gke.get\_cluster: Retrieve a single GKE cluster using its project, region, and cluster name. - dns.find\_dns\_records: Resolves DNS records for a given domain and returns a set of IP addresses. - lb.get\_ssl\_certifcate: Returns object matching certificate name and region - lb.get\_target\_https\_proxies: Retrieves the list of all TargetHttpProxy resources, regional and global, available to the specified project. - lb.get\_forwarding\_rule: Returns the specified ForwardingRule resource. #### Enhancements - Functionality to auto suggest correct runbook names for misspelled runbooks - Updated docker images to ubuntu:24.04 (python 3.12) - Updated devcontainer to python 3.12 - Migrated crm queries from v1 to v3 - gce/vm-performance: Added PD performance health check - gce/vm-performance: Implemented disk average\_io\_latency check - Removed apis\_utils.batch\_execute\_all call from orgpolicy query - Enabled gcpdiag.dev page indexing - Reduced API retries to 3 attempts - Improved START\_TIME\_UTC inconsistency & Error parsing date string fix - pubsub/pull-subscription-delivery: removed cold cache checks - Add functionality to disable query caching for edge cases - Improve error handling within gcpdiag library to raise errors for handling rather than exiting. #### Fixes - lb.get\_backend\_service: Improved calls to fetch global backend - Added project_id parameters for the runbook tests without valid project ids #### Deprecation - Flag `--project`: Full deprecation in **runbook command** to allow multiple project ids/numbers to be specified via `--parameter` ## 0.76 (2024-10-1) #### New Lint Rules - dataproc/warn/2024\_005: Investigates if Data Fusion version is compatible with Dataproc version from the CDAP Preferences settings #### New Runbooks - pubsub/pull-subscription-delivery: Investigates common Cloud Pub/Sub pull delivery issues related to delivery latency, quotas, pull rate and throughput rate #### New Queries - pubsub.get\_subscription: Retrieves a single pubsub subscription resource - apis.is\_all\_enabled: Check if a list of services are enabled on a given project - gke.get\_release\_schedule: Fetch GKE cluster release schedule #### Enhancements - `make new-rule`: A make rule with a [cookiecutter](https://www.cookiecutter.io/) recipe to generate new lint rule templates - gce.get\_gce\_public\_images: Improved gce\_stub query to correctly fetch all image licenses during test. - Runbooks metrics generation for Google Internal Users - New flag `--reason`: argument primarily used by Google internal users to specify rational for executing the tool - Bundles: A runbook feature to allow execution of a collection of steps - Runbook operation (op.add_metadata) to create or retrieve metadata related to steps #### Fixes - Enforce explicit parameter configuration in gce generalized steps. - dataflow/dataflow-permission: Refactored runbook to `dataflow/job-permission` - dataflow/bp/2024\_002: Fixed resource filtering bug for forwarding rule (internal LB) - gce/vm-performance: Fixed disk performance benchmark lookup #### Deprecation - apis\_utils.batch\_list\_all: Replaced by apis\utils.multi\_list\_all - Flag `--project`: Soft deprecation in **runbook command** to allow multiple project ids/numbers to be specified via `--parameter` - Deprecated pre-commit hook gke-eol-file ## 0.75 (2024-9-2) #### New Lint Rules - bigquery/WARN/2024\_005: Checks BigQuery table does not exceed number of partition modifications to a column partitioned table - bigquery/WARN/2024\_006: Checks BigQuery job does not exceed tabledata.list bytes per second per project - dataflow/ERR/2024\_006: Checks Dataflow job does not fail during execution due to resource exhaustion in zone - datafusion/WARN\_2024\_004: Checks Data Fusion version is compatible with Dataproc version from the corresponding compute profiles - gke/WARN/2024\_003: Checks Ingress traffic is successful if service is correctly mapped - gke/WARN/2024\_004: Checks Ingress is successful if backendconfig crd is correctly mapped - gke/WARN/2024\_005: Checks GKE Ingress successfully routes external traffic to NodePort service - gce/BP_EXT/2024\_002: Calculate a GCE VM's IOPS and Throughput Limits #### New Runbooks - lb/unhealthy-backends: Diagnose Unhealthy Backends of a Load Balancer - gke/resource-quota: Diagnose quota related issues related to gke clusters. - gce/vm-performance: Diagnose GCE VM performance - gke/image-pull: Diagnose Image Pull Failures related GKE clusters. - gke/node-auto-repair: RCA Node auto-repaired incidents - gke/gke-ip-masq-standard: Diagnose IP Masquerading issues on GKE clusters - dataflow/dataflow-permission: Diagnose Permission required for cluster creation and operation #### New Query - lb.get\_backend\_service: Fetch instances matching compute backend service name and/or region - lb.get\_backend\_service_health: Fetch compute backend service health data - generic\_api/datafusion: Re-implementation of how to call and test generic apis #### Enhancements - cloudrun/service-deployment: 2 additional checks for image not found and image permissions failure - bigquery/WARN/2022\_001: Updated lint rule diagnostic steps documentation - Implement ignorecase for input parameters - gce/ssh and gce/serial-log-analyzer: Include Auth failure checks in runbooks - Updated GKE version End of Life tracker - New API Stub for Recommender API #### Fixes - gce/vm-termination: Made vm name and zone mandatory fields - Updated dependencies: - aiohttp: 3.9.5 -> 3.10.3 - attrs: 23.2.0 -> 24.2.0 - cachetools: 5.3.3 -> 5.4.0 - certifi: 2024.6.2 -> 2024.7.4 - exceptiongroup: 1.2.1 -> 1.2.2 - google-api-python-client: 2.134.0 -> 2.141.0 - google-auth: 2.30.0 -> 2.33.0 - google-auth-oauthlib: 1.2.0 -> 1.2.1 - importlib-resources: 6.4.0 -> 6.4.2 - protobuf: 5.27.2 -> 5.27.3 - pyyaml: 6.0.1 -> 6.0.2 - soupsieve: 2.5 -> 2.6 - Fix lint output and GCE query functions for multi-region resources - Removed deprecated option skip\_delete from TF code ## 0.74 (2024-7-10) #### Fixes - Re-roll of v0.72 after correcting pip module issue with the docker image build #### New Lint Rule datafusion/warn\_2024\_002 Data Fusion instance is in a running state #### New Runbook dataproc/cluster\_creation Dataproc cluster creation diagnostic tree ## 0.73 (2024-7-8) #### New Feature - Added search command to scale the docstrings for lint rules or runbooks to match keywords - added runbook check step outcome: step\_ok, step\_failed, etc. - Added a zonal endpoint in osconfig library. It returns inventories for all VMs under a certain zone #### Fixes - Create runbook report regardless of the number of failed steps - Improve introductory error message for new runbooks - Update lint command API return value for display of resources in each rule - General spelling corrections - Add documentation for runbook operator methods - Remove unneeded google path reference in loading template block contenta - Update runbook name validation - Handle when gcloud command is not installed when running runbook generator - Allow to query logs for each test data separately in logs\_stub - Update GKE EOL date - Relax constraints on location of end steps in runbook - Update pip dependencies; security fix for pdoc - Added monitoring to the list of supported products runbook steps - generic\_api/datafusion apis.make\_request() re-implementation - Update and improve runbook error handling #### New Lint Rule - gke/err\_2024\_001\_psa\_violations Checking for no Pod Security Admission violations in the project - bigquery/warn\_2024\_002\_invalid\_external\_connection BigQuery external connection with Cloud SQL does not fail - pubsub/err\_2024\_003\_snapshot\_creation\_fails snapshot creation fails if backlog is too old - pubsub/err\_2024\_002\_vpc\_sc\_new\_subs\_create\_policy\_violated check for pubsub error due to organization policy - bigquery/warn\_2024\_0003 BigQuery job does not fail due to Maximum API requests per user per method exceeded #### New Runbook - gce/ops\_agent Ops Agent Onboarding runbook - gcp/serial\_log\_analyzer runbook to analyse known issues logged into Serial Console logs - vertex/workbench\_instance\_stuck\_in\_provisioning Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State - cloudrun/service\_deployment Cloud Run deployment runbook - gke/ip\_exhaustion gke ip exhaustion runbook - dataflow/failed\_streaming\_pipeline Diagnostic checks for failed Dataflow Streaming Pipelines - nat/out\_of\_resources vm external ip connectivity runbook ## 0.72 (2024-5-30) #### Fixes - update pyinstaller to include runbook command and templates in x20 binary build - Update pylint configuration files - Update GKE EOL file - fix case sensitive runbook bug with bool value interpretation - Revert "new rule: datafusion\_cdap\_api\_call\_implementation" - Revert "new rule:check scale down disabled for the compute profiles in the datafusion instance - Update pipenv dependencies. - pipenv upgrade idna and aiohttp per reported security vulnerabilities - Removed cloud resource manager dependency from gce/bp\_2024\_001 and gce/bp\_2024\_002 Rules. Improved error reporting. - default universe\_domain, credentials for runbook API, handle template path for runbook from API service - fix title for BP\_EXT/2024\_001.md conflict with BP/2024\_001.md - GCE lint legacy monitoring and agent: Report ok when VM manager (os config API) does not detect legacy agent packages on the GCE VM. #### New Features - added spell check and corrections of existing misspelled words #### New Runbook - new runbook: GKE logs - new runbook: GKE cluster autoscaler #### New Lint Rule - dataflow/err\_2024\_004\_missing\_gce\_permission\_temp\_bucket The Dataflow job has the necessary GCS permissions for the temporary bucket - gce/err\_2024\_003\_dataflow\_write\_truncate\_unbounded streaming dataflow jobs are not using write\_truncate when working with unbounded pcollections - gce/err\_2024\_004\_ops\_agent In additional to access scope and iam roles, the monitoring API and logging API should also be enabled on the project, for Ops Agent to send metrics and logs respectively. - gce/err\_2024\_004\_ops\_agent The rules verifies that the Ops Agent is installed on a GCE VM and is sending logs and metrics to gcloud backend. - gke/warn\_2024\_002\_ksa\_exceeded GKE KSA exceeded 3000 in WI enabled clusters. ## 0.71 (2024-4-17) #### New lint rules - datafusion/err\_2024\_001\_delete\_operation\_failing datafusion deletion operation - gce/err\_2024\_003\_vm\_secure\_boot\_failures GCE Lint rule for boot failures for Shielded VM - gce/bp\_2024\_001\_legacy\_monitoring\_agent GCE Legacy Monitoring Agent is not installed - gce/bp\_2024\_002\_legacy\_logging\_agent GCE Legacy Logging Agent is not be installed - gce/bp\_ext\_2024\_001\_no\_public\_ip.py GCE SSH in Browser: SSH Button Disabled - pubsub/bp\_2024\_001\_ouma\_less\_one\_day Oldest Unacked Message Age Value less than 24 hours - bigquery/err\_2024\_001\_query\_too\_complex query is too complex - bigquery/warn\_2024\_001\_imports\_or\_query\_appends\_per\_table table exceeds limit for imports or query appends #### New query - osconfig "OS management tools that can be used for patch management, patch compliance, and configuration management on VM instances." #### New runbook - gce/vm\_termination assist investigating underlying reasons behind termination or reboot - gke/cluster\_autoscaler GKE Cluster autoscaler error messages check #### New features - Add cache bypass option for runbook steps - Add runbook starter code generator; updates to code generator - Add API for runbook command #### Fixes - Add mock data for datafusion API testing - Correct runbook documentation generation output - Improve runbook operator functions usage - Add dataflow and other components to supported runbook component list - Remove duplicate vm\_termination.py script - Add jinja templates to docker image on cloud shell - correct argv passed for parsing in runbook command - Adding pipenv and git checks to help beginners get started easily on runbook generator - update idna pipenv CVE-2024-3651 Moderate severity - SSH runbook enhancements - runbook fixes - catch missing template errors, include project id when no parameters ## 0.70 (2024-3-27) #### New lint rules - pubsub/ERR\_2024\_001 bq subscription table not found - composer/WARN\_2024\_001 low scheduler cpu usage - datafusion/WARN\_2024\_001 data fusion version - composer/WARN\_2024\_002 worker pod eviction - gce/ERR\_2024\_002 performance - notebooks/ERR\_2024\_001 executor explicit project permissions - dataflow/WARN\_2024\_001 dataflow operation ongoing - dataflow/ERR\_2024\_001 dataflow gce quotas - dataflow/WARN\_2024\_002 dataflow streaming appliance commit failed - dataflow/ERR\_2024\_002 dataflow key commit - gke/WARN\_2024\_001 cluster nap limits prevent autoscaling #### New query - datafusion\_cdap API query implementation - provides CDAP profile metadata #### Fixes - Updated pipenv packages, Pipenv.lock dependencies - Updated github action workflow versions to stop warnings about node v10 and v10 - Refactor Runbook: Implemented a modular, class-based design to facilitate a more configurable method for tree construction. ## 0.69 (2024-2-21) #### New feature - add universe\_domain for Trusted Partner Client (TPC) #### New rules - asm/WARN\_2024\_001 Webhook failed - lb/BP\_2024\_002 Check if global access is on for the regional iLB - pubsub/WARN\_2024\_003 Pub/Sub rule: CMEK - Topic Permissions - dataproc/WARN\_2024\_001 dataproc check hdfs safemode status - dataproc/WARN\_2024\_002 dataproc hdfs write issues - gce/ERR\_2024\_001 GCE rule:Snapshot creation rate limit - lb/BP\_2024\_001 session affinity enabled on load balancer - pubsub/WARN\_2024\_002 GCS subscription has the apt permissions - dataflow/ERR\_2023\_010 missing required field - pubsub/WARN\_2024\_001 DLQ Subscription has apt permissions #### Fixes - Update Pull Request and Merge to only run when an update was committed - Creating a github action Workflow to automatically update the gke/eol.yaml file - Update gke/eol.yaml file ## 0.68 (2024-1-17) #### New Rules - gke/bp\_2023\_002 Gke cluster is a private cluster - composer/err\_2023\_002 Use allowed IP ranges to create Private IP Cluster - compoer/err\_2023\_004 DAG is detected as zombie - composer/err\_2023\_003 DAG timeout issue - composer/err\_2023\_005 Check NAT config for environment deletion fail - bigquery/err\_2023\_009 BigQuery job not failed due to Schedule query with multiple DML - gce/warn\_2023\_002 Serial logs don’t contain out-of-memory message due to airflow task run - dataflow/err\_2023\_011 Streaming insert mismatch column type - dataflow/err\_2023\_012 Spanner OOM - dataflow/err\_2023\_013 Spanner deadline error - pubsub/warn\_2023\_006 Pubsub push subscriptions have no push errors - dataproc/err\_2023\_008 Dataproc cluster disk space issues check and web page - composer/err\_2024\_001 Composer not failed due to 'no error was surfaced' error - lb/bp\_2023\_002 check that logging is enabled on health checks for load balancer backend services - vpc/warn\_2024\_001 Check Unused Reserved IP addresses - iam/sec\_2024\_001 Detect unused service accounts #### New module - Add billing module query and lint rules #### Fixes - Skip notebook instances query if API is not enabled - Update MD formatting for gke/WARN/2023\_004.md - Update conflicting credentials import name - Updating EOL rule snapshot to match new schedule - Update gke eol.yaml - add str repr of RuleModule for more info in exceptions loading rules - fixed bug in billing change 1673236 - added checks for correct permissions - fixed bug in change id 2113602 - updated condition for check NAT config rule #### Features and Improvements - Improved report generation for runbook - refactor lint.command.run to return a dict when run from API service - Add set\_credentials() method - Clear credentials used in API service after request - Updated gke eol.yaml - Added the id label to filter the Dataflow jobs using the job i ## 0.67 (2023-11-17) #### Fixes - Updating GKE EOL file and snapshot - Rewording message triggering internal leak test #### New Command and Rules - Runbook POC with ssh runbook and terraform scripts #### New rules - GKE cluster has workload identity enabled - Splunk job uses valid certificate ## 0.66 (2023-10-13) #### Fixes - Handle app failure when project policy contains cross-project service accounts - Update the version skew for modern versions of Kubernetes. - Updating working and typos in multiple files - Update gke test snapshot. - added content in md file for rule apigee\_err\_2023\_003 #### New rules - bigquery/ERR/2023\_008: user not authorized to perform this action - pubsub/WARN/2023\_005: bigquery subscription has apt permissions - asm/ERR/2023\_001, asm/ERR/2023\_002: Anthos Service mesh - gke/BP/2022\_003: Make GKE EOL detection more robust and less hardcoded - gke/WARN/2023\_004: Add a check for too low `maxPodsPerNode` number - gke/ERR/2023\_012: missing memory request for hpa - bigquery/ERR/2023\_006: bigquery policy does not belong to user - pubsub/WARN/2023\_00[14]: no subscription without attached topic - composer/WARN/2023\_009: Cloud Composer Intermittent Task Failure during Scheduling #### New module - Anthos Service mash ## 0.65 (2023-09-18) #### New rules - apigee/ERR/2023\_006: Multiple migs for multiple regions - vertex/WARN/2023\_001: New product: Vertex AI / new rule: check featurestores state - pubsub/WARN/2023\_001: Check that the project does not have a detached subscription - gke/ERR/2023\_011: GKE Metadata Server isn’t reporting errors for pod IP not found - dataflow/WARN/2023\_006: Dataflow job stuck in canceling state for more than half hour - vpc/WARN/2023\_001: Private service access not exporting custom routes - interconnect/WARN/2023\_001: Interconnect attachment is not using dataplane v1 - interconnect/WARN/2023\_002: Checking if the VLAN attachment is in a non functional state - pubsub/WARN/2023\_003: Topic has at least one attached subscription - bigquery/ERR/2023\_007: Data Transfer Service Agent exists and has the required roles - bigquery/WARN/2023\_002: BigQuery subscriptions have deadletter topic attached - dataproc/ERR/2023\_007: Enough resources in region for dataproc cluster creation - interconnect/WARN/2023\_003: Interconnect link is under maintenance #### Fixes - Account for GKE zones in vpc/WARN/2023\_002 - Refactor GCE label reference - Update pipenv - Fix typing Union in notebooks - Add prefetch\_rule to notebooks rules - Use more descriptive name for get-subscriptions method and account for deleted topics ## 0.64 (2023-08-14) #### New rules - gke/bp\_2023\_005\_gateway\_crd: manually installed gateway crd GKE - gke/err\_2023\_010\_nodelocal\_timeout: nodelocal dns timeout GKE - gke/err\_2023\_009\_missing\_cpu\_req: Missing CPU request GKE - gke/err\_2023\_008\_crashloopbackoff: gke cluster had pods in crashloopbackoff error GKE - gke/err\_2023\_006\_gw\_controller\_annotation\_error: GKE Gateway controller reporting misconfigured annotations in Gateway resource GKE - gke/err\_2023\_007\_gw\_controller\_http\_route\_misconfig: GKE Gateway controller reporting invalid HTTPRoute for Gateway GKE - dataflow/bp\_2023\_001\_dataflow\_supported\_sdk\_version\_check: Dataflow job using supported sdk version dataflow - cloudsql/warn\_2023\_003\_high\_mem\_usage: Cloud SQL instance's memory usage does not exceed 90% - cloudsql/bp\_ext\_2023\_003\_auto\_storage\_increases: Cloud SQL instance autoscaling is enabled - gke/warn\_2023\_003\_monitoring\_api\_disabled: Cloud Monitoring API enabled when GKE monitoring is enabled #### Fixes - Remove references to deprecated oauth option in docs b/281956212 - Update diagram titles to remove “gcp doctor” reference - Fix wrong cloudsql/WARN/2023\_003 MQL query cloudsql (external submission) - gcs/bp\_2022\_001\_bucket\_access\_uniform: skip cloud build and dataproc buckets issue/61 b/293951741 - gce/warn\_2022\_001\_iap\_tcp\_forwarding: skip check for dataproc cluster vm instances - gce/bp\_2021\_001\_serial\_logging\_enabled: skip check for dataproc cluster vm instances - gke/bp\_2022\_003\_cluster\_eol: end of life version list dates updated ## 0.63 (2023-07-10) #### Fixes - Fix futures timeout error. ## 0.62 (2023-07-10) #### New rules - cloudsql/SEC/2023\_001: Cloud SQL is not publicly accessible (github #73) - dataproc/ERR/2023\_002: Orphaned YARN application - dataflow/ERR/2023\_007: Streaming Dataflow doesn't report being stuck because of firewall rules #### Fixes - Fix GCE API being erroneously required to run gcpdiag - Fix locking issues in multi-threaded code - Improve caching of API exceptions ## 0.61 (2023-06-30) #### Fixes - Fix attribute error on dnssec API call ## 0.60 (2023-06-29) #### New rules - apigee/ERR/2023\_003: Private Google Access (PGA) for subnet of Managed Instance Group is enabled - apigee/ERR/2023\_004: Service Networking API is enabled and SA account has the required role - apigee/ERR/2023\_005: External Load Balancer (XLB) is able to connect to the MIG - bigquery/ERR/2023\_001: Jobs called via the API are all found - bigquery/ERR/2023\_002: BigQuery hasn't reported any unknown datasets - bigquery/ERR/2023\_003: BigQuery query job do not encounter resource exceeded error - bigquery/ERR/2023\_004: BigQuery query job do not encounter dml concurrency issue - bigquery/ERR/2023\_005: Scheduled query not failing due to outdated credentials - bigquery/WARN/2023\_003: BigQuery query job does not fail with too many output columns error - bigquery/WARN/2023\_004: BigQuery CMEK-related operations do not fail due to missing permissions - bigquery/WARN/2023\_005: No errors querying wildcard tables - cloudsql/BP/2023\_001: Cloud SQL is not assigned Public IP (github #65) - cloudsql/BP/2023\_002: Cloud SQL is configured with automated backup - cloudsql/BP\_EXT/2023\_001: Cloud SQL is defined with Maintenance Window as any (github #67) - cloudsql/BP\_EXT/2023\_002: Cloud SQL is configured with Deletion Protection (github #68) - cloudsql/BP\_EXT/2023\_003: Cloud SQL enables automatic storage increases feature - cloudsql/BP\_EXT/2023\_004: Cloud SQL instance is covered by the SLA - cloudsql/ERR/2023\_001: Cloud SQL instance should not be in SUSPENDED state - cloudsql/WARN/2023\_001: Cloud SQL instance's log_output flag is not configured as TABLE - cloudsql/WARN/2023\_002: Cloud SQL instance's avg CPU utilization is not over 98% for 6 hours - cloudsql/WARN/2023\_003: Cloud SQL instance's memory usage does not exceed 90% - composer/BP/2023\_001: Cloud Composer logging level is set to INFO - composer/BP/2023\_002: Cloud Composer's worker concurrency is not limited by parallelism - composer/BP/2023\_003: Cloud Composer does not override the StatsD configurations - composer/BP\_EXT/2023\_001: Cloud Composer has no more than 2 Airflow schedulers - composer/BP\_EXT/2023\_002: Cloud Composer has higher version than airflow-2.2.3 - composer/ERR/2023\_001: Cloud Composer is not in ERROR state - composer/WARN/2023\_001: Cloud Composer does not override Kerberos configurations - composer/WARN/2023\_002: Cloud Composer tasks are not interrupted by SIGKILL - composer/WARN/2023\_003: Cloud Composer tasks are not failed due to resource pressure - composer/WARN/2023\_004: Cloud Composer database CPU usage does not exceed 80% - composer/WARN/2023\_005: Cloud Composer is consistently in healthy state - composer/WARN/2023\_006: Airflow schedulers are healthy for the last hour - composer/WARN/2023\_007: Cloud Composer Scheduler CPU limit exceeded - composer/WARN/2023\_008: Cloud Composer Airflow database is in healthy state - dataflow/ERR/2023\_001: Dataflow service account has dataflow.serviceAgent role - dataflow/ERR/2023\_002: Dataflow job does not fail during execution due to IP space exhaustion - dataflow/ERR/2023\_003: Dataflow job does not fail during execution due to incorrect subnet - dataflow/ERR/2023\_004: Dataflow job does not fail due to organization policy constraints - dataflow/ERR/2023\_005: Dataflow job does not fail during execution due credential or permission issue - dataflow/ERR/2023\_006: Dataflow job fails if Private Google Access is disabled on subnetwork - dataflow/WARN/2023\_001: Dataflow job does not have a hot key - dataproc/ERR/2023\_002: No orphaned YARN application found - dataproc/ERR/2023\_003: Dataproc cluster service account permissions - dataproc/ERR/2023\_004: Dataproc firewall rules for connectivity between master and worker nodes - dataproc/ERR/2023\_005: Dataproc cluster has sufficient quota - dataproc/ERR/2023\_006: DataProc cluster user has networking permissions on host project - gce/WARN/2023\_001: GCE snapshot policies are defined only for used disks - gke/ERR/2023\_004: GKE ingresses are well configured - gke/ERR/2023\_005: Workloads not reporting misconfigured CNI plugins - iam/BP/2023\_001: Policy constraint 'AutomaticIamGrantsForDefaultServiceAccounts' enforced - interconnect/BP/2023\_001: VLAN attachments deployed in same metro are in different EADs - lb/BP/2023\_001: Cloud CDN is enabled on backends for global external load balancers - notebooks/BP/2023\_001: Vertex AI Workbench instance enables system health report - notebooks/BP/2023\_003: Vertex AI Workbench runtimes for managed notebooks are up to date - notebooks/ERR/2023\_002: Vertex AI Workbench account has compute.subnetworks permissions - notebooks/ERR/2023\_003: Vertex AI Workbench account has permissions to create and use notebooks - notebooks/ERR/2023\_004: Vertex AI Workbench runtimes for managed notebooks are healthy - notebooks/WARN/2023\_001: Vertex AI Workbench instance is not being OOMKilled - notebooks/WARN/2023\_002: Vertex AI Workbench instance is in healthy data disk space status - notebooks/WARN/2023\_003: Vertex AI Workbench instance is in healthy boot disk space status - vpc/SEC/2023\_001: DNSSEC is enabled for public zones - vpc/WARN/2023\_002: Private zone is attached to a VPC #### Enhancements - Support for sub project resource filtering (`--name`, `--location`, `--label`) - Support fetching serial port output logs from Compute API (`--enable-gce-serial-buffer`) - New product: Cloud Dataflow - New product: Cloud Interconnect - Add kubectl query module - Optimizations for logging based composer rules #### Fixes - gke/BP/2022\_003: updated EOL schedule for GKE - Fix billing project id not set at startup (github #58) - Fix JSON format with --output=json (github #62) - Fix GCS uniform bucket access detection (github #69) - dataproc/WARN/2022\_002: fix attribute lookup error (github #57) - gke/WARN/2021\_003: update GKE pod cidr rule to report values per pod cidr range ## 0.59 (2023-04-14) #### New rules - apigee/ERR/2023\_001: Customer's network is peered to Apigee's network - apigee/ERR/2023\_002: Network bridge managed instance group is correctly configured - bigquery/WARN/2022\_003: BigQuery copy job does not exceed the daily copy quota - bigquery/WARN/2022\_004: BigQuery copy job does not exceed the cross-region daily copy quota - bigquery/WARN/2023\_001: BigQuery query job does not time out during execution - composer/WARN/2022\_003: Composer scheduler parses all DAG files without overloading - datafusion/ERR/2022\_008: Cloud Data Fusion SA has Service Account User permissions on the Dataproc SA - datafusion/ERR/2022\_009: Cloud Dataproc Service Account has a Cloud Data Fusion Runner role - datafusion/ERR/2022\_010: Cloud Dataproc Service Account has a Dataproc Worker role - datafusion/ERR/2022\_011: The Dataproc SA for a CDF instance with version > 6.2.0 has Storage Admin role - dataproc/ERR/2022\_004: Dataproc on GCE master VM is able to communicate with at least one worker VM - dataproc/ERR/2023\_001: Dataproc cluster initialization completed by the end of the timeout period - dataproc/WARN/2022\_004: Cluster should normally spend most of the time in RUNNING state - dataproc/WARN/2023\_001: Concurrent Job limit was not exceeded - dataproc/WARN/2023\_002: Master Node System Memory utilization under threshold - gae/ERR/2023\_001: App Engine: VPC Connector creation failure due to Org Policy - gae/ERR/2023\_002: App Engine: VPC Connector creation due to subnet overlap - gcb/ERR/2022\_004: Cloud Build Service Agent has the cloudbuild.serviceAgent role - gce/BP/2023\_001: GCE Instances follows access scope best practice - gce/BP/2023\_001: Instance time source is configured with Google NTP server - gce/ERR/2022\_002: Serial logs don't contain Guest OS activation errors - gce/WARN/2022\_010: GCE has enough resources available to fulfill requests - gce/WARN/2022\_011: GCE VM service account is valid - gce/WARN/2022\_012: Validate if a Microsoft Windows instance is able to activate using GCP PAYG licence - gke/BP/2023\_001: GKE network policy minimum requirements - gke/BP/2023\_002: Stateful workloads do not run on preemptible node - gke/BP/2023\_004: GKE clusters are VPC-native - gke/BP_EXT/2023\_003: GKE maintenance windows are defined - gke/ERR/2023\_001: Container File System API quota not exceeded - gke/ERR/2023\_002: GKE private clusters are VPC-native - gke/ERR/2023\_003: containerd config.toml is valid - gke/WARN/2023\_001: Container File System has the required scopes for Image Streaming - gke/WARN/2023\_002: GKE workload timeout to Compute Engine metadata server - lb/BP/2022\_001: LocalityLbPolicy compatible with sessionAffinity - notebooks/ERR/2023\_001: Vertex AI Workbench user-managed notebook instances are healthy - vpc/BP/2022\_001: Explicit routes for Google APIs if the default route is modified - vpc/BP/2023\_001: DNS logging is enabled for public zones #### Enhancements - New product: Cloud Load Balancing - New product: Vertex AI Workbench Notebooks - Experimental asynchronous IO execution (not enabled by default) - gcb/ERR/2022\_002: Check access to images hosted in gcr.io repositories - Add support for interconnect API - Extract project id from email when fetching service accounts instead of using wildcard, making IAM service account checks more reliable. - --project now accepts project numbers in addition to project ids #### Fixes - gke/BP/2022\_003: updated EOL schedule for GKE - Fix 403 error on userinfo API call ## 0.58 (2022-11-08) #### Deprecation - Python 3.9+ is required for gcpdiag. Python 3.8 and older versions support is deprecated. - Deprecated authentication using OAuth (`--auth-oauth`) has been removed. #### New rules - apigee/ERR/2022\_002: Verify whether Cloud KMS key is enabled and could be accessed by Apigee Service Agent - datafusion/ERR/2022\_003: Private Data Fusion instance is peered to the tenant project - datafusion/ERR/2022\_004: Cloud Data Fusion Service Account has necessary permissions - datafusion/ERR/2022\_005: Private Data Fusion instance has networking permissions - datafusion/ERR/2022\_006: Private Google Access enabled for private Data Fusion instance subnetwork - datafusion/ERR/2022\_007: Cloud Data Fusion Service Account exists at a Project - gke/BP/2022\_004: GKE clusters should have HTTP load balancing enabled to use GKE ingress #### Enhancements - Python dependencies updated #### Fixes - gke/ERR/2021\_002: skip if there are no GKE clusters ## 0.57 (2022-09-29) #### Deprecation - Default authentication using OAuth (`--auth-oauth`) is now deprecated and Application Default Credentials (`--auth-adc`) will be used instead. Alternatively you can use Service Account private key (`--auth-key FILE`). #### New rules - apigee/WARN/2022\_001: Verify whether all environments has been attached to Apigee X instances - apigee/WARN/2022\_002: Environment groups are created in the Apigee runtime plane - cloudrun/ERR/2022\_001: Cloud Run service agent has the run.serviceAgent role - datafusion/ERR/2022\_001: Firewall rules allow for Data Fusion to communicate to Dataproc VMs - datafusion/ERR/2022\_002: Private Data Fusion instance has valid host VPC IP range - dataproc/WARN/2022\_001: Dataproc VM Service Account has necessary permissions - dataproc/WARN/2022\_002: Job rate limit was not exceeded - gcf/ERR/2022\_002: Cloud Function deployment failure due to Resource Location Constraint - gcf/ERR/2022\_003: Function invocation interrupted due to memory limit exceeded - gke/WARN/2022/\_008: GKE connectivity: possible dns timeout in some gke versions - gke/WARN/2022\_007: GKE nodes need Storage API access scope to retrieve build artifacts - gke/WARN/2022\_008: GKE connectivity: possible dns timeout in some gke versions #### Enhancements - New product: Cloud Run - New product: Data Fusion #### Fixes - gcf/WARN/2021\_002: Added check for MATCH_STR - gcs/BP/2022\_001: KeyError: 'iamConfiguration' - gke/ERR/2022\_003: unhandled exception - gke/WARN/2022\_005: Incorrectly report missing "nvidia-driver-installer" daemonset - iam/SEC/2021\_001: unhandled exception ## 0.56 (2022-07-18) #### New rules - bigquery/ERR/2022\_001: BigQuery is not exceeding rate limits - bigquery/ERR/2022\_001: BigQuery jobs not failing due to concurrent DML updates on the same table - bigquery/ERR/2022\_002: BigQuery jobs are not failing due to results being larger than the maximum response size - bigquery/ERR/2022\_003: BigQuery jobs are not failing while accessing data in Drive due to a permission issue - bigquery/ERR/2022\_004: BigQuery jobs are not failing due to shuffle operation resources exceeded - bigquery/WARN/2022\_002: BigQuery does not violate column level security - cloudsql/WARN/2022\_001: Docker bridge network should be avoided - composer/WARN/2022\_002: fluentd pods in Composer environments are not crashing - dataproc/ERR/2022\_003: Dataproc Service Account permissions - dataproc/WARN/2022\_001: Dataproc clusters are not failed to stop due to the local SSDs - gae/WARN/2022\_002: App Engine Flexible versions don't use deprecated runtimes - gcb/ERR/2022\_002: Cloud Build service account registry permissions - gcb/ERR/2022\_003: Builds don't fail because of retention policy set on logs bucket - gce/BP/2022\_003: detect orphaned disks - gce/ERR/2022\_001: Project limits were not exceeded - gce/WARN/2022\_004: Cloud SQL Docker bridge network should be avoided - gce/WARN/2022\_005: GCE CPU quota is not near the limit - gce/WARN/2022\_006: GCE GPU quota is not near the limit - gce/WARN/2022\_007: VM has the proper scope to connect using the Cloud SQL Admin API - gce/WARN/2022\_008: GCE External IP addresses quota is not near the limit - gce/WARN/2022\_009: GCE disk quota is not near the limit - gcf/ERR/2022\_001: Cloud Functions service agent has the cloudfunctions.serviceAgent role - gcf/WARN/2021\_002: Cloud Functions have no scale up issues - gke/BP\_EXT/2022\_001: Google Groups for RBAC enabled (github #12) - gke/WARN/2022\_006: GKE NAP nodes use a containerd image - tpu/WARN/2022\_001: Cloud TPU resource availability - vpc/WARN/2022\_001: Cross Project Networking Service projects quota is not near the limit #### Updated rules - dataproc/ERR/2022\_002: fix os version detection (github #26) - gke/BP/2022\_003: update GKE EOL schedule - gke/ERR/2022\_001: fix KeyError exception - gke/BP/2022\_002: skip legacy VPC #### Enhancements - Add support for multiple output formats (--output=csv, --output=json) - Better handle CTRL-C signal - Org policy support - New product: CloudSQL - New product: VPC - Renamed product "GAES" to "GAE" (Google App Engine) - Publish internal API documentation on - Update Python dependencies ## 0.55 (2022-04-25) Version 0.55 was released with the same code as 0.54. The release was used to facilitate the transition of binaries to another location. ## 0.54 (2022-04-25) #### New rules - apigee/ERR/2022_001: Apigee Service Agent permissions #### Enhancements - dynamically load gcpdiag lint rules for all products - support IAM policy retrieval for Artifact Registry - move gcpdiag release buckets to new location #### Fixes - gke/ERR/2022_002: use correct network for shared VPC scenario (#24) - error out early if service accounts of inspected projects can't be retrieved - fix docker wrapper script for --config and --auth-key options - allow to create test projects in an org folder - ignore more system service accounts (ignore all accounts starting with gcp-sa) ## 0.53 (2022-03-30) #### New rules - composer/ERR/2022_001: Composer Service Agent permissions - composer/ERR/2022_002: Composer Environment Service Account permissions - composer/WARN/2022_001: Composer Service Agent permissions for Composer 2.x - gce/BP_EXT/2022_001: GCP project has VM Manager enabled - gce/WARN/2022_003: GCE VM instances quota is not near the limit - gke/BP/2022_002: GKE clusters are using unique subnets - gke/BP/2022_003: GKE cluster is not near to end of life - gke/WARN/2022_003: GKE service account permissions to manage project firewall rules - gke/WARN/2022_004: Cloud Logging API enabled when GKE logging is enabled - gke/WARN/2022_005: NVIDIA GPU device drivers are installed on GKE nodes with GPU #### Enhancements - Support IAM policies for service accounts and subnetworks - Skip rules using logs if Cloud Logging API is disabled - New option: --logs-query-timeout - Add support for configuration files (see ) #### Fixes - Fix various unhandled exceptions ## 0.52 (2022-02-11) #### New rules - dataproc/BP/2022_001: Cloud Monitoring agent is enabled. - dataproc/ERR/2022_002: Dataproc is not using deprecated images. - gce/WARN/2022_001: IAP service can connect to SSH/RDP port on instances. - gce/WARN/2022_002: Instance groups named ports are using unique names. - gke/ERR/2022_002: GKE nodes of private clusters can access Google APIs and services. - gke/ERR/2022_003: GKE connectivity: load balancer to node communication (ingress). #### Updated rules - gcb/ERR/2022_001: Fix false positive when no build is configured. - gke/WARN/2021_008: Improve Istio deprecation message #### Enhancements - Introduce "extended" rules (BP_EXT, ERR_EXT, etc.), disabled by default and which can be enabled with --include-extended. - Large IAM policy code refactorings in preparation for org-level IAM policy support. #### Fixes - More API retry fixes. - Fix --billing-project which had no effect before. - Fix exception related to GCE instance scopes. ## 0.51 (2022-01-21) #### Fixes - Update Python dependencies, and add 'packaging', missing in the docker image. ## 0.50 (2022-01-21) #### New rules - gcb/ERR/2022_001: The Cloud Build logs do not report permission issues - gce/BP/2021_002: GCE nodes have an up to date ops agent - gce/BP/2021_003: Secure Boot is enabled - gce/ERR/2021_004: Serial logs don’t contain Secure Boot errors - gce/ERR/2021_005: Serial logs don't contain mount error messages - gce/WARN/2021_005: Serial logs don't contain out-of-memory messages - gce/WARN/2021_006: Serial logs don't contain "Kernel panic" messages - gce/WARN/2021_007: Serial logs don't contain "BSOD" messages - gcs/BP/2022_001: Buckets are using uniform access - gke/BP/2022_001: GKE clusters are regional - gke/ERR/2022_001: GKE connectivity: pod to pod communication - gke/WARN/2022_001: GKE clusters with workload identity are regional - gke/WARN/2022_002: GKE metadata concealment is not in use #### Updated rules - gcf/WARN/2021_001: add one more deprecated runtime Nodejs6 (github #17) #### Enhancements - New product: App Engine Standard - New product: Cloud Build - New product: Cloud Pub/Sub - New product: Cloud Storage #### Fixes - Verify early that IAM API is enabled - Catch API errors in prefetch_rule - Disable italic in Cloud Shell - Implement retry logic for batch API failures ## 0.49 (2021-12-20) #### New / updated rules - dataproc/BP/2021_001: Dataproc Job driver logs are enabled - composer/WARN/2021_001: Composer environment status is running (b/207615409) - gke/ERR/2021_013: GKE cluster firewall rules are configured. (b/210407018) - gke/ERR/2021_014: GKE masters of can reach the nodes. (b/210407018) - gke/ERR/2021_015: GKE connectivity: node to pod communication. (b/210407018) - gce/WARN/2021_001: verify logging access scopes (b/210711351) - gce/WARN/2021_003: verify monitoring access scopes (b/210711351) #### Enhancements - New product: Cloud Composer (b/207615409) - Simplify API testing by using ephemeral projects (b/207484323) - gcpdiag.sh wrapper script now verifies the minimum version of current script - Add support for client-side firewall connectivity tests (b/210407018) #### Fixes ## 0.48 (2021-11-15) #### New rules - apigee/WARN/2021_001: Every env. group has at least one env. (b/193733957) - dataproc/WARN/2021_001: Dataproc cluster is in RUNNING state (b/204850980) #### Enhancements - Use OAuth authentication by default (b/195908593) - New product: Dataproc (b/204850980) - New product: Apigee (b/193733957) #### Fixes - Fix GitHub actions with newest pipenv ## 0.47 (2021-11-01) #### New rules - gce/WARN/2021_004: check serial output for 'disk full' messages (b/193383069) #### Enhancements - Add podman support in wrapper script #### Fixes - Fix gcf KeyError when API enabled but no functions defined (b/204516746) ## 0.46 (2021-10-27) #### New rules - gce/WARN/2021_003: gce service account monitoring permissions (b/199277342) - gcf/WARN/2021_001: cloud functions deprecated runtimes - gke/WARN/2021_009: deprecated node image types (b/202405661) #### Enhancements - New website! - Rule documentation permalinks added to lint output (b/191612825) - Added --include and --exclude arguments to filter rules to run (b/183490284) ## 0.45 (2021-10-08) #### Enhancements - Use --auth-adc by default for all non-google.com users (b/202488675) ## 0.44 (2021-10-07) #### New rules - gke/ERR/2021_009: gke cluster and node pool version skew (b/200559114) - gke/ERR/2021_010: clusters are not facing ILB quota issues (b/193382041) - gke/ERR/2021_011: ip-masq-agent errors (b/199480284) - iam/SEC/2021_001: no service account has owner role (b/201526416) #### Enhancements - Improve error message for --auth-adc authentication errors (b/202091830) - Suggest gcloud command if CRM API is not enabled - Use --auth-adc by default in Cloud Shell (b/201996404) - Improve output with hidden items - Update docker image to python:3.9-slim #### Fixes - Make the docker wrapper macos-compatible (GH-10) - Exclude fleet workload identities from SA disabled check (b/201631248) ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, education, socioeconomic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. This Code of Conduct also applies outside the project spaces when the Project Steward has a reasonable belief that an individual's behavior may have a negative impact on the project or its community. ## Conflict Resolution We do not believe that all conflict is bad; healthy debate and disagreement often yield positive results. However, it is never okay to be disrespectful or to engage in behavior that violates the project’s code of conduct. If you see someone violating the code of conduct, you are encouraged to address the behavior directly with those involved. Many issues can be resolved quickly and easily, and this gives people more control over the outcome of their dispute. If you are unable to resolve the matter for any reason, or if the behavior is threatening or harassing, report it. We are dedicated to providing an environment where participants feel welcome and safe. Reports should be directed to David Schweikert , the Project Steward(s) for gcpdiag. It is the Project Steward’s duty to receive and address reported violations of the code of conduct. They will then work with a committee consisting of representatives from the Open Source Programs Office and the Google Open Source Strategy team. If for any reason you are uncomfortable reaching out to the Project Steward, please email opensource@google.com. We will investigate every complaint, but you may not receive a direct response. We will use our discretion in determining when and how to follow up on reported incidents, which may range from not taking action to permanent expulsion from the project and project-sponsored spaces. We will notify the accused of the report and provide them an opportunity to discuss it before any action is taken. The identity of the reporter will be omitted from the details of the report supplied to the accused. In potentially harmful situations, such as ongoing harassment or threats to anyone's safety, we may take action without notice. ## Attribution This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html ================================================ FILE: CONTRIBUTING.md ================================================ # How to Contribute We'd love to accept your patches and contributions to this project. There are just a few small guidelines you need to follow. ## Contributor License Agreement Contributions to this project must be accompanied by a Contributor License Agreement (CLA). You (or your employer) retain the copyright to your contribution; this simply gives us permission to use and redistribute your contributions as part of the project. Head over to to see your current agreements on file or to sign a new one. You generally only need to submit a CLA once, so if you've already submitted one (even if it was for a different project), you probably don't need to do it again. ## Code Reviews All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests. ## Community Guidelines This project follows [Google's Open Source Community Guidelines](https://opensource.google/conduct/). ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] 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. ================================================ FILE: Makefile ================================================ VERSION=$(shell sed -n 's/^current_version\s*=\s*//p' <.bumpversion.cfg) DIST_NAME=gcpdiag-$(VERSION) SHELL=/bin/bash .PHONY: test coverage-report version build bump-version tarfile release runbook-docs runbook-starter-code spelling # Comprehensive environment check. check-environment: @command -v pipenv >/dev/null 2>&1 || { echo >&2 "ERROR: pipenv is not installed. Please run 'pip install pipenv' and try again."; exit 1; } @if [ -z "$$(pipenv --venv)" ]; then \ echo "Pipenv environment not created. Please run 'pipenv install --dev'."; \ exit 1; \ fi @pipenv check || { \ REQUIRED_PYTHON_VERSION=$$(sed -n 's/^python_version\s*=\s*"\(.*\)"/\\1/p' < Pipfile); \ echo >&2 "ERROR: Pipenv check failed. Your Python version might be incorrect."; \ echo >&2 "Please run 'pipenv --rm && pipenv --python $$REQUIRED_PYTHON_VERSION install --dev' to fix this."; \ exit 1; \ } test: check-environment pipenv run pytest -o log_level=DEBUG --cov-config=.coveragerc --cov=gcpdiag --forked coverage-report: pipenv run pytest --cov-config=.coveragerc --cov=gcpdiag --forked --cov-report html --cov-report term-missing @echo "" @echo "To view the report, run the following command in your terminal:" @echo "python3 -m http.server 8080" @echo "Then open http://localhost:8080/htmlcov/ in your browser." test_async_api: python -m unittest gcpdiag.async_queries.api.api_slowtest test-mocked: # run gcpdiag-mocked and verify that the exit status is what we expect bin/gcpdiag-mocked lint --auth-adc --project=gcpdiag-gke1-aaaa; \ EXIT_CODE=$$?; \ if [ $$EXIT_CODE != 2 ]; then echo "incorrect exit code $$EXIT_CODE" >&2; exit 1; fi; \ exit 0 spelling: pip install -U PyEnchant; pylint --disable all --enable spelling --spelling-dict en_US gcpdiag snapshots: pytest --snapshot-update --forked -v -v gke-eol-file: ./gcpdiag/lint/gke/eol_parser.sh > gcpdiag/lint/gke/eol.yaml version: @echo $(VERSION) build: rm -f dist/gcpdiag pyinstaller --workpath=.pyinstaller.build pyinstaller.spec bump-version: bumpversion --commit minor new-rule: python cookiecutter-gcpdiag-rule/cookiecutter_runner.py tarfile: # TODO: replace with something based on setuptools? rm -rf dist-tmp mkdir -p dist-tmp/$(DIST_NAME)/bin cp Pipfile Pipfile.lock README.md dist-tmp/$(DIST_NAME) cp bin/gcpdiag dist-tmp/$(DIST_NAME)/bin chmod +x dist-tmp/$(DIST_NAME)/bin/gcpdiag cp --parents gcpdiag/queries/client_secrets.json dist-tmp/$(DIST_NAME) find gcpdiag -name '*.py' -exec cp --parents '{}' dist-tmp/$(DIST_NAME) ';' find gcpdiag -name '*.jinja' -exec cp --parents '{}' dist-tmp/$(DIST_NAME) ';' find gcpdiag/runbook/gce/disk_performance_benchmark -name '*.json' -exec cp --parents '{}' dist-tmp/$(DIST_NAME) ';' chmod -R a+rX dist-tmp mkdir -p dist tar -C dist-tmp -czf dist/gcpdiag-$(VERSION).tar.gz --owner=0 --group=0 gcpdiag-$(VERSION) rm -rf dist-tmp release: # Make sure we are using the latest submitted code. git fetch git checkout origin/master # Remove '-test' in the version. # Note: this will fail if we have already a release tag, in which case # you should first increase the minor version with a code review. bumpversion --commit --tag --tag-message "Release v{new_version}" release # Push to the release branch and tag the release. # Note: We want ff-only because otherwise the commit ids will be different # between master and release, and that causes problems with tags # (and in particular the version tag pointing to a commit in the release # branch, so that git describe doesn't work correctly in master, which # itself disrupts the creation of tags in GitHub by Copybara), # If this fails, you probably should force-push from master to the # release branch. The release branch is only used to kick off releases # in Kokoro. git merge --ff-only origin/release git push origin HEAD:release git push --tags # increment the version (and add back '-test') bumpversion --commit minor git push origin HEAD:refs/for/master runbook-docs: # Help developers generate and update docs before actually running full precommit pre-commit run gcpdiag-custom-runbook-rule runbook-starter-code: @[ "$(name)" ] || (echo "name is not set. Usage: make $@ name=product/runbook-id" && false) @PYTHON=`which python3 || which python`;\ if [ -z "$$PYTHON" ]; then \ echo "Python is not installed or not found in PATH"; \ exit 1; \ fi;\ echo "Using Python at $$PYTHON"; \ $$PYTHON bin/runbook-starter-code-generator py_path=$$PYTHON name=$(name) prepenv=$(prepenv) ================================================ FILE: PRIVACY.md ================================================ See: https://gcpdiag.dev/privacy ================================================ FILE: Pipfile ================================================ [[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [requires] python_version = "3.12" [packages] aiohttp = "*" appdirs = "*" boltons = "*" blessings = "*" dataclasses = "==0.6" diskcache = "*" dnspython = "*" google-api-python-client = "*" google-auth-oauthlib = "*" importlib-resources = "*" jinja2 = ">=3.0.0" packaging = "==23.*" python-dateutil = "*" pyyaml = "*" ratelimit = "*" six = "==1.16.0" # Python 3.7 compatibility typing-extensions = "*" # Python 3.9 compatibility exceptiongroup = "*" beautifulsoup4 = "*" async-timeout = "*" bs4 = "*" [dev-packages] absl-py = "*" astunparse = "*" bump2version = "*" coverage = "*" dnspython = "*" importlib-metadata = "*" isort = "==5.12.0" mypy = "*" pdoc = "*" pre-commit = "*" pyinstaller = "*" pytest = "*" pytest-cov = "*" pytest-forked = "*" pytest-snapshot = "*" yapf = "*" pylint = "*" # for vim: # pip install 'python-language-server[yapf,pyflakes,mccabe]' safety = "*" types-pyyaml = "*" cookiecutter = "*" ================================================ FILE: README.md ================================================ # gcpdiag - Diagnostics for Google Cloud Platform [![code analysis badge](https://github.com/GoogleCloudPlatform/gcpdiag/actions/workflows/code-analysis.yml/badge.svg?branch=main&event=push)](https://github.com/GoogleCloudPlatform/gcpdiag/actions/workflows/code-analysis.yml?query=branch%3Amain+event%3Apush) [![test badge](https://github.com/GoogleCloudPlatform/gcpdiag/actions/workflows/test.yml/badge.svg?branch=main&event=push)](https://github.com/GoogleCloudPlatform/gcpdiag/actions/workflows/test.yml?query=branch%3Amain+event%3Apush) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/GoogleCloudPlatform/gcpdiag/badge)](https://scorecard.dev/viewer/?uri=github.com/GoogleCloudPlatform/gcpdiag) **gcpdiag** is a command-line diagnostics tool for GCP customers. It finds and helps to fix common issues in Google Cloud Platform projects. It is used to test projects against a wide range of best practices and frequent mistakes, based on the troubleshooting experience of the Google Cloud Support team. gcpdiag is open-source and contributions are welcome! Note that this is not an officially supported Google product, but a community effort. The Google Cloud Support team maintains this code and we do our best to avoid causing any problems in your projects, but we give no guarantees to that end. gcpdiag demo ## Installation You can run gcpdiag using a shell wrapper that starts gcpdiag in a Docker container. This should work on any machine with Docker or Podman installed, including Cloud Shell. ``` curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag chmod +x gcpdiag ./gcpdiag lint --project=MYPROJECT ``` ## Usage Currently gcpdiag mainly supports subcommand: `lint` and `Runbooks`, which is used to run diagnostics on one or more GCP projects. ### LINT ``` usage: gcpdiag lint --project P [OPTIONS] gcpdiag lint --project P [--name faulty-vm --location us-central1-a --label key:value] Run diagnostics in GCP projects. optional arguments: -h, --help show this help message and exit --auth-adc Authenticate using Application Default Credentials (default) --auth-key FILE Authenticate using a service account private key file --project P Project ID of project to inspect --name n [n ...] Resource Name(s) to inspect (e.g.: bastion-host,prod-*) --location R [R ...] Valid GCP region/zone to scope inspection (e.g.: us-central1-a,us-central1) --label key:value One or more resource labels as key-value pair(s) to scope inspection (e.g.: env:prod, type:frontend or env=prod type=frontend) --billing-project P Project used for billing/quota of API calls done by gcpdiag (default is the inspected project, requires 'serviceusage.services.use' permission) --show-skipped Show skipped rules --hide-ok Hide rules with result OK --enable-gce-serial-buffer Fetch serial port one output directly from the Compute API. Use this flag when not exporting serial port output to cloud logging. --include INCLUDE Include rule pattern (e.g.: `gke`, `gke/*/2021*`). Multiple pattern can be specified (comma separated, or with multiple arguments) --exclude EXCLUDE Exclude rule pattern (e.g.: `BP`, `*/*/2022*`) --include-extended Include extended rules. Additional rules might generate false positives (default: False) -v, --verbose Increase log verbosity --within-days D How far back to search logs and metrics (default: 3 days) --config FILE Read configuration from FILE --logging-ratelimit-requests R Configure rate limit for logging queries (default: 60) --logging-ratelimit-period-seconds S Configure rate limit period for logging queries (default: 60 seconds) --logging-page-size P Configure page size for logging queries (default: 500) --logging-fetch-max-entries E Configure max entries to fetch by logging queries (default: 10000) --logging-fetch-max-time-seconds S Configure timeout for logging queries (default: 120 seconds) --output FORMATTER Format output as one of [terminal, json, csv] (default: terminal) --test-release Runs the latest gcpdiag test release. (e.g.: --test-release=staging) ``` #### RUNBOOK ``` usage: gcpdiag runbook --project=project_id -p "param_name=param_value" [OPTIONS] example: gcpdiag runbook gce/ssh --project "project_id" -p "name=vm-id" -p "zone=us-central1-a" optional arguments: -h, --help show this help message and exit --auth-adc Authenticate using Application Default Credentials --auth-key FILE Authenticate using a service account private key file --billing-project P Project used for billing/quota of API calls done by gcpdiag (default is the inspected project, requires 'serviceusage.services.use' permission) -v Increase log verbosity --test-release Runs the latest gcpdiag test release. (e.g.: --test-release=staging) Descriptions for Logging Options logging-related options: --logging-ratelimit-requests R`: rate limit for API requests. --logging-ratelimit-period-seconds S`: period in seconds for the API rate limit. --logging-page-size P`: page size for API requests. --logging-fetch-max-entries E`: maximum number of entries to fetch. --logging-fetch-max-time-seconds S`: maximum time in seconds to fetch logs. ``` ##### BUNDLE Create a YAML file to execute a "bundle" of individual runbook steps. This YAML file allows you to define multiple bundles, each containing specific parameters and steps to execute. ***Ex: test.yaml*** ``` - bundle: # Define the parameters that will be used in the steps. parameter: project_id: "project_name" zone: "zone_name" instance_name: "instance_name" # Define the steps that will be executed. steps: - gcpdiag.runbook.gce.generalized_steps.VmLifecycleState - gcpdiag.runbook.gce.ops_agent.VmHasAServiceAccount - gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck - bundle: # Define the parameters that will be used in the steps. parameter: project_id: "project_name" principal: "project_name@appspot.gserviceaccount.com" # Define the steps that will be executed. steps: - gcpdiag.runbook.iam.generalized_steps.IamPolicyCheck - gcpdiag.runbook.gcf.failed_deployments.DefaultServiceAccountCheck ``` In this example, two bundles are defined: * The first bundle includes parameters for a GCE instance and executes three steps related to VM lifecycle, Ops Agent, and SSH key validation. * The second bundle includes parameters for a service account and executes two steps related to IAM policy and GCF default service account. ***Executing a yaml file :*** ``` gcpdiag runbook --bundle-spec test.yaml ``` ## Development ### Coverage Report To generate a coverage report, run: ``` make coverage-report ``` This will run tests and generate an HTML coverage report. At the end of the execution, it will give you instructions on how to view the report in your browser. ## Further Information See for more information: - [Documentation](https://gcpdiag.dev/docs/) - [Lint rule description](https://gcpdiag.dev/rules/) - [Runbook description](https://gcpdiag.dev/runbook/) - [Development guides](https://gcpdiag.dev/docs/development/) ## Authentication gcpdiag supports authentication using multiple mechanisms: 1. Application default credentials gcpdiag can use Cloud SDK's [Application Default Credentials](https://google-auth.readthedocs.io/en/latest/reference/google.auth.html#google.auth.default). This might require that you first run `gcloud auth login --update-adc` to update the cached credentials. This is the default in Cloud Shell because in that environment, ADC credentials are automatically provisioned. 1. Service account key You can also use the `--auth-key` parameter to specify the [private key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys) of a service account. The authenticated principal will need as minimum the following roles granted (both of them): - `Viewer` on the inspected project - `Service Usage Consumer` on the project used for billing/quota enforcement, which is per default the project being inspected, but can be explicitly set using the `--billing-project` option The Editor and Owner roles include all the required permissions, but if you use service account authentication (`--auth-key`), we recommend to only grant the Viewer+Service Usage Consumer on that service account. ## Test Products, Classes, and IDs Tests are organized by product, class, and ID. The **product** is the GCP service that is being tested. Examples: GKE or GCE. The **class** is what kind of test it is, currently we have: Class name | Description ---------- | ----------------------------------------------- BP | Best practice, opinionated recommendations WARN | Warnings: things that are possibly wrong ERR | Errors: things that are very likely to be wrong SEC | Potential security issues The **ID** is currently formatted as YYYY_NNN, where YYYY is the year the test was written, and NNN is a counter. The ID must be unique per product/class combination. Each test also has a **short_description** and a **long_description**. The short description is a statement about the **good state** that is being verified to be true (i.e. we don't test for errors, we test for compliance, i.e. an problem not to be present). ## Adding Support for New GCP Products When adding lint rules or runbooks for a new GCP product that gcpdiag doesn't currently support, you need to update the following files to register the new product modules: [gcpdiag/product_list.py](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/gcpdiag/product_list.py): Add the new product identifier to the central list used by gcpdiag. Update the list of known products for the runbook code generator script. [pyinstaller/hook-gcpdiag.runbook.py](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/pyinstaller/hook-gcpdiag.runbook.py): Ensure PyInstaller includes the new runbook modules during the build process. [pyinstaller/hook-gcpdiag.lint.py](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/pyinstaller/hook-gcpdiag.lint.py): Ensure PyInstaller includes the new lint rule modules during the build process. [bin/runbook-starter-code-generator](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/bin/runbook-starter-code-generator): Update product set in the starter code generator script. ================================================ FILE: bin/changelog_generator.py ================================================ #!/usr/bin/env python3 # Copyright 2024 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. """Changelog Generator""" import ast import os import re import subprocess import sys def lint_name_generator(file_path): """Lint name regex generator""" parts = file_path.split('/') if len(parts) >= 4: group3 = parts[3] prefix = ''.join(c for c in group3 if c.isalpha() or c == '_').split( '__', maxsplit=1)[0] numbers = ''.join( c for c in group3 if c.isdigit() or c == '_').strip('_').split( '__', maxsplit=1)[0] return f"{parts[2]}/{prefix}/{numbers.rstrip('_')}" def find_queries(file, commit): """find new queries and respective docstring""" if os.path.exists(file): with open(file, encoding='utf-8') as f: tree = ast.parse(f.read()) f.close() content_changed = subprocess.check_output( ['git', 'show', '-p', f'{commit}', f'{file}']).decode('utf-8').split('\n') i = 0 for item in content_changed: i = i + 1 if item.startswith('+def '): file = file.split('/')[-1].split('.py')[0] match = re.search(r'def\s+(.+?)\(', item) function_name = '' if match: function_name = match.group(1) message = '' for node in ast.walk(tree): if isinstance(node, ast.FunctionDef) and node.name == function_name: message = ast.get_docstring(node) or 'No Message found' final = file + '.' + function_name + ': ' + ' '.join(message.split()) if final: return final else: return file + ': No function implemented' else: return file + ': No file found' def generate_release_notes(old_commit, new_commit, current_version): """Generates release notes for version change""" commits = subprocess.check_output([ 'git', 'log', '--pretty=format:"%h %s"', '--no-merges', f'{old_commit}..{new_commit}' ]).decode('utf-8').split('\n') commits_dict = {} for commit in commits: if commit.strip(): commit_id, commit_msg = commit.strip('"').split(' ', 1) commits_dict[commit_id] = commit_msg fixes = [] new_runbooks = [] new_lints = [] new_queries = [] for commit_item in commits_dict.items(): commit = commit_item[0] commit_msg = commit_item[1] if commit_msg.startswith('Bump version:'): pass else: try: # Get the files changed in this commit files_changed = subprocess.check_output( ['git', 'show', '--name-status', '--pretty=format:""', f'{commit}']).decode('utf-8').split('\n') if len(files_changed) > 2: files_changed_dict = {} for file_info in files_changed: if file_info.strip(): match = re.match(r'([AM])\t(.*)', file_info.strip('"')) if match: status, filename = match.groups() files_changed_dict[filename] = status all_files_existed = [] all_new_files = [] # Check if all changed files existed before this commit for file in files_changed_dict.items(): if file[1] in ['M', 'T']: all_files_existed.append(file[0]) elif file[1] == 'A': all_new_files.append(file[0]) ignored_files = [ 'utils.py', 'generalized_steps.py', '__init__.py', 'constants.py', 'flags.py', 'utils_test.py' ] if all_files_existed and not all_new_files: fixes.append(commit_msg) else: new_runbooks.extend([ (re.sub(r'gcpdiag/runbook/|_|\.py', '-', f).strip('-') + ': ' + commit_msg) for f in all_new_files if f.startswith('gcpdiag/runbook/') and f.endswith('.py') and f.split('/')[-1] not in ignored_files and not f.endswith('_test.py') ]) new_lints.extend([ (lint_name_generator(f) + ': ' + commit_msg) for f in all_new_files if f.startswith('gcpdiag/lint/') and f.endswith('.py') and f.split('/')[-1] not in ignored_files and not f.endswith('_test.py') ]) all_files = all_files_existed + all_new_files new_queries.extend([ find_queries(f, commit) for f in all_files if f.startswith('gcpdiag/queries/') and f.endswith('.py') and f.split('/')[-1] not in ignored_files and not f.endswith('_test.py') and not f.endswith('_stub.py') ]) except subprocess.CalledProcessError: pass new_runbooks = list(dict.fromkeys(new_runbooks)) new_lints = list(dict.fromkeys(new_lints)) new_queries = list(dict.fromkeys(new_queries)) new_queries = list(filter(None, new_queries)) new_runbooks = [item.replace('_', r'\_') for item in new_runbooks] new_lints = [item.replace('_', r'\_') for item in new_lints] new_queries = [item.replace('_', r'\_') for item in new_queries] # Format release notes release_notes = f'\n\n# Release Notes for v{current_version}\n\n' # Removed tag from title if new_lints: release_notes += '## New Lints\n\n' + '\n'.join(new_lints) + '\n\n' if new_runbooks: release_notes += '## New Runbooks\n\n' + '\n'.join(new_runbooks) + '\n\n' if new_queries: release_notes += '## New Queries\n\n' + '\n'.join(new_queries) + '\n\n' if fixes: release_notes += '## Fixes\n\n' + '\n'.join(fixes) + '\n\n' return release_notes if __name__ == '__main__': with open('gcpdiag/config.py', encoding='utf-8') as fcg: for line in fcg: if line.startswith('VERSION ='): match_var = re.match(r"VERSION = '([\d.]+)", line) if match_var: current_ver = match_var.group(1) previous_version = f'v{float(current_ver) - 0.01}' else: print('Current version information is missing from gcpdiag/config.py') current_ver = input( 'Please enter the current version e.g 0.77 or 0.76: ') if current_ver and re.match(r'^\d+\.\d{2}$', current_ver): previous_version = f'v{float(current_ver) - 0.01}' break else: print('No Current Version information found, exiting!!') sys.exit(1) fcg.close() #old_commit_id = "0fc34e64" #old_commit_id = 'v0.73' old_commit_id = previous_version new_commit_id = 'HEAD' release_notes_final = generate_release_notes(old_commit_id, new_commit_id, current_ver) print(release_notes_final) ================================================ FILE: bin/curl-wrap.sh ================================================ #!/bin/sh # Copyright 2021 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. # send a curl request with gcloud default app credentials if [ -z "$ACCESS_TOKEN" ]; then ACCESS_TOKEN=$(gcloud auth application-default print-access-token) fi exec curl \ -H "Authorization: Bearer $ACCESS_TOKEN" \ "$@" ================================================ FILE: bin/gcpdiag ================================================ #!/usr/bin/env python3 # Copyright 2021 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. """gcpdiag main script.""" # pylint: disable=invalid-name import sys from gcpdiag import config from gcpdiag.lint import command as lint_command from gcpdiag.runbook import command as runbook_command from gcpdiag.search import command as search_command def main(argv): # A very simple command-line parser to determine what subcommand is called. # Proper argument parsing will be done in the subcommands. # make sure we always output UTF-8, even if the terminal falls back to ascii if sys.version_info >= (3, 7): sys.stdout.reconfigure(encoding='utf-8') if len(argv) == 1 or argv[1] == '--help' or argv[1] == 'help': print_help() elif argv[1] == 'version' or argv[1] == '--version': print(f'gcpdiag {config.VERSION}\nCopyright 2021 Google LLC') elif argv[1] == 'lint': # Replace argv[0:1] with only argv[0] so that argparse works correctly. sys.argv.pop(0) sys.argv[0] = 'gcpdiag lint' try: lint_command.run(argv) except KeyboardInterrupt: print( '\n[WARNING] KeyboardInterrupt: Application was interrupted (terminated)', file=sys.stderr) sys.exit(1) elif argv[1] == 'runbook': # Replace argv[0:1] with only argv[0] so that argparse works correctly. sys.argv.pop(0) sys.argv[0] = 'gcpdiag runbook' try: runbook_command.run(argv) except KeyboardInterrupt: print( '\n[WARNING] KeyboardInterrupt: Application was interrupted (terminated)', file=sys.stderr) sys.exit(1) elif argv[1] == 'search': # Replace argv[0:1] with only argv[0] so that argparse works correctly. sys.argv.pop(0) sys.argv[0] = 'gcpdiag search' try: search_command.run(argv) except KeyboardInterrupt: print( '\n[WARNING] KeyboardInterrupt: Application was interrupted (terminated)', file=sys.stderr) sys.exit(1) else: print(f'ERROR: unknown command {argv[1]}. Use --help for help.', file=sys.stderr) sys.exit(1) def print_help(): print("""gcpdiag 🩺 - Diagnostics for Google Cloud Platform Usage: gcpdiag COMMAND [OPTIONS] Commands: help Print this help text. lint Run diagnostics on GCP projects. runbook Run diagnostics tree to deep dive into GCP issue. search Find gcpdiag rules related to search terms. version Print gcpdiag version. See: gcpdiag COMMAND --help for command-specific usage.""") if __name__ == '__main__': main(sys.argv) ================================================ FILE: bin/gcpdiag-dockerized ================================================ #!/bin/bash set -e THIS_WRAPPER_VERSION=0.11 SUPPORTED_RUNTIME="docker podman" DEFAULT_OUTPUT_DIR="$HOME/tmp" # Initialize variables for wrapper arguments CONFIG_FILE="" AUTH_KEY="" TEST_RELEASE="" REPORT_DIR="" BUNDLE_SPEC_FILE="" # Array to hold arguments intended for the gcpdiag command declare -a gcpdiag_args=() # Parse arguments, separating wrapper flags from gcpdiag flags while [[ $# -gt 0 ]]; do case "$1" in --config=*) CONFIG_FILE="${1#*=}" gcpdiag_args+=("$1") shift # consume argument ;; --config) CONFIG_FILE="$2" gcpdiag_args+=("$1" "$2") shift 2 # consume flag ;; --auth-key=*) AUTH_KEY="${1#*=}" gcpdiag_args+=("$1") shift # consume argument ;; --auth-key) AUTH_KEY="$2" gcpdiag_args+=("$1" "$2") shift 2 # consume flag ;; --test-release=*) TEST_RELEASE="${1#*=}" shift # consume argument ;; --test-release) TEST_RELEASE="$2" shift 2 # consume flag ;; --report-dir=*) REPORT_DIR="${1#*=}" gcpdiag_args+=("$1") shift # consume argument ;; --report-dir) REPORT_DIR="$2" gcpdiag_args+=("$1" "$2") shift 2 # consume flag ;; --bundle-spec=*) BUNDLE_SPEC_FILE="${1#*=}" gcpdiag_args+=("$1") shift # consume argument ;; --bundle-spec) BUNDLE_SPEC_FILE="$2" gcpdiag_args+=("$1" "$2") shift 2 # consume flag ;; *) # Assume anything else is an argument for gcpdiag gcpdiag_args+=("$1") shift # consume argument ;; esac done eval $(curl -sf https://storage.googleapis.com/gcpdiag-dist/release-version|grep -Ei '^\w*=[0-9a-z/\._-]*$') # Modify image and tag if --test-release was used if [[ "$TEST_RELEASE" == "staging" ]]; then echo "test-release specified: $TEST_RELEASE" # Using bash parameter expansion for potentially safer version increment if [[ "$DOCKER_IMAGE_VERSION" =~ ^([0-9]+)\.([0-9]+)$ ]]; then major="${BASH_REMATCH[1]}" minor="${BASH_REMATCH[2]}" DOCKER_IMAGE_VERSION="${major}.$((minor + 1))-test" else echo "Warning: Could not parse DOCKER_IMAGE_VERSION ($DOCKER_IMAGE_VERSION) for incrementing." # Fallback or alternative logic might be needed here DOCKER_IMAGE_VERSION+="-test" # Simple append as fallback fi # Using bash parameter expansion for safer replacement DOCKER_IMAGE="${DOCKER_IMAGE/release/staging}" echo "DOCKER_IMAGE_VERSION: $DOCKER_IMAGE_VERSION" echo "DOCKER_IMAGE: $DOCKER_IMAGE" fi # Test whether 1st arg is greater than or equal to the 2nd, when compared as version numbers (bash-only) version_ge () { # Note: implementation is rather crude and will treat missing numbers as `0` # so e.g. "1" and "1.0.0" compare equal; even worse, "..1" is accepted and # less than "0.0.2", and the empty string is equal to "0.0" local -a V1=(${1//./ }) local -a V2=(${2//./ }) if (( ${#V1[@]} > ${#V2[@]} )); then local -i len=${#V1[@]} else local -i len=${#V2[@]} fi for i in $(seq 0 ${len}); do if (( "${V1[$i]:-0}" < "${V2[$i]:-0}")); then return 1 # V1[i] < V2[i] fi done return 0 # V1 >= V2 } # Test whether a file was provided and exists, then prepare its mount path # and update its path in gcpdiag_args for the container context. # The mount path is returned via the global variable MOUNT_RESULT. handle_mount_path () { local FILE="$1" MOUNT_RESULT="" if [ -n "$FILE" ]; then if [ -f "$FILE" ]; then if [[ "$FILE" = /* ]]; then # absolute path shall be mounted as is MOUNT_RESULT="-v $FILE:$FILE" else # local path need to be mounted inside root folder MOUNT_RESULT="-v $PWD/$FILE:/$FILE" # We also need to update the path in gcpdiag_args to be absolute # so the container finds it at / for i in "${!gcpdiag_args[@]}"; do if [[ "${gcpdiag_args[$i]}" == "$FILE" ]]; then gcpdiag_args[$i]="/$FILE" break # Handle --arg=file case, ensuring we match the exact value elif [[ "${gcpdiag_args[$i]}" == *"=$FILE" ]]; then gcpdiag_args[$i]="${gcpdiag_args[$i]%%$FILE*}/$FILE" break fi done fi else return 1 fi fi # Success return 0 } # Test whether 1st arg (abs path to mount) was provided and exists, then prepare mount path # If no custom mount point was provided, create and mount the DEFAULT_OUTPUT_DIR # that will be used inside container with the same path handle_mount_dir() { local DIR_TO_MOUNT="$1" local MOUNT="" if [ -z "$DIR_TO_MOUNT" ]; then DIR_TO_MOUNT="$DEFAULT_OUTPUT_DIR" if [ -z "$DIR_TO_MOUNT" ]; then # Return an error code if DIR_TO_MOUNT is empty or does not exist return 1 else mkdir -p "$DIR_TO_MOUNT" fi elif [ ! -d "$DIR_TO_MOUNT" ] && [[ "$DIR_TO_MOUNT" = /* ]]; then # Create the directory if it doesn't exist and an absolute path is provided mkdir -p "$DIR_TO_MOUNT" fi # If it's a directory, mount the entire directory [ -d "$DIR_TO_MOUNT" ] && MOUNT="-v $DIR_TO_MOUNT:$DIR_TO_MOUNT" echo "$MOUNT" return 0 } # Check this script version and compare with the minimum required version # defined in the release-version file. This allows us to force an upgrade # of the wrapper script. if ! version_ge "$THIS_WRAPPER_VERSION" "$WRAPPER_VERSION"; then echo echo "## ERROR:" echo "## This gcpdiag wrapper script is obsolete (version $THIS_WRAPPER_VERSION, minimum required: $WRAPPER_VERSION)." echo "## Please update the wrapper script to the latest version as follows:" echo echo "curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag" echo "chmod +x gcpdiag" echo exit 1 fi [ -t 0 ] && USE_TTY="-it" || USE_TTY="" # Ensure necessary host directories exist with correct ownership mkdir -p "$HOME/.cache/gcpdiag" \ "$HOME/.cache/gcpdiag-dockerized" \ "$HOME/.config/gcloud" # Set RUNTIME based on available container runtime cmd RUNTIME="" # Initialize RUNTIME for r in $SUPPORTED_RUNTIME; do if command -v "$r" >/dev/null; then RUNTIME="$r" break fi done if [ -z "$RUNTIME" ]; then echo >&2 "ERROR: No container runtime found - supported: $SUPPORTED_RUNTIME" exit 1 fi # Configure Podman if used if [ "$RUNTIME" = podman ]; then export PODMAN_USERNS=keep-id fi # Prepare config file mount CONFIG_MOUNT="" MOUNT_RESULT="" if [ -n "$CONFIG_FILE" ]; then if ! handle_mount_path "$CONFIG_FILE"; then echo >&2 # Print errors to stderr echo >&2 "## ERROR:" echo >&2 "## Configuration file: '$CONFIG_FILE' does not exist or is not a regular file!" echo >&2 exit 1 fi CONFIG_MOUNT=$MOUNT_RESULT fi # Prepare auth key mount AUTH_KEY_MOUNT="" MOUNT_RESULT="" if [ -n "$AUTH_KEY" ]; then if ! handle_mount_path "$AUTH_KEY"; then echo >&2 # Print errors to stderr echo >&2 "## ERROR:" echo >&2 "## Authentication key file: '$AUTH_KEY' does not exist or is not a regular file!" echo >&2 exit 1 fi AUTH_KEY_MOUNT=$MOUNT_RESULT fi BUNDLE_SPEC_MOUNT="" MOUNT_RESULT="" if [ -n "$BUNDLE_SPEC_FILE" ]; then if ! handle_mount_path "$BUNDLE_SPEC_FILE"; then echo >&2 # Print errors to stderr echo >&2 "## ERROR:" echo >&2 "## Bundle spec file: '$BUNDLE_SPEC_FILE' does not exist or is not a regular file!" echo >&2 exit 1 fi BUNDLE_SPEC_MOUNT=$MOUNT_RESULT fi # Prepare report dir mount if ! REPORT_DIR_MOUNT=$(handle_mount_dir "$REPORT_DIR"); then echo >&2 echo >&2 "## ERROR:" echo >&2 "## Error creating report dir: $REPORT_DIR" echo >&2 exit 1 fi # shellcheck disable=SC2086 exec "$RUNTIME" run --rm $USE_TTY \ --rm \ -u "$(id -u):$(id -g)" \ -e "USER=$(id -n -u)" \ -e "GROUP=$(id -n -g)" \ -e "SHELL=/bin/bash" \ -e HOME -e LANG -e GOOGLE_AUTH_TOKEN -e CLOUD_SHELL \ -v "$HOME/.cache/gcpdiag-dockerized:$HOME/.cache/gcpdiag" \ -v "$HOME/.config/gcloud:$HOME/.config/gcloud" \ $CONFIG_MOUNT \ $AUTH_KEY_MOUNT \ $BUNDLE_SPEC_MOUNT \ $REPORT_DIR_MOUNT \ "$DOCKER_IMAGE:$DOCKER_IMAGE_VERSION" /opt/gcpdiag/bin/gcpdiag "${gcpdiag_args[@]}" ================================================ FILE: bin/gcpdiag-mocked ================================================ #!/usr/bin/env python3 # Copyright 2021 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. """gcpdiag test script using data from test-data.""" # pylint: disable=invalid-name import sys from unittest import mock from gcpdiag import config from gcpdiag.lint import command as lint_command from gcpdiag.queries import apis_stub, kubectl_stub from gcpdiag.queries.generic_api.api_build import generic_api_stub def noop(*args): del args pass @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.hooks.post_lint_hook', new=noop) @mock.patch('gcpdiag.queries.kubectl.verify_auth', new=kubectl_stub.verify_auth) @mock.patch('gcpdiag.queries.kubectl.check_gke_ingress', new=kubectl_stub.check_gke_ingress) @mock.patch( 'gcpdiag.queries.generic_api.api_build.get_generic.get_generic_api', new=generic_api_stub.get_generic_api_stub, ) def main(argv): # A very simple command-line parser to determine what subcommand is called. # Proper argument parsing will be done in the subcommands. # make sure we always output UTF-8, even if the terminal falls back to ascii if sys.version_info >= (3, 7): sys.stdout.reconfigure(encoding='utf-8') if len(argv) == 1 or argv[1] == '--help' or argv[1] == 'help': print_help() elif argv[1] == 'version' or argv[1] == '--version': print(f'gcpdiag {config.VERSION}\nCopyright 2021 Google LLC') elif argv[1] == 'lint': # Replace argv[0:1] with only argv[0] so that argparse works correctly. sys.argv.pop(0) sys.argv[0] = 'gcpdiag lint' lint_command.run(argv) else: print(f'ERROR: unknown command {argv[1]}. Use --help for help.', file=sys.stderr) sys.exit(1) def print_help(): print("""gcpdiag 🩺 - Diagnostics for Google Cloud Platform Usage: gcpdiag COMMAND [OPTIONS] Commands: help Print this help text. lint Run diagnostics on GCP projects. version Print gcpdiag version. See: gcpdiag COMMAND --help for command-specific usage.""") if __name__ == '__main__': main(sys.argv) ================================================ FILE: bin/generate_steps.py ================================================ #!/usr/bin/env python3 """Generate a markdown table with all gcpdiag runbook steps.""" import importlib import inspect import os import pathlib import textwrap from typing import List, Sequence from absl import app, flags from gcpdiag import runbook from gcpdiag.runbook import constants _URL_BASE_PREFIX = flags.DEFINE_string( "url_base_prefix", "https://github.com/GoogleCloudPlatform/gcpdiag/tree/main", "Base URL prefix for the files in the table.", ) def fetch_and_list_steps(output_file_path: str, base_url_path: str): """Fetches all Step subclasses and generates a Markdown table.""" table_rows = [] modules_with_files: List[tuple[str, str]] = [] for root, _, files in os.walk("gcpdiag/runbook"): for file in files: if file.endswith(".py") and not file.startswith("__"): module_path = os.path.join(root, file) # Prepare path for URL url_path = module_path.replace("\\", "/") file_url = f"{base_url_path}/{url_path}" module_path = module_path.replace("/", ".")[:-3] modules_with_files.append( (module_path, file_url)) # gcpdiag.runbook.nameofrunbook.nameoffile rows_data = [] for module_path, file_url in modules_with_files: try: module = importlib.import_module(module_path) file_name = module_path.split(".")[-1] except ImportError: continue for _, obj in inspect.getmembers(module, inspect.isclass): # returns Only class if issubclass(obj, runbook.Step) and obj is not runbook.Step: try: step_instance = obj() # obj of the Class if hasattr(step_instance, "type") and isinstance( step_instance.type, constants.StepType): step_type = step_instance.type.value else: step_type = "ERROR: Invalid Step Type" except TypeError: step_type = "ERROR: Could not instantiate Step" step_id = f"google.cloud.{obj.id}" rows_data.append({ "file_name": file_name, "file_url": file_url, "step_name": obj.__name__, "step_type": step_type, "step_id": step_id }) # Sort the rows data rows_data.sort(key=lambda x: (x["file_name"], x["step_name"])) for row in rows_data: row_values = { "file_name": row["file_name"], "file_url": row["file_url"], "step_name": row["step_name"], "step_type": row["step_type"], "step_id": row["step_id"], } table_rows.append( "|[{file_name}]({file_url}) | **{step_name}** | {step_type} |" " `{step_id}` |".format(**row_values)) markdown_table = textwrap.dedent(""" |Runbook name| **Runbook Step** | stepType | `StepId` | |:------------|:----------- |:----------- |:----------- | """) markdown_table += "\n".join(table_rows) # Create the parent directory if it doesn't exist pathlib.Path(output_file_path).parent.mkdir(parents=True, exist_ok=True) with open(output_file_path, "w", encoding="utf-8") as f: f.write(markdown_table) def main(argv: Sequence[str]) -> None: if len(argv) > 1: raise app.UsageError("Too many command-line arguments.") output_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "steps_table.md") base_url = _URL_BASE_PREFIX.value fetch_and_list_steps(output_file_path=output_file, base_url_path=base_url) if __name__ == "__main__": app.run(main) ================================================ FILE: bin/json-cleaner ================================================ #!/usr/bin/env python3 """Development script to strip out any sensitive data from GCP API responses.""" # pylint: disable=invalid-name import json import re import sys clean_maps = { 'apigee': { '.caCertificate': 'REDACTED', '.apigeeProjectId': 'REDACTED', }, 'cloudrun': { '.services.[].creator': 'REDACTED', '.services.[].binaryAuthorization': 'REDACTED' }, 'cloudfunctions': { '.cloudfunctions.[].sourceToken': 'REDACTED' }, 'appengine_versions': { '.versions.[].createdBy': 'REDACTED' }, 'clusters': { '.clusters.[].endpoint': '192.168.1.1', '.clusters.[].masterAuth.clusterCaCertificate': 'REDACTED', }, 'instances': { # not really sensitive, but we don't care about it... '.items.[].disks.[].shieldedInstanceInitialState.dbs.[].content': 'REDACTED', '.items.[].disks.[].shieldedInstanceInitialState.dbxs.[].content': 'REDACTED', '.items.[].disks.[].shieldedInstanceInitialState.keks.[].content': 'REDACTED', '.items.[].disks.[].shieldedInstanceInitialState.pk.content': 'REDACTED', '.items.[].fingerprint': 'REDACTED', '.items.[].metadata.fingerprint': 'REDACTED', '.items.[].metadata.items.configure-sh': 'REDACTED', '.items.[].metadata.items.kube-env': 'REDACTED', '.items.[].metadata.items.user-data': 'REDACTED', '.items.[].networkInterfaces.[].fingerprint': 'REDACTED', '.items.[].tags.fingerprint': 'REDACTED', }, 'compute-templates': { '.items.[].properties.metadata.fingerprint': 'REDACTED', '.items.[].properties.metadata.items.configure-sh': 'REDACTED', '.items.[].properties.metadata.items.kube-env': 'REDACTED', '.items.[].properties.metadata.items.user-data': 'REDACTED', }, 'compute-project': { '.commonInstanceMetadata.items.sshKeys': 'REDACTED' }, 'compute-network': { '.peerings.[].network': 'https://www.googleapis.com/compute/v1/projects/' 'REDACTED/global/networks/servicenetworking' }, 'service-accounts': { '.accounts.[].oauth2ClientId': 'REDACTED' }, 'other': {} } def traverse_and_clean(path: str, data, clean_map: dict): if path in clean_map: return clean_map[path] if isinstance(data, dict): for key in list(data.keys()): key_path = path + '.' + key data[key] = traverse_and_clean(key_path, data[key], clean_map) elif isinstance(data, list): for i in range(len(data)): # special case: "key", "value" list -> lookup as dict if isinstance(data[i], dict) and 'key' in data[i] and 'value' in data[i]: key_path = path + '.' + data[i]['key'] if key_path in clean_map: data[i]['value'] = clean_map[key_path] else: data[i] = traverse_and_clean(path + '.[]', data[i], clean_map) elif isinstance(data, str): # obfuscate real email addresses data = re.sub(r'[a-z]+@google\.com', 'testuser@example.com', data) return data def main(): data = json.load(sys.stdin) if len(sys.argv) != 2: print('usage: json-cleaner RESOURCE_TYPE') sys.exit(1) resource_type = sys.argv[1] if resource_type not in clean_maps: print('first argument must be one of: ' + ', '.join(sorted(clean_maps.keys())), file=sys.stderr) sys.exit(1) # transform using clean_maps data = traverse_and_clean('', data, clean_maps[resource_type]) print(json.dumps(data, indent=2, sort_keys=True)) main() ================================================ FILE: bin/pipenv-dockerized ================================================ #!/bin/bash if [ "$#" == "0" ]; then echo "usage: $0 PYTHON_VERSION COMMAND ARG1 ARG2 ARG3" >&2 exit 1 fi PYTHON_VERSION="$1" IMAGE_TAG="$2" shift 2 IMAGE="us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-${PYTHON_VERSION}:${IMAGE_TAG}" USE_TTY="" CWD=$(pwd) [ -t 0 ] && USE_TTY="-it" #mkdir -p "$HOME/.cache/pre-commit" #mkdir -p "$HOME/.cache/pipenv" #mkdir -p "$HOME/.local/share/virtualenv" mkdir -p "$HOME/.config/gcloud" mkdir -p .pipenv-dockerized/venv-$PYTHON_VERSION mkdir -p .pipenv-dockerized/home mkdir -p .venv exec docker run $USE_TTY \ --rm \ -u "$(id -u):$(id -g)" \ -e "USER=$(id -n -u)" \ -e "GROUP=$(id -n -g)" \ -e "HOME=$HOME" \ -e "LANG=$LANG" \ -e "SHELL=/bin/bash" \ -e "KOKORO_BUILD_NUMBER=$KOKORO_BUILD_NUMBER" \ -v "$CWD:$CWD" \ -v "$HOME/.config/gcloud:$HOME/.config/gcloud" \ -v "$CWD/.pipenv-dockerized/home:$HOME" \ -v "$CWD/.pipenv-dockerized/venv-$PYTHON_VERSION:$CWD/.venv" \ -w "$CWD" \ $IMAGE pipenv "$@" ================================================ FILE: bin/precommit-gke-eol-file.sh ================================================ #!/bin/sh # WARNING: This script is deprecated and may be removed in a future release. # Please use 'gcpdiag/queries/gke.get_release_schedule' instead. # Checks if gcpdiag/lint/gke/eol.yaml file contains the up to date list of # GKE Releases with corresponding EOL (end-of-life) dates if ! ./gcpdiag/lint/gke/eol_parser.sh | diff - gcpdiag/lint/gke/eol.yaml > /dev/null then echo 'GKE eol.yaml file is outdated. Please run `make gke-eol-file` from the top level directory' exit 1 fi ================================================ FILE: bin/precommit-required-files ================================================ #!/usr/bin/env python3 """Verify that the lint rules are documented in the website.""" # pylint: disable=invalid-name import importlib import inspect import os import pathlib import re import subprocess import sys import textwrap from os import path from typing import List from jinja2 import TemplateNotFound, UndefinedError from gcpdiag import lint, runbook from gcpdiag.product_list import get_product_list from gcpdiag.rule_classes import get_rule_classes from gcpdiag.runbook import DiagnosticTree, util #Lint Rules Doc WEBSITE_RULES_DIR = 'website/content/en/rules' LINT_RULES_DIR = 'gcpdiag/lint' # Runbook Docs WEBSITE_RUNBOOK_DIR = 'website/content/en/runbook' # update also pyinstaller/hook-gcpdiag.lint.py PRODUCTS = get_product_list() PRODUCTS_EXCEPTIONS = ['gcpdiag', 'gcp'] RULE_CLASSES = get_rule_classes() def usage(): print('usage: gcpdiag-website-rules FILE1.py FILE2.py', file=sys.stderr) sys.exit(1) def gen_rule_page(rule, rule_page_path): # Create product directory try: class_dir = pathlib.Path(f'{WEBSITE_RULES_DIR}/{rule.product}') class_dir.mkdir() with open(class_dir / '_index.md', 'w', encoding='utf-8') as f: print(textwrap.dedent(f'''\ --- title: "{rule.product.upper()}" linkTitle: "{rule.product}" type: docs --- '''), file=f) except FileExistsError: pass # Create rule class directory try: class_dir = pathlib.Path( f'{WEBSITE_RULES_DIR}/{rule.product}/{rule.rule_class}') class_dir.mkdir() except FileExistsError: pass with open(rule_page_path, 'w', encoding='utf-8') as f: print(textwrap.dedent(f'''\ --- title: "{rule.product}/{rule.rule_class}/{rule.rule_id}" linkTitle: "{rule.rule_class}/{rule.rule_id}" weight: 1 type: docs description: > {rule.short_desc} --- **Product**: {PRODUCTS[rule.product]}\\ **Rule class**: {rule.rule_class} - {RULE_CLASSES[str(rule.rule_class)]} ### Description '''), file=f) print(rule.long_desc, file=f) print(textwrap.dedent('''\ ### Remediation ### Further information'''), file=f) def check_runbook(files): """Check runbook files to automatically update or generate docs for DTs and it steps.""" # Initialize variables to hold the diagnostic tree and in-scope steps. inscope_dts: List[DiagnosticTree] = [] in_scope_steps = {} # Process each file path provided. for file_path in files: # Use regular expression to parse relevant information from the file path. match = re.match(r'gcpdiag/runbook/([^/]+)/(.*)\.py', file_path) if not match: continue rule_dir, rule_basename = match.groups() rule_module_name = f'gcpdiag.runbook.{rule_dir}.{rule_basename}' try: module = importlib.import_module(rule_module_name) except ImportError: continue mod_dt_count = 0 for name, obj in inspect.getmembers(module, inspect.isclass): # Handle DiagnosticTree classes. if issubclass( obj, runbook.DiagnosticTree) and obj is not runbook.DiagnosticTree: mod_dt_count += 1 if mod_dt_count > 1: raise RuntimeError( f'Multiple Diagnostic Trees found in {file_path}\n' f'For readability each Diagnostic Tree should have it own file' f'Only keep custom steps for this Diagnostic Tree in the file') inscope_dts.append(obj) # Store Step classes that have possibly been modified. elif issubclass(obj, runbook.Step) and obj is not runbook.Step: in_scope_steps[name] = obj for dt in inscope_dts: gen_dt_rule_and_steps_page(dt(None), in_scope_steps) def gen_dt_rule_and_steps_page(dt, in_scope_steps): """Generate documentation pages for a diagnostic tree and its steps. Args: dt: The diagnostic tree object to process. in_scope_steps: A dictionary of steps that are in scope for documentation. """ if dt.product not in PRODUCTS and dt.product not in PRODUCTS_EXCEPTIONS: print( f'ERROR: Product "{dt.product}" for Diagnostic Tree ' f'"{dt.__class__.__name__}" is not defined in the "PRODUCTS" ' 'dictionary.', file=sys.stderr) print( 'To resolve this pre-commit error, you must add the new product to ' '"bin/precommit-required-files.py".', file=sys.stderr) print( 'Specifically, update the `PRODUCTS` dictionary in the ' '`get_product_list()` function.', file=sys.stderr) print( 'Example: "your_new_product": "[Your New Product Name]"' '(https://cloud.google.com/your-new-product-url)', file=sys.stderr) sys.exit(1) # Expand the full diagnostic tree from the AST nodes. # Used to draw graphviz images and document the child steps. builder = runbook.ExpandTreeFromAst(dt.__class__) expanded_dt = builder.visit_ast_nodes(dt.build_tree) # Function to recursively traverse and generate documentation for all steps in the tree. def traverse_all_steps(step): gen_step_page(step) # Remove generated steps from the in_scope_steps dict. in_scope_steps.pop(step.__class__.__name__, None) for child in step.steps: traverse_all_steps(child) traverse_all_steps(expanded_dt.start) # Generate pages for any remaining steps not directly part of the diagnostic tree. for step in in_scope_steps.values(): gen_step_page(step()) # Create dt product directory if doesn't exist and sub folder images. try: dt_dir = pathlib.Path(f'{WEBSITE_RUNBOOK_DIR}/diagnostic-trees') # Make both diagnostic-trees dt_dir.mkdir(parents=True) with open(dt_dir / '_index.md', 'w', encoding='utf-8') as f: print(textwrap.dedent('''\ --- title: "Debugging Trees" linkTitle: "Debugging Trees" type: docs weight: 1 --- '''), file=f, end='') except FileExistsError: pass # Create dt product directory if doesn't exist and sub folder images. try: product_dt_dir = pathlib.Path( f'{WEBSITE_RUNBOOK_DIR}/diagnostic-trees/{dt.product}') # Make both diagnostic-trees product_dt_dir.mkdir(parents=True) with open(product_dt_dir / '_index.md', 'w', encoding='utf-8') as f: print(textwrap.dedent(f'''\ --- title: "{dt.product.upper()}" linkTitle: "{dt.product}" type: docs weight: 2 --- All diagnostic tree available in {dt.product} '''), file=f, end='') except FileExistsError: pass try: img_dir = pathlib.Path(f'{str(product_dt_dir)}/images') img_dir.mkdir(parents=True) except FileExistsError: pass context = { 'rule': expanded_dt, 'util': util, 'title': util.pascal_case_to_title(dt.__class__.__name__), 'PRODUCTS': PRODUCTS, 'ROOT_DIR': WEBSITE_RUNBOOK_DIR } # Render the template with the context rendered_content = runbook.util.render_template('bin/templates', 'diagnostic-tree.jinja', context).rstrip('\n') dt_path = f'{dt_dir}/{expanded_dt.name}.md' md_page_content = '' if os.path.exists(dt_path): # Check if the content changed. md_page_content = runbook.util.render_template(dt_dir, f'{expanded_dt.name}.md', {}) if rendered_content != md_page_content: with open(dt_path, 'w', encoding='utf-8') as f: f.write(rendered_content) f.write('\n') def gen_step_page(step: runbook.Step): """Generates a Markdown page for a given diagnostic step. Creates a Markdown file for the specified step in the diagnostic process, using a template to render the step's details into a human-readable format. It ensures that each step has its own dedicated page. Args: step (runbook.Step): The diagnostic step instance to generate the page. """ if step.product not in PRODUCTS and step.product not in PRODUCTS_EXCEPTIONS: print( f'ERROR: Product "{step.product}" for Diagnostic Tree ' f'"{step.__class__.__name__}" is not defined in the "PRODUCTS" ' f'dictionary.', file=sys.stderr) print( 'To resolve this pre-commit error, you must add the new product to ' '"bin/precommit-required-files.py".', file=sys.stderr) print( 'Specifically, update the `PRODUCTS` dictionary in the ' '`get_product_list()` function.', file=sys.stderr) print( 'Example: "your_new_product": "[Your New Product Name]"' '(https://cloud.google.com/your-new-product-url)', file=sys.stderr) sys.exit(1) # Exit with an error to prevent further issues try: steps_dir = pathlib.Path(f'{WEBSITE_RUNBOOK_DIR}/steps') steps_dir.mkdir(parents=True) with open(steps_dir / '_index.md', 'w', encoding='utf-8') as f: print(textwrap.dedent('''\ --- title: "All Steps" linkTitle: "steps" type: docs weight: 1 --- All steps available in the runbook by products '''), file=f, end='') except FileExistsError: pass try: product_steps_dir = pathlib.Path( f'{WEBSITE_RUNBOOK_DIR}/steps/{step.product}') product_steps_dir.mkdir() with open(product_steps_dir / '_index.md', 'w', encoding='utf-8') as f: print(textwrap.dedent(f'''\ --- title: "{step.product.upper()}" linkTitle: "{step.product}" type: docs weight: 2 --- All steps available in {step.product} '''), file=f, end='') except FileExistsError: pass msgs = {} try: filepath, block_prefix = step.template.split('::') msgs = runbook.util.load_template_block(module_name=step.__module__, file_name=filepath.strip(), block_name=block_prefix.strip()) except UndefinedError as e: print(f'Encounted a block error while parsing {e} used in step {step.id}') except TemplateNotFound as e: print( f'Step "{step.id}" is using a non-existent jinja file with the name: {e}' ) except AttributeError as e: pass except ValueError as e: print('Ensure that your template string uses ' f'the following format "template_file::block_name":{e}') context = {'step': step, 'msgs': msgs, 'PRODUCTS': PRODUCTS} step_page = f'{product_steps_dir}/{step.doc_file_name}.md' rendered_content = runbook.util.render_template('bin/templates/', 'steps.jinja', context) # For some reason there are \n at the end despite striping new line and block lines # Many strip it if any still exists at the end. rendered_content = rendered_content.rstrip('\n') md_page_content = '' if os.path.exists(step_page): # Check if the content changed. md_page_content = runbook.util.render_template(product_steps_dir, f'{step.doc_file_name}.md', {}) if rendered_content != md_page_content: with open(step_page, 'w', encoding='utf-8') as f: f.write(rendered_content) f.write('\n') def check_rule_page(rule): rule_page_path = f'{WEBSITE_RULES_DIR}/{rule.product}/{rule.rule_class}/{rule.rule_id}.md' # check that rule page exists and is staged lsfiles = subprocess.run(['git', 'ls-files', '-s', rule_page_path], stdout=subprocess.PIPE, check=False) if len(lsfiles.stdout) > 0: return True elif path.exists(rule_page_path): print(f'rule page not staged: {rule_page_path}', file=sys.stderr) return False else: print(f'generated initial rule page: {rule_page_path}', file=sys.stderr) gen_rule_page(rule, rule_page_path) return False def check_rule_snapshot(rule): rule_snapshot_path = (f'{LINT_RULES_DIR}/{rule.product}/snapshots/' f'{rule.rule_class}_{rule.rule_id}.txt') # check that rule snapshot exists and is staged lsfiles = subprocess.run(['git', 'ls-files', '-s', rule_snapshot_path], stdout=subprocess.PIPE, check=False) if len(lsfiles.stdout) > 0: return True elif path.exists(rule_snapshot_path): print(f'rule snapshot not staged: {rule_snapshot_path}', file=sys.stderr) return False else: print( f'run "make snapshots" to generate rule snapshot: {rule_snapshot_path} ', file=sys.stderr) return False def check(files): rules_repo = lint.LintRuleRepository() seen_rule_ids = {} exit_fail = False for arg in sorted(files): # only process gcpdiag lint rules m = re.match(r'gcpdiag/lint/([^/]+)/(.*)\.py', arg) if not m: continue rule_dir = m.group(1) rule_basename = m.group(2) rule_module_name = f'gcpdiag.lint.{rule_dir}.{rule_basename}' try: rule = rules_repo.get_rule_by_module_name(rule_module_name) # Verify that the rule id is unique if str(rule) in seen_rule_ids: print(f'ERROR: rule id {str(rule)} is not unique!', file=sys.stderr) exit_fail = True seen_rule_ids[str(rule)] = 1 if not check_rule_page(rule): exit_fail = True if not check_rule_snapshot(rule): exit_fail = True except lint.NotLintRule: continue if exit_fail: sys.exit(1) if __name__ == '__main__': if len(sys.argv) < 2: usage() elif sys.argv[1] == 'lint': check(sys.argv[2:]) elif sys.argv[1] == 'runbook': check_runbook(sys.argv[2:]) ================================================ FILE: bin/precommit-required-files-wrapper ================================================ #!/bin/sh # wrapper to call precommit-required-files with correct environment set # (this is particularly problematic in GitHub Actions and I couldn't get # it to work without this wrapper) # note: the script assumes to be running in the root directory of the git # repository export PATH=$(pipenv --venv)/bin:$PATH export PYTHONPATH=$(pwd) python bin/precommit-required-files "$@" ================================================ FILE: bin/precommit-todo-annotations ================================================ #!/bin/sh # An hook script to verify changes to be committed do not contain # any 'TODO:' comments. # To bypass this hook, use the "--no-verify" parameter when committing. # Redirect output to stderr. exec 1>&2 # Define colors RED='\033[0;31m' NC='\033[0m' # Define what term will be searched for. SEARCH_TERM_TODO="TODO:" # Check for the presence of the SEARCH_TERM in updated files. if [[ $(git diff --cached | grep -E "^\+" | grep -v '+++ b/' | cut -c 2-) == *$SEARCH_TERM_TODO* ]] then printf "${RED}Error:${NC} Found ${SEARCH_TERM_TODO} in attempted commit.\n" printf "Please remove all occurrences of ${SEARCH_TERM_TODO} before committing.\n" exit 1 fi ================================================ FILE: bin/runbook-starter-code-generator ================================================ #!/usr/bin/env python3 """Generate runbook starter code""" import os import re import subprocess import sys import textwrap from datetime import datetime # update pyinstaller/hook-gcpdiag-runbook.py when adding any new modules SUPPORTED_PRODUCTS = { 'apigee', 'billing', 'bigquery', 'cdn', 'cloudrun', 'crm', 'composer', 'datafusion', 'dataflow', 'dataproc', 'kms', 'gar', 'gke', 'gcb', 'gcf', 'gae', 'gce', 'iam', 'interconnect', 'gcs', 'lb', 'logs', 'tpu', 'pubsub', 'sql', 'vertex', 'vpc', 'nat', 'monitoring', 'vpn' } def _get_active_gcloud_project(): """Best effort check to retrieve the project id currently configured on gcloud.""" try: # Run the gcloud command to get the current project result = subprocess.run(['gcloud', 'config', 'get-value', 'project'], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) project_id = result.stdout.strip() except (subprocess.CalledProcessError, OSError, FileNotFoundError): return None else: print( f'Found project {_color(project_id,"blue")}; will use it arg for `--project`' ) return project_id def _color(text, color): colors = { 'green': '\033[92m', 'blue': '\033[94m', 'magenta': '\033[95m', 'cyan': '\033[96m', 'reset': '\033[0m' } return f"{colors[color]}{text}{colors['reset']}" def _git_operations(runbook_name): try: current_branch = _get_current_branch() _stash_changes(runbook_name) if current_branch not in (runbook_name, 'master'): _switch_to_master(current_branch) current_branch = _get_current_branch() _update_repository(current_branch) if current_branch != runbook_name: _create_new_or_switch_branch(runbook_name) current_branch = _get_current_branch() print( f'You can run `git stash pop` if you want the stashed changes in branch {runbook_name}' ) except subprocess.CalledProcessError as e: print('An error occurred during git operations:') print(e) except OSError: pass def _get_current_branch(): result = subprocess.run(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], check=True, text=True, capture_output=True) branch = result.stdout.strip() print(f'Currently on branch "{branch}"') return branch def _stash_changes(runbook_name): try: # Attempt to stash changes result = subprocess.run([ 'git', 'stash', 'push', '-m', f'Auto-stash during {runbook_name} generation' ], text=True, capture_output=True, check=True).stdout.strip() if 'no local changes to save' in result.lower(): print('No changes to stash.') else: print( 'Detected uncommitted changes in the working directory and stashed them!' ) except subprocess.CalledProcessError as e: print('Failed to stash changes:') print(e) def _switch_to_master(current_branch): print( f'Switching from branch "{current_branch}" to "master" to sync environment.' ) subprocess.run(['git', 'checkout', 'master'], check=True, text=True, capture_output=True).stdout.strip() def _update_repository(current_branch): print( f'On "{current_branch}" branch; syncing with remote branch `origin/master`.' ) subprocess.run(['git', 'pull', 'origin', 'master', '--rebase'], check=True, text=True, capture_output=True) print('Repository updated with: `git pull origin master --rebase`') def _create_new_or_switch_branch(runbook_name): command = ['git', 'checkout', '-b', runbook_name] # First, check if the branch already exists existing_branches = subprocess.run(['git', 'branch', '--list', runbook_name], check=False, text=True, capture_output=True).stdout.strip() # If the branch already exists, print a message and do not attempt to create it if existing_branches: print( f'Branch "{runbook_name}" already exists. Switching to existing branch') command.remove('-b') else: print(f'Creating new branch "{runbook_name}".') try: # Attempt to create the branch since it does not exist subprocess.run(command, check=True, text=True, capture_output=True).stdout.strip() except subprocess.CalledProcessError as e: # Handle possible errors during branch creation (e.g., due to local modifications) print('Failed to create new branch:') print(e) def check_and_activate_shell(command, py_path, name, prepenv): # Check if the VIRTUAL_ENV environment variable is set print(_color('\nPreparing your python virtual environment', 'blue')) print(_color('=========================================', 'blue')) if 'VIRTUAL_ENV' in os.environ: print('Virtual environment is already activated. Generating starter code.') gen_starter_code({'name': name, 'prepenv': prepenv}) else: # Check current directory and subfolders current_directory = os.getcwd() if 'gcpdiag' in current_directory and os.path.isdir( 'gcpdiag') and os.path.isdir('bin'): print('Attempting to activate the virtual environment for "gcpdiag".') print('Virtual environment activated.') gen_starter_code({'name': name, 'prepenv': prepenv}) if not _activate_virtual_environment(): print('Failed to activate the venv. Manually run it `pipenv shell`.') else: print( 'Not in an appropriate location to activate the virtual environment.') print('Current directory:', current_directory) def _activate_virtual_environment(): try: # Using 'pipenv run' instead of 'pipenv shell' as it's better suited for scripts subprocess.run('pipenv shell', shell=True, check=True) return True except subprocess.CalledProcessError: return False def gen_starter_code(args_: dict): # Extract product and Runbook ID runbook_name = args_['name'] parts = runbook_name.split('/') product = parts[0] id_ = parts[1] if product not in SUPPORTED_PRODUCTS: print(f"Product '{product}' is not supported yet or registered.", file=sys.stderr) print('Please ensure this product is added to all necessary configuration files.', file=sys.stderr) print(f'Specifically, you need to update:') print(f" 1. The `SUPPORTED_PRODUCTS` set in '{__file__}'", file=sys.stderr) print(f" 2. The `PRODUCTS` dictionary in 'bin/precommit-required-files.py'", file=sys.stderr) print("Example for `bin/precommit-required-files.py`: 'your_new_product': '[Your New Product Name](https://cloud.google.com/your-new-product-url)'", file=sys.stderr) return if args_['prepenv']: print(_color('\nPreparing your local git repository', 'blue')) print(_color('===================================', 'blue')) _git_operations(runbook_name) dir_path = f'gcpdiag/runbook/{product}' filename = id_.replace('-', '_') dt_name = re.sub(r'(^|-)([a-z0-9])', lambda match: match.group(2).upper(), id_) # Create necessary directories os.makedirs(os.path.join(dir_path, 'templates'), exist_ok=True) os.makedirs(os.path.join(dir_path, 'snapshots'), exist_ok=True) open(os.path.join(dir_path, '__init__.py'), 'a', encoding='utf-8').close() file_path = os.path.join(dir_path, f'{filename}.py') print(_color('\nGenerating Your Runbook', 'blue')) print(_color('=======================', 'blue')) if not os.path.exists(file_path): # Process the runbook starter code template with open('bin/templates/runbook-starter-code.py.tpl', 'r', encoding='utf-8') as template_file: template_content = template_file.read() template_content = template_content.replace('TreeName', dt_name) template_content = template_content.replace('[YEAR]', str(datetime.now().year)) with open(file_path, 'w', encoding='utf-8') as output_file: output_file.write(template_content) print( f'Created runbook in {_color(f"{dir_path}/{filename}.py", "magenta")}. Happy Coding! 💻 🚀' ) else: print( f'{file_path} already exists. Will not be generating starter code for: {runbook_name}' ) print('Verify if runbook already exist') print(f'Doc: https://gcpdiag.dev/runbook/diagnostic-trees/{product}/{id_}') print(f'File: gcpdiag/runbook/{product}/{id_}.py') print(_color('\nVerifying & Generating runbook product files', 'blue')) print(_color('============================================', 'blue')) # Process additional template files for file in [ 'constants', 'flags', 'generalized_steps', 'generalized_steps_test' ]: file_path = os.path.join(dir_path, f'{file}.py') if not os.path.exists(file_path): with open('bin/templates/python-file.py.tpl', 'r', encoding='utf-8') as template_file: content = template_file.read() content = content.replace('[YEAR]', str(datetime.now().year)) with open(file_path, 'w', encoding='utf-8') as output_file: output_file.write(content) print(f'Created {file_path}.') if file in ('constants', 'flags'): with open(file_path, 'a', encoding='utf-8') as output_file: output_file.write( textwrap.dedent(f'''\ # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.{file} import * ''')) print('Ok!') print(_color('\nGenerating Test Class', 'blue')) print(_color('=====================', 'blue')) file_path = os.path.join(dir_path, f'{filename}_test.py') if not os.path.exists(file_path): # Process the runbook starter code template with open('bin/templates/runbook-test.py.tpl', 'r', encoding='utf-8') as template_file: template_content = template_file.read() template_content = template_content.replace('TreeName', dt_name) template_content = template_content.replace('PRODUCT', product) template_content = template_content.replace('RULE', runbook_name) template_content = template_content.replace('[YEAR]', str(datetime.now().year)) with open(file_path, 'w', encoding='utf-8') as output_file: output_file.write(template_content) print(f'Created runbook test in {_color(f"{file_path}", "magenta")}. ✅ 🎉') else: print(f'Strange, test class {file_path} already exists.') print(_color(f'\nHow to run {runbook_name} in local development', 'blue')) print(_color('===============================================', 'blue')) proj = _get_active_gcloud_project() or 'REPLACE_PROJECT_ID' print('Run the runbook in interactive mode') print( _color( f'bin/gcpdiag runbook {runbook_name} -p custom_flag={product} --project={proj}', 'green')) print( f'Use {_color("--auto", "magenta")} to run the runbook in a non-interactive mode' ) print( _color( f'bin/gcpdiag runbook {runbook_name} -p custom_flag={product} --project={proj} --auto', 'green')) def _parse_kwargs(argv): kwargs = {} for arg in argv: if '=' in arg: key, value = arg.split('=', 1) kwargs[key] = value.strip() return kwargs if __name__ == '__main__': args = _parse_kwargs(sys.argv[1::]) args['command'] = sys.argv[1] if args.get('prepenv').lower() in ('0', 'n', 'no', 'false', ''): args['prepenv'] = False gen_starter_code(args) elif args.get('prepenv').lower() in ('1', 'y', 'yes', 'true'): args['prepenv'] = True check_and_activate_shell(**args) else: print( 'Usage: python runbook-starter-code-generator name=product/runbook-id prepenv=true' ) ================================================ FILE: bin/steps_table.md ================================================ |Runbook name| **Runbook Step** | stepType | `StepId` | |:------------|:----------- |:----------- |:----------- | |[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **BgpDownFlapEnd** | END | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.BgpDownFlapEnd` | |[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **BgpDownFlapStart** | START | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.BgpDownFlapStart` | |[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **CheckBgpDown** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.CheckBgpDown` | |[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **CheckBgpFlap** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.CheckBgpFlap` | |[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **CheckCloudRouterMaintenance** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.CheckCloudRouterMaintenance` | |[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **CheckInterconnectMaintenance** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.CheckInterconnectMaintenance` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaDisabledAnnotation** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaDisabledAnnotation` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaFailedToEvictPods** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaFailedToEvictPods` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaInstanceTimeout** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaInstanceTimeout` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaIpSpaceExhausted** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaIpSpaceExhausted` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaMinResourceLimitExceeded** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaMinResourceLimitExceeded` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaMinSizeReached** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaMinSizeReached` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaNoPlaceToMovePods** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaNoPlaceToMovePods` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaNotSafeToEvictAnnotation** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaNotSafeToEvictAnnotation` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaOutOfResources** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaOutOfResources` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodControllerNotFound** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodControllerNotFound` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodKubeSystemUnmovable** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodKubeSystemUnmovable` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodNotEnoughPdb** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodNotEnoughPdb` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodUnexpectedError** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodUnexpectedError` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodsNotBackedByController** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodsNotBackedByController` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaQuotaExceeded** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaQuotaExceeded` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaServiceAccountDeleted** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaServiceAccountDeleted` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **ClusterAutoscalerEnd** | END | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.ClusterAutoscalerEnd` | |[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **ClusterAutoscalerStart** | START | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.ClusterAutoscalerStart` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **CheckClusterNetwork** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.CheckClusterNetwork` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **CheckInitScriptFailure** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.CheckInitScriptFailure` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **CheckPrivateGoogleAccess** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.CheckPrivateGoogleAccess` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **CheckSharedVPCRoles** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.CheckSharedVPCRoles` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterCreationEnd** | END | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationEnd` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterCreationQuota** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationQuota` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterCreationStart** | START | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationStart` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterCreationStockout** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationStockout` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterDetailsDependencyGateway** | GATEWAY | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterDetailsDependencyGateway` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **InternalIpGateway** | GATEWAY | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.InternalIpGateway` | |[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ServiceAccountExists** | GATEWAY | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ServiceAccountExists` | |[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **DefaultServiceAccountCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.DefaultServiceAccountCheck` | |[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **FailedDeploymentEndStep** | END | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.FailedDeploymentEndStep` | |[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **FailedDeploymentsStart** | START | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.FailedDeploymentsStart` | |[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **FunctionGlobalScopeCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.FunctionGlobalScopeCheck` | |[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **LocationConstraintCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.LocationConstraintCheck` | |[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **UserServiceAccountCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.UserServiceAccountCheck` | |[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **FailedStreamingPipelineEnd** | END | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipelineEnd` | |[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **FailedStreamingPipelineStart** | START | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipelineStart` | |[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **JobGraphIsConstructed** | GATEWAY | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobGraphIsConstructed` | |[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **JobIsStreaming** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobIsStreaming` | |[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **JobLogsVisible** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobLogsVisible` | |[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **JobState** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobState` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/generalized_steps.py) | **CheckClusterNetworkConnectivity** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.generalized_steps.CheckClusterNetworkConnectivity` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/logs/generalized_steps.py) | **CheckIssueLogEntry** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.logs.generalized_steps.CheckIssueLogEntry` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/generalized_steps.py) | **CheckLogsExist** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.generalized_steps.CheckLogsExist` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceCustomScripts** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceCustomScripts` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceExternalIpDisabled** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceExternalIpDisabled` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceIsUsingLatestEnvVersion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceIsUsingLatestEnvVersion` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstancePerformance** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstancePerformance` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceSyslogsJupyterRunningOnPort8080** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceSyslogsJupyterRunningOnPort8080` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceUsingOfficialImage** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceUsingOfficialImage` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **GceVpcConnectivityCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.GceVpcConnectivityCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **HighVmCpuUtilization** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.HighVmCpuUtilization` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **HighVmDiskUtilization** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.HighVmDiskUtilization` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **HighVmMemoryUtilization** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.HighVmMemoryUtilization` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcp/generalized_steps.py) | **HumanTask** | MANUAL STEP | `google.cloud.gcpdiag.runbook.gcp.generalized_steps.HumanTask` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/iam/generalized_steps.py) | **IamPolicyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.iam.generalized_steps.IamPolicyCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/generalized_steps.py) | **NatDroppedReceivedPacketCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.generalized_steps.NatDroppedReceivedPacketCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/generalized_steps.py) | **NatIpExhaustionCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.generalized_steps.NatIpExhaustionCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/generalized_steps.py) | **NatResourceExhaustionCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.generalized_steps.NatResourceExhaustionCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/crm/generalized_steps.py) | **OrgPolicyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.crm.generalized_steps.OrgPolicyCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/generalized_steps.py) | **PubsubQuotas** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.pubsub.generalized_steps.PubsubQuotas` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcp/generalized_steps.py) | **ResourceAttributeCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcp.generalized_steps.ResourceAttributeCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcp/generalized_steps.py) | **ServiceApiStatusCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcp.generalized_steps.ServiceApiStatusCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/monitoring/generalized_steps.py) | **TimeSeriesCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.monitoring.generalized_steps.TimeSeriesCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/generalized_steps.py) | **ValidSdk** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.generalized_steps.ValidSdk` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/generalized_steps.py) | **VmExternalIpConnectivityTest** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vpc.generalized_steps.VmExternalIpConnectivityTest` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/iam/generalized_steps.py) | **VmHasAnActiveServiceAccount** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.iam.generalized_steps.VmHasAnActiveServiceAccount` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmHasOpsAgent** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmHasOpsAgent` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmLifecycleState** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmLifecycleState` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmMetadataCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmMetadataCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmScope** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmScope` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmSerialLogsCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmSerialLogsCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/generalized_steps.py) | **VpcFirewallCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vpc.generalized_steps.VpcFirewallCheck` | |[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/generalized_steps.py) | **VpcRouteCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vpc.generalized_steps.VpcRouteCheck` | |[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckConfigMap** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckConfigMap` | |[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckDaemonSet** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckDaemonSet` | |[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckDestinationIP** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckDestinationIP` | |[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckNodeIP** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckNodeIP` | |[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckPodIP** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckPodIP` | |[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **GkeIpMasqStandardEnd** | END | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.GkeIpMasqStandardEnd` | |[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **GkeIpMasqStandardStart** | START | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.GkeIpMasqStandardStart` | |[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **Nodeproblem** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.Nodeproblem` | |[guestos_bootup](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/guestos_bootup.py) | **CloudInitChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.guestos_bootup.CloudInitChecks` | |[guestos_bootup](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/guestos_bootup.py) | **GuestosBootupStart** | START | `google.cloud.gcpdiag.runbook.gce.guestos_bootup.GuestosBootupStart` | |[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageConnectionTimeout** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageConnectionTimeout` | |[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageConnectionTimeoutRestrictedPrivate** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageConnectionTimeoutRestrictedPrivate` | |[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageDnsIssue** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageDnsIssue` | |[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageForbidden** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageForbidden` | |[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageNotFound** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageNotFound` | |[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageNotFoundInsufficientScope** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageNotFoundInsufficientScope` | |[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImagePullEnd** | END | `google.cloud.gcpdiag.runbook.gke.image_pull.ImagePullEnd` | |[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImagePullStart** | START | `google.cloud.gcpdiag.runbook.gke.image_pull.ImagePullStart` | |[ip_exhaustion](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/ip_exhaustion.py) | **IpExhaustionEnd** | END | `google.cloud.gcpdiag.runbook.gke.ip_exhaustion.IpExhaustionEnd` | |[ip_exhaustion](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/ip_exhaustion.py) | **IpExhaustionStart** | START | `google.cloud.gcpdiag.runbook.gke.ip_exhaustion.IpExhaustionStart` | |[ip_exhaustion](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/ip_exhaustion.py) | **NodeIpRangeExhaustion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.ip_exhaustion.NodeIpRangeExhaustion` | |[ip_exhaustion](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/ip_exhaustion.py) | **PodIpRangeExhaustion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.ip_exhaustion.PodIpRangeExhaustion` | |[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **DataflowPermissionsEnd** | END | `google.cloud.gcpdiag.runbook.dataflow.job_permissions.DataflowPermissionsEnd` | |[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **DataflowResourcePermissions** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.job_permissions.DataflowResourcePermissions` | |[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **DataflowUserAccountPermissions** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.job_permissions.DataflowUserAccountPermissions` | |[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **DataflowWorkerServiceAccountPermissions** | GATEWAY | `google.cloud.gcpdiag.runbook.dataflow.job_permissions.DataflowWorkerServiceAccountPermissions` | |[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **StartStep** | START | `google.cloud.gcpdiag.runbook.StartStep` | |[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LatencyEnd** | END | `google.cloud.gcpdiag.runbook.lb.latency.LatencyEnd` | |[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LbBackendLatencyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.latency.LbBackendLatencyCheck` | |[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LbErrorRateCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.latency.LbErrorRateCheck` | |[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LbLatencyStart** | START | `google.cloud.gcpdiag.runbook.lb.latency.LbLatencyStart` | |[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LbRequestCountCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.latency.LbRequestCountCheck` | |[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **ClusterLevelLoggingEnabled** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.ClusterLevelLoggingEnabled` | |[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **LoggingApiEnabled** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.LoggingApiEnabled` | |[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **LoggingWriteApiQuotaExceeded** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.LoggingWriteApiQuotaExceeded` | |[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **LogsEnd** | END | `google.cloud.gcpdiag.runbook.gke.logs.LogsEnd` | |[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **LogsStart** | START | `google.cloud.gcpdiag.runbook.gke.logs.LogsStart` | |[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **NodePoolCloudLoggingAccessScope** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.NodePoolCloudLoggingAccessScope` | |[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **ServiceAccountLoggingPermission** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.ServiceAccountLoggingPermission` | |[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **NodeAutoRepairEnd** | END | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.NodeAutoRepairEnd` | |[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **NodeAutoRepairStart** | START | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.NodeAutoRepairStart` | |[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **NodeDiskFull** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.NodeDiskFull` | |[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **NodeNotReady** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.NodeNotReady` | |[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **UnallocatableGpu** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.UnallocatableGpu` | |[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **UnallocatableTpu** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.UnallocatableTpu` | |[node_bootstrapping](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_bootstrapping.py) | **NodeBootstrappingEnd** | END | `google.cloud.gcpdiag.runbook.gke.node_bootstrapping.NodeBootstrappingEnd` | |[node_bootstrapping](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_bootstrapping.py) | **NodeBootstrappingStart** | START | `google.cloud.gcpdiag.runbook.gke.node_bootstrapping.NodeBootstrappingStart` | |[node_bootstrapping](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_bootstrapping.py) | **NodeInsertCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_bootstrapping.NodeInsertCheck` | |[node_bootstrapping](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_bootstrapping.py) | **NodeRegistrationSuccess** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_bootstrapping.NodeRegistrationSuccess` | |[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **LiveMigration** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_unavailability.LiveMigration` | |[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **NodePoolUpgrade** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_unavailability.NodePoolUpgrade` | |[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **NodeRemovedByAutoscaler** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_unavailability.NodeRemovedByAutoscaler` | |[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **NodeUnavailabilityEnd** | END | `google.cloud.gcpdiag.runbook.gke.node_unavailability.NodeUnavailabilityEnd` | |[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **NodeUnavailabilityStart** | START | `google.cloud.gcpdiag.runbook.gke.node_unavailability.NodeUnavailabilityStart` | |[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **PreemptionCondition** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_unavailability.PreemptionCondition` | |[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **CheckSerialPortLogging** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ops_agent.CheckSerialPortLogging` | |[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **InvestigateLoggingMonitoring** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.ops_agent.InvestigateLoggingMonitoring` | |[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **OpsAgentEnd** | END | `google.cloud.gcpdiag.runbook.gce.ops_agent.OpsAgentEnd` | |[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **OpsAgentStart** | START | `google.cloud.gcpdiag.runbook.gce.ops_agent.OpsAgentStart` | |[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **VmHasAServiceAccount** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.ops_agent.VmHasAServiceAccount` | |[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatAllocationFailedCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatAllocationFailedCheck` | |[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationAutoOnly** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationAutoOnly` | |[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationFailedEnd** | END | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationFailedEnd` | |[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationFailedStart** | START | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationFailedStart` | |[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationManualOnly** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationManualOnly` | |[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationMethodCheck** | GATEWAY | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationMethodCheck` | |[pull_subscription_delivery](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/pull_subscription_delivery.py) | **PullRate** | GATEWAY | `google.cloud.gcpdiag.runbook.pubsub.pull_subscription_delivery.PullRate` | |[pull_subscription_delivery](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/pull_subscription_delivery.py) | **PullSubscriptionDeliveryEnd** | END | `google.cloud.gcpdiag.runbook.pubsub.pull_subscription_delivery.PullSubscriptionDeliveryEnd` | |[pull_subscription_delivery](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/pull_subscription_delivery.py) | **PullSubscriptionDeliveryStart** | START | `google.cloud.gcpdiag.runbook.pubsub.pull_subscription_delivery.PullSubscriptionDeliveryStart` | |[pull_subscription_delivery](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/pull_subscription_delivery.py) | **ThroughputQualification** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.pubsub.pull_subscription_delivery.ThroughputQualification` | |[resource_quotas](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/resource_quotas.py) | **ClusterVersion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.resource_quotas.ClusterVersion` | |[resource_quotas](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/resource_quotas.py) | **ResourceQuotaExceeded** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.resource_quotas.ResourceQuotaExceeded` | |[resource_quotas](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/resource_quotas.py) | **ResourceQuotasEnd** | END | `google.cloud.gcpdiag.runbook.gke.resource_quotas.ResourceQuotasEnd` | |[resource_quotas](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/resource_quotas.py) | **ResourceQuotasStart** | START | `google.cloud.gcpdiag.runbook.gke.resource_quotas.ResourceQuotasStart` | |[serial_log_analyzer](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/serial_log_analyzer.py) | **AnalysingSerialLogsEnd** | END | `google.cloud.gcpdiag.runbook.gce.serial_log_analyzer.AnalysingSerialLogsEnd` | |[serial_log_analyzer](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/serial_log_analyzer.py) | **CloudInitChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.serial_log_analyzer.CloudInitChecks` | |[serial_log_analyzer](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/serial_log_analyzer.py) | **SerialLogAnalyzerStart** | START | `google.cloud.gcpdiag.runbook.gce.serial_log_analyzer.SerialLogAnalyzerStart` | |[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **ContainerFailedToStartStep** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.ContainerFailedToStartStep` | |[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **ImageWasNotFoundStep** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.ImageWasNotFoundStep` | |[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **NoPermissionForImageStep** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.NoPermissionForImageStep` | |[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **ServiceDeploymentCodeStep** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.ServiceDeploymentCodeStep` | |[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **ServiceDeploymentStart** | START | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.ServiceDeploymentStart` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckAutoscalingPolicy** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckAutoscalingPolicy` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckBQConnector** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckBQConnector` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckClusterVersion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckClusterVersion` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckGCPause** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckGCPause` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckGCSConnector** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckGCSConnector` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckIfJobFailed** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckIfJobFailed` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckJobThrottling** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckJobThrottling` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckKillingOrphanedApplication** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckKillingOrphanedApplication` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckMasterOOM** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckMasterOOM` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckPermissions** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckPermissions` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckPortExhaustion** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckPortExhaustion` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckPreemptible** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckPreemptible` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckPythonImportFailure** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckPythonImportFailure` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckSWPreemption** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckSWPreemption` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckShuffleFailures** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckShuffleFailures` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckShuffleServiceKill** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckShuffleServiceKill` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckStackdriverSetting** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckStackdriverSetting` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckTaskNotFound** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckTaskNotFound` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckWorkerDiskUsageIssue** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckWorkerDiskUsageIssue` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckWorkerOOM** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckWorkerOOM` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckYarnRuntimeException** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckYarnRuntimeException` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **DataProcClusterExists** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.DataProcClusterExists` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **JobExists** | START | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.JobExists` | |[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **SparkJobEnd** | END | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.SparkJobEnd` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **GceFirewallAllowsSsh** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.ssh.GceFirewallAllowsSsh` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **GcpSshPermissions** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.GcpSshPermissions` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **LinuxGuestOsChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.LinuxGuestOsChecks` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **OsLoginStatusCheck** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.ssh.OsLoginStatusCheck` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **PosixUserHasValidSshKeyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **SshEnd** | END | `google.cloud.gcpdiag.runbook.gce.ssh.SshEnd` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **SshInBrowserCheck** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.SshInBrowserCheck` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **SshStart** | START | `google.cloud.gcpdiag.runbook.gce.ssh.SshStart` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **VmGuestOsType** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.ssh.VmGuestOsType` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **VmPerformanceChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.VmPerformanceChecks` | |[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **WindowsGuestOsChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.WindowsGuestOsChecks` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeCertificateStatus** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeCertificateStatus` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeDomainStatuses** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeDomainStatuses` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeFailedCaaCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeFailedCaaCheck` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeFailedNotVisibleDomains** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeFailedNotVisibleDomains` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeProvisioningDomains** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeProvisioningDomains` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeRateLimitedDomains** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeRateLimitedDomains` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **CheckCertificateAttachment** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.CheckCertificateAttachment` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **CheckProvisioningTime** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.CheckProvisioningTime` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **SslCertificatesEnd** | END | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.SslCertificatesEnd` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **SslCertificatesStart** | START | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.SslCertificatesStart` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **VerifyDnsRecords** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.VerifyDnsRecords` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **VerifyForwardingRulesPort** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.VerifyForwardingRulesPort` | |[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **VerifyNoCertificateMapConflict** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.VerifyNoCertificateMapConflict` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **AnalyzeLatestHealthCheckLog** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.AnalyzeLatestHealthCheckLog` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **AnalyzeTimeoutHealthCheckLog** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.AnalyzeTimeoutHealthCheckLog` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **AnalyzeUnhealthyHealthCheckLog** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.AnalyzeUnhealthyHealthCheckLog` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **AnalyzeUnknownHealthCheckLog** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.AnalyzeUnknownHealthCheckLog` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **CheckPastHealthCheckSuccess** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.CheckPastHealthCheckSuccess` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **CheckVmPerformance** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.CheckVmPerformance` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **UnhealthyBackendsEnd** | END | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.UnhealthyBackendsEnd` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **UnhealthyBackendsStart** | START | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.UnhealthyBackendsStart` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **ValidateBackendServicePortConfiguration** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.ValidateBackendServicePortConfiguration` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **ValidateBackendServiceProtocolConfiguration** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.ValidateBackendServiceProtocolConfiguration` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **VerifyFirewallRules** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.VerifyFirewallRules` | |[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **VerifyHealthCheckLoggingEnabled** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.VerifyHealthCheckLoggingEnabled` | |[vm_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_creation.py) | **InvestigateVmCreationLogFailure** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.vm_creation.InvestigateVmCreationLogFailure` | |[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **ExternalInterfaceCheck** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.ExternalInterfaceCheck` | |[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **InternalInterfaceCheck** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.InternalInterfaceCheck` | |[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **VmExternalIpConnectivityEnd** | END | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.VmExternalIpConnectivityEnd` | |[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **VmExternalIpConnectivityStart** | START | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.VmExternalIpConnectivityStart` | |[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **VmHasExternalIp** | GATEWAY | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.VmHasExternalIp` | |[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **CheckLiveMigrations** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.CheckLiveMigrations` | |[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **CpuOvercommitmentCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.CpuOvercommitmentCheck` | |[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **DiskAvgIOLatencyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.DiskAvgIOLatencyCheck` | |[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **DiskHealthCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.DiskHealthCheck` | |[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **DiskIopsThroughputUtilisationChecks** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.DiskIopsThroughputUtilisationChecks` | |[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **VmPerformanceEnd** | END | `google.cloud.gcpdiag.runbook.gce.vm_performance.VmPerformanceEnd` | |[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **VmPerformanceStart** | START | `google.cloud.gcpdiag.runbook.gce.vm_performance.VmPerformanceStart` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **ComputeClusterManagerTermination** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.ComputeClusterManagerTermination` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **GuestOsIssuedShutdown** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.GuestOsIssuedShutdown` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **HostError** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.HostError` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **ManagedInstanceGroupRecreation** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.ManagedInstanceGroupRecreation` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **PreemptibleInstance** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.PreemptibleInstance` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **ScheduledStopPolicy** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.ScheduledStopPolicy` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **StopOperationGateway** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.vm_termination.StopOperationGateway` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **TerminateOnHostMaintenance** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.TerminateOnHostMaintenance` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **TerminationOperationType** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.vm_termination.TerminationOperationType` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **UserOrServiceAccountInitiatedStop** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.UserOrServiceAccountInitiatedStop` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **VmTerminationEnd** | END | `google.cloud.gcpdiag.runbook.gce.vm_termination.VmTerminationEnd` | |[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **VmTerminationStart** | START | `google.cloud.gcpdiag.runbook.gce.vm_termination.VmTerminationStart` | |[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **CheckWorkbenchInstanceComputeEngineSSH** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.CheckWorkbenchInstanceComputeEngineSSH` | |[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **CheckWorkbenchInstanceJupyterSpace** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.CheckWorkbenchInstanceJupyterSpace` | |[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **CheckWorkbenchInstanceUsingCustomContainer** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.CheckWorkbenchInstanceUsingCustomContainer` | |[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **DecisionCheckWorkbenchInstanceSystemLogging** | GATEWAY | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.DecisionCheckWorkbenchInstanceSystemLogging` | |[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **WorkbenchInstanceStuckInProvisioningEnd** | END | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.WorkbenchInstanceStuckInProvisioningEnd` | |[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **WorkbenchInstanceStuckInProvisioningStart** | START | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.WorkbenchInstanceStuckInProvisioningStart` | ================================================ FILE: bin/templates/diagnostic-tree.jinja ================================================ {#- Prepare the tree traversal part -#} {% macro traverse_dt(step, ROOT_DIR) %} {% set dt_path = '/steps/' ~ step.product ~ '/' ~ step.doc_file_name %} {% if ROOT_DIR ~ '/' ~ dt_path %} - [{{ util.pascal_case_to_title(step.__class__.__name__)}}](/runbook{{ dt_path }}) {% endif %} {% for child in step.steps %} {{- traverse_dt(child, ROOT_DIR) -}} {% endfor %} {% endmacro %} {#- The main part of the template -#} --- title: "{{ rule.product }}/{{ title }}" linkTitle: "{{ rule.name }}" weight: 3 type: docs description: > {{ rule.short_desc|trim }} --- **Product**: {{ PRODUCTS[rule.product]|trim }} **Kind**: Debugging Tree ### Description {{ rule.long_desc|trim }} ### Executing this runbook ```shell gcpdiag runbook {{rule.name}} \ {% for name, _ in rule.parameters.items() %} {% if not loop.last %} -p {{ name }}=value \ {% else %} -p {{ name }}=value {% endif %} {% endfor %} ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| {% for n, d in rule.parameters.items() %} | `{{ n }}` | {{ d.get('required', False) }} | {{ d.get('default', 'None') }} | {{ d['type'].__name__ }} | {{ d['help'] }} | {% endfor %} Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps {{ traverse_dt(rule.start, ROOT_DIR) }} ================================================ FILE: bin/templates/python-file.py.tpl ================================================ # Copyright [YEAR] 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. """TODO: String doc""" ================================================ FILE: bin/templates/runbook-starter-code.py.tpl ================================================ # Copyright [YEAR] 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. """TODO: Overview of classes contained in file""" from datetime import datetime from gcpdiag import runbook from gcpdiag.runbook import op from gcpdiag.queries import crm, gce, gke, iam, logs, pubsub from gcpdiag.runbook.gce import flags from gcpdiag.runbook.iam import generalized_steps as iam_gs CUSTOM_FLAG = 'custom_flag' class TreeName(runbook.DiagnosticTree): """TODO: Single line explaining runbook's purpose. Overview message for end user alignment with runbook capabilities - Subheading: We check X product domain - Subheading: We check Y product domain - ... """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, CUSTOM_FLAG: { 'type': str, 'help': 'Help text for the parameter', 'default': 'gce' } } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate your step classes start = TreeNameStart() # add them to your tree self.add_start(start) # you can create custom steps to define unique logic custom = CustomStep() # Describe the step relationships self.add_step(parent=start, child=custom) # Type of steps: a Gateway i.e Decision point. self.add_step(parent=custom, child=TreeNameGateway()) # Type of steps: a composite step i.e a group of related steps self.add_step(parent=custom, child=TreeNameCompositeStep()) # Ending your runbook self.add_end(TreeNameEnd()) class TreeNameStart(runbook.StartStep): """TODO: Write a one line overview of this step Detailed explanation of how this works and what it checks. """ def execute(self): """TODO: One line string for the checks being performed by start step""" proj = crm.get_project(op.get(flags.PROJECT_ID)) if proj: op.info(f'name: {proj.name}, id: {proj.id}, number: {proj.number}') product = self.__module__.split('.')[-2] op.put(CUSTOM_FLAG, product) class CustomStep(runbook.Step): """TODO: Write a one line overview of this step Detailed explanation of how this works and what it checks. """ def _project_helper(self, project): return project.id == project.name def execute(self): """TODO: One line string for the checks being performed by custom step""" project = crm.get_project(op.get(flags.PROJECT_ID)) if self._project_helper(project): op.add_ok( project, reason='Nice! your project has the same string for name and id') else: op.add_failed(project, reason='Your project name and id are different', remediation='Different name and id is fine too. Please enter "c" to continue. ') class TreeNameGateway(runbook.Gateway): """TODO: Write a one line overview of this this decision point Detailed explanation of how this works and what it checks. """ def execute(self): """TODO: One line string for the decision being performed at this split point.""" # Decision points. if op.get(CUSTOM_FLAG) == 'gce': num = len(gce.get_instances(op.context)) op.info(f'Your project has {num} GCE instance{"" if num==1 else "s"} 🔥') elif op.get(CUSTOM_FLAG) == 'gke': num = len(gke.get_clusters(op.context)) op.info(f'Your project has {num} GKE cluster{"" if num==1 else "s"} 🔥') elif op.get(CUSTOM_FLAG) == 'pubsub': num = len(pubsub.get_topics(op.context)) op.info(f'Your project has {num} Pubsub Topic{"" if num==1 else "s"} 🔥') else: num = len(iam.get_service_account_list(op.context.project_id)) op.info(f'Your project has {num} service account{"" if num==1 else "s"} 🔥') class TreeNameCompositeStep(runbook.CompositeStep): """TODO: Write a one line overview of this composite step Explain the collection of steps in a composite step """ def execute(self): """TODO: One line string for the collection of step grouped in this Composite Step.""" using_a_generalized_class = iam_gs.IamPolicyCheck() using_a_generalized_class.project = op.get(flags.PROJECT_ID) using_a_generalized_class.permissions = ['test.perm.one', 'test.perm.two'] using_a_generalized_class.principal = 'user:user_one@example.com' using_a_generalized_class.require_all = False self.add_child(using_a_generalized_class) using_another_generalized_class = iam_gs.IamPolicyCheck(name='unique_name') using_another_generalized_class.project = op.get(flags.PROJECT_ID) using_another_generalized_class.roles = [ 'roles/test.one', 'role/test.two' ] using_another_generalized_class.principal = 'user:user_two@example.com' using_another_generalized_class.require_all = True self.add_child(using_another_generalized_class) class TreeNameEnd(runbook.EndStep): """TODO: Write a one line overview of this end step TODO: Explain the the checks done by the end step whether automatic assessment or manual. """ def execute(self): """TODO: Write checks being performed by end step""" log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=f'log_name=~"projects/{op.get(flags.PROJECT_ID)}"', start_time_utc=datetime.now(), end_time_utc=op.get(flags.END_TIME_UTC)) if log_entries: op.info((f'You\'ve got new logs in {op.get(flags.PROJECT_ID)} ', f'since {op.get(flags.END_TIME_UTC)} 🚀')) else: op.info(f'No new logs in {op.get(flags.PROJECT_ID)} ' f'since {op.get(flags.END_TIME_UTC)} 😎. Nice!') # TODO: Remove all template boilerplate before submitting your runbook. ================================================ FILE: bin/templates/runbook-test.py.tpl ================================================ # Copyright [YEAR] 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. """Test class for PRODUCT/TreeName""" from gcpdiag import config from gcpdiag.runbook import PRODUCT, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = PRODUCT runbook_name = 'RULE' project_id = '' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'custom_flag': 'PRODUCT' }] ================================================ FILE: bin/templates/steps.jinja ================================================ --- title: "{{ step.product }}/{{ step.label }}" linkTitle: "{{ step.label }}" weight: 3 type: docs description: > {{ step.short_desc|trim }} --- **Product**: {{ PRODUCTS[step.product] }}\ **Step Type**: {{ step.type.value }} ### Description {{ step.long_desc|trim }} {% if msgs['failure_reason'] %} ### Failure Reason {{ msgs['failure_reason'] }} {% endif %} {% if msgs['failure_remediation'] %} ### Failure Remediation {{ msgs['failure_remediation'] }} {% endif %} {% if msgs['success_reason'] %} ### Success Reason {{ msgs['success_reason'] }} {% endif %} {% if msgs['uncertain_reason'] %} ### Uncertain Reason {{ msgs['uncertain_reason'] }} {% endif %} {% if msgs['uncertain_remediation'] %} ### Uncertain Remediation {{ msgs['uncertain_remediation'] }} {% endif %} {% if msgs['skipped_reason'] %} ### Skipped Reason {{ msgs['skipped_reason'] }} {% endif %} {% if msgs['failure_reason_a2'] %} ### Failure Reason [Alternative 2] {{ msgs['failure_reason_a2'] }} {% endif %} {% if msgs['failure_remediation_a2'] %} ### Failure Remediation [Alternative 2] {{ msgs['failure_remediation_a2'] }} {% endif %} {% if msgs['success_reason_a2'] %} ### Success Reason [Alternative 2] {{ msgs['success_reason_a2'] }} {% endif %} {% if msgs['uncertain_reason_a2'] %} ### Uncertain Reason [Alternative 2] {{ msgs['uncertain_reason_a2'] }} {% endif %} {% if msgs['uncertain_remediation_a2'] %} ### Uncertain Remediation [Alternative 2] {{ msgs['uncertain_remediation_a2'] }} {% endif %} {% if msgs['skipped_reason_a2'] %} ### Skipped Reason [Alternative 2] {{ msgs['skipped_reason_a2'] }} {% endif %} {% if msgs['failure_reason_a3'] %} ### Failure Reason [Alternative 3] {{ msgs['failure_reason_a3'] }} {% endif %} {% if msgs['failure_remediation_a3'] %} ### Failure Remediation [Alternative 3] {{ msgs['failure_remediation_a3'] }} {% endif %} {% if msgs['success_reason_a3'] %} ### Success Reason [Alternative 3] {{ msgs['success_reason_a3'] }} {% endif %} {% if msgs['uncertain_reason_a3'] %} ### Uncertain Reason [Alternative 3] {{ msgs['uncertain_reason_a3'] }} {% endif %} {% if msgs['uncertain_remediation_a3'] %} ### Uncertain Remediation [Alternative 3] {{ msgs['uncertain_remediation_a3'] }} {% endif %} {% if msgs['skipped_reason_a3'] %} ### Skipped Reason [Alternative 3] {{ msgs['skipped_reason_a3'] }} {% endif %} {#- End of template -#} ================================================ FILE: bin/terraform ================================================ #!/bin/sh # terraform wrapper using docker USE_TTY="" CWD=$(pwd) [ -t 0 ] && USE_TTY="-it" exec docker run $USE_TTY \ --rm \ -u "$(id -u):$(id -g)" \ -e "USER=$(id -n -u)" \ -e "GROUP=$(id -n -g)" \ -e "HOME=$HOME" \ -e "LANG=$LANG" \ -e "SHELL=/bin/bash" \ -v "$CWD:$CWD" \ -v "$HOME/.config/gcloud:/home/.config/gcloud" \ -w "$CWD" \ mirror.gcr.io/hashicorp/terraform:light "$@" ================================================ FILE: cookiecutter-gcpdiag-rule/cookiecutter.json ================================================ { "rule_name": "", "__name": "{{ cookiecutter.rule_name.lower().replace(' ', '_').replace('-', '_') }}", "year": "{% now 'utc', '%Y' %}", "severity": "", "__products": "", "product": "", "__rule_numbers": "", "number": "{{ '001' if cookiecutter.__rule_numbers[cookiecutter.product][cookiecutter.year] is undefined else cookiecutter.__rule_numbers[cookiecutter.product][cookiecutter.year][cookiecutter.severity] | default('001') }}", "title": "", "description": "", "__rule_classes": "", "__prompts__": { "rule_name": "short description of the lint rule", "title": "a one-line description of the rule, that states the GOOD/EXPECTED state of the product/feature", "description": "3-4 sentences that explain the issue in greater details" } } ================================================ FILE: cookiecutter-gcpdiag-rule/cookiecutter_runner.py ================================================ # Copyright 2021 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. """ Populates a dictionary of product rules with the next consecutive number of a rule. This script scans the 'gcpdiag/lint' directory for products and their associated rule files. It parses rule file names to extract severity, year, and rule number information. Then, it organizes rules by product, year, and severity, and determines the next consecutive rule number for each severity within a year. Finally, it uses Cookiecutter to generate new rule files based on this information. """ import sys from os import path, scandir from re import match from typing import Dict, Set from cookiecutter.main import cookiecutter SCRIPT_DIR = path.dirname(path.abspath('./gcpdiag/gcpdiag')) sys.path.append(path.dirname(SCRIPT_DIR)) # pylint: disable=wrong-import-position from gcpdiag.product_list import get_product_list from gcpdiag.rule_classes import get_rule_classes # pylint: enable=wrong-import-position # Initialize rule numbers dictionary # {"product": {"year": {"severity": "rule_number"}}} rule_numbers: Dict[str, Dict[int, Dict[str, str]]] = {} # Scan lint directory for products for product_dir in scandir('./gcpdiag/lint/'): if product_dir.is_dir() and not product_dir.name.startswith('__'): rule_numbers[product_dir.name] = {} # Iterate over each product for product, rule in rule_numbers.items(): product_path = f'./gcpdiag/lint/{product}' # {"year": {"severity": {"001", "002", "..."}}} years: Dict[int, Dict[str, Set[int]]] = {} # Scan files within each product directory for file in scandir(product_path): if file.is_file(): # Sample filenames: # - warn_2022_003_firewall_rules_permission.py # - bp_2021_001_cloudops_enabled.py m = match(r'([a-z]{2,4})_(\d{4})_(\d{3})_([^.]+)\.(py)', file.name) if m: severity = m.group(1).upper() year = int(m.group(2)) rule_number = int(m.group(3)) # Organize rules by year and severity years.setdefault(year, {}).setdefault(severity, set()).add(rule_number) # Update rule numbers dictionary for year, severities in years.items(): for severity, rules in severities.items(): next_rule_number = f'{max(rules) + 1:03d}' rule.setdefault(year, {})[severity] = next_rule_number # Use cookiecutter with the generated rule numbers cookiecutter('./cookiecutter-gcpdiag-rule', extra_context={ '__products': get_product_list(), '__rule_classes': get_rule_classes(), '__rule_numbers': rule_numbers, 'severity': list(get_rule_classes().keys()), 'product': list(get_product_list().keys()) }) ================================================ FILE: cookiecutter-gcpdiag-rule/hooks/post_gen_project.py ================================================ # Copyright 2021 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. """ Places generated lint rule files under their target directories This cookiecutter hook moves the generated files to thir respective directories and removes a temporary directory. """ import os import pathlib import shutil source_dir = '.' target_dir = '..' content = os.walk(source_dir) for root, dirs, files in content: if files: # move pre-populated files to their target directories for file in files: pathlib.Path(os.path.dirname(os.path.join(target_dir, root, file))).mkdir(parents=True, exist_ok=True) os.rename(os.path.join(root, file), os.path.join(target_dir, root, file)) # delete the temporary cookiecutter directory shutil.rmtree(os.path.join(target_dir, '{{ cookiecutter.__name }}')) ================================================ FILE: cookiecutter-gcpdiag-rule/{{cookiecutter.__name}}/gcpdiag/lint/{{cookiecutter.product}}/{{cookiecutter.severity.lower()}}_{{cookiecutter.year}}_{{cookiecutter.number}}_{{cookiecutter.__name}}.py ================================================ # Copyright {{cookiecutter.year}} 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. """{{cookiecutter.title}} {{cookiecutter.description}} """ from gcpdiag import lint, models def prepare_rule(context: models.Context): # TODO: DELETE/REPLACE this comment and the function's body # # The prepare_rule() function is an OPTIONAL one and is executed before # prefetch_rule() and run_rule(). It is called serially for each lint rule # and supposed to be quick to execute # # Currently the only use-case is for defining/preparing logs queries # # Example: # # # logs_by_project is to be defined on the global scope and will be used # # in run_rule() later # logs_by_project = {} # ... # # Prepares a log query (the actual query execution happens later) # logs_by_project[context.project_id] = logs.query( # project_id=context.project_id, # resource_type='k8s_cluster', # log_name='log_id("events")', # filter_str=f'jsonPayload.message:"{MATCH_STR_1}"' # ) pass def prefetch_rule(context: models.Context): # TODO: DELETE/REPLACE this comment and the function's body # # The prefetch_rule() function is an OPTIONAL one and is executed after # prefetch_rule() and BEFORE run_rule(). It is called in parallel # with prefetch_rule() functions defined by other lint rules. # # It's a good place to fetch/prepare/filter/pre-process data that is going # to be used in run_rule(), e.g., to fetch metrics from Cloud Monitoring or # some auxiliary data from a relevant GCP API. # # Example: # # # _query_results_per_project_id is to be defined on the global scope and # # will be used in run_rule() later # _query_results_per_project_id = {} # ... # # Fetches data from Cloud Monitoring # # (the actual query execution happens right here) # _query_results_per_project_id[context.project_id] = monitoring.query( # context.project_id, f""" # fetch gce_instance # | metric 'compute.googleapis.com/guest/disk/bytes_used' # | filter metric.device_name == 'sda1' # | {within_str} # | next_older 5m # | filter_ratio_by [resource.instance_id], metric.state == 'free' # | every 5m # """) pass def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # TODO: DELETE/REPLACE this comment and the function's body # # The run_rule() function is a MANDATORY one. The rule's logic is to be # implemented here. All reporting has to be implemented within run_rule() # # Note: In most cases, there is no need to check if a particular API is # enabled or not, as all error handling happens inside the "queries" # library and an empty object will be returned if some API is disabled. pass ================================================ FILE: cookiecutter-gcpdiag-rule/{{cookiecutter.__name}}/website/content/en/rules/{{cookiecutter.product}}/{{cookiecutter.severity}}/{{cookiecutter.year}}_{{cookiecutter.number}}.md ================================================ --- title: "{{cookiecutter.product}}/{{cookiecutter.severity}}/{{cookiecutter.year}}_{{cookiecutter.number}}" linkTitle: "{{cookiecutter.severity}}/{{cookiecutter.year}}_{{cookiecutter.number}}" weight: 1 type: docs description: > {{cookiecutter.title}} --- **Product**: {{ cookiecutter.__products[cookiecutter.product] | default("") }}\ **Rule class**: {{ cookiecutter.__rule_classes[cookiecutter.severity] | default("") }} ### Description {{cookiecutter.description}} Add a more detailed description here. Preferably, refer to an existing public page that provides detailed information and briefly explain the issue here. Remember, gcpdiag findings **must** be actionable. If there's no way to remediate/fix the issue, the linter rule shouldn't be created in the first place. Use [`Code Blocks`](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks) MD formatting for logging/monitoring queries and `gcloud` commands. For logging queries, be as specific as possible and follow the [Logging Query best practices](https://cloud.google.com/logging/docs/view/logging-query-language#finding-quickly). Sample logging query: ``` resource.type="k8s_cluster" severity="WARNING" jsonPayload.message:"Please enable the gateway API for your cluster using gcloud" ``` Sample gcloud command: ``` gcloud compute disks list --filter="-users:*" ``` You can use tables if needed. Sample table: | \# | DeamonSet name | GKE Feature | | --- | -------------- | ----------------- | | 1 | kube-proxy | non-DPv2 clusters | | 2 | fluentbit-gke | GKE Logging | ### Remediation Explain how to remediate the issue. Make sure the steps are clear and very specific. Prefer `gcloud` commands over a set of steps for the Cloud Console (Web UI). The user should be able to mitigate the issue independently by following the steps provided here. Preferably, refer to existing public web pages with troubleshooting steps instead of copying that information here. **Sample troubleshooting public page:** https://cloud.google.com/kubernetes-engine/docs/troubleshooting#CrashLoopBackOff ### Further information - [Link title 1](https://cloud.google.com/link-1) - [Link title 2](https://cloud.google.com/link-2) ================================================ FILE: docker/gcpdiag/Dockerfile ================================================ # Copyright 2024 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. # Python 3.12 FROM ubuntu:24.04@sha256:a08e551cb33850e4740772b38217fc1796a66da2506d312abe51acda354ff061 # Update apt-get and install required packages. RUN apt-get update && apt-get install --no-install-recommends -y \ python3 \ python3-pip \ pipenv \ curl \ publicsuffix \ gnupg2 # Add an entrypoint to create a user in /etc/passwd and /etc/group. COPY entrypoint.sh /usr/bin/entrypoint.sh RUN chmod 755 /usr/bin/entrypoint.sh; \ chmod 666 /etc/passwd /etc/group ENTRYPOINT ["/usr/bin/entrypoint.sh"] # Install gcpdiag + dependencies. COPY dist /opt/gcpdiag RUN cd /opt/gcpdiag && env PIPENV_VENV_IN_PROJECT=1 pipenv install --ignore-pipfile # Grant write permission to write kubeconfig file in the directory. RUN chmod a+w /opt/gcpdiag # Install Google Cloud CLI and google-cloud-sdk-gke-gcloud-auth-plugin. RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg RUN export CLOUD_SDK_VERSION="494.0.0" && \ curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \ tar xf google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \ rm google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \ ln -s /google-cloud-sdk/bin/gcloud /usr/bin/gcloud && \ gcloud config set component_manager/disable_update_check true && \ gcloud components remove bq gsutil && \ rm -rf \ /google-cloud-sdk/platform/bundledpythonunix \ /google-cloud-sdk/.install/.backup \ /google-cloud-sdk/data/cli/*.json \ /google-cloud-sdk/lib/googlecloudsdk/third_party/apis/*.json \ /google-cloud-sdk/lib/third_party/botocore/data \ /google-cloud-sdk/lib/googlecloudsdk/generated_clients/apis/compute \ /google-cloud-sdk/lib/googlecloudsdk/generated_clients/apis/aiplatform RUN apt-get update && apt-get install -y google-cloud-sdk-gke-gcloud-auth-plugin # Install kubectl RUN curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x ./kubectl && mv ./kubectl /usr/local/bin # Install kubectl check-gke-ingress RUN ln -s /opt/gcpdiag/kubectl-check_gke_ingress /usr/local/bin/kubectl-check_gke_ingress ================================================ FILE: docker/gcpdiag/Makefile ================================================ BIN_DIR=../../bin VERSION=$(shell sed -n 's/^current_version\s*=\s*//p' <../../.bumpversion.cfg) ifneq (,$(findstring test,$(VERSION))) REPO_NAME=staging else REPO_NAME=release endif IMAGE=us-docker.pkg.dev/gcpdiag-dist/$(REPO_NAME)/gcpdiag RELEASE_BUCKET_NAME=gcpdiag-dist SHELL=/bin/bash OBJECT_NAME_RELEASE_VERSION=release-version WRAPPER_VERSION=0.11 VERSION_FILE_URL=https://storage.googleapis.com/$(RELEASE_BUCKET_NAME)/$(OBJECT_NAME_RELEASE_VERSION) build: make -C ../.. tarfile rm -rf dist mkdir dist cd dist && tar -xf ../../../dist/gcpdiag-$(VERSION).tar.gz --strip 1 cd dist && gcloud storage cp gs://check-gke-ingress-push/kubectl-check_gke_ingress ./ && chmod +x kubectl-check_gke_ingress chmod -R a+rX dist docker build --pull -t $(IMAGE):$(VERSION) . rm -rf dist push: docker push $(IMAGE):$(VERSION) # We mark in Cloud Storage what version clients should use by default. This is # much faster than running 'docker pull' every time (and also avoids the bad # practice of using generic docker image tags like 'default') update-default: echo -e "DOCKER_IMAGE=$(IMAGE)\nDOCKER_IMAGE_VERSION=$(VERSION)\nWRAPPER_VERSION=$(WRAPPER_VERSION)" | gcloud storage cp --content-type="text/plain" --cache-control="max-age=300" - "gs://$(RELEASE_BUCKET_NAME)/$(OBJECT_NAME_RELEASE_VERSION)" ================================================ FILE: docker/gcpdiag/entrypoint.sh ================================================ #!/bin/bash # Copyright 2021 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. # If the container is running as non-root (as it should), make sure that we have # an entry for this UID and GID in passwd and group. if [[ $UID -ne 0 ]]; then GID=$(id -g) USER=${USER:-local} GROUP=${GROUP:-local} echo "${USER}:x:${UID}:${GID}::${HOME}:/bin/bash" >>/etc/passwd echo "${GROUP}:x:${GID}:" >>/etc/group fi # activate the venv for gcpdiag . /opt/gcpdiag/.venv/bin/activate export PYTHONPATH=/opt/gcpdiag exec "$@" ================================================ FILE: docker/hugo/Dockerfile ================================================ # Use the official extended Hugo image. The versioned tag provides the extended build. FROM ghcr.io/gohugoio/hugo:v0.148.2@sha256:a3181fa2e96bd11f69f55a23c19f1898a5e337f56e2a85ed4ff10cd57d1a8afb # Switch to the root user to install global npm packages. USER root # Install postcss-cli and autoprefixer globally, pinned to specific versions. # These are required by the docsy theme for processing CSS. RUN npm install -g postcss-cli@11.0.1 autoprefixer@10.4.21 # Set the NODE_PATH environment variable so that Hugo's PostCSS processor # can find the globally installed modules. ENV NODE_PATH=/usr/local/lib/node_modules # Switch back to the default, non-privileged hugo user. USER hugo # Set the working directory to /src, where the website source will be mounted. WORKDIR /src ================================================ FILE: docker/hugo/Makefile ================================================ VERSION=0.3 IMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-hugo build: docker build --pull --no-cache -t $(IMAGE):$(VERSION) . push: docker push $(IMAGE):$(VERSION) ================================================ FILE: docker/hugo/README.md ================================================ This image is used to build the gcpdiag.dev website on gcpdiag.dev and includes Hugo + the Docsy template. ================================================ FILE: docker/pipenv-python-3.12/Dockerfile ================================================ # Copyright 2024 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. # Python 3.12 FROM ubuntu:24.04@sha256:353675e2a41babd526e2b837d7ec780c2a05bca0164f7ea5dbbd433d21d166fc # Update apt-get and install required packages. # binutils is for pyinstaller RUN apt-get update && apt-get install --no-install-recommends -y \ python3 \ python3-pip \ python3-dev \ pipenv \ curl \ gnupg2 \ binutils \ make \ git \ bash \ unzip \ publicsuffix \ build-essential \ # dependency for pydot graphviz \ # dependency for markdownlint ruby # terraform RUN curl https://releases.hashicorp.com/terraform/1.9.6/terraform_1.9.6_linux_386.zip -O \ && unzip -o *.zip -d /usr/bin/ terraform \ && chmod +x /usr/bin/terraform \ && rm *.zip # gcloud CLI https://cloud.google.com/sdk/docs/install#installation_instructions # We need the gcloud CLI to use this image as devcontainer, see: ../../.devcontainer/README.md RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && apt-get update -y && apt-get install google-cloud-cli -y # Add an entrypoint to create a user in /etc/passwd and /etc/group. COPY entrypoint.sh /usr/bin/entrypoint.sh RUN chmod 755 /usr/bin/entrypoint.sh; \ chmod 666 /etc/passwd /etc/group ENTRYPOINT ["/usr/bin/entrypoint.sh"] ================================================ FILE: docker/pipenv-python-3.12/Makefile ================================================ VERSION=0.87 IMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-3.12 build: docker build --pull --no-cache -t $(IMAGE):$(VERSION) . push: docker push $(IMAGE):$(VERSION) ================================================ FILE: docker/pipenv-python-3.12/entrypoint.sh ================================================ #!/bin/bash # Copyright 2021 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. # If the container is running as non-root (as it should), make sure that we have # an entry for this UID and GID in passwd and group. if [[ $UID -ne 0 ]]; then GID=$(id -g) USER=${USER:-local} GROUP=${GROUP:-local} echo "${USER}:x:${UID}:${GID}::${HOME}:/bin/bash" >>/etc/passwd echo "${GROUP}:x:${GID}:" >>/etc/group fi exec "$@" ================================================ FILE: docker/pipenv-python-3.7/Dockerfile ================================================ # Copyright 2021 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 python:3.7-slim@sha256:b53f496ca43e5af6994f8e316cf03af31050bf7944e0e4a308ad86c001cf028b # Copy the pinned requirements file from the root directory COPY requirements.txt /tmp/requirements.txt # Install from the file, ensuring all hashes match RUN pip install --require-hashes -r /tmp/requirements.txt # Debian packages. # binutils is for pyinstaller RUN apt-get update && \ apt-get -y install \ bash \ curl \ git \ gnupg \ binutils \ make # terraform RUN curl https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_linux_amd64.zip | \ gunzip - >/usr/bin/terraform && \ chmod +x /usr/bin/terraform # Note: we install Cloud SDK in the python-3.9 image because we # use that image also for interactive development, but we don't need that # for the python-3.7 image (and adding Cloud SDK considerably increases the # image size). # Add an entrypoint to create a user in /etc/passwd and /etc/group. COPY entrypoint.sh /usr/bin/entrypoint.sh RUN chmod 755 /usr/bin/entrypoint.sh; \ chmod 666 /etc/passwd /etc/group ENTRYPOINT ["/usr/bin/entrypoint.sh"] ================================================ FILE: docker/pipenv-python-3.7/Makefile ================================================ VERSION=0.8 IMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-3.7 build: docker build --pull --no-cache -t $(IMAGE):$(VERSION) . push: docker push $(IMAGE):$(VERSION) ================================================ FILE: docker/pipenv-python-3.7/entrypoint.sh ================================================ #!/bin/bash # Copyright 2021 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. # If the container is running as non-root (as it should), make sure that we have # an entry for this UID and GID in passwd and group. if [[ $UID -ne 0 ]]; then GID=$(id -g) USER=${USER:-local} GROUP=${GROUP:-local} echo "${USER}:x:${UID}:${GID}::${HOME}:/bin/bash" >>/etc/passwd echo "${GROUP}:x:${GID}:" >>/etc/group fi exec "$@" ================================================ FILE: docker/pipenv-python-3.9/Dockerfile ================================================ # Copyright 2021 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 python:3.9-slim@sha256:914169c7c8398b1b90c0b0ff921c8027445e39d7c25dc440337e56ce0f2566e6 # Copy the pinned requirements file from the root directory COPY requirements.txt /tmp/requirements.txt # Install from the file, ensuring all hashes match RUN pip install --require-hashes -r /tmp/requirements.txt # Debian packages. # binutils is for pyinstaller RUN apt-get update && \ apt-get -y install \ bash \ curl \ git \ gnupg \ binutils \ make # terraform RUN curl https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_linux_amd64.zip | \ gunzip - >/usr/bin/terraform && \ chmod +x /usr/bin/terraform # gcloud CLI https://cloud.google.com/sdk/docs/install#installation_instructions # We need the gcloud CLI to use this image as devcontainer, see: ../../.devcontainer/README.md RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && apt-get update -y && apt-get install google-cloud-cli -y # Add an entrypoint to create a user in /etc/passwd and /etc/group. COPY entrypoint.sh /usr/bin/entrypoint.sh RUN chmod 755 /usr/bin/entrypoint.sh; \ chmod 666 /etc/passwd /etc/group ENTRYPOINT ["/usr/bin/entrypoint.sh"] ================================================ FILE: docker/pipenv-python-3.9/Makefile ================================================ VERSION=0.8 IMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-3.9 build: docker build --pull --no-cache -t $(IMAGE):$(VERSION) . push: docker push $(IMAGE):$(VERSION) ================================================ FILE: docker/pipenv-python-3.9/entrypoint.sh ================================================ #!/bin/bash # Copyright 2021 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. # If the container is running as non-root (as it should), make sure that we have # an entry for this UID and GID in passwd and group. if [[ $UID -ne 0 ]]; then GID=$(id -g) USER=${USER:-local} GROUP=${GROUP:-local} echo "${USER}:x:${UID}:${GID}::${HOME}:/bin/bash" >>/etc/passwd echo "${GROUP}:x:${GID}:" >>/etc/group fi exec "$@" ================================================ FILE: gcpdiag/__init__.py ================================================ ================================================ FILE: gcpdiag/async_queries/__init__.py ================================================ ================================================ FILE: gcpdiag/async_queries/api/__init__.py ================================================ ================================================ FILE: gcpdiag/async_queries/api/api.py ================================================ """ Make REST API requests """ from typing import Any, Dict, Iterable, Optional, Protocol import aiohttp from gcpdiag.queries import apis_utils class Creds(Protocol): def update_headers(self, headers: Dict[str, str]) -> None: pass class Sleeper(Protocol): async def sleep(self, seconds: float) -> None: pass class RetryStrategy(Protocol): def get_sleep_intervals(self) -> Iterable[float]: pass class API: """ Class abstracting aspects of REST API requests """ def __init__(self, creds: Creds, retry_strategy: RetryStrategy, sleeper: Sleeper) -> None: self._creds = creds self._retry_strategy = retry_strategy self._sleeper = sleeper async def call(self, method: str, url: str, json: Optional[Any] = None) -> Any: for timeout in self._retry_strategy.get_sleep_intervals(): async with aiohttp.request(method, url, headers=self._get_headers(), json=json) as resp: if resp.status == 200: return await resp.json() if not apis_utils.should_retry(resp.status): raise RuntimeError( f'http status {resp.status} calling {method} {url}') await self._sleeper.sleep(timeout) raise RuntimeError('failed to get an API response') def _get_headers(self) -> Dict[str, str]: headers: Dict[str, str] = {} self._creds.update_headers(headers) return headers ================================================ FILE: gcpdiag/async_queries/api/api_slowtest.py ================================================ """ Tests for API python -m unittest gcpdiag.async_queries.api_test """ import asyncio import os import unittest from typing import Dict, List from gcpdiag.async_queries.api import (api, constant_time_retry_strategy, test_webserver) class FakeCreds: _token: str def __init__(self, token: str) -> None: self._token = token def update_headers(self, headers: Dict[str, str]) -> None: headers['test_auth'] = f'test_auth {self._token}' class FakeSleeper: slept: List[float] def __init__(self) -> None: self.slept = [] async def sleep(self, seconds: float) -> None: await asyncio.sleep(0) self.slept.append(seconds) class TestAPI(unittest.IsolatedAsyncioTestCase): """ Tests for async API """ async def asyncSetUp(self) -> None: self._token = 'fake token' self._port = int(os.environ['GCPDIAG_TEST_ASYNC_API_PORT']) self._server = test_webserver.WebServer(port=self._port, expected_auth_token=self._token) self._sleeper = FakeSleeper() self._api = api.API(creds=FakeCreds(self._token), sleeper=self._sleeper, retry_strategy=constant_time_retry_strategy. ConstantTimeoutRetryStrategy(timeout=42, retries=3)) await self._server.start() async def asyncTearDown(self) -> None: await self._server.stop() async def test_get_response(self) -> None: self._server.responses = [test_webserver.Success({'hello': 'world'})] result = await self._api.call(method='GET', url=f'http://localhost:{self._port}/test') self.assertEqual(result, {'hello': 'world'}) async def test_enough_retries(self) -> None: self._server.responses = [ test_webserver.Failure(), test_webserver.Failure(), test_webserver.Success({'hello': 'world'}) ] result = await self._api.call(method='GET', url=f'http://localhost:{self._port}/test') self.assertEqual(result, {'hello': 'world'}) self.assertListEqual(self._sleeper.slept, [42, 42]) async def test_not_enough_retries(self) -> None: self._server.responses = [ test_webserver.Failure(), test_webserver.Failure(), test_webserver.Failure(), test_webserver.Success({'hello': 'world'}) ] with self.assertRaises(RuntimeError): await self._api.call(method='GET', url=f'http://localhost:{self._port}/test') self.assertListEqual(self._sleeper.slept, [42, 42, 42]) async def test_http_429_retried(self) -> None: self._server.responses = [ test_webserver.Failure(429), test_webserver.Failure(429), test_webserver.Success({'hello': 'world'}) ] result = await self._api.call(method='GET', url=f'http://localhost:{self._port}/test') self.assertEqual(result, {'hello': 'world'}) self.assertListEqual(self._sleeper.slept, [42, 42]) async def test_other_4xx_http_not_retried(self) -> None: self._server.responses = [ test_webserver.Failure(408), test_webserver.Failure(408), test_webserver.Success({'hello': 'world'}) ] with self.assertRaises(RuntimeError): await self._api.call(method='GET', url=f'http://localhost:{self._port}/test') self.assertListEqual(self._sleeper.slept, []) ================================================ FILE: gcpdiag/async_queries/api/constant_time_retry_strategy.py ================================================ """ Retry strategy: n retries with fixed timeout between them """ from typing import Iterator class ConstantTimeoutRetryStrategy: """ Retry strategy: n retries with fixed timeout between them """ _retries: int _timeout: int def __init__(self, retries: int, timeout: int) -> None: self._retries = retries self._timeout = timeout def get_sleep_intervals(self) -> Iterator[float]: for _ in range(self._retries): yield self._timeout ================================================ FILE: gcpdiag/async_queries/api/default_random.py ================================================ """ Generate random numbers between 0 and 1 """ import random class Random: """ Generate random numbers between 0 and 1 """ def generate(self) -> float: return random.random() ================================================ FILE: gcpdiag/async_queries/api/exponential_random_retry_strategy.py ================================================ """ Retry strategy: n retries with exponential timeout plus some random deviations """ from typing import Iterator, Protocol from gcpdiag.queries import apis_utils class Random(Protocol): def generate(self) -> float: pass class ExponentialRandomTimeoutRetryStrategy: """ Retry strategy: n retries with exponential timeout plus some random deviations """ _retries: int _random_pct: float _multiplier: float _random: Random def __init__(self, retries: int, random_pct: float, multiplier: float, random: Random) -> None: self._retries = retries self._random_pct = random_pct self._multiplier = multiplier self._random = random def get_sleep_intervals(self) -> Iterator[float]: for i in range(self._retries): yield apis_utils.get_nth_exponential_random_retry( n=i, random_pct=self._random_pct, multiplier=self._multiplier, random_fn=self._random.generate) ================================================ FILE: gcpdiag/async_queries/api/exponential_random_retry_strategy_test.py ================================================ """ Tests for ExponentialRandomTimeoutRetryStrategy """ from typing import List import pytest from gcpdiag.async_queries.api import exponential_random_retry_strategy class FakeRandom: """ Test double for random numbers generator """ _numbers: List[float] def __init__(self, numbers: List[float]) -> None: self._numbers = numbers def generate(self) -> float: return self._numbers.pop(0) def test_retries() -> None: strategy = exponential_random_retry_strategy.ExponentialRandomTimeoutRetryStrategy( retries=5, random_pct=0.2, multiplier=1.4, random=FakeRandom([0.1, 0.2, 0.3, 0.4, 0.5])) # floats should be compared with some allowed error assert list(strategy.get_sleep_intervals()) == pytest.approx( [0.98, 1.344, 1.842, 2.524, 3.457], 0.001) ================================================ FILE: gcpdiag/async_queries/api/gcpdiag_creds.py ================================================ """ Adapter between gcpdiag.async_queries.api.Creds protocol and gcpdiag.queries.apis.get_credentials """ from typing import Any, Dict import google.auth.transport.requests # type: ignore from gcpdiag.queries import apis def refresh_google_auth_creds(creds: Any) -> None: request = google.auth.transport.requests.Request() creds.refresh(request) class GcpdiagCreds: """ Adapter between gcpdiag.async_queries.api.Creds protocol and gcpdiag.queries.apis.get_credentials """ def update_headers(self, headers: Dict[str, str]) -> None: creds = apis.get_credentials() if not creds.token: refresh_google_auth_creds(creds) headers['Authorization'] = f'Bearer {creds.token}' ================================================ FILE: gcpdiag/async_queries/api/get_api.py ================================================ """ Helper method to initialize API object """ from gcpdiag import config from gcpdiag.async_queries.api import (api, default_random, exponential_random_retry_strategy, gcpdiag_creds, sleeper) def pick_creds_implementation() -> api.Creds: try: # This is for Google-internal use only and allows us to modify the request # to make it work also internally. The import will fail for the public # version of gcpdiag. # pylint: disable=import-outside-toplevel from gcpdiag_google_internal import async_api_creds_internal return async_api_creds_internal.GcpdiagInternalCreds() except ImportError: return gcpdiag_creds.GcpdiagCreds() def get_api() -> api.API: return api.API(creds=pick_creds_implementation(), retry_strategy=exponential_random_retry_strategy. ExponentialRandomTimeoutRetryStrategy( retries=config.API_RETRIES, random_pct=config.API_RETRY_SLEEP_RANDOMNESS_PCT, multiplier=config.API_RETRY_SLEEP_MULTIPLIER, random=default_random.Random()), sleeper=sleeper.Sleeper()) ================================================ FILE: gcpdiag/async_queries/api/sleeper.py ================================================ """ Simple wrapper for asyncio.sleep (mostly needed to replace it with testing double during unit testing) """ import asyncio class Sleeper: async def sleep(self, seconds: float) -> None: await asyncio.sleep(seconds) ================================================ FILE: gcpdiag/async_queries/api/test_webserver.py ================================================ """ Simple web server used for testing """ from typing import Any, List, Protocol from aiohttp import web class Response(Protocol): def get_response(self) -> Any: pass class Success: """ Canned successful response """ def __init__(self, data: Any) -> None: self.data = data def get_response(self) -> Any: return web.json_response(self.data) AIOHTTP_EXCEPTIONS_BY_CODE = { 408: web.HTTPRequestTimeout, 429: web.HTTPTooManyRequests, 500: web.HTTPInternalServerError } class Failure: """ Canned failed response """ _status: int def __init__(self, status: int = 500) -> None: self._status = status def get_response(self) -> Any: assert self._status in AIOHTTP_EXCEPTIONS_BY_CODE # aiohttp uses a separate exception for every HTTP status code # https://docs.aiohttp.org/en/latest/web_exceptions.html # you might need to add another exception if you want to use a # new status code raise AIOHTTP_EXCEPTIONS_BY_CODE[self._status]() class WebServer: """ Simple web server used for testing """ responses: List[Response] def __init__(self, port: int, expected_auth_token: str) -> None: self.port = port self.responses = [] self.expected_auth_token = expected_auth_token async def start(self) -> None: routes = web.RouteTableDef() @routes.get('/test') # pylint: disable=unused-argument async def hello(request: Any) -> Any: assert len(self.responses) > 0 assert request.headers[ 'test_auth'] == f'test_auth {self.expected_auth_token}' return self.responses.pop(0).get_response() app = web.Application() app.add_routes(routes) self.runner = web.AppRunner(app) await self.runner.setup() site = web.TCPSite(self.runner, 'localhost', self.port) await site.start() async def stop(self) -> None: await self.runner.cleanup() ================================================ FILE: gcpdiag/async_queries/dataproc/__init__.py ================================================ ================================================ FILE: gcpdiag/async_queries/dataproc/dataproc.py ================================================ """ Gateway for Dataproc service """ import asyncio import functools from typing import Any, Dict, Iterable, List, Mapping, Optional, Protocol from gcpdiag.async_queries.utils import loader, protocols from gcpdiag.queries import dataproc class Region: """ Helper class encapsulating Dataproc operations within a region """ _api: protocols.API _project_id: str _region: str _data: Optional[Any] def __init__(self, api: protocols.API, project_id: str, region: str): self._api = api self._project_id = project_id self._region = region self._data = None async def load(self) -> None: assert self._data is None self._data = await self._api.call( method='GET', url= 'https://dataproc.googleapis.com/v1/projects/{project_id}/regions/{region}/clusters' .format(project_id=self._project_id, region=self._region)) @functools.cached_property def clusters(self) -> List[dataproc.Cluster]: return [self._mk_cluster(d) for d in self._clusters_descriptions] @property def _clusters_descriptions(self) -> List[Any]: assert isinstance(self._data, Mapping) descs = self._data.get('clusters', []) assert isinstance(descs, List) return descs def _mk_cluster(self, desc: Any) -> dataproc.Cluster: assert isinstance(desc, Mapping) assert 'clusterName' in desc assert isinstance(desc['clusterName'], str) return dataproc.Cluster(name=desc['clusterName'], project_id=self._project_id, resource_data=desc) class ProjectRegions(Protocol): async def get_all(self) -> Iterable[str]: pass class Dataproc: """ Gateway for Dataproc service """ _api: protocols.API _project_id: str _project_regions: ProjectRegions _clusters_by_name: Dict[str, dataproc.Cluster] _loader: loader.Loader def __init__(self, api: protocols.API, project_id: str, project_regions: ProjectRegions) -> None: self._api = api self._project_id = project_id self._project_regions = project_regions self._clusters_by_name = {} self._loader = loader.Loader(self._load) async def list_clusters(self) -> List[str]: await self._loader.ensure_loaded() return list(self._clusters_by_name.keys()) async def get_cluster_by_name(self, cluster_name: str) -> dataproc.Cluster: await self._loader.ensure_loaded() return self._clusters_by_name[cluster_name] async def _load(self) -> None: regions_names = await self._project_regions.get_all() regions = [self._mk_region(r) for r in regions_names] await asyncio.gather(*[r.load() for r in regions]) for r in regions: for cluster in r.clusters: self._clusters_by_name[cluster.name] = cluster def _mk_region(self, region: str) -> Region: return Region(api=self._api, project_id=self._project_id, region=region) ================================================ FILE: gcpdiag/async_queries/dataproc/dataproc_test.py ================================================ 'Tests for gcpdiag.async_queries.dataproc.Dataproc' import asyncio import unittest from typing import List import yaml # type: ignore from gcpdiag.async_queries.dataproc import dataproc from gcpdiag.async_queries.utils import fake_api class FakeProjectRegions: def __init__(self, regions: List[str]) -> None: self.regions = regions async def get_all(self) -> List[str]: return self.regions class TestProjectRegions(unittest.IsolatedAsyncioTestCase): 'Tests for gcpdiag.async_queries.dataproc.Dataproc' def setUp(self) -> None: self.project_regions = FakeProjectRegions( regions=['westeros-central1', 'essos-east2']) self.westeros_list_call = fake_api.APICall( method='GET', url=('https://dataproc.googleapis.com/v1/projects/test-project/regions/' 'westeros-central1/clusters')) self.essos_list_call = fake_api.APICall( 'GET', 'https://dataproc.googleapis.com/v1/projects/test-project/regions/essos-east2/clusters' ) self.api = fake_api.FakeAPI(responses=[(self.westeros_list_call, yaml.safe_load(""" clusters: - clusterName: westeros1 status: state: RUNNING - clusterName: westeros2 status: state: UNKNOWN """)), (self.essos_list_call, yaml.safe_load(""" clusters: - clusterName: essos1 status: state: RUNNING """))]) self.dataproc = dataproc.Dataproc(api=self.api, project_id='test-project', project_regions=self.project_regions) async def test_list_clusters(self) -> None: clusters = await self.dataproc.list_clusters() self.assertListEqual(['westeros1', 'westeros2', 'essos1'], clusters) async def test_cluster_status(self) -> None: westeros1, westeros2, essos1 = await asyncio.gather(*[ self.dataproc.get_cluster_by_name(n) for n in ['westeros1', 'westeros2', 'essos1'] ]) self.assertEqual('RUNNING', westeros1.status) self.assertEqual('UNKNOWN', westeros2.status) self.assertEqual('RUNNING', essos1.status) async def test_deduplication(self) -> None: await asyncio.gather(self.dataproc.get_cluster_by_name('westeros1'), self.dataproc.get_cluster_by_name('westeros1')) self.assertEqual(1, self.api.count_calls(self.westeros_list_call)) ================================================ FILE: gcpdiag/async_queries/project/__init__.py ================================================ ================================================ FILE: gcpdiag/async_queries/project/get_project.py ================================================ """ Helper method to initialize Project object """ from gcpdiag.async_queries.api import get_api from gcpdiag.async_queries.project import project _api = get_api.get_api() def get_project(project_id: str) -> project.Project: return project.Project(project_id=project_id, api=_api) ================================================ FILE: gcpdiag/async_queries/project/project.py ================================================ """ Class representing different services available within a GCP project """ import functools from gcpdiag.async_queries import project_regions from gcpdiag.async_queries.dataproc import dataproc from gcpdiag.async_queries.utils import protocols class Project: """ Class representing different services available within a GCP project """ _project_id: str _api: protocols.API def __init__(self, api: protocols.API, project_id: str) -> None: self._project_id = project_id self._api = api @functools.cached_property def dataproc(self) -> dataproc.Dataproc: return dataproc.Dataproc(api=self._api, project_id=self._project_id, project_regions=self._project_regions) @functools.cached_property def _project_regions(self) -> project_regions.ProjectRegions: return project_regions.ProjectRegions(project_id=self._project_id, api=self._api) ================================================ FILE: gcpdiag/async_queries/project_regions.py ================================================ """ Gateway for extracting available GCP regions """ from typing import Any, Iterable, List, Mapping, Optional from gcpdiag.async_queries.utils import loader, protocols class ProjectRegions: """ Gateway for extracting available GCP regions """ api: protocols.API project_id: str loader: loader.Loader regions: Optional[List[str]] def __init__(self, api: protocols.API, project_id: str) -> None: self.api = api self.project_id = project_id self.loader = loader.Loader(self.load) self.regions = None async def get_all(self) -> List[str]: await self.loader.ensure_loaded() assert self.regions is not None return self.regions async def load(self) -> None: resp = await self.call_api() self.regions = self.parse_resp(resp) async def call_api(self) -> Any: return await self.api.call( method='GET', url= 'https://compute.googleapis.com/compute/v1/projects/{project_id}/regions' .format(project_id=self.project_id)) def parse_resp(self, resp: Any) -> List[str]: assert isinstance(resp, Mapping) assert 'items' in resp assert isinstance(resp['items'], Iterable) return [r['name'] for r in resp.get('items', [])] ================================================ FILE: gcpdiag/async_queries/project_regions_test.py ================================================ 'Tests for gcpdiag.async_queries.ProjectRegions' from asyncio import gather from unittest import IsolatedAsyncioTestCase from gcpdiag.async_queries.utils import fake_api from .project_regions import ProjectRegions class TestProjectRegions(IsolatedAsyncioTestCase): 'Tests for gcpdiag.async_queries.ProjectRegions' def setUp(self) -> None: self.call = fake_api.APICall( 'GET', 'https://compute.googleapis.com/compute/v1/projects/test-project/regions', None) self.api = fake_api.FakeAPI(responses=[(self.call, { 'items': [{ 'name': 'westeros-central1' }, { 'name': 'essos-east2' }] })]) self.project_regions = ProjectRegions(api=self.api, project_id='test-project') async def test_happy_path(self) -> None: result = await self.project_regions.get_all() self.assertListEqual(['westeros-central1', 'essos-east2'], result) async def test_deduplication(self) -> None: await gather(self.project_regions.get_all(), self.project_regions.get_all()) self.assertEqual(self.api.count_calls(self.call), 1) ================================================ FILE: gcpdiag/async_queries/py.typed ================================================ ================================================ FILE: gcpdiag/async_queries/utils/__init__.py ================================================ ================================================ FILE: gcpdiag/async_queries/utils/fake_api.py ================================================ 'Testing double for gcpdiag.async_queries.api.API' from asyncio import sleep from typing import Any, List, Optional, Tuple class APICall: 'Helper class representing an API call' method: str url: str json: Any def __init__(self, method: str, url: str, json: Any = None) -> None: self.method = method self.url = url self.json = json def __eq__(self, other: Any) -> bool: assert isinstance(other, APICall) return self.method == other.method and self.url == other.url and self.json == other.json def __repr__(self) -> str: return f'' class FakeAPI: 'Testing double for gcpdiag.async_queries.api.API' responses: List[Tuple[APICall, Any]] calls: List[APICall] def __init__(self, responses: List[Tuple[APICall, Any]]) -> None: self.responses = responses self.calls = [] async def call(self, method: str, url: str, json: Optional[Any] = None) -> Any: call = APICall(method, url, json) await sleep(0) self.calls.append(call) return self.get_response(call) def get_response(self, call: APICall) -> Any: for c, r in self.responses: if c == call: return r raise RuntimeError(f'Canned response not found for {call}') def count_calls(self, call: APICall) -> int: count = 0 for c in self.calls: if c == call: count += 1 return count ================================================ FILE: gcpdiag/async_queries/utils/loader.py ================================================ """ Helper class to optimize gateway objects loading so that data only loaded once """ import asyncio from typing import Callable, Coroutine, Optional class Loader: """ Helper class to optimize gateway objects loading so that data only loaded once Initialized with coroutine (async method) that should be run only once All clients are expected to await ensure_loaded method class MyGateway: def __init__(self): self.loader = Loader(self.load) ... async def get_response(self): await self.loader.ensure_loaded() return self.api_response async def load(self) -> None: ... self.api_response = await expensive_api_call() ... my_gateway = MyGateway() In this case, it doesn't matter how many clients call my_gateway.get_response() concurrently, expensive_api_call() only executed once (and all clients receive results of this call) """ _load_task: Optional[asyncio.Task] _load_coroutine: Optional[Callable[[], Coroutine]] def __init__(self, load_coroutine: Callable[[], Coroutine]) -> None: self._load_coroutine = load_coroutine self._load_task = None async def ensure_loaded(self) -> None: assert self._load_coroutine is not None if self._load_task is None: self._load_task = asyncio.create_task(self._load_coroutine()) await self._load_task ================================================ FILE: gcpdiag/async_queries/utils/protocols.py ================================================ """ Common protocols used by async queries """ from typing import Any, Iterable, Optional, Protocol class API(Protocol): async def call(self, method: str, url: str, json: Optional[Any] = None) -> Any: pass class ProjectRegions(Protocol): async def get_all(self) -> Iterable[str]: pass ================================================ FILE: gcpdiag/caching.py ================================================ # Copyright 2021 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. # Lint as: python3 """Persistent caching using diskcache.""" import atexit import collections import contextlib import functools import hashlib import logging import pickle import shutil import tempfile import threading from typing import List import diskcache import googleapiclient.http from gcpdiag import config _cache = None _bypass_cache = False _use_cache = True def _set_bypass_cache(value: bool): """Sets the cache bypass flag for the current thread. Only set this for code that need to re-fetch fresh data regardless or expiry and state of cached data. """ thread = threading.current_thread() setattr(thread, '_bypass_cache', value) def _get_bypass_cache(): """Gets the cache bypass flag for the current thread. By default should always use cache""" # if cache is permanently disabled always bypass cache if not _use_cache: return False return getattr(threading.current_thread(), '_bypass_cache', False) def configure_global_cache(enabled: bool): """ Used to enable or disable the use of caching in the application.""" global _use_cache _use_cache = enabled @contextlib.contextmanager def bypass_cache(): """ A thread-safe context manager to temporarily set the cache bypass to True for the current thread, ensuring it is reverted back when the context exits. """ original_value = _get_bypass_cache() _set_bypass_cache(True) try: yield finally: _set_bypass_cache(original_value) def _clean_cache(): """Remove all cached items with tag 'tmp'. We use 'tmp' to store data that should be cached only during a single execution of the script. """ if _cache: count = _cache.evict('tmp') count += _cache.expire() if count: logging.debug('removed %d items from cache', count) def _close_cache(): if _cache: _clean_cache() _cache.close() def get_disk_cache() -> diskcache.Cache: """Get a Diskcache.Cache object that can be used to cache data.""" global _cache if _use_cache and not _cache: _cache = diskcache.Cache(config.get_cache_dir(), tag_index=True) # Make sure that we remove any data that wasn't cleaned up correctly for # some reason. _clean_cache() # Cleanup the cache at program exit. atexit.register(_close_cache) return _cache deque_tmpdirs: List[str] = [] def _clean_tmp_deque(): for d in deque_tmpdirs: logging.debug('deleting dequeue tempdir: %s', d) shutil.rmtree(d, ignore_errors=True) def get_tmp_deque(prefix='tmp-deque-') -> diskcache.Deque: """Get a Diskcache.Deque object useful to temporarily store data (like logs). arguments: prefix: prefix to be added to the temporary directory (default: tmp-deque) """ tempdir = tempfile.mkdtemp(prefix=prefix, dir=config.get_cache_dir()) if not deque_tmpdirs: atexit.register(_clean_tmp_deque) deque_tmpdirs.append(tempdir) deque = diskcache.Deque(directory=tempdir) return deque # Write our own implementation instead of using private function # functtools._make_key, so that there is no breakage if that # private function changes with a newer Python version. def _make_key(func, args, kwargs): h = hashlib.sha256() func_name = bytes(func.__module__ + '.' + func.__name__ + ':', 'utf-8') h.update(pickle.dumps(args)) h.update(pickle.dumps(kwargs)) # we don't hash the function name so that it's easier to debug key = func_name + h.digest() return key @contextlib.contextmanager def _acquire_timeout(lock, timeout, name): thread = threading.current_thread() orig_thread_name = thread.name thread.name = orig_thread_name + f'(waiting:{name})' result = lock.acquire(timeout=timeout) if not result: raise RuntimeError(f"Couldn't acquire lock for {name}.") try: thread.name = orig_thread_name + f'(lock:{name})' yield finally: thread.name = orig_thread_name if result: lock.release() def cached_api_call(expire=None, in_memory=False): """Caching decorator optimized for API calls. This is very similar to functools.lru_cache, with the following differences: - uses diskcache so that the memory footprint doesn't grow uncontrollably (the API results might be big). - uses a lock so that if the function is called from two threads simultaneously, only one API call will be done and the other will wait until the result is available in the cache. Parameters: - expire: number of seconds until the key expires (default: expire when the process ends) - in_memory: if true the result will be kept in memory, similarly to lru_cache (but with the locking). """ def _cached_api_call_decorator(func): lockdict = collections.defaultdict(threading.Lock) if in_memory: lru_cached_func = functools.lru_cache()(func) @functools.wraps(func) def _cached_api_call_wrapper(*args, **kwargs): key = None if _use_cache: logging.debug('looking up cache for %s', func.__name__) key = _make_key(func, args, kwargs) lock = lockdict[key] with _acquire_timeout(lock, config.CACHE_LOCK_TIMEOUT, func.__name__): if in_memory: if _get_bypass_cache(): logging.debug('bypassing cache for %s, fetching fresh data.', func.__name__) lru_cached_func.cache_clear() return lru_cached_func(*args, **kwargs) else: api_cache = get_disk_cache() if _get_bypass_cache(): logging.debug('bypassing cache for %s, fetching fresh data.', func.__name__) else: # We use 'no data' to be able to cache calls that returned None. cached_result = api_cache.get(key, default='no data') if cached_result != 'no data': logging.debug('returning cached result for %s', func.__name__) if isinstance(cached_result, Exception): raise cached_result return cached_result else: logging.debug('caching is disabled for %s', func.__name__) # Call the function logging.debug('calling function %s (expire=%s, key=%s)', func.__name__, str(expire), str(key)) result = None try: result = func(*args, **kwargs) logging.debug('DONE calling function %s (expire=%s, key=%s)', func.__name__, str(expire), str(key)) except googleapiclient.errors.HttpError as err: # cache API errors as well result = err if _use_cache: if expire: api_cache.set(key, result, expire=expire) else: api_cache.set(key, result, tag='tmp') if isinstance(result, Exception): raise result return result return _cached_api_call_wrapper # Decorator without parens -> called with function as first parameter if callable(expire): func = expire expire = None return _cached_api_call_decorator(func) else: return _cached_api_call_decorator ================================================ FILE: gcpdiag/caching_test.py ================================================ # Copyright 2024 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. """Test code in caching.py.""" import secrets import string import threading import unittest from unittest import mock from googleapiclient import errors from gcpdiag import caching def simple_function(mixer_arg): # Generate a unique string of 10 characters return mixer_arg.join( secrets.choice(string.ascii_letters + string.digits) for _ in range(10)) # Decorated versions of the simple_function for in-memory and disk cache testing cached_in_memory = caching.cached_api_call(in_memory=True)(simple_function) cached_on_disk = caching.cached_api_call(simple_function) class CacheBypassTests(unittest.TestCase): """Testing cache bypass test""" def test_cache_bypass_in_memory(self): with caching.bypass_cache(): result_cached = cached_in_memory('same-arg') self.assertIsInstance(result_cached, str) # Another call not bypassing the cache should return originally cached result result_cached_two = cached_in_memory('same-arg') # String should be the same given bypass is not turned on self.assertEqual(result_cached, result_cached_two) # memory id should be the same self.assertEqual(id(result_cached), id(result_cached_two)) with caching.bypass_cache(): result_bypass = cached_in_memory('same-arg') self.assertNotEqual(result_cached, result_bypass) result_after_bypass = cached_in_memory('same-arg') self.assertNotEqual(result_cached, result_after_bypass) def test_cache_bypass_disk_cache(self): with caching.bypass_cache(): result_cached = cached_on_disk('same-arg') self.assertIsInstance(result_cached, str) # Another call should return originally cached result result_cached_two = cached_on_disk('same-arg') self.assertEqual(result_cached, result_cached_two) with caching.bypass_cache(): result_bypass = cached_on_disk('same-arg') self.assertNotEqual(result_cached, result_bypass) result_after_bypass = cached_on_disk('same-arg') self.assertNotEqual(result_cached, result_after_bypass) def test_thread_safe_caching(self): results = set() def worker(arg, result): with caching.bypass_cache(): result = cached_on_disk(arg) results.add(result) threads = [ threading.Thread(target=worker, args=( arg, results, )) for arg in ['a', 'a', 'b', 'c'] ] for t in threads: t.start() t.join() self.assertEqual(len(results), 4, 'All threads should get different result') class UseCacheTests(unittest.TestCase): """Testing configuring cache use""" def test_enable_use_cache(self): caching.configure_global_cache(enabled=True) result_cached = cached_in_memory('same-arg') result_cached_two = cached_in_memory('same-arg') # memory id should be the same self.assertEqual(id(result_cached), id(result_cached_two)) # Disk cache disk_result_cached = cached_on_disk('same-arg') next_disk_result_cached = cached_on_disk('same-arg') self.assertEqual(disk_result_cached, next_disk_result_cached) def test_disable_use_cache(self): caching.configure_global_cache(enabled=False) result_cached = cached_in_memory('same-arg') next_call_result = cached_in_memory('same-arg') self.assertNotEqual(id(result_cached), id(next_call_result)) disk_result = cached_on_disk('same-arg-but-different-result') next_disk_result = cached_on_disk('same-arg-but-different-result') self.assertNotEqual(disk_result, next_disk_result) def test_exception_raised_when_cache_disabled(self): caching.configure_global_cache(enabled=False) @caching.cached_api_call() def failing_function(): resp = mock.Mock() resp.status = 403 raise errors.HttpError(resp, b'Forbidden') with self.assertRaises(errors.HttpError): failing_function() ================================================ FILE: gcpdiag/config.py ================================================ # Copyright 2021 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. # Lint as: python3 """Globals that will be potentially user-configurable in future.""" import os import sys from typing import Any, Dict import appdirs import yaml # gcpdiag version (not configurable, but useful to have here) # VERSION = '0.81-test' """ Configuration properties are divided into 3 main categories: - static (class properties) which values cannot be changed or provided - options which values can be provided as command arguments - options which values can be provided as yaml configuration In addition yaml configuration can contains global configuration which will be applied to all inspected projects or we can provide strict configuration dedicated to particular project: ``` --- logging_fetch_max_time_seconds: 300 verbose: 3 within_days: 5 projects: myproject: billing_project: sample include: - '*BP*' exclude: - '*SEC*' - '*ERR*' include_extended: True ``` Yaml configuration defined per project takes precedence over global configuration. Global configuration takes precedence over configuration provided as a command arguments. """ # # Static properties # # Default Number of Retries for API Calls. API_RETRIES = 3 API_RETRY_SLEEP_MULTIPLIER = 1.4 API_RETRY_SLEEP_RANDOMNESS_PCT = 0.2 _cache_dir = appdirs.user_cache_dir('gcpdiag') def set_cache_dir(path: str): """Set temporary directory for cache.""" global _cache_dir _cache_dir = path # Cache directory for diskcache. def get_cache_dir(): """Get temporary directory for cache.""" return _cache_dir # Number of seconds to wait for the gcpdiag.cache API cache lock to be freed. CACHE_LOCK_TIMEOUT = 120 # How long to cache documents that rarely change (e.g. predefined IAM roles). STATIC_DOCUMENTS_EXPIRY_SECONDS = 3600 * 24 # Prefetch worker threads MAX_WORKERS = 20 _args: Dict[str, Any] = {} _config: Dict[str, Any] = {} _project_id: str = '' def _get_default_report_dir(): """Dynamically determine default report dir, using $HOME in Cloud Shell.""" default_path = '/tmp' if os.getenv('CLOUD_SHELL'): try: home_path = os.path.expanduser('~') return os.path.join(home_path, default_path.lstrip(os.sep)) except OSError: return default_path return default_path _defaults: Dict[str, Any] = { 'auth_adc': False, 'auth_key': None, 'billing_project': None, 'show_skipped': False, 'hide_ok': False, 'include': None, 'exclude': None, 'include_extended': False, 'verbose': 0, 'within_days': 3, 'hide_skipped': True, 'show_ok': True, 'logging_ratelimit_requests': 60, 'logging_ratelimit_period_seconds': 60, 'logging_page_size': 500, 'logging_fetch_max_entries': 10000, 'logging_fetch_max_time_seconds': 120, 'enable_gce_serial_buffer': False, 'auto': False, 'report_dir': _get_default_report_dir(), 'interface': 'cli', 'universe_domain': 'googleapis.com', 'reason': None } # # externally used methods # def init(args, is_cloud_shell=False): """Load configuration based on provided CLI args. Args: args (Dict): Configuration dictionary. project_id (str): Current project id is_cloud_shell (bool, optional): Whether cloud shell is used. Defaults to False. """ global _args global _config _args = args if args else {} _args.update({'is_cloud_shell': is_cloud_shell}) file = args.get('config', None) if file: # Read the file contents if os.path.exists(file): with open(file, encoding='utf-8') as f: content = f.read() else: print(f'ERROR: Configuration file: {file} does not exist!', file=sys.stderr) raise FileNotFoundError # Parse the content of the file as YAML if content: try: _config = yaml.safe_load(content) except yaml.YAMLError as err: print(f"ERROR: can't parse content of the file as YAML: {err}", file=sys.stderr) raise err def set_project_id(project_id): """Configure project id so that project-id-specific configuration can be retrieved.""" global _project_id _project_id = project_id def get_project_id(): """Session project-id.""" return _project_id def get(key): """Find property value for provided key inside CLI args or yaml configuration (including global and per project configuration). Yaml configuration defined per project takes precedence over global configuration. Global configuration takes precedence over configuration provided as a command argument. Args: key (str): property key name Returns: Any: return value for provided key """ if _project_id and _project_id in _config.get('projects', {}).keys(): if key in _config['projects'][_project_id].keys(): # return property from configuration per project if provided return _config['projects'][_project_id][key] if key in _config: # return property from global configuration if provided return _config[key] if key in _args and _args[key]: # return property from args if provided and not None return _args[key] # return property form defaults return _defaults.get(key, None) ================================================ FILE: gcpdiag/config_test.py ================================================ # 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. """Test code in config.py.""" from tempfile import NamedTemporaryFile import pytest from gcpdiag import config SAMPLE_CONFIG = ''' --- billing_project: sample include: - '*BP*' exclude: - '*SEC*' - '*ERR*' include_extended: True verbose: 3 within_days: 5 ''' LOGGING_CONFIG = ''' --- logging_ratelimit_requests: 120 logging_ratelimit_period_seconds: 120 logging_page_size: 1000 logging_fetch_max_entries: 20000 logging_fetch_max_time_seconds: 300 ''' EMPTY_CONFIG = '' PER_PROJECT_CONFIG = ''' --- logging_fetch_max_time_seconds: 300 verbose: 3 within_days: 5 projects: myproject: billing_project: perproject include: - '*BP*' exclude: - '*SEC*' - '*ERR*' include_extended: True ''' class Test: """Unit tests for Configuration.""" @pytest.fixture(autouse=True) def clear_globals(self): """These tests modify global state, so it is important to clean it.""" # pylint: disable=protected-access yield config._args = {} config._config = {} config._project_id = '' def test_static_properties(self): assert config.CACHE_LOCK_TIMEOUT == 120 assert config.STATIC_DOCUMENTS_EXPIRY_SECONDS == 3600 * 24 assert config.MAX_WORKERS == 20 def test_default_dynamic_properties(self): config.init({}) assert config.get('auth_adc') is False assert config.get('include_extended') is False assert config.get('config') is None assert config.get('verbose') == 0 assert config.get('within_days') == 3 assert config.get('enable_gce_serial_buffer') is False assert config.get('reason') is None def test_overwrite_dynamic_properties(self): config.init({ 'auth_adc': True, 'include_extended': True, 'verbose': 3, 'within_days': 7 }) assert config.get('auth_adc') is True assert config.get('include_extended') is True assert config.get('verbose') == 3 assert config.get('within_days') == 7 def test_include(self): config.init({}) assert config.get('include') is None config.init({'include': ['*BP*']}) assert config.get('include') == ['*BP*'] config.init({'include': ['*BP*', '*ERR*', '*WARN*']}) assert config.get('include') == ['*BP*', '*ERR*', '*WARN*'] def test_exclude(self): config.init({}) assert config.get('exclude') is None config.init({'exclude': ['*BP*']}) assert config.get('exclude') == ['*BP*'] config.init({'exclude': ['*BP*', '*ERR*', '*WARN*']}) assert config.get('exclude') == ['*BP*', '*ERR*', '*WARN*'] def test_empty_config(self): # create temporary config file with NamedTemporaryFile() as fp: fp.write(EMPTY_CONFIG.encode()) fp.seek(0) # load config from file config.init({'config': fp.name}) assert config.get('config') == fp.name # read value available only from config assert config.get('logging_ratelimit_requests') == 60 assert config.get('logging_fetch_max_time_seconds') == 120 def test_sample_config(self): # create temporary config file with NamedTemporaryFile() as fp: fp.write(SAMPLE_CONFIG.encode()) fp.seek(0) # load config from file config.init({'config': fp.name}) assert config.get('config') == fp.name assert config.get('billing_project') == 'sample' assert config.get('include_extended') is True assert config.get('verbose') == 3 assert config.get('within_days') == 5 assert config.get('include') == ['*BP*'] assert config.get('exclude') == ['*SEC*', '*ERR*'] def test_logging_config(self): # create temporary config file with NamedTemporaryFile() as fp: fp.write(LOGGING_CONFIG.encode()) fp.seek(0) # load config from file config.init({'config': fp.name}, 'x') assert config.get('config') == fp.name assert config.get('logging_ratelimit_requests') == 120 assert config.get('logging_ratelimit_period_seconds') == 120 assert config.get('logging_page_size') == 1000 assert config.get('logging_fetch_max_entries') == 20000 assert config.get('logging_fetch_max_time_seconds') == 300 def test_per_project_config(self): # create temporary config file with NamedTemporaryFile() as fp: fp.write(PER_PROJECT_CONFIG.encode()) fp.seek(0) # load config from file config.init({'config': fp.name}) config.set_project_id('myproject') assert config.get('config') == fp.name assert config.get('billing_project') == 'perproject' assert config.get('include_extended') is True assert config.get('include') == ['*BP*'] assert config.get('exclude') == ['*SEC*', '*ERR*'] assert config.get('verbose') == 3 assert config.get('logging_fetch_max_time_seconds') == 300 assert config.get('within_days') == 5 ================================================ FILE: gcpdiag/context.py ================================================ # Copyright 2025 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. """Abstract interface for providing execution context.""" import abc class ContextProvider(abc.ABC): """Abstract interface for managing execution context for threads.""" @abc.abstractmethod def setup_thread_context(self) -> None: """Set up the necessary context for the current thread.""" pass @abc.abstractmethod def teardown_thread_context(self) -> None: """Clean up the thread context.""" pass ================================================ FILE: gcpdiag/executor.py ================================================ # Copyright 2021 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. """ThreadPoolExecutor instance that can be used to run tasks in parallel""" import concurrent.futures from typing import Any, Callable, Iterable, Optional from gcpdiag import config, models _real_executor: Optional[concurrent.futures.ThreadPoolExecutor] = None def _get_real_executor() -> concurrent.futures.ThreadPoolExecutor: global _real_executor if _real_executor is None: _real_executor = concurrent.futures.ThreadPoolExecutor( max_workers=config.MAX_WORKERS) return _real_executor def _context_wrapper(fn, context: models.Context): def wrapped(*args, **kwargs): provider = context.context_provider if provider: provider.setup_thread_context() try: return fn(*args, **kwargs) finally: if provider: provider.teardown_thread_context() return wrapped class ContextAwareExecutor: """A ThreadPoolExecutor wrapper that propagates the gcpdiag context. This executor ensures that the thread-local context (e.g., for API clients) is properly set up and torn down for each task executed in the thread pool. """ def __init__(self, context: models.Context): self._context = context self._executor = _get_real_executor() def submit(self, fn: Callable[..., Any], *args: Any, **kwargs: Any) -> concurrent.futures.Future[Any]: wrapped_fn = _context_wrapper(fn, self._context) return self._executor.submit(wrapped_fn, *args, **kwargs) def map( self, fn: Callable[..., Any], *iterables: Iterable[Any], timeout: Optional[float] = None, chunksize: int = 1, ): wrapped_fn = _context_wrapper(fn, self._context) return self._executor.map(wrapped_fn, *iterables, timeout=timeout, chunksize=chunksize) def shutdown(self, wait: bool = True): # We don't shut down the underlying global executor here pass def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.shutdown(wait=True) def get_executor(context: models.Context) -> ContextAwareExecutor: return ContextAwareExecutor(context) ================================================ FILE: gcpdiag/executor_test.py ================================================ # Copyright 2025 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. # Lint as: python3 """Unit tests for executor.py.""" import unittest from unittest import mock from gcpdiag import executor, models class ContextAwareExecutorTest(unittest.TestCase): def test_context_propagation_with_submit(self): """Test that context is setup and torn down with submit().""" mock_provider = mock.Mock() mock_context = mock.Mock(spec=models.Context) mock_context.context_provider = mock_provider with executor.ContextAwareExecutor(context=mock_context) as ex: future = ex.submit(lambda: 'test') self.assertEqual('test', future.result()) mock_provider.setup_thread_context.assert_called_once() mock_provider.teardown_thread_context.assert_called_once() def test_context_propagation_with_map(self): """Test that context is setup and torn down with map().""" mock_provider = mock.Mock() mock_context = mock.Mock(spec=models.Context) mock_context.context_provider = mock_provider with executor.ContextAwareExecutor(context=mock_context) as ex: results = list(ex.map(lambda x: x, ['test'])) self.assertEqual(['test'], results) mock_provider.setup_thread_context.assert_called_once() mock_provider.teardown_thread_context.assert_called_once() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/hooks.py ================================================ # Copyright 2021 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. """Hooks function definitions. Hooks are functions that are called in different parts of the code base, and used to execute some functionality that might be only required in certain environments. """ def set_lint_args_hook(args): """Called after lint command arguments were parsed.""" try: # This is for Google-internal use only and allows us to modify # default options for internal use. # pylint: disable=import-outside-toplevel from gcpdiag_google_internal import hooks as google_internal google_internal.set_lint_args_hook(args) except ImportError: pass def set_runbook_args_hook(args): """Called after runbook command arguments were parsed.""" try: # This is for Google-internal use only and allows us to modify # default options for internal use. # pylint: disable=import-outside-toplevel from gcpdiag_google_internal import hooks as google_internal google_internal.set_runbook_args_hook(args) except ImportError: pass def verify_access_hook(project_id: str): """Called to do additional authorization verifications.""" try: # gcpdiag_google_internal contains code that we run only internally # at Google, so this import will fail in the public version. # pylint: disable=import-outside-toplevel from gcpdiag_google_internal import hooks as google_internal google_internal.verify_access_hook(project_id) except ImportError: pass def request_builder_hook(*args, **kwargs): """Called when creating HTTP requests.""" try: # This is for Google-internal use only and allows us to modify the request # to make it work also internally. The import will fail for the public # version of gcpdiag. # pylint: disable=import-outside-toplevel from gcpdiag_google_internal import hooks hooks.request_builder_hook(*args, **kwargs) except ImportError: pass def post_lint_hook(report): """Called after lint command has run.""" try: # gcpdiag_google_internal contains code that we run only internally # at Google, so this import will fail in the public version. # pylint: disable=import-outside-toplevel from gcpdiag_google_internal import hooks as google_internal google_internal.post_lint_hook(report) except ImportError: pass def post_runbook_hook(report): """Called after runbook command has run.""" try: # gcpdiag_google_internal contains code that we run only internally # at Google, so this import will fail in the public version. # pylint: disable=import-outside-toplevel from gcpdiag_google_internal import hooks as google_internal google_internal.post_runbook_hook(report) except ImportError: pass ================================================ FILE: gcpdiag/lint/__init__.py ================================================ # Copyright 2021 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. # Lint as: python3 """lint command: find potential issues in GCP projects.""" import abc import asyncio import concurrent.futures import dataclasses import enum import importlib import inspect import logging import os import pkgutil import re import sys import threading import time import types from collections.abc import Callable from typing import Any, Dict, Iterable, Iterator, List, Optional, Protocol, Set import googleapiclient.errors from gcpdiag import config, models, utils from gcpdiag.executor import get_executor # to avoid confusion with gcpdiag.lint.gce from gcpdiag.queries import gce as gce_mod from gcpdiag.queries import logs class LintRuleClass(enum.Enum): """Identifies rule class.""" ERR = 'ERR' BP = 'BP' SEC = 'SEC' WARN = 'WARN' # classes for extended rules ERR_EXT = 'ERR_EXT' BP_EXT = 'BP_EXT' SEC_EXT = 'SEC_EXT' WARN_EXT = 'WARN_EXT' def __str__(self): return str(self.value) @dataclasses.dataclass class LintRule: """Identifies a lint rule.""" product: str rule_class: LintRuleClass rule_id: str short_desc: str long_desc: str keywords: List[str] run_rule_f: Optional[Callable] = None async_run_rule_f: Optional[Callable] = None prepare_rule_f: Optional[Callable] = None prefetch_rule_f: Optional[Callable] = None prefetch_rule_future: Optional[concurrent.futures.Future] = None def __hash__(self): return str(self.product + self.rule_class.value + self.rule_id).__hash__() def __str__(self): return self.product + '/' + self.rule_class.value + '/' + self.rule_id @property def doc_url(self) -> str: return f'https://gcpdiag.dev/rules/{self.product}/{self.rule_class}/{self.rule_id}' @dataclasses.dataclass class LintRuleResult: status: str resource: Optional[models.Resource] reason: Optional[str] short_info: Optional[str] class LintReportRuleInterface: """LintRule objects use this interface to report their results.""" rule: LintRule results: List[LintRuleResult] _lint_result: 'LintResults' def __init__(self, rule: LintRule, lint_result: 'LintResults') -> None: self.rule = rule self._lint_result = lint_result self.results = [] @property def overall_status(self) -> str: if self._any_result_with_status('failed'): return 'failed' elif self._any_result_with_status('ok'): return 'ok' else: return 'skipped' def _any_result_with_status(self, status: str) -> bool: return any(r.status == status for r in self.results) def add_skipped(self, resource: Optional[models.Resource], reason: str, short_info: str = None) -> None: self.results.append( LintRuleResult(status='skipped', resource=resource, reason=reason, short_info=short_info)) def add_ok(self, resource: models.Resource, short_info: str = '') -> None: self.results.append( LintRuleResult(status='ok', resource=resource, reason=None, short_info=short_info)) def add_failed(self, resource: models.Resource, reason: str = None, short_info: str = None) -> None: self.results.append( LintRuleResult(status='failed', resource=resource, reason=reason, short_info=short_info)) def finish(self) -> None: self._lint_result.register_finished_rule_report(self) class LintResultsHandler(Protocol): """ Protocol representing object capable of handling lint results (handlers). Handlers can be registered with LintResults and react on each rule added to the LintResults: each time a rule is added to the LintResults process_rule_report method of each registered handler is called with LintReportRuleInterface, so that handler have access to the results of the rule execution. """ def process_rule_report(self, rule_report: LintReportRuleInterface) -> None: pass class LintResults: """ Class representing results of lint """ _result_handlers: List[LintResultsHandler] _rule_reports: List[LintReportRuleInterface] def __init__(self) -> None: self._result_handlers = [] self._rule_reports = [] def get_rule_reports(self) -> List[LintReportRuleInterface]: return self._rule_reports def add_result_handler(self, handler: LintResultsHandler) -> None: """ Handlers can be registered with LintResults and react on each rule added to the LintResults: each time a rule is added to theLintResults process_rule_report method of each registered handler is called with LintReportRuleInterface, so that handler have access to the results of the rule execution. """ self._result_handlers.append(handler) def create_rule_report(self, rule: LintRule) -> LintReportRuleInterface: return LintReportRuleInterface(rule=rule, lint_result=self) def register_finished_rule_report( self, rule_report: LintReportRuleInterface) -> None: self._rule_reports.append(rule_report) self._notify_result_handlers(rule_report) def _notify_result_handlers(self, rule_report: LintReportRuleInterface) -> None: for handler in self._result_handlers: handler.process_rule_report(rule_report) def get_totals_by_status(self) -> Dict[str, int]: totals: Dict[str, int] totals = {} for rule_report in self._rule_reports: totals[rule_report.overall_status] = totals.get( rule_report.overall_status, 0) + 1 return totals def get_rule_statuses(self) -> Dict[str, str]: return {str(r.rule): r.overall_status for r in self._rule_reports} @property def any_failed(self) -> bool: return any(r.overall_status == 'failed' for r in self._rule_reports) class LintRulesPattern: """Filter to include/exclude rules to run. Rule inclusion/exclusion patterns are written with the following format: PRODUCT/CLASS/ID, e.g. gke/WARN/2021_001. `*` can be used as a wildcard: - `gke/*` for all gke rules - `gke/WARN/*` for all GKE WARN rules - `gke/WARN/2021_*` for all GKE WARN rules written in 2021 - `*/WARN/*` for all WARN rules, for any product Additionally, you can also write just a product like `gke` or a rule class like `WARN`. """ product: Optional[str] rule_class: Optional[LintRuleClass] rule_id: Optional[re.Pattern] def __init__(self, pattern_str: str): self.product = None self.rule_class = None self.rule_id = None pattern_elems = pattern_str.split('/') if len(pattern_elems) == 1: # if there are no '/', assume this is either a product name # or a rule class. if pattern_str == '*': pass elif pattern_str.upper() in LintRuleClass.__members__: self.rule_class = LintRuleClass(pattern_str.upper()) else: self.product = pattern_str elif 1 < len(pattern_elems) <= 3: # product if pattern_elems[0] != '' and pattern_elems[0] != '*': self.product = pattern_elems[0] # rule class if pattern_elems[1] != '' and pattern_elems[1] != '*': self.rule_class = LintRuleClass(pattern_elems[1].upper()) # rule id if len(pattern_elems) == 3: # convert wildcard match to regex pattern self.rule_id = re.compile(re.sub(r'\*', '.*', pattern_elems[2])) else: raise ValueError( f"rule pattern doesn't look like a pattern: {pattern_str}") def __str__(self): # pylint: disable=consider-using-f-string return '{}/{}/{}'.format(self.product or '*', self.rule_class or '*', self.rule_id or '*') def match_rule(self, rule: LintRule) -> bool: if self.product: if self.product != rule.product: return False if self.rule_class: if self.rule_class != rule.rule_class: return False if self.rule_id: if not self.rule_id.match(rule.rule_id): return False return True class NotLintRule(Exception): pass # pylint: disable=unsubscriptable-object def is_function_named(name: str) -> Callable[[Any], bool]: return lambda obj: inspect.isfunction(obj) and obj.__name__ == name def get_module_function_or_none(module: types.ModuleType, name: str) -> Optional[Callable]: members = inspect.getmembers(module, is_function_named(name)) assert 0 <= len(members) <= 1 return None if len(members) < 1 else members[0][1] class ExecutionStrategy(Protocol): def run_rules(self, context: models.Context, result: LintResults, rules: Iterable[LintRule]) -> None: pass def filter_runnable_rules(self, rules: Iterable[LintRule]) -> Iterable[LintRule]: pass class SequentialExecutionStrategy: """ Execution strategy that groups multiple execution strategies and runs them sequentially one after another. """ strategies: List[ExecutionStrategy] def __init__(self, strategies: List[ExecutionStrategy]) -> None: self.strategies = strategies def filter_runnable_rules(self, rules: Iterable[LintRule]) -> List[LintRule]: runnable_rules: Set[LintRule] runnable_rules = set() for strategy in self.strategies: runnable_rules = runnable_rules.union( strategy.filter_runnable_rules(rules)) return list(runnable_rules) def run_rules(self, context: models.Context, result: LintResults, rules: Iterable[LintRule]) -> None: for strategy in self.strategies: strategy.run_rules(context, result, rules) class RuleModule: """ Encapsulate actions related to a specific python rule module """ _module: types.ModuleType def __init__(self, python_module: types.ModuleType) -> None: self._module = python_module def __repr__(self) -> str: return f'RuleModule:{self._module}' def get_method(self, method_name: str) -> Optional[Callable]: return get_module_function_or_none(self._module, method_name) def get_attr(self, attribute_name: str) -> Optional[Any]: return getattr(self._module, attribute_name, None) def get_module_doc(self) -> Optional[str]: return inspect.getdoc(self._module) class DefaultPythonModulesGateway: """ Encapsulate actions related to python rule modules """ def list_pkg_modules(self, pkg: Any) -> List[str]: prefix = pkg.__name__ + '.' return [p[1] for p in pkgutil.iter_modules(pkg.__path__, prefix)] def get_module(self, name: str) -> RuleModule: python_module = importlib.import_module(name) return RuleModule(python_module) class PythonModulesGateway(Protocol): def list_pkg_modules(self, pkg: Any) -> Iterable[str]: pass def get_module(self, name: str) -> RuleModule: pass def pick_default_execution_strategy(run_async: bool) -> ExecutionStrategy: if run_async: return SequentialExecutionStrategy( strategies=[SyncExecutionStrategy(), AsyncExecutionStrategy()]) else: return SyncExecutionStrategy() class LintRuleRepository: """Repository of Lint rule which is also used to run the rules.""" rules: List[LintRule] execution_strategy: ExecutionStrategy modules_gateway: PythonModulesGateway _loaded_rules: List[LintRule] def __init__(self, load_extended: bool = False, run_async: bool = False, execution_strategy: ExecutionStrategy = None, modules_gateway: Optional[PythonModulesGateway] = None, include: Iterable[LintRulesPattern] = None, exclude: Iterable[LintRulesPattern] = None) -> None: self._exclude = exclude self._include = include self._loaded_rules = [] self.load_extended = load_extended self.execution_strategy = execution_strategy or pick_default_execution_strategy( run_async) self.modules_gateway = modules_gateway or DefaultPythonModulesGateway() self.result = LintResults() @property def rules_to_run(self) -> Iterable[LintRule]: rules_filtered = list(self._rules_filtered()) return self.execution_strategy.filter_runnable_rules(rules_filtered) def _rules_filtered(self) -> Iterator[LintRule]: exclude = self._exclude include = self._include for rule in self._loaded_rules: if include: if not any(x.match_rule(rule) for x in include): continue if exclude: if any(x.match_rule(rule) for x in exclude): continue yield rule def get_rule_by_module_name(self, name: str) -> LintRule: # Skip code tests if name.endswith('_test'): raise NotLintRule() # Determine Lint Rule parameters based on the module name. m = re.search( r""" \. (?P[^\.]+) # product path, e.g.: .gke. \. (?P[a-z]+(?:_ext)?) # class prefix, e.g.: 'err_' or 'err_ext' _ (?P\d+_\d+) # id: 2020_001 """, name, re.VERBOSE) if not m: # Assume this is not a rule (e.g. could be a "utility" module) raise NotLintRule() product, rule_class, rule_id = m.group('product', 'class_prefix', 'rule_id') module = self.modules_gateway.get_module(name) # Get a reference to the run_rule() function. run_rule_f = module.get_method('run_rule') # Get a reference to the async_run_rule() function. async_run_rule_f = module.get_method('async_run_rule') if not (run_rule_f or async_run_rule_f): raise RuntimeError( f'module {module} doesn\'t have a run_rule or an async_run_rule function' ) # Get a reference to the prepare_rule() function. prepare_rule_f = module.get_method('prepare_rule') # Get a reference to the prefetch_rule() function. prefetch_rule_f = module.get_method('prefetch_rule') # Get a reference to the keywords list. keywords: List = module.get_attr('keywords') or [] # Get module docstring. doc = module.get_module_doc() if not doc: raise RuntimeError(f'module {module} doesn\'t provide a module docstring') # The first line is the short "good state description" doc_lines = doc.splitlines() short_desc = doc_lines[0] long_desc = '' if len(doc_lines) >= 3: if doc_lines[1]: raise RuntimeError( f'module {module} has a non-empty second line in the module docstring' ) long_desc = '\n'.join(doc_lines[2:]) # Instantiate the LintRule object and register it rule = LintRule(product=product, rule_class=LintRuleClass(rule_class.upper()), rule_id=rule_id, run_rule_f=run_rule_f, async_run_rule_f=async_run_rule_f, prepare_rule_f=prepare_rule_f, prefetch_rule_f=prefetch_rule_f, short_desc=short_desc, long_desc=long_desc, keywords=keywords) return rule def load_rules(self, pkg: types.ModuleType) -> None: for name in self.modules_gateway.list_pkg_modules(pkg): try: if '_ext_' in name and not self.load_extended: continue rule = self.get_rule_by_module_name(name) except NotLintRule: continue self._register_rule(rule) def _register_rule(self, rule: LintRule): self._loaded_rules.append(rule) def run_rules(self, context: models.Context) -> None: # Make sure the rules are sorted alphabetically self._loaded_rules.sort(key=str) rules_to_run = self.rules_to_run self.execution_strategy.run_rules(context, self.result, rules_to_run) class AsyncRunner: """ Helper class to represent single execution operation """ def __init__(self, context: models.Context, result: LintResults, rules: Iterable[LintRule]): self._context = context self._result = result self._rules = rules def run(self) -> None: asyncio.run(self._run_all()) async def _run_all(self) -> None: awaitables = [self._run_async_rule(r) for r in self._rules] await asyncio.gather(*awaitables) async def _run_async_rule(self, rule: LintRule) -> None: rule_report = self._result.create_rule_report(rule) assert rule.async_run_rule_f is not None await rule.async_run_rule_f(self._context, rule_report) rule_report.finish() class AsyncExecutionStrategy: """ Execute async rules """ def run_rules(self, context: models.Context, result: LintResults, rules: Iterable[LintRule]) -> None: rules = self.filter_runnable_rules(rules) AsyncRunner(context, result, rules).run() def filter_runnable_rules(self, rules: Iterable[LintRule]) -> List[LintRule]: return [r for r in rules if r.async_run_rule_f] def wrap_prefetch_rule_f(rule_name, prefetch_rule_f, context): logging.debug('prefetch_rule_f: %s', rule_name) thread = threading.current_thread() thread.name = f'prefetch_rule_f:{rule_name}' prefetch_rule_f(context) class SyncExecutionStrategy: """ Execute rules using thread pool """ def filter_runnable_rules(self, rules: Iterable[LintRule]) -> List[LintRule]: return [r for r in rules if r.run_rule_f] def run_rules(self, context: models.Context, result: LintResults, rules: Iterable[LintRule]) -> None: rules_to_run = self.filter_runnable_rules(rules) # Run the "prepare_rule" functions first, in a single thread. for rule in rules_to_run: if rule.prepare_rule_f: logging.debug('prepare_rule_f: %s', rule) rule.prepare_rule_f(context) # Start multiple threads for logs fetching and prefetch functions. executor = get_executor(context) # Start fetching any logs queries that were defined in prepare_rule # functions. logs.execute_queries(executor, context) # Start fetching any serial output logs if serial output to cloud logging # is not enabled on the project/ instance if config.get('enable_gce_serial_buffer'): # execute fetch job gce_mod.execute_fetch_serial_port_outputs(executor) # Run the "prefetch_rule" functions with multiple worker threads to speed up # execution of the "run_rule" executions later. for rule in rules_to_run: if rule.prefetch_rule_f: rule.prefetch_rule_future = executor.submit(wrap_prefetch_rule_f, str(rule), rule.prefetch_rule_f, context) # While the prefetch_rule functions are still being executed in multiple # threads, start executing the rules, but block and wait in case the # prefetch for a specific rule is still running. last_threads_dump = time.time() for rule in rules_to_run: rule_report = result.create_rule_report(rule) # make sure prefetch_rule_f completed try: if rule.prefetch_rule_future: if rule.prefetch_rule_future.running(): logging.info('waiting for query results (%s)', rule) while True: try: rule.prefetch_rule_future.result(10) break except concurrent.futures.TimeoutError: pass if config.get('verbose') >= 2: now = time.time() if now - last_threads_dump > 10: logging.debug( 'THREADS: %s', ', '.join([t.name for t in threading.enumerate()])) last_threads_dump = now # run the rule assert rule.run_rule_f is not None rule.run_rule_f(context, rule_report) except (utils.GcpApiError, googleapiclient.errors.HttpError) as err: if isinstance(err, googleapiclient.errors.HttpError): err = utils.GcpApiError(err) logging.warning('%s: %s while processing rule: %s', type(err).__name__, err, rule) rule_report.add_skipped(None, f'API error: {err}', None) except (RuntimeError, ValueError, KeyError, TypeError) as err: logging.warning('%s: %s while processing rule: %s', type(err).__name__, err, rule) rule_report.add_skipped(None, f'Error: {err}', None) rule_report.finish() ================================================ FILE: gcpdiag/lint/apigee/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/apigee/apigee_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import apigee, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = apigee project_id = 'gcpdiag-apigee1-aaaa' ================================================ FILE: gcpdiag/lint/apigee/err_2022_001_p4sa_perm.py ================================================ # 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. """Apigee Service Agent permissions Verify that the Apigee Service Agent account exists and has the Apigee Service Agent role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import apigee, crm, iam SA = 'service-{project_number}@gcp-sa-apigee.iam.gserviceaccount.com' ROLE = 'roles/apigee.serviceAgent' def prefetch_rule(context: models.Context): iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organizations found') return project = crm.get_project(context.project_id) service_account = SA.format(project_number=project.number) iam_policy = iam.get_project_policy(context) if not iam_policy.has_role_permissions(f'serviceAccount:{service_account}', ROLE): report.add_failed(project, (f'service account: {service_account}\n' f'missing role: {ROLE}')) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/apigee/err_2022_002_p4sa_kms_key_perm.py ================================================ # 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. """Cloud KMS key is enabled and could be accessed by Apigee Service Agent Verify that the runtime database encryption key and disk encryption key are not disabled or destroyed and the Apigee Service Agent account has the permission to access the KMS keys """ from gcpdiag import lint, models from gcpdiag.queries import apigee, crm, kms SA = 'service-{project_number}@gcp-sa-apigee.iam.gserviceaccount.com' ROLE = 'roles/cloudkms.cryptoKeyEncrypterDecrypter' RUNTIME_DATABASE_ENCRYPTION_KEY_STRING = 'runtime database encryption key' DISK_ENCRYPTION_KEY_STRING = 'disk encryption key' def _run_rule_kms_key(context: models.Context, report: lint.LintReportRuleInterface, kms_key_name: str, kms_key_mode: str, service_account: str): if kms_key_name: kms_key = kms.get_crypto_key(kms_key_name) if _is_valid_kms_key(kms_key): if not _apigee_sa_has_role_permissions(context, kms_key_name, service_account): report.add_failed( kms_key, (f'service account: {service_account}\n' f'missing role: {ROLE} for {kms_key_mode} {kms_key_name}')) else: report.add_ok(kms_key) else: report.add_failed( kms_key, f'Key {kms_key_name} is not valid (destroyed or disabled)') else: report.add_skipped(None, f'{kms_key_mode} is not configured') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organizations found') return if apigee_org.runtime_type == 'HYBRID': report.add_skipped(None, 'This rule only applies to Apigee X product') return project = crm.get_project(context.project_id) service_account = SA.format(project_number=project.number) # Verify permissions on runtime database encryption key kms_key_name = apigee_org.runtime_database_encryption_key_name _run_rule_kms_key(context, report, kms_key_name, RUNTIME_DATABASE_ENCRYPTION_KEY_STRING, service_account) # Verify permissions on disk encryption key instances_list = apigee.get_instances(apigee_org) for instance in sorted(instances_list.values(), key=lambda instance: instance.name): kms_key_name = instance.disk_encryption_key_name _run_rule_kms_key(context, report, kms_key_name, DISK_ENCRYPTION_KEY_STRING, service_account) def _is_valid_kms_key(kms_key): return not kms_key.is_destroyed() and kms_key.is_enabled() def _apigee_sa_has_role_permissions(context: models.Context, kms_key_name, service_account): iam_policy = kms.get_crypto_key_iam_policy(context, kms_key_name) return iam_policy.has_role_permissions(f'serviceAccount:{service_account}', ROLE) ================================================ FILE: gcpdiag/lint/apigee/err_2023_001_vpc_peering_created.py ================================================ # Copyright 2023 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. """Customer's network is peered to Apigee's network There should be a VPC peering connection between customer's network and the Apigee X instance runs in a Google managed tenant project """ import re from gcpdiag import lint, models from gcpdiag.queries import apigee APIGEE_NETWORK = 'servicenetworking' def run_rule(context: models.Context, report: lint.LintReportRuleInterface): apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organizations found') return if apigee_org.runtime_type == 'HYBRID': report.add_skipped(None, 'This rule only applies to Apigee X product') return # Check whether there is a VPC peering connection with Apigee runtime instances or not is_peered_to_apigee = False for peer in apigee_org.network.peerings: match = re.match( r'https://www.googleapis.com/compute/([^/]+)/' 'projects/([^/]+)/([^/]+)/networks/(?P[^/]+)$', peer.url) if not match: raise ValueError(f"can't parse peering network url: {peer.url!r}") peered_network = match.group('network') if peered_network == APIGEE_NETWORK: if peer.state == 'ACTIVE': is_peered_to_apigee = True break else: report.add_failed( apigee_org, (f'peered connection to Apigee {peer.name} in network ' f'{apigee_org.network.short_path} is not active.')) return if is_peered_to_apigee: report.add_ok(apigee_org) else: report.add_failed( apigee_org, (f'Customer VPC network {apigee_org.network.short_path} is ' 'not correctly peered to Apigee\'s network')) ================================================ FILE: gcpdiag/lint/apigee/err_2023_002_routing_with_mig.py ================================================ # Copyright 2023 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. """Network bridge managed instance group is correctly configured. If a managed instance group (MIG) is being used to route traffic to Apigee X instance runs in a Google managed tenant project. The MIG should be created in the network which is peered with the Apigee X instance. The MIG should also point to the correct Apigee X instance IP. """ from gcpdiag import lint, models from gcpdiag.queries import apigee network_bridge_migs = {} def prefetch_rule(context: models.Context): network_bridge_migs[ context.project_id] = apigee.get_network_bridge_instance_groups( context.project_id) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not network_bridge_migs[context.project_id]: report.add_skipped(None, 'no Apigee network bridge MIGs found') return apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organizations found') return if apigee_org.runtime_type == 'HYBRID': report.add_skipped(None, 'This rule only applies to Apigee X product') return all_instance_ips = {i.host for i in apigee.get_instances(apigee_org).values()} apigee_org_network_path = apigee_org.network.short_path apigee_org_ok_flag = True for mig in network_bridge_migs[context.project_id]: if mig.template.network.short_path != apigee_org_network_path: report.add_failed( mig, f'Managed instance group {mig.name} is not being created under the correct network\n' f'{mig.name}\'s network: {mig.template.network.short_path}\n' f'The network peered with Apigee: {apigee_org_network_path}') apigee_org_ok_flag = False if not mig.template.get_metadata('ENDPOINT') in all_instance_ips: report.add_failed( mig, f'Managed instance group {mig.name} is not pointing to any Apigee X instance.' ) apigee_org_ok_flag = False if apigee_org_ok_flag: report.add_ok(apigee_org) ================================================ FILE: gcpdiag/lint/apigee/err_2023_003_pga_on_mig_subnet.py ================================================ # Copyright 2023 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. """Private Google Access (PGA) for subnet of Managed Instance Group is enabled. If a managed instance group (MIG) is being used to route traffic to Apigee X instance running in a Google managed tenant project, the MIG's subnet should have Private Google Access (PGA) enabled. """ from gcpdiag import lint, models from gcpdiag.queries import apigee network_bridge_migs = {} def prefetch_rule(context: models.Context): network_bridge_migs[ context.project_id] = apigee.get_network_bridge_instance_groups( context.project_id) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not network_bridge_migs[context.project_id]: report.add_skipped(None, 'no Apigee network bridge MIGs found') return apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organization found') return if apigee_org.runtime_type == 'HYBRID': report.add_skipped(None, 'This rule only applies to Apigee X product') return for mig in network_bridge_migs[context.project_id]: network = mig.template.network # find subnets connected to Apigee via Managed Instance Group for subnet in network.subnetworks.values(): if subnet.region == mig.region: is_private_ip_google_access = subnet.is_private_ip_google_access() if not is_private_ip_google_access: report.add_failed( mig, (f'Private Google Access is not enabled on ' f'subnetwork {subnet.short_path} with region {mig.region} ' f'in network {network.short_path}')) else: report.add_ok(mig) ================================================ FILE: gcpdiag/lint/apigee/err_2023_004_p4nsa_perm.py ================================================ # Copyright 2023 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. """Service Networking API is enabled and SA account has the required role 1. Service networking API needs to be enabled 2. Service Agent(SA) account [service-{project_number}@service-networking.iam.gserviceaccount.com] needs to have the Networking Service Agent role [roles/servicenetworking.serviceAgent] on the project. """ from gcpdiag import lint, models from gcpdiag.queries import apigee, apis, crm, iam SA = 'service-{project_number}@service-networking.iam.gserviceaccount.com' ROLE = 'roles/servicenetworking.serviceAgent' def run_rule(context: models.Context, report: lint.LintReportRuleInterface): apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organizations found') return project_id = context.project_id project = crm.get_project(context.project_id) service_account = SA.format(project_number=project.number) # Check if Service Networking API is enabled if not apis.is_enabled(project_id, 'servicenetworking'): report.add_failed(project, 'Service Networking API is not enabled') else: # Check if Service Agent role is assigned to the SA account iam_policy = iam.get_project_policy(context) if not iam_policy.has_role_permissions(f'serviceAccount:{service_account}', ROLE): report.add_failed( project, f'service account: {service_account}\nmissing role: {ROLE}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/apigee/err_2023_005_fw_rule_xlb_to_mig.py ================================================ # Copyright 2023 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. """External Load Balancer (XLB) is able to connect to the Managed Instance Group(MIG). In order for the Apigee Managed Instance Group (MIG) to work correctly, the External Load Balancer (XLB) network connection to the MIG must be allowed """ import ipaddress from gcpdiag import lint, models from gcpdiag.queries import apigee network_bridge_migs = {} # Fetch the MIGs that are communicating with the ApigeeX instances def prefetch_rule(context: models.Context): network_bridge_migs[context.project_id] = ( apigee.get_network_bridge_instance_groups(context.project_id)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): apigee_org = apigee.get_org(context) if not apigee_org: report.add_skipped(None, 'no Apigee organization found') return if not network_bridge_migs[context.project_id]: report.add_skipped( None, 'no Apigee network bridge Managed Instance Group (MIGs) found') return if apigee_org.runtime_type == 'HYBRID': report.add_skipped(None, 'This rule only applies to Apigee X product') return for mig in network_bridge_migs[context.project_id]: networks = apigee_org.network # Identify tags used by the MIG instances tags = mig.template.tags # Check connectivity from GLB to MIG instance ip_ranges = ['130.211.0.0/22', '35.191.0.0/16'] for ip in ip_ranges: result = networks.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network(ip), ip_protocol='tcp', port=443, target_tags=tags, ) if result.action == 'deny': report.add_failed( mig, f'Network connection from {ip} blocked to MIG' f'{mig.short_path} on port 443') break else: report.add_ok(mig) ================================================ FILE: gcpdiag/lint/apigee/err_2023_006_multiple_migs_for_multiple_regions.py ================================================ # Copyright 2023 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. """A multi-region setup requires a separate MIG for each region. Each Apigee X region should have a MIG created in the same region. Otherwise the traffic will only be routed to one region. """ from gcpdiag import lint, models from gcpdiag.queries import apigee network_bridge_migs = {} def prefetch_rule(context: models.Context): network_bridge_migs[ context.project_id] = apigee.get_network_bridge_instance_groups( context.project_id) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not network_bridge_migs[context.project_id]: report.add_skipped(None, 'no Apigee network bridge MIGs found') return apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organization found') return if apigee_org.runtime_type == 'HYBRID': report.add_skipped(None, 'This rule only applies to Apigee X product') return instances_list = apigee.get_instances(apigee_org) mig_regions = [] for mig in network_bridge_migs[context.project_id]: mig_regions.append(mig.region) for instance in sorted(instances_list.values(), key=lambda instance: instance.name): curr_instance_location = instance.location if not curr_instance_location in mig_regions: report.add_failed( instance, (f'Instance {instance.name} in region {curr_instance_location} ' f'has no MIG in the region {curr_instance_location}')) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/apigee/snapshots/ERR_2022_001.txt ================================================ * apigee/ERR/2022_001: Apigee Service Agent permissions - projects/gcpdiag-apigee1-aaaa [FAIL] service account: service-12340005@gcp-sa-apigee.iam.gserviceaccount.com missing role: roles/apigee.serviceAgent Verify that the Apigee Service Agent account exists and has the Apigee Service Agent role on the project. https://gcpdiag.dev/rules/apigee/ERR/2022_001 ================================================ FILE: gcpdiag/lint/apigee/snapshots/ERR_2022_002.txt ================================================ * apigee/ERR/2022_002: Cloud KMS key is enabled and could be accessed by Apigee Service Agent - projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key [ OK ] - projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key [ OK ] ================================================ FILE: gcpdiag/lint/apigee/snapshots/ERR_2023_001.txt ================================================ * apigee/ERR/2023_001: Customer's network is peered to Apigee's network - organizations/gcpdiag-apigee1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/apigee/snapshots/ERR_2023_002.txt ================================================ * apigee/ERR/2023_002: Network bridge managed instance group is correctly configured. - organizations/gcpdiag-apigee1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/apigee/snapshots/ERR_2023_003.txt ================================================ * apigee/ERR/2023_003: Private Google Access (PGA) for subnet of Managed Instance Group is enabled. - projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers/mig-bridge-manager-us-central1 [ OK ] ================================================ FILE: gcpdiag/lint/apigee/snapshots/ERR_2023_004.txt ================================================ * apigee/ERR/2023_004: Service Networking API is enabled and SA account has the required role - projects/gcpdiag-apigee1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/apigee/snapshots/ERR_2023_005.txt ================================================ * apigee/ERR/2023_005: External Load Balancer (XLB) is able to connect to the Managed Instance Group(MIG). - projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers/mig-bridge-manager-us-central1 [FAIL] Network connection from 130.211.0.0/22 blocked to MIGgcpdiag-apigee1-aaaa/mig-bridge-manager-us-central1 on port 443 In order for the Apigee Managed Instance Group (MIG) to work correctly, the External Load Balancer (XLB) network connection to the MIG must be allowed https://gcpdiag.dev/rules/apigee/ERR/2023_005 ================================================ FILE: gcpdiag/lint/apigee/snapshots/ERR_2023_006.txt ================================================ * apigee/ERR/2023_006: A multi-region setup requires a separate MIG for each region. - organizations/gcpdiag-apigee1-aaaa/instances/gcpdiag-apigee1-inst1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/apigee/snapshots/WARN_2021_001.txt ================================================ * apigee/WARN/2021_001: Every environment group contains at least one environment. - organizations/gcpdiag-apigee1-aaaa/envgroups/gcpdiag-demo-envgroup [FAIL] No environment is attached to the environment group: gcpdiag-demo-envgroup All of the requests to the hostname list below will receive 404 errors: ['gcpdiag.apigee.example.com'] - organizations/gcpdiag-apigee1-aaaa/envgroups/gcpdiag-demo-envgroup-1 [ OK ] An environment must be a member of at least one environment group before you can access resources defined within it. In other words, you must assign an environment to a group before you can use it. Or you would receive 404 errors while accessing every hostname in the environment group. https://gcpdiag.dev/rules/apigee/WARN/2021_001 ================================================ FILE: gcpdiag/lint/apigee/snapshots/WARN_2022_001.txt ================================================ * apigee/WARN/2022_001: Environment groups are created in the Apigee runtime plane. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/apigee/snapshots/WARN_2022_002.txt ================================================ * apigee/WARN/2022_002: Environments are attached to Apigee X instances - organizations/gcpdiag-apigee1-aaaa/environments/gcpdiag-demo-env [ OK ] - organizations/gcpdiag-apigee1-aaaa/environments/gcpdiag-demo-env-1 [FAIL] Environment: gcpdiag-demo-env-1 is not being attached to any Apigee X instance All API proxy deployment will fail in this environment Verify that environments are attached to Apigee X instances. https://gcpdiag.dev/rules/apigee/WARN/2022_002 ================================================ FILE: gcpdiag/lint/apigee/warn_2021_001_empty_env.py ================================================ # Copyright 2021 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. """Every environment group contains at least one environment. An environment must be a member of at least one environment group before you can access resources defined within it. In other words, you must assign an environment to a group before you can use it. Or you would receive 404 errors while accessing every hostname in the environment group. """ from gcpdiag import lint, models from gcpdiag.queries import apigee def run_rule(context: models.Context, report: lint.LintReportRuleInterface): apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organizations found') return envgroup_list = apigee.get_envgroups(apigee_org) for envgroup in sorted(envgroup_list.values(), key=lambda envgroup: envgroup.name): environments = apigee.get_envgroups_attachments(envgroup.full_path) if environments: report.add_ok(envgroup) else: report.add_failed( envgroup, f'No environment is attached to the environment group: {envgroup.name}\nAll of the ' f'requests to the hostname list below will receive 404 errors: \n{envgroup.host_names}' ) ================================================ FILE: gcpdiag/lint/apigee/warn_2022_001_env_groups_created.py ================================================ # 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. # Lint as: python3 """Environment groups are created in the Apigee runtime plane. Verify that environment groups are created in the runtime plane. If not, we should make sure every environment group is included in all override files where the environment is used. """ import re from typing import Dict from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apigee, apis, crm, logs MATCH_STR = 'INTERNAL: NOT_FOUND: failed to create ApigeeRoute' k8s_container_logs_by_project = {} APIGEE_WATCHER_FILTER = [ 'severity=ERROR', 'resource.labels.container_name= "apigee-watcher"', f'jsonPayload.error: "{MATCH_STR}"' ] def prepare_rule(context: models.Context): k8s_container_logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='k8s_container', log_name='log_id("stdout")', filter_str=' AND '.join(APIGEE_WATCHER_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Apigee Connect is enabled by default for any Kubernetes cluster running Apigee service. if not apis.is_enabled(context.project_id, 'apigeeconnect'): report.add_skipped(None, 'Apigee connect api is disabled') return project = crm.get_project(context.project_id) env_group_errors: Dict[str, Dict[str, str]] = {} # Process apigee_watcher container logs and search for env group creation errors if k8s_container_logs_by_project.get(context.project_id) and \ k8s_container_logs_by_project[context.project_id].entries: for log_entry in k8s_container_logs_by_project[context.project_id].entries: # Determine the problematic environment group name m = re.findall( r'cannot find ApigeeRouteConfig for environment group "([^"]*)":', get_path(log_entry, ('jsonPayload', 'error'), default='')) if not m: continue for env_group_name in m: cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'), default='Unknown') location = get_path(log_entry, ('resource', 'labels', 'location'), default='Unknown') organization = get_path(log_entry, ('labels', 'k8s-pod/org'), default='Unknown') if organization not in env_group_errors: env_group_errors[organization] = {} if env_group_name not in env_group_errors[organization].keys(): env_group_errors[organization][env_group_name] = ( f'Environment group {env_group_name} in ' f'organization {organization}: is not created in cluster: ' f'{cluster_name}, location: {location}') for org_name, env_group_error in env_group_errors.items(): apigee_org = apigee.ApigeeOrganization(project_id=context.project_id, org_name=org_name) if env_group_error: report.add_failed(apigee_org, 'Environment group creation issue detected: \n. '+\ '\n. '.join(err for _, err in env_group_error.items())) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/apigee/warn_2022_002_env_not_attached.py ================================================ # 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. """Environments are attached to Apigee X instances Verify that environments are attached to Apigee X instances. """ from typing import Set from gcpdiag import lint, models from gcpdiag.queries import apigee def run_rule(context: models.Context, report: lint.LintReportRuleInterface): apigee_org = apigee.get_org(context) if apigee_org is None: report.add_skipped(None, 'no Apigee organizations found') return if apigee_org.runtime_type == 'HYBRID': report.add_skipped(None, 'This rule only applies to Apigee X product') return all_envs_list = apigee_org.environments if not all_envs_list: report.add_skipped(None, 'no Apigee environments found') return all_attached_envs_list: Set[str] = set() instances_list = apigee.get_instances(apigee_org) for instance in sorted(instances_list.values(), key=lambda instance: instance.name): instance_envs = set(apigee.get_instances_attachments(instance.full_path)) if instance_envs: all_attached_envs_list = all_attached_envs_list.union(instance_envs) for env in all_envs_list: if env.name not in all_attached_envs_list: report.add_failed( env, f'Environment: {env.name} is not being attached to any Apigee X instance \n' f'All API proxy deployment will fail in this environment') else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/asm/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/asm/asm_rules_snapshot_test.py ================================================ # Copyright 2023 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import asm, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = asm project_id = 'gcpdiag-gke1-aaaa' ================================================ FILE: gcpdiag/lint/asm/err_2023_001_traffic_4xx.py ================================================ # Copyright 2023 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. """ASM traffic indicates Client side requests failure Server side logs from ASM proxies are having requests failing with 4XX errors """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_container', log_name='log_id("server-accesslog-stackdriver")', filter_str='httpRequest.status>=400 AND httpRequest.status<500', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if Cloud Logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if (log_entry['httpRequest']['status'] >= 400 or log_entry['httpRequest']['status'] < 500): return True except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/asm/err_2023_002_traffic_5xx.py ================================================ # Copyright 2023 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. """ASM traffic indicates Client side requests failure Server side logs from ASM proxies are having requests failing with 5XX errors """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_pod', log_name='log_id("client-accesslog-stackdriver")', filter_str='httpRequest.status>=500 AND httpRequest.status<600', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if Cloud Logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if (log_entry['httpRequest']['status'] >= 500 or log_entry['httpRequest']['status'] < 600): return True except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/asm/err_2024_001_secret_not_found.py ================================================ # Copyright 2023 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. """ Getting timed out error for secret not found for ingress gateway gRPC config: initial fetch timed out for type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret This means Ingress gateway is trying to get certs but failing. This could mean istiod is denying the requests or otherwise cannot access them. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = ( 'gRPC config: initial fetch timed out for' ' type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret') logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_container', log_name='log_id("stderr")', filter_str=f'textPayload:"{MATCH_STR_1}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['textPayload']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/asm/err_2024_002_istiod_resource_issues.py ================================================ # Copyright 2024 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. """ Sufficient resources (CPU and memory) then Istiod pods are scheduled. Insufficient memory or CPU resources can prevent Istiod pods from being scheduled, potentially leading to control plane malfunctions and disruptions in Anthos Service Mesh (ASM) functionality. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'Insufficient cpu' MATCH_STR_3 = 'Insufficient memory' MATCH_STR_2 = 'istiod-asm' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_pod', log_name='log_id("events")', filter_str=(f'jsonPayload.message=~"{MATCH_STR_1}" OR ' f'jsonPayload.message=~"{MATCH_STR_3}" AND ' f'jsonPayload.involvedObject.name:"{MATCH_STR_2}" '), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['jsonPayload']['message']: if MATCH_STR_2 in log_entry['jsonPayload']['involvedObject']['name']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/asm/snapshots/ERR_2023_001.txt ================================================ * asm/ERR/2023_001: ASM traffic indicates Client side requests failure (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/asm/snapshots/ERR_2023_002.txt ================================================ * asm/ERR/2023_002: ASM traffic indicates Client side requests failure (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/asm/snapshots/ERR_2024_001.txt ================================================ * asm/ERR/2024_001: Getting timed out error for secret not found for ingress gateway (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/asm/snapshots/ERR_2024_002.txt ================================================ * asm/ERR/2024_002: Sufficient resources (CPU and memory) then Istiod pods are scheduled. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/asm/snapshots/WARN_2023_001.txt ================================================ * asm/WARN/2023_001: gRCP Config stream reset event detected in istio proxies (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/asm/snapshots/WARN_2024_001.txt ================================================ * asm/WARN/2024_001: No webhook creation failures were found. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/asm/snapshots/WARN_2025_001.txt ================================================ * asm/WARN/2025_001: ASM: Envoy doesn't report connection failure (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/asm/snapshots/WARN_2025_002.txt ================================================ * asm/WARN/2025_002: Upstream connection established successfully with no protocol errors (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/asm/warn_2023_001_grpc_reset.py ================================================ # Copyright 2023 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. """gRCP Config stream reset event detected in istio proxies If the warning occur every 30sec it's expected behaviour, however for a more frequent frequency of these warning indicate issue with control plane. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs logs_by_project = {} MATCH_STRING = 'StreamAggregatedResources gRPC config stream closed' def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_container', log_name='log_id("stderr")', filter_str= 'textPayload=~"StreamAggregatedResources gRPC config stream closed"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if Cloud Logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STRING in log_entry['textPayload']: return True except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/asm/warn_2024_001_webhook.py ================================================ #Copyright 2023 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. """No webhook creation failures were found. Error calling webhook namespace.sidecar-injector.istio.io. Make sure endpoints are present for the service. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'Error creating: Internal error occurred: failed calling webhook ' MATCH_STR_2 = 'namespace.sidecar-injector.istio.io' MATCH_STR_3 = 'no endpoints available for service' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=(f'jsonPayload.message=~"{MATCH_STR_1}" AND ' f'jsonPayload.message=~"{MATCH_STR_2}" AND ' f'jsonPayload.message=~"{MATCH_STR_3}"')) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['jsonPayload']['message']: if MATCH_STR_2 in log_entry['jsonPayload']['message']: if MATCH_STR_3 in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/asm/warn_2025_001_delayedconnect111.py ================================================ # Copyright 2024 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. """ASM: Envoy doesn't report connection failure The error upstream_reset_before_response_started{remote_connection_failure, delayed_connect_error:_111} occurs when Envoy fails to establish a connection with the upstream service """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = ( 'upstream_reset_before_response_started{remote_connection_failure,' 'delayed_connect_error:_111}') MATCH_STR_2 = 'delayed connect error: 111' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_container', log_name='log_id("server-accesslog-stackdriver")', filter_str=( f'labels.response_details:"{MATCH_STR_1}" AND ' f'labels.upstream_transport_failure_reason=~"{MATCH_STR_2}"')) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['labels']['response_details']: if MATCH_STR_2 in log_entry['labels'][ 'upstream_transport_failure_reason']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/asm/warn_2025_002_protocolerror.py ================================================ # Copyright 2025 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. """Upstream connection established successfully with no protocol errors The error "upstream connect error or disconnect/reset before headers. reset reason: protocol error" typically occurs due to invalid/Duplicate headers being sent by backend application/pod. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'upstream_reset_before_response_started{protocol_error}' logs_by_project = {} def prepare_rule(context: models.Context): project_id = context.project_id logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_container', log_name='log_id("server-accesslog-stackdriver")', filter_str=f'labels.response_details:"{MATCH_STR_1}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['labels']['response_details']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in clusters.items(): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/bigquery/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/bigquery/bigquery_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import bigquery, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = bigquery project_id = 'gcpdiag-bigquery1-aaaa' ================================================ FILE: gcpdiag/lint/bigquery/err_2022_001_concurrent_dml_updates.py ================================================ # # 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. # Lint as: python3 """BigQuery jobs not failing due to concurrent DML updates on the same table Multiple DML queries running concurrently are conflicting with each other. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR_1 = 'Could not serialize access to table' MATCH_STR_2 = 'due to concurrent update' CONCURRENT_DML_FILTER = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR_1}" AND "{MATCH_STR_2}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(CONCURRENT_DML_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip entire rule if the BigQuery API is disabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: project_ok_flag = True logging_check_path = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') if ((MATCH_STR_1 not in logging_check_path) or (MATCH_STR_2 not in logging_check_path)): continue else: report.add_failed( project, 'has BigQuery jobs failing due to concurrent DML updates to table') project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2022_002_response_too_large.py ================================================ # # 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. # Lint as: python3 """BigQuery jobs are not failing due to results being larger than the maximum response size Query results for SQL queries in BigQuery that generate excessively large results and don't set a destination table fail with job error "responseTooLarge" """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Response too large to return' RESPONSE_TOO_LARGE = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(RESPONSE_TOO_LARGE)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: project_ok_flag = True if MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue else: report.add_failed( project, 'has BigQuery jobs failing because query results are larger than the ' 'maximum response size') project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2022_003_permission_denied_drive_credentials.py ================================================ # # 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. # Lint as: python3 """BigQuery jobs not failing while accessing data in Drive due to a permission issue BigQuery jobs are failing because the authentication token is missing the Google Drive access scope or the user/service account is not granted at least the Viewer role on the Drive file. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Permission denied while getting Drive credentials' MISSING_DRIVE_SCOPE = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(MISSING_DRIVE_SCOPE)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: project_ok_flag = True if MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue else: report.add_failed( project, 'has BigQuery jobs failing due to issues while accessing a file in Drive ' 'due to missing permissions on the file or missing Drive access scope' ) project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2022_004_exceeded_limit_shuffle.py ================================================ # # 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. # Lint as: python3 """BigQuery jobs are not failing due to shuffle operation resources exceeded The query job failed because the maximum disk and memory limit available for shuffle operations was exceeded for the project or organization. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ('Your project or organization exceeded the maximum disk and mem' 'ory limit available for shuffle operations') SHUFFLE_EXCEEDED = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(SHUFFLE_EXCEEDED)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'BigQuery api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: project_ok_flag = True if MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue else: report.add_failed( project, 'has BigQuery jobs failing due to shuffle operation resources ' 'exceeded during query execution') project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_001_job_not_found_error.py ================================================ # # 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. # Lint as: python3 """Jobs called via the API are all found BigQuery jobs have been requested via the API and they have not been found, this can be due to giving incorrect information in the call, such as jobID or location """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs #String the is unique to this error MATCH_STR = 'Not found: Job' #Where to look for the error JOB_NOT_FOUND = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', 'protoPayload.methodName="jobservice.getqueryresults"', f'protoPayload.status.message:("{MATCH_STR}")' ] logs_by_project = {} #Get the logs for the error def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com%2Fdata_access")', filter_str=' AND '.join(JOB_NOT_FOUND)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip the rule if bigquery is not enabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return #list of all found errors error_entries = set() #loop through the errors if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: #make sure we found the correct errors if MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue else: #add the error to the error list msg = log_entry['protoPayload']['status']['message'] job_id = msg.replace('Not found: Job ', '') error_entries.add(job_id) error_msg = ', '.join(itertools.islice(error_entries, 10)) if len(error_entries) > 10: error_msg += ', ...' #if there are no errors, report success if len(error_entries) == 0: report.add_ok(project) #if there are more than 10 errors, report failure else: #if there are errors, report them and what jobs had the error report.add_failed( project, 'This happens when calls to the API to find a job, that comeback with no answers.', (' Make sure to provide the correct region in the API call.' f'There were {len(error_entries)} jobs not found: {error_msg}')) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_002_dataset_not_found.py ================================================ # # 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. # Lint as: python3 """BigQuery hasn't reported any unknown datasets while performing copy tables operations While trying to copy a table, the dataset was not found """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs #String the is unique to this error MATCH_STR = 'Not found: Dataset' #Where to look for the error DS_NOT_FOUND = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', 'protoPayload.methodName="jobservice.insert"', f'protoPayload.status.message:("{MATCH_STR}")', ('protoPayload.serviceData.jobInsertRequest.resource' '.jobConfiguration.tableCopy.createDisposition="CREATE_IF_NEEDED"') ] logs_by_project = {} #Get the logs for the error def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com%2Fdata_access")', filter_str=' AND '.join(DS_NOT_FOUND)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip the rule if bigquery is not enabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return #list of all found errors error_entries = set() #loop through the errors if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: #make sure we found the correct errors if MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue else: #add the error to the error list msg = log_entry['protoPayload']['status']['message'] dataset_id = msg.replace(MATCH_STR, '') error_entries.add(dataset_id) error_msg = ', '.join(itertools.islice(error_entries, 10)) if len(error_entries) > 10: error_msg += ', ...' #if there are no errors, report success if len(error_entries) == 0: report.add_ok(project) else: #if there are errors, report them and what jobs had the error report.add_failed( project, ('While trying to copy a table a dataset' ' was not found. It may not exist or might be in a different region' ), (' Make sure the dataset exists and is in the same region' f'There were {len(error_entries)} datasets not found: {error_msg}')) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_003_resource_exceeded.py ================================================ # # Copyright 2021 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. # Lint as: python3 """BigQuery query job do not encounter resource exceeded error A BigQuery query sometimes could not be executed in the allotted memory """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ( 'Resources exceeded during query execution: The query could not be executed' ' in the allotted memory.') RESOURCE_EXCEEDED_FILTER = [ 'severity=ERROR', 'protoPayload.methodName="jobservice.jobcompleted"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(RESOURCE_EXCEEDED_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue job_id = get_path( log_entry, ( 'protoPayload', 'serviceData', 'jobCompletedEvent', 'job', 'jobName', 'jobId', ), ) report.add_failed( project, 'Some BigQuery query failed with Resource Exceeded Error : ' + job_id, ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_004_concurrent_dml.py ================================================ # # Copyright 2021 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. # Lint as: python3 """BigQuery query job do not encounter dml concurrency issue when mutating concurrently. Mutating DML Queries that run concurrently, end up conflicting with each other. For these DML queries to maintain consistency, in case there are multiple queries that run at roughly the same time, it's possible that one of them failed. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Could not serialize access to' CONCURRENT_MUTATION_FILTER = [ 'severity=ERROR', 'protoPayload.methodName="jobservice.jobcompleted"', f'protoPayload.status.message=~"{MATCH_STR}"', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(CONCURRENT_MUTATION_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue job_id = get_path( log_entry, ( 'protoPayload', 'serviceData', 'jobCompletedEvent', 'job', 'jobName', 'jobId', ), ) report.add_failed( project, 'Some BigQuery dml operations fail that run concurrently, as they end' ' up conflicting with each other : ' + job_id, ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_005_outdated_credentials_for_scheduled_queries.py ================================================ # # 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. # Lint as: python3 """Scheduled query not failing due to outdated credentials. If scheduled queries are failing with an INVALID_USER error, you might need to update the user credentials on the query. Credentials are automatically up to date for new scheduled queries. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Error code 5 : Authentication failure: User Id not found. Error code: INVALID_USERID' OUTDATED_CREDENTIAL_SCOPE = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(OUTDATED_CREDENTIAL_SCOPE)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: project_ok_flag = True for log_entry in logs_by_project[context.project_id].entries: if MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue else: report.add_failed( project, 'has outdated credentials for scheduled query. Please update the ' 'user credentials for the scheduled query') project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_006_bigquery_policy_do_not_belong_to_user.py ================================================ # # 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. # Lint as: python3 """An organization's policy doesn't block the BigQuery user domain. There can be domain restriction policies applied to customer's organization. The domain of the user that you are trying to share the BigQuery dataset with should be present in the list of "Allowed" fields for the constraint constraints/iam.allowedPolicyMemberDomains. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ( 'One or more users named in the policy do not belong to a permitted' ' customer') POLICY_DO_NOT_BELONG_TO_USER_FILTER = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_dataset', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(POLICY_DO_NOT_BELONG_TO_USER_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return project_ok_flag = True datasets = set() if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: if MATCH_STR in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): datasets.add(get_path( log_entry, ( 'protoPayload', 'resourceName', ), )) project_ok_flag = False if project_ok_flag: report.add_ok(project) else: report.add_failed( project, """The following datasets cannot be shared with some users due to 'Domain restricted sharing' organization policy constraint: \n""" + '\n'.join(str(d) for d in datasets), ) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_007_data_transfer_service_agent_does_not_exist.py ================================================ # 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. """Data Transfer Service Agent exists and has the required roles. Verify that the BigQuery Data Transfer service agent exists and has been granted the roles/bigquerydatatransfer.serviceAgent role. """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, iam ROLE = 'roles/bigquerydatatransfer.serviceAgent' def run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: project = crm.get_project(context.project_id) if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if not apis.is_enabled(context.project_id, 'bigquerydatatransfer'): report.add_skipped(project, 'bigquery data transfer api is disabled') return policy = iam.get_project_policy(context) dts_sa = f'service-{project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com' if iam.is_service_account_existing(dts_sa, context): if policy.has_role_permissions(f'serviceAccount:{dts_sa}', ROLE): report.add_ok(project) else: report.add_failed(project, (f'service account: {dts_sa}\n' f'missing role: {ROLE}')) else: report.add_failed(project, (f'service account: {dts_sa} is missing')) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_008_user_not_authorized_to_perform_this_action.py ================================================ # 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. """User has the required roles to create or modify scheduled queries. Verify that the user trying to create or modify scheduled queries has the role roles/bigquery.admin. If pub sub notification is configured, then user should also have permission pubsub.topics.getIamPolicy which is part of the role roles/pubsub.admin. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'User not authorized to perform this action' USER_NOT_AUTHORIZED = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='audited_resource', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(USER_NOT_AUTHORIZED), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return project_ok_flag = True useremail = '' pubsub = None if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: if MATCH_STR in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): useremail = get_path( log_entry, ( 'protoPayload', 'authenticationInfo', 'principalEmail', ), ) pubsub = get_path( log_entry, ( 'protoPayload', 'request', 'transferConfig', 'notificationPubsubTopic', ), ) project_ok_flag = False if project_ok_flag: report.add_ok(project) elif project_ok_flag is False and pubsub is not None: report.add_failed( project, 'User with principalEmail ' + useremail + ' does not have enough permissions to create or modify scheduled' ' queries with pub sub notifications.', ) else: report.add_failed( project, 'User with principalEmail ' + useremail + ' does not have enough permissions to create or modify scheduled' ' queries.', ) ================================================ FILE: gcpdiag/lint/bigquery/err_2023_009_not_consistent_with_destination_dataset.py ================================================ # Copyright 2023 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. """BigQuery job not failed due to Scheduled query with multiple DML Destination/Target dataset can only be set up for scheduled queries with one single DML statement. When two DML statements are present the second DML statement will not pick up the correct destination/target dataset and will throw an error. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ( "Dataset specified in the query ('') is not consistent with Destination" ' dataset') FILTER = [ 'severity=ERROR', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_dts_config', log_name=( 'log_id("bigquerydatatransfer.googleapis.com%2Ftransfer_config")'), filter_str=' AND '.join(FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return project_ok_flag = True config_id_set = set() if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): #loop through the errors for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if MATCH_STR not in get_path(log_entry, ('jsonPayload', 'message'), default=''): continue config_id = get_path(log_entry, ('resource', 'labels', 'config_id')) if config_id not in config_id_set: report.add_failed( project, 'Scheduled Query failed due to Scheduled query with multiple DML \n' + config_id) config_id_set.add(config_id) project_ok_flag = False if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/err_2024_001_query_too_complex.py ================================================ # # Copyright 2024 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. # Lint as: python3 """BigQuery jobs are not failing due to too many subqueries or query is too complex The query is failing with Resources exceeded during query execution. This usually happens when VIEWs, WITH clauses and SQL UDFs are inlined/expanded in query and then we measure query complexity. Nested inlining could cause exponential growth in complexity,Sometimes customers use WITH clause as substitution for temp tables. It is not a good practice and they could use scripts and temp tables instead. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ( 'Not enough resources for query planning - too many subqueries or query is' ' too complex') QUERY_COMPLEX = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(QUERY_COMPLEX), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'BigQuery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: project_ok_flag = True if MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue else: report.add_failed( project, 'has BigQuery jobs failing due to high complexity. Please optimize' ' the query', ) project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2022_001.txt ================================================ * bigquery/ERR/2022_001: BigQuery jobs not failing due to concurrent DML updates on the same table - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2022_002.txt ================================================ * bigquery/ERR/2022_002: BigQuery jobs are not failing due to results being larger than the maximum response size - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2022_003.txt ================================================ * bigquery/ERR/2022_003: BigQuery jobs not failing while accessing data in Drive due to a permission issue - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2022_004.txt ================================================ * bigquery/ERR/2022_004: BigQuery jobs are not failing due to shuffle operation resources exceeded - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_001.txt ================================================ * bigquery/ERR/2023_001: Jobs called via the API are all found - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_002.txt ================================================ * bigquery/ERR/2023_002: BigQuery hasn't reported any unknown datasets while performing copy tables operations - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_003.txt ================================================ * bigquery/ERR/2023_003: BigQuery query job do not encounter resource exceeded error - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_004.txt ================================================ * bigquery/ERR/2023_004: BigQuery query job do not encounter dml concurrency issue when mutating concurrently. - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_005.txt ================================================ * bigquery/ERR/2023_005: Scheduled query not failing due to outdated credentials. - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_006.txt ================================================ * bigquery/ERR/2023_006: An organization's policy doesn't block the BigQuery user domain. - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_007.txt ================================================ * bigquery/ERR/2023_007: Data Transfer Service Agent exists and has the required roles. - projects/gcpdiag-cloudsql1-aaaa [SKIP] bigquery data transfer api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_008.txt ================================================ * bigquery/ERR/2023_008: User has the required roles to create or modify scheduled queries. - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2023_009.txt ================================================ * bigquery/ERR/2023_009: BigQuery job not failed due to Scheduled query with multiple DML - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/ERR_2024_001.txt ================================================ * bigquery/ERR/2024_001: BigQuery jobs are not failing due to too many subqueries or query is too complex - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2022_001.txt ================================================ * bigquery/WARN/2022_001: BigQuery does not exceed rate limits - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2022_002.txt ================================================ * bigquery/WARN/2022_002: BigQuery does not violate column level security - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2022_003.txt ================================================ * bigquery/WARN/2022_003: BigQuery copy job does not exceed the daily copy quota - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2022_004.txt ================================================ * bigquery/WARN/2022_004: BigQuery copy job does not exceed the cross-region daily copy quota - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2023_001.txt ================================================ * bigquery/WARN/2023_001: BigQuery query job does not time out during execution - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2023_002.txt ================================================ * bigquery/WARN/2023_002: No errors querying wildcard tables - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2023_003.txt ================================================ * bigquery/WARN/2023_003: BigQuery query job does not fail with too many output columns error - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2023_004.txt ================================================ * bigquery/WARN/2023_004: BigQuery CMEK-related operations do not fail due to missing permissions - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2024_001.txt ================================================ * bigquery/WARN/2024_001: BigQuery table does not exceed import or query appends per table - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2024_002.txt ================================================ * bigquery/WARN/2024_002: BigQuery external connection with Cloud SQL does not fail - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2024_003.txt ================================================ * bigquery/WARN/2024_003: BigQuery job does not fail due to Maximum API requests per user per method exceeded. - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2024_004.txt ================================================ * bigquery/WARN/2024_004: BigQuery job not exceeding the concurrent queries limit for remote functions. - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2024_005.txt ================================================ * bigquery/WARN/2024_005: BigQuery table does not exceed number of partition modifications to a column partitioned table - projects/gcpdiag-cloudsql1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/snapshots/WARN_2024_006.txt ================================================ * bigquery/WARN/2024_006: BigQuery job does not exceed tabledata.list bytes per second per project - projects/gcpdiag-cloudsql1-aaaa [SKIP] Logging api is disabled ================================================ FILE: gcpdiag/lint/bigquery/warn_2022_001_exceeded_rate_limits.py ================================================ # # Copyright 2021 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. # Lint as: python3 """BigQuery does not exceed rate limits BigQuery has various quotas that limit the rate and volume of incoming requests. These quotas exist both to protect the backend systems, and to help guard against unexpected billing if you submit large jobs. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'xceeded rate limits' RATE_LIMITS_FILTER = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', 'protoPayload.serviceData.jobCompletedEvent.job.jobStatus.' f'additionalErrors.message:"{MATCH_STR}"' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(RATE_LIMITS_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue report.add_failed( project, 'exceeded rate limits. Kindly slow down the request rate.') return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2022_002_column_level_security.py ================================================ # # Copyright 2021 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. # Lint as: python3 """BigQuery does not violate column level security BigQuery provides fine-grained access to sensitive columns using policy tags. Using BigQuery column-level security, you can create policies that check, at query time, whether a user has proper access. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ('Access Denied: BigQuery BigQuery: User does not have permission ' 'to access data protected by policy tag') COLUMN_LEVEL_SECURITY_FILTER = [ 'severity=ERROR', f'protoPayload.status.message:"{MATCH_STR}"' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(COLUMN_LEVEL_SECURITY_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue report.add_failed(project, 'found viloations on BigQuery column level security') return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2022_003_copy_job_quota.py ================================================ # # 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. # Lint as: python3 """BigQuery copy job does not exceed the daily copy quota This rule verifies that there are no log entries reporting that the number of copy jobs running in a project exceeded the daily limit """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Quota exceeded: Your project exceeded quota for copies per project.' COPY_QUOTA_EXCEEDED = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(COPY_QUOTA_EXCEEDED)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip entire rule if the BigQuery API is disabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'BigQuery api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: project_ok_flag = True logging_check_path = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') if MATCH_STR not in logging_check_path: continue else: report.add_failed( project, 'Quota exceeded: Your project exceeded quota for copies per project.' ) project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2022_004_cross_region_copy_job_quota.py ================================================ # # 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. # Lint as: python3 """BigQuery copy job does not exceed the cross-region daily copy quota This rule verifies that there are no log entries reporting that the number of cross-region copy jobs running in a project exceeded the daily limit. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR1 = 'Quota exceeded: Your project exceeded quota for cross region copies per project.' MATCH_STR2 = 'Quota exceeded: Your table exceeded quota for cross region copies per table.' CROSS_REGION_COPY_QUOTA_EXCEEDED = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR1}" OR "{MATCH_STR2}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(CROSS_REGION_COPY_QUOTA_EXCEEDED)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip entire rule if the BigQuery API is disabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'BigQuery api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: project_ok_flag = True logging_check_path = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') if (MATCH_STR1 and MATCH_STR2) not in logging_check_path: continue elif (MATCH_STR1 or MATCH_STR2) in logging_check_path: error_message = MATCH_STR1 if MATCH_STR1 in logging_check_path else MATCH_STR2 report.add_failed( project, logs.format_log_entry(log_entry)[:25] + ' ' + error_message) project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2023_001_query_job_timed_out.py ================================================ # # Copyright 2021 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. # Lint as: python3 """BigQuery query job does not time out during execution A BigQuery query or multi-statement query job can execute for up to six hours, after which it times out and fails. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Operation timed out after 6.0 hours' OPERATION_TIMED_OUT_FILTER = [ 'severity=ERROR', 'protoPayload.methodName="jobservice.jobcompleted"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(OPERATION_TIMED_OUT_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue job_id = get_path( log_entry, ( 'protoPayload', 'serviceData', 'jobCompletedEvent', 'job', 'jobName', 'jobId', ), ) report.add_failed( project, 'Some BigQuery query jobs timed out. A sample failed job : ' + job_id) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2023_002_wildcard_tables_query.py ================================================ # # 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. # Lint as: python3 """No errors querying wildcard tables A query has been used on a wildcard table and the field was not found """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs #String the is unique to this error MATCH_STR = 'Unrecognized name:' #Where to look for the error ERROR_IN_LOGGING = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', r'protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.referencedTables.tableId=~"\*$"', f'protoPayload.serviceData.jobCompletedEvent.job.jobStatus.error.message:"{MATCH_STR}"' ] logs_by_project = {} #Get the logs for the error def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com%2Fdata_access")', filter_str=' AND '.join(ERROR_IN_LOGGING)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip the rule if bigquery is not enabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return #list of all found errors error_entries = [] #loop through the errors if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: #make sure we found the correct errors if MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue else: #add the error to the error list error_entries.append(log_entry['protoPayload']['status']['message']) #if there are no errors, report success if len(error_entries) == 0: report.add_ok(project) #if there are more than 10 errors, report failure elif len(error_entries) >= 1: report.add_failed( project, ('There have been errors in your project' ' where a field was not found in a query using a wildcard table'), ' to prevent this, please rewrite your query or change the tables schema' ) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2023_003_too_many_output_column.py ================================================ # # Copyright 2021 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. # Lint as: python3 """BigQuery query job does not fail with too many output columns error This issue is caused when a job cannot be completed within a memory budget because of the possibility of user's schema being too large and nested. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Resources exceeded during query execution: Too many output columns' TOO_MANY_OUTPUT_COLUMNS_FILTER = [ 'severity=ERROR', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(TOO_MANY_OUTPUT_COLUMNS_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue job_id = get_path( log_entry, ( 'protoPayload', 'serviceData', 'jobCompletedEvent', 'job', 'jobName', 'jobId', ), ) report.add_failed( project, 'BigQuery job failed with Too many output columns. A sample failed job : ' + job_id) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2023_004_bigquery_kms_errors.py ================================================ # # Copyright 2021 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. # Lint as: python3 """BigQuery CMEK-related operations do not fail due to missing permissions BigQuery CMEK-related operations will fail if the BigQuery encryption service account for that project does not have the permission to encrypt and decrypt using that CMEK KMS key. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ( 'Please grant Cloud KMS CryptoKey Encrypter/Decrypter role to BigQuery' ' service account') BQ_KMS_ERROR_FILTER = [ 'severity=ERROR', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(BQ_KMS_ERROR_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if context.project_id in logs_by_project: logs_ = logs_by_project.get(context.project_id) if logs_: for log_entry in logs_.entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue error_message = get_path( log_entry, ('protoPayload', 'status', 'message'), ) bq_sa = error_message.split( 'Please grant Cloud KMS CryptoKey Encrypter/Decrypter role to' ' BigQuery service account: ')[-1] report.add_failed( project, 'BigQuery encryption service account missing Cloud KMS CryptoKey' ' Encrypter/Decrypter IAM role : ' + bq_sa, ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2024_001_imports_or_query_appends_per_table.py ================================================ # # Copyright 2024 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. # Lint as: python3 """BigQuery table does not exceed import or query appends per table BigQuery returns this error message when your table reaches the limit for table operations per day for Standard tables. Table operations include the combined total of all load jobs, copy jobs, and query jobs that append or overwrite a destination table. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Your table exceeded quota for imports or query appends per table' IMPORTS_APPENDS_EXCEEDED = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(IMPORTS_APPENDS_EXCEEDED), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip entire rule if the BigQuery API is disabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'BigQuery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: project_ok_flag = True logging_check_path = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') if MATCH_STR not in logging_check_path: continue else: report.add_failed( project, 'Quota exceeded: Your table exceeded quota for imports or query' ' appends per table', ) project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2024_002_invalid_external_connection.py ================================================ # # Copyright 2024 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. # Lint as: python3 """BigQuery external connection with Cloud SQL does not fail When connecting with Cloud SQL external connection using bigquery the BigQuery Connection Service Agent is automatically created and given an IAM role as Cloud SQL client. If the role doesn't exists, query over the associated data source connection fails. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Invalid table-valued function EXTERNAL_QUERY\nFailed to connect to' EXTERNAL_CONNECTION_ERROR = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(EXTERNAL_CONNECTION_ERROR), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled project_ok_flag = True if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip entire rule if the BigQuery API is disabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'BigQuery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: logging_check_path = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') if MATCH_STR not in logging_check_path: continue else: report.add_failed( project, 'BigQuery external connection with Cloud SQL failed due to missing ' 'permissions of BigQuery connection service agent', ) project_ok_flag = False break if project_ok_flag: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2024_003_too_many_concurrent_api_requests.py ================================================ # # Copyright 2024 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. # Lint as: python3 """BigQuery job does not fail due to Maximum API requests per user per method exceeded. BigQuery returns Quota exceeded or Exceeded rate limits error when you hit the rate limit for the number of API requests to a BigQuery API per user per method. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'too many API requests per user per method for this user_method' TOO_MANY_API_REQUESTS_FILTER = [ 'severity=ERROR', f'protoPayload.status.message =~ ("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(TOO_MANY_API_REQUESTS_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue method_name = get_path(log_entry, ('protoPayload', 'methodName')) report.add_failed( project, f'BigQuery user_method ({method_name}) exceeded quota for concurrent' ' api requests per user per method', ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2024_004_too_many_concurrent_queries.py ================================================ # # Copyright 2024 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. # Lint as: python3 """BigQuery job not exceeding the concurrent queries limit for remote functions. BigQuery encountered a "Exceeded rate limits" error. This means the number of queries simultaneously using remote functions surpassed a predefined threshold to ensure system stability. To avoid overloading the system, BigQuery restricts the number of concurrent operations. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'too many concurrent queries with remote functions for this project' RATE_LIMITS_FILTER = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(RATE_LIMITS_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip entire rule if the BigQuery API is disabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'BigQuery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue report.add_failed( project, 'Exceeded rate limits: too many concurrent queries with remote' ' functions for this project', ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2024_005_exceeded_partition_modifications.py ================================================ # # Copyright 2024 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. # Lint as: python3 """BigQuery table does not exceed number of partition modifications to a column partitioned table BigQuery returns this error when your column-partitioned table reaches the quota of the number of partition modifications permitted per day. Partition modifications include the total of all load jobs, copy jobs, and query jobs that append or overwrite a destination partition. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Your table exceeded quota for Number of partition modifications' QUOTA_EXCEEDED = [ 'severity=ERROR', 'protoPayload.methodName="jobservice.jobcompleted"', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(QUOTA_EXCEEDED), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue job_id = get_path( log_entry, ( 'protoPayload', 'serviceData', 'jobCompletedEvent', 'job', 'jobName', 'jobId', ), ) report.add_failed( project, 'Exceeded quota for number of partition modifications per' ' column-partitioned table per day. Please check failed job ' + job_id + ' for more details.', ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/bigquery/warn_2024_006_tabledata_list_bytes_exceeded.py ================================================ # # Copyright 2024 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. # Lint as: python3 """BigQuery job does not exceed tabledata.list bytes per second per project BigQuery returns this error when the project number mentioned in the error message reaches the maximum size of data that can be read through the tabledata.list API call in a project per second. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'tabledata.list bytes per second per project' LOG_FILTER = [ 'severity>=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.status.message:("{MATCH_STR}")', ] project_logs = {} def prepare_rule(context: models.Context): project_logs[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # skip entire rule if the BigQuery API is disabled if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'BigQuery api is disabled') return if (project_logs.get(context.project_id) and project_logs[context.project_id].entries): for log_entry in project_logs[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue job_id = get_path( log_entry, ( 'protoPayload', 'serviceData', 'jobGetQueryResultsResponse', 'job', 'jobName', 'jobId', ), ) report.add_failed( project, 'Exceeded maximum tabledata.list bytes per second per project' ' limit. Try spacing out requests over a longer period with' ' delays. Please check failed job ' + job_id + ' for more details.', ) return report.add_ok(project) ================================================ FILE: gcpdiag/lint/billing/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/billing/billing_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from unittest import mock from gcpdiag.lint import billing, snapshot_test_base from gcpdiag.queries import apis_stub @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = billing project_id = 'gcpdiag-billing1-aaaa' ================================================ FILE: gcpdiag/lint/billing/snapshots/WARN_2022_001.txt ================================================ * billing/WARN/2022_001: Projects have billing enabled - projects/gcpdiag-billing1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/billing/snapshots/WARN_2022_002.txt ================================================ * billing/WARN/2022_002: Billing Accounts have at least one project associated with them - projects/gcpdiag-billing1-aaaa [ OK ] Billing account has projects linked correctly. ================================================ FILE: gcpdiag/lint/billing/snapshots/WARN_2022_003.txt ================================================ * billing/WARN/2022_003: Check for any billing anomalies using cost insights - projects/gcpdiag-billing1-aaaa [FAIL] This is a cost anomaly. The aggregated gross cost for the specified target resource list and cost slice is significantly different from the aggregated forecasted cost. Cost Below forecast, Forecasted: 80 USD, Actual: 16 USD Anomaly Period From: 2021-04-20T07:00:00Z, To: 2021-04-21T07:00:00Z Cost Anomaly Found Cost insights are part of the Recommender service, and you can use them to find important patterns in your costs. For example, you see a cost insight in the Insights API if your costs for a day are significantly higher or lower than your typical daily costs. You can use this information to find out if some of your resources are getting more usage than expected, and take action to optimize your costs. https://gcpdiag.dev/rules/billing/WARN/2022_003 ================================================ FILE: gcpdiag/lint/billing/warn_2022_001_project_billing_enabled.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Projects have billing enabled Check whether all projects the user has permission to view have billing enabled. """ from gcpdiag import lint, models from gcpdiag.queries import apis, billing, crm all_project_billing_info = [] def prepare_rule(context: models.Context): all_project_billing_info.extend( crm.get_all_projects_in_parent(context.project_id)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'cloudbilling'): # an API error is raised billing.get_billing_info(context.project_id) return if len(all_project_billing_info) == 0: report.add_skipped(None, 'Permission Denied') return for project_billing_info in all_project_billing_info: project = crm.get_project(project_billing_info.project_id) if not project_billing_info.is_billing_enabled(): report.add_failed(project) return # all projects have billing enabled report.add_ok(crm.get_project(context.project_id)) ================================================ FILE: gcpdiag/lint/billing/warn_2022_002_stray_billing_accounts.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Billing Accounts have at least one project associated with them Check whether all active billing accounts the user has permission to view have at least one project associated with them. """ from gcpdiag import lint, models from gcpdiag.queries import apis, billing, crm all_account_billing_info = [] def prepare_rule(context: models.Context): billing_accounts = billing.get_all_billing_accounts(context.project_id) if billing_accounts: all_account_billing_info.extend(billing_accounts) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'cloudbilling'): # an API error is raised billing.get_billing_info(context.project_id) return if len(all_account_billing_info) == 0: report.add_skipped(None, 'Billing Account Permission Denied') return project = crm.get_project(context.project_id) for billing_account in all_account_billing_info: if not len(billing_account.list_projects(context)) > 0: report.add_failed(billing_account, 'billing account does not have any ' 'projects') return # all billing account have projects associated with them report.add_ok(project, 'Billing account has projects linked correctly.') ================================================ FILE: gcpdiag/lint/billing/warn_2022_003_cost_anomalies.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Check for any billing anomalies using cost insights Cost insights are part of the Recommender service, and you can use them to find important patterns in your costs. For example, you see a cost insight in the Insights API if your costs for a day are significantly higher or lower than your typical daily costs. You can use this information to find out if some of your resources are getting more usage than expected, and take action to optimize your costs. """ from gcpdiag import lint, models from gcpdiag.queries import apis, billing, crm cost_insights = {} def prepare_rule(context: models.Context): billing_account = billing.get_billing_account(context.project_id) if billing_account: cost_insights['insights'] = billing.get_cost_insights_for_a_project( context.project_id) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'cloudbilling'): # an API error is raised billing.get_billing_info(context.project_id) return if not cost_insights: report.add_skipped( None, 'Billing Account Permission Denied or Project Billing Disabled') return project = crm.get_project(context.project_id) cost_insight = cost_insights['insights'] anomaly_found = False for cost_insight in cost_insights['insights']: if cost_insight.is_anomaly(): report.add_failed(project, 'Cost Anomaly Found', cost_insight.build_anomaly_description()) anomaly_found = True if not anomaly_found: # no cost anomalies found report.add_ok(project, 'No cost anomalies found.') ================================================ FILE: gcpdiag/lint/cloudrun/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/cloudrun/cloud_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import cloudrun, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = cloudrun project_id = 'gcpdiag-cloudrun1-aaaa' ================================================ FILE: gcpdiag/lint/cloudrun/err_2022_001_missing_cloudrun_serviceagent_role.py ================================================ # 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. # Lint as: python3 """Cloud Run service agent has the run.serviceAgent role. The Cloud Run Service Agent is missing the run.serviceAgent role, which gives Cloud Run service account access to managed resources. You can resolve this error by granting the run.serviceAgent IAM role to service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com. """ from gcpdiag import lint, models from gcpdiag.queries import cloudrun, crm, iam ROLE = 'roles/run.serviceAgent' def run_rule(context: models.Context, report: lint.LintReportRuleInterface): services = cloudrun.get_services(context) if not services: report.add_skipped(None, f'no services found {context}') return project = crm.get_project(context.project_id) sa_email = f'service-{project.number}@serverless-robot-prod.iam.gserviceaccount.com' iam_policy = iam.get_project_policy(context) if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE): report.add_failed(project, f'service account: {sa_email}\nmissing role: {ROLE}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/cloudrun/snapshots/ERR_2022_001.txt ================================================ * cloudrun/ERR/2022_001: Cloud Run service agent has the run.serviceAgent role. - projects/gcpdiag-cloudrun1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/cloudsql/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/cloudsql/bp_2023_001_public_ip.py ================================================ # Copyright 2021 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. # Lint as: python3 """Cloud SQL is not assigned Public IP. To lower your attack surface, Cloud SQL databases should not have public IPs. Private IPs provide improved network security and lower latency for your application. """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = cloudsql.get_instances(context) if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if instance.has_public_ip: report.add_failed(instance, f'{instance.name} is having Public IP') else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/bp_2023_002_automated_backup.py ================================================ # Copyright 2023 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. # Lint as: python3 """Cloud SQL is configured with automated backup Backups help you restore lost data to your Cloud SQL instance. Additionally, if an instance is having a problem, you can restore it to a previous state by using the backup to overwrite it. Enable automated backups for any instance that contains necessary data. Backups protect your data from loss or damage. """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = cloudsql.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if not instance.is_automated_backup_enabled: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/bp_2023_003_log_output_flag.py ================================================ # Copyright 2023 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. # Lint as: python3 """Cloud SQL instance's log_output flag is not configured as TABLE If you set log_output to TABLE, the log output is placed in a table in the mysql system database. It might consume a considerable amount of disk space. If this table becomes large, it can affect instance restart time or cause the instance to lose its SLA coverage. For this reason, the TABLE option is not recommended. """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = cloudsql.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if instance.is_log_output_configured_as_table: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/bp_ext_2023_001_maint_window.py ================================================ # Copyright 2023 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. # Lint as: python3 """Cloud SQL is defined with Maintenance Window as any. Configure a maintenance window for your primary instance to control when disruptive updates can occur. """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = cloudsql.get_instances(context) if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if instance.has_maint_window == 0: report.add_failed( instance, f'{instance.name} is defined with Maintenance Window as Any') else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/bp_ext_2023_002_del_protection.py ================================================ # Copyright 2023 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. # Lint as: python3 """Cloud SQL should be configured with Deletion Protection Protect your CloudSQL instance and backups from accidental deletion """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = cloudsql.get_instances(context) if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if not instance.has_del_protection: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/bp_ext_2023_003_auto_storage_increases.py ================================================ # Copyright 2023 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. # Lint as: python3 """Cloud SQL enables automatic storage increases feature Configure storage to accommodate critical database maintenance by enabling the automatic storage increases feature. Otherwise, ensure that you have at least 20% available space to accommodate any critical database maintenance operations that Cloud SQL may perform. Keep in mind that when an instance becomes unable to add storage that it needs, the instance likely stops accepting incoming connections and could go offline. """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = cloudsql.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if not instance.is_storage_auto_resize_enabled: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/bp_ext_2023_004_sla.py ================================================ # Copyright 2023 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. # Lint as: python3 """Cloud SQL instance is covered by the SLA Only Cloud SQL instances configured for high availability with at least one dedicated CPU are covered by the Cloud SQL SLA. Shared-core instances and single-zone instances are not covered by the SLA. These machine types are configured to use a shared-core CPU, and are designed to provide low-cost test and development instances only. Don't use them for production instances. """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = cloudsql.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if instance.is_shared_core or not instance.is_high_available: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/cloudsql_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import cloudsql, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = cloudsql project_id = 'gcpdiag-cloudsql1-aaaa' ================================================ FILE: gcpdiag/lint/cloudsql/err_2023_001_instance_in_suspended.py ================================================ # Copyright 2023 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. # Lint as: python3 """Cloud SQL instance should not be in SUSPENDED state The SUSPENDED state indicates a billing issue with your Google Cloud account. You can determine your billing status by filing a Billing Support Request. After the billing issue is resolved, the instance returns to runnable status within a few hours. Note that suspended MySQL instances are deleted after 90 days. """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = cloudsql.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if instance.is_suspended_state: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/sec_2023_001_public_acess.py ================================================ # Copyright 2021 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. # Lint as: python3 """Cloud SQL is not publicly accessible. Your SQL instance has 0.0.0.0/0 as an allowed network. This occurrence means that any IPv4 client can pass the network firewall and make login attempts to your instance, including clients you might not have intended to allow. Clients still need valid credentials to successfully log in to your instance. """ from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = cloudsql.get_instances(context) if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if '0.0.0.0/0' in instance.is_publically_accessible: report.add_failed( instance, f'{instance.name} is having 0.0.0.0/0 as an allowed network') else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/BP_2023_001.txt ================================================ * cloudsql/BP/2023_001: Cloud SQL is not assigned Public IP. - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ] ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/BP_2023_002.txt ================================================ * cloudsql/BP/2023_002: Cloud SQL is configured with automated backup - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL] Backups help you restore lost data to your Cloud SQL instance. Additionally, if an instance is having a problem, you can restore it to a previous state by using the backup to overwrite it. Enable automated backups for any instance that contains necessary data. Backups protect your data from loss or damage. https://gcpdiag.dev/rules/cloudsql/BP/2023_002 ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/BP_2023_003.txt ================================================ * cloudsql/BP/2023_003: Cloud SQL instance's log_output flag is not configured as TABLE - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ] ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/BP_EXT_2023_001.txt ================================================ * cloudsql/BP_EXT/2023_001: Cloud SQL is defined with Maintenance Window as any. - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL] sql1 is defined with Maintenance Window as Any Configure a maintenance window for your primary instance to control when disruptive updates can occur. https://gcpdiag.dev/rules/cloudsql/BP_EXT/2023_001 ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/BP_EXT_2023_002.txt ================================================ * cloudsql/BP_EXT/2023_002: Cloud SQL should be configured with Deletion Protection - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL] Protect your CloudSQL instance and backups from accidental deletion https://gcpdiag.dev/rules/cloudsql/BP_EXT/2023_002 ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/BP_EXT_2023_003.txt ================================================ * cloudsql/BP_EXT/2023_003: Cloud SQL enables automatic storage increases feature - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ] ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/BP_EXT_2023_004.txt ================================================ * cloudsql/BP_EXT/2023_004: Cloud SQL instance is covered by the SLA - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL] Only Cloud SQL instances configured for high availability with at least one dedicated CPU are covered by the Cloud SQL SLA. Shared-core instances and single-zone instances are not covered by the SLA. These machine types are configured to use a shared-core CPU, and are designed to provide low-cost test and development instances only. Don't use them for production instances. https://gcpdiag.dev/rules/cloudsql/BP_EXT/2023_004 ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/ERR_2023_001.txt ================================================ * cloudsql/ERR/2023_001: Cloud SQL instance should not be in SUSPENDED state - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ] ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/SEC_2023_001.txt ================================================ * cloudsql/SEC/2023_001: Cloud SQL is not publicly accessible. - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ] ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/WARN_2022_001.txt ================================================ * cloudsql/WARN/2022_001: Cloud SQL is not using Docker bridge network. - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL] sql1 is inside of Docker bridge network The IP range 172.17.0.0/16 is reserved for the Docker bridge network. Any Cloud SQL instances created with an IP in that range will be unreachable. Connections from any IP within that range to Cloud SQL instances using private IP fail. https://gcpdiag.dev/rules/cloudsql/WARN/2022_001 ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/WARN_2023_002.txt ================================================ * cloudsql/WARN/2023_002: Cloud SQL instance's avg CPU utilization is not over 98% for 6 hours - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ] ================================================ FILE: gcpdiag/lint/cloudsql/snapshots/WARN_2023_003.txt ================================================ * cloudsql/WARN/2023_003: Cloud SQL instance's memory usage does not exceed 90% - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ] ================================================ FILE: gcpdiag/lint/cloudsql/warn_2022_001_docker_bridge_network.py ================================================ # Copyright 2021 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. # Lint as: python3 """Cloud SQL is not using Docker bridge network. The IP range 172.17.0.0/16 is reserved for the Docker bridge network. Any Cloud SQL instances created with an IP in that range will be unreachable. Connections from any IP within that range to Cloud SQL instances using private IP fail. """ import ipaddress from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql DOCKER_BRIDGE_NETWORK = ipaddress.ip_network('172.17.0.0/16') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = cloudsql.get_instances(context) if not instances: report.add_skipped(None, 'no CloudSQL instances found') return for instance in instances: if any(_is_docker_bridge_ip(ip) for ip in instance.ip_addresses): report.add_failed(instance, f'{instance.name} is inside of Docker bridge network') else: report.add_ok(instance) def _is_docker_bridge_ip(ip: ipaddress.IPv4Address) -> bool: return ip in DOCKER_BRIDGE_NETWORK ================================================ FILE: gcpdiag/lint/cloudsql/warn_2023_002_high_cpu_usage.py ================================================ # 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. """Cloud SQL instance's avg CPU utilization is not over 98% for 6 hours If CPU utilization is over 98% for six hours, your instance is not properly sized for your workload, and it is not covered by the SLA. """ from typing import Dict from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, cloudsql, monitoring CPU_USAGE_THRESHOLD = 0.98 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = cloudsql.get_instances(context) if not instances_by_project[context.project_id]: return _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, f""" fetch cloudsql_database | metric 'cloudsql.googleapis.com/database/cpu/utilization' | group_by 6h, [value_utilization_mean: mean(value.utilization)] | every 5m | filter val() >= {CPU_USAGE_THRESHOLD} """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'no CloudSQL instances found') return overloaded_instances = set() for ts in _query_results_per_project_id[context.project_id].values(): try: # project_id:instance_name full_name = get_path(ts, ('labels', 'resource.database_id')) overloaded_instances.add(full_name.split(':')[1]) except (KeyError, IndexError): continue for instance in instances: if instance.name in overloaded_instances: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/cloudsql/warn_2023_003_high_mem_usage.py ================================================ # 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. """Cloud SQL instance's memory usage does not exceed 90% If you have less than 10% memory in database/memory/components.cache and database/memory/components.free combined, the risk of an OOM event is high. """ from typing import Dict from boltons.iterutils import get_path from gcpdiag import config, lint, models from gcpdiag.queries import apis, cloudsql, monitoring MEM_USAGE_THRESHOLD = 90 # 0 ~ 100 scale _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = cloudsql.get_instances(context) if not instances_by_project[context.project_id]: return within_str = 'within %dd, d\'%s\'' % (config.get('within_days'), monitoring.period_aligned_now(60)) _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, f""" fetch cloudsql_database | metric 'cloudsql.googleapis.com/database/memory/components' | group_by 6h, [value_components_max: max(value.components)] | filter metric.component = 'Usage' | every 6h | filter val() >= {MEM_USAGE_THRESHOLD} | {within_str} """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'sqladmin'): report.add_skipped(None, 'sqladmin is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'no CloudSQL instances found') return overloaded_instances = set() for ts in _query_results_per_project_id[context.project_id].values(): try: # project_id:instance_name full_name = get_path(ts, ('labels', 'resource.database_id')) overloaded_instances.add(full_name.split(':')[1]) except (KeyError, IndexError): continue for instance in instances: if instance.name in overloaded_instances: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/command.py ================================================ # Copyright 2021 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. # Lint as: python3 """gcpdiag lint command.""" import argparse import importlib import logging import pkgutil import re import sys from typing import List, Optional from google.auth import exceptions from gcpdiag import config, hooks, lint, models, utils from gcpdiag.lint.output import (api_output, csv_output, json_output, terminal_output) from gcpdiag.queries import apis, crm, gce, kubectl class ParseMappingArg(argparse.Action): """Takes a string argument and parse argument""" def __call__(self, parser, namespace, values, option_string): if values: if values[0] == '{' and values[-1] == '}': values = values[1:-1] values = re.split('[ ,]', values) parsed_dict = {} for value in values: if value: try: k, v = re.split('[:=]', value) parsed_dict[k] = v except ValueError: parser.error( f'argument {option_string} expected key:value, received {value}' ) setattr(namespace, self.dest, parsed_dict) def _flatten_multi_arg(arg_list): """Flatten a list of comma-separated values, like: ['a', 'b, c'] -> ['a','b','c'] """ for arg in arg_list: yield from re.split(r'\s*,\s*', arg) def init_args_parser(): parser = argparse.ArgumentParser( description='Run diagnostics in GCP projects.', prog='gcpdiag lint') parser.add_argument( '--auth-adc', help='Authenticate using Application Default Credentials (default)', action='store_true') parser.add_argument( '--auth-key', help='Authenticate using a service account private key file', metavar='FILE') parser.add_argument('--auth-oauth', help=argparse.SUPPRESS, action='store_true') parser.add_argument('--universe-domain', type=str, default=config.get('universe_domain'), help='Domain name of APIs') parser.add_argument('--project', metavar='P', required=True, help='Project ID of project to inspect') parser.add_argument( '--name', nargs='+', metavar='n', help='Resource Name(s) to inspect (e.g.: bastion-host,prod-*)') parser.add_argument( '--location', nargs='+', metavar='R', help= 'Valid GCP region/zone to scope inspection (e.g.: us-central1-a,us-central1)' ) parser.add_argument( '--label', action=ParseMappingArg, metavar='key:value', help=( 'One or more resource labels as key-value pair(s) to scope inspection ' '(e.g.: env:prod, type:frontend or env=prod type=frontend)')) parser.add_argument( '--billing-project', metavar='P', help='Project used for billing/quota of API calls done by gcpdiag ' '(default is the inspected project, requires ' '\'serviceusage.services.use\' permission)') parser.add_argument('--show-skipped', help='Show skipped rules', action='store_true', default=config.get('show_skipped')) parser.add_argument('--hide-skipped', help=argparse.SUPPRESS, action='store_false', dest='show_skipped') parser.add_argument('--hide-ok', help='Hide rules with result OK', action='store_true', default=config.get('hide_ok')) parser.add_argument('--show-ok', help=argparse.SUPPRESS, action='store_false', dest='hide_ok') parser.add_argument( '--enable-gce-serial-buffer', help='Fetch serial port one output directly from the Compute API. ' 'Use this flag when not exporting serial port output to cloud logging.', action='store_true', dest='enable_gce_serial_buffer') parser.add_argument( '--include', help=('Include rule pattern (e.g.: `gke`, `gke/*/2021*`). ' 'Multiple pattern can be specified (comma separated, ' 'or with multiple arguments)'), action='append') parser.add_argument('--exclude', help=('Exclude rule pattern (e.g.: `BP`, `*/*/2022*`)'), action='append') parser.add_argument('--include-extended', help=('Include extended rules. Additional rules might ' 'generate false positives (default: False)'), default=config.get('include_extended'), action='store_true') parser.add_argument('--experimental-enable-async-rules', help='Run experimental async rules (default: False)', default=config.get('experimental_enable_async_rules'), action='store_true') parser.add_argument('-v', '--verbose', action='count', default=config.get('verbose'), help='Increase log verbosity') parser.add_argument('--within-days', metavar='D', type=int, help=(f'How far back to search logs and metrics (default:' f" {config.get('within_days')} days)"), default=config.get('within_days')) parser.add_argument('--config', metavar='FILE', type=str, help='Read configuration from FILE') parser.add_argument('--logging-ratelimit-requests', metavar='R', type=int, help=('Configure rate limit for logging queries (default:' f" {config.get('logging_ratelimit_requests')})")) parser.add_argument( '--logging-ratelimit-period-seconds', metavar='S', type=int, help=('Configure rate limit period for logging queries (default:' f" {config.get('logging_ratelimit_period_seconds')} seconds)")) parser.add_argument('--logging-page-size', metavar='P', type=int, help=('Configure page size for logging queries (default:' f" {config.get('logging_page_size')})")) parser.add_argument( '--logging-fetch-max-entries', metavar='E', type=int, help=('Configure max entries to fetch by logging queries (default:' f" {config.get('logging_fetch_max_entries')})")) parser.add_argument( '--logging-fetch-max-time-seconds', metavar='S', type=int, help=('Configure timeout for logging queries (default:' f" {config.get('logging_fetch_max_time_seconds')} seconds)")) parser.add_argument( '--output', metavar='FORMATTER', default='terminal', type=str, help=( 'Format output as one of [terminal, json, csv] (default: terminal)')) parser.add_argument('--interface', metavar='FORMATTER', default=config.get('interface'), type=str, help='What interface as one of [cli, api] (default: cli)') parser.add_argument('--reason', type=str, default=config.get('reason'), help='The reason for running gcpdiag') return parser def _parse_rule_pattern( patterns: Optional[List[str]],) -> Optional[List[lint.LintRulesPattern]]: if patterns: rules = [] for arg in _flatten_multi_arg(patterns): try: rules.append(lint.LintRulesPattern(arg)) except ValueError as e: print(f"ERROR: can't parse rule pattern: {arg}", file=sys.stderr) raise e from None return rules return None def _load_repository_rules(repo: lint.LintRuleRepository): """Find and load all lint rule modules dynamically""" for module in pkgutil.walk_packages( lint.__path__, # type: ignore lint.__name__ + '.'): if module.ispkg: try: m = importlib.import_module(f'{module.name}') repo.load_rules(m) except ImportError as err: print(f"ERROR: can't import module: {err}", file=sys.stderr) continue def _get_output_constructor(output_parameter_value, interface): if interface == 'api': return api_output.APIOutput elif output_parameter_value == 'json': return json_output.JSONOutput elif output_parameter_value == 'csv': return csv_output.CSVOutput else: return terminal_output.TerminalOutput def _initialize_output(output_order): """Initialize output formatter.""" constructor = _get_output_constructor(config.get('output'), config.get('interface')) kwargs = { 'log_info_for_progress_only': config.get('verbose') == 0, 'show_ok': not config.get('hide_ok'), 'show_skipped': config.get('show_skipped'), } if config.get('interface') == 'cli': if config.get('output') == 'terminal': kwargs['output_order'] = output_order output = constructor(**kwargs) return output def create_and_load_repos( include: Optional[List[str]], exclude: Optional[List[str]], load_extended: bool, ) -> lint.LintRuleRepository: """Helper function to initialize the repository and load rules.""" include_patterns = _parse_rule_pattern(include) exclude_patterns = _parse_rule_pattern(exclude) repo = lint.LintRuleRepository( load_extended=load_extended, run_async=config.get('experimental_enable_async_rules'), exclude=exclude_patterns, include=include_patterns, ) _load_repository_rules(repo) return repo def run_rules_for_context(context: models.Context, repo: lint.LintRuleRepository): """Core function to execute lint rules against a context.""" repo.run_rules(context) def run(argv) -> int: """Run the overall command line gcpdiag lint command. Parsing the sys.argv and sys.exit on error for failed. Args: argv: Command line arguments. Returns: The exit code of the command. """ del argv try: # 1. Initialize argument parser and configuration parser = init_args_parser() args = parser.parse_args() hooks.set_lint_args_hook(args) config.init(vars(args), terminal_output.is_cloud_shell()) config.set_project_id(args.project) # 2. Perform CLI-specific validation checks try: crm.get_project(args.project) apis.verify_access(args.project) except (utils.GcpApiError, exceptions.GoogleAuthError) as e: print(f'[ERROR]:{e}. exiting program', file=sys.stderr) sys.exit(2) # 3. Create the linting context context = models.Context( project_id=args.project, locations=args.location, resources=args.name, labels=args.label, ) # 4. Create and load the rule repository repo = create_and_load_repos( include=config.get('include'), exclude=config.get('exclude'), load_extended=config.get('include_extended'), ) # 5. Set up logging and output for the terminal output_order = sorted(str(r) for r in repo.rules_to_run) output = _initialize_output(output_order=output_order) repo.result.add_result_handler(output.result_handler) logging_handler = output.get_logging_handler() logger = logging.getLogger() logger.handlers = [] logger.addHandler(logging_handler) if config.get('verbose') >= 2: logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) if config.get('verbose') == 0: gac_http_logger = logging.getLogger('apiclient.http') gac_http_logger.setLevel(logging.ERROR) if config.get('auth_oauth'): logger.error( 'The oauth authentication has been deprecated and does not work' ' anymore. Consider using other authentication methods.') raise ValueError('oauth authentication is no longer supported') # 6. Display CLI Banner output.display_banner() output.display_header(context) # Warn user to fallback on serial logs buffer if project isn't storing in # cloud logging if (not gce.is_project_serial_port_logging_enabled(context.project_id) and not config.get('enable_gce_serial_buffer')): # Only print the warning if GCE is enabled in the first place if apis.is_enabled(context.project_id, 'compute'): logger.warning( '''Serial output to cloud logging maybe disabled for certain GCE instances. Fallback on serial output buffers by using flag --enable-gce-serial-buffer \n''' ) # 7. Run the rules run_rules_for_context(context, repo) # 8. Display CLI Footer and clean up output.display_footer(repo.result) hooks.post_lint_hook(repo.result.get_rule_statuses()) kubectl.clean_up() # 9. Exit with the correct status code sys.exit(2 if repo.result.any_failed else 0) except (utils.GcpApiError, exceptions.GoogleAuthError) as e: print(f'[ERROR]:{e}. exiting program', file=sys.stderr) sys.exit(2) ================================================ FILE: gcpdiag/lint/command_test.py ================================================ # 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. """Test code in command.py.""" import sys from unittest import TestCase, mock from gcpdiag import lint from gcpdiag.lint import command from gcpdiag.queries import apis, apis_stub MUST_HAVE_MODULES = { 'gke', 'gcb', 'gae', 'gce', 'iam', 'apigee', 'composer', 'datafusion', 'dataproc', 'gcs', 'vpc', 'lb', 'gcf' } @mock.patch('sys.exit', side_effect=lambda x: None) @mock.patch.object(apis, 'get_user_email', return_value='someone@company.com') @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestCommand(TestCase): """Unit tests for overall command execution.""" def test_run(self, mock_email, mock_api): # pylint: disable=W0613 sys.argv = [ 'gcpdiag lint', '--project', '12340001', '--include', 'dataproc/BP/2021_001', ] command.run([]) assert True class Test(TestCase): """Unit tests for command.""" # pylint: disable=protected-access def test_flatten_multi_arg(self): assert not list(command._flatten_multi_arg([])) assert list(command._flatten_multi_arg(['*BP*'])) == ['*BP*'] assert list(command._flatten_multi_arg(['*BP*', '*ERR*'])) == ['*BP*', '*ERR*'] assert list(command._flatten_multi_arg(['*BP*,*ERR*'])) == ['*BP*', '*ERR*'] assert list(command._flatten_multi_arg(['*BP*, *ERR*' ])) == ['*BP*', '*ERR*'] # pylint: disable=protected-access def test_init_args_parser(self): parser = command.init_args_parser() args = parser.parse_args(['--project', 'myproject']) assert args.project == 'myproject' assert args.billing_project is None assert args.auth_adc is False assert args.auth_key is None assert args.verbose == 0 assert args.within_days == 3 assert args.include is None assert args.exclude is None assert args.include_extended is False assert args.config is None assert args.show_skipped is False assert args.hide_ok is False assert args.logging_ratelimit_requests is None assert args.logging_ratelimit_period_seconds is None assert args.logging_page_size is None assert args.logging_fetch_max_entries is None assert args.logging_fetch_max_time_seconds is None assert args.output == 'terminal' assert args.enable_gce_serial_buffer is False # pylint: disable=protected-access def test_provided_init_args_parser(self): parser = command.init_args_parser() args = parser.parse_args(['--project', 'myproject', '--include', '*ERR*']) assert args.include == ['*ERR*'] args = parser.parse_args(['--project', 'myproject', '--exclude', '*BP*']) assert args.exclude == ['*BP*'] args = parser.parse_args(['--project', 'myproject', '--include-extended']) assert args.include_extended is True args = parser.parse_args( ['--project', 'myproject', '--config', '/path/to/file']) assert args.config == '/path/to/file' # pylint: disable=protected-access def test_load_repository_rules(self): repo = lint.LintRuleRepository() command._load_repository_rules(repo) modules = {r.product for r in repo.rules_to_run} assert MUST_HAVE_MODULES.issubset(modules) def test_create_and_load_repos(self): """Test the public repo creation function.""" repo = command.create_and_load_repos( include=['gke/*'], exclude=['iam/*'], load_extended=True, ) self.assertIsInstance(repo, lint.LintRuleRepository) # Check if rules are loaded self.assertTrue(any(r.product == 'gke' for r in repo.rules_to_run)) # Check if excluded rules are not present self.assertFalse(any(r.product == 'iam' for r in repo.rules_to_run)) def test_parse_label(self): parser = command.init_args_parser() # Test with a single value args = parser.parse_args(['--project', 'x', '--label', 'key=value']) assert args.label == {'key': 'value'} # Test with multiple values args = parser.parse_args( ['--project', 'x', '--label', 'key1:value1, key2=value2']) assert args.label == {'key1': 'value1', 'key2': 'value2'} # Test with curly braces args = parser.parse_args( ['--project', 'x', '--label', '{ key1=value1, key2=value2 }']) assert args.label == {'key1': 'value1', 'key2': 'value2'} # Test with mapping separated by commas args = parser.parse_args( ['--project', 'x', '--label', 'key1=value1,key2:value2']) assert args.label == {'key1': 'value1', 'key2': 'value2'} # Test with values separated by spaces args = parser.parse_args( ['--project', 'x', '--label', ' key1=value1 key2:value2 ']) assert args.label == {'key1': 'value1', 'key2': 'value2'} # exit if invalid --label value is provided. try: args = parser.parse_args(['--project', 'x', '--label', 'invalid']) except SystemExit as e: assert e.code == 2 ================================================ FILE: gcpdiag/lint/composer/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/composer/bp_2023_001_debug_logging_level.py ================================================ # 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. """Cloud Composer logging level is set to INFO Logging level of Airflow may have been set to DEBUG for troubleshooting purposes. However, it is highly recommended to revert the logging level back to INFO after the troubleshooting is completed. Leaving the logging level at DEBUG might increase costs associated with Cloud Storage. Logging levels higher than INFO (WARNING, ERROR) could suppress logs that are useful to troubleshooting, so it also not recommended. """ from gcpdiag import lint, models from gcpdiag.queries import apis, composer envs_by_project = {} def _check_info_logging_level(config) -> bool: # logging section in airflow2, core section in airflow1 return config.get('logging-logging_level', 'INFO') == 'INFO' or \ config.get('core-logging_level', 'INFO') == 'INFO' def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return for env in envs: if not _check_info_logging_level(env.airflow_config_overrides): report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/bp_2023_002_parallelism.py ================================================ # 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. """Cloud Composer's worker concurrency is not limited by parallelism parameter The parallelism defines the maximum number of task instances that can run concurrently in Airflow. Generally, the parameter should be equal or higher than the product of maximum number of workers and worker_concurrency. Otherwise, resources in workers could not be fully-utilized. """ from gcpdiag import lint, models from gcpdiag.queries import apis, composer envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return for env in envs: if not env.is_composer2: report.add_skipped(env, 'not applicable for composer1') continue if env.parallelism < (env.worker_max_count * env.worker_concurrency): report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/bp_2023_003_statsd.py ================================================ # 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. """Cloud Composer does not override the StatsD configurations Metrics from Cloud Composer like scheduler heartbeat, number of completed tasks and pods are collected via the StatsD daemon. If you override the default StatsD configuration, it will cause missing metrics in the monitoring pages and components including airflow-scheduler that depend on Statsd metrics for healthcheck will be marked as unhealthy. """ from gcpdiag import lint, models from gcpdiag.queries import apis, composer envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return for env in envs: if any( key.startswith('metrics-statsd_') for key in env.airflow_config_overrides.keys()): report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/bp_ext_2023_001_number_of_schedulers.py ================================================ # 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. """Cloud Composer has no more than 2 Airflow schedulers In general, extra schedulers more than 2 consumes resources of your environment without contributing to overall performance. We recommend starting with two schedulers and then monitoring the performance of your environment. """ from gcpdiag import lint, models from gcpdiag.queries import apis, composer envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return for env in envs: if env.num_schedulers > 2: report.add_failed( env, f'{env.name} is configured more than 2 Airflow schedulers' ' (number_of_schedulers: {env.num_schedulers})') else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/bp_ext_2023_002_xss_vulnerable_versions.py ================================================ # 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. """Cloud Composer has higher version than airflow-2.2.3 Airflow UI in Airflow 2.2.3 or earlier versions is vulnerable to CVE-2021-45229. "Trigger DAG with config" screen was susceptible to XSS attacks through the origin query argument. Highly recommended to upgrade to the latest Cloud Composer version that supports Airflow 2.2.5. """ from packaging import version from gcpdiag import lint, models from gcpdiag.queries import apis, composer envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return xss_fixed_version = version.parse('2.2.5') for env in envs: if version.parse(env.airflow_version) < xss_fixed_version: report.add_failed( env, f'{env.name} image is {env.image_version}, which is vulnerable ' 'to XSS attack. Upgrade to the latest Cloud Composer version') else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/composer_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import composer, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = composer project_id = 'gcpdiag-composer1-aaaa' ================================================ FILE: gcpdiag/lint/composer/err_2022_001_composer_p4sa_permissions.py ================================================ # 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. """Composer Service Agent permissions Verify that the Cloud Composer Service Agent account exists and has the Cloud Composer Service Agent role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, iam SA = 'service-{project_number}@cloudcomposer-accounts.iam.gserviceaccount.com' ROLE = 'roles/composer.serviceAgent' projects = {} policy_by_project = {} def prefetch_rule(context: models.Context): projects[context.project_id] = crm.get_project(context.project_id) policy_by_project[context.project_id] = iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return project = projects[context.project_id] service_account = SA.format(project_number=project.number) project_policy = policy_by_project[context.project_id] if not project_policy.has_role_permissions( f'serviceAccount:{service_account}', ROLE): report.add_failed(project, (f'service account: {service_account}\n' f'missing role: {ROLE}')) return report.add_ok(project) ================================================ FILE: gcpdiag/lint/composer/err_2022_002_composer_sa_permissions.py ================================================ # 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. """Composer Environment Service Account permissions Verify that the Composer Environment Service Account exists and has the Composer Worker role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import composer, iam # `composer.worker` role has broader permissions than `editor`, but any of them # is sufficient to run a composer environment ROLE = 'roles/composer.worker' ALT_ROLES = ['roles/editor'] # `iam.serviceAccountUser` is only required for private IP environments PRIVATE_IP_ROLE = 'roles/iam.serviceAccountUser' environments_by_project = {} policy_by_project = {} policy_by_service_account = {} def prefetch_rule(context: models.Context): environments_by_project[context.project_id] = composer.get_environments( context) policy_by_project[context.project_id] = iam.get_project_policy(context) for environment in environments_by_project[context.project_id]: # Service account policy is needed for private IP envs only if not environment.is_private_ip(): continue if environment.service_account in policy_by_service_account: continue policy_by_service_account[ environment.service_account] = iam.get_service_account_iam_policy( context, environment.service_account) def run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: environments = environments_by_project[context.project_id] if len(environments) == 0: report.add_skipped(None, 'no composer environments found') return for environment in environments: has_failed = False service_account = environment.service_account project_policy = policy_by_project[environment.project_id] for role in [ROLE] + ALT_ROLES: if project_policy.has_role_permissions( f'serviceAccount:{service_account}', role): break else: has_failed = True # `composer.worker` is preferred, using it in error messages report.add_failed(environment, (f'service account: {service_account}\n' f'missing role: {ROLE}')) if environment.is_private_ip(): service_account_policy = policy_by_service_account[ environment.service_account] for scope in (service_account_policy, project_policy): if scope.has_role_permissions(f'serviceAccount:{service_account}', PRIVATE_IP_ROLE): break else: has_failed = True report.add_failed(environment, (f'service account: {service_account}\n' f'missing role: {PRIVATE_IP_ROLE}')) if not has_failed: report.add_ok(environment) ================================================ FILE: gcpdiag/lint/composer/err_2023_001_composer_not_in_error_state.py ================================================ # 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. """Cloud Composer is not in ERROR state The ERROR state indicates that the environment has encountered an error and cannot be used. Creating/updating environment through misconfigured Terraform config, errors in PyPI Package or etc could be the cause of the issue. """ from gcpdiag import lint, models from gcpdiag.queries import apis, composer envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return for env in envs: if env.state == 'ERROR': report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/err_2023_002_verify_ip_range.py ================================================ # Copyright 2023 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. """Cloud Composer private IP Cluster non-RFC1918 IP range. Private IP cluster (Pods, Services) Should use ALLOWED IP RANGES to create the environment.Make sure you are using ALLOWED IP RANGES during environment Creation. """ import re from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs logs_by_project = {} MATCH_STR1 = ( 'type.googleapis.com/google.cloud.orchestration.airflow.service.v1.CreateEnvironmentRequest' ) MATCH_STR2 = ( 'type.googleapis.com/google.cloud.orchestration.'\ 'airflow.service.v1beta1.CreateEnvironmentRequest' ) pattern = ( r'(Cluster|Services|GKE master) CIDR range (\d+\.\d+\.\d+\.\d+/\d+) is not' r' within allowed ranges.') ip_pattern = r'(\d+\.\d+\.\d+\.\d+/\d+)' FILTER_1 = [f'protoPayload.request.@type={MATCH_STR1} OR {MATCH_STR2}'] def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_composer_environment', log_name='log_id("cloudaudit.googleapis.com%2Factivity")', filter_str=' AND '.join(FILTER_1), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Log entries log_entries = logs_by_project.get(context.project_id) if not log_entries: report.add_skipped(None, 'No log entries found') return project_ok_flag = True # Start Iteration from the latest log entries for log_entry in reversed(log_entries.entries): # Check for the not allowed IP Range Error Entry if (log_entry['severity'] == 'ERROR' and log_entry['protoPayload']['status']['code'] == 3): message_body = log_entry['protoPayload']['status']['message'] match = re.search(pattern, message_body) if not match: continue else: matches = re.findall(ip_pattern, message_body) ip_ranges = set(matches) report.add_failed( project, f'{ip_ranges} outsides the ALLOWED IP RANGE \n' 'Try Creating private IP cluster using ALLOWED IP RANGES', ) project_ok_flag = False break # Check for the latest successful environment creation if log_entry['severity'] == 'NOTICE': report.add_ok(project) return if project_ok_flag: report.add_ok(project) ================================================ FILE: gcpdiag/lint/composer/err_2023_003_dag_timeout_killing.py ================================================ # Copyright 2023 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. """Cloud Composer Dags are not getting timed out by the Dag Processor Sometimes we can see dag processor logs with task time out error. "Processor for/home/airflow/gcs/dags/exampledagname.py with PID 12345678 started at has timed out, killing it." In an ideal composer environment this error shouldnot occur as it is a cause of scheduler resource constraint and complex DAGparsing implementation. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, logs MATCH_STR = 'has timed out, killing it.' LOG_FILTER = ['severity=ERROR', f'textPayload:"{MATCH_STR}"'] logs_by_project = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_composer_environment', log_name='log_id("dag-processor-manager")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return sigkilled_envs = set() if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in log_entry.get( 'textPayload', ''): continue env_name = get_path(log_entry, ('resource', 'labels', 'environment_name')) sigkilled_envs.add(env_name) for env in envs: if env.name in sigkilled_envs: report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/err_2023_004_zombie_detection.py ================================================ # Copyright 2023 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. """Cloud Composer Dags are not getting zombie error Based on heartbeat, the Airflow scheduler is able to detect abnormally terminated tasks - if they're missing for extended period of time, a task will be detected as a zombie and the similar message will be written in logs. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, logs MATCH_STR = 'Detected zombie job' LOG_FILTER = ['severity=ERROR', f'textPayload:"{MATCH_STR}"'] logs_by_project = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_composer_environment', log_name='log_id("airflow-scheduler")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return sigkilled_envs = set() if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in log_entry.get( 'textPayload', ''): continue env_name = get_path(log_entry, ('resource', 'labels', 'environment_name')) sigkilled_envs.add(env_name) for env in envs: if env.name in sigkilled_envs: report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/err_2023_005_environment_delete_fail_nat_config.py ================================================ # Copyright 2023 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. """Composer environment deletion not failed due to NAT configuration Having Composer automatically create pods and services' secondary IP ranges and then configuring Cloud NAT for the subnet and these ranges makes it so the environment deletion will fail. Verify a Composer environment deletion attempt failed due to a Cloud NAT configuration """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, logs MATCH_STR_1 = 'Google Compute Engine: The subnetwork resource' MATCH_STR_2 = 'is already being used by' MATCH_STR_3 = '-Nat' MATCH_STR_4 = 'Composer Backend timed out' MATCH_METHOD = 'google.cloud.orchestration.airflow.service.v1.Environments.DeleteEnvironment' FILTER_1 = [ 'severity=ERROR', ('protoPayload.methodName="google.cloud.orchestration.airflow.service.' 'v1.Environments.DeleteEnvironment"'), (f'protoPayload.status.message:(("{MATCH_STR_1}" AND "{MATCH_STR_2}" AND' f' "{MATCH_STR_3}") OR ("{MATCH_STR_4}"))'), ] logs_by_project = {} envs_by_project = {} def prepare_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_composer_environment', log_name='log_id("cloudaudit.googleapis.com%2Factivity")', filter_str=' AND '.join(FILTER_1), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return env_name_set = set() if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # filter out non -relevant entries logging_check_path = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') if (log_entry['severity'] != 'ERROR' or log_entry['protoPayload']['methodName'] != MATCH_METHOD or (((MATCH_STR_1 not in logging_check_path) or (MATCH_STR_2 not in logging_check_path) or (MATCH_STR_3 not in logging_check_path)) and (MATCH_STR_4 not in logging_check_path))): continue env_name = get_path(log_entry, ('resource', 'labels', 'environment_name')) env_name_set.add(env_name) for env in envs: if (env.state == 'ERROR') and (env.name in env_name_set): report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/err_2024_001_no_error_surfaced.py ================================================ # Copyright 2024 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. """Composer Creation not failed due to 'no error was surfaced' Error. 'no error was surfaced' error when creating a private IP composer environment. This can happen due to a number of different reasons, possibly missing IAM permissions, misconfigured firewall rules or insufficient/incompatible IP ranges used in GKE clusters. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, logs MATCH_STR = 'but no error was surfaced' FILTER_1 = ['severity=ERROR', f'protoPayload.status.message:("{MATCH_STR}")'] logs_by_project = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_composer_environment', log_name='log_id("cloudaudit.googleapis.com%2Factivity")', filter_str=' AND '.join(FILTER_1), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return env_name_set = set() if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), ''): continue env_name = get_path(log_entry, ('resource', 'labels', 'environment_name')) env_name_set.add(env_name) for env in envs: if (env.state == 'ERROR') and (env.name in env_name_set): report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/snapshots/BP_2023_001.txt ================================================ * composer/BP/2023_001: Cloud Composer logging level is set to INFO - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/BP_2023_002.txt ================================================ * composer/BP/2023_002: Cloud Composer's worker concurrency is not limited by parallelism parameter - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [SKIP] not applicable for composer1 - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [SKIP] not applicable for composer1 ================================================ FILE: gcpdiag/lint/composer/snapshots/BP_2023_003.txt ================================================ * composer/BP/2023_003: Cloud Composer does not override the StatsD configurations - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/BP_EXT_2023_001.txt ================================================ * composer/BP_EXT/2023_001: Cloud Composer has no more than 2 Airflow schedulers - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/BP_EXT_2023_002.txt ================================================ * composer/BP_EXT/2023_002: Cloud Composer has higher version than airflow-2.2.3 - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [FAIL] env2 image is composer-1.17.10-airflow-1.10.15, which is vulnerable to XSS attack. Upgrade to the latest Cloud Composer version - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [FAIL] env1 image is composer-1.17.10-airflow-1.10.15, which is vulnerable to XSS attack. Upgrade to the latest Cloud Composer version Airflow UI in Airflow 2.2.3 or earlier versions is vulnerable to CVE-2021-45229. "Trigger DAG with config" screen was susceptible to XSS attacks through the origin query argument. Highly recommended to upgrade to the latest Cloud Composer version that supports Airflow 2.2.5. https://gcpdiag.dev/rules/composer/BP_EXT/2023_002 ================================================ FILE: gcpdiag/lint/composer/snapshots/ERR_2022_001.txt ================================================ * composer/ERR/2022_001: Composer Service Agent permissions - projects/gcpdiag-composer1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/ERR_2022_002.txt ================================================ * composer/ERR/2022_002: Composer Environment Service Account permissions - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [FAIL] service account: env2sa@gcpdiag-composer1-aaaa.iam.gserviceaccount.com missing role: roles/iam.serviceAccountUser - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] Verify that the Composer Environment Service Account exists and has the Composer Worker role on the project. https://gcpdiag.dev/rules/composer/ERR/2022_002 ================================================ FILE: gcpdiag/lint/composer/snapshots/ERR_2023_001.txt ================================================ * composer/ERR/2023_001: Cloud Composer is not in ERROR state - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/ERR_2023_002.txt ================================================ * composer/ERR/2023_002: Cloud Composer private IP Cluster non-RFC1918 IP range. - projects/gcpdiag-composer1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/ERR_2023_003.txt ================================================ * composer/ERR/2023_003: Cloud Composer Dags are not getting timed out by the Dag Processor - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/ERR_2023_004.txt ================================================ * composer/ERR/2023_004: Cloud Composer Dags are not getting zombie error - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/ERR_2023_005.txt ================================================ * composer/ERR/2023_005: Composer environment deletion not failed due to NAT configuration - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/ERR_2024_001.txt ================================================ * composer/ERR/2024_001: Composer Creation not failed due to 'no error was surfaced' Error. - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2022_001.txt ================================================ * composer/WARN/2022_001: Composer Service Agent permissions for Composer 2.x - projects/gcpdiag-composer1-aaaa [FAIL] service account: service-12340005@cloudcomposer-accounts.iam.gserviceaccount.com missing role: roles/composer.ServiceAgentV2Ext Verify that the Cloud Composer Service Agent account exists and has the Cloud Composer v2 API Service Agent Extension role on the project. https://gcpdiag.dev/rules/composer/WARN/2022_001 ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2022_002.txt ================================================ * composer/WARN/2022_002: fluentd pods in Composer environments are not crashing - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2022_003.txt ================================================ * composer/WARN/2022_003: Composer scheduler parses all DAG files without overloading - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [SKIP] no metrics - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [SKIP] no metrics ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_001.txt ================================================ * composer/WARN/2023_001: Cloud Composer does not override Kerberos configurations - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_002.txt ================================================ * composer/WARN/2023_002: Cloud Composer tasks are not interrupted by SIGKILL - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_003.txt ================================================ * composer/WARN/2023_003: Cloud Composer tasks are not failed due to resource pressure - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_004.txt ================================================ * composer/WARN/2023_004: Cloud Composer database CPU usage does not exceed 80% - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_005.txt ================================================ * composer/WARN/2023_005: Cloud Composer is consistently in healthy state - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_006.txt ================================================ * composer/WARN/2023_006: Airflow schedulers are healthy for the last hour - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_007.txt ================================================ * composer/WARN/2023_007: Cloud Composer Scheduler CPU limit exceeded. - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_008.txt ================================================ * composer/WARN/2023_008: Cloud Composer Airflow database is in healthy state - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2023_009.txt ================================================ * composer/WARN/2023_009: Cloud Composer task isn't failing intermittently during scheduling ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2024_001.txt ================================================ * composer/WARN/2024_001: Cloud Composer Scheduler CPU usage above 30%-35%. - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [FAIL] Scheduler CPU usage below 30-35% - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] Scheduler CPU usage is consistently below 30%-35%, Recommended to Reduce the number of schedulers and Reduce the CPU of schedulers for Optimize environment performance and costs https://gcpdiag.dev/rules/composer/WARN/2024_001 ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2024_002.txt ================================================ * composer/WARN/2024_002: Cloud Composer Airflow Worker Pods not in Eviction state. - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ] - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ] ================================================ FILE: gcpdiag/lint/composer/snapshots/WARN_2024_003.txt ================================================ * composer/WARN/2024_003: Having the composer API enabled ensures the environment remains in a healthy state. - projects/gcpdiag-composer1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/composer/warn_2022_001_composer2_p4sa_permissions.py ================================================ # 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. """Composer Service Agent permissions for Composer 2.x Verify that the Cloud Composer Service Agent account exists and has the Cloud Composer v2 API Service Agent Extension role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, iam SA = 'service-{project_number}@cloudcomposer-accounts.iam.gserviceaccount.com' ROLE = 'roles/composer.ServiceAgentV2Ext' projects = {} policy_by_project = {} def prefetch_rule(context: models.Context): projects[context.project_id] = crm.get_project(context.project_id) policy_by_project[context.project_id] = iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return project = projects[context.project_id] service_account = SA.format(project_number=project.number) project_policy = policy_by_project[context.project_id] if not project_policy.has_role_permissions( f'serviceAccount:{service_account}', ROLE): report.add_failed(project, (f'service account: {service_account}\n' f'missing role: {ROLE}')) return report.add_ok(project) ================================================ FILE: gcpdiag/lint/composer/warn_2022_002_fluentd_pod_crashloop.py ================================================ # # Copyright 2021 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. # Lint as: python3 """fluentd pods in Composer environments are not crashing The fluentd runs as a daemonset and collects logs from all environment components and uploads the logs to Cloud Logging. All fluentd pods in an environment could be stuck in a CrashLoopBackOff state after upgrading the environment and no logs appear in the Cloud Logging. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, crm, logs MATCH_STR = 'unexpected error error_class=NoMethodError' MATCH_STR2 = "undefined method `subscription' for nil:NilClass" POD_NAME = 'composer-builder-fluentd' LOG_FILTER = [ 'severity=INFO', f'labels.k8s-pod/name="{POD_NAME}"', f'textPayload:"{MATCH_STR}"', f'textPayload:"{MATCH_STR2}"', ] logs_by_project = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='k8s_container', log_name='log_id("stdout")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return envs = envs_by_project[context.project_id] name_to_env = {env.name: env for env in envs} if not envs: report.add_skipped(project, 'no envs found') return stuck_in_crashloop_envs = [] if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'INFO' or \ POD_NAME != get_path(log_entry, ('labels', 'k8s-pod/name'), default='') or \ MATCH_STR not in log_entry.get('textPayload', '') or \ MATCH_STR2 not in log_entry.get('textPayload', ''): continue # region-name-suffix-gke format (us-east4-composer-stg-v2-a106130c-gke) cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'), default='') env_name = '-'.join(cluster_name.split('-')[2:-2]) if env_name and env_name not in stuck_in_crashloop_envs: stuck_in_crashloop_envs.append(env_name) for env_name in stuck_in_crashloop_envs: report.add_failed(name_to_env[env_name], 'has fluentd pods stuck in the crashloop') for env_name in [ env_name for env_name in name_to_env if env_name not in stuck_in_crashloop_envs ]: report.add_ok(name_to_env[env_name]) ================================================ FILE: gcpdiag/lint/composer/warn_2022_003_total_dag_parse_time.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Composer scheduler parses all DAG files without overloading If the total DAG parse time exceeds about 10 seconds, the schedulers might be overloaded with DAG parsing and cannot run DAGs effectively. """ from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import apis, composer, crm, monitoring TOTAL_DAG_PARSE_SECONDS = 10 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) if not envs_by_project[context.project_id]: return within_str = 'within %dd, d\'%s\'' % (config.get('within_days'), monitoring.period_aligned_now(60)) _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, # maximum total DAG parse time during config.get('within_days') f""" fetch cloud_composer_environment | metric 'composer.googleapis.com/environment/dag_processing/total_parse_time' | {within_str} | every 1m | group_by {config.get('within_days')}d, [value_total_parse_time_max: max(value.total_parse_time)] """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(project, 'no environments found') return metric_values = {} for query_result in \ _query_results_per_project_id[context.project_id].values(): try: metric_values[query_result['labels']['resource.environment_name']] = \ query_result['values'][0][0] except KeyError: continue for env in envs: try: if metric_values[env.name] >= TOTAL_DAG_PARSE_SECONDS: report.add_failed( env, f'max total DAG parse time: {metric_values[env.name]:.2f} seconds') else: report.add_ok(env) except KeyError: report.add_skipped(env, 'no metrics') ================================================ FILE: gcpdiag/lint/composer/warn_2023_001_kerberos_support.py ================================================ # 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. """Cloud Composer does not override Kerberos configurations Cloud Composer does not support Airflow Kerberos configuration yet. """ from gcpdiag import lint, models from gcpdiag.queries import apis, composer envs_by_project = {} def _check_kerberos_overrides(config) -> bool: return config.get('core-security', '') == 'kerberos' or \ any(key.startswith('kerberos-') for key in config.keys()) def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return for env in envs: if _check_kerberos_overrides(env.airflow_config_overrides): report.add_failed( env, 'has Airflow kerberos configurations, which is not supported yet.') else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2023_002_task_sigkill.py ================================================ # 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. """Cloud Composer tasks are not interrupted by SIGKILL Sometimes your task might be using more memory than Airflow worker is allocated. In such a situation it might be interrupted by Negsignal.SIGKILL. The system sends this signal to avoid further memory consumption which might impact the execution of other Airflow tasks. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, logs MATCH_STR = 'Task exited with return code Negsignal.SIGKILL' LOG_FILTER = ['severity=INFO', f'textPayload:"{MATCH_STR}"'] logs_by_project = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_composer_environment', log_name='log_id("airflow-worker")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return sigkilled_envs = set() if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'INFO' or \ MATCH_STR not in log_entry.get('textPayload', ''): continue env_name = get_path(log_entry, ('resource', 'labels', 'environment_name')) sigkilled_envs.add(env_name) for env in envs: if env.name in sigkilled_envs: report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2023_003_task_fail_resource_pressure.py ================================================ # 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. """Cloud Composer tasks are not failed due to resource pressure During execution of a task, Airflow worker's subprocess responsible for Airflow task execution could be interrupted abruptly due to resource pressure. In this case, the task would be failed without emitting logs. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, logs MATCH_STR = 'Celery command failed on host' LOG_FILTER = ['severity=ERROR', f'textPayload:"{MATCH_STR}"'] envs_by_project = {} logs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_composer_environment', log_name='log_id("airflow-worker")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return resource_pressure_envs = set() if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ MATCH_STR not in log_entry.get('textPayload', ''): continue env_name = get_path(log_entry, ('resource', 'labels', 'environment_name')) resource_pressure_envs.add(env_name) for env in envs: if env.name in resource_pressure_envs: report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2023_004_high_database_cpu_usage.py ================================================ # 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. """Cloud Composer database CPU usage does not exceed 80% Airflow database performance issues can lead to overall DAG execution issues. If the database CPU usage exceeds 80% for more than a few percent of the total time, the database is overloaded and requires scaling. """ from typing import Dict from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, monitoring CPU_USAGE_THRESHOLD = 0.8 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) if not envs_by_project[context.project_id]: return _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, f""" fetch cloud_composer_environment | metric 'composer.googleapis.com/environment/database/cpu/utilization' | within 1h | filter val() >= {CPU_USAGE_THRESHOLD} """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return overloaded_envs = {} for ts in _query_results_per_project_id[context.project_id].values(): try: env = get_path(ts, ('labels', 'resource.environment_name')) cpu_usage = ts['values'][0][0] overloaded_envs[env] = cpu_usage except KeyError: continue for env in envs: if env.name in overloaded_envs: report.add_failed( env, f'database CPU usage exceeded 80% ({overloaded_envs[env.name]:.2f})') else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2023_005_environment_is_consistently_healthy.py ================================================ # 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. """Cloud Composer is consistently in healthy state Cloud Composer runs a liveness DAG named airflow_monitoring, which runs on a schedule and reports environment health. If the liveness DAG run finishes successfully, the health status is True, which means healthy. Otherwise, the health status is False. Note that the environment health could be intermittently unhealthy due to events like scheduled maintenance. However, overall it should be healthy. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, monitoring _query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) if not envs_by_project[context.project_id]: return _query_results_per_project_id[context.project_id] = monitoring.query( context.project_id, """ fetch cloud_composer_environment | metric 'composer.googleapis.com/environment/healthy' | align fraction_true_aligner(30m) | within 6h | filter val() == 0 """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return unhealthy_envs = set() for ts in _query_results_per_project_id[context.project_id].values(): try: unhealthy_envs.add(get_path(ts, ('labels', 'resource.environment_name'))) except KeyError: continue for env in envs: if env.name in unhealthy_envs: report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2023_006_schedulers_are_healthy.py ================================================ # 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. """Airflow schedulers are healthy for the last hour Airflow schedulers report heartbeat signals every predefined interval called scheduler_heartbeat_sec (default: 5 seconds). If any heartbeats are received within the threshold time (default: 30 seconds), the Scheduler heartbeat from the monitoring dashboard is marked as Green, which means healthy. Otherwise the status is unhealthy. Note that if your environment has more than one scheduler, then the status is healthy as long as at least one of schedulers is responding. """ from typing import Dict from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, monitoring _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) if not envs_by_project[context.project_id]: return _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, """ fetch cloud_composer_environment | metric 'composer.googleapis.com/environment/scheduler_heartbeat_count' | group_by 1m, [value_scheduler_heartbeat_count_mean: mean(value.scheduler_heartbeat_count)] | every 1m | within 1h | filter val() == 0 """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return unhealthy_schedulers_envs = set() for ts in _query_results_per_project_id[context.project_id].values(): try: unhealthy_schedulers_envs.add( get_path(ts, ('labels', 'resource.environment_name'))) except KeyError: continue for env in envs: if env.name in unhealthy_schedulers_envs: report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2023_007_high_scheduler_cpu_usage.py ================================================ # 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. """Cloud Composer Scheduler CPU limit exceeded. Airflow scheduler's CPU and memory metrics help you check whether the scheduler's performance is a bottleneck in the overall Airflow performance. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, monitoring CPU_USAGE_THRESHOLD = 1 _query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) if not envs_by_project[context.project_id]: return _query_results_per_project_id[context.project_id] = monitoring.query( context.project_id, f""" fetch k8s_container | metric 'kubernetes.io/container/cpu/limit_utilization' | filter (resource.container_name == 'airflow-scheduler') | within 1h | filter val() >= {CPU_USAGE_THRESHOLD} """, ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return overloaded_envs = {} for ts in _query_results_per_project_id[context.project_id].values(): try: env = get_path(ts, ('labels', 'resource.container_name')) cpu_usage = ts['values'][0][0] overloaded_envs[env] = cpu_usage except KeyError: continue for env in envs: if env.name in overloaded_envs: report.add_failed( env, f'Scheduler CPU limit exceeded({overloaded_envs[env.name]:.2f})') else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2023_008_composer_airflow_db_is_healthy.py ================================================ # 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. """Cloud Composer Airflow database is in healthy state The Airflow monitoring pod pings the database every minute and reports health status as True if a SQL connection can be established or False if not. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, monitoring envs_by_project = {} _query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) if not envs_by_project[context.project_id]: return _query_results_per_project_id[context.project_id] = monitoring.query( context.project_id, """ fetch cloud_composer_environment | metric 'composer.googleapis.com/environment/database_health' | align fraction_true_aligner(30m) | within 6h | filter val() == 0 """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return unhealthy_db = set() for ts in _query_results_per_project_id[context.project_id].values(): try: unhealthy_db.add(get_path(ts, ('labels', 'resource.environment_name'))) except KeyError: continue for env in envs: if env.name in unhealthy_db: report.add_failed(env) else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2023_009_composer_intermittent_task_failure_issue.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Cloud Composer task isn't failing intermittently during scheduling The user may encounter an error caused by multiple reasons like intermittent task failures during scheduling, hit the dag parsing timeout, unhandled exception, dynamic DAG generation or Out of Memory. To minimize the impact of such errors, it is recommended to check the common issues from our public documentation and follow the best practices. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, crm, logs MATCH_STRING = ( '[queued]> finished (failed) although the task says its queued. ' + '(Info: None) Was the task killed externally?') FILTER = ['severity=ERROR', f'textPayload:("{MATCH_STRING}")'] logs_by_project = {} envs_by_project = {} def find_env(arr_of_composer_envs: list, search_str: str): """Compares the environment name from the error log with the list of composer environment objects Args: arr_of_composer_envs: list of composer environment objects search_str: string containing the name of composer search_str extracted from the error log Returns: environment: composer environment object """ for environment in arr_of_composer_envs: if environment.name == search_str: return environment def get_dag_task(error_message: str): """Extracts the airflow dag and task name from the error log message Args: error_message: string containing the error log message Returns: dag, task: airflow dag name and airflow task name """ parts = error_message.split() start_index = None try: start_index = parts.index(' 0 """, ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'composer'): report.add_skipped(None, 'composer is disabled') return envs = envs_by_project[context.project_id] if not envs: report.add_skipped(None, 'no Cloud Composer environments found') return pod_evicted_envs = set() for ts in _query_results_per_project_id[context.project_id].values(): try: env = get_path(ts, ('labels', 'resource.environment_name')) pod_evicted_envs.add(env) except KeyError: continue for env in envs: if env.name in pod_evicted_envs: report.add_failed(env, 'Airflow Worker Pod(s) evicted') else: report.add_ok(env) ================================================ FILE: gcpdiag/lint/composer/warn_2024_003_composer_api_disabled.py ================================================ # Copyright 2024 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. """Having the composer API enabled ensures the environment remains in a healthy state. Disabling the Cloud Composer's service (API) puts Composer environments into a permanent failed state, and permanently deletes the Composer tenant project. Make sure that all Cloud Composer environments in your project are deleted. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, composer, crm, logs MATCH_STR1 = 'google.api.serviceusage.v1.ServiceUsage.DisableService' MATCH_STR2 = 'google.api.serviceusage.v1.ServiceUsage.EnableService' MATCH_STR3 = '/services/composer.googleapis.com' FILTER_1 = [ f'protoPayload.methodName = ("{MATCH_STR1}" OR "{MATCH_STR2}")', f'protoPayload.request.name=~ ("{MATCH_STR3}")', ] logs_by_project = {} envs_by_project = {} def prefetch_rule(context: models.Context): envs_by_project[context.project_id] = composer.get_environments(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='audited_resource', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(FILTER_1), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Run the rule.""" project = crm.get_project(context.project_id) if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if MATCH_STR1 in get_path(log_entry, ('protoPayload', 'methodName'), '') and MATCH_STR3 in get_path( log_entry, ('protoPayload', 'request', 'name'), ''): report.add_failed(project, 'Request to disable the composer API recently done') return if MATCH_STR2 in get_path(log_entry, ('protoPayload', 'methodName'), '') and MATCH_STR3 in get_path( log_entry, ('protoPayload', 'request', 'name'), ''): envs = envs_by_project[context.project_id] if envs: report.add_failed( project, 'Re-enabling the composer API (after disabling),You may see the ' ' the active environment entered into an error state.', ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/dataflow/bp_2023_001_dataflow_supported_sdk_version_check.py ================================================ # # Copyright 2021 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. """Dataflow job is using supported Apache Beam SDK version Apache Beam SDK versions are supported by Dataflow from their release date until their deprecation date. """ import itertools from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataflow dataflow_jobs_by_project = {} def prefetch_rule(context: models.Context): dataflow_jobs_by_project[context.project_id] = dataflow.get_all_dataflow_jobs( context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return jobs = dataflow_jobs_by_project[context.project_id] failed_jobs = set() if not jobs: report.add_skipped(None, 'no jobs found') for job in jobs: try: if job.sdk_support_status in ['DEPRECATED', 'UNSUPPORTED']: failed_jobs.add(job.id) else: continue except KeyError: report.add_skipped(project, f'Dataflow job {job.id} has no metrics') continue if failed_jobs: report.add_failed( project, 'Some Dataflow jobs using deprecated Apache Beam SDK version: ' + ', '.join(itertools.islice(failed_jobs, 20)), ) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/dataflow_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import dataflow, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = dataflow project_id = 'gcpdiag-dataflow1-aaaa' ================================================ FILE: gcpdiag/lint/dataflow/err_2023_001_dataflow_sa_perm_check.py ================================================ # Copyright 2021 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. """Dataflow service account has dataflow.serviceAgent role Check that the service account service-@dataflow-service-producer-prod.iam.gserviceaccount.com has the following role: roles/dataflow.serviceAgent """ from gcpdiag import lint, models from gcpdiag.queries import crm, iam def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): role = 'roles/dataflow.serviceAgent' project = crm.get_project(context.project_id) iam_policy = iam.get_project_policy(context) project_nr = crm.get_project(context.project_id).number for member in sorted(iam_policy.get_members()): if member.startswith( 'serviceAccount:service-' + str(project_nr) + '@dataflow-service-producer-prod.iam.gserviceaccount.com'): if iam_policy.has_role_permissions(member, role): report.add_ok(project) break else: report.add_failed(project, member + f' does not has the role {role}') ================================================ FILE: gcpdiag/lint/dataflow/err_2023_002_dataflow_ip_space_exhausted.py ================================================ # # Copyright 2021 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. """Dataflow job does not fail during execution due to IP space exhaustion A dataflow job runs successfully if subnet has enough ip space for all workers in job, otherwise it fails with IP_SPACE_EXHAUSTED error. """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'IP_SPACE_EXHAUSTED' # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'textPayload=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/job-message")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ MATCH_STR not in get_path(log_entry, ('textPayload'), default=''): continue job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) failed_jobs.add(job_id) if failed_jobs: report.add_failed( project, 'Some Dataflow jobs failed due to exhaustion of IP Space: ' + ', '.join(itertools.islice(failed_jobs, 20))) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_003_dataflow_subnet_format_check.py ================================================ # # Copyright 2021 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. """Dataflow job does not fail during execution due to incorrect specification of subnet A dataflow job runs successfully if subnet is properly specified while launching the job, otherwise it fails with Invalid subnetwork specified error. """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Workflow failed. Causes: Invalid subnetwork specified' # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'textPayload=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/job-message")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ MATCH_STR not in get_path(log_entry, ('textPayload'), default=''): continue job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) failed_jobs.add(job_id) if failed_jobs: report.add_failed( project, 'Some Dataflow jobs failed due to ' + 'incorrect formatting of subnet specified while launching: ' + ', '.join(itertools.islice(failed_jobs, 20))) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_004_dataflow_org_policy_violated.py ================================================ # # Copyright 2021 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. """Dataflow job does not fail due to violating an organization policy constraint in project A dataflow job might fail if there are constraints for any (eg compute.vmExternalIpAccess, compute.requireShieldedVm etc.) that might limit VM instance creation in their project """ import itertools import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Constraint constraints/.* violated for project' contains_required_pattern = re.compile(MATCH_STR) # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'textPayload=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/job-message")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. msg = get_path(log_entry, ('textPayload'), default='') contains_required = contains_required_pattern.search(msg) # Filter out non-relevant log entries. if not (log_entry['severity'] == 'ERROR' and contains_required): continue job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) failed_jobs.add(job_id) if failed_jobs: report.add_failed( project, 'Some Dataflow jobs are unable to start workers ' + 'due to violating an organization policy constraint in project: ' + ', '.join(itertools.islice(failed_jobs, 20))) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_005_dataflow_credential_perm_issue.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataflow job does not fail during execution due credential or permission issue A dataflow job runs successfully if dataflow api is enabled and dataflow service account and controller service account have sufficient permission """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ( 'Workflow failed. Causes: There was a problem refreshing your credentials.') # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'textPayload=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/job-message")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, 'textPayload', default=''): continue job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) failed_jobs.add(job_id) if failed_jobs: report.add_failed( project, 'Some Dataflow jobs failed due to credential or permission issue: ' + ', '.join(itertools.islice(failed_jobs, 20)), ) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_006_dataflow_private_google_access_check.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataflow job fails if Private Google Access is disabled on Subnetwork Dataflow job fails when the subnetwork does not have Private Google Access which is required for usage of private IP addresses by the Dataflow workers for accessing Google APIs & Services """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'does not have Private Google Access' # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'textPayload=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/job-message")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ MATCH_STR not in get_path(log_entry, ('textPayload'), default=''): continue job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) failed_jobs.add(job_id) if failed_jobs: report.add_failed( project, 'Some Dataflow jobs failed because Private Google Access is disabled: ' + ', '.join(itertools.islice(failed_jobs, 20))) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_007_dataflow_missing_firewall_issue.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Streaming Dataflow job gets stuck when firewall rules are not configured Job is stuck because the firewall rules to allow communication between dataflow workers over port 12345 are missing. """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'failed to connect to all addresses' # Criteria to filter for logs LOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/shuffler")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if Logging or Dataflow APIs are disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if context.project_id in logs_by_project: failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'WARNING' or \ MATCH_STR not in get_path(log_entry, ('jsonPayload.message'), default=''): continue job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) failed_jobs.add(job_id) if failed_jobs: report.add_failed( project, 'Some Dataflow jobs are stuck due to missing firewall rules: ' + ', '.join(itertools.islice(failed_jobs, 20))) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_008_dataflow_sa_worker_perm_check.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataflow worker service account has roles/dataflow.worker role Check that the worker service account used in dataflow job has the following role: roles/dataflow.worker role """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, iam, logs # Criteria to filter for logs LOG_FILTER = [ 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', ('protoPayload.methodName="dataflow.jobs.updateContents" OR' ' "dataflow.jobs.create"'), ] logs_by_project = {} policies_by_project = {} WORKER_ROLE = 'roles/dataflow.worker' EDITOR_ROLE = 'roles/editor' OWNER_ROLE = 'roles/owner' def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. iam.get_project_policy(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): has_role = True project = crm.get_project(context.project_id) policies_by_project[context.project_id] = iam.get_project_policy(context) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if context.project_id in logs_by_project: failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: service_account = get_path( log_entry, ('protoPayload', 'request', 'serviceAccount'), ) job_id = get_path( log_entry, ('protoPayload', 'request', 'job_id'), ) sa_dataflow_worker_role = policies_by_project[ context.project_id].has_role_permissions( member=f'serviceAccount:{service_account}', role=WORKER_ROLE) sa_owner_role = policies_by_project[ context.project_id].has_role_permissions( member=f'serviceAccount:{service_account}', role=OWNER_ROLE) sa_editor_role = policies_by_project[ context.project_id].has_role_permissions( member=f'serviceAccount:{service_account}', role=EDITOR_ROLE) if sa_dataflow_worker_role or sa_owner_role or sa_editor_role: continue else: has_role = False failed_jobs.add('SA ' + service_account + ' used in ' + job_id + ' ' + 'does not has the role roles/dataflow.worker \n') if failed_jobs: report.add_failed( project, 'Some Dataflow jobs in which worker SA did not have Dataflow Worker' ' role: ' + ', '.join(itertools.islice(failed_jobs, 100)), ) if has_role: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_009_splunk_err_invalid_cert.py ================================================ # # Copyright 2021 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. """Splunk HEC endpoint uses a valid public SSL certificate, or a correct root-CA certificate. The Dataflow job will fail if the root-CA certificate provided is not the correct one or if the endpoint is not signed by a valid issuer. Check that the issuer for the certificate is valid and the correct certificate is provided. """ # pylint: enable=line-too-long from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = [ 'Error writing to Splunk', 'unable to find valid certification path to requested target', ] LOG_FILTER = [ 'severity=ERROR', 'jsonPayload.message: ("{}")'.format('" AND "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/worker")' # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER)) # "returns LogsQuery object" def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check that no (Splunk) job has invalid certification path error.""" project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, ('jsonPayload', 'message'), '') if log_entry['severity'] != 'ERROR' or all( m not in current_entry for m in MATCH_STRINGS): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) contain invalid certification path' f" errors: {', '.join(islice(failed_jobs, 20))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_010_bq_streaming_insert_missing_field.py ================================================ # # Copyright 2023 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. """Dataflow job with streaming inserts did not fail due to missing required field. The Dataflow job writing to bigquery using streaming inserts can fail due to missing required column. """ from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = [ ' java.io.IOException: Insert failed:', 'Insert failed', 'Missing required field:' ] LOG_FILTER = [ 'severity=ERROR', 'jsonPayload.message: ("{}")'.format('" AND "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/worker")' # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER)) # "returns LogsQuery object" def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check that no (dataflow) job failed due to missing bigquery field during streaming inserts.""" project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, ('jsonPayload', 'message'), '') if log_entry['severity'] != 'ERROR' or all( m not in current_entry for m in MATCH_STRINGS): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) failed due to Required field missing' f" errors: {', '.join(islice(failed_jobs, MAX_JOBS_TO_DISPLAY))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_011_bq_streaming_insert_mismatch_column.py ================================================ # # Copyright 2023 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. """Dataflow job using streaming insert did not fail due to mismatched column type. The Dataflow job writing to bigquery using streaming inserts can fail due to mismatched column type. """ from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = [ ' java.io.IOException: Insert failed:', 'Insert failed', 'Cannot convert value to integer (bad value):str_for_int_column' ] LOG_FILTER = [ 'severity=ERROR', 'jsonPayload.message: ("{}")'.format('" AND "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/worker")' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER)) # "returns LogsQuery object" def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check that no (dataflow) job failed due to mismatched column type error.""" project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, ('jsonPayload', 'message'), '') if log_entry['severity'] != 'ERROR' or all( m not in current_entry for m in MATCH_STRINGS): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) failed due to mismatched column type' f" errors: {', '.join(islice(failed_jobs, MAX_JOBS_TO_DISPLAY))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_012_dataflow_spanner_oom.py ================================================ # # Copyright 2023 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. # Lint as: python3 """Dataflow job writing to spanner did not fail due to OOM. Dataflow jobs that write to Spanner can potentially fail due to out-of-memory (OOM) errors. This is because the SpannerIO.write() transform, used to write data to Spanner, buffers mutations in memory to improve efficiency, and excessive memory use for buffering can lead to OOM errors. """ from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = [ 'Error message from worker: Processing stuck in step SpannerIO.Write/Write' ] LOG_FILTER = [ 'severity=ERROR', 'jsonPayload.message: ("{}")'.format('" AND "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/worker")' # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER)) # "returns LogsQuery object" def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check that no (dataflow) job writing to spanner failed due to OOM.""" project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, ('jsonPayload', 'message'), '') if log_entry['severity'] != 'ERROR' or all( m not in current_entry for m in MATCH_STRINGS): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) failed due to OOM' f" errors: {', '.join(islice(failed_jobs, MAX_JOBS_TO_DISPLAY))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2023_013_dataflow_spanner_deadline_exceeded.py ================================================ # # Copyright 2023 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. """Dataflow job reading from spanner did not fail due to deadline exceeded error. The Dataflow job reading from spanner, failed with deadline exceeded error a. If the job is not already using shuffle service, try enabling shuffle service. b. Timeouts are caused by too large work items. To make sure there are no timeouts, it is recommended trying to tweak some configurations in Spanner Read such as “maxPartittions” and “partitionSizeBytes”. c. If the CPU utilization is high, might have to scale up the metadata database. """ # pylint: enable=line-too-long from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = ['com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED'] LOG_FILTER = [ 'severity=ERROR', 'jsonPayload.message: ("{}")'.format('" AND "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/worker")' # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER)) # "returns LogsQuery object" def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check that no (dataflow) job reading from spanner failed with error.""" project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, ('jsonPayload', 'message'), '') if log_entry['severity'] != 'ERROR' or all( m not in current_entry for m in MATCH_STRINGS): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) failed due to deadline exceeded' f" errors: {', '.join(islice(failed_jobs, 20))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2024_001_dataflow_gce_quotas.py ================================================ # # Copyright 2021 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. """Dataflow job is not facing GCE resource constraints. The Dataflow job will return these errors when you are hitting GCE resource quotas due to which workers will not be successfully launched. """ # pylint: enable=line-too-long from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = [ 'has insufficient quota(s) to execute this workflow', 'The quota check has failed', 'Quota exceeded', 'Compute Engine API has not fully initialized', 'Throttling logger worker', 'This workload is drawing too much egress bandwidth from Cloud Storage', 'Per-customer shuffle size limit exceeded', 'RESOURCE_EXHAUSTED: Exceeds \'AppendRows throughput\' quota', 'RESOURCE_EXHAUSTED: Exceeds \'Concurrent connections\'', 'RESOURCE_EXHAUSTED: Exceeds \'CreateWriteStream requests\'', ] LOG_FILTER = [ 'severity>=WARNING', 'textPayload: ("{}")'.format('" OR "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/job-message")' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, 'textPayload', '') if (log_entry['severity'] != 'WARNING' or log_entry['severity'] != 'ERROR' or not any(m not in current_entry for m in MATCH_STRINGS)): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) are unable to start due to insufficient' ' quota(s). Please verify corresponding GCE quotas being exceeded' ' and have the customer request an increase.' f" {', '.join(islice(failed_jobs, 20))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2024_002_dataflow_key_commit.py ================================================ # # Copyright 2021 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. """Dataflow job is not returning KeyCommitTooLargeException errors. The Dataflow job will return this error due to grouping of a very large amount of data in a single window without using Combine, or by producing a large amount of data from a single input element. """ from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = [ 'KeyCommitTooLargeException', ('This may be caused by grouping a very large amount of data in a single' ' window without using Combine, or by producing a large amount of data' ' from a single input element'), ] LOG_FILTER = [ 'severity=ERROR', 'jsonPayload.message: ("{}")'.format('" OR "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/worker")' # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fjob-message' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, 'textPayload', '') if log_entry['severity'] != 'ERROR' or not any(m not in current_entry for m in MATCH_STRINGS): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) contain `KeyCommitTooLargeException`' f" errors: {', '.join(islice(failed_jobs, 20))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2024_003_dataflow_write_truncate_unbounded.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Streaming Dataflow jobs are not using WRITE_TRUNCATE when working with unbounded PCollections. Dataflow jobs when using WRITE_TRUNCATE with unbounded PCollections sources would return the warning 'WriteDisposition.WRITE_TRUNCATE is not supported for an unbounded PCollection'. When setting this via Dataflow SQL on the console, this option would not appear. """ import itertools from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ('WriteDisposition.WRITE_TRUNCATE is not supported for an unbounded' ' PCollection') # Criteria to filter for logs LOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/job-message")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if Logging or Dataflow APIs are disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if context.project_id in logs_by_project: failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'WARNING' or MATCH_STR not in get_path( log_entry, 'jsonPayload.message', default=''): continue job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) failed_jobs.add(job_id) if failed_jobs: report.add_failed( project, 'Dataflow jobs are using WRITE_TRUNCATE which does not work with' ' unbounded PCollection: ' + ', '.join(itertools.islice(failed_jobs, 20)), ) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2024_004_missing_gcs_permission_temp_bucket.py ================================================ # Copyright 2024 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. # Lint as: python3 """The Dataflow job has the necessary GCS permissions for the temporary bucket. Two primary reasons cause Dataflow jobs to fail when writing to a storage bucket: either the specified bucket does not exist within the targeted Google Cloud project, or the associated service account lacks the necessary permissions to write to it. """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Failed to write a file to temp location' # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'textPayload=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/job-message")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Runs the rule and reports any failed checks. Args: context: Context of the rule. report: A report object to report fail findings. """ project = crm.get_project(context.project_id) # skip entire rule if Logging or Dataflow APIs are disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return project_ok_flag = True if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, 'textPayload', default=''): continue project_ok_flag = False job_name = get_path( log_entry, ('resource', 'labels', 'job_name'), ) message = get_path(log_entry, 'textPayload') bucket_name_pattern = r"'([^']+)'" match = re.search(bucket_name_pattern, message) bucket_name = None if match: bucket_name = match.group(1) if job_name not in failed_jobs: failed_jobs.add(job_name) report.add_failed( project, f'Check {bucket_name} bucket exists and\nCheck {job_name} Dataflow' ' job Missing GCS permissions for temp bucket', ) if project_ok_flag: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/err_2024_005_dataflow_not_creating_pubsub_subscription.py ================================================ # # Copyright 2024 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. # Lint as: python3 # pylint: disable=line-too-long """Dataflow and its controller service account have the necessary permissions to interact with Pub/Sub topics. This rule ensures your Dataflow jobs have the `pubsub.subscriber` role to read messages, and the controller service account has the `pubsub.topics.get` permission (typically included in `pubsub.viewer`) to manage subscriptions. Without the correct permissions, Dataflow jobs will fail to create subscriptions, resulting in `GETTING_PUBSUB_SUBSCRIPTION_FAILED` errors and disrupting your data pipelines. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR1 = 'GETTING_PUBSUB_SUBSCRIPTION_FAILED' MATCH_STR2 = 'User not authorized to perform this action' # Criteria to filter for logs LOG_FILTER = [ 'severity>=WARNING', f'textPayload=~("{MATCH_STR1}" AND "{MATCH_STR2}")' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/job-message")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """The method first checks if the Logging or Dataflow APIs are enabled for the project. If either API is disabled, the method skips the rule and returns. If both APIs are enabled, the method checks for the log entries in the project. If the log entries are found, the method reports the failed resources. Args: context: The context for the rule, including the project_id and other info. report: The report to which any failed resources will be added. """ project = crm.get_project(context.project_id) # skip entire rule if Logging or Dataflow APIs are disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return project_ok_flag = True if context.project_id in logs_by_project: failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'WARNING' or MATCH_STR1 not in get_path( log_entry, 'textPayload', default=''): continue project_ok_flag = False job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) if job_id not in failed_jobs: failed_jobs.add(job_id) report.add_failed( project, f'Dataflow not creating Pub/Sub subscriptions for the job id:{job_id}' ) if project_ok_flag: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/snapshots/BP_2023_001.txt ================================================ * dataflow/BP/2023_001: Dataflow job is using supported Apache Beam SDK version - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_001.txt ================================================ * dataflow/ERR/2023_001: Dataflow service account has dataflow.serviceAgent role ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_002.txt ================================================ * dataflow/ERR/2023_002: Dataflow job does not fail during execution due to IP space exhaustion - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_003.txt ================================================ * dataflow/ERR/2023_003: Dataflow job does not fail during execution due to incorrect specification of subnet - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_004.txt ================================================ * dataflow/ERR/2023_004: Dataflow job does not fail due to violating an organization policy constraint in project - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_005.txt ================================================ * dataflow/ERR/2023_005: Dataflow job does not fail during execution due credential or permission issue - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_006.txt ================================================ * dataflow/ERR/2023_006: Dataflow job fails if Private Google Access is disabled on Subnetwork - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_007.txt ================================================ * dataflow/ERR/2023_007: Streaming Dataflow job gets stuck when firewall rules are not configured - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_008.txt ================================================ * dataflow/ERR/2023_008: Dataflow worker service account has roles/dataflow.worker role - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_009.txt ================================================ * dataflow/ERR/2023_009: Splunk HEC endpoint uses a valid public SSL certificate, or a correct root-CA certificate. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_010.txt ================================================ * dataflow/ERR/2023_010: Dataflow job with streaming inserts did not fail due to missing required field. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_011.txt ================================================ * dataflow/ERR/2023_011: Dataflow job using streaming insert did not fail due to mismatched column type. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_012.txt ================================================ * dataflow/ERR/2023_012: Dataflow job writing to spanner did not fail due to OOM. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2023_013.txt ================================================ * dataflow/ERR/2023_013: Dataflow job reading from spanner did not fail due to deadline exceeded error. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2024_001.txt ================================================ * dataflow/ERR/2024_001: Dataflow job is not facing GCE resource constraints. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2024_002.txt ================================================ * dataflow/ERR/2024_002: Dataflow job is not returning KeyCommitTooLargeException errors. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2024_003.txt ================================================ * dataflow/ERR/2024_003: Streaming Dataflow jobs are not using WRITE_TRUNCATE when working with unbounded PCollections. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2024_004.txt ================================================ * dataflow/ERR/2024_004: The Dataflow job has the necessary GCS permissions for the temporary bucket. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/ERR_2024_005.txt ================================================ * dataflow/ERR/2024_005: Dataflow and its controller service account have the necessary permissions to interact with Pub/Sub topics. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/WARN_2023_001.txt ================================================ * dataflow/WARN/2023_001: Dataflow job does not have a hot key - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/WARN_2023_003.txt ================================================ * dataflow/WARN/2023_003: Dataflow worker logs are not Throttled - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/WARN_2023_004.txt ================================================ * dataflow/WARN/2023_004: Dataflow job are not stuck at draining state for more than 3 hours - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/WARN_2023_006.txt ================================================ * dataflow/WARN/2023_006: A Dataflow job is not stuck in the canceling state - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/WARN_2024_001.txt ================================================ * dataflow/WARN/2024_001: Dataflow job is not returning Operation ongoing or Processing Stuck logs. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/snapshots/WARN_2024_002.txt ================================================ * dataflow/WARN/2024_002: Dataflow job using Streaming Appliance is not getting stuck due to Commit failed: computation doesn't have the state family. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataflow/warn_2023_001_dataflow_hot_key.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataflow job does not have a hot key A Dataflow job might have hot key which can limit the ability of Dataflow to process elements in parallel, which increases execution time. """ import itertools import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR1 = r'A hot key(\s' '.*' ')? was detected in step' MATCH_STR2 = 'A hot key was detected' contains_required_pattern1 = re.compile(MATCH_STR1) contains_required_pattern2 = re.compile(MATCH_STR2) # Criteria to filter for logs LOG_FILTER = [ 'severity>=WARNING', f'textPayload=~"{MATCH_STR1}" OR "{MATCH_STR2}"', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='dataflow_step', log_name=('log_id("dataflow.googleapis.com/worker") OR' ' log_id("dataflow.googleapis.com/harness")'), filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): failed_jobs = set() for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. msg = get_path(log_entry, 'textPayload', default='') contains_required1 = contains_required_pattern1.search(msg) contains_required2 = contains_required_pattern2.search(msg) if not (log_entry['severity'] >= 'WARNING' and (contains_required1 or contains_required2)): continue job_id = get_path( log_entry, ('resource', 'labels', 'job_id'), ) failed_jobs.add(job_id) if failed_jobs: report.add_failed( project, 'Some Dataflow jobs having hot key are: ' + ', '.join(itertools.islice(failed_jobs, 20)), ) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/warn_2023_003_dataflow_worker_logs_throttled.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataflow worker logs are not Throttled Check that worker logs are not throttled in Dataflow jobs. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm from gcpdiag.queries.logs_helper import Equals, LogsQuery, REFound logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = LogsQuery( project_id=context.project_id, resource_type='dataflow_step', log_name='log_id("dataflow.googleapis.com/worker")', search_exprs=[ Equals(field='severity', value='WARNING'), REFound( field='jsonPayload.message', re_exp='Throttling logger worker', ) ]) logs_by_project[context.project_id].mk_query() def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if Logging or Dataflow API is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return logs_query = logs_by_project[context.project_id] if logs_query.has_matching_entries: unique_jobs = logs_query.get_unique(lambda e: get_path( e, ('resource', 'labels', 'job_name'), default='unknown job')) report.add_failed(project, f'Dataflow worker logs are throttled: {unique_jobs}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/warn_2023_004_dataflow_stuck_at_draining.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataflow job are not stuck at draining state for more than 3 hours A Dataflow job might got stuck at draining as draining doesn't fix stuck pipelines. """ import itertools from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataflow dataflow_jobs_by_project = {} def prefetch_rule(context: models.Context): dataflow_jobs_by_project[context.project_id] = dataflow.get_all_dataflow_jobs( context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return jobs = dataflow_jobs_by_project[context.project_id] failed_jobs = set() if not jobs: report.add_skipped(None, 'no jobs found') for job in jobs: if job.state == 'JOB_STATE_DRAINING': if job.minutes_in_current_state > 180: failed_jobs.add(job.id) else: continue else: continue if failed_jobs: report.add_failed( project, 'Some Dataflow jobs stuck in draining for more than 3 hours are: ' + ', '.join(itertools.islice(failed_jobs, 20)), ) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/warn_2023_006_dataflow_stuck_at_cancelling.py ================================================ # # Copyright 2021 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. # Lint as: python3 """A Dataflow job is not stuck in the canceling state A Dataflow job may get stuck in the canceling state if it is requested to cancel while a snapshot is in progress. """ import itertools from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataflow dataflow_jobs_by_project = {} def prefetch_rule(context: models.Context): dataflow_jobs_by_project[context.project_id] = dataflow.get_all_dataflow_jobs( context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return jobs = dataflow_jobs_by_project[context.project_id] failed_jobs = set() if not jobs: report.add_skipped(None, 'no jobs found') for job in jobs: if job.state == 'JOB_STATE_CANCELLING': if job.minutes_in_current_state > 30: failed_jobs.add(job.id) if failed_jobs: report.add_failed( project, 'Some Dataflow jobs stuck in the cancelling state for more than 30 minutes: ' + ', '.join(itertools.islice(failed_jobs, 20)), ) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/warn_2024_001_dataflow_operation_ongoing.py ================================================ # # Copyright 2021 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. # Lint as: python3 # pylint: disable=line-too-long """Dataflow job is not returning Operation ongoing or Processing Stuck logs. The Dataflow job will return this warning when your DoFn code is slow, or waiting for some slow external operation to complete or when your DoFn code might be stuck, deadlocked, or abnormally slow to finish processing. """ # pylint: enable=line-too-long from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = [ 'Operation ongoing', 'Processing Stuck', ] LOG_FILTER = [ 'severity=WARNING', 'jsonPayload.message: ("{}")'.format('" OR "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/worker")' # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER), ) # "returns LogsQuery object" def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, ('jsonPayload', 'message'), '') if log_entry['severity'] != 'WARNING' or not any(m not in current_entry for m in MATCH_STRINGS): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) contain `Operation ongoing` or' ' `Processing Stuck` logs errors:' f" {', '.join(islice(failed_jobs, 20))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataflow/warn_2024_002_dataflow_streaming_appliance_commit_failed.py ================================================ # # Copyright 2023 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. # Lint as: python3 # pylint: disable=line-too-long """Dataflow job using Streaming Appliance is not getting stuck due to Commit failed: computation doesn't have the state family. Flatten operations should not be followed by a ParDo that uses a side input, doing so will return the above warning and cause the job to get stuck while running. The recommendation is restructuring the pipeline so that the ParDos with side inputs should come before any flatten operations. """ # pylint: enable=line-too-long from itertools import islice from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRINGS = ['Commit failed: computation', 'have the state family'] LOG_FILTER = [ 'severity=WARNING', 'jsonPayload.message: ("{}")'.format('" AND "'.join(MATCH_STRINGS)), ] project_logs = {} MAX_JOBS_TO_DISPLAY = 10 def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("dataflow.googleapis.com/shuffler")' project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if dataflow API is disabled if not apis.is_enabled(context.project_id, 'dataflow'): report.add_skipped(project, 'dataflow api is disabled') return if (context.project_id in project_logs and project_logs[context.project_id].entries): failed_jobs = set() for log_entry in project_logs[context.project_id].entries: current_entry = get_path(log_entry, ('jsonPayload', 'message'), '') if log_entry['severity'] != 'WARNING' or all( m not in current_entry for m in MATCH_STRINGS): continue job_id = get_path(log_entry, ('resource', 'labels', 'job_id')) failed_jobs.add(job_id) if failed_jobs: extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs' if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '') report.add_failed( project, f'{len(failed_jobs)} job(s) are stuck due to computation does not' ' have the state family warnings:' f" {', '.join(islice(failed_jobs, 20))} {extra_jobs}", ) else: # only irrelevant logs were fetched report.add_ok(project) else: # no logs matched the filter report.add_ok(project) ================================================ FILE: gcpdiag/lint/datafusion/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/datafusion/datafusion_rules_snapshot_test.py ================================================ # 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. """Generalize rule snapshot testing""" from unittest import mock from gcpdiag.lint import datafusion, snapshot_test_base from gcpdiag.queries import datafusion_test @mock.patch( 'gcpdiag.queries.datafusion.extract_support_datafusion_version', new=lambda: datafusion_test.SUPPORTED_VERSIONS_DICT, ) class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = datafusion project_id = 'gcpdiag-datafusion1-aaaa' ================================================ FILE: gcpdiag/lint/datafusion/err_2022_001_connectivity_dataproc_vms.py ================================================ # Copyright 2021 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """ Data Fusion instance firewall rules are configured. Private Data Fusion instances and Data Fusion versions below 6.2.0 require a firewall rule allowing incoming connections on TCP port 22 from the Data Fusion service to Dataproc VMs in the configured network. """ import ipaddress from gcpdiag import lint, models from gcpdiag.queries import datafusion from gcpdiag.queries.datafusion import Version def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = datafusion.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') for instance in instances.values(): if instance.is_private: # Private INGRESS i.network (Dataproc) <-- i.tp_ipv4_cidr:22 (Data Fusion TP) result = instance.network.firewall.check_connectivity_ingress( src_ip=instance.tp_ipv4_cidr, ip_protocol='tcp', port=22) if result.action == 'deny': if result.matched_by_str is None: report.add_failed( instance, 'network %s is missing firewall rule allowing connections from %s over port %s.' % (instance.network.short_path, instance.tp_ipv4_cidr, 22)) else: report.add_failed( instance, 'connections from %s over port %s blocked by %s in network %s' % (instance.tp_ipv4_cidr, 22, result.matched_by_str, instance.network.short_path)) continue elif instance.version < Version('6.2.0'): # Public INGRESS i.network (Dataproc) <-- 0.0.0.0/0:22 (Data Fusion TP) result = instance.network.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('0.0.0.0/0'), ip_protocol='tcp', port=22) if result.action == 'deny': if result.matched_by_str is None: report.add_failed( instance, 'network %s is missing firewall rule allowing connections from 0.0.0.0/0 over port %s' % (instance.network.short_path, 22)) else: report.add_failed( instance, 'connections from 0.0.0.0/0 over port %s blocked by %s in network %s' % (22, result.matched_by_str, instance.network.short_path)) continue report.add_ok(instance) ================================================ FILE: gcpdiag/lint/datafusion/err_2022_002_shared_vpc_ip_range.py ================================================ # Copyright 2021 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """ Private Data Fusion instance has valid host VPC IP range. Private Data Fusion instance using Shared VPC requires 'Service Networking API' to be enabled, and an IP range of at least /22. """ import re from gcpdiag import lint, models from gcpdiag.queries import apis, datafusion def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = datafusion.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') for instance in instances.values(): if instance.is_private and instance.uses_shared_vpc: match = re.match(r'([^/]+)/([^/]+)$', instance.network.short_path) if match: host_project = match.group(1) if apis.is_enabled(host_project, 'servicenetworking'): if instance.tp_ipv4_cidr is not None: if instance.tp_ipv4_cidr.prefixlen > 22: report.add_failed( instance, 'Allocated IP range %s in host VPC network %s is too small.' % (instance.tp_ipv4_cidr, instance.network.short_path)) else: report.add_failed( instance, 'Host VPC network %s has no Data Fusion allocated IP range.' % (instance.network.short_path)) else: report.add_failed( instance, 'Service Networking API disabled in host VPC project %s.' % (host_project)) else: report.add_failed( instance, 'failed to extract project id from network path %s.' % (instance.network.short_path)) report.add_ok(instance) ================================================ FILE: gcpdiag/lint/datafusion/err_2022_003_private_peering.py ================================================ # Copyright 2021 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """ Private Data Fusion instance is peered to the tenant project. Private Data Fusion instance requires peered connection to Data Fusion tenant project. """ import re from gcpdiag import lint, models from gcpdiag.queries import datafusion def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = datafusion.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') for instance in instances.values(): if instance.is_private: is_peered_to_tp = False if instance.network.peerings is not None: #Check all peered connections for the correct Data Fusion one. for peer in instance.network.peerings: match = re.match( r'https://www.googleapis.com/compute/([^/]+)/' 'projects/([^/]+)/([^/]+)/networks/([^/]+)$', peer.url) if match: peered_project = match.group(2) peered_network = match.group(4) if peered_project == instance.tenant_project_id: if instance.location in peered_network: #Data Fusion peered VPC network name = INSTANCE_REGION-INSTANCE_ID peer_instance_name = peered_network.removeprefix( instance.location) peer_instance_name = peer_instance_name.removeprefix('-') if peer_instance_name == instance.name: if peer.state == 'ACTIVE': if peer.exports_custom_routes: if peer.imports_custom_routes: is_peered_to_tp = True break else: report.add_failed( instance, (f'peered connection {peer.name} in network ' f'{instance.network.short_path} ' f'is not importing custom routes.')) else: report.add_failed( instance, (f'peered connection {peer.name} in network ' f'{instance.network.short_path} ' f'is not exporting custom routes.')) else: report.add_failed( instance, (f'peered connection {peer.name} in network ' f'{instance.network.short_path} is not active.')) else: report.add_failed( instance, (f'failed to extract project id and network id from peer url ' f'{peer.url}.')) if not is_peered_to_tp: report.add_failed( instance, (f'private instance network {instance.network.short_path} ' f'is not correctly peered to tenant project ' f'{instance.tenant_project_id}.')) else: report.add_ok(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/datafusion/err_2022_004_cloud_datafusion_sa_permissions.py ================================================ # 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. # Lint as: python3 """Cloud Data Fusion Service Account permissions Verify that the Cloud Data Fusion Service Agent account exists and has the Cloud Data Fusion Service Agent role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, iam DATAFUSION_ROLE = 'roles/datafusion.serviceAgent' policies_by_project = {} def prefetch_rule(context: models.Context): policies_by_project[context.project_id] = iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project_id = context.project_id project = crm.get_project(project_id) datafusion_sa = f'service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com' if not apis.is_enabled(project_id, 'datafusion'): report.add_skipped(None, f'Cloud Data Fusion API is not enabled in {project}') return if not policies_by_project[project_id].has_role_permissions( f'serviceAccount:{datafusion_sa}', DATAFUSION_ROLE): report.add_failed( project, f'The Cloud Data Fusion Service Account is missing {DATAFUSION_ROLE} or does not exist' ) else: report.add_ok(project, f'\n{datafusion_sa} has {DATAFUSION_ROLE}') ================================================ FILE: gcpdiag/lint/datafusion/err_2022_005_host_vpc_permissions.py ================================================ # Copyright 2021 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """ Private Data Fusion instance has networking permissions. Private Data Fusion instance requires networking permissions. """ from gcpdiag import lint, models from gcpdiag.queries import crm, datafusion, iam, network COMPUTE_NETWORK_USER_ROLE = 'roles/compute.networkUser' COMPUTE_NETWORK_VIEWER_ROLE = 'roles/compute.networkViewer' def validate_iam_roles(context: models.Context, service_account: str, service_account_name: str, host_project: str, host_iam_policy: iam.BaseIAMPolicy, instance: datafusion.Instance, report: lint.LintReportRuleInterface) -> bool: # Project Level Check sa_has_net_user = host_iam_policy.has_role_permissions( f'serviceAccount:{service_account}', COMPUTE_NETWORK_USER_ROLE) if not sa_has_net_user: sa_has_net_viewer = host_iam_policy.has_role_permissions( f'serviceAccount:{service_account}', COMPUTE_NETWORK_VIEWER_ROLE) # Subnet Level Check for subnet in instance.network.subnetworks.values(): if subnet.region == instance.location: subnet_iam_policy = network.get_subnetwork_iam_policy( context, instance.location, subnet.name) sa_has_net_user = subnet_iam_policy.has_role_permissions( f'serviceAccount:{service_account}', COMPUTE_NETWORK_USER_ROLE) if sa_has_net_user: break if not sa_has_net_viewer and sa_has_net_user: report.add_failed(instance, (f'{service_account_name} {service_account} ' f'missing {COMPUTE_NETWORK_VIEWER_ROLE} IAM role on ' f'host project {host_project}.')) return False elif sa_has_net_viewer and not sa_has_net_user: report.add_failed(instance, (f'{service_account_name} {service_account} ' f'missing {COMPUTE_NETWORK_USER_ROLE} IAM role on ' f'subnetwork with region {instance.location} ' f'in host network {instance.network.short_path}')) return False elif not sa_has_net_viewer and not sa_has_net_user: report.add_failed(instance, (f'{service_account_name} {service_account} ' f'missing {COMPUTE_NETWORK_USER_ROLE} IAM role on ' f'host project {host_project}.')) return False return True def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = datafusion.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') service_project = crm.get_project(context.project_id) datafusion_service_agent = (f'service-{service_project.number}' f'@gcp-sa-datafusion.iam.gserviceaccount.com') dataproc_service_agent = (f'service-{service_project.number}' f'@dataproc-accounts.iam.gserviceaccount.com') for instance in instances.values(): if instance.uses_shared_vpc and not instance.is_deleting: host_project = instance.network.project_id host_project_context = context.copy_with(project_id=host_project) host_iam_policy = iam.get_project_policy(host_project_context) datafusion_sa_is_valid = validate_iam_roles( host_project_context, datafusion_service_agent, 'Cloud Data Fusion API Service Agent', host_project, host_iam_policy, instance, report, ) dataproc_sa_is_valid = validate_iam_roles( host_project_context, dataproc_service_agent, 'Dataproc Service Agent service account', host_project, host_iam_policy, instance, report, ) if datafusion_sa_is_valid and dataproc_sa_is_valid: report.add_ok(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/datafusion/err_2022_006_private_google_access.py ================================================ # Copyright 2021 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """ Private Google Access enabled for private Data Fusion instance subnetwork. Private Google Access required on private Data Fusion instance subnetwork. """ from gcpdiag import lint, models from gcpdiag.queries import datafusion def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = datafusion.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') for instance in instances.values(): if instance.is_private: is_private_ip_google_access = False for subnet in instance.network.subnetworks.values(): if subnet.region == instance.location: is_private_ip_google_access = subnet.is_private_ip_google_access() if is_private_ip_google_access: break if not is_private_ip_google_access: report.add_failed(instance, (f'Private Google Access is not enabled on ' f'subnetwork with region {instance.location} ' f'in network {instance.network.short_path}')) else: report.add_ok(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/datafusion/err_2022_007_cloud_datafusion_sa_permissions.py ================================================ # 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. # Lint as: python3 """ Cloud Data Fusion Service Account exists Cloud Data Fusion Service Account fetched from a Cloud Data Fusion instance is missing at a Project's IAM policy """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion, iam projects_instances = {} IAM_ROLE = 'roles/iam.serviceAccountUser' def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}' ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, 'Cloud Data Fusion instances were not found') return for _, datafusion_instance in sorted(datafusion_instances.items()): iam_policy = iam.get_project_policy(context) p4sa = datafusion_instance.api_service_agent if not p4sa: report.add_skipped( None, f'{datafusion_instance.name} ' f'does not have Cloud Data Fusion Service Account') continue datafusion_sa = 'serviceAccount:' + p4sa members = iam_policy.get_members() result = datafusion_sa in members if not result: report.add_failed( datafusion_instance, f'{datafusion_sa} missing or does not exist at project') else: report.add_ok(datafusion_instance) ================================================ FILE: gcpdiag/lint/datafusion/err_2022_008_cloud_datafusion_sa_permissions.py ================================================ # 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. # Lint as: python3 """ Cloud Data Fusion SA has Service Account User permissions on the Dataproc SA. Cloud Data Fusion Service Account is missing Service Account User permissions on the Dataproc service account associated with the Data Fusion instance. """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion, iam IAM_ROLE = 'roles/iam.serviceAccountUser' projects_instances = {} def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}' ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, f'no Cloud Data Fusion instances were found {context}') return iam_policy = iam.get_project_policy(context) constructed_datafusion_sa = ('serviceAccount:service-{project_number}' '@gcp-sa-datafusion.iam.gserviceaccount.com') project_iam_policy_result = iam_policy.has_role_permissions( constructed_datafusion_sa, IAM_ROLE) for _, datafusion_instance in sorted(datafusion_instances.items()): dataproc_service_account = datafusion_instance.dataproc_service_account if not dataproc_service_account: report.add_skipped( None, f'{datafusion_instance.name} ' 'does not have DataProc Service Account') continue service_account_iam_policy = iam.get_service_account_iam_policy( context, dataproc_service_account) p4sa = datafusion_instance.api_service_agent datafusion_sa = 'serviceAccount:' + p4sa sa_iam_policy_result = service_account_iam_policy.has_role_permissions( datafusion_sa, IAM_ROLE) if project_iam_policy_result or sa_iam_policy_result: report.add_ok(datafusion_instance) else: report.add_failed( datafusion_instance, f'{datafusion_sa}\nlacks {IAM_ROLE} ' f'on DataProc SA ({dataproc_service_account}) associated with ' f'{datafusion_instance.name}') ================================================ FILE: gcpdiag/lint/datafusion/err_2022_009_cloud_dataproc_sa_permissions.py ================================================ # 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. # Lint as: python3 """ Cloud Dataproc Service Account has a Cloud Data Fusion Runner role. Cloud Dataproc Service Account is missing a Cloud Data Fusion Runner role at the Project's IAM policy. """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion, iam DF_RUNNER = 'roles/datafusion.runner' projects_instances = {} def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}' ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, f'no Cloud Data Fusion instances not found {context}') return iam_policy = iam.get_project_policy(context) for _, datafusion_instance in sorted(datafusion_instances.items()): instance_dataproc_sa = datafusion_instance.dataproc_service_account if not instance_dataproc_sa: report.add_skipped( None, f'{datafusion_instance.name} ' 'does not have DataProc Service Account') continue dataproc_sa = 'serviceAccount:' + instance_dataproc_sa project_policy_result = iam_policy.has_role_permissions( dataproc_sa, DF_RUNNER) if project_policy_result: report.add_ok(datafusion_instance) else: report.add_failed(datafusion_instance, f'{dataproc_sa} lacks {DF_RUNNER}') ================================================ FILE: gcpdiag/lint/datafusion/err_2022_010_cloud_datafusion_sa_permissions.py ================================================ # 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. # Lint as: python3 """ Cloud Dataproc Service Account has a Dataproc Worker role. Cloud Dataproc Service Account associated with a Cloud DataFusion instance is missing a Dataproc Worker role at the Project's IAM policy. """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion, iam DP_WORKER = 'roles/dataproc.worker' projects_instances = {} def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}' ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, f'no Cloud Data Fusion instances not found {context}') return iam_policy = iam.get_project_policy(context) for _, datafusion_instance in sorted(datafusion_instances.items()): instance_dataproc_sa = datafusion_instance.dataproc_service_account if not instance_dataproc_sa: report.add_skipped( None, f'{datafusion_instance.name} ' 'does not have Dataproc Service Account') continue dataproc_sa = 'serviceAccount:' + instance_dataproc_sa project_policy_result = iam_policy.has_role_permissions( dataproc_sa, DP_WORKER) if project_policy_result: report.add_ok(datafusion_instance) else: report.add_failed(datafusion_instance, f'{dataproc_sa} lacks {DP_WORKER}') ================================================ FILE: gcpdiag/lint/datafusion/err_2022_011_cloud_datafusion_sa_permissions.py ================================================ # 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. # Lint as: python3 """ The Dataproc SA for a CDF instance with version > 6.2.0 has Storage Admin role. The Dataproc Service Account associated with a Cloud Data Fusion instance with version > 6.2.0 is missing the Cloud Storage Admin role """ from packaging import version from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion, iam STORAGE_ADMIN = 'roles/storage.admin' projects_instances = {} def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}' ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, f'Cloud Data Fusion instances were not found {context}') return iam_policy = iam.get_project_policy(context) for datafusion_instance in sorted(datafusion_instances.values()): instance_dataproc_sa = datafusion_instance.dataproc_service_account if not instance_dataproc_sa: report.add_skipped( None, f'{datafusion_instance.name} ' f'does not have DataProc Service Account') df_instance_version = datafusion_instance.version if version.parse(str(df_instance_version)) < version.parse('6.2.0'): report.add_skipped(None, 'Rule only applicable for datafusion version >=6.2.0') continue dataproc_sa = 'serviceAccount:' + instance_dataproc_sa project_policy_result = iam_policy.has_role_permissions( dataproc_sa, STORAGE_ADMIN) if project_policy_result: report.add_ok(datafusion_instance) else: report.add_failed(datafusion_instance, f'{dataproc_sa} lacks {STORAGE_ADMIN}') ================================================ FILE: gcpdiag/lint/datafusion/err_2024_001_delete_operation_failing.py ================================================ # Copyright 2024 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. # Lint as: python3 """Datafusion delete operation not failing. During the instance deletion process there are cases wherein a networking resource (i.e route) in the tenant project might not get deleted due to which the process gets stalled in Deleting, and other reasons include missing IAM roles in Google managed datafusion serviceAccount. """ import re from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion, iam, logs SERVICE_NAME = 'datafusion.googleapis.com' METHOD_NAME = 'google.cloud.datafusion.v1.DataFusion.DeleteInstance' logs_by_project = {} projects_instances = {} projects = {} IAM_ROLE = 'roles/datafusion.serviceAgent' FILTER_1 = [ 'severity=ERROR', f'protoPayload.serviceName:("{SERVICE_NAME}")', f'protoPayload.methodName:("{METHOD_NAME}")', ] def find_instance(arr_of_datafusion_envs: dict, search_str: str): for instance in arr_of_datafusion_envs.values(): if instance.full_path == search_str: return instance def prefetch_rule(context: models.Context): projects[context.project_id] = crm.get_project(context.project_id) projects_instances[context.project_id] = datafusion.get_instances(context) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='audited_resource', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(FILTER_1), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Checks if Data Fusion instance delete operation is failing. Args: context: The context for the rule, including the project_id, credentials, and other info. report: The report to which to report results. """ if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, 'Cloud Data Fusion API is not enabled in' f' { projects[context.project_id]}', ) return datafusion_instances = projects_instances[context.project_id] project = projects[context.project_id] if not datafusion_instances: report.add_skipped(None, f'Cloud Data Fusion instances were not found {context}') return instance_full_path_set = set() deleting_instance_flag = False for datafusion_instance in sorted(datafusion_instances.values()): instance_full_path_set.add(datafusion_instance.full_path) if datafusion_instance.is_deleting: deleting_instance_flag = True if (logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries) or deleting_instance_flag: iam_policy = iam.get_project_policy(context) datafusion_sa = ( f'serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com' ) project_iam_policy_result = iam_policy.has_role_permissions( datafusion_sa, IAM_ROLE) if not project_iam_policy_result: report.add_failed(project, f'{datafusion_sa}\nLacks {IAM_ROLE}') return project_ok_flag = True for log_entry in logs_by_project[context.project_id].entries: if (log_entry['protoPayload']['methodName'] == METHOD_NAME and log_entry['severity'] == 'ERROR' and log_entry['protoPayload']['resourceName'] in instance_full_path_set): message = log_entry['protoPayload']['status']['message'] match = re.search(r'::(.*?):([^:]+)\.', message) instance_name = find_instance(datafusion_instances, log_entry['protoPayload']['resourceName']) if match: message = match.group(2) report.add_failed(instance_name, f'{message}') project_ok_flag = False instance_full_path_set.remove(log_entry['protoPayload']['resourceName']) if project_ok_flag: report.add_ok(project) ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_001.txt ================================================ * datafusion/ERR/2022_001: Data Fusion instance firewall rules are configured. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_002.txt ================================================ * datafusion/ERR/2022_002: Private Data Fusion instance has valid host VPC IP range. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_003.txt ================================================ * datafusion/ERR/2022_003: Private Data Fusion instance is peered to the tenant project. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL] private instance network gcpdiag-datafusion1-aaaa/default is not correctly peered to tenant project fd736090192f24d58-tp. Private Data Fusion instance requires peered connection to Data Fusion tenant project. https://gcpdiag.dev/rules/datafusion/ERR/2022_003 ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_004.txt ================================================ * datafusion/ERR/2022_004: Cloud Data Fusion Service Account permissions - projects/gcpdiag-datafusion1-aaaa [ OK ] service-12340010@gcp-sa-datafusion.iam.gserviceaccount.com has roles/datafusion.serviceAgent ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_005.txt ================================================ * datafusion/ERR/2022_005: Private Data Fusion instance has networking permissions. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_006.txt ================================================ * datafusion/ERR/2022_006: Private Google Access enabled for private Data Fusion instance subnetwork. (Error: 'regions/us-east7') [SKIP] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_007.txt ================================================ * datafusion/ERR/2022_007: Cloud Data Fusion Service Account exists - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_008.txt ================================================ * datafusion/ERR/2022_008: Cloud Data Fusion SA has Service Account User permissions on the Dataproc SA. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_009.txt ================================================ * datafusion/ERR/2022_009: Cloud Dataproc Service Account has a Cloud Data Fusion Runner role. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_010.txt ================================================ * datafusion/ERR/2022_010: Cloud Dataproc Service Account has a Dataproc Worker role. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2022_011.txt ================================================ * datafusion/ERR/2022_011: The Dataproc SA for a CDF instance with version > 6.2.0 has Storage Admin role. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/ERR_2024_001.txt ================================================ * datafusion/ERR/2024_001: Datafusion delete operation not failing. - projects/gcpdiag-datafusion1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/WARN_2024_001.txt ================================================ * datafusion/WARN/2024_001: Data Fusion version is supported. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL] Datafusion Version: 6.7.1 Supported till 2023-02-28(Upgrade DataFusion Environment) A major or minor version of Cloud Data Fusion environment is supported for a specific period of time after it is released.After that period, instances that continue to use the environment version are no longer supported. https://gcpdiag.dev/rules/datafusion/WARN/2024_001 ================================================ FILE: gcpdiag/lint/datafusion/snapshots/WARN_2024_002.txt ================================================ * datafusion/WARN/2024_002: Data Fusion instance is in a running state. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] ================================================ FILE: gcpdiag/lint/datafusion/snapshots/WARN_2024_003.txt ================================================ * datafusion/WARN/2024_003: Scaling down is disabled for the Compute Profile for Dataproc. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] projects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/autoscaling-dataproc - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] projects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/dataproc - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL] projects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/namespace_profile : autoscaling down enabled Autoscaling is not recommended for scaling down. Decreasing the cluster size with autoscaling removes nodes that hold intermediate data, which might cause your pipelines to run slowly or fail in datafusion. https://gcpdiag.dev/rules/datafusion/WARN/2024_003 ================================================ FILE: gcpdiag/lint/datafusion/snapshots/WARN_2024_004.txt ================================================ * datafusion/WARN/2024_004: Data Fusion version is compatible with Dataproc version from the corresponding compute profiles. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] projects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/autoscaling-dataproc (No imageVersion defined) - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] projects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/dataproc (No imageVersion defined) - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL] projects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/namespace_profile Datafusion version : 6.7.1 Dataproc version : 2.0 The version of your Cloud Data Fusion environment might not be compatible with the version of your Dataproc cluster from the corresponding compute profiles. https://gcpdiag.dev/rules/datafusion/WARN/2024_004 ================================================ FILE: gcpdiag/lint/datafusion/snapshots/WARN_2024_005.txt ================================================ * datafusion/WARN/2024_005: Data Fusion version is compatible with Dataproc version from the CDAP Preferences settings. - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL] Application preferences found pipeline name : pipeline1 Datafusion version : 6.7.1 Dataproc version : 2.2 Check Datafusion version is compatible with Dataproc version (VERSION INCOMPATIBILITY FOUND) - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL] Namespace preferences found namespace name : default Datafusion version : 6.7.1 Dataproc version : 2.1 Check Datafusion version is compatible with Dataproc version (VERSION INCOMPATIBILITY FOUND) - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL] System preferences found Datafusion version : 6.7.1 Dataproc version : 2.1 Check Datafusion version compatible with Dataproc version (VERSION INCOMPATIBILITY FOUND) The version of your Cloud Data Fusion environment might not be compatible with the version of your Dataproc cluster from the CDAP Preferences settings.Check image version set in the Compute Configurations, Namespace Preferences, or Pipeline Runtime Arguments. https://gcpdiag.dev/rules/datafusion/WARN/2024_005 ================================================ FILE: gcpdiag/lint/datafusion/warn_2024_001_data_fusion_version.py ================================================ # Copyright 2024 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. # Lint as: python3 """Data Fusion version is supported. A major or minor version of Cloud Data Fusion environment is supported for a specific period of time after it is released.After that period, instances that continue to use the environment version are no longer supported. """ from datetime import datetime from packaging import version from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion projects_instances = {} def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Checks if the datafusion version is supported. Args: context: The context for the rule, containing the project_id. report: The report to which to report results. """ version_policy = datafusion.extract_support_datafusion_version() if not version_policy: report.add_skipped(None, 'No Supported Versions Data Obtained') return if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, 'Cloud Data Fusion API is not enabled in' f' {crm.get_project(context.project_id)}', ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, f'Cloud Data Fusion instances were not found {context}') return current_date = datetime.now().strftime('%Y-%m-%d') for datafusion_instance in sorted(datafusion_instances.values()): df_instance_parsed_version = version.parse(str(datafusion_instance.version)) version_to_compare = ( f'{df_instance_parsed_version.major}.{df_instance_parsed_version.minor}' ) if version_to_compare in version_policy: if current_date <= version_policy[version_to_compare]: report.add_ok( datafusion_instance, f'\n\tDatafusion Version: {datafusion_instance.version}' f'\n\tSupports till {version_policy[version_to_compare]}', ) else: report.add_failed( datafusion_instance, '\n\tDatafusion Version:' f' {datafusion_instance.version}\n\tSupported till' f' {version_policy[version_to_compare]}(Upgrade DataFusion' ' Environment)', ) ================================================ FILE: gcpdiag/lint/datafusion/warn_2024_002_instance_state_running.py ================================================ # Copyright 2024 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """Data Fusion instance is in a running state. Data Fusion instance is not in a running state, The datafusion state is either Disabled or Failed, The reason for this disabled or Failed state could be due to configuration errors, KMS key disabled/denied access or key revoked etc... """ from gcpdiag import lint, models from gcpdiag.queries import datafusion instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = instances_by_project[context.project_id] if len(instances) == 0: report.add_skipped(None, 'no instances found') for instance in instances.values(): if instance.status not in ('FAILED', 'DISABLED'): report.add_ok(instance) else: if instance.status_details is not None: report.add_failed( instance, (f'Instance is in state {instance.status} ' f'with reason: `{instance.status_details}`'), ) else: report.add_failed(instance, f'Instance is in state {instance.status} ') ================================================ FILE: gcpdiag/lint/datafusion/warn_2024_003_cluster_scaling_down_disabled.py ================================================ # Copyright 2024 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. # Lint as: python3 """Scaling down is disabled for the Compute Profile for Dataproc. Autoscaling is not recommended for scaling down. Decreasing the cluster size with autoscaling removes nodes that hold intermediate data, which might cause your pipelines to run slowly or fail in datafusion. """ import re from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion, dataproc projects_instances = {} def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Checks if the autoscaling down is enabled for the compute profile.""" if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, 'Cloud Data Fusion API is not enabled in' f' {crm.get_project(context.project_id)}', ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, f'no Cloud Data Fusion instances found {context}') return for _, datafusion_instance in sorted(datafusion_instances.items()): compute_profiles = [] # fetch compute profiles of the instance compute_profiles.extend( datafusion.get_instance_system_compute_profile(context, datafusion_instance)) compute_profiles.extend( datafusion.get_instance_user_compute_profile(context, datafusion_instance)) if not compute_profiles: report.add_skipped(None, 'No compute profile found') #Check the autoscaling property for profile in compute_profiles: if profile.autoscaling_enabled: report.add_ok(datafusion_instance, f'\n\t{profile}\n') elif profile.auto_scaling_policy != 'No autoScalingPolicy defined': uri = profile.auto_scaling_policy match = re.match( r'projects/([^/]+)/regions/([^/]+)/autoscalingPolicies/([^/]+)', uri) if match: project_id = match.group(1) region = match.group(2) policy_id = match.group(3) policy = dataproc.get_auto_scaling_policy(project_id, region, policy_id) if policy.scale_down_factor != 0.0: report.add_failed(datafusion_instance, f' {profile} : autoscaling down enabled\n') else: report.add_ok(datafusion_instance, f'\n\t{profile}\n') else: report.add_ok(datafusion_instance, f'\n\t{profile}\n') ================================================ FILE: gcpdiag/lint/datafusion/warn_2024_004_datafusion_dataproc_compatabillity.py ================================================ # Copyright 2024 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. # Lint as: python3 """Data Fusion version is compatible with Dataproc version from the corresponding compute profiles. The version of your Cloud Data Fusion environment might not be compatible with the version of your Dataproc cluster from the corresponding compute profiles. """ import re from packaging import version from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion projects_instances = {} def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """ Checks if the datafusion version is compatible with dataproc version from the corresponding compute profiles. """ if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, 'Cloud Data Fusion API is not enabled in' f' {crm.get_project(context.project_id)}', ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, f'no Cloud Data Fusion instances found {context}') return for _, datafusion_instance in sorted(datafusion_instances.items()): compute_profiles = [] # fetch compute profiles of the instance compute_profiles.extend( datafusion.get_instance_system_compute_profile(context, datafusion_instance)) compute_profiles.extend( datafusion.get_instance_user_compute_profile(context, datafusion_instance)) if not compute_profiles: report.add_skipped(None, 'No compute profile found') return datafusion_dataproc_version = datafusion.extract_datafusion_dataproc_version( ) if not datafusion_dataproc_version: report.add_skipped(None, "No datafusion and dataproc version's data obtained") # Check the autoscaling property for profile in compute_profiles: if profile.image_version != 'No imageVersion defined': dataproc_version = profile.image_version dataproc_parsed_version = re.match(r'(\d+\.\d+)', dataproc_version) if not dataproc_parsed_version: report.add_skipped( None, f'Dataproc version : {dataproc_version} is not valid') return datafusion_version = version.parse(str(datafusion_instance.version)) version_to_compare = ( f'{datafusion_version.major}.{datafusion_version.minor}') if version_to_compare in datafusion_dataproc_version: if (dataproc_parsed_version.group(1) in datafusion_dataproc_version[version_to_compare]): report.add_ok( datafusion_instance, f'\n\t{profile}\n\tDatafusion version :' f' {datafusion_version}\n\tDataproc version :' f' {dataproc_version}\n', ) else: report.add_failed( datafusion_instance, f'\t{profile}\n\tDatafusion version :' f' {datafusion_version}\n\tDataproc version :' f' {dataproc_version}\n', ) else: report.add_ok(datafusion_instance, f'\n\t{profile}\n\t(No imageVersion defined)\n') ================================================ FILE: gcpdiag/lint/datafusion/warn_2024_005_datafusion_dataproc_compatability_preference.py ================================================ # Copyright 2024 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. # Lint as: python3 """Data Fusion version is compatible with Dataproc version from the CDAP Preferences settings. The version of your Cloud Data Fusion environment might not be compatible with the version of your Dataproc cluster from the CDAP Preferences settings.Check image version set in the Compute Configurations, Namespace Preferences, or Pipeline Runtime Arguments. """ import re from packaging import version from gcpdiag import lint, models from gcpdiag.queries import apis, crm, datafusion projects_instances = {} datafusion_dataproc_version = datafusion.extract_datafusion_dataproc_version() def prefetch_rule(context: models.Context): projects_instances[context.project_id] = datafusion.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Checks if the datafusion version is compatible with dataproc version from the corresponding compute profiles. """ if not apis.is_enabled(context.project_id, 'datafusion'): report.add_skipped( None, 'Cloud Data Fusion API is not enabled in' f' {crm.get_project(context.project_id)}', ) return datafusion_instances = projects_instances[context.project_id] if not datafusion_instances: report.add_skipped(None, f'no Cloud Data Fusion instances found {context}') return if not datafusion_dataproc_version: report.add_skipped(None, "No datafusion and dataproc version's data obtained") for _, datafusion_instance in sorted(datafusion_instances.items()): system_preferences = datafusion.get_system_preferences( context, datafusion_instance) namespace_preferences = datafusion.get_namespace_preferences( context, datafusion_instance) application_preferences = datafusion.get_application_preferences( context, datafusion_instance) datafusion_version = datafusion_instance.version if application_preferences: for ( application_name, application_preference, ) in application_preferences.items(): if application_preference.image_version: dataproc_version = application_preference.image_version dataproc_valid_version = check_dataproc_version_valid( dataproc_version) if not dataproc_valid_version: report.add_skipped( None, f'Dataproc version : {dataproc_version} is not valid') else: compatible = check_datafusion_dataproc_version_compatibility( datafusion_version, dataproc_valid_version) if compatible: report.add_ok( datafusion_instance, 'Application preferences found\npipeline name :' f' {application_name}\n\tDatafusion version :' f' {datafusion_version}\n\tDataproc version :' f' {dataproc_version}\n', ) else: report.add_failed( datafusion_instance, 'Application preferences found\npipeline name :' f' {application_name}\n\tDatafusion version :' f' {datafusion_version}\n\tDataproc version :' f' {dataproc_version}\n\tCheck Datafusion version is' ' compatible with Dataproc version (VERSION INCOMPATIBILITY' ' FOUND)\n', ) if namespace_preferences: for namespace_name, namespace_preference in namespace_preferences.items(): if namespace_preference.image_version: dataproc_version = namespace_preference.image_version dataproc_valid_version = check_dataproc_version_valid( dataproc_version) if not dataproc_valid_version: report.add_skipped( None, f'Dataproc version : {dataproc_version} is not valid') else: compatible = check_datafusion_dataproc_version_compatibility( datafusion_version, dataproc_valid_version) if compatible: report.add_ok( datafusion_instance, '\n\tNamespace preferences found' f'\n\tnamespace name : {namespace_name}' '\n\tDatafusion version :' f' {datafusion_version}\n\tDataproc version :' f' {dataproc_version}\n', ) else: report.add_failed( datafusion_instance, '\tNamespace preferences found\n\tnamespace name :' f' {namespace_name}\n\tDatafusion version :' f' {datafusion_version}\n\tDataproc version :' f' {dataproc_version}\n\tCheck Datafusion version is' ' compatible with Dataproc version (VERSION INCOMPATIBILITY' ' FOUND)\n', ) if system_preferences.image_version: dataproc_version = system_preferences.image_version dataproc_valid_version = check_dataproc_version_valid(dataproc_version) if not dataproc_valid_version: report.add_skipped( None, f'Dataproc version : {dataproc_version} is not valid') else: compatible = check_datafusion_dataproc_version_compatibility( datafusion_version, dataproc_valid_version) if compatible: report.add_ok( datafusion_instance, '\n\tSystem preferences found\n\tDatafusion version :' f' {datafusion_version}\n\tDataproc version :' f' {dataproc_version}\n', ) else: report.add_failed( datafusion_instance, '\tSystem preferences found\n\tDatafusion version :' f' {datafusion_version}\n\tDataproc version :' f' {dataproc_version}\n' '\tCheck Datafusion version compatible with Dataproc' ' version (VERSION INCOMPATIBILITY FOUND)\n', ) def check_dataproc_version_valid(preference_image_version: str): dataproc_version = preference_image_version dataproc_parsed_version = re.match(r'(\d+\.\d+)', dataproc_version) if not dataproc_parsed_version: return None return dataproc_parsed_version.group(1) def check_datafusion_dataproc_version_compatibility( datafusion_version: version, dataproc_version: str, ) -> bool: """Checks if the datafusion version is compatible with dataproc version.""" datafusion_version = version.parse(str(datafusion_version)) version_to_compare = f'{datafusion_version.major}.{datafusion_version.minor}' if version_to_compare in datafusion_dataproc_version: if dataproc_version in datafusion_dataproc_version[version_to_compare]: return True return False ================================================ FILE: gcpdiag/lint/dataproc/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/dataproc/bp_2021_001_logging_enabled.py ================================================ # Copyright 2021 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. """ Check if logging is enabled : Stackdriver Logging enabled Enabling stackdriver logging for your Dataproc cluster impacts the ability to troubleshoot any issues that you might have. """ from gcpdiag import lint, models from gcpdiag.queries import dataproc clusters_by_project = {} def prefetch_rule(context: models.Context): clusters_by_project[context.project_id] = dataproc.get_clusters(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: # clusters = dataproc.get_clusters(context) clusters = clusters_by_project[context.project_id] if not clusters: report.add_skipped(None, 'no dataproc clusters found') for cluster in clusters: if cluster.is_stackdriver_logging_enabled(): report.add_ok(cluster) else: report.add_failed(cluster) ================================================ FILE: gcpdiag/lint/dataproc/bp_2022_001_monitoring_enabled.py ================================================ # Lint as: python3 """Cloud Monitoring agent is enabled. Memory and disk usage metrics are often useful when troubleshooting, however, the Cloud Monitoring agent is not enabled by default when when a cluster is created. """ from gcpdiag import lint, models from gcpdiag.queries import dataproc def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = dataproc.get_clusters(context) if not clusters: report.add_skipped(None, 'no dataproc clusters found') else: for cluster in clusters: if cluster.is_stackdriver_monitoring_enabled(): report.add_ok(cluster) else: report.add_failed(cluster) ================================================ FILE: gcpdiag/lint/dataproc/bp_2022_098_another_dummy_async_rule.py ================================================ """Another dummy async rule Another dummy async rule """ import asyncio from gcpdiag import lint, models class FakeResource(models.Resource): def __init__(self, text): super().__init__(project_id=None) self.text = text @property def full_path(self): return self.text # pylint: disable=unused-argument async def async_run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: # Some async sleep calls to pretend we're doing some work await asyncio.sleep(1) report.add_ok(FakeResource(text='fake resource 4'), 'test ok') await asyncio.sleep(1) report.add_skipped(FakeResource(text='fake resource 5'), 'test skipped') await asyncio.sleep(1) report.add_failed(FakeResource(text='fake resource 6'), 'test failed') ================================================ FILE: gcpdiag/lint/dataproc/bp_2022_099_dummy_async_rule.py ================================================ """Dummy async rule Dummy async rule """ import asyncio from gcpdiag import lint, models class FakeResource(models.Resource): def __init__(self, text): super().__init__(project_id=None) self.text = text @property def full_path(self): return self.text # pylint: disable=unused-argument async def async_run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: # Some async sleep calls to pretend we're doing some work await asyncio.sleep(1) report.add_ok(FakeResource(text='fake resource 1'), 'test ok') await asyncio.sleep(1) report.add_skipped(FakeResource(text='fake resource 2'), 'test skipped') await asyncio.sleep(1) report.add_failed(FakeResource(text='fake resource 3'), 'test failed') ================================================ FILE: gcpdiag/lint/dataproc/dataproc_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import dataproc, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = dataproc project_id = 'gcpdiag-dataproc1-aaaa' ================================================ FILE: gcpdiag/lint/dataproc/err_2022_002_image_versions.py ================================================ # Copyright 2021 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. """Dataproc cluster doesn't use deprecated images We should expect problems if cluster runs one of the known deprecated and unsupported images. """ import re from gcpdiag import lint, models from gcpdiag.queries import dataproc clusters_by_project = {} class VersionParser: """ Example: 2.0.24-debian10 """ def __init__(self, s): self.str = s self.match = None self.matches_format = False self.major = None self.minor = None self.os = None self.os_ver = None def parse(self): self.match_re() if not self.match: return self.fill_properties_from_match() def match_re(self): self.match = re.match((r'^(?P\d+).(?P\d+)(?:.\d+)?' r'(?:-(?P[a-zA-Z]+)?(?P\d+)?)$'), self.str) def fill_properties_from_match(self): self.matches_format = True try: self.major = int(self.match.group('major')) self.minor = int(self.match.group('minor')) self.os = self.match.group('os_n') self.os_ver = int(self.match.group('os_v')) except TypeError: self.matches_format = False class ImageVersion: """Information about dataproc image version""" def __init__(self, version_str): self.version = VersionParser(version_str) self.version.parse() def is_deprecated(self): if not self.version.matches_format: return False if self.version.major < 1: return True if self.version.major == 1 and self.version.minor < 4: return True if self.version.major == 1 and 4 <= self.version.minor <= 5: if self.version.os == 'debian' and self.version.os_ver < 10: return True if self.version.os == 'ubuntu' and self.version.os_ver < 18: return True return False def prefetch_rule(context: models.Context): clusters_by_project[context.project_id] = dataproc.get_clusters(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: clusters = clusters_by_project[context.project_id] if not clusters: report.add_skipped(None, 'no dataproc clusters found') for cluster in clusters: if ImageVersion(cluster.image_version).is_deprecated(): report.add_failed(cluster) else: report.add_ok(cluster) ================================================ FILE: gcpdiag/lint/dataproc/err_2022_002_image_versions_test.py ================================================ # Copyright 2021 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. """Test code in dataproc.py.""" from gcpdiag.lint.dataproc.err_2022_002_image_versions import ImageVersion class TestDataprocImageVersions: """Test deprecated version detection""" def dotest(self, versions, expected): for v in versions: assert ImageVersion(v).is_deprecated() is expected def test_not_deprecated(self): self.dotest(['2.0.24-debian10', '2.0-debian10'], False) def test_deprecated(self): self.dotest(['1.2.3-debian10', '1.2-debian10'], True) def test_something_completely_wrong(self): self.dotest(['something'], False) def test_something_close_but_wrong_parts(self): self.dotest(['2.x.24-debian10', 'x.0.24-debian10', '2.0.x-debian10'], False) def test_missing_parts(self): self.dotest([ '2', '2.0', '2.0.24', '2.0.24-42', '2.0.24-msdos', '.0.24-msdos42', '2.0.-msdos42' ], False) ================================================ FILE: gcpdiag/lint/dataproc/err_2022_003_dataproc_sa_permissions.py ================================================ # 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. """Dataproc Service Account permissions Verify that the Dataproc Service Account exists and has the Dataproc Service Agent role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import crm, dataproc, iam ROLE = 'roles/dataproc.serviceAgent' ALT_ROLE = 'roles/editor' def run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: project = crm.get_project(context.project_id) if not dataproc.get_clusters(context): report.add_skipped(project, 'no dataproc clusters found') return policy = iam.get_project_policy(context) dp_sa = f'service-{project.number}@dataproc-accounts.iam.gserviceaccount.com' alt_sa = f'{project.number}@cloudservices.gserviceaccount.com' if iam.is_service_account_existing(dp_sa, context): if policy.has_role_permissions(f'serviceAccount:{dp_sa}', ROLE): report.add_ok(project) else: report.add_failed(project, (f'service account: {dp_sa}\n' f'missing role: {ROLE}')) else: if any( policy.has_role_permissions(f'serviceAccount:{alt_sa}', ROLE) or policy.has_role_permissions(f'serviceAccount:{alt_sa}', ALT_ROLE)): report.add_ok(project) else: report.add_failed(project, (f'service account: {alt_sa}\n' f'missing role: {ROLE}')) ================================================ FILE: gcpdiag/lint/dataproc/err_2022_004_dpgce_connectivity.py ================================================ # 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. """Dataproc on GCE master VM is able to communicate with at least one worker VM The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must be able to communicate with each other using ICMP, TCP (all ports), and UDP (all ports) protocols. """ import random from gcpdiag import lint, models from gcpdiag.queries import dataproc, gce cluster_details = [] def prefetch_rule(context: models.Context): clusters = dataproc.get_clusters(context) for cluster in clusters: # Skip clusters in error state if cluster.status != 'ERROR': cluster_details.append({ 'cluster': cluster, 'skipped': True, 'reason': 'Cluster not in error state' }) continue # Skip DPGKE clusters if not cluster.is_gce_cluster: cluster_details.append({ 'cluster': cluster, 'skipped': True, 'reason': 'Dataproc on GKE cluster' }) continue # Skip single node clusters if cluster.is_single_node_cluster: cluster_details.append({ 'cluster': cluster, 'skipped': True, 'reason': 'Single node cluster' }) continue # target target = gce.get_instance(project_id=context.project_id, zone=cluster.zone, instance_name=f'{cluster.name}-m') nic = None # get nic for network on target for interface in target.get_network_interfaces: if interface.get('network') == cluster.gce_network_uri: nic = interface.get('name') if nic: effective_firewalls = gce.get_instance_interface_effective_firewalls( target, nic) else: # log error continue # source source = gce.get_instance(project_id=context.project_id, zone=cluster.zone, instance_name=f'{cluster.name}-w-1') cluster_details.append({ 'cluster': cluster, 'firewalls': effective_firewalls, 'source_ip': source.get_network_ip_for_instance_interface(cluster.gce_network_uri ), 'source_sa': source.service_account, 'source_tags': source.tags, }) def run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: # pylint: disable=unused-argument for detail in cluster_details: cluster = detail['cluster'] if detail.get('skipped'): report.add_skipped(cluster, detail['reason']) continue firewalls = detail['firewalls'] source_ip = detail['source_ip'] source_sa = detail['source_sa'] source_tags = detail['source_tags'] # check ICMP icmp = firewalls.check_connectivity_ingress( src_ip=source_ip, ip_protocol='ICMP', source_service_account=source_sa, source_tags=source_tags) if icmp.action == 'deny': report.add_failed( cluster, f'ICMP connections must be allowed, blocked by: {icmp.matched_by_str}' ) continue port = random.randint(0, 65535) # check random TCP port tcp = firewalls.check_connectivity_ingress(src_ip=source_ip, ip_protocol='TCP', port=port, source_service_account=source_sa, source_tags=source_tags) if tcp.action == 'deny': report.add_failed( cluster, f'TCP connections must be allowed on all ports, blocked by: {tcp.matched_by_str}' ) continue # check random udp port udp = firewalls.check_connectivity_ingress(src_ip=source_ip, ip_protocol='UDP', port=port, source_service_account=source_sa, source_tags=source_tags) if udp.action == 'deny': report.add_failed( cluster, f'UDP connections must be allowed on all ports, blocked by: {udp.matched_by_str}' ) continue report.add_ok(cluster) ================================================ FILE: gcpdiag/lint/dataproc/err_2023_001_initialization_action_timeout.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataproc cluster initialization completed by the end of the timeout period. When creating a cluster with initialization action, it should be completed by the end of the timeout period. If the initialization has not completed then dataproc cancels the initialization action and fails with time out error. The default timeout value is 10 minutes. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs CLASS_NAME = 'com.google.cloud.hadoop.services.agent.AgentMain' MATCH_STR = 'Initialization action timed out' RESOURCE_TYPE = 'cloud_dataproc_cluster' # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'jsonPayload.message=~"{MATCH_STR}"'] logs_by_project = {} clusters_by_project = [] def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type=RESOURCE_TYPE, log_name='log_id("google.dataproc.agent")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) name_to_cluster = {cluster.name: cluster for cluster in clusters} if not clusters: report.add_skipped(project, 'no clusters found') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ CLASS_NAME not in get_path(log_entry, ('jsonPayload', 'class'), default='') or \ MATCH_STR not in get_path(log_entry, ('jsonPayload', 'message'), default=''): continue cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'), default='') if cluster_name and cluster_name not in clusters_by_project: clusters_by_project.append(cluster_name) for cluster_name in clusters_by_project: report.add_failed(name_to_cluster[cluster_name], MATCH_STR) for cluster_name in [ cluster_name for cluster_name in name_to_cluster if cluster_name not in clusters_by_project ]: report.add_ok(name_to_cluster[cluster_name]) ================================================ FILE: gcpdiag/lint/dataproc/err_2023_002_orphaned_yarn_application.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Orphaned YARN application! This rule will look if any Orphaned YARN application are killed by dataproc agent in the cluster. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs CLASS_NAME = 'com.google.cloud.hadoop.services.agent.job.YarnJobUpdater' MATCH_STR = 'Killing orphaned yarn application' RESOURCE_TYPE = 'cloud_dataproc_cluster' # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'jsonPayload.message=~"{MATCH_STR}"'] logs_by_project = {} clusters_by_project = set() def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type=RESOURCE_TYPE, log_name='log_id("google.dataproc.agent")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) name_to_cluster = {cluster.name: cluster for cluster in clusters} if not clusters: report.add_skipped(project, 'no clusters found') return logs_entries = logs_by_project[context.project_id] entries = logs_entries.entries for log_entry in entries: if (log_entry['severity'] != 'ERROR' or CLASS_NAME not in get_path( log_entry, ('jsonPayload', 'class'), default='') or MATCH_STR not in get_path(log_entry, ('jsonPayload', 'message'), default='')): continue cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'), default='') if cluster_name: clusters_by_project.add(cluster_name) for cluster_name in clusters_by_project: report.add_failed(name_to_cluster[cluster_name], MATCH_STR) for cluster_name in name_to_cluster: if cluster_name not in name_to_cluster: report.add_ok(name_to_cluster[cluster_name]) ================================================ FILE: gcpdiag/lint/dataproc/err_2023_003_dataproc_permission.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataproc cluster service account has required permissions to launch a cluster. This module checks on the log messages for permission errors and provides input on the missing permissions. """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs MATCH_STR = 'Required .*permission for' RESOURCE_TYPE = 'cloud_dataproc_cluster' contains_required_pattern = re.compile(MATCH_STR) #contains_permission_for_pattern = re.compile('"permission for"') # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'protoPayload.status.message=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type=RESOURCE_TYPE, log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) if not clusters: report.add_skipped(project, 'no clusters found') return failed_clusters = set() if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: msg = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') contains_required = contains_required_pattern.search(msg) # Filter out non-relevant log entries. if not (log_entry['severity'] == 'ERROR' and contains_required): continue entry_clusters = get_path(log_entry, ('resource', 'labels', 'cluster_name'), default='Unknown Cluster') failed_clusters.add(entry_clusters) if failed_clusters: report.add_failed( project, 'The following clusters failed : {}'.format( ', '.join(failed_clusters))) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataproc/err_2023_004_dataproc_firewall_issue.py ================================================ # # 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. # Lint as: python3 """Dataproc cluster firewall rules for connectivity between master and worker nodes established! The master node needs to communicate with the worker nodes during cluster creation. Sometimes VM to VM communications are blocked by firewall rules. """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs MATCH_STR = 'This usually happens when VM to VM communications are blocked' RESOURCE_TYPE = 'cloud_dataproc_cluster' contains_required_pattern = re.compile(MATCH_STR) # Criteria to filter for logs LOG_FILTER = ['severity=ERROR', f'protoPayload.status.message=~"{MATCH_STR}"'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type=RESOURCE_TYPE, log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(LOG_FILTER), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) if not clusters: report.add_skipped(project, 'no clusters found') return failed_clusters = set() if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: msg = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') contains_required = contains_required_pattern.search(msg) # Filter out non-relevant log entries. if not (log_entry['severity'] == 'ERROR' and contains_required): continue entry_clusters = get_path( log_entry, ('resource', 'labels', 'cluster_name'), default='Unknown Cluster', ) failed_clusters.add(entry_clusters) if failed_clusters: report.add_failed( project, 'The following clusters failed : {}'.format( ', '.join(failed_clusters)), ) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataproc/err_2023_005_dataproc_quota.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataproc cluster has sufficient quota. When creating a Dataproc cluster, the project must have available quotas for the resources you request, such as CPU, disk, and IP addresses. """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs MATCH_STR = 'Insufficient .* quota' RESOURCE_TYPE = 'cloud_dataproc_cluster' # Criteria to filter for logs LOG_FILTER = f""" protoPayload.status.message=~("{MATCH_STR}") severity=ERROR """ logs_by_project = {} log_search_pattern = re.compile(MATCH_STR) def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type=RESOURCE_TYPE, log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=LOG_FILTER, ) def format_cluster(cluster_name, uuid): return cluster_name + (f'(UUID: {uuid})' if uuid else '') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) if not clusters: report.add_skipped(project, 'no clusters found') return failed_clusters = set() if logs_by_project.get(context.project_id): entries = logs_by_project[context.project_id].entries for log_entry in entries: msg = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') is_pattern_found = log_search_pattern.search(msg) # Filter out non-relevant log entries. if not (log_entry['severity'] == 'ERROR' and is_pattern_found): continue cluster_name = get_path( log_entry, ('resource', 'labels', 'cluster_name'), default='Unknown Cluster', ) uuid = get_path(log_entry, ('resource', 'labels', 'cluster_uuid'), default='') failed_clusters.add((cluster_name, uuid)) if failed_clusters: report.add_failed( project, 'The following clusters failed because of quota errors : {}'.format( ', '.join( format_cluster(cluster_name, uuid) for cluster_name, uuid in failed_clusters)), ) else: report.add_ok(project) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataproc/err_2023_006_shared_vpc_permission.py ================================================ # Copyright 2023 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """DataProc Cluster user has networking permissions on host project. Dataproc cluster launched on a shared VPC requires permission on the Host Subnet that is used to create the cluster. If the required set of permissions are not available, the cluster launch operation fails. The permission is to be set for DataProc service agent from service project. """ from gcpdiag import lint, models from gcpdiag.queries import crm, dataproc, gce, iam, network COMPUTE_NETWORK_USER_ROLE = 'roles/compute.networkUser' COMPUTE_NETWORK_VIEWER_ROLE = 'roles/compute.networkViewer' def validate_iam_roles( context: models.Context, service_account: str, service_account_name: str, host_project: str, host_iam_policy: iam.BaseIAMPolicy, cluster: dataproc.Cluster, report: lint.LintReportRuleInterface, master_vm: gce.Instance, ) -> bool: # Project Level Check sa_has_net_user = host_iam_policy.has_role_permissions( f'serviceAccount:{service_account}', COMPUTE_NETWORK_USER_ROLE) # Subnet level check if not sa_has_net_user: for subnet in master_vm.subnetworks: if subnet.region == cluster.region: subnet_iam_policy = network.get_subnetwork_iam_policy( context, subnet.region, subnet.name) sa_has_net_user = subnet_iam_policy.has_role_permissions( f'serviceAccount:{service_account}', COMPUTE_NETWORK_USER_ROLE, ) if sa_has_net_user: return True if not sa_has_net_user: report.add_failed( cluster, (f'{service_account_name} {service_account} ' f'missing {COMPUTE_NETWORK_USER_ROLE} IAM role ' f'in host project {host_project}'), ) return False return True def shared_vpc_check(host_project, service_project): return host_project == service_project def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = dataproc.get_clusters(context) if not clusters: report.add_skipped(None, 'No Clusters Found') service_project = crm.get_project(context.project_id) dataproc_service_agent = (f'service-{service_project.number}' '@dataproc-accounts.iam.gserviceaccount.com') for cluster in clusters: if cluster.is_gce_cluster: cluster_network = cluster.gce_network_uri host_project = str( str(cluster_network).rsplit('/projects/', maxsplit=1)[1]).rsplit('/global/networks', maxsplit=1)[0] no_shared_vpc = shared_vpc_check(host_project, context.project_id) if not no_shared_vpc: try: if cluster.is_ha_cluster: master_vm = gce.get_instance( project_id=context.project_id, zone=cluster.zone, instance_name=f'{cluster.name}-m-0', ) else: master_vm = gce.get_instance( project_id=context.project_id, zone=cluster.zone, instance_name=f'{cluster.name}-m', ) except: # pylint: disable=bare-except report.add_skipped( cluster, 'Master VM is not running. Not able to check Network') continue host_project_context = context.copy_with(project_id=host_project) host_iam_policy = iam.get_project_policy(host_project_context) dataproc_sa_is_valid = validate_iam_roles( host_project_context, dataproc_service_agent, 'Dataproc Service Agent service account', host_project, host_iam_policy, cluster, report, master_vm, ) if dataproc_sa_is_valid: report.add_ok(cluster) else: report.add_skipped(cluster, f'Not on Shared VPC : {cluster}') else: report.add_skipped(cluster, f'Not a GCE cluster : {cluster}') ================================================ FILE: gcpdiag/lint/dataproc/err_2023_007_cluster_creation_stockout.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Region has sufficient resources for user to create a cluster Region is experiencing a resource stockout while creating the cluster. \n Kindly try creating the cluster in another zone or region. \n If the specified Region/Zone is a must, please reach out to GCP support team with the \n previous details provided. """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs # For pattern matching regex in logs err_messages = [ 'ZONE_RESOURCE_POOL_EXHAUSTED', 'does not have enough resources available to fulfill the request', 'resource pool exhausted', 'does not exist in zone', ] logs_by_project = {} log_search_pattern = re.compile('|'.join(err_messages)) logging_filter = '"' + '" OR "'.join(err_messages) + '"' def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_dataproc_cluster', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=logging_filter, ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) if not clusters: report.add_skipped(project, 'no clusters found') return if logs_by_project.get(context.project_id): entries = logs_by_project[context.project_id].entries stockout = False for log_entry in entries: msg = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') is_pattern_found = log_search_pattern.search(msg) # Filter out non-relevant log entries. if not (log_entry['severity'] == 'ERROR' and is_pattern_found): continue stockout = True cluster_name = get_path( log_entry, ('resource', 'labels', 'cluster_name'), default='Unknown Cluster', ) uuid = get_path(log_entry, ('resource', 'labels', 'cluster_uuid'), default='') region = get_path(log_entry, ('resource', 'labels', 'region'), default='') insert_id = get_path(log_entry, 'insertId', default='') message = ( 'The cluster "{}" with UUID "{}" failed \n while getting created due' ' to not having enough resources in designated region "{}" \n ' ' Kindly check cloud logging insertId "{}" for more details') report.add_failed(project, message.format(cluster_name, uuid, region, insert_id)) # There wasn't a stockout messages in logs, project should # only be ok if there isn't any stockout detected if not stockout: report.add_ok(project) ================================================ FILE: gcpdiag/lint/dataproc/err_2023_008_bad_dirs.py ================================================ # # Copyright 2021 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. # Lint as: python3 """ Disk space of YARN NodeManagers is okay. YARN ResourceManager has reported UNHEALTHY YARN NodeManagers due to exceeding the maximum percentage of disk space utilization allowed. Check the following documentation to address the issue: https://cloud.google.com/dataproc/docs/support/spark-job-tuning#yarn_nodes_are_unhealthy """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, dataproc, logs RE_PATTERN = ( '(.*dirs usable space is below configured utilization percentage.*)|' '(.*reported UNHEALTHY with details: .*dirs are bad.*)') LOG_NAME = 'hadoop-yarn-resourcemanager' SEVERITY = 'INFO' LOG_FILTER = [f'severity="{SEVERITY}"', f'jsonPayload.message=~"{RE_PATTERN}"'] MSG_RE = re.compile(RE_PATTERN) logs_by_project = {} clusters_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_dataproc_cluster', log_name=f'log_id("{LOG_NAME}")', filter_str=' AND '.join(LOG_FILTER)) def prefetch_rule(context: models.Context): clusters_by_project[context.project_id] = dataproc.get_clusters(context) def is_relevant(entry, context): return all([ get_path(entry, ('resource', 'labels', 'project_id')) == context.project_id, get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster', get_path(entry, 'logName') == f'projects/{context.project_id}/logs/{LOG_NAME}', get_path(entry, 'severity') == SEVERITY, MSG_RE.match(get_path(entry, ('jsonPayload', 'message'))) ]) def get_clusters_having_relevant_log_entries(context): return { get_path(e, ('resource', 'labels', 'cluster_name'), default=None) for e in logs_by_project[context.project_id].entries if is_relevant(e, context) } def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return clusters_with_low_disk_space = get_clusters_having_relevant_log_entries( context) for cluster in clusters_by_project[context.project_id]: if cluster.name in clusters_with_low_disk_space: report.add_failed( cluster, 'High disk space utilization reported for some YARN NodeManagers.') else: report.add_ok(cluster) ================================================ FILE: gcpdiag/lint/dataproc/snapshots/BP_2021_001.txt ================================================ * dataproc/BP/2021_001: Check if logging is enabled : Stackdriver Logging enabled - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [FAIL] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [ OK ] Enabling stackdriver logging for your Dataproc cluster impacts the ability to troubleshoot any issues that you might have. https://gcpdiag.dev/rules/dataproc/BP/2021_001 ================================================ FILE: gcpdiag/lint/dataproc/snapshots/BP_2022_001.txt ================================================ * dataproc/BP/2022_001: Cloud Monitoring agent is enabled. - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good [FAIL] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [FAIL] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [FAIL] Memory and disk usage metrics are often useful when troubleshooting, however, the Cloud Monitoring agent is not enabled by default when when a cluster is created. https://gcpdiag.dev/rules/dataproc/BP/2022_001 ================================================ FILE: gcpdiag/lint/dataproc/snapshots/BP_2022_098.txt ================================================ ================================================ FILE: gcpdiag/lint/dataproc/snapshots/BP_2022_099.txt ================================================ ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2022_002.txt ================================================ * dataproc/ERR/2022_002: Dataproc cluster doesn't use deprecated images - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [ OK ] ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2022_003.txt ================================================ * dataproc/ERR/2022_003: Dataproc Service Account permissions - projects/gcpdiag-dataproc1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2022_004.txt ================================================ * dataproc/ERR/2022_004: Dataproc on GCE master VM is able to communicate with at least one worker VM - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good [SKIP] Cluster not in error state - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [SKIP] Cluster not in error state - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [SKIP] Cluster not in error state - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [FAIL] ICMP connections must be allowed, blocked by: None The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must be able to communicate with each other using ICMP, TCP (all ports), and UDP (all ports) protocols. https://gcpdiag.dev/rules/dataproc/ERR/2022_004 ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2023_001.txt ================================================ * dataproc/ERR/2023_001: Dataproc cluster initialization completed by the end of the timeout period. - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2023_002.txt ================================================ * dataproc/ERR/2023_002: Orphaned YARN application! - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2023_003.txt ================================================ * dataproc/ERR/2023_003: Dataproc cluster service account has required permissions to launch a cluster. - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2023_004.txt ================================================ * dataproc/ERR/2023_004: Dataproc cluster firewall rules for connectivity between master and worker nodes established! - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2023_005.txt ================================================ * dataproc/ERR/2023_005: Dataproc cluster has sufficient quota. - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2023_006.txt ================================================ * dataproc/ERR/2023_006: DataProc Cluster user has networking permissions on host project. - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good [SKIP] Not on Shared VPC : gcpdiag-dataproc1-aaaa/us-central1/good - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [SKIP] Not on Shared VPC : gcpdiag-dataproc1-aaaa/us-central1/test-best-practices-disabled - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [SKIP] Not on Shared VPC : gcpdiag-dataproc1-aaaa/us-central1/test-best-practices-enabled - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [SKIP] Not on Shared VPC : gcpdiag-dataproc1-aaaa/us-central1/test-deny-icmp ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2023_007.txt ================================================ * dataproc/ERR/2023_007: Region has sufficient resources for user to create a cluster - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/ERR_2023_008.txt ================================================ * dataproc/ERR/2023_008: Disk space of YARN NodeManagers is okay. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2021_001.txt ================================================ * dataproc/WARN/2021_001: Dataproc cluster is in RUNNING state - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [FAIL] Cluster should normally spend most of the time in RUNNING state. https://gcpdiag.dev/rules/dataproc/WARN/2021_001 ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2022_001.txt ================================================ * dataproc/WARN/2022_001: Dataproc clusters are not failed to stop due to the local SSDs - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2022_002.txt ================================================ * dataproc/WARN/2022_002: Job rate limit was not exceeded (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2022_003.txt ================================================ * dataproc/WARN/2022_003: Dataproc VM Service Account has necessary permissions - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good [FAIL] Service account 12340005-compute@developer.gserviceaccount.com does not have enough permissions - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [FAIL] Service account 12340005-compute@developer.gserviceaccount.com does not have enough permissions - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ] - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [FAIL] Service account 12340005-compute@developer.gserviceaccount.com does not have enough permissions VM Service Account should have required permissions to function correctly. Though required permission may be granted via user-managed role or primitive roles, it is recommended to grant roles/dataproc.worker on project level. https://gcpdiag.dev/rules/dataproc/WARN/2022_003 ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2022_004.txt ================================================ ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2023_001.txt ================================================ * dataproc/WARN/2023_001: Concurrent Job limit was not exceeded - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2023_002.txt ================================================ * dataproc/WARN/2023_002: Master Node System Memory utilization under threshold - projects/gcpdiag-dataproc1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2024_001.txt ================================================ * dataproc/WARN/2024_001: HDFS NameNode Safemode is disabled. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/dataproc/snapshots/WARN_2024_002.txt ================================================ * dataproc/WARN/2024_002: HDFS can write file(s) to DataNode(s). (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/dataproc/warn_2021_001_cluster_status_running.py ================================================ # Copyright 2021 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. """Dataproc cluster is in RUNNING state Cluster should normally spend most of the time in RUNNING state. """ from gcpdiag import lint, models from gcpdiag.queries import dataproc clusters_by_project = {} def prefetch_rule(context: models.Context): clusters_by_project[context.project_id] = dataproc.get_clusters(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: # clusters = dataproc.get_clusters(context) clusters = clusters_by_project[context.project_id] if not clusters: report.add_skipped(None, 'no dataproc clusters found') for cluster in clusters: if cluster.is_running(): report.add_ok(cluster) else: report.add_failed(cluster) ================================================ FILE: gcpdiag/lint/dataproc/warn_2022_001_cluster_local_ssd_failed_stop.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Dataproc clusters are not failed to stop due to the local SSDs You cannot stop clusters with local SSDs attached since it triggers shutdown to the VM. However, if you do shut down a VM using local SSDs, then you can't start the VM again later, and the data on the local SSD is lost. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs METHOD_NAME = 'google.cloud.dataproc.v1.ClusterController.StopCluster' MATCH_STR = 'Clusters that have local SSDs cannot be stopped.' LOG_FILTER = [ 'severity=ERROR', f'protoPayload.methodName="{METHOD_NAME}"', f'protoPayload.status.message:"{MATCH_STR}"' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_dataproc_cluster', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) name_to_cluster = {cluster.name: cluster for cluster in clusters} if not clusters: report.add_skipped(project, 'no clusters found') return failed_to_stop_clusters = [] if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ METHOD_NAME not in get_path(log_entry, ('protoPayload', 'methodName'), default='') or \ MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue cluster_name = get_path(log_entry, ('protoPayload', 'request', 'clusterName'), default='') if cluster_name and cluster_name not in failed_to_stop_clusters: failed_to_stop_clusters.append(cluster_name) for cluster_name in failed_to_stop_clusters: report.add_failed(name_to_cluster[cluster_name], 'failed to stop due to local SSDs') for cluster_name in [ cluster_name for cluster_name in name_to_cluster if cluster_name not in failed_to_stop_clusters ]: report.add_ok(name_to_cluster[cluster_name]) ================================================ FILE: gcpdiag/lint/dataproc/warn_2022_002_job_throttling_rate_limit.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Job rate limit was not exceeded If the Dataproc agent reach the job submission rate limit, Dataproc job scheduling delays can be observed. """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, dataproc, logs RE_PATTERN = '.*Throttling job .*: Rate limit.*' LOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~"{RE_PATTERN}"'] MSG_RE = re.compile(RE_PATTERN) logs_by_project = {} clusters_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_dataproc_cluster', log_name='log_id("google.dataproc.agent")', filter_str=' AND '.join(LOG_FILTER)) def prefetch_rule(context: models.Context): clusters_by_project[context.project_id] = dataproc.get_clusters(context) def is_relevant(entry, context): return all([ get_path(entry, ('resource', 'labels', 'project_id')) == context.project_id, get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster', get_path(entry, ('logName')) == f'projects/{context.project_id}/logs/google.dataproc.agent', get_path(entry, ('severity')) == 'WARNING', MSG_RE.match(get_path(entry, ('jsonPayload', 'message'))) ]) def get_clusters_having_relevant_log_entries(context): return { get_path(e, ('resource', 'labels', 'cluster_name'), default=None) for e in logs_by_project[context.project_id].entries if is_relevant(e, context) } def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return clusters_with_throttling = get_clusters_having_relevant_log_entries(context) for cluster in clusters_by_project[context.project_id]: if cluster.name in clusters_with_throttling: report.add_failed(cluster, 'some jobs were throttled due to rate limit') else: report.add_ok(cluster) ================================================ FILE: gcpdiag/lint/dataproc/warn_2022_003_sa_permissions.py ================================================ # Copyright 2021 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. """Dataproc VM Service Account has necessary permissions VM Service Account should have required permissions to function correctly. Though required permission may be granted via user-managed role or primitive roles, it is recommended to grant roles/dataproc.worker on project level. """ from gcpdiag import lint, models from gcpdiag.queries import dataproc, iam WORKER_ROLE = 'roles/dataproc.worker' clusters_by_project = {} policies_by_project = {} def prefetch_rule(context: models.Context): clusters_by_project[context.project_id] = dataproc.get_clusters(context) policies_by_project[context.project_id] = iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: clusters = clusters_by_project[context.project_id] if not clusters: report.add_skipped(None, 'no dataproc clusters found') for cluster in clusters: sa_email = cluster.vm_service_account_email sa_exists = iam.is_service_account_existing(email=sa_email, context=context) if not sa_exists: # Non-existent SA is also a non-normal situation, however our intent was to # have a separate rule for that, so that one rule has more-or-less one # reason to fail report.add_skipped( cluster, 'VM Service Account associated with Dataproc cluster was not found') continue sa_has_role = policies_by_project[context.project_id].has_role_permissions( member=f'serviceAccount:{sa_email}', role=WORKER_ROLE) if sa_has_role: report.add_ok(cluster) else: report.add_failed( cluster, f'Service account {sa_email} does not have enough permissions') ================================================ FILE: gcpdiag/lint/dataproc/warn_2022_004_cluster_status_running_async.py ================================================ """Dataproc cluster is in RUNNING state Cluster should normally spend most of the time in RUNNING state. """ from gcpdiag import lint, models from gcpdiag.async_queries.project import get_project async def async_run_rule(context: models.Context, report: lint.LintReportRuleInterface) -> None: project = get_project.get_project(project_id=context.project_id) cluster_names = await project.dataproc.list_clusters() for cluster_name in cluster_names: cluster = await project.dataproc.get_cluster_by_name(cluster_name) if cluster.status == 'RUNNING': report.add_ok(cluster) else: report.add_failed(cluster, 'cluster is not running') ================================================ FILE: gcpdiag/lint/dataproc/warn_2023_001_job_throttling_too_many.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Concurrent Job limit was not exceeded If Dataproc agent is already running more than allowed concurrent job, Dataproc job scheduling delays can be observed """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs CLASS_NAME = 'com.google.cloud.hadoop.services.agent.JobSubmissionLimiterImpl' MATCH_STR = 'Too many running jobs' LOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~"{MATCH_STR}"'] logs_by_project = {} clusters_by_project = [] def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_dataproc_cluster', log_name='log_id("google.dataproc.agent")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) name_to_cluster = {cluster.name: cluster for cluster in clusters} if not clusters: report.add_skipped(project, 'no clusters found') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'WARNING' or \ CLASS_NAME not in get_path(log_entry, ('jsonPayload', 'class'), default='') or \ MATCH_STR not in get_path(log_entry, ('jsonPayload', 'message'), default=''): continue cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'), default='') if cluster_name and cluster_name not in clusters_by_project: clusters_by_project.append(cluster_name) for cluster_name in clusters_by_project: report.add_failed(name_to_cluster[cluster_name], 'Concurrent Job limit exceeded') for cluster_name in [ cluster_name for cluster_name in name_to_cluster if cluster_name not in clusters_by_project ]: report.add_ok(name_to_cluster[cluster_name]) ================================================ FILE: gcpdiag/lint/dataproc/warn_2023_002_high_system_memory_usage.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Master Node System Memory utilization under threshold By default, the Dataproc agent throttles job submission when memory use reaches 90% (0.9). When this limit is reached, new jobs cannot be scheduled. The amount of free memory needed to schedule another job on the cluster is not sufficient. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, dataproc, logs CLASS_NAME = 'com.google.cloud.hadoop.services.agent.JobSubmissionLimiterImpl' MATCH_STR = 'High system memory usage' LOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~"{MATCH_STR}"'] logs_by_project = {} clusters_by_project = [] def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_dataproc_cluster', log_name='log_id("google.dataproc.agent")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return clusters = dataproc.get_clusters(context) name_to_cluster = {cluster.name: cluster for cluster in clusters} if not clusters: report.add_skipped(project, 'no clusters found') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'WARNING' or \ CLASS_NAME not in get_path(log_entry, ('jsonPayload', 'class'), default='') or \ MATCH_STR not in get_path(log_entry, ('jsonPayload', 'message'), default=''): continue cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'), default='') if cluster_name and cluster_name not in clusters_by_project: clusters_by_project.append(cluster_name) for cluster_name in clusters_by_project: report.add_failed( name_to_cluster[cluster_name], 'some jobs were throttled due to High system memory usage') for cluster_name in [ cluster_name for cluster_name in name_to_cluster if cluster_name not in clusters_by_project ]: report.add_ok(name_to_cluster[cluster_name]) ================================================ FILE: gcpdiag/lint/dataproc/warn_2024_001_safemode.py ================================================ # # Copyright 2021 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. # Lint as: python3 """HDFS NameNode Safemode is disabled. When HDFS NameNode Safemode is enabled, the HDFS filesystem is in read-only mode and no changes are allowed. """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, dataproc, logs RE_PATTERN = '.*SafeModeException.* Name node is in safe mode.*' LOG_NAME = 'hadoop-hdfs-namenode' SEVERITY = 'INFO' LOG_FILTER = [f'severity="{SEVERITY}"', f'jsonPayload.message=~"{RE_PATTERN}"'] MSG_RE = re.compile(RE_PATTERN) logs_by_project = {} clusters_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_dataproc_cluster', log_name=f'log_id("{LOG_NAME}")', filter_str=' AND '.join(LOG_FILTER)) def prefetch_rule(context: models.Context): clusters_by_project[context.project_id] = dataproc.get_clusters(context) def is_relevant(entry, context): return all([ get_path(entry, ('resource', 'labels', 'project_id')) == context.project_id, get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster', get_path(entry, 'logName') == f'projects/{context.project_id}/logs/{LOG_NAME}', get_path(entry, 'severity') == SEVERITY, MSG_RE.match(get_path(entry, ('jsonPayload', 'message'))) ]) def get_clusters_having_relevant_log_entries(context): return { get_path(e, ('resource', 'labels', 'cluster_name'), default=None) for e in logs_by_project[context.project_id].entries if is_relevant(e, context) } def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """RUN the rule.""" if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return clusters_with_safemode_enabled = get_clusters_having_relevant_log_entries( context) for cluster in clusters_by_project[context.project_id]: if cluster.name in clusters_with_safemode_enabled: report.add_failed( cluster, 'The HDFS NameNode Safemode was reported as enabled.', ) else: report.add_ok(cluster) ================================================ FILE: gcpdiag/lint/dataproc/warn_2024_002_hdfs_write_issue.py ================================================ # # Copyright 2021 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. # Lint as: python3 """HDFS can write file(s) to DataNode(s). HDFS had issues writing file(s) to DataNode(s). """ import re from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, dataproc, logs RE_PATTERN = ( '(.*could only be written to .*are excluded in this operation.*)|' '(.*could only be replicated to .*are excluded in this operation.*)') LOG_NAME = 'hadoop-hdfs-namenode' SEVERITY = 'DEFAULT' LOG_FILTER = [f'severity="{SEVERITY}"', f'jsonPayload.message=~"{RE_PATTERN}"'] MSG_RE = re.compile(RE_PATTERN) logs_by_project = {} clusters_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_dataproc_cluster', log_name=f'log_id("{LOG_NAME}")', filter_str=' AND '.join(LOG_FILTER), ) def prefetch_rule(context: models.Context): clusters_by_project[context.project_id] = dataproc.get_clusters(context) def is_relevant(entry, context): return all([ get_path(entry, ('resource', 'labels', 'project_id')) == context.project_id, get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster', get_path(entry, 'logName') == f'projects/{context.project_id}/logs/{LOG_NAME}', MSG_RE.match(get_path(entry, ('jsonPayload', 'message'))), ]) def get_clusters_having_relevant_log_entries(context): return { get_path(e, ('resource', 'labels', 'cluster_name'), default=None) for e in logs_by_project[context.project_id].entries if is_relevant(e, context) } def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """RUN the rule.""" if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return clusters_with_issues = get_clusters_having_relevant_log_entries(context) for cluster in clusters_by_project[context.project_id]: if cluster.name in clusters_with_issues: report.add_failed( cluster, 'HDFS could not write file(s) to DataNode(s).', ) else: report.add_ok(cluster) ================================================ FILE: gcpdiag/lint/gae/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/gae/err_2023_001_appengine_vpc_connector_policy.py ================================================ # # Copyright 2021 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. # Lint as: python3 """App Engine: VPC Connector creation failure due to Org Policy Organizational policy is preventing the creation of a Serverless VPC Access Connector. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs SEVERITY = 'ERROR' METHOD_NAME = 'google.cloud.vpcaccess.v1.VpcAccessService.CreateConnector' MESSAGE = 'An internal error occurred: VPC Access connector failed to get healthy' LOG_ID = 'log_id("cloudaudit.googleapis.com/activity")' RESOURCE_TYPE = 'audited_resource' LOG_FILTER = [ f'severity={SEVERITY}', f'protoPayload.methodName="{METHOD_NAME}"', f'protoPayload.status.message:"{MESSAGE}"', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type=RESOURCE_TYPE, log_name=LOG_ID, filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if Logging API is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if VPC Access API is disabled if not apis.is_enabled(context.project_id, 'vpcaccess'): report.add_skipped(project, 'vpc access api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ METHOD_NAME not in get_path(log_entry, ('protoPayload', 'methodName'), default='') or \ MESSAGE not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue report.add_failed( project, 'There may have been a failed VPC \ connector creation issue on App Engine due to the org policy') return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/gae/err_2023_002_appengine_vpc_connector_subnet_overlap.py ================================================ # # Copyright 2021 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. # Lint as: python3 """App Engine: VPC Connector creation due to subnet overlap When creating a VPC connector it fails to create a subnet overlapping with the auto subnet networks in the range 10.128.0.0/9 """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs SEVERITY = 'ERROR' METHOD_NAME = 'v1.compute.subnetworks.insert' SERVICE_NAME = 'compute.googleapis.com' PRINCIPAL_EMAIL = '%projectNumber%@cloudservices.gserviceaccount.com' MESSAGE = 'networks cannot overlap with 10.128.0.0/9' LOG_ID = 'log_id("cloudaudit.googleapis.com/activity")' RESOURCE_TYPE = 'audited_resource' LOG_FILTER = [ f'severity={SEVERITY}', f'protoPayload.methodName="{METHOD_NAME}"', f'protoPayload.serviceName="{SERVICE_NAME}"', f'protoPayload.authenticationInfo.principalEmail="{PRINCIPAL_EMAIL}"', f'"{MESSAGE}"' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type=RESOURCE_TYPE, log_name=LOG_ID, filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if Logging API is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # skip entire rule if VPC Access API is disabled if not apis.is_enabled(context.project_id, 'vpcaccess'): report.add_skipped(project, 'vpc access api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ METHOD_NAME not in get_path(log_entry, ('protoPayload', \ 'methodName'), default='') or \ SERVICE_NAME not in get_path(log_entry, ('protoPayload', \ 'serviceName'), default='') or \ PRINCIPAL_EMAIL not in get_path(log_entry, ('protoPayload', \ 'authenticationInfo', \ 'principalEmail'), default='') or \ MESSAGE not in log_entry: continue report.add_failed( project, 'There may have been a failed VPC \ connector creation issue on App Engine due to overlapping subnetworks \ in the range 10.128.0.0/9 [auto-subnetworks]') return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/gae/err_2025_001_gae_default_service_account_is_deleted.py ================================================ # Copyright 2025 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. """GAE default service account is deleted GAE default service account (@appspot.gserviceaccount.com) by default is used for GAE applications deployment when user-defined service account is not declared If it's recently deleted, recover the SA otherwise use user-defined service account """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs delete_sa_logs, failed_deploy_logs = {}, {} def prepare_rule(context: models.Context): log_id = 'log_id("cloudaudit.googleapis.com/activity")' status_message = 'The AppEngine default service account might have been manually deleted' email = f"{context.project_id}@appspot.gserviceaccount.com" failed_deploy_logs[context.project_id] = logs.query( project_id=context.project_id, log_name=log_id, resource_type='gae_app', filter_str= f'severity="ERROR" AND protoPayload.status.message:"{status_message}"') delete_sa_logs[context.project_id] = logs.query( project_id=context.project_id, log_name=log_id, resource_type='service_account', filter_str=f'resource.labels.email_id="{email}" \ AND protoPayload.methodName="google.iam.admin.v1.DeleteServiceAccount"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if Logging API is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging api is disabled') return # If the customer recently deleted their GAE default SA if delete_sa_logs.get(context.project_id) and \ delete_sa_logs[context.project_id].entries: report.add_failed( project, 'The App Engine default service account was recently deleted. \ Please follow the steps at \ https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting \ to recover it.') # If the customer tried to deploy and failed due to the default service account if failed_deploy_logs.get(context.project_id) and \ failed_deploy_logs[context.project_id].entries: report.add_failed( project, 'Failure deploying to App Engine: The App Engine default service account is deleted. \ Please use a user-managed service account instead.') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/gae/gae_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import gae, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gae project_id = 'gcpdiag-gaes1-aaaa' ================================================ FILE: gcpdiag/lint/gae/snapshots/ERR_2023_001.txt ================================================ * gae/ERR/2023_001: App Engine: VPC Connector creation failure due to Org Policy - projects/gcpdiag-gaes1-aaaa [SKIP] vpc access api is disabled ================================================ FILE: gcpdiag/lint/gae/snapshots/ERR_2023_002.txt ================================================ * gae/ERR/2023_002: App Engine: VPC Connector creation due to subnet overlap - projects/gcpdiag-gaes1-aaaa [SKIP] vpc access api is disabled ================================================ FILE: gcpdiag/lint/gae/snapshots/ERR_2025_001.txt ================================================ * gae/ERR/2025_001: GAE default service account is deleted - projects/gcpdiag-gaes1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/gae/snapshots/WARN_2022_001.txt ================================================ * gae/WARN/2022_001: App Engine Standard versions don't use deprecated runtimes. - apps/gcpdiag-gaes1-aaaa/services/default/versions/v1 [ OK ] ================================================ FILE: gcpdiag/lint/gae/snapshots/WARN_2022_002.txt ================================================ * gae/WARN/2022_002: App Engine Flexible versions don't use deprecated runtimes. (no versions found for flexible environment) [SKIP] ================================================ FILE: gcpdiag/lint/gae/warn_2022_001_appengine_standard_deprecated_runtimes.py ================================================ # Copyright 2021 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. # Lint as: python3 """App Engine Standard versions don't use deprecated runtimes. The following runtimes are deprecated: 'go16', 'go18', 'go19', 'java7', 'php'. """ from gcpdiag import lint, models from gcpdiag.queries import gae DEPRECATED_RUNTIMES = ['go16', 'go18', 'go19', 'java7', 'php'] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): versions = gae.get_versions(context) if not versions: report.add_skipped(None, 'no versions found for standard environment') return for version in sorted(versions.values(), key=lambda version: version.id): if version.env != 'standard': report.add_skipped(None, 'no versions found for standard environment') return if version.runtime in DEPRECATED_RUNTIMES: report.add_failed( version, f'the version \'{version.id}\' for ' f'the service \'{version.service.name}\' ' f'uses deprecated runtime {version.runtime}') else: report.add_ok(version) ================================================ FILE: gcpdiag/lint/gae/warn_2022_002_appengine_flexible_deprecated_runtimes.py ================================================ # Copyright 2021 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. # Lint as: python3 """App Engine Flexible versions don't use deprecated runtimes. The following runtimes are deprecated: 'go16', 'go18', 'python27'. """ from gcpdiag import lint, models from gcpdiag.queries import gae DEPRECATED_RUNTIMES = ['go16', 'go18', 'python27'] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): versions = gae.get_versions(context) if not versions: report.add_skipped(None, 'no versions found for flexible environment') return for version in sorted(versions.values(), key=lambda version: version.id): if version.env != 'flexible': report.add_skipped(None, 'no versions found for flexible environment') return if version.runtime in DEPRECATED_RUNTIMES: report.add_failed( version, f'the version \'{version.id}\' for ' f'the service \'{version.service.name}\' ' f'uses deprecated runtime {version.runtime}') else: report.add_ok(version) ================================================ FILE: gcpdiag/lint/gcb/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/gcb/err_2022_001_missing_cloudbuild_editor_role.py ================================================ # Copyright 2021 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. # Lint as: python3 """Cloud Build service account has the cloudbuild.builds.builder role. The Cloud Build service account is missing the cloudbuild.builds.builder role, which is required for the service account to run a build trigger. You can resolve this error by granting the Cloud Build Service Account IAM role to [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gcb, iam ROLE = 'roles/cloudbuild.builds.builder' def run_rule(context: models.Context, report: lint.LintReportRuleInterface): triggers = gcb.get_triggers(context) if not triggers: report.add_skipped(None, 'no triggers found') return project = crm.get_project(context.project_id) sa_email = f'{project.number}@cloudbuild.gserviceaccount.com' iam_policy = iam.get_project_policy(context) if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE): report.add_failed(project, f'service account: {sa_email}\nmissing role: {ROLE}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/gcb/err_2022_002_build_failed_whithout_artifact_registry_permission.py ================================================ # 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. # Lint as: python3 """Builds don't fail because of failed registry permissions. Builds configured to upload image to Artifact Registry must use service account that has write permission for it. """ import abc import dataclasses import re from typing import Iterable, Set from gcpdiag import lint, models from gcpdiag.queries import artifact_registry, crm, gcb, iam PERMISSION = 'artifactregistry.repositories.uploadArtifacts' GCR_LOCATION_MAP = { 'gcr.io': 'us', 'asia.gcr.io': 'asia', 'eu.gcr.io': 'europe', 'us.gcr.io': 'us', } def run_rule(context: models.Context, report: lint.LintReportRuleInterface): builds = gcb.get_builds(context) if len(builds) == 0: report.add_skipped(None, 'no recent builds') return project = crm.get_project(context.project_id) found = list( find_builds_without_image_upload_permission( context, builds.values(), default_sa=f'{project.number}@cloudbuild.gserviceaccount.com', )) if len(found) == 0: report.add_ok(project) for status in found: report.add_failed( status.build, reason=f'{status.service_account} can not ' f'read {status.repository.format_message()}', ) @dataclasses.dataclass class FailedBuildStatus: build: gcb.Build service_account: str repository: 'Repository' class Repository(abc.ABC): @abc.abstractmethod def can_read_registry(self, context: models.Context, service_account_email: str) -> bool: pass @abc.abstractmethod def format_message(self) -> str: pass class GcrRepository(Repository): """Represents AR or GCR docker repository that can be accessed by gcr.io domain.""" def __init__(self, project_id: str, repository: str): self.project_id = project_id self.repository = repository def can_read_registry(self, context: models.Context, service_account_email: str) -> bool: if not artifact_registry.get_project_settings( self.project_id).legacy_redirect: # In case of failure to upload to gcr.io cloud build provides useful information. return True location = GCR_LOCATION_MAP[self.repository] return ArtifactRepository(self.project_id, location, self.repository) \ .can_read_registry(context, service_account_email) def format_message(self) -> str: return f'{self.repository} registry in {self.project_id} project.' class ArtifactRepository(Repository): """Represents AR docker repository that can be accessed by pkg.dev domain.""" def __init__(self, project_id: str, location: str, repository: str): self.project_id = project_id self.location = location self.repository = repository def can_read_registry(self, context: models.Context, service_account_email: str) -> bool: project_policy = iam.get_project_policy(context) member = f'serviceAccount:{service_account_email}' if project_policy.has_permission(member, PERMISSION): return True registry_policy = artifact_registry.get_registry_iam_policy( context, self.location, self.repository) return registry_policy.has_permission(member, PERMISSION) def format_message(self) -> str: return (f'{self.repository} registry in {self.location} in' f' {self.project_id} project.') def find_builds_without_image_upload_permission( context: models.Context, builds: Iterable[gcb.Build], default_sa: str, ) -> Iterable[FailedBuildStatus]: for build in builds: sa = (build.service_account or default_sa).split('/')[-1] if build.status != 'FAILURE': continue for repository in get_used_registries(build.images): if not repository.can_read_registry(context, sa): yield FailedBuildStatus(build, sa, repository) def get_used_registries(images: Iterable[str]) -> Iterable[Repository]: result: Set[Repository] = set() for image in images: m = re.match('([^.]+)-docker.pkg.dev/([^/]+)/([^/]+)/(?:[^.]+)', image) if m: result.add( ArtifactRepository( project_id=m.group(2), location=m.group(1), repository=m.group(3), )) m = re.match('((?:[^.]+-)?gcr.io)/([^/]+)/(?:[^.]+)', image) if m: result.add(GcrRepository( project_id=m.group(2), repository=m.group(1), )) return result ================================================ FILE: gcpdiag/lint/gcb/err_2022_003_build_failed_with_logs_bucket_retention_policy.py ================================================ # 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. # Lint as: python3 """Builds don't fail because of retention policy set on logs bucket. Builds that upload logs to bucket with retention policy must do that once build is finished instead of streaming them. """ import dataclasses import re from typing import Iterable from gcpdiag import lint, models from gcpdiag.queries import crm, gcb, gcs def run_rule(context: models.Context, report: lint.LintReportRuleInterface): builds = gcb.get_builds(context) if len(builds) == 0: report.add_skipped(None, 'no recent builds') return project = crm.get_project(context.project_id) found = list(find_builds_failing_to_upload_logs(context, builds.values())) if len(found) == 0: report.add_ok(project) for status in found: report.add_failed( status.build, reason=f'Build can not stream logs to bucket' f' {status.bucket} because it has retention policy set.', ) @dataclasses.dataclass class FailedBuildStatus: build: gcb.Build bucket: str def find_builds_failing_to_upload_logs( context: models.Context, builds: Iterable[gcb.Build]) -> Iterable[FailedBuildStatus]: for build in builds: if build.failure_info.failure_type != 'LOGGING_FAILURE': continue bucket_match = re.match('gs://(.*)$', build.logs_bucket or '') if bucket_match and build.options.is_bucket_streaming_enabled(): bucket_name = bucket_match.group(1) bucket_data = gcs.get_bucket(context, bucket_name) if bucket_data.retention_policy.retention_period > 0: yield FailedBuildStatus(build, bucket_name) ================================================ FILE: gcpdiag/lint/gcb/err_2022_004_missing_cloudbuild_service_agent_role.py ================================================ # Copyright 2021 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. # Lint as: python3 """Cloud Build Service Agent has the cloudbuild.serviceAgent role. The Cloud Build Service Agent is missing the cloudbuild.serviceAgent role, which gives Cloud Build service account access to managed resources. You can resolve this error by granting the Cloud Build Service Agent (roles/cloudbuild.serviceAgent) IAM role to service-[PROJECT_NUMBER]@gcp-sa-cloudbuild.iam.gserviceaccount.com. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gcb, iam ROLE = 'roles/cloudbuild.serviceAgent' def run_rule(context: models.Context, report: lint.LintReportRuleInterface): triggers = gcb.get_triggers(context) if not triggers: report.add_skipped(None, 'no triggers found') return project = crm.get_project(context.project_id) sa_email = f'service-{project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com' iam_policy = iam.get_project_policy(context) if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE): report.add_failed(project, f'service account: {sa_email}\nmissing role: {ROLE}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/gcb/gcb_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import gcb, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gcb project_id = 'gcpdiag-gcb1-aaaa' ================================================ FILE: gcpdiag/lint/gcb/snapshots/ERR_2022_001.txt ================================================ * gcb/ERR/2022_001: Cloud Build service account has the cloudbuild.builds.builder role. - projects/gcpdiag-gcb1-aaaa [FAIL] service account: 12340005@cloudbuild.gserviceaccount.com missing role: roles/cloudbuild.builds.builder The Cloud Build service account is missing the cloudbuild.builds.builder role, which is required for the service account to run a build trigger. You can resolve this error by granting the Cloud Build Service Account IAM role to [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. https://gcpdiag.dev/rules/gcb/ERR/2022_001 ================================================ FILE: gcpdiag/lint/gcb/snapshots/ERR_2022_002.txt ================================================ * gcb/ERR/2022_002: Builds don't fail because of failed registry permissions. - projects/gcpdiag-gcb1-aaaa/locations/-/builds/db540598-5a45-46f3-a716-39d834e884c6 [FAIL] gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com can not read gcb1-repository registry in us-central1 in gcpdiag-gcb1-aaaa project. - projects/gcpdiag-gcb1-aaaa/locations/-/builds/d2a2f7f0-f660-40cb-8cb1-574d29832e74 [FAIL] gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com can not read gcr.io registry in gcpdiag-gcb1-aaaa project. Builds configured to upload image to Artifact Registry must use service account that has write permission for it. https://gcpdiag.dev/rules/gcb/ERR/2022_002 ================================================ FILE: gcpdiag/lint/gcb/snapshots/ERR_2022_003.txt ================================================ * gcb/ERR/2022_003: Builds don't fail because of retention policy set on logs bucket. - projects/gcpdiag-gcb1-aaaa/locations/-/builds/58c22070-5629-480e-b822-cd8eff7befb8 [FAIL] Build can not stream logs to bucket gcpdiag-gcb1-bucket1-aaaa because it has retention policy set. Builds that upload logs to bucket with retention policy must do that once build is finished instead of streaming them. https://gcpdiag.dev/rules/gcb/ERR/2022_003 ================================================ FILE: gcpdiag/lint/gcb/snapshots/ERR_2022_004.txt ================================================ * gcb/ERR/2022_004: Cloud Build Service Agent has the cloudbuild.serviceAgent role. - projects/gcpdiag-gcb1-aaaa [FAIL] service account: service-12340005@gcp-sa-cloudbuild.iam.gserviceaccount.com missing role: roles/cloudbuild.serviceAgent The Cloud Build Service Agent is missing the cloudbuild.serviceAgent role, which gives Cloud Build service account access to managed resources. You can resolve this error by granting the Cloud Build Service Agent (roles/cloudbuild.serviceAgent) IAM role to service-[PROJECT_NUMBER]@gcp-sa- cloudbuild.iam.gserviceaccount.com. https://gcpdiag.dev/rules/gcb/ERR/2022_004 ================================================ FILE: gcpdiag/lint/gce/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/gce/bp_2021_001_serial_logging_enabled.py ================================================ # Copyright 2021 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. # Lint as: python3 """Serial port logging is enabled. Serial port output can be often useful for troubleshooting, and enabling serial logging makes sure that you don't lose the information when the VM is restarted. Additionally, serial port logs are timestamped, which is useful to determine when a particular serial output line was printed. """ import operator as op from gcpdiag import lint, models from gcpdiag.queries import gce def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = gce.get_instances(context) instances_count = 0 for i in sorted(instances.values(), key=op.attrgetter('project_id', 'full_path')): instances_count += 1 if i.is_dataproc_instance(): report.add_skipped(i, 'skipping dataproc instance') continue if i.is_serial_port_logging_enabled(): report.add_ok(i) else: report.add_failed(i) if not instances_count: report.add_skipped(None, 'no instances found') ================================================ FILE: gcpdiag/lint/gce/bp_2022_003_unused_boot_disks.py ================================================ # 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. """GCE unattached bootable disk. Unattached bootable disks are abandoned or orphaned resources that are detached from a instance or service. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gce def run_rule(context: models.Context, report: lint.LintReportRuleInterface): disks = gce.get_all_disks(context) if not disks: report.add_skipped(None, 'no disks found') return all_ok = True for d in sorted(disks, key=lambda d: d.name): if d.bootable and not d.in_use: report.add_failed( d, f'Unattached bootable disk: {d.name} in zone: {d.zone}') all_ok = False if all_ok: project = crm.get_project(context.project_id) report.add_ok(project) ================================================ FILE: gcpdiag/lint/gce/bp_2023_001_ntp_config.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Instance time source is configured with Google NTP server Google recommends Compute Engine instances to be configured with Google NTP servers to facilitate reliable time sync. Google can't predict how external NTP services behave. If at all possible, it is recommended that you do not use external NTP sources with Compute Engine virtual machines. """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort NTP_TIME_SYNC_MESSAGES = ['Time synchronized with', 'Selected source'] RECOMMENDED_NTP_SERVERS = [ 'metadata.google.internal', '169.254.169.254', 'metadata.google' ] logs_by_project = {} def prepare_rule(context: models.Context): filter_str = '''textPayload:("chronyd" OR "ntpd") AND ("Selected source" OR "Time synchronized with")''' logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=NTP_TIME_SYNC_MESSAGES, custom_filter=filter_str) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if serial outputs are unavailable if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if instances: for instance in sorted(instances, key=lambda i: i.name): match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if not match: report.add_skipped(instance, 'No indication of NTP Service time sync') elif not any(server in match.text for server in RECOMMENDED_NTP_SERVERS): report.add_failed(instance, (f"{match.text.split(']:')[1][:-4]}" 'is not a GCP recommended NTP server')) else: report.add_ok(instance) else: report.add_skipped(None, 'No instances found') ================================================ FILE: gcpdiag/lint/gce/bp_2024_001_legacy_monitoring_agent.py ================================================ # Copyright 2024 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. """Verify that GCE VM Instances Don't Have Legacy Monitoring Agent Installed. Please uninstall the legacy monitoring agent from any VMs where it's detected and install the Ops Agent. To uninstall legacy monitoring agent, please follow: https://cloud.google.com/monitoring/agent/monitoring/installation#uninstall. To install the latest version of Ops Agent, please follow: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#install-latest-version. """ import operator as op from typing import Dict from gcpdiag import lint, models from gcpdiag.queries import gce, monitoring, osconfig _query_results_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} LEGACY_MONITORING_AGENT_PACKAGE_NAME = 'stackdriver-agent' LEGACY_MONITORING_AGENT_METRICS_LABEL = 'stackdriver_agent' LEGACY_AGENT_NOT_DETECTED = 'Legacy monitoring agent not installed on the VM' UNABLE_TO_DETECT = 'Unable to confirm legacy monitoring agent installation' UNABLE_TO_DETECT_EXPLANATION = ( 'VM Manager is needed for the legacy agent detection. Please enable it at:' ' https://cloud.google.com/compute/docs/manage-os#automatic and run this' ' check again.') LEGACY_AGENT_DETECTED = 'Legacy monitoring agent installed on the VM' def prefetch_rule(context: models.Context): _query_results_project_id[context.project_id] = monitoring.query( context.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/agent/uptime' | align rate(4m) | every 4m """, ) # Fetch os inventory info for all VM instances. for i in gce.get_instances(context).values(): osconfig.get_inventory(context, i.zone, i.name) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = list(gce.get_instances(context).values()) if not instances: report.add_skipped( None, f'No VM instances found in project: {context.project_id}.') return instances_without_osinventory = [] for i in sorted(instances, key=op.attrgetter('project_id', 'full_path')): if i.is_gke_node(): continue inventory = osconfig.get_inventory(context, i.zone, i.name) if inventory is None: instances_without_osinventory.append(i) continue legacy_agent_found = False for pkg_name in inventory.installed_packages: if LEGACY_MONITORING_AGENT_PACKAGE_NAME in pkg_name: report.add_failed( i, '', LEGACY_AGENT_DETECTED, ) legacy_agent_found = True break if not legacy_agent_found: report.add_ok(i, LEGACY_AGENT_NOT_DETECTED) query = _query_results_project_id[context.project_id] try: vms_agents = { e['labels']['resource.instance_id']: e['labels']['metric.version'] for e in query.values() } except KeyError: for i in instances_without_osinventory: report.add_skipped( i, UNABLE_TO_DETECT_EXPLANATION, UNABLE_TO_DETECT, ) return for i in sorted( instances_without_osinventory, key=op.attrgetter('project_id', 'name'), ): if i.is_gke_node(): continue if i.id in vms_agents: if LEGACY_MONITORING_AGENT_METRICS_LABEL in vms_agents[i.id]: report.add_failed( i, '', LEGACY_AGENT_DETECTED, ) else: report.add_ok(i, LEGACY_AGENT_NOT_DETECTED) else: report.add_skipped( i, UNABLE_TO_DETECT_EXPLANATION, UNABLE_TO_DETECT, ) ================================================ FILE: gcpdiag/lint/gce/bp_2024_002_legacy_logging_agent.py ================================================ # Copyright 2024 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. """Verify that GCE VM Instances Don't Have Legacy Logging Agent Installed. Please uninstall the legacy Logging Agent from any VMs where it's detected and install the Ops Agent. To uninstall legacy Logging Agent, please follow: https://cloud.google.com/stackdriver/docs/solutions/agents/logging/installation#uninstall. To install the latest version of Ops Agent, please follow: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#install-latest-version. """ import operator as op from typing import Dict from gcpdiag import lint, models from gcpdiag.queries import gce, monitoring, osconfig _query_results_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} LEGACY_LOGGING_AGENT = 'google-fluentd' LEGACY_AGENT_NOT_DETECTED = 'Legacy logging agent not installed on the VM' UNABLE_TO_DETECT = 'Unable to detect legacy logging agent' UNABLE_TO_DETECT_EXPLANATION = ( 'VM Manager is needed for the legacy agent detection. Please enable it at:' ' https://cloud.google.com/compute/docs/manage-os#automatic and run this' ' check again.') LEGACY_AGENT_DETECTED = 'Legacy logging agent installed on the VM' def prefetch_rule(context: models.Context): # Fetch agent uptime metrics. _query_results_project_id[context.project_id] = monitoring.query( context.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/agent/uptime' | align rate(4m) | every 4m """, ) # Fetch os inventory info for all VM instances. for i in gce.get_instances(context).values(): osconfig.get_inventory(context, i.zone, i.name) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = list(gce.get_instances(context).values()) if not instances: report.add_skipped( None, f'No VM instances found in project: {context.project_id}.') return instances_without_osinventory = [] for i in sorted(instances, key=op.attrgetter('project_id', 'full_path')): if i.is_gke_node(): continue inventory = osconfig.get_inventory(context, i.zone, i.name) if inventory is None: instances_without_osinventory.append(i) continue legacy_agent_found = False for pkg_name in inventory.installed_packages: if LEGACY_LOGGING_AGENT in pkg_name: report.add_failed( i, '', LEGACY_AGENT_DETECTED, ) legacy_agent_found = True break if not legacy_agent_found: report.add_ok(i, LEGACY_AGENT_NOT_DETECTED) query = _query_results_project_id[context.project_id] try: vms_agents = { e['labels']['resource.instance_id']: e['labels']['metric.version'] for e in query.values() } except KeyError: for i in instances_without_osinventory: report.add_skipped( i, UNABLE_TO_DETECT_EXPLANATION, UNABLE_TO_DETECT, ) return for i in sorted( instances_without_osinventory, key=op.attrgetter('project_id', 'name'), ): if i.is_gke_node(): continue if i.id in vms_agents: if LEGACY_LOGGING_AGENT in vms_agents[i.id]: report.add_failed( i, '', LEGACY_AGENT_DETECTED, ) else: report.add_ok(i, LEGACY_AGENT_NOT_DETECTED) else: report.add_skipped( i, UNABLE_TO_DETECT_EXPLANATION, UNABLE_TO_DETECT, ) ================================================ FILE: gcpdiag/lint/gce/bp_ext_2021_003_secure_boot_enabled.py ================================================ # Copyright 2021 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. # Lint as: python3 """Secure Boot is enabled Google recommends enabling Secure Boot if you can ensure that it doesn't prevent a representative test VM from booting and if it is appropriate for your workload. Compute Engine does not enable Secure Boot by default because unsigned drivers and other low-level software might not be compatible. """ import operator as op from gcpdiag import lint, models from gcpdiag.queries import gce def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = gce.get_instances(context) instances_count = 0 for i in sorted(instances.values(), key=op.attrgetter('project_id', 'full_path')): # GKE nodes are not checked by this rule if i.is_gke_node(): continue instances_count += 1 if i.secure_boot_enabled(): report.add_ok(i) else: report.add_failed(i) if not instances_count: report.add_skipped(None, 'no instances found') ================================================ FILE: gcpdiag/lint/gce/bp_ext_2022_001_vm_manager_enabled.py ================================================ # 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. # Lint as: python3 """GCP project has VM Manager enabled Google recommends enabling VM Manager. It provides visibility on software vulnerabilities, missing updates and enables to set configuration management policies """ from gcpdiag import lint, models from gcpdiag.queries import apis, crm def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if apis.is_enabled(context.project_id, 'osconfig'): report.add_ok(project) else: report.add_failed(project, 'it is recommended to enable VM Manager on your project') ================================================ FILE: gcpdiag/lint/gce/bp_ext_2023_001_gce_scopes.py ================================================ # Copyright 2021 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. # Lint as: python3 """GCE Instances follows access scope best practice Google recommends not to rely on access scopes but instead set the cloud-platform access scope and control the service account access by granting fine-grained IAM roles. Enabling a custom service account with very coarse-grained permissions and a very restricted access scope will ensure the connection to or from the VM is limited and implements a security-in-depth strategy where multiple layers of security are used for holistic protection. """ import operator as op from gcpdiag import lint, models from gcpdiag.queries import crm, gce, iam def run_rule(context: models.Context, report: lint.LintReportRuleInterface): #Fetching the list of instances and declaring an IAM policy object instances = gce.get_instances(context) iam_policy = iam.get_project_policy(context) project_number = crm.get_project(context.project_id).number cloud_platform_scope = "https://www.googleapis.com/auth/cloud-platform" #Defining list of pre-defined roles that a default SA must not have roles = ["roles/editor", "roles/owner", "roles/viewer", "roles/browser"] if not instances: report.add_skipped(None, "no instances found") return for i in sorted(instances.values(), key=op.attrgetter("project_id", "full_path")): service_account = f"serviceAccount:{i.service_account}" basic_roles_granted = [ iam_policy.has_role_permissions(service_account, role) for role in roles ] # GKE nodes are not checked by this rule if i.is_gke_node(): continue if (cloud_platform_scope in i.access_scopes) and any(basic_roles_granted): report.add_failed( i, f"{i.service_account} has a basic role granted along with cloud-platform scope." ) elif any(basic_roles_granted): report.add_failed(i, f"{i.service_account} has a basic role granted.") elif (f"{project_number}-compute@developer.gserviceaccount.com" not in service_account) and not any(basic_roles_granted): report.add_ok(i) ================================================ FILE: gcpdiag/lint/gce/bp_ext_2024_001_no_public_ip.py ================================================ # # Copyright 2024 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. # Lint as: python3 """Instance has a public ip address If the Compute Engine instance does not have a public ip address, then the SSH button will be disabled in the SSH in browser UI. """ from gcpdiag import lint, models from gcpdiag.queries import gce def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = gce.get_instances(context).values() if instances: for instance in sorted(instances, key=lambda i: i.full_path): if not instance.is_public_machine(): report.add_failed(instance, "Instance does not have a public address.") else: report.add_ok(instance) else: report.add_skipped(None, "No instances found") ================================================ FILE: gcpdiag/lint/gce/bp_ext_2024_002_calculate_vm_iops_throughput.py ================================================ # Copyright 2024 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. """ Calculate Google Compute Engine VM's IOPS and Throughput Limits This lint rules provide an easy method to calculate the Instance's disk IOPS and Throughput applicable max limits. """ import json from datetime import datetime, timedelta, timezone import googleapiclient from gcpdiag import lint, models from gcpdiag.queries import gce, monitoring vms = None project = None instances: list def prepare_rule(context: models.Context): global instances instances = [ vms for vms in gce.get_instances(context).values() if not vms.is_gke_node() ] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Calculating Instance's disk IOPS and Throughput limits""" if not instances: report.add_skipped(None, 'no instances found') return vm: gce.Instance for vm in sorted(instances): if not vm.is_running: report.add_skipped(vm, reason=f'VM {vm.name} is in {vm.status} state') else: # IOPS and Throughput calculation is based on - # https://cloud.google.com/compute/docs/disks/performance start_dt_pst = datetime.strptime(vm.laststarttimestamp(), '%Y-%m-%dT%H:%M:%S.%f%z') start_dt_utc = start_dt_pst.astimezone(timezone.utc) start_dt_utc_plus_10_mins = start_dt_utc + timedelta(minutes=5) current_time_utc = datetime.now(timezone.utc) within_hours = 9 if start_dt_utc_plus_10_mins > current_time_utc and (isinstance( vm.laststoptimestamp(), str)): # Instance just starting up, CpuCount might not be available currently via metrics. # Use instance's last stop time as EndTime for monitoring query stop_dt_pst = datetime.strptime(vm.laststoptimestamp(), '%Y-%m-%dT%H:%M:%S.%f%z') stop_dt_utc = stop_dt_pst.astimezone(timezone.utc) end_formatted_string = stop_dt_utc.strftime('%Y/%m/%d %H:%M:%S') within_str = 'within %dh, d\'%s\'' % (within_hours, end_formatted_string) else: within_str = 'within %dh, d\'%s\'' % (within_hours, monitoring.period_aligned_now(5)) try: cpu_count_query = monitoring.query( context.project_id, """ fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/guest_visible_vcpus' | filter (resource.instance_id == '{}') | group_by 1m, [value_guest_visible_vcpus_mean: mean(value.guest_visible_vcpus)] | every 1m | group_by [], [value_guest_visible_vcpus_mean_aggregate: aggregate(value_guest_visible_vcpus_mean)] | {} """.format(vm.id, within_str)) except googleapiclient.errors.HttpError: report.add_skipped( resource=None, reason=('Not able to pull CPU count for instance {}').format(vm)) if cpu_count_query: cpu_count = int(list(cpu_count_query.values())[0]['values'][0][0]) else: report.add_skipped( vm, reason='\tCPU count info is not available for the instance via' ' Monitoring metric "guest_visible_vcpus"', short_info=( '\n\tPlease first start the VM {}, if it is not in running state' ).format(vm.short_path)) return # Fetch list of disks for the instance disk_list = gce.get_all_disks_of_instance(context, vm.zone, vm.name) # Load limits per GB data from json file limits_per_gb_file = 'gcpdiag/runbook/gce/disk_performance_benchmark/limits_per_gb.json' with open(limits_per_gb_file, encoding='utf-8') as file: limits_data = json.load(file) file.close() vm_family = vm.machine_type()[0] # Load instance level iops/throughput limits from json file machine_family_json_file = ( 'gcpdiag/runbook/gce/disk_performance_benchmark/{}-family.json' ).format(vm_family) with open(machine_family_json_file, encoding='utf-8') as f: mach_fam_json_data = json.load(f) f.close() # Fetch disk sizes attached to the VM: total_disk_size = { 'pd-balanced': 0, 'pd-ssd': 0, 'pd-standard': 0, 'pd-extreme': 0 } provisions_iops = { 'pd-balanced': 0, 'pd-ssd': 0, 'pd-standard': 0, 'pd-extreme': 0 } disk: gce.Disk for disk_name in disk_list.items(): disk = disk_name[1] if disk.type == 'pd-balanced': total_disk_size['pd-balanced'] += int(disk.size) elif disk.type == 'pd-ssd': total_disk_size['pd-ssd'] += int(disk.size) elif disk.type == 'pd-standard': total_disk_size['pd-standard'] += int(disk.size) elif disk.type == 'pd-extreme': total_disk_size['pd-extreme'] += int(disk.size) provisions_iops['pd-extreme'] += int(disk.provisionediops or 0) else: report.add_skipped( vm, reason=('Disk-Type {} is not supported with this gcpdiag runbook,' ' disk name - {}').format(disk.type, disk.name)) # Getting dirty with logic based on different disk types, Machine types, CPU counts etc. for disktypes in total_disk_size.items(): disktype = disktypes[0] if total_disk_size[disktype] > 0 and cpu_count > 0: if vm_family in ['a', 'f', 'g', 'm']: if vm.machine_type().split('-')[0].upper() in [ 'A2', 'A3', 'F1', 'G1', 'G2', 'M1', 'M2', 'M3' ]: next_hop = 'Machine type' next_hop_val = vm.machine_type() search_str = vm.machine_type().split('-')[0].upper() if search_str == 'A2' and 'ultragpu' in next_hop_val: search_str = search_str + ' Ultra VMs' elif search_str == 'A2' and 'highgpu' in next_hop_val: search_str = search_str + ' Ultra VMs' else: search_str = search_str + ' VMs' data = limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) # upto first 100GB, pd-standard disks have fixed IO limits if disktype == 'pd-standard' and int( total_disk_size[disktype]) < 100: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) elif disktype == 'pd-extreme' and vm.machine_type() in [ 'g1-small', 'f1-micro' ]: report.add_skipped( vm, reason=('The script do not support ' 'pd-extreme disk type with machine type {} \n' ).format(next_hop_val)) else: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) else: report.add_skipped( vm, reason= ('The machine type {} is not supported with this gcpdiag Lint rule' 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,' ' M2, M3, T2D, T2A, Z3').format(vm.machine_type())) elif vm_family in ['c', 'h', 'z']: if vm.machine_type().split('-')[0].upper() in [ 'C2', 'C2D', 'C3', 'C3D', 'H3', 'Z3' ]: next_hop = 'VM vCPU count' next_hop_val = str(cpu_count) search_str = vm.machine_type().split('-')[0].upper() + ' VMs' data = limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) # upto first 100GB, pd-standard disks have fixed IO limits if disktype == 'pd-standard' and int( total_disk_size[disktype]) < 100: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) elif disktype == 'pd-extreme': # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support data = limit_calculator(limits_data, mach_fam_json_data, 'pd-ssd', int(total_disk_size['pd-extreme']), search_str, next_hop, next_hop_val) report.add_ok( vm, short_info= ('IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), min(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), min(data[6], data[7]))) else: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) else: report.add_skipped( vm, reason= ('The machine type {} is not supported with this gcpdiag Lint rule' 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,' ' M2, M3, T2D, T2A, Z3').format(vm.machine_type())) elif vm_family == 't': # Logic to fetch details for T2 family type if vm.machine_type().split('-')[0].upper() in ['T2D', 'T2A']: next_hop = 'VM vCPU count' if vm.machine_type().split('-')[0].upper() == 'T2D': # T2D Family if disktype == 'pd-standard': if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count > 15: next_hop_val = '16 or more' else: if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count in range(16, 32): next_hop_val = '16-31' elif cpu_count > 31: next_hop_val = '32-60' else: # T2A Family if disktype == 'pd-standard': if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 4): next_hop_val = '2-3' elif cpu_count in range(4, 8): next_hop_val = '4-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count > 15: next_hop_val = '16 or more' else: if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count in range(16, 32): next_hop_val = '16-31' elif cpu_count in range(32, 48): next_hop_val = '32-47' elif cpu_count > 47: next_hop_val = '48' search_str = vm.machine_type().split('-')[0].upper() + ' VMs' if disktype == 'pd-extreme': # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support data = limit_calculator(limits_data, mach_fam_json_data, 'pd-ssd', int(total_disk_size['pd-extreme']), search_str, next_hop, next_hop_val) report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), min(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), min(data[6], data[7]))) else: data = limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) # upto first 100GB, pd-standard disks have fixed IO limits if disktype == 'pd-standard' and int( total_disk_size[disktype]) < 100: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s \n' ).format(disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) else: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) else: report.add_skipped( vm, reason= ('The machine type {} is not supported with this gcpdiag Lint rule' 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,' ' M2, M3, T2D, T2A, Z3').format(vm.machine_type())) elif vm_family == 'e': # Logic to fetch details for E2 family type if vm.machine_type().split('-')[0].upper() in ['E2']: next_hop = 'VM vCPU count' if 'e2-medium' in vm.machine_type(): next_hop_val = 'e2-medium*' else: if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count in range(16, 32): next_hop_val = '16-31' elif cpu_count > 31: next_hop_val = '32 or more' search_str = vm.machine_type().split('-')[0].upper() + ' VMs' if disktype == 'pd-extreme': # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support data = limit_calculator(limits_data, mach_fam_json_data, 'pd-ssd', int(total_disk_size['pd-extreme']), search_str, next_hop, next_hop_val) report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[0], provisions_iops['pd-extreme']), min(data[2], data[3]), min(data[4], provisions_iops['pd-extreme']), min(data[6], data[7]))) else: data = limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) if disktype == 'pd-standard' and int( total_disk_size[disktype]) < 100: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) else: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) else: report.add_skipped( vm, reason= ('The machine type {} is not supported with this gcpdiag Lint rule' 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,' ' M2, M3, T2D, T2A, Z3').format(vm.machine_type())) elif vm_family == 'n': if vm.machine_type().split('-')[0].upper() in ['N1', 'N2', 'N2D']: next_hop = 'VM vCPU count' search_str = vm.machine_type().split('-')[0].upper() + ' VMs' if disktype in ['pd-balanced', 'pd-ssd']: if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count in range(16, 32): next_hop_val = '16-31' elif cpu_count in range(32, 64): next_hop_val = '32-63' elif cpu_count > 63: next_hop_val = '64 or more' data = limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) elif disktype == 'pd-standard': if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count > 15: next_hop_val = '16 or more' data = limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) if int(total_disk_size[disktype]) < 100: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s \n' ).format(disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) else: report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) elif disktype == 'pd-extreme': if search_str == 'N2 VMs' and cpu_count > 63: next_hop = 'Machine type' next_hop_val = vm.machine_type() data = limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), max(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), max(data[6], data[7]))) else: next_hop = 'VM vCPU count' data = limit_calculator(limits_data, mach_fam_json_data, 'pd-ssd', int(total_disk_size['pd-extreme']), search_str, next_hop, next_hop_val) # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support report.add_ok( vm, short_info= ('\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s\n' ).format(disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), max(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), max(data[6], data[7]))) else: report.add_skipped( vm, reason= ('The machine type {} is not supported with this gcpdiag Lint rule' 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,' ' M2, M3, T2D, T2A, Z3').format(vm.machine_type())) else: report.add_skipped( vm, reason= ('The machine type {} is not supported with this gcpdiag Lint rule' 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,' ' M2, M3, T2D, T2A, Z3').format(vm.machine_type())) def limit_calculator(limits_data, mach_fam_json_data, disktype: str, total_disk_size: int, search_str: str, next_hop: str, next_hop_val: str): # Data fetch for limits per GB and Baseline r_iops_limit_per_gb = float( limits_data['iops'][disktype]['Read IOPS per GiB']) w_iops_limit_per_gb = float( limits_data['iops'][disktype]['Write IOPS per GiB']) r_throughput_limit_per_gb = float( limits_data['throughput'][disktype]['Throughput per GiB (MiBps)']) w_throughput_limit_per_gb = float( limits_data['throughput'][disktype]['Throughput per GiB (MiBps)']) baseline_iops = float( limits_data['baseline'][disktype]['Baseline IOPS per VM']) baseline_throughput = float( limits_data['baseline'][disktype]['Baseline Throughput (MiBps) per VM']) # Calculating VM Baseline performance vm_baseline_performance_r_iops = baseline_iops + (r_iops_limit_per_gb * total_disk_size) vm_baseline_performance_w_iops = baseline_iops + (w_iops_limit_per_gb * total_disk_size) vm_baseline_performance_r_throughput = baseline_throughput + ( r_throughput_limit_per_gb * total_disk_size) vm_baseline_performance_w_throughput = baseline_throughput + ( w_throughput_limit_per_gb * total_disk_size) max_read_throuput = 10000000 max_write_throuput = 10000000 max_read_iops = 10000000 max_write_iops = 10000000 for mach_fam_catagory in mach_fam_json_data: if search_str and search_str in mach_fam_catagory: for item in mach_fam_json_data[mach_fam_catagory][disktype]: if item[next_hop] == next_hop_val: max_write_iops = item['Maximum write IOPS'] max_read_iops = item['Maximum read IOPS'] max_read_throuput = item['Maximum read throughput (MiBps)'] max_write_throuput = item['Maximum write throughput (MiBps)'] return (vm_baseline_performance_r_iops, max_read_iops, vm_baseline_performance_r_throughput, max_read_throuput, vm_baseline_performance_w_iops, max_write_iops, vm_baseline_performance_w_throughput, max_write_throuput) ================================================ FILE: gcpdiag/lint/gce/err_2021_001_mig_scaleup_failed.py ================================================ # Copyright 2021 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. # Lint as: python3 """Managed instance groups do not report scaleup failures. The managed instance group autoscaler will report via Cloud Logging any scale up failures, and the logs can help you determine why a scale up didn't succeed. """ import operator import re from typing import List from gcpdiag import lint, models, utils from gcpdiag.queries import apis, gce, logs logs_by_project = {} def prepare_rule(context: models.Context): migs = [ m for m in gce.get_managed_instance_groups(context).values() if not m.is_gke() ] for project_id in {m.project_id for m in migs}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='gce_instance', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str='severity=ERROR AND ' 'protoPayload.methodName="v1.compute.instances.insert"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Note: we exclude GKE MIGs because we have a separate lint rule for this # (gke/ERR/2021_006) migs: List[gce.ManagedInstanceGroup] = [ mi for mi in gce.get_managed_instance_groups(context).values() if not mi.is_gke() ] if not migs: report.add_skipped(None, 'no non-GKE managed instance groups found') # Process gce_instance logs and search for insert errors errors_by_mig = {} for query in logs_by_project.values(): for log_entry in query.entries: try: # Filter out non-relevant log entries. if log_entry['severity']!='ERROR' or \ log_entry['protoPayload']['methodName']!='v1.compute.instances.insert' or \ log_entry['protoPayload']['requestMetadata']['callerSuppliedUserAgent']!= \ 'GCE Managed Instance Group': continue # Determine to what mig this instance belongs. m = re.search(r'/instances/([^/]+)$', log_entry['protoPayload']['resourceName']) if not m: continue instance_name = m.group(1) region = utils.zone_region(log_entry['resource']['labels']['zone']) # pylint: disable=cell-var-from-loop mig_list = list( filter( lambda x: x.is_instance_member( log_entry['resource']['labels']['project_id'], region, instance_name), migs)) if not mig_list: continue if log_entry['protoPayload']['status']['message'] == 'LIMIT_EXCEEDED': errors_by_mig[mig_list[0]] = 'LIMIT_EXCEEDED, possibly IP exhaustion' else: errors_by_mig[ mig_list[0]] = log_entry['protoPayload']['status']['message'] except KeyError: continue # Create the report. for mi in sorted(migs, key=operator.attrgetter('project_id', 'name')): if mi in errors_by_mig: report.add_failed(mi, errors_by_mig[mi]) else: report.add_ok(mi) ================================================ FILE: gcpdiag/lint/gce/err_2021_002_osconfig_perm.py ================================================ # Copyright 2021 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. # Lint as: python3 """OS Config service account has the required permissions. The OS Config service account (@gcp-sa-osconfig.iam.gserviceaccount.com) must have the osconfig.serviceAgent role. """ import operator from gcpdiag import lint, models from gcpdiag.queries import crm, gce, iam ROLE = 'roles/osconfig.serviceAgent' #check metadata on project first if not per instance and skip get_metadata def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. project_ids = {i.project_id for i in gce.get_instances(context).values()} for pid in project_ids: iam.get_project_policy(context.copy_with(project_id=pid)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = gce.get_instances(context) instances_count = 0 for i in sorted(instances.values(), key=operator.attrgetter('project_id', 'name')): # GKE nodes never have OS Config enabled if i.is_gke_node(): continue if i.get_metadata('enable-osconfig'): osconfig_service_account = 'service-{}@gcp-sa-osconfig.iam.gserviceaccount.com'.format( crm.get_project(i.project_id).number) instances_count += 1 iam_policy = iam.get_project_policy( context.copy_with(project_id=i.project_id)) sa = i.service_account if not sa: # if an SA is not attached to the vm check if the service agent has the correct role if not iam_policy.has_role_permissions( f'serviceAccount:{osconfig_service_account}', ROLE): report.add_failed( i, f'service account: {osconfig_service_account}\nmissing role: {ROLE}' ) else: report.add_ok(i) else: report.add_ok(i) if not instances_count: report.add_skipped(None, 'no instances found with OS Config enabled') ================================================ FILE: gcpdiag/lint/gce/err_2021_003_api_service_agent.py ================================================ # Copyright 2021 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """Google APIs service agent has the Editor role. The Google API service agent project-number@cloudservices.gserviceaccount.com runs internal Google processes on your behalf. It is automatically granted the Editor role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gce, iam ROLE = 'roles/editor' def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. project_ids = {i.project_id for i in gce.get_instances(context).values()} for pid in project_ids: iam.get_project_policy(context.copy_with(project_id=pid)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = gce.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') return for project_id in sorted({i.project_id for i in instances.values()}): project = crm.get_project(project_id) sa_email = f'{project.number}@cloudservices.gserviceaccount.com' iam_policy = iam.get_project_policy( context.copy_with(project_id=project_id)) if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE): report.add_failed(project, f'service account: {sa_email}\nmissing role: {ROLE}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/gce/err_2021_004_secure_boot_failed.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Serial logs don't contain Secure Boot error messages The messages: "Security Violation" / "Binary is blacklisted" / "UEFI: Failed to start image" / "UEFI: Failed to load image" in serial output usually indicate that the Secure Boot doesn't pass its pre-checks. """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort SECURE_BOOT_ERR_MESSAGES = [ 'UEFI: Failed to load image.', 'UEFI: Failed to start image.', 'Status: Security Violation', 'Binary is blacklisted ', 'Verification failed: (0x1A) Security Violation', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=SECURE_BOOT_ERR_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if serial outputs are unavailable if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') for instance in sorted(instances, key=lambda i: i.name): # this lint rule isn't relevant to GKE nodes if instance.is_gke_node(): continue match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if match: report.add_failed( instance, ('There are messages indicating that the Secure Boot violations' ' prevent booting {}\n{}: "{}"').format(instance.name, match.timestamp_iso, match.text)) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/err_2021_005_mount_errors.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Serial logs don't contain mount error messages The messages: "You are in emergency mode" / "Failed to mount" / "Unrecognized mount option" in serial output usually indicate that a Linux instance cannot mount the root partition. """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort MOUNT_ERROR_MESSAGES = [ 'You are in emergency mode', # 'Failed to mount', 'Unrecognized mount option', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=MOUNT_ERROR_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if serial outputs are unavailable if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') else: for instance in sorted(instances, key=lambda i: i.name): match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if match: report.add_failed( instance, ('There are messages indicating that ' 'the instance is unable to mount disk {}\n{}: "{}"').format( instance.name, match.timestamp_iso, match.text)) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/err_2022_001_quota_exceeded.py ================================================ # 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. """Project limits were not exceeded. Cloud Monitoring will record the event when any service in your project is reporting a quota exceeded error. Rule will start failing if there is any quota exceeded event during the given timeframe. """ from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import crm, monitoring, quotas _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): params = {'within_days': config.get('within_days')} _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, quotas.QUOTA_EXCEEDED_QUERY_TEMPLATE.format_map(params)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if len(_query_results_per_project_id[context.project_id]) == 0: #no quota exceeded event during the period of time report.add_ok(project) return else: exceeded_quotas = [] for i in _query_results_per_project_id[context.project_id].values(): try: exceeded_quotas.append(i['labels']['metric.limit_name']) except KeyError: report.add_skipped(project, 'no data') #invalid query result return exceeded_quota_names = ', '.join(exceeded_quotas) report.add_failed( project, f'Project has recently exceeded the following quotas: {exceeded_quota_names}.' ) ================================================ FILE: gcpdiag/lint/gce/err_2022_002_premium_guestos_activation_failed.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Serial logs don't contain Guest OS activation errors Premium Guest OSes need to activate their license when created and refreshed regularly after activation. In an event that guest OS cannot communicate with the license servers, the messages: "Could not contact activation server." / "Server needs to be activated by a KMS Server" / "Exiting without registration" in the serial output would indicate license activation failures. """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort GUEST_OS_ACTIVATION_ERR_MESSAGES = [ 'needs to be activated by a KMS Server', # Windows 'Could not contact activation server. Will retry activation later', 'Exiting without registration' # SLES ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=GUEST_OS_ACTIVATION_ERR_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if serial outputs are unavailable if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if not instances: report.add_skipped(None, 'no instances found') for instance in sorted(instances, key=lambda i: i.name): # this lint rule isn't relevant to GKE nodes if instance.is_gke_node(): continue match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if match: report.add_failed( instance, f'There are messages indicating that {instance.name} can\'t be activated: ' f'{match.text}') else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/err_2024_001_snapshot_rate_limit.py ================================================ # Copyright 2024 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. # Lint as: python3 """Snapshot creation not failed due to rate limit. When you try to snapshot your disk more than once during a ten minute period, or issue more than six burst snapshot requests in 60 minutes, you will encounter rate exceeded error. Follow best practices for disk snapshots. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs ERROR_MSG = 'RESOURCE_OPERATION_RATE_EXCEEDED' METHOD_NAME_MATCH = 'v1.compute.snapshots.insert' LOG_FILTER = f""" severity=ERROR protoPayload.status.message="{ERROR_MSG}" protoPayload.methodName="{METHOD_NAME_MATCH}" """ logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='gce_snapshot', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=LOG_FILTER, ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if gce api is disabled if not apis.is_enabled(context.project_id, 'compute'): report.add_skipped(project, 'compute api is disabled') return # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return project_ok_flag = True if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): #Start the Iteration of Log entries for entry in logs_by_project[context.project_id].entries: msg = get_path(entry, ('protoPayload', 'status', 'message'), default='') method = get_path(entry, ('protoPayload', 'methodName'), default='') # find the relevant entries if (entry['severity'] == 'ERROR' and METHOD_NAME_MATCH in method and ERROR_MSG in msg): report.add_failed(project, 'Snapshot Creation limit exceeded') project_ok_flag = False if project_ok_flag: report.add_ok(project) ================================================ FILE: gcpdiag/lint/gce/err_2024_002_performance.py ================================================ # Copyright 2024 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. """ GCE VM is operating within optimal performance thresholds Checks the performance of the GCE instances in a project - CPU Usage, Memory Usage, Disk Usage and Serial port logs errors. Threshold for CPU Usage, Memory Usage, Disk Usage is 95%. """ import operator as op from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce, monitoring vm = None project = None within_hours = 9 within_str = 'within %dh, d\'%s\'' % (within_hours, monitoring.period_aligned_now(5)) UTILIZATION_THRESHOLD = 0.95 IO_LATENCY_THRESHOLD = 1500 mem_search = None disk_search = None instances = [] def prepare_rule(context: models.Context): vm_oom_pattern = [ 'Out of memory: Kill process', 'Kill process', 'Memory cgroup out of memory' ] filter_oom_str = '''textPayload:("oom" OR "Out of memory") AND ("Out of memory: Kill" OR "invoked oom-killer" OR "Memory cgroup out of memory")''' vm_disk_space_error_pattern = [ 'No space left on device', 'No usable temporary directory found in', 'A stop job is running for Security ...', 'disk is at or near capacity' ] filter_disk_str = '''textPayload:("No space left" OR "No usable temporary directory") AND ("No space left on device" OR "No usable temporary directory found in" OR "disk is at or near capacity" OR "A stop job is running for Security ...ing Service " OR "A stop job is running for Security ...ng Service " OR "A stop job is running for Security ...diting Service " OR "A stop job is running for Security ...Auditing Service ")''' global mem_search mem_search = utils.SerialOutputSearch(context, search_strings=vm_oom_pattern, custom_filter=filter_oom_str) global disk_search disk_search = utils.SerialOutputSearch( context, search_strings=vm_disk_space_error_pattern, custom_filter=filter_disk_str) # Fetching the list of instances in the project global instances instances = [ vm for vm in gce.get_instances(context).values() if not vm.is_gke_node() ] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Checking VM performance""" if not instances: report.add_skipped(None, 'no instances found') return for i in sorted(instances, key=op.attrgetter('project_id', 'full_path')): if not i.is_running: report.add_skipped(i, reason=f'VM {i.name} is in {i.status} state') else: disk_usage = None mem_usage = None cpu_usage = None ops_agent_installed = None ops_agent_installed = monitoring.query( context.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/agent/uptime' | filter (resource.instance_id == '{}') | align rate(5m) | every 5m | {} """.format(i.name, within_str)) if ops_agent_installed: cpu_usage = monitoring.query( context.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/cpu/utilization' | filter (resource.instance_id == '{}') && (metric.cpu_state != 'idle') | group_by [resource.instance_id], 30m, [value_utilization_mean: mean(value.utilization)] | filter (cast_units(value_utilization_mean,"")/100) >= {} | {} """.format(i.id, UTILIZATION_THRESHOLD, within_str)) mem_usage = monitoring.query( context.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/memory/percent_used' | filter (resource.instance_id == '{}') | group_by [resource.instance_id], 30m, [percent_used: mean(value.percent_used)] | filter (cast_units(percent_used,"")/100) >= {} | {} """.format(i.id, UTILIZATION_THRESHOLD, within_str)) disk_usage = monitoring.query( context.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/disk/percent_used' | filter (resource.instance_id == '{}') | filter (metric.device !~ '/dev/loop.*' && metric.state == 'used') | group_by [resource.instance_id], 30m, [percent_used: max(value.percent_used)] | group_by [], [value_percent_used_max: max(percent_used)] | filter (cast_units(value_percent_used_max,"")/100) >= {} | {} """.format(i.id, UTILIZATION_THRESHOLD, within_str)) else: cpu_usage = monitoring.query( context.project_id, """ fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | filter (resource.instance_id == '{}') | group_by 30m, [value_utilization_max: mean(value.utilization)] | filter value_utilization_max >= {} | {} """.format(i.id, UTILIZATION_THRESHOLD, within_str)) if 'e2' in i.machine_type(): mem_usage = monitoring.query( context.project_id, """ fetch gce_instance | {{ metric 'compute.googleapis.com/instance/memory/balloon/ram_used' ; metric 'compute.googleapis.com/instance/memory/balloon/ram_size' }} | outer_join 0 | div | filter (resource.instance_id == '{}') | group_by [resource.instance_id], 3m, [ram_left: mean(val())] | filter ram_left >= {} | {} """.format(i.id, UTILIZATION_THRESHOLD, within_str)) # fallback on serial logs to see if there are any OOM logs, defined as vm_oom_pattern mem_errors = None if mem_search: mem_errors = mem_search.get_last_match(i.id) # fallback on serial logs to see if there are any Disk related errors/events, # defined as vm_disk_space_error_pattern disk_errors = None if disk_search: disk_errors = disk_search.get_last_match(i.id) # Checking Disk IO latency for the instance - disk_list = gce.get_all_disks_of_instance(context, i.zone, i.name) disk: gce.Disk for disks in disk_list.items(): disk = disks[1] if disk.type in ['pd-balanced', 'pd-ssd', 'pd-standard', 'pd-extreme']: disk_io_latency = monitoring.query( context.project_id, """ fetch gce_instance | metric 'compute.googleapis.com/instance/disk/average_io_latency' | filter (resource.instance_id == '{}') && (metric.device_name == '{}' && metric.storage_type == '{}') | group_by 1m, [value_average_io_latency_mean: mean(value.average_io_latency)] | every 1m | group_by [metric.storage_type], [value_average_io_latency_mean_percentile: percentile(value_average_io_latency_mean, 99)] | filter(cast_units(value_average_io_latency_mean_percentile,"")/1000) >= {} | {} """.format(i.id, disk.name, disk.type, IO_LATENCY_THRESHOLD, within_str)) if disk_io_latency: report.add_failed( i, reason= ('Disk IO Latency for disk {} is exceeding optimal levels, potentially ' 'impacting performance of the instance.').format(disk.name)) else: report.add_ok(i, ('Disk {} IO Latency is under optimal levels').format( disk.name)) else: report.add_skipped( i, reason=('Disk-Type {} is not supported with this gcpdiag runbook,' ' disk name - {}').format(disk.type, disk.name)) if cpu_usage: report.add_failed( i, ('CPU utilization is exceeding optimal levels, potentially ' 'impacting performance of the instance.')) else: report.add_ok(i, 'CPU utilization is under optimal levels') if mem_usage: report.add_failed( i, ('Memory utilization is exceeding optimal levels(95%), potentially ' 'impacting performance of the instance.')) elif mem_errors: # fallback on serial logs to see if there are any OOM logs, defined as vm_oom_pattern report.add_failed( i, ('Found OOM related events in Serial console logs, potentially ' 'impacting performance of the instance.')) else: report.add_ok(i, 'Memory utilization is under optimal levels') if disk_usage: report.add_failed( i, ('Disk utilization is exceeding optimal levels(95%), potentially ' 'impacting performance of the instance.')) elif disk_errors: report.add_failed( i, ('Found Disk related errors/events in Serial console logs, ' 'could be causing issue with instance')) else: report.add_ok(i, 'Disk utilization is under optimal levels') ================================================ FILE: gcpdiag/lint/gce/err_2024_003_vm_secure_boot_failures.py ================================================ # Copyright 2024 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. """ GCE Shielded VM secure boot validations Identifies if Shielded VMs are facing boot issues due to Secure boot configurations or if there are Secure boot related fail events in cloud logging. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce shutdown_logs: utils.QueryCloudLogs boot_fail_event: utils.SerialOutputSearch def prepare_rule(context: models.Context): # Fetching the list of instances in the project resource_type = 'gce_instance' filter_log = ['severity=ERROR'] logid = ['compute.googleapis.com%2Fshielded_vm_integrity'] global shutdown_logs shutdown_logs = utils.QueryCloudLogs(context.project_id, resource_type, filter_log, logid) boot_fail_str = [ 'Failed to start image', 'Failed to load image', 'Verification failed: (0x1A) Security Violation', 'Binary is blacklisted' ] global boot_fail_event boot_fail_event = utils.SerialOutputSearch(context, search_strings=boot_fail_str) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Analyzing logs for all the instances instances = gce.get_instances(context).values() if not instances: report.add_skipped(None, 'no instances found') return for i in sorted(instances): if i.secure_boot_enabled(): temp = None if shutdown_logs: temp = shutdown_logs.get_entries(i.id).values() if temp: for log_entry in temp: earlybootreportevent: str = '' latebootreportevent: str = '' earlybootreportevent = get_path( log_entry, ('jsonPayload', 'earlyBootReportEvent', 'policyEvaluationPassed'), default='') latebootreportevent = get_path( log_entry, ('jsonPayload', 'lateBootReportEvent', 'policyEvaluationPassed'), default='') if earlybootreportevent is False or latebootreportevent is False: if (i.startrestricted is True) or (boot_fail_event.get_last_match( i.id)): report.add_failed( i, 'Instance has been restricted to boot due to Shielded VM policy violations' ) else: report.add_failed( i, 'Instance is Shielded VM, has Secure boot failures events') else: report.add_ok(i) else: report.add_skipped(i, reason='Secure Boot is disabled for the instance') ================================================ FILE: gcpdiag/lint/gce/err_2024_004_ops_agent.py ================================================ # Copyright 2024 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. """Verify Ops Agent is installed on GCE VMs and is sending logs and metrics. Why isn't the Ops Agent transmitting logs and metrics? Please run the Agent health check (https://cloud.google.com/stackdriver/docs/solutions/agents/\ ops-agent/troubleshoot-find-info#start-checks) to find out, and look up the error code table (https://cloud.google.com/stackdriver/docs/solutions/agents/\ ops-agent/troubleshoot-find-info#health-checks) to locate the corresponding fix. To install the latest version of Ops Agent, please follow: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/\ installation#install-latest-version. To troubleshoot Ops Agent installation failure, please follow: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/\ troubleshoot-install-startup#install-failed. Top Reasons Why Ops Agent Fails to Send Logs and Metrics: 1. VM Access Scopes: The VM needs "logging.write" and "monitoring.write" scopes. 2. Service Account IAM Roles: The Service Account associated with the VM requires "roles/monitoring.metricWriter" and "roles/logging.logWriter". 3. GCP API Enablement: Ops Agent requires Cloud Monitoring API and Cloud Logging API enabled on the project. """ import logging import operator as op from datetime import datetime, timedelta, timezone from typing import Dict, List, Sequence from gcpdiag import lint, models from gcpdiag.queries import gce, logs, monitoring, osconfig _query_results_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} _syslog_query = {} _windows_event_log_query = {} _health_log_query = {} OPS_AGENT_PACKAGE_NAME = 'google-cloud-ops-agent' OPS_AGENT_LOGGING_METRICS_VERSION = 'google-cloud-ops-agent-metrics' OPS_AGENT_MONITORING_METRICS_VERSION = 'google-cloud-ops-agent-logging' OPS_AGENT_NOT_INSTALLED_TEXT = 'Ops Agent not installed on the VM' OPS_AGENT_UNDETECTABLE_TEXT = 'Unable to confirm Ops Agent installation' UNABLE_TO_DETECT_EXPLANATION = ( 'VM Manager is needed for the ops agent detection. Please enable it at:' ' https://cloud.google.com/compute/docs/manage-os#automatic and run this' ' check again.') OPS_AGENT_OK_TEXT = ( 'Ops Agent installed on the VM, and is successfully sending logs and' ' metrics.') OPS_AGENT_FAILS_TO_SEND_TELEMETRY_TEXT = ( "Ops Agent is installed, but it's failing to send both logs and metrics" ' to Google Cloud.') OPS_AGENT_FAILS_TO_SEND_TELEMETRY_EXPLANATION = ( """\tIs Ops Agent sending logs? (%s) \tIs Ops Agent sending metrics? (%s)""" ) class Instance: """Instance represents a Google Compute Engine (GCE) instance, storing its associated project ID and providing flags to track the Ops Agent installation status, OS inventory availability, and Ops Agent liveliness. """ _gce_instance: gce.Instance _project_id: str _ops_agent_installed: bool _has_os_inventory: bool _has_recent_log_pings: bool _has_recent_log_entries: bool _has_logging_uptime_metrics: bool _has_monitoring_uptime_metrics: bool def __init__(self, project_id, gce_instance): self._gce_instance = gce_instance self._project_id = project_id self._ops_agent_installed = False self._has_os_inventory = False self._has_recent_log_pings = False self._has_recent_log_entries = False self._has_logging_uptime_metrics = False self._has_monitoring_uptime_metrics = False @property def project_id(self) -> str: return self._project_id @property def gce_instance(self) -> gce.Instance: return self._gce_instance @property def is_gke_node(self) -> bool: return self._gce_instance.is_gke_node() @property def id(self) -> str: return self._gce_instance.id @property def zone(self) -> str: return self._gce_instance.zone @property def name(self) -> str: return self._gce_instance.name @property def has_os_inventory(self) -> bool: return self._has_os_inventory @has_os_inventory.setter def has_os_inventory(self, new_value: bool): self._has_os_inventory = new_value @property def ops_agent_installed(self) -> bool: return self._ops_agent_installed @ops_agent_installed.setter def ops_agent_installed(self, new_value: bool): self._ops_agent_installed = new_value @property def has_recent_log_pings(self) -> bool: return self._has_recent_log_pings @has_recent_log_pings.setter def has_recent_log_pings(self, new_value: bool): self._has_recent_log_pings = new_value @property def has_recent_log_entries(self) -> bool: return self._has_recent_log_entries @has_recent_log_entries.setter def has_recent_log_entries(self, new_value: bool): self._has_recent_log_entries = new_value @property def has_logging_uptime_metrics(self) -> bool: return self._has_logging_uptime_metrics @has_logging_uptime_metrics.setter def has_logging_uptime_metrics(self, new_value: bool): self._has_logging_uptime_metrics = new_value @property def has_monitoring_uptime_metrics(self) -> bool: return self._has_monitoring_uptime_metrics @has_monitoring_uptime_metrics.setter def has_monitoring_uptime_metrics(self, new_value: bool): self._has_monitoring_uptime_metrics = new_value def prepare_rule(context: models.Context): # Fetch agent uptime metrics. _query_results_project_id[context.project_id] = monitoring.query( context.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/agent/uptime' | align rate(4m) | every 4m """, ) unique_zones = set() # Fetch os inventory info for all VM instances by zones. for i in gce.get_instances(context).values(): unique_zones.add(i.zone) for zone in unique_zones: osconfig.list_inventories(context, zone) # Fetch logs from syslog, windows event log, and ops agent health log. now = datetime.now(timezone.utc) # We need log entries within the past 20-minute timeframe. start_time = now - timedelta(minutes=20) time_filter = ( f"timestamp>=\"{start_time.isoformat(timespec='seconds')}\" AND timestamp" f" <= \"{now.isoformat(timespec='seconds')}\"") _syslog_query[context.project_id] = logs.query( project_id=context.project_id, resource_type='gce_instance', log_name=f'projects/{context.project_id}/logs/syslog', filter_str=time_filter, ) _windows_event_log_query[context.project_id] = logs.query( project_id=context.project_id, resource_type='gce_instance', log_name=f'projects/{context.project_id}/logs/windows_event_log', filter_str=time_filter, ) # we retrieve only the 'LogPing' entries from Ops Agent health log. _health_log_query[context.project_id] = logs.query( project_id=context.project_id, resource_type='gce_instance', log_name=f'projects/{context.project_id}/logs/ops-agent-health', filter_str='"LogPingOpsAgent" AND ' + time_filter, ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Fetch all GCE VM instances from the inspected project. instances = list(gce.get_instances(context).values()) if not instances: report.add_skipped( None, f'No VM instances found in project: {context.project_id}.') return instances = [ Instance(context.project_id, i) for i in sorted(instances, key=op.attrgetter('project_id', 'full_path')) ] confirm_agent_installation_via_os_config(context, report, instances) confirm_agent_installation_via_uptime_metrics(context, report, instances) log_entries = format_log_entries( _syslog_query[context.project_id].entries, _windows_event_log_query[context.project_id].entries, _health_log_query[context.project_id].entries, ) uptime_metric_entries = format_metric_entries( _query_results_project_id[context.project_id]) populate_sub_agents_uptime_metrics_status(instances, uptime_metric_entries) populate_log_type_status(instances, log_entries) confirm_agent_telemetry_transmission(report, instances) def confirm_agent_installation_via_os_config( context: models.Context, report: lint.LintReportRuleInterface, instances: List[Instance], ): unique_zones = set() for i in instances: unique_zones.add(i.zone) inventories: Dict[str, osconfig.Inventory] = {} for zone in unique_zones: inventories.update(osconfig.list_inventories(context, zone)) for i in sorted(instances, key=op.attrgetter('project_id', 'name')): if i.is_gke_node: continue inventory = inventories.get(i.id) if inventory is None: i.has_os_inventory = False continue i.has_os_inventory = True for pkg_name in inventory.installed_packages: if OPS_AGENT_PACKAGE_NAME in pkg_name: i.ops_agent_installed = True break if not i.ops_agent_installed: report.add_failed( i.gce_instance, '', OPS_AGENT_NOT_INSTALLED_TEXT, ) def format_metric_entries( query_entry: monitoring.TimeSeriesCollection,) -> Dict[str, List[str]]: formatted_query_entries: Dict[str, List[str]] = {} for e in query_entry.values(): try: instance_id = e['labels']['resource.instance_id'] metric_version = e['labels']['metric.version'] if instance_id in formatted_query_entries: formatted_query_entries[instance_id].append(metric_version) else: formatted_query_entries[instance_id] = [metric_version] except KeyError: logging.warning( 'query entry without required label:resource.instance_id,' ' metric.version: %s', e, ) return formatted_query_entries def confirm_agent_installation_via_uptime_metrics( context: models.Context, report: lint.LintReportRuleInterface, instances: List[Instance], ): # Fetch Agent Uptime metrics. query = _query_results_project_id[context.project_id] try: vms_agents: Dict[str, List[str]] = {} for e in query.values(): instance_id = e['labels']['resource.instance_id'] metric_version = e['labels']['metric.version'] if instance_id in vms_agents: vms_agents[instance_id].append(metric_version) else: vms_agents[instance_id] = [metric_version] except KeyError: for i in instances: if not i.has_os_inventory: report.add_skipped( i.gce_instance, UNABLE_TO_DETECT_EXPLANATION, OPS_AGENT_UNDETECTABLE_TEXT, ) return # Verify Ops Agent installation for VMs that don't have OS Inventory. for i in sorted( instances, key=op.attrgetter('project_id', 'name'), ): if i.is_gke_node: continue # Skip VMs with confirmed Ops Agent installations via OS Config API. if i.has_os_inventory: continue if i.id in vms_agents: for metric_version in vms_agents[i.id]: if OPS_AGENT_PACKAGE_NAME in metric_version: i.ops_agent_installed = True break if not i.ops_agent_installed: report.add_failed( i.gce_instance, '', OPS_AGENT_NOT_INSTALLED_TEXT, ) else: report.add_skipped( i.gce_instance, UNABLE_TO_DETECT_EXPLANATION, OPS_AGENT_UNDETECTABLE_TEXT, ) def populate_sub_agents_uptime_metrics_status( instances: List[Instance], formatted_metrics_entry: Dict[str, List[str]]): for i in sorted( instances, key=op.attrgetter('project_id', 'name'), ): if i.is_gke_node: continue if not i.ops_agent_installed: continue if i.id not in formatted_metrics_entry: continue for metric_version in formatted_metrics_entry[i.id]: if OPS_AGENT_LOGGING_METRICS_VERSION in metric_version: i.has_logging_uptime_metrics = True if OPS_AGENT_MONITORING_METRICS_VERSION in metric_version: i.has_monitoring_uptime_metrics = True def populate_log_type_status(instances: List[Instance], formatted_log_entry: Dict[str, Dict[str, bool]]): for i in sorted( instances, key=op.attrgetter('project_id', 'name'), ): if i.id in formatted_log_entry: e = formatted_log_entry[i.id] i.has_recent_log_pings = 'logPing' in e i.has_recent_log_entries = ('syslog' in e) or ('windowsEventLog' in e) else: i.has_recent_log_pings = False i.has_recent_log_entries = False def format_log_entries( syslog_entries: Sequence, windows_event_log_entries: Sequence, agent_health_log_entries: Sequence, ) -> Dict[str, Dict[str, bool]]: formatted_log_entry: Dict[str, Dict[str, bool]] = {} for e in syslog_entries: try: instance_id = e['resource']['labels']['instance_id'] if instance_id not in formatted_log_entry: formatted_log_entry[instance_id] = {} formatted_log_entry[instance_id]['syslog'] = True except KeyError: logging.warning('log entry without instance_id label: %s', e) for e in agent_health_log_entries: try: text_payload = e['jsonPayload']['code'] if text_payload.lower() != 'logpingopsagent': continue instance_id = e['resource']['labels']['instance_id'] if instance_id not in formatted_log_entry: formatted_log_entry[instance_id] = {} formatted_log_entry[instance_id]['logPing'] = True except KeyError: logging.warning( 'log entry does not have required keys: jsonPayload.code and' ' resource.labels.instance_id: %s', e, ) for e in windows_event_log_entries: try: instance_id = e['resource']['labels']['instance_id'] if instance_id not in formatted_log_entry: formatted_log_entry[instance_id] = {} formatted_log_entry[instance_id]['windowsEventLog'] = True except KeyError: logging.warning('windows event log entry without instance_id label: %s', e) return formatted_log_entry def confirm_agent_telemetry_transmission( report: lint.LintReportRuleInterface, instances: List[Instance], ): # For all VMs with Ops Agent installed, verify both subagents are transmitting # telemetry. for i in sorted( instances, key=op.attrgetter('project_id', 'name'), ): if i.is_gke_node: continue if not i.ops_agent_installed: continue logging_subagent_up = (i.has_recent_log_pings) or ( i.has_recent_log_entries and i.has_logging_uptime_metrics) monitoring_subagent_up = i.has_monitoring_uptime_metrics if logging_subagent_up and monitoring_subagent_up: report.add_ok( i.gce_instance, OPS_AGENT_OK_TEXT, ) else: logging_subagent_up_text = 'Yes' if logging_subagent_up else 'No' monitoring_subagent_up_text = 'Yes' if monitoring_subagent_up else 'No' report.add_failed( i.gce_instance, OPS_AGENT_FAILS_TO_SEND_TELEMETRY_EXPLANATION % ( logging_subagent_up_text, monitoring_subagent_up_text, ), OPS_AGENT_FAILS_TO_SEND_TELEMETRY_TEXT, ) ================================================ FILE: gcpdiag/lint/gce/gce_rules_snapshot_test.py ================================================ # 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. """Generalize rule snapshot testing""" from gcpdiag.lint import gce, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gce project_id = 'gcpdiag-gce1-aaaa' ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_2021_001.txt ================================================ * gce/BP/2021_001: Serial port logging is enabled. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] Serial port output can be often useful for troubleshooting, and enabling serial logging makes sure that you don't lose the information when the VM is restarted. Additionally, serial port logs are timestamped, which is useful to determine when a particular serial output line was printed. https://gcpdiag.dev/rules/gce/BP/2021_001 ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_2022_003.txt ================================================ * gce/BP/2022_003: GCE unattached bootable disk. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/unattached-disk [FAIL] Unattached bootable disk: unattached-disk in zone: europe-west4-a Unattached bootable disks are abandoned or orphaned resources that are detached from a instance or service. https://gcpdiag.dev/rules/gce/BP/2022_003 ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_2023_001.txt ================================================ * gce/BP/2023_001: Instance time source is configured with Google NTP server - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [SKIP] No indication of NTP Service time sync - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [SKIP] No indication of NTP Service time sync - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [SKIP] No indication of NTP Service time sync - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [SKIP] No indication of NTP Service time sync - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [SKIP] No indication of NTP Service time sync - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [SKIP] No indication of NTP Service time sync ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_2024_001.txt ================================================ * gce/BP/2024_001: Verify that GCE VM Instances Don't Have Legacy Monitoring Agent Installed. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [SKIP] Unable to confirm legacy monitoring agent installation VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [SKIP] Unable to confirm legacy monitoring agent installation VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [SKIP] Unable to confirm legacy monitoring agent installation VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [SKIP] Unable to confirm legacy monitoring agent installation VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [SKIP] Unable to confirm legacy monitoring agent installation VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_2024_002.txt ================================================ * gce/BP/2024_002: Verify that GCE VM Instances Don't Have Legacy Logging Agent Installed. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [SKIP] Unable to detect legacy logging agent VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [SKIP] Unable to detect legacy logging agent VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [SKIP] Unable to detect legacy logging agent VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [SKIP] Unable to detect legacy logging agent VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [SKIP] Unable to detect legacy logging agent VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_EXT_2021_003.txt ================================================ * gce/BP_EXT/2021_003: Secure Boot is enabled - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [FAIL] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [FAIL] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [FAIL] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [FAIL] Google recommends enabling Secure Boot if you can ensure that it doesn't prevent a representative test VM from booting and if it is appropriate for your workload. Compute Engine does not enable Secure Boot by default because unsigned drivers and other low-level software might not be compatible. https://gcpdiag.dev/rules/gce/BP_EXT/2021_003 ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_EXT_2022_001.txt ================================================ * gce/BP_EXT/2022_001: GCP project has VM Manager enabled - projects/gcpdiag-gce1-aaaa [FAIL] it is recommended to enable VM Manager on your project Google recommends enabling VM Manager. It provides visibility on software vulnerabilities, missing updates and enables to set configuration management policies https://gcpdiag.dev/rules/gce/BP_EXT/2022_001 ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_EXT_2023_001.txt ================================================ * gce/BP_EXT/2023_001: GCE Instances follows access scope best practice - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [FAIL] 12340001-compute@developer.gserviceaccount.com has a basic role granted. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] 12340001-compute@developer.gserviceaccount.com has a basic role granted. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [FAIL] 12340001-compute@developer.gserviceaccount.com has a basic role granted. Google recommends not to rely on access scopes but instead set the cloud- platform access scope and control the service account access by granting fine-grained IAM roles. Enabling a custom service account with very coarse- grained permissions and a very restricted access scope will ensure the connection to or from the VM is limited and implements a security-in-depth strategy where multiple layers of security are used for holistic protection. https://gcpdiag.dev/rules/gce/BP_EXT/2023_001 ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_EXT_2024_001.txt ================================================ * gce/BP_EXT/2024_001: Instance has a public ip address - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [FAIL] Instance does not have a public address. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] Instance does not have a public address. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [FAIL] Instance does not have a public address. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [FAIL] Instance does not have a public address. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [FAIL] Instance does not have a public address. If the Compute Engine instance does not have a public ip address, then the SSH button will be disabled in the SSH in browser UI. https://gcpdiag.dev/rules/gce/BP_EXT/2024_001 ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_EXT_2024_002.txt ================================================ * gce/BP_EXT/2024_002: Calculate Google Compute Engine VM's IOPS and Throughput Limits - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] IOPS and Throughput limits available for VM DiskType - pd-standard, Total DiskSize: 32: Max Read-IOPS Count: 75, Max Read-Throughput: 12 MB/s, Max Write-IOPS Count: 150, Max Write-Throughput: 12 MB/s - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] IOPS and Throughput limits available for VM DiskType - pd-standard, Total DiskSize: 10: Max Read-IOPS Count: 75, Max Read-Throughput: 12 MB/s, Max Write-IOPS Count: 150, Max Write-Throughput: 12 MB/s ================================================ FILE: gcpdiag/lint/gce/snapshots/BP_EXT_2024_003.txt ================================================ * gce/BP_EXT/2024_003: Calculate GCE VM's IOPS and Throughput Limits - gcpdiag-gce1-aaaa/gce1 [ OK ] IOPS and Throughput limits available for VM DiskType - pd-standard, Total DiskSize: 32: Read-IOPS Count: 24.0, Read-Throughput: 3.84 MB/s, Write-IOPS Count: 48.0, Write-Throughput: 3.84 MB/s - gcpdiag-gce1-aaaa/gce2 [ OK ] IOPS and Throughput limits available for VM DiskType - pd-standard, Total DiskSize: 10: Read-IOPS Count: 7.5, Read-Throughput: 1.2 MB/s, Write-IOPS Count: 15.0, Write-Throughput: 1.2 MB/s ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2021_001.txt ================================================ * gce/ERR/2021_001: Managed instance groups do not report scaleup failures. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2021_002.txt ================================================ * gce/ERR/2021_002: OS Config service account has the required permissions. (no instances found with OS Config enabled) [SKIP] ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2021_003.txt ================================================ * gce/ERR/2021_003: Google APIs service agent has the Editor role. - projects/gcpdiag-gce1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2021_004.txt ================================================ * gce/ERR/2021_004: Serial logs don't contain Secure Boot error messages - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2021_005.txt ================================================ * gce/ERR/2021_005: Serial logs don't contain mount error messages - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2022_001.txt ================================================ * gce/ERR/2022_001: Project limits were not exceeded. - projects/gcpdiag-gce1-aaaa [SKIP] no data ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2022_002.txt ================================================ * gce/ERR/2022_002: Serial logs don't contain Guest OS activation errors - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2024_001.txt ================================================ * gce/ERR/2024_001: Snapshot creation not failed due to rate limit. - projects/gcpdiag-gce1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2024_002.txt ================================================ * gce/ERR/2024_002: GCE VM is operating within optimal performance thresholds - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [FAIL] Disk IO Latency for disk gce1 is exceeding optimal levels, potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [FAIL] CPU utilization is exceeding optimal levels, potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [FAIL] Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [FAIL] Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] Disk IO Latency for disk gce2 is exceeding optimal levels, potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] CPU utilization is exceeding optimal levels, potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [FAIL] CPU utilization is exceeding optimal levels, potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [FAIL] Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [FAIL] Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [FAIL] CPU utilization is exceeding optimal levels, potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [FAIL] Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [FAIL] Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [FAIL] CPU utilization is exceeding optimal levels, potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [FAIL] Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [FAIL] Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance. Checks the performance of the GCE instances in a project - CPU Usage, Memory Usage, Disk Usage and Serial port logs errors. Threshold for CPU Usage, Memory Usage, Disk Usage is 95%. https://gcpdiag.dev/rules/gce/ERR/2024_002 ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2024_003.txt ================================================ * gce/ERR/2024_003: GCE Shielded VM secure boot validations - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [SKIP] Secure Boot is disabled for the instance - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [SKIP] Secure Boot is disabled for the instance - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [SKIP] Secure Boot is disabled for the instance - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [SKIP] Secure Boot is disabled for the instance - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [SKIP] Secure Boot is disabled for the instance - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [SKIP] Secure Boot is disabled for the instance ================================================ FILE: gcpdiag/lint/gce/snapshots/ERR_2024_004.txt ================================================ * gce/ERR/2024_004: Verify Ops Agent is installed on GCE VMs and is sending logs and metrics. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [SKIP] Unable to confirm Ops Agent installation VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [SKIP] Unable to confirm Ops Agent installation VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [SKIP] Unable to confirm Ops Agent installation VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [SKIP] Unable to confirm Ops Agent installation VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [SKIP] Unable to confirm Ops Agent installation VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [SKIP] Unable to confirm Ops Agent installation VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again. ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2021_001.txt ================================================ * gce/WARN/2021_001: GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions and APIs Required for Logging. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [FAIL] VM does not have a Service Account attached Follow https://cloud.google.com/compute/docs/instances/change-service-account to attach a Service Account to the VM mig-bzvx. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [FAIL] VM does not have a Service Account attached Follow https://cloud.google.com/compute/docs/instances/change-service-account to attach a Service Account to the VM mig-l40g. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] A GCP project should have Cloud Logging API enabled. The service account attached to the GCE VM instances should have the logging.logWriter IAM role permission. Also, a GCE instance should have the logging.write access scope. Without these, Ops Agent won't be able to collect logs from GCE VMs and display on Logs Explorer. https://gcpdiag.dev/rules/gce/WARN/2021_001 ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2021_002.txt ================================================ * gce/WARN/2021_002: GCE nodes have good disk performance. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [SKIP] no data - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [SKIP] no data - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [SKIP] no data - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [SKIP] no data - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [SKIP] no data - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [SKIP] no data ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2021_003.txt ================================================ * gce/WARN/2021_003: GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions and APIs Required for Monitoring. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [FAIL] VM does not have a Service Account attached Follow https://cloud.google.com/compute/docs/instances/change-service-account to attach a Service Account to the VM mig-bzvx. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [FAIL] VM does not have a Service Account attached Follow https://cloud.google.com/compute/docs/instances/change-service-account to attach a Service Account to the VM mig-l40g. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] A GCP project should have Cloud Monitoring API enabled. The service account attached to the GCE VM instances should have the monitoring.metricWriter IAM role permission. Also, a GCE instance should have the monitoring.write access scope. Without these, Ops Agent won't be able to collect metrics from GCE VMs and display on Metrics Explorer. https://gcpdiag.dev/rules/gce/WARN/2021_003 ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2021_004.txt ================================================ * gce/WARN/2021_004: Serial logs don't contain disk full messages - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2021_005.txt ================================================ * gce/WARN/2021_005: Serial logs don't contain out-of-memory messages - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2021_006.txt ================================================ * gce/WARN/2021_006: Serial logs don't contain "Kernel panic" messages - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2021_007.txt ================================================ * gce/WARN/2021_007: Serial logs don't contain "BSOD" messages - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_001.txt ================================================ * gce/WARN/2022_001: GCE connectivity: IAP service can connect to SSH/RDP port on instances. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [FAIL] connections from 35.235.240.0/20 to tcp:3389 blocked by vpc firewall rule: gce-secured-instance-test-deny (instance: gce1) - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [FAIL] connections from 35.235.240.0/20 to tcp:3389 blocked by vpc firewall rule: gce-secured-instance-test-deny (instance: gce2) - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [FAIL] connections from 35.235.240.0/20 to tcp:3389 blocked by vpc firewall rule: gce-secured-instance-test-deny (instance: gce1) Traffic from the IP range 35.235.240.0/20 to VM instances is necessary for IAP TCP forwarding to establish an encrypted tunnel over which you can forward SSH, RDP traffic to VM instances. https://gcpdiag.dev/rules/gce/WARN/2022_001 ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_002.txt ================================================ * gce/WARN/2022_002: Instance groups named ports are using unique names. - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1 [FAIL] Instance group contains multiple ports with the same name - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups/instance-group-1 [FAIL] Instance group contains multiple ports with the same name Named ports are key-value pairs that represent a port's name and number. It is recommended to use unique port name for the same application, so that backend service can only forward traffic to one named port at a time. https://gcpdiag.dev/rules/gce/WARN/2022_002 ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_003.txt ================================================ * gce/WARN/2022_003: GCE VM instances quota is not near the limit. - projects/gcpdiag-gce1-aaaa/regions/europe-west4 [SKIP] no data ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_004.txt ================================================ * gce/WARN/2022_004: Cloud SQL Docker bridge network should be avoided. (no Cloud SQL peered vpc found) [SKIP] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_005.txt ================================================ * gce/WARN/2022_005: GCE CPU quota is not near the limit. - projects/gcpdiag-gce1-aaaa/regions/europe-west4 [SKIP] no data ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_006.txt ================================================ * gce/WARN/2022_006: GCE GPU quota is not near the limit. - projects/gcpdiag-gce1-aaaa/regions/europe-west4 [SKIP] no data ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_007.txt ================================================ * gce/WARN/2022_007: Compute Engine VM has the proper scope to connect using the Cloud SQL Admin API (no Cloud SQL peered vpc found) [SKIP] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_008.txt ================================================ * gce/WARN/2022_008: GCE External IP addresses quota is not near the limit. - projects/gcpdiag-gce1-aaaa/regions/europe-west4 [SKIP] no data ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_009.txt ================================================ * gce/WARN/2022_009: GCE disk quota is not near the limit. - projects/gcpdiag-gce1-aaaa/regions/europe-west4 [SKIP] no data ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_010.txt ================================================ * gce/WARN/2022_010: GCE has enough resources available to fulfill requests - projects/gcpdiag-gce1-aaaa [FAIL] Resource exhaustion in zones: {'us-central1-a'} Resource availability errors can occur when using GCE resource on demand and a zone cannot accommodate your request due to resource exhaustion for the specific VM configuration Consider trying your request in other zones, requesting again with a different VM hardware configuration or at a later time. For more information, see the troubleshooting documentation. https://gcpdiag.dev/rules/gce/WARN/2022_010 ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_011.txt ================================================ * gce/WARN/2022_011: GCE VM service account is valid - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx [SKIP] instance does not have a service account - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g [SKIP] instance does not have a service account - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2022_012.txt ================================================ * gce/WARN/2022_012: PAYG licensed Windows instance can reach KMS to activate - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2 [ OK ] - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1 [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2023_001.txt ================================================ * gce/WARN/2023_001: GCE snapshot policies are defined only for used disks. - projects/gcpdiag-gce1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2023_002.txt ================================================ * gce/WARN/2023_002: Serial logs don't contain out-of-memory message due to Airflow task run ================================================ FILE: gcpdiag/lint/gce/snapshots/WARN_2024_001.txt ================================================ * gce/WARN/2024_001: Checks disks ================================================ FILE: gcpdiag/lint/gce/utils.py ================================================ # Copyright 2021 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. # Lint as: python3 """Various utility functions for GCE linters.""" import re from typing import Dict, Iterable, Optional from boltons.iterutils import get_path from gcpdiag import config, models from gcpdiag.queries import apis, gce, logs class SerialOutputSearch: """ Search any of strings in instance's serial output """ search_strings: Iterable[str] query: logs.LogsQuery instances_with_match: Dict[str, logs.LogEntryShort] search_is_done: bool serial_port_outputs: gce.SerialOutputQuery def __init__(self, context: models.Context, search_strings: Iterable[str], custom_filter: str = None): self.search_strings = search_strings self.query = logs.query( project_id=context.project_id, resource_type='gce_instance', log_name='log_id("serialconsole.googleapis.com/serial_port_1_output")', filter_str=custom_filter if custom_filter else self._mk_filter()) if config.get('enable_gce_serial_buffer'): self.serial_port_outputs = gce.fetch_serial_port_outputs(context) self.instances_with_match = {} self.search_is_done = False def _mk_filter(self) -> str: combined_filter = ' OR '.join([f'"{s}"' for s in self.search_strings]) return f'textPayload:({combined_filter})' def get_last_match(self, instance_id: str) -> Optional[logs.LogEntryShort]: if not self.search_is_done: self.get_all_instance_with_match() return self.instances_with_match.get(instance_id, None) def get_all_instance_with_match(self): for raw_entry in self.query.entries: entry_id = get_path(raw_entry, ('resource', 'labels', 'instance_id'), default=None) if not entry_id: continue entry = logs.LogEntryShort(raw_entry) if any(f in entry.text for f in self.search_strings): self.instances_with_match[entry_id] = entry # If user has enabled direct serial port log fetching if config.get('enable_gce_serial_buffer'): for output in self.serial_port_outputs.entries: # there is no reliable timestamps so we rely on the order the contents were delivered # the order of the output contents is always consistent # start from the button for the most recent entry for serial_entry in reversed(output.contents): if not self.instances_with_match.get(output.instance_id): if any(f in serial_entry for f in self.search_strings): self.instances_with_match[ output.instance_id] = logs.LogEntryShort(serial_entry) self.search_is_done = True class QueryCloudLogs: """ Query Cloud Logging for strings/methods/payloads etc. """ query: logs.LogsQuery instances_with_match: Dict[str, logs.LogEntryShort] def __init__(self, project_id: str, resource_type: str, filter_log: Iterable[str], logid: Iterable[str] = None): self.filter_log = ' OR '.join([f'{s}' for s in filter_log]) self.log_id = self._mk_filter(logid) self.log_query = logs.query(project_id=project_id, resource_type=resource_type, log_name=self.log_id, filter_str=self.filter_log) def _mk_filter(self, logid) -> str: combined_filter = ' OR '.join([f'"{s}"' for s in logid]) return f'log_id({combined_filter})' def get_entries(self, instance_id: str) -> dict: self.instances_with_match = {} raw_entry = None for raw_entry in self.log_query.entries: entry_id = get_path(raw_entry, ('resource', 'labels', 'instance_id'), default=None) if entry_id == instance_id: self.instances_with_match[instance_id] = raw_entry return self.instances_with_match def is_cloudsql_peer_network(url: str) -> bool: prefix = 'https://www.googleapis.com/compute/v1/projects' pattern_non_tu = f'{prefix}/speckle-umbrella.*/cloud-sql-network-.*' pattern_tu = f'{prefix}/.*-tp/servicenetworking' return re.match(pattern_non_tu, url) is not None or \ re.match(pattern_tu, url) is not None def is_serial_port_one_logs_available(context: models.Context): return (apis.is_enabled(context.project_id, 'logging') and \ gce.is_project_serial_port_logging_enabled(context.project_id)) or \ gce.is_serial_port_buffer_enabled() ================================================ FILE: gcpdiag/lint/gce/utils_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test utility functions for GCE linters.""" from collections import deque from unittest.mock import PropertyMock, patch from gcpdiag import config, models from gcpdiag.lint.gce.utils import SerialOutputSearch from gcpdiag.queries import logs from gcpdiag.queries.gce import SerialOutputQuery, SerialPortOutput class TestUtils: """Test for GCE lint Util""" context = models.Context(project_id='x') cl_logs = [{ 'resource': { 'labels': { 'instance_id': '1' }, }, 'textPayload': 'entry_one', 'receiveTimestamp': '2022-03-24T13:26:37.370862686Z' }, { 'resource': { 'labels': { 'instance_id': '1' }, }, 'textPayload': 'entry_x', 'receiveTimestamp': '2022-03-25T13:26:37.370862686Z' }] serial_logs: deque = deque() serial_logs.appendleft(SerialPortOutput('x', '1', ['entry_one', 'entry_x'])) serial_logs.appendleft(SerialPortOutput('x', '2', ['entry_x', 'entry_two'])) @patch.object(SerialOutputQuery, 'entries', new_callable=PropertyMock, return_value=serial_logs) @patch.object(logs.LogsQuery, 'entries', new_callable=PropertyMock, return_value=cl_logs) def test_query_order_with_buffer_enabled(self, mock_logs_query_entries, mock_serial_output_query_entries): # Test when customer has provided the `--enable_gce_serial_buffer` flag config.init({'enable_gce_serial_buffer': True}, 'x') search = SerialOutputSearch(context=self.context, search_strings=['entry_one', 'entry_two']) entry = search.get_last_match('1') assert entry.text == 'entry_one' entry = search.get_last_match('2') assert entry.text == 'entry_two' assert entry.timestamp is None assert entry.timestamp_iso is None #instance doesn't have any serial output and not cloud logging entry entry = search.get_last_match('3') assert entry is None # When cloud logging doesn't have the entry direct outputs should be checked assert mock_logs_query_entries.called # Check that serial logs entries where check with the buffer enabled. assert mock_serial_output_query_entries.called # Patch the `entries()` method of `LogsQuery` and `SerialOutputQuery`. @patch.object(SerialOutputQuery, 'entries', new_callable=PropertyMock, return_value=serial_logs) @patch.object(logs.LogsQuery, 'entries', new_callable=PropertyMock, return_value=cl_logs) def test_query_order_buffer_disabled(self, mock_logs_query_entries, mock_serial_output_query_entries): # `--enable_gce_serial_buffer` not provided config.init({'enable_gce_serial_buffer': False}, 'x') search = SerialOutputSearch(context=self.context, search_strings=['entry_one', 'entry_two']) search.query.entries = self.cl_logs # Check that serial logs are not fetched if the buffer is not enabled. # With the default config, `enable_gce_serial_buffer` is `False`. # There are logs in cloud logging so should use that entry = search.get_last_match('1') assert entry.text == 'entry_one' assert entry.timestamp == logs.log_entry_timestamp(self.cl_logs[0]) entry = search.get_last_match('2') assert entry is None #instance doesn't have any serial output and not cloud logging entry entry = search.get_last_match('3') assert entry is None assert mock_logs_query_entries.called #serial entries should not be fetched. assert not mock_serial_output_query_entries.called def test_is_serial_logs_available(): config.init({'enable_gce_serial_buffer': False}, 'x') ================================================ FILE: gcpdiag/lint/gce/warn_2021_001_logging_perm.py ================================================ # Copyright 2021 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. # Lint as: python3 """GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions \ and APIs Required for Logging. A GCP project should have Cloud Logging API enabled. The service account attached to the GCE VM instances should have the logging.logWriter IAM role permission. Also, a GCE instance should have the logging.write access scope. Without these, Ops Agent won't be able to collect logs from GCE VMs and display on Logs Explorer. """ import operator as op from gcpdiag import lint, models from gcpdiag.queries import apis, crm, gce, iam ROLE = 'roles/logging.logWriter' LOGGING_SCOPES = [ 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/logging.admin', 'https://www.googleapis.com/auth/logging.write', ] ENABLE_LOGGING_API_PROMOT = """Please \ enable Cloud Logging API on the project with the command: \n\ gcloud services enable logging.googleapis.com --project=%s\n\ Ops Agent requires the API to collect \ logs from GCE VMs and display on Logs Explorer""" VM_NO_LOGGING_SCOPE = """Follow \ https://cloud.google.com/compute/docs/instances/change-service-account\ #changeserviceaccountandscopes\nto enable logging.write VM Access Scope.""" SA_NO_LOGS_WRITER = """Follow \ https://cloud.google.com/logging/docs/access-control#grant-roles\n\ to grant roles/logging.logWriter to the VM attached Service Account %s""" VM_NO_SA = """Follow \ https://cloud.google.com/compute/docs/instances/change-service-account\n\ to attach a Service Account to the VM %s.""" def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. project_ids = {i.project_id for i in gce.get_instances(context).values()} for pid in project_ids: iam.get_project_policy(context.copy_with(project_id=pid)) crm.get_project(context.project_id) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'logging'): report.add_failed( crm.get_project(context.project_id), ENABLE_LOGGING_API_PROMOT % (context.project_id), 'Cloud Logging API Not Enabled on project %s' % (context.project_id), ) return instances = gce.get_instances(context) if not instances: report.add_skipped( None, '', f'No VM instances found in project: {context.project_id}.') return for i in sorted(instances.values(), key=op.attrgetter('project_id', 'full_path')): # GKE nodes are checked by another test. if i.is_gke_node(): continue sa = i.service_account if not sa: report.add_failed(i, VM_NO_SA % (i.name), 'VM does not have a Service Account attached') continue has_scope = set(LOGGING_SCOPES) & set(i.access_scopes) if not has_scope: report.add_failed( i, VM_NO_LOGGING_SCOPE, 'VM does not have logging.write Access Scope', ) continue iam_policy = iam.get_project_policy( context.copy_with(project_id=i.project_id)) if not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE): report.add_failed( i, SA_NO_LOGS_WRITER % (sa), 'The attached Service Account of the VM does not have the required' ' IAM role: roles/logging.logWriter', ) continue report.add_ok(i) ================================================ FILE: gcpdiag/lint/gce/warn_2021_002_disk_latency.py ================================================ # Copyright 2021 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. # Lint as: python3 """GCE nodes have good disk performance. Verify that the persistent disks used by the GCE instances provide a "good" performance, where good is defined to be less than 100ms IO queue time. If it's more than that, it probably means that the instance would benefit from a faster disk (changing the type or making it larger). """ import operator as op from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import gce, monitoring SLO_LATENCY_MS = 100 # SLO: at least 99.5% of minutes are good (7 minutes in a day) SLO_BAD_MINUTES_RATIO = 0.005 # If we have less than this minutes measured, skip SLO_VALID_MINUTES_PER_DAY = 12 * 60 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): # Fetch the metrics for all instances. instances = gce.get_instances(context) if not instances: return within_str = 'within %dd, d\'%s\'' % (config.get('within_days'), monitoring.period_aligned_now(60)) _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, f""" fetch gce_instance | {{ metric 'agent.googleapis.com/disk/operation_time' | align rate(1m) ; metric 'agent.googleapis.com/disk/operation_count' | align delta(1m) }} | {within_str} | filter metric.device !~ '.*\\\\d' | join | value [val(0)*val(1), val(1)] | group_by [resource.instance_id], [sum(val(0)), sum(val(1))] | value [val(0)/val(1)] | every 1m | value(val() > cast_units({SLO_LATENCY_MS}, "ms/s")) | group_by 1d, [ .count_true, .count ] """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = gce.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') return for i in sorted(instances.values(), key=op.attrgetter('project_id', 'full_path')): ts_key = frozenset({f'resource.instance_id:{i.id}'}) try: ts = _query_results_per_project_id[context.project_id][ts_key] except KeyError: report.add_skipped(i, 'no data') continue # Did we miss the SLO on any day? # note: we don't calculate the SLO for the whole "WITHIN_DAYS" period # because otherwise you would get different results depending on how that # period is defined. total_minutes_bad = 0 total_minutes = 0 slo_missed = 0 slo_valid = 0 for day_value in ts['values']: total_minutes_bad += day_value[0] total_minutes += day_value[1] if day_value[1] >= SLO_VALID_MINUTES_PER_DAY: slo_valid = 1 if day_value[0] / day_value[1] > SLO_BAD_MINUTES_RATIO: slo_missed = 1 if slo_missed: report.add_failed( i, f'disk latency >{SLO_LATENCY_MS}ms during {total_minutes_bad} ' + f'out of {total_minutes} minutes') elif not slo_valid: report.add_skipped(i, 'not enough data') else: report.add_ok(i) ================================================ FILE: gcpdiag/lint/gce/warn_2021_003_monitoring_permissions.py ================================================ # Copyright 2021 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. """GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions \ and APIs Required for Monitoring. A GCP project should have Cloud Monitoring API enabled. The service account attached to the GCE VM instances should have the monitoring.metricWriter IAM role permission. Also, a GCE instance should have the monitoring.write access scope. Without these, Ops Agent won't be able to collect metrics from GCE VMs and display on Metrics Explorer. """ import operator as op from gcpdiag import lint, models from gcpdiag.queries import apis, crm, gce, iam ROLE = 'roles/monitoring.metricWriter' MONITORING_SCOPES = [ 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/monitoring', 'https://www.googleapis.com/auth/monitoring.write', ] ENABLE_MONITORING_API_PROMOT = ( """Please enable Cloud Monitoring API on the project with the command:\ \ngcloud services enable monitoring.googleapis.com --project=%s\nOps \ Agent requires the API to collect metrics from GCE VMs and display on \ Metrics Explorer""") VM_NO_MONITORING_SCOPE = """Follow \ https://cloud.google.com/compute/docs/instances/change-service-account\ #changeserviceaccountandscopes\nto enable monitoring.write VM Access Scope.""" SA_NO_METRICS_WRITER = """Follow \ https://cloud.google.com/monitoring/access-control#grant-monitoring-access\n\ to grant roles/monitoring.metricWriter to the VM attached Service Account %s""" VM_NO_SA = """Follow \ https://cloud.google.com/compute/docs/instances/change-service-account\n\ to attach a Service Account to the VM %s.""" def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. project_ids = {i.project_id for i in gce.get_instances(context).values()} for pid in project_ids: iam.get_project_policy(context.copy_with(project_id=pid)) crm.get_project(context.project_id) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'monitoring'): report.add_failed( crm.get_project(context.project_id), ENABLE_MONITORING_API_PROMOT % (context.project_id), 'Cloud Monitoring API Not Enabled on project %s' % (context.project_id), ) return instances = gce.get_instances(context) if not instances: report.add_skipped( None, '', f'No VM instances found in project: {context.project_id}.') return for i in sorted(instances.values(), key=op.attrgetter('project_id', 'full_path')): # GKE nodes are checked by another test. if i.is_gke_node(): continue sa = i.service_account if not sa: report.add_failed(i, VM_NO_SA % (i.name), 'VM does not have a Service Account attached') continue has_scope = set(MONITORING_SCOPES) & set(i.access_scopes) if not has_scope: report.add_failed( i, VM_NO_MONITORING_SCOPE, 'VM does not have monitoring.write Access Scope', ) continue iam_policy = iam.get_project_policy( context.copy_with(project_id=i.project_id)) if not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE): report.add_failed( i, SA_NO_METRICS_WRITER % (sa), 'The attached Service Account of the VM does not have the required' ' IAM role: roles/monitoring.metricWriter', ) continue report.add_ok(i) ================================================ FILE: gcpdiag/lint/gce/warn_2021_004_disk_full_serial_messages.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Serial logs don't contain disk full messages The messages: "No space left on device" / "I/O error" / "No usable temporary directory found" in serial output usually indicate that the disk is full. """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort NO_SPACE_LEFT_MESSAGES = [ 'I/O error', # 'No space left on device', 'No usable temporary directory found' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=NO_SPACE_LEFT_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if serial outputs are unavailable if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') else: for instance in sorted(instances, key=lambda i: i.full_path): match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if match: report.add_failed(instance, ('There are messages indicating that the disk might' ' be full in serial output of {}\n{}: "{}"').format( instance.name, match.timestamp_iso, match.text)) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/warn_2021_005_out_of_memory.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Serial logs don't contain out-of-memory messages The messages: "Out of memory: Kill process" / "sacrifice child" / "Killed process" / "Memory cgroup out of memory" in serial output usually indicate that a Linux instance is under memory pressure. """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort OOM_MESSAGES = [ 'Out of memory: Kill process', # 'sacrifice child', 'Killed process', 'Memory cgroup out of memory' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=OOM_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if serial outputs are unavailable if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') else: for instance in sorted(instances, key=lambda i: i.full_path): match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if match: report.add_failed(instance, ('There are messages indicating that OS is running' ' out of memory for {}\n{}: "{}"').format( instance.name, match.timestamp_iso, match.text)) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/warn_2021_006_kernel_panic.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Serial logs don't contain "Kernel panic" messages The "Kernel panic" messages in serial output usually indicate that some fatal error occurred on a Linux instance. """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort PANIC_MESSAGES = [ 'Kernel panic', # ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=PANIC_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if serial outputs are unavailable if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') else: for instance in sorted(instances, key=lambda i: i.name): match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if match: report.add_failed( instance, ('There are messages indicating that ' '"Kernel panic" event occurred for {}\n{}: "{}"').format( instance.name, match.timestamp_iso, match.text)) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/warn_2021_007_bsod.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Serial logs don't contain "BSOD" messages The messages: "Dumping stack trace" / "pvpanic.sys" in serial output usually indicate that some fatal error occurred on a Windows instance. """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort PANIC_MESSAGES = [ 'Dumping stack trace', # 'pvpanic.sys' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=PANIC_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if serial outputs are unavailable if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') else: for instance in sorted(instances, key=lambda i: i.name): match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if match: report.add_failed(instance, ('There are messages indicating that ' '"BSOD" event occurred for {}\n{}: "{}"').format( instance.name, match.timestamp_iso, match.text)) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/warn_2022_001_iap_tcp_forwarding.py ================================================ # # 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. """GCE connectivity: IAP service can connect to SSH/RDP port on instances. Traffic from the IP range 35.235.240.0/20 to VM instances is necessary for IAP TCP forwarding to establish an encrypted tunnel over which you can forward SSH, RDP traffic to VM instances. """ import ipaddress from gcpdiag import lint, models from gcpdiag.queries import gce VERIFY_PORTS = { # 'ssh': 22, 'rdp': 3389 } IAP_SOURCE_NETWORK = ipaddress.ip_network('35.235.240.0/20') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') else: for instance in sorted(instances, key=lambda i: i.full_path): if instance.is_dataproc_instance(): report.add_skipped(instance, 'skipped dataproc vm instance') continue network = instance.network port = VERIFY_PORTS['ssh'] if instance.is_windows_machine(): port = VERIFY_PORTS['rdp'] result = network.firewall.check_connectivity_ingress( src_ip=IAP_SOURCE_NETWORK, ip_protocol='tcp', port=port, target_service_account=instance.service_account, target_tags=instance.tags) if result.action == 'deny': report.add_failed( instance, (f'connections from {IAP_SOURCE_NETWORK} to tcp:{port} blocked by ' f'{result.matched_by_str} (instance: {instance.name})')) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/warn_2022_002_duplicated_named_ports.py ================================================ # # 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. """Instance groups named ports are using unique names. Named ports are key-value pairs that represent a port's name and number. It is recommended to use unique port name for the same application, so that backend service can only forward traffic to one named port at a time. """ from gcpdiag import lint, models from gcpdiag.queries import gce def run_rule(context: models.Context, report: lint.LintReportRuleInterface): groups = gce.get_instance_groups(context).values() if len(groups) == 0: report.add_skipped(None, 'No instance groups found') for g in sorted(groups): if g.has_named_ports(): names = [n['name'] for n in g.named_ports] if len(names) > len(set(names)): report.add_failed( g, 'Instance group contains multiple ports with the same name') else: report.add_ok(g) else: report.add_ok(g) ================================================ FILE: gcpdiag/lint/gce/warn_2022_003_vm_instances_quota.py ================================================ # 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. """GCE VM instances quota is not near the limit. VM instances quota is a regional quota and limits the number of VM instances that can exist in a given region. Rule will start failing if quota usage will be higher then configured threshold (80%). """ from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import gce, monitoring, quotas GCE_SERVICE_NAME = 'compute.googleapis.com' # name of the quota limit QUOTA_LIMIT_NAME = 'INSTANCES-per-project-region' # name of the quota metric QUOTA_METRIC_NAME = 'compute.googleapis.com/instances' # percentage of the quota limit usage QUOTA_LIMIT_THRESHOLD = 0.80 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): # fetch the metrics if we have any instances regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: return params = { 'service_name': GCE_SERVICE_NAME, 'limit_name': QUOTA_LIMIT_NAME, 'within_days': config.get('within_days') } _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: report.add_skipped(None, 'no instances found') return for region in sorted(regions_with_instances, key=lambda r: r.name): ts_key = frozenset({ f'resource.project_id:{context.project_id}', f'metric.quota_metric:{QUOTA_METRIC_NAME}', f'resource.location:{region.name}' }) try: ts = _query_results_per_project_id[context.project_id][ts_key] except KeyError: report.add_skipped(region, 'no data') continue # did we exceeded threshold on any day? exceeded = False for day_value in ts['values']: ratio = day_value[0] limit = day_value[1] if ratio > QUOTA_LIMIT_THRESHOLD: exceeded = True if exceeded: report.add_failed(region, (f'Region has reached {ratio:.0%} of {limit} limit:\n' f' quota limit: {QUOTA_LIMIT_NAME}\n' f' quota metric: {QUOTA_METRIC_NAME}')) else: report.add_ok(region) ================================================ FILE: gcpdiag/lint/gce/warn_2022_004_docker_bridge_network.py ================================================ # Copyright 2021 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. # Lint as: python3 """Cloud SQL Docker bridge network should be avoided. The IP range 172.17.0.0/16 is reserved for the Docker bridge network. Connections from any IP within that range to Cloud SQL instances using private IP fail. """ import ipaddress import operator as op from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import apis, gce, network DOCKER_BRIDGE_NETWORK = ipaddress.ip_network('172.17.0.0/16') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'compute'): report.add_skipped(None, 'compute API is disabled') return instances = gce.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') return cloudsql_peered_networks = {} for vpc in network.get_networks(context): if any(utils.is_cloudsql_peer_network(peer.url) for peer in vpc.peerings): cloudsql_peered_networks[vpc.self_link] = vpc if not cloudsql_peered_networks: report.add_skipped(None, 'no Cloud SQL peered vpc found') return for instance in sorted(instances.values(), key=op.attrgetter('project_id', 'name')): if instance.network.self_link not in cloudsql_peered_networks: continue if any(_is_docker_bridge_ip(ip) for ip in instance.network_ips): report.add_failed(instance, f'{instance.name} is inside of Docker bridge network') else: report.add_ok(instance) def _is_docker_bridge_ip(ip: ipaddress.IPv4Address) -> bool: return ip in DOCKER_BRIDGE_NETWORK ================================================ FILE: gcpdiag/lint/gce/warn_2022_005_cpu_quota.py ================================================ # 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. """GCE CPU quota is not near the limit. CPU quota is a regional quota and limits the number of CPU that can exist in a given region. Rule will start failing if quota usage will be higher then configured threshold (80%). """ from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import gce, monitoring, quotas GCE_SERVICE_NAME = 'compute.googleapis.com' # name of the quota limit QUOTA_LIMIT_NAME = '.*CPUS-per-project-region' # name of the quota metric QUOTA_METRIC_NAMES = ( 'compute.googleapis.com/cpus', 'compute.googleapis.com/n2_cpus', 'compute.googleapis.com/n2d_cpus', 'compute.googleapis.com/m1_cpus', 'compute.googleapis.com/m2_cpus', 'compute.googleapis.com/c2_cpus', 'compute.googleapis.com/a2_cpus', 'compute.googleapis.com/c2d_cpus', 'compute.googleapis.com/n2d_cpus', 'compute.googleapis.com/t2d_cpus', ) # percentage of the quota limit usage QUOTA_LIMIT_THRESHOLD = 0.80 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): # fetch the metrics if we have any instances regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: return params = { 'service_name': GCE_SERVICE_NAME, 'limit_name': QUOTA_LIMIT_NAME, 'within_days': config.get('within_days') } _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: report.add_skipped(None, 'no instances found') return for region in sorted(regions_with_instances, key=lambda r: r.name): all_skipped = True for quota_metric_name in QUOTA_METRIC_NAMES: ts_key = frozenset({ f'resource.project_id:{context.project_id}', f'metric.quota_metric:{quota_metric_name}', f'resource.location:{region.name}' }) try: ts = _query_results_per_project_id[context.project_id][ts_key] all_skipped = False except KeyError: # silently skip continue # did we exceeded threshold on any day? exceeded = False for day_value in ts['values']: ratio = day_value[0] limit = day_value[1] if ratio > QUOTA_LIMIT_THRESHOLD: exceeded = True if exceeded: report.add_failed(region, (f'Region has reached {ratio:.0%} of {limit} limit:\n' f' quota metric: {quota_metric_name}')) else: report.add_ok(region) # report skip if all data for region not available if all_skipped: report.add_skipped(region, 'no data') ================================================ FILE: gcpdiag/lint/gce/warn_2022_006_gpu_quota.py ================================================ # 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. """GCE GPU quota is not near the limit. GPU quota is a regional quota and limits the number of GPU that can exist in a given region. Rule will start failing if quota usage will be higher then configured threshold (80%). """ from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import gce, monitoring, quotas GCE_SERVICE_NAME = 'compute.googleapis.com' # name of the quota limit QUOTA_LIMIT_NAME = '.*GPUS-per-project-region' # name of the quota metric QUOTA_METRIC_NAMES = ( 'compute.googleapis.com/nvidia_k80_gpus', 'compute.googleapis.com/nvidia_p100_gpus', 'compute.googleapis.com/nvidia_a100_gpus', 'compute.googleapis.com/nvidia_p4_gpus', 'compute.googleapis.com/nvidia_t4_gpus', 'compute.googleapis.com/nvidia_v100_gpus', ) # percentage of the quota limit usage QUOTA_LIMIT_THRESHOLD = 0.80 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): # fetch the metrics if we have any instances regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: return params = { 'service_name': GCE_SERVICE_NAME, 'limit_name': QUOTA_LIMIT_NAME, 'within_days': config.get('within_days') } _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: report.add_skipped(None, 'no instances found') return for region in sorted(regions_with_instances, key=lambda r: r.name): all_skipped = True for quota_metric_name in QUOTA_METRIC_NAMES: ts_key = frozenset({ f'resource.project_id:{context.project_id}', f'metric.quota_metric:{quota_metric_name}', f'resource.location:{region.name}' }) try: ts = _query_results_per_project_id[context.project_id][ts_key] all_skipped = False except KeyError: # silently skip continue # did we exceeded threshold on any day? exceeded = False for day_value in ts['values']: ratio = day_value[0] limit = day_value[1] if ratio > QUOTA_LIMIT_THRESHOLD: exceeded = True if exceeded: report.add_failed(region, (f'Region has reached {ratio:.0%} of {limit} limit:\n' f' quota metric: {quota_metric_name}')) else: report.add_ok(region) # report skip if all data for region not available if all_skipped: report.add_skipped(region, 'no data') ================================================ FILE: gcpdiag/lint/gce/warn_2022_007_cloudsql_admin_scope.py ================================================ # Copyright 2021 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. # Lint as: python3 """Compute Engine VM has the proper scope to connect using the Cloud SQL Admin API The service account used by Compute Engine VM should have permission (roles/cloudsql.client) to connect to the Cloud SQL using the Cloud SQL Admin API, otherwise connection won't work. """ import operator as op from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import apis, gce, iam, network ROLE = 'roles/cloudsql.client' CLOUDSQL_ADMIN_SCOPES = [ 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/sqlservice.admin' ] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'compute'): report.add_skipped(None, 'compute API is disabled') return instances = gce.get_instances(context) if not instances: report.add_skipped(None, 'no instances found') return cloudsql_peered_networks = {} for vpc in network.get_networks(context): if any(utils.is_cloudsql_peer_network(peer.url) for peer in vpc.peerings): cloudsql_peered_networks[vpc.self_link] = vpc if not cloudsql_peered_networks: report.add_skipped(None, 'no Cloud SQL peered vpc found') return for instance in sorted(instances.values(), key=op.attrgetter('project_id', 'name')): if instance.network.self_link not in cloudsql_peered_networks: continue iam_policy = iam.get_project_policy(instance.project_id) service_account = instance.service_account has_scope = set(CLOUDSQL_ADMIN_SCOPES) & set(instance.access_scopes) message = [] if not has_scope: message.append('missing scope: sqlservice.admin') if not service_account: message.append('no service account') elif not iam_policy.has_role_permissions( f'serviceAccount:{service_account}', ROLE): message.append( f'service_account: {service_account}\nmissing role: {ROLE}') if message: report.add_failed(instance, '\n'.join(message)) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/warn_2022_008_ip_address_quota.py ================================================ # 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. """GCE External IP addresses quota is not near the limit. Regional IP quota is for assigning IPv4 addresses to VMs in that region. Global IP quota is for assigning IPv4 addresses to global networking resources such as load balancers. Rule will start failing if quota usage will be higher then configured threshold (80%). """ from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import gce, monitoring, quotas GCE_SERVICE_NAME = 'compute.googleapis.com' # name of the quota limit QUOTA_LIMIT_NAME = '.*-ADDRESSES-per-project.*' # name of the quota metric QUOTA_METRIC_NAMES = ( 'compute.googleapis.com/regional_in_use_addresses', 'compute.googleapis.com/global_in_use_addresses', 'compute.googleapis.com/regional_static_addresses', 'compute.googleapis.com/global_static_addresses', 'compute.googleapis.com/regional_static_byoip_addresses', 'compute.googleapis.com/global_static_byoip_addresses', ) # percentage of the quota limit usage QUOTA_LIMIT_THRESHOLD = 0.80 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): # fetch the metrics if we have any instances regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: return params = { 'service_name': GCE_SERVICE_NAME, 'limit_name': QUOTA_LIMIT_NAME, 'within_days': config.get('within_days') } _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: report.add_skipped(None, 'no instances found') return for region in sorted(regions_with_instances, key=lambda r: r.name): all_skipped = True for quota_metric_name in QUOTA_METRIC_NAMES: ts_key = frozenset({ f'resource.project_id:{context.project_id}', f'metric.quota_metric:{quota_metric_name}', f'resource.location:{region.name}' }) try: ts = _query_results_per_project_id[context.project_id][ts_key] all_skipped = False except KeyError: # silently skip continue # did we exceeded threshold on any day? exceeded = False for day_value in ts['values']: ratio = day_value[0] limit = day_value[1] if ratio > QUOTA_LIMIT_THRESHOLD: exceeded = True if exceeded: report.add_failed(region, (f'Region has reached {ratio:.0%} of {limit} limit:\n' f' quota metric: {quota_metric_name}')) else: report.add_ok(region) # report skip if all data for region not available if all_skipped: report.add_skipped(region, 'no data') ================================================ FILE: gcpdiag/lint/gce/warn_2022_009_disk_quota.py ================================================ # 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. """GCE disk quota is not near the limit. The following persistent disk and local SSD quotas apply on a per-region basis: - Local SSD (GB) - Persistent disk standard (GB) - Persistent disk SSD (GB) Rule will start failing if quota usage will be higher then configured threshold (80%). """ from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import gce, monitoring, quotas GCE_SERVICE_NAME = 'compute.googleapis.com' # name of the quota limit QUOTA_LIMIT_NAME = '.*-TOTAL-GB-per-project-region.*' # name of the quota metric QUOTA_METRIC_NAMES = ( 'compute.googleapis.com/local_ssd_total_storage', 'compute.googleapis.com/disks_total_storage', 'compute.googleapis.com/ssd_total_storage', ) # percentage of the quota limit usage QUOTA_LIMIT_THRESHOLD = 0.80 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): # fetch the metrics if we have any instances regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: return params = { 'service_name': GCE_SERVICE_NAME, 'limit_name': QUOTA_LIMIT_NAME, 'within_days': config.get('within_days') } _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): regions_with_instances = gce.get_regions_with_instances(context) if not regions_with_instances: report.add_skipped(None, 'no instances found') return for region in sorted(regions_with_instances, key=lambda r: r.name): all_skipped = True for quota_metric_name in QUOTA_METRIC_NAMES: ts_key = frozenset({ f'resource.project_id:{context.project_id}', f'metric.quota_metric:{quota_metric_name}', f'resource.location:{region.name}' }) try: ts = _query_results_per_project_id[context.project_id][ts_key] all_skipped = False except KeyError: # silently skip continue # did we exceeded threshold on any day? exceeded = False for day_value in ts['values']: ratio = day_value[0] limit = day_value[1] if ratio > QUOTA_LIMIT_THRESHOLD: exceeded = True if exceeded: report.add_failed(region, (f'Region has reached {ratio:.0%} of {limit} limit:\n' f' quota metric: {quota_metric_name}')) else: report.add_ok(region) # report skip if all data for region not available if all_skipped: report.add_skipped(region, 'no data') ================================================ FILE: gcpdiag/lint/gce/warn_2022_010_resource_availability.py ================================================ # # Copyright 2021 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. # Lint as: python3 """GCE has enough resources available to fulfill requests Resource availability errors can occur when using GCE resource on demand and a zone cannot accommodate your request due to resource exhaustion for the specific VM configuration Consider trying your request in other zones, requesting again with a different VM hardware configuration or at a later time. For more information, see the troubleshooting documentation. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs METHOD_NAME_MATCH = 'compute.instances.' STOCKOUT_MESSAGE = 'ZONE_RESOURCE_POOL_EXHAUSTED' RESOURCE_EXHAUSTED = 'resource pool exhausted' INSUFFICIENT_RESOURCES = 'does not have enough resources available' LOG_FILTER = ( '(protoPayload.methodName =~ "compute.instances.*insert" OR' ' protoPayload.methodName = "compute.instances.resume") AND' f' (protoPayload.status.message:"{STOCKOUT_MESSAGE}" OR' f' protoPayload.status.message:"{INSUFFICIENT_RESOURCES}" OR' f' protoPayload.status.message:"{RESOURCE_EXHAUSTED}") AND severity=ERROR') logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='gce_instance', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=LOG_FILTER) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if gce api is disabled if not apis.is_enabled(context.project_id, 'compute'): report.add_skipped(project, 'compute api is disabled') return # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return # To hold affected zones stockout_zones = set() if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for entry in logs_by_project[context.project_id].entries: msg = get_path(entry, ('protoPayload', 'status', 'message'), default='') method = get_path(entry, ('protoPayload', 'methodName'), default='') if (entry['severity'] == 'ERROR' and METHOD_NAME_MATCH in method) and (STOCKOUT_MESSAGE in msg or INSUFFICIENT_RESOURCES in msg or RESOURCE_EXHAUSTED in msg): zone = get_path(entry, ('resource', 'labels', 'zone'), default='') if zone: stockout_zones.add(zone) if stockout_zones: report.add_failed(project, f'Resource exhaustion in zones: {stockout_zones}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/gce/warn_2022_011_valid_sa.py ================================================ # Copyright 2021 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. """GCE VM service account is valid Disabling or deleting the service account used by a GCE VM will results in authentication issues for gcloud components and dependent apps. Restore/enable the service account use by the VM. """ from gcpdiag import lint, models from gcpdiag.queries import gce, iam def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Find all instances which match the context. instances = gce.get_instances(context).values() gke_node_counter = 0 if not instances: report.add_skipped(None, 'No instances found') return for instance in sorted(instances, key=lambda i: i.full_path): if instance.is_gke_node(): gke_node_counter += 1 continue # Verify instance has a service account as it may be created without one. sa = instance.service_account if sa: # Verify service account exists for VM if not iam.is_service_account_existing(sa, context): report.add_failed(instance, f'attached service account is deleted: {sa}') elif not iam.is_service_account_enabled(sa, context): report.add_failed(instance, f'attached service account is disabled: {sa}') else: report.add_ok(instance) else: report.add_skipped(instance, 'instance does not have a service account') if gke_node_counter == len(instances): report.add_skipped(None, 'No relevant GCE instances found') ================================================ FILE: gcpdiag/lint/gce/warn_2022_012_windows_kms.py ================================================ # 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. # Lint as: python3 """PAYG licensed Windows instance can reach KMS to activate Validate if a Microsoft Windows instance is able to activate using GCP PAYG license. """ import ipaddress import operator as op from gcpdiag import lint, models, utils from gcpdiag.queries import gce KMS_FW_RULE = ipaddress.ip_network('35.190.247.13/32') KMS_PORT = 1688 DEFAULT_FW_RULE = ipaddress.ip_network('0.0.0.0/0') NEXT_HOP = 'default-internet-gateway' KMS_ROUTE = ipaddress.ip_network('35.190.247.13/32') # verify KMS is accessible for a given route def kms_route_access(instance) -> bool: for route in instance.routes: if route.next_hop_gateway == ( f'https://www.googleapis.com/compute/v1/projects/' f'{route.project_id}/global/gateways/{NEXT_HOP}' ) and route.check_route_match(KMS_ROUTE, route.dest_range): return True return False def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if no instances instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') return # Load gcp non-byol licenses licenses = gce.get_gce_public_licences('windows-cloud') payg_licenses = [x for x in licenses if not x.endswith('-byol')] # Add windows to new list and skip entire rule if no Windows instances for instance in sorted(instances, key=op.attrgetter('project_id', 'full_path')): fault_list = [] is_faulty = False # Skip non-Windows machines if not instance.is_windows_machine(): continue # Skip BYOL instances if not instance.check_license(payg_licenses): report.add_skipped(instance, 'No PAYG licence attached to this instance') continue # Check for public IP instances if instance.is_public_machine(): # Firewall rule check result = instance.network.firewall.check_connectivity_egress( src_ip=KMS_FW_RULE, ip_protocol='tcp', port=KMS_PORT, target_service_account=instance.service_account, target_tags=instance.tags) if result.action == 'deny': # Implied deny is a pass for external IP instances if result.matched_by_str is not None: fault_list.append( f'connections from {KMS_FW_RULE} to tcp:{KMS_PORT} blocked by ' f'{result.matched_by_str}') is_faulty = True # Check for private IP instances else: # PGA check for subnetwork in instance.subnetworks: if not subnetwork.is_private_ip_google_access(): fault_list.append( f'Subnetwork {subnetwork.name} does not have Private Google Access enabled.' ) is_faulty = True # Firewall rule check result = instance.network.firewall.check_connectivity_egress( src_ip=KMS_FW_RULE, ip_protocol='tcp', port=KMS_PORT, target_service_account=instance.service_account, target_tags=instance.tags) if result.action == 'deny': if result.matched_by_str is None: fault_list.append( f'Connectivity to {KMS_FW_RULE} and port tcp:{KMS_PORT} not found ' f'in VPC.') else: fault_list.append( f'connections from {KMS_FW_RULE} to tcp:{KMS_PORT} blocked by ' f'{result.matched_by_str}.') is_faulty = True # Routes Check if not kms_route_access(instance): fault_list.append( f'Route {KMS_ROUTE} with next hop {NEXT_HOP} not found in VPC.') is_faulty = True if is_faulty: report.add_failed(instance, utils.format_fault_list(fault_list)) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/gce/warn_2023_001_snapshot_policies_on_unused_disks.py ================================================ # Copyright 2023 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. """ GCE snapshot policies are defined only for used disks. GCE scheduled snapshot policies are defined only for used disks, Unused disks should be backed up using manual snapshots. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gce def run_rule(context: models.Context, report: lint.LintReportRuleInterface): disks = gce.get_all_disks(context) if not disks: report.add_skipped(None, 'no disks found') return rule_ok = True for d in sorted(disks, key=lambda d: d.full_path): if d.has_snapshot_schedule and not d.in_use: report.add_failed(d) rule_ok = False if rule_ok: project = crm.get_project(context.project_id) report.add_ok(project) ================================================ FILE: gcpdiag/lint/gce/warn_2023_002_airflowtask_oom.py ================================================ # Copyright 2023 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. # Lint as: python3 """Serial logs don't contain out-of-memory message due to Airflow task run Sometimes Composer Airflow task might be using more memory and no proper logs will be seen in task log. In such cases we can observe out of memory messages in the k8s node log in the following way: "Memory cgroup out of memory: Killed process 123456 (airflow task ru)". """ from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import gce from gcpdiag.queries.logs import LogEntryShort OOM_MESSAGES = ['(airflow task ru)'] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=OOM_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): search = logs_by_project[context.project_id] instances = gce.get_instances(context).values() if len(instances) == 0: report.add_skipped(None, 'No instances found') else: for instance in sorted(instances, key=lambda i: i.full_path): match: Optional[LogEntryShort] = search.get_last_match( instance_id=instance.id) if match: report.add_failed( instance, ('There are messages indicating that OS is running' ' out of memory for {}\n{}: "{}" due to Airflow task run').format( instance.name, match.timestamp_iso, match.text), ) ================================================ FILE: gcpdiag/lint/gcf/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/gcf/err_2022_001_missing_cloudfunctions_serviceagent_role.py ================================================ # 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. # Lint as: python3 """Cloud Functions service agent has the cloudfunctions.serviceAgent role. The Cloud Functions Service Agent is missing the cloudfunctions.serviceAgent role, which gives Cloud Functions Service Agent access to managed resources. You can resolve this error by granting the cloudfunctions.serviceAgent IAM role to service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gcf, iam ROLE = 'roles/cloudfunctions.serviceAgent' def run_rule(context: models.Context, report: lint.LintReportRuleInterface): cloudfunctions = gcf.get_cloudfunctions(context) if not cloudfunctions: report.add_skipped(None, f'no functions found {context}') return project = crm.get_project(context.project_id) sa_email = f'service-{project.number}@gcf-admin-robot.iam.gserviceaccount.com' iam_policy = iam.get_project_policy(context) if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE): report.add_failed(project, f'service account: {sa_email}\nmissing role: {ROLE}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/gcf/err_2022_002_cloudfunctions_org_policy_violation.py ================================================ # Copyright 2021 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. # Lint as: python3 """Successful Cloud Function deployments. Log entries indicate a Cloud Functions deployment failure at a region due to a Resource Location restriction not allowing the region. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import crm, logs MATCH_STR = 'The request has violated one or more Org Policies. \ Please refer to the respective violations for more information.' METHOD_NAME = 'google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl' logs_by_project = {} LOG_FILTER = [ 'severity=ERROR', 'protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"', f'protoPayload.methodName="{METHOD_NAME}"', f'protoPayload.status.message:"{MATCH_STR}"' ] def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_function', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project_id = context.project_id project_resource = crm.get_project(project_id) if not project_resource: report.add_skipped(None, f'no projects found {context}') return query = logs_by_project[context.project_id] for log_entry in query.entries: message = get_path(log_entry, ('protoPayload', 'status', 'message'), default='') severity = get_path(log_entry, ('severity'), default='') if MATCH_STR not in message or severity != 'ERROR': continue entry_project_id = get_path(log_entry, ('resource', 'labels', 'project_id'), default='') if entry_project_id == project_id: deployment_region = log_entry.get('resource').get('labels').get('region') report.add_failed( project_resource, f'{project_id} had a Cloud Function deployment failure at {deployment_region}' ) break else: report.add_ok(project_resource) ================================================ FILE: gcpdiag/lint/gcf/err_2022_003_cloudfunctions_memory_limit_exceeded.py ================================================ # Copyright 2021 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. # Lint as: python3 """Cloud Functions do not exceed memory limits. Log entries indicating Cloud Functions exceeding memory limits have been found. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import gcf, logs MATCH_STR = 'Error: memory limit exceeded.' logs_by_project = {} LOG_FILTER = ['severity=ERROR', f'textPayload:"{MATCH_STR}"'] def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_function', log_name='log_id("cloudfunctions.googleapis.com/cloud-functions")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): cloudfunctions = gcf.get_cloudfunctions(context) if not cloudfunctions: report.add_skipped(None, 'no functions found') return failed_functions = set() query = logs_by_project[context.project_id] for log_entry in query.entries: if MATCH_STR not in get_path(log_entry, ('textPayload'), default='') or get_path( log_entry, ('severity'), default='') != 'ERROR': continue function_name = get_path(log_entry, ('resource', 'labels', 'function_name'), default='') if function_name: failed_functions.add(function_name) for _, cloudfunction in sorted(cloudfunctions.items()): if cloudfunction.name in failed_functions: available_memory = cloudfunction.memory report.add_failed( cloudfunction, f'{cloudfunction.name} exceeded {available_memory} MB memory limit') else: report.add_ok(cloudfunction) ================================================ FILE: gcpdiag/lint/gcf/gcf_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import gcf, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gcf project_id = 'gcpdiag-gcf1-aaaa' ================================================ FILE: gcpdiag/lint/gcf/snapshots/ERR_2022_001.txt ================================================ * gcf/ERR/2022_001: Cloud Functions service agent has the cloudfunctions.serviceAgent role. - projects/gcpdiag-gcf1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/gcf/snapshots/ERR_2022_002.txt ================================================ * gcf/ERR/2022_002: Successful Cloud Function deployments. - projects/gcpdiag-gcf1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/gcf/snapshots/ERR_2022_003.txt ================================================ * gcf/ERR/2022_003: Cloud Functions do not exceed memory limits. - projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1 [ OK ] ================================================ FILE: gcpdiag/lint/gcf/snapshots/WARN_2021_001.txt ================================================ * gcf/WARN/2021_001: Cloud Functions don't use deprecated runtimes. - projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1 [ OK ] ================================================ FILE: gcpdiag/lint/gcf/snapshots/WARN_2021_002.txt ================================================ * gcf/WARN/2021_002: Cloud Functions have no scale up issues. - projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1 [ OK ] ================================================ FILE: gcpdiag/lint/gcf/warn_2021_001_cloudfunctions_deprecated_runtimes.py ================================================ # Lint as: python3 """Cloud Functions don't use deprecated runtimes. The following runtimes are deprecated: Go111, Nodejs6, Nodejs8. """ from gcpdiag import lint, models from gcpdiag.queries import gcf DEPRECATED_RUNTIMES = ['go111', 'nodejs6', 'nodejs8'] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): cloudfunctions = gcf.get_cloudfunctions(context) if not cloudfunctions: report.add_skipped(None, 'no functions found') for cloudfunction in sorted(cloudfunctions.values(), key=lambda cloudfunction: cloudfunction.name): if cloudfunction.runtime in DEPRECATED_RUNTIMES: report.add_failed( cloudfunction, f'cloudfunction with deprecated runtime {cloudfunction.runtime}') else: report.add_ok(cloudfunction) ================================================ FILE: gcpdiag/lint/gcf/warn_2021_002_cloudfunctions_request_aborted.py ================================================ # Copyright 2021 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. # Lint as: python3 """Cloud Functions have no scale up issues. Log entries with Cloud Functions having scale up issues have been found. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import gcf, logs #pylint: disable=line-too-long MATCH_STR = 'The request was aborted because there was no available instance.' logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='cloud_function', log_name='log_id("cloudfunctions.googleapis.com/cloud-functions")', filter_str=f'textPayload:"{MATCH_STR}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): cloudfunctions = gcf.get_cloudfunctions(context) if not cloudfunctions: report.add_skipped(None, f'no functions found {context}') return failed_functions = set() for query in logs_by_project.values(): for log_entry in query.entries: if MATCH_STR not in get_path(log_entry, ('textPayload'), default=''): continue function_name = get_path(log_entry, ('resource', 'labels', 'function_name'), default='') status = get_path(log_entry, ('httpRequest', 'status'), default=0) if status in [429, 500] and function_name: failed_functions.add(function_name) for _, cloudfunction in sorted(cloudfunctions.items()): if cloudfunction.name in failed_functions: report.add_failed(cloudfunction, f'{cloudfunction.name} failed to scale up.') else: report.add_ok(cloudfunction) ================================================ FILE: gcpdiag/lint/gcs/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/gcs/bp_2022_001_bucket_access_uniform.py ================================================ # 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. # Lint as: python3 """Buckets are using uniform access Google recommends using uniform access for a Cloud Storage bucket IAM policy https://cloud.google.com/storage/docs/access-control#choose_between_uniform_and_fine-grained_access """ from gcpdiag import lint, models from gcpdiag.queries import gcs IGNORE_WITH_LABELS = {'goog-composer-environment', 'goog-dataproc-location'} IGNORE_WITH_NAME = ['{project}_cloudbuild', 'artifacts.{project}.appspot.com'] def _is_google_managed(bucket): for t in IGNORE_WITH_NAME: if bucket.name == t.format(project=bucket.project_id): return True return bool(set(bucket.labels.keys()) & IGNORE_WITH_LABELS) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): buckets = gcs.get_buckets(context) bucket_count = 0 for b in buckets.values(): bucket_count += 1 if _is_google_managed(b): report.add_skipped(b, 'Google-managed bucket') elif b.is_uniform_access(): report.add_ok(b) else: report.add_failed(b, 'it is recommend to use uniform access on your bucket') if bucket_count == 0: report.add_skipped(None, 'no buckets found') ================================================ FILE: gcpdiag/lint/gcs/gcs_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import gcs, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gcs project_id = 'gcpdiag-gcs1-aaaa' ================================================ FILE: gcpdiag/lint/gcs/snapshots/BP_2022_001.txt ================================================ * gcs/BP/2022_001: Buckets are using uniform access - b/gcpdiag-gcs1bucket-aaaa [FAIL] it is recommend to use uniform access on your bucket - b/gcpdiag-gcs1bucket-labels-aaaa [FAIL] it is recommend to use uniform access on your bucket - b/gcpdiag-gcs1bucket2-aaaa [FAIL] it is recommend to use uniform access on your bucket Google recommends using uniform access for a Cloud Storage bucket IAM policy https://cloud.google.com/storage/docs/access- control#choose_between_uniform_and_fine-grained_access https://gcpdiag.dev/rules/gcs/BP/2022_001 ================================================ FILE: gcpdiag/lint/gke/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/gke/bp_2021_001_cloudops_enabled.py ================================================ # Copyright 2021 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. """GKE logging and monitoring enabled. Disabling either one of logging (SYSTEM, WORKLOADS) and monitoring (aka "GKE Cloud Operations") impacts the ability to effectively and efficiently troubleshoot cluster issues. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.is_autopilot: disabled: list[str] = [] if c.has_logging_enabled() and \ 'WORKLOADS' not in c.enabled_logging_components(): disabled.append('workload logs') elif not c.has_logging_enabled(): disabled.append('logging') if not c.has_monitoring_enabled(): disabled.append('monitoring') if disabled: report.add_failed(c, ' and '.join(disabled) + ' are disabled') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/bp_2022_001_regional_cluster.py ================================================ # 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. """GKE clusters are regional. The availability of regional clusters (both control plane and nodes) is higher for regional clusters as they are replicated across zones in the region. It is recommended to use regional clusters for the production workload. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.is_regional: report.add_failed(c, ' is not regional') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/bp_2022_002_unique_subnets.py ================================================ # 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. """GKE clusters are using unique subnets. Verify that the Google Kubernetes Engine clusters are not sharing subnets. It is recommended to use unique subnet for each cluster. Keep in mind that subnets may be also reused in other projects. """ from typing import Dict from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') subnets: Dict[str, str] = {} for c in sorted(clusters.values(), key=lambda cluster: cluster.short_path): subnetwork_config = c.subnetwork if subnetwork_config is None: report.add_skipped( c, (f'Cluster "{c.name}" is using Legacy VPC with no' f' support for subnets. Suggest change to modern VPC.')) continue if subnetwork_config.short_path not in subnets: subnets[subnetwork_config.short_path] = c.short_path report.add_ok(c) else: report.add_failed(c, (f'Subnet "{c.subnetwork.short_path}" is used by' f' "{subnets[c.subnetwork.short_path]}" cluster')) ================================================ FILE: gcpdiag/lint/gke/bp_2022_003_cluster_eol.py ================================================ # 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. """GKE cluster is not near to end of life The GKE clusters should be updated regularly. It is recommended to keep your GKE cluster version up to date and avoid reaching end of life. Rule will start failing if scheduled end of life is in less than 30 days. """ from datetime import date, timedelta from typing import Dict from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import gke from gcpdiag.utils import Version # how many days before eol rule will start to failing NOTIFY_PERIOD_IN_DAYS = 30 BASE_OSS_K8S_VERSION = Version('1.23') BASE_OSS_K8S_RELEASE_DATE = date(2021, 12, 7) FUTURE_OSS_K8S_RELEASE_DATE = date(2200, 1, 1) MINOR_RELEASE_PACE_IN_DAYS = 122 # every 4 months GKE_REGULAR_SUPPORT_PERIOD_IN_DAYS = 426 # 14 months GKE_TIME_TO_RAPID_IN_DAYS = 30 # ~1 month GKE_TIME_TO_REGULAR_IN_DAYS = 91 # ~3 months TBD = 'TBD' def _estimate_oss_release_date(version: Version) -> date: """ Estimate a release date of K8s OSS for a given K8s version Since K8s v1.22 the release pace is 3 versions a year or every 4 month https://kubernetes.io/blog/2021/07/20/new-kubernetes-release-cadence/ This function doesn't return a valid date for K8s versions older that v1.23. The precision of the function is +-30days and could be bigger for v1.100+ """ # Return a date of already EOLed version for versions older than BASE_OSS_K8S_VERSION if version.major <= BASE_OSS_K8S_VERSION.major and version.minor <= BASE_OSS_K8S_VERSION.minor: return BASE_OSS_K8S_RELEASE_DATE # K8s v2 isn't planned at the moment if version.major > BASE_OSS_K8S_VERSION.major: return FUTURE_OSS_K8S_RELEASE_DATE # Calculate a possible release date return BASE_OSS_K8S_RELEASE_DATE + timedelta( days=(version.minor - BASE_OSS_K8S_VERSION.minor) * MINOR_RELEASE_PACE_IN_DAYS) def _estimate_gke_eol_date(version: Version, eol_schedule: Dict): """ Estimate End Of Life date for a given GKE version After a OSS K8s version is released it hits GKE Rapid channel in ~30 days. It's being promoted to GKE Regular channel in ~90 days. After a version hits Regular channel it's supported for 14 months. """ short_version = f'{version.major}.{version.minor}' regular_release = get_path(eol_schedule, (short_version, 'regular_avail'), None) rapid_release = get_path(eol_schedule, (short_version, 'rapid_avail'), None) oss_release = get_path(eol_schedule, (short_version, 'oss_release'), None) if regular_release and regular_release != TBD: return regular_release + timedelta(days=GKE_REGULAR_SUPPORT_PERIOD_IN_DAYS) if rapid_release and rapid_release != TBD: return rapid_release + timedelta(days=GKE_TIME_TO_REGULAR_IN_DAYS + GKE_REGULAR_SUPPORT_PERIOD_IN_DAYS) if oss_release and oss_release != TBD: base_oss_release = oss_release else: base_oss_release = _estimate_oss_release_date(version) return base_oss_release + timedelta(days=GKE_TIME_TO_RAPID_IN_DAYS + GKE_TIME_TO_REGULAR_IN_DAYS + GKE_REGULAR_SUPPORT_PERIOD_IN_DAYS) def _notification_required(version: Version, eol_schedule: Dict) -> bool: """Validate if notification is required based on the static channel schedule""" short_version = f'{version.major}.{version.minor}' # Check if the version is older that the oldest version in the EOL file lowest_version = None if eol_schedule.keys(): lowest_version = sorted(eol_schedule.keys())[0] if lowest_version and version < Version(lowest_version): eol_schedule[short_version] = {'eol': 'already reached EOL', 'eoled': True} return True if not eol_schedule or (short_version not in eol_schedule) or ( eol_schedule[short_version]['eol'] == TBD): # The version is NOT defined in the static EOL versions file or is unknowd (TBD) eol_date = _estimate_gke_eol_date(version, eol_schedule) # Update the EOL date in the `eol_schedule` dict eol_schedule[short_version] = {'eol': eol_date, 'estimated': True} else: eol_date = eol_schedule[short_version]['eol'] return date.today() > eol_date - timedelta(days=NOTIFY_PERIOD_IN_DAYS) def _get_notification_msg(version: Version, eol_schedule: Dict) -> str: short_version = f'{version.major}.{version.minor}' msg = f"GKE version {short_version} scheduled end of life: {eol_schedule[short_version]['eol']}" if 'estimated' in eol_schedule[short_version]: msg += ' (estimation)' return msg def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') eol_schedule = gke.get_release_schedule() for _, c in sorted(clusters.items()): if c.release_channel: report.add_skipped(c, 'release channel: ' + c.release_channel) continue if _notification_required(c.master_version, eol_schedule): report.add_failed(c, _get_notification_msg(c.master_version, eol_schedule)) continue for np in c.nodepools: if _notification_required(np.version, eol_schedule): report.add_failed(np, _get_notification_msg(np.version, eol_schedule)) else: report.add_ok(np) ================================================ FILE: gcpdiag/lint/gke/bp_2022_004_http_load_balancing_disabled.py ================================================ # Lint as: python3 """Enable http load balancing on clusters to use GKE ingress and container-native load balancing. If this is disabled GKE ingresses will be stuck in the creating state. Similarly if this is disabled after GKE ingresses have been created but before they are deleted the GKE ingresses will be stuck in the deleting state. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.has_http_load_balancing_enabled(): report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/bp_2023_001_network_policy_minimum_requirements.py ================================================ # Copyright 2023 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. """GKE network policy minimum requirements The recommended minimum cluster size to run network policy enforcement is three e2-medium instances to ensure redundancy, high availability and to avoid down time due to maintenance activities. Network policy is not supported for clusters whose nodes are f1-micro or g1-small instances, as the resource requirements are too high. Enabling this feature on such machines might lead to user worklaods not getting scheduled or having very little resources available as kube-system workloads will be consuming all or most resources. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): # Skipping check for autopilot clusters as beginning from version 1.22.7-gke.1500 # and later and versions 1.23.4-gke.1500 and later have Dataplane V2 enabled by default # Check if cluster has dataplane V2 which has network policy enabled if c.has_dpv2_enabled(): report.add_skipped(c, 'Dataplane V2 is enabled in the cluster') continue if not c.has_network_policy_enabled(): report.add_skipped( c, 'network policy enforcement is disabled in the cluster') continue # check for number of nodes in the cluster if c.current_node_count < 3: report.add_failed(c, 'Node count: ' + str(c.current_node_count)) continue # check nodepool node's machine type node_failure = False for n in c.nodepools: machine_type = n.get_machine_type() if machine_type in ('f1-micro', 'g1-small'): report.add_failed(n, 'node\'s machine type is: ' + machine_type) node_failure = True if not node_failure: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/bp_2023_002_stateful_workloads_not_on_preemptible_node.py ================================================ # Lint as: python3 """Stateful workloads not run on preemptible node Stateful workloads run on preemptible node are likely to be more frequently disrupted by node termination with a short grace period. Please fully test before you decide to run stateful workloads on preemptible node to avoid app level service interruption or data corruption. Visit site below for more info: https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms#best-practices """ from gcpdiag import lint, models from gcpdiag.queries import gce, gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = gce.get_instances(context=context) clusters = gke.get_clusters(context=context) # A 'failed cluster' in this rule is defined as a GKE cluster that: # 1. has at least one preemptible node # 2. the preemptible node has at least one writeable non-boot PD attached failed_clusters = set() for i in instances.values(): if i.is_gke_node() and i.is_preemptible_vm(): for d in i.disks: # Skip checking if the disk is not PD (e.g. localSSD) if 'type' in d and d['type'] != 'PERSISTENT': continue # Skip checking if the PD is not writeable if 'mode' in d and 'WRITE' not in d['mode']: continue # A writeable non-boot PD indicates stateful workloads on this node. if 'boot' in d and not d['boot']: instance_cluster_name = i.get_metadata('cluster-name') instance_zone = i.zone for c in clusters.values(): if instance_cluster_name == c.name and c.location in instance_zone: failed_clusters.add(c) if not clusters: report.add_skipped(None, 'no clusters found') return for c in sorted(clusters.values(), key=lambda cluster: cluster.short_path): if c not in failed_clusters: report.add_ok(c) else: report.add_failed(c, ( f'Stateful workload is running on preemptible/spot node(s) "{c.name}"' )) ================================================ FILE: gcpdiag/lint/gke/bp_2023_004_vpc_native_cluster.py ================================================ # 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. """GKE clusters are VPC-native. It's recommended to use VPC-native clusters. VPC-native clusters use alias IP address ranges on GKE nodes and are required for private GKE clusters and for creating clusters on Shared VPCs, as well as many other features. VPC-native clusters scale more easily than routes-based clusters without consuming Google Cloud routes and so are less susceptible to hitting routing limits. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.is_vpc_native: report.add_failed(c, ' is not VPC-native') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/bp_2023_005_gateway_crd.py ================================================ # Copyright 2023 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. """ Enable gateway resources through Gateway API. There is a possibility that healthcheckpolicies.networking.gke.io, gcpbackendpolicies.networking.gke.io, or gcpgatewaypolicies.networking.gke.io CRD are notpresent. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'Your cluster is using manually installed CRDs for enablement' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=f'jsonPayload.message:"{MATCH_STR_1}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/bp_2025_001_gke_nodelocal_dnscache_enabled.py ================================================ # Copyright 2025 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. """GKE clusters should have NodeLocal DNSCache enabled. NodeLocal DNSCache improves DNS reliability and performance within the cluster by running a local DNS cache on each node. This reduces latency and load on kube-dns. It is a recommended best practice for most Standard clusters. Autopilot clusters have this enabled by default. """ from gcpdiag import lint, models from gcpdiag.queries import gke as gke_queries def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Run the lint rule.""" clusters = gke_queries.get_clusters(context) if not clusters: report.add_skipped(None, "no clusters found") return for _, cluster in sorted(clusters.items()): if cluster.status != "RUNNING": report.add_skipped( cluster, f"Cluster is not in RUNNING state (state: {cluster.status})") continue if cluster.is_autopilot: report.add_skipped(cluster, "NodeLocal DNSCache is default in Autopilot") continue if cluster.is_nodelocal_dnscache_enabled: report.add_ok(cluster) else: reason = ( "NodeLocal DNSCache is not enabled.\n" "Enable it to improve DNS performance and reliability.\n" "You can enable it with the command:\n" f" gcloud container clusters update {cluster.name} --location={cluster.location}" " --update-addons=NodeLocalDNS=ENABLED\n" "See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache" ) report.add_failed(cluster, reason=reason) ================================================ FILE: gcpdiag/lint/gke/bp_ext_2022_001_groups_enabled.py ================================================ # Copyright 2021 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. """Google Groups for RBAC enabled. Enable Google Groups for RBAC so cluster administrators do not need to manage permissions manually for each user on the cluster and so Workspace administrators can manage user accounts, such as revoking access when someone leaves your organization. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.has_authenticator_group_enabled(): report.add_failed(c, ' does not have Google Groups for RBAC enabled') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/bp_ext_2023_001_maintenance_window.py ================================================ # Copyright 2023 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. """GKE maintenance windows are defined Maintenance windows give you fine-grained control over when automatic maintenance can occur on GKE clusters. They allow administrators to control the timing and impact of these updates, ensuring minimal disruption to running workloads. """ from gcpdiag import lint, models from gcpdiag.queries import gke clusters_by_project = {} def prepare_rule(context: models.Context): clusters_by_project[context.project_id] = gke.get_clusters(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = clusters_by_project[context.project_id] if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.has_maintenance_window(): report.add_failed(c, ' does not configure a maintenance window') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/bp_ext_2023_002_private_cluster.py ================================================ # Copyright 2023 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. """ GKE clusters are private clusters. A private cluster is a type of VPC-native cluster that only depends on internal IP addresses. Nodes, Pods, and Services in a private cluster require unique subnet IP address ranges. Private clusters are used when the applications and services are needed to be isolated from the outside connections completely. This ensures the workloads are private and not exposed to untrusted sources. """ from gcpdiag import lint, models from gcpdiag.queries import gke clusters_by_project = {} def prepare_rule(context: models.Context): clusters_by_project[context.project_id] = gke.get_clusters(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = clusters_by_project[context.project_id] if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.is_private: report.add_failed(c, ' is a public cluster') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/eol_parser.sh ================================================ #!/bin/bash # WARNING: This script is deprecated and may be removed in a future release. # Please use 'gcpdiag/queries/gke.get_release_schedule' instead. # Parses the public GKE Schedule page and extratct EOL (end-of-life) dates # for currently available GKE versions curl -s https://cloud.google.com/kubernetes-engine/docs/release-schedule | sed -n '//,/<\/tbody>/p' | grep -vE 'tbody>|tr>' | sed -e 's/<\/td.*//g' -e 's///g' | tr '\n' ' ' | (read -a GKE_REL echo '# Auto-generated, DO NOT edit manually' echo '# Use `make gke-eol-file` from the top level directory' len=${#GKE_REL[@]} for (( i=0; i<$len; i+=12 )) do echo "'${GKE_REL[$i]}':" echo " oss_release: ${GKE_REL[$((i + 1))]}" echo " rapid_avail: ${GKE_REL[$((i + 2))]}" echo " regular_avail: ${GKE_REL[$((i + 4))]}" echo " stable_avail: ${GKE_REL[$((i + 6))]}" echo " eol: ${GKE_REL[$((i + 10))]}" done) ================================================ FILE: gcpdiag/lint/gke/err_2021_001_logging_perm.py ================================================ # Copyright 2021 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. """GKE nodes service account permissions for logging. The service account used by GKE nodes should have the logging.logWriter role, otherwise ingestion of logs won't work. """ from gcpdiag import lint, models from gcpdiag.queries import gke, iam ROLE = 'roles/logging.logWriter' def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. project_ids = {c.project_id for c in gke.get_clusters(context).values()} for pid in project_ids: iam.get_project_policy(context.copy_with(project_id=pid)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Find all clusters with logging enabled. clusters = gke.get_clusters(context) iam_policy = iam.get_project_policy(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.has_logging_enabled(): report.add_skipped(c, 'logging disabled') else: # Verify service-account permissions for every nodepool. for np in c.nodepools: sa = np.service_account if not iam.is_service_account_enabled(sa, context): report.add_failed(np, f'service account disabled or deleted: {sa}') elif not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE): report.add_failed(np, f'service account: {sa}\nmissing role: {ROLE}') else: report.add_ok(np) ================================================ FILE: gcpdiag/lint/gke/err_2021_002_monitoring_perm.py ================================================ # Copyright 2021 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. """GKE nodes service account permissions for monitoring. The service account used by GKE nodes should have the monitoring.metricWriter role, otherwise ingestion of metrics won't work. """ from gcpdiag import lint, models from gcpdiag.queries import gke, iam ROLE = 'roles/monitoring.metricWriter' def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Find all clusters with monitoring enabled. clusters = gke.get_clusters(context) iam_policy = iam.get_project_policy(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.has_monitoring_enabled(): report.add_skipped(c, 'monitoring disabled') else: # Verify service-account permissions for every nodepool. for np in c.nodepools: sa = np.service_account if not iam.is_service_account_enabled(sa, context): report.add_failed(np, f'service account disabled or deleted: {sa}') elif not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE): report.add_failed(np, f'service account: {sa}\nmissing role: {ROLE}') else: report.add_ok(np) ================================================ FILE: gcpdiag/lint/gke/err_2021_003_kms_key_enabled.py ================================================ # Copyright 2021 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. """App-layer secrets encryption is activated and Cloud KMS key is enabled. GKE's default service account cannot use a disabled or destroyed Cloud KMS key for application-level secrets encryption. """ from gcpdiag import lint, models from gcpdiag.queries import gke, kms def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.has_app_layer_enc_enabled(): report.add_skipped(c, 'App-layer secrets encryption isn\'t enabled') else: crypto_key = kms.get_crypto_key(c.app_layer_sec_key) if crypto_key.is_destroyed(): report.add_failed(c, f'Key {crypto_key} is destroyed') elif not crypto_key.is_enabled(): report.add_failed(c, f'Key {crypto_key} is disabled') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2021_004_node_connection_apiserver.py ================================================ # Copyright 2021 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. """GKE nodes aren't reporting connection issues to apiserver. GKE nodes need to connect to the control plane to register and to report status regularly. If connection errors are found in the logs, possibly there is a connectivity issue, like a firewall rule blocking access. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'Failed to connect to apiserver' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_node', log_name='log_id("kubelet")', filter_str=f'jsonPayload.MESSAGE:"{MATCH_STR}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: return MATCH_STR in log_entry['jsonPayload']['MESSAGE'] except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_nodes( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed( c, 'Connectivity issues detected. Nodes:\n. ' + '\n. '.join(bad_nodes_by_cluster[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2021_005_node_connection_storage.py ================================================ # Copyright 2021 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. """GKE nodes aren't reporting connection issues to storage.google.com. GKE node need to download artifacts from storage.google.com:443 when booting. If a node reports that it can't connect to storage.google.com, it probably means that it can't boot correctly. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'Failed to connect to storage.googleapis.com' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='gce_instance', log_name='log_id("serialconsole.googleapis.com/serial_port_1_output")', filter_str=f'textPayload:"{MATCH_STR}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: return MATCH_STR in log_entry['textPayload'] except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_nodes( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed( c, 'Connectivity issues detected. Nodes:\n. ' + '\n. '.join(bad_nodes_by_cluster[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2021_006_scaleup_failed.py ================================================ # Copyright 2021 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. """GKE Autoscaler isn't reporting scaleup failures. If the GKE autoscaler reported a problem when trying to add nodes to a cluster, it could mean that you don't have enough resources to accommodate for new nodes. E.g. you might not have enough free IP addresses in the GKE cluster network. """ import collections import re from gcpdiag import lint, models from gcpdiag.queries import apis, gke, logs # k8s_cluster, container.googleapis.com/cluster-autoscaler-visibility ca_logs_by_project = {} # gce_instance, cloudaudit.googleapis.com/activity gce_logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: ca_logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name= 'log_id("container.googleapis.com/cluster-autoscaler-visibility")', filter_str= 'jsonPayload.resultInfo.results.errorMsg.messageId:"scale.up.error"') gce_logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='gce_instance', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str='severity=ERROR AND ' 'protoPayload.methodName="v1.compute.instances.insert"') # Note: we don't filter by callerSuppliedUserAgent because this will be # removed anyway because of search job aggregation. #AND ' #'protoPayload.requestMetadata.callerSuppliedUserAgent="GCE Managed Instance Group for GKE"' def is_mig_instance(mig_name: str, instance_name: str): """Verify that an instance is part of a mig using naming conventions.""" if mig_name.endswith('-grp'): mig_prefix = mig_name[:-4] if instance_name.startswith(mig_prefix): return True return False def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Correlation dicts, so that we can determine resources based on log labels: try: cluster_by_mig = {} cluster_migs = collections.defaultdict(set) for c in clusters.values(): for np in c.nodepools: for mig in np.instance_groups: cluster_by_mig[mig.name] = c cluster_migs[c].add(mig.name) except KeyError: pass # Collect errors by mig name. mig_errors = {} # Process gce_instance logs and search for VM creation errors for query in gce_logs_by_project.values(): for log_entry in query.entries: try: # Filter out non-relevant log entries. if log_entry['severity']!='ERROR' or \ log_entry['protoPayload']['methodName']!='v1.compute.instances.insert' or \ log_entry['protoPayload']['requestMetadata']['callerSuppliedUserAgent']!= \ 'GCE Managed Instance Group for GKE': continue # Determine mig name. m = re.search(r'/instances/([^/]+)$', log_entry['protoPayload']['resourceName']) if not m: continue instance_name = m.group(1) # pylint: disable=cell-var-from-loop mig = list( filter(lambda x: is_mig_instance(x, instance_name), cluster_by_mig.keys())) if not mig: continue if log_entry['protoPayload']['status']['message'] == 'LIMIT_EXCEEDED': mig_errors[mig[0]] = 'LIMIT_EXCEEDED, possibly IP exhaustion' else: mig_errors[mig[0]] = log_entry['protoPayload']['status']['message'] except KeyError: pass # Process cluster autoscaler logs for query in ca_logs_by_project.values(): for log_entry in query.entries: try: for r in log_entry['jsonPayload']['resultInfo']['results']: if r['errorMsg']['messageId'].startswith('scale.up.error'): for p in r['errorMsg']['parameters']: m = re.search(r'/instanceGroups/([^/]+)$', p) if m: mig_errors.setdefault(m.group(1), r['errorMsg']['messageId']) except KeyError: pass # Create the report. for _, c in sorted(clusters.items()): cluster_mig_errors = cluster_migs.get(c, set()).intersection(mig_errors.keys()) if cluster_mig_errors: report.add_failed( c, 'Scale up failures detected on managed instance groups:\n. '+\ '\n. '.join(f'{mig} ({mig_errors[mig]})' for mig in cluster_mig_errors)) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2021_007_gke_sa.py ================================================ # Copyright 2021 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. """GKE service account permissions. Verify that the Google Kubernetes Engine service account exists and has the Kubernetes Engine Service Agent role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gke, iam # defining role ROLE = 'roles/container.serviceAgent' # creating rule to report if default SA exists def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return project = crm.get_project(context.project_id) sa = 'service-{}@container-engine-robot.iam.gserviceaccount.com'.format( project.number) iam_policy = iam.get_project_policy(context) if iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE): report.add_ok(project) else: report.add_failed(project, reason=f'service account: {sa}\nmissing role: {ROLE}') ================================================ FILE: gcpdiag/lint/gke/err_2021_008_api_service_agent.py ================================================ # Copyright 2021 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. # Note that we don't have a general rule that checks this for all products, # because the grant is done lazily, as soon as it is needed. So check that the # grant is there only when resources of a certain product (like GKE clusters) # are present, and we know that the grant is necessary for the correct # operation of that product. Copy the rule for other products, as necessary. """Google APIs service agent has Editor role. The Google API service agent project-number@cloudservices.gserviceaccount.com runs internal Google processes on your behalf. It is automatically granted the Editor role on the project. Reference: https://cloud.google.com/iam/docs/service-accounts#google-managed """ from gcpdiag import lint, models from gcpdiag.queries import crm, gke, iam ROLE = 'roles/editor' def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. project_ids = {c.project_id for c in gke.get_clusters(context).values()} for pid in project_ids: iam.get_project_policy(context.copy_with(project_id=pid)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for project_id in sorted({c.project_id for c in clusters.values()}): project = crm.get_project(project_id) sa_email = f'{project.number}@cloudservices.gserviceaccount.com' iam_policy = iam.get_project_policy( context.copy_with(project_id=project_id)) if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE): report.add_failed(project, f'service account: {sa_email}\nmissing role: {ROLE}') else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/gke/err_2021_009_nodepool_version_skew.py ================================================ # Copyright 2021 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. """Version skew between cluster and node pool. Difference between cluster version and node pools version should be no more than 2 (K8s = K8S_MINOR_WITH_3_VERSIONS_SKEW or \ c_ver.major > K8S_MAJOR_WITH_3_VERSIONS_SKEW: skew = CURRENT_SKEW major_ok = c_ver.same_major(np_ver) minor_ok = c_ver.diff_minor(np_ver) <= skew if major_ok and minor_ok: report.add_ok(nodepool) else: report.add_failed(nodepool, reason=fail_reason_template.format(c_ver=c_ver, np_ver=np_ver, skew=skew)) ================================================ FILE: gcpdiag/lint/gke/err_2021_010_internal_forwarding_rule_limits.py ================================================ # Copyright 2021 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. """Check internal peering forwarding limits which affect GKE. Internal Load Balancer creation can fail due to VPC internal forwarding rules limits. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'INTERNAL_FORWARDING_RULES_WITH_PEERING_LIMITS_EXCEEDED' MATCH_STR_2 = 'SyncLoadBalancerFailed' logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str= f'jsonPayload.message:"{MATCH_STR_1}" AND jsonPayload.reason:"{MATCH_STR_2}"' ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if (MATCH_STR_1 in log_entry['jsonPayload']['message']) and ( MATCH_STR_2 in log_entry['jsonPayload']['reason']): return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2021_011_ip_masq_not_reporting_errors.py ================================================ # Copyright 2021 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. """ip-masq-agent not reporting errors If ip-masq-agent is reporting errors, it is possible that the config received is invalid. In that case, it is possible that the applied config is not reflecting the desired masquerading behavior, which could lead to unexpected connectivity issues. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs IP_MASQ_AGENT_CONTAINER_NAME = 'ip-masq-agent' # k8s_container ip_masq_container_errors = {} def prepare_rule(context: models.Context): ip_masq_container_errors[context.project_id] = logs.query( project_id=context.project_id, resource_type='k8s_container', log_name='log_id("stderr")', filter_str='severity=ERROR AND '+\ f'resource.labels.container_name="{IP_MASQ_AGENT_CONTAINER_NAME}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') def filter_f(log_entry): try: container_name = log_entry['resource']['labels']['container_name'] if (log_entry['severity'] == 'ERROR' and container_name == IP_MASQ_AGENT_CONTAINER_NAME): return True except KeyError: return False clusters_with_errors = util.gke_logs_find_bad_clusters( context=context, logs_by_project=ip_masq_container_errors, filter_f=filter_f) # Generate report for c in clusters.values(): if c in clusters_with_errors: report.add_failed(c, logs.format_log_entry(clusters_with_errors[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2021_012_np_sa_enabled.py ================================================ # Copyright 2021 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. """Node pool service account exists and not is disabled. Disabling or deleting the service account used by a node pool will render the node pool not functional. To fix - restore the default compute account or service account that was specified when the node pool was created. """ from gcpdiag import lint, models from gcpdiag.queries import gke, iam def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Find all clusters. clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): # Verify service-account exists for every nodepool. for np in c.nodepools: sa = np.service_account default_prefix = '' if np.has_default_service_account(): default_prefix = 'default ' if not iam.is_service_account_existing(sa, context): report.add_failed(np, f'{default_prefix}service account is deleted: {sa}') elif not iam.is_service_account_enabled(sa, context): report.add_failed(np, f'{default_prefix}service account is disabled: {sa}') else: report.add_ok(np) ================================================ FILE: gcpdiag/lint/gke/err_2021_013_connectivity_cluster_rules.py ================================================ # Copyright 2021 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. """GKE cluster firewall rules are configured. GKE automatically creates firewall rules for cluster communication. We verify that the VPC firewall rules are present. """ # Note that this rule is separate from the other rules that # do the connectivity check so that it can be excluded more # easily if somebody takes into account that the automatic # rule creation fails, but provisions the firewall on their own. from gcpdiag import lint, models from gcpdiag.queries import gke def _run_rule_cluster(report: lint.LintReportRuleInterface, c: gke.Cluster): try: cluster_fw_rules_names = [ f'gke-{c.name}-{c.cluster_hash}-vms', f'gke-{c.name}-{c.cluster_hash}-all', ] if c.is_private: cluster_fw_rules_names.append(f'gke-{c.name}-{c.cluster_hash}-master') missing_rules = [ rule_name for rule_name in cluster_fw_rules_names \ if not c.network.firewall.verify_ingress_rule_exists(rule_name) ] if missing_rules: report.add_failed(c, 'missing firewall rules: ' + ', '.join(missing_rules)) else: report.add_ok(c) except gke.UndefinedClusterPropertyError as err: report.add_skipped(c, str(err)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): _run_rule_cluster(report, c) ================================================ FILE: gcpdiag/lint/gke/err_2021_014_connectivity_master.py ================================================ # Copyright 2021 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. """GKE masters of private clusters can reach the nodes. Masters must be allowed to reach the nodes via tcp:443 and tcp10250. """ from gcpdiag import lint, models from gcpdiag.queries import gke def _run_rule_cluster(report: lint.LintReportRuleInterface, c: gke.Cluster): network = c.network if not c.nodepools: report.add_skipped(c, 'no nodepools') return np = next(iter(c.nodepools)) if not c.is_private: report.add_skipped(c, 'public cluster') return tags = np.node_tags if c.is_autopilot: # use default tags for autopilot clusters tags = [f'gke-{c.name}-{c.cluster_hash}-node'] # Verify connectivity for masters_net in c.masters_cidr_list: for p in [443, 10250]: result = network.firewall.check_connectivity_ingress( src_ip=masters_net, ip_protocol='tcp', port=p, target_service_account=np.service_account, target_tags=tags) if result.action == 'deny': report.add_failed( c, 'connections from %s to port %s blocked by %s' % (masters_net, p, result.matched_by_str)) return report.add_ok(c) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): _run_rule_cluster(report, c) ================================================ FILE: gcpdiag/lint/gke/err_2021_015_connectivity_vms.py ================================================ # Copyright 2021 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. """GKE connectivity: node to pod communication. Agents and host-network pods from a node must be able to communicate with all pods on all nodes. """ from gcpdiag import lint, models, utils from gcpdiag.queries import gke # All ports must be allowed, but only verify a fixed set. VERIFY_PORTS = { # 'tcp': [53, 80, 443, 8080, 10000], 'udp': [53, 1000, 10000] } def prefetch_rule(context: models.Context): # Prefetch networks and subnetworks clusters = gke.get_clusters(context) for c in clusters.values(): subnets = c.network.subnetworks del subnets def _run_rule_cluster(report: lint.LintReportRuleInterface, c: gke.Cluster): network = c.network if not c.nodepools: report.add_skipped(c, 'no nodepools') return for np in c.nodepools: src_nets = { mig.template.subnetwork.ip_network for mig in np.instance_groups } for src_net in src_nets: for (proto, port) in utils.iter_dictlist(VERIFY_PORTS): result = network.firewall.check_connectivity_ingress( src_ip=src_net, ip_protocol=proto, port=port, target_service_account=np.service_account, target_tags=np.node_tags) if result.action == 'deny': report.add_failed( c, (f'connections from {src_net} to {proto}:{port} blocked by ' f'{result.matched_by_str} (node pool: {np.name})')) return report.add_ok(c) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): _run_rule_cluster(report, c) ================================================ FILE: gcpdiag/lint/gke/err_2022_001_connectivity_pod_to_pod.py ================================================ # 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. """GKE connectivity: pod to pod communication. Traffic between all pods on a cluster is required by the Kubernetes networking model. Following protocols must be allowed: TCP, UDP, SCTP, ICMP, ESP, AH. """ from gcpdiag import lint, models, utils from gcpdiag.queries import gke # All ports must be allowed, but only verify a fixed set. VERIFY_PORTS = { # 'tcp': [53, 80, 443, 8080, 10000], 'udp': [53, 1000, 10000] } def prefetch_rule(context: models.Context): # Prefetch networks and subnetworks clusters = gke.get_clusters(context) for c in clusters.values(): subnets = c.network.subnetworks del subnets def _run_rule_cluster(report: lint.LintReportRuleInterface, c: gke.Cluster): network = c.network if not c.nodepools: report.add_skipped(c, 'no nodepools') return src_net = c.pod_ipv4_cidr for np in c.nodepools: tags = np.node_tags if c.is_autopilot: # use default tags for autopilot clusters tags = [f'gke-{c.name}-{c.cluster_hash}-node'] for (proto, port) in utils.iter_dictlist(VERIFY_PORTS): result = network.firewall.check_connectivity_ingress( src_ip=src_net, ip_protocol=proto, port=port, target_service_account=np.service_account, target_tags=tags) if result.action == 'deny': report.add_failed( c, (f'connections from {src_net} to {proto}:{port} blocked by ' f'{result.matched_by_str} (node pool: {np.name})')) return report.add_ok(c) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): _run_rule_cluster(report, c) ================================================ FILE: gcpdiag/lint/gke/err_2022_002_private_google_access.py ================================================ # 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. """GKE nodes of private clusters can access Google APIs and services. Private GKE clusters must have Private Google Access enabled on the subnet where cluster is deployed. """ from gcpdiag import lint, models from gcpdiag.queries import gke, network def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): # fetch project number p: str = c.project_id if c.project_id != c.network.project_id: # shared vpc p = c.network.project_id if c.is_private and not c.subnetwork.is_private_ip_google_access(): router = network.get_router(project_id=p, region=c.subnetwork.region, network=c.network) if router.subnet_has_nat(c.subnetwork): # Cloud NAT configured for subnet report.add_ok(c) else: # no Cloud NAT configured for subnet report.add_failed(c, (f' subnet {c.subnetwork.name} has' ' Private Google Access disabled and Cloud NAT' ' is not available')) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2022_003_ingress_healthcheck.py ================================================ # 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. """GKE connectivity: load balancer to node communication (ingress). In order for the Ingress service to work correctly, the network connection from the load balancer must be allowed. """ import re from gcpdiag import lint, models from gcpdiag.queries import gke from gcpdiag.queries.network import VpcFirewallRule FIREWALL_RULE_NAME_PATTERN = re.compile(r'k8s-fw-l7-.*') def _get_rule_allowed_ports(rule: VpcFirewallRule): """Return list of tuples defined in the rule For example: [ (IPv4Network('130.211.0.0/22'), '30000') (IPv4Network('35.191.0.0/16'), '30000') ] """ result = [] for a in rule.allowed: for port in a.get('ports', []): # in the rule definition we might have one port or port range # in the 2nd case we will use first value of the range to test connectivity # finally we need to combine ports with source ranges for source in rule.source_ranges: result.append((source, port.split('-')[0])) if '-' in port: result.append((source, port.split('-')[1])) return result def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): for np in c.nodepools: tags = np.node_tags if c.is_autopilot: # use default tags for autopilot clusters tags = [f'gke-{c.name}-{c.cluster_hash}-node'] rules = c.network.firewall.get_vpc_ingress_rules( name_pattern=FIREWALL_RULE_NAME_PATTERN, target_tags=tags) if not rules: report.add_skipped(np, 'no ingress detected') break failed = False for r in rules: for src_range, port in _get_rule_allowed_ports(r): result = c.network.firewall.check_connectivity_ingress( src_ip=src_range, ip_protocol='tcp', port=int(port), target_service_account=np.service_account, target_tags=np.node_tags) if result.action == 'deny': failed = True report.add_failed( np, f'connections from {src_range} to port {port} blocked by {result.matched_by_str}' ) break if not failed: report.add_ok(np) ================================================ FILE: gcpdiag/lint/gke/err_2023_001_containerfilesystem_quota.py ================================================ # Copyright 2023 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. """Container File System API quota not exceeded Verify that Image Streaming has not exceeded the Container File System API quota. That might cause a CrashLoopBackOff error on your pods. See https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming#quota_exceeded """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'Quota exceeded for quota metric' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_node', log_name='log_id("gcfsd")', filter_str=f'jsonPayload.MESSAGE:"{MATCH_STR}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return has_image_streaming = False # skip entire rule is gcfs is disabled in all clusters for _, c in sorted(clusters.items()): # check if any of the clusters has image streaming has_image_streaming = has_image_streaming or c.has_image_streaming_enabled() if not has_image_streaming: report.add_skipped(None, 'image streaming disabled') return # Search the logs. def filter_f(log_entry): try: return MATCH_STR in log_entry['jsonPayload']['MESSAGE'] except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_nodes( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed( c, 'Container File System API quota exceeded detected. Nodes:\n. ' + '\n. '.join(bad_nodes_by_cluster[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_002_private_routes_based.py ================================================ # 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. """GKE private clusters are VPC-native. Private cluster is a type of VPC-native cluster and must not be Routes-based. VPC-native clusters use alias IP address ranges on GKE nodes and are required for private GKE clusters and for creating clusters on Shared VPCs, as well as many other features. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if c.is_private and not c.is_vpc_native: report.add_failed(c, ' is private and not VPC-native') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_003_containerd_bad_config_file.py ================================================ # 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. """containerd config.toml is valid `containerd` container runtime is a crucial component of a GKE cluster that runs on all nodes. If its configuration file was customized and became invalid, `containerd` can't be started and its node will stay in `NotReady` state. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MAX_NODES_TO_REPORT = 10 MATCH_STR = 'containerd: failed to load TOML' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_node', log_name='log_id("container-runtime")', filter_str=f'jsonPayload.MESSAGE:"{MATCH_STR}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if Cloud Logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: return MATCH_STR in log_entry['jsonPayload']['MESSAGE'] except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_nodes( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: # Report only MAX_NODES_TO_REPORT nodes to limit the output for big clusters report.add_failed( c, 'Invalid config.toml configuration for containerd is detected. Nodes:\n. ' + '\n. '.join(list(bad_nodes_by_cluster[c])[:MAX_NODES_TO_REPORT]) + ('\n. + ' + str(len(bad_nodes_by_cluster[c]) - MAX_NODES_TO_REPORT) + ' more node(s)') * (len(bad_nodes_by_cluster[c]) > MAX_NODES_TO_REPORT)) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_004_ingress_config.py ================================================ # Copyright 2023 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. """GKE ingresses are well configured. Verify that the Google Kubernetes Engine ingresses are well configured. This rule will run a command line tool check-gke-ingress to inspect the ingresses. """ import json import logging from gcpdiag import lint, models from gcpdiag.queries import gke, kubectl executor_dict = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for _, c in sorted(clusters.items()): executor = kubectl.get_kubectl_executor(c) if executor is None: continue executor_dict[c] = executor def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): if c not in executor_dict: report.add_skipped(c, 'failed to access k8s cluster') continue try: stdout, stderr = kubectl.check_gke_ingress(executor_dict[c]) except FileNotFoundError as err: logging.warning('Can not inspect Kubernetes resources: %s: %s', type(err).__name__, err) report.add_skipped(c, 'failed to access k8s cluster') continue if stderr: report.add_skipped(c, 'failed to run kubectl check-gke-ingress: ' + stderr) continue result = json.loads(stdout) failed = False message = '' for resource in result['resources']: for check in resource['checks']: if check['result'] == 'FAILED': failed = True message += kubectl.error_message(check['name'], resource['kind'], resource['namespace'], resource['name'], check['message']) if not failed: report.add_ok(c) else: report.add_failed(c, message[:-1]) ================================================ FILE: gcpdiag/lint/gke/err_2023_005_gke_cni_issue.py ================================================ # Copyright 2023 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. """Workloads not reporting misconfigured CNI plugins CNI plugins assist underlying Container Runtime Interface during setup and tear down of pod networks.Kubelet logs during creation and deletion of pods may indicate issue with CNI plugin if pods are failing. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'CreatePodSandbox for pod failed' MATCH_STR_2 = 'failed to setup network for sandbox' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_node', log_name='log_id("kubelet")', filter_str=f'jsonPayload.MESSAGE:"{MATCH_STR_1}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if Cloud Logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['jsonPayload']['MESSAGE']: if MATCH_STR_2 in log_entry['jsonPayload']['MESSAGE']: return True except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_nodes( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_006_gw_controller_annotation_error.py ================================================ # Copyright 2023 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. """GKE Gateway controller reporting misconfigured annotations in Gateway resource Gateway controller creates loadbalancing resources based on annotations specified in gateway resources. It expects the user to use correct set of supported annotations name and values. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'Error GWCER101: Annotation' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=f'jsonPayload.message:"{MATCH_STR}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if Cloud Logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_007_gw_controller_http_route_misconfig.py ================================================ # Copyright 2023 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. """GKE Gateway controller reporting invalid HTTPRoute for Gateway Gateway controller creates urls maps based on HTTPRoute resources. If the HTTP route has invalid reference to gateway or invalid spec, controller will not be able create url maps. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'Error GWCER106: Gateway' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=f'jsonPayload.message:"{MATCH_STR}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if Cloud Logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_008_crashloopbackoff.py ================================================ # Copyright 2023 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. """ GKE Cluster does not have any pods in Crashloopbackoff state. CrashLoopBackOff indicates that a container is repeatedly crashing after restarting. A container might crash for many reasons, and checking a Pod's logs might aid in troubleshooting the root cause. """ import logging import re from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'CrashLoopBackOff' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_node', log_name='log_id("kubelet")', filter_str=f'jsonPayload.MESSAGE:"{MATCH_STR}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # Search the logs. def filter_f(log_entry): try: return MATCH_STR in log_entry['jsonPayload']['MESSAGE'] except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) for _, c in sorted(clusters.items()): if c in bad_clusters: pod_names = set() for query in logs_by_project.values(): for log_entry in query.entries: try: log_cluster_name = log_entry['resource']['labels']['cluster_name'] log_cluster_location = log_entry['resource']['labels']['location'] except KeyError: logging.warning( 'Skip: Failed to get cluster name/location from log entry %s', log_entry) continue if (log_cluster_location == c.location and log_cluster_name == c.name): pod_name = re.search(r'pod=\"(.*?\/.*?)-.*?\"', log_entry['jsonPayload']['MESSAGE']) if pod_name: pod_names.add(pod_name.group(1)) report.add_failed(c, reason='Failing pods in namespace/workload: ' + ', '.join(pod_names)) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_009_missing_cpu_req.py ================================================ # Copyright 2023 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. """ Missing request for CPU resources. Error means that HPA is unable to calculate the number of replicas that should be scaled up or down based on the current metrics because there is no request for CPU resources specified in the deployment or pod.The HPA requires at least one metric to be specified to scale the deployment or replica set. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'missing request for cpu' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=f'jsonPayload.message:"{MATCH_STR_1}"', ) def _filter_f(log_entry): try: return MATCH_STR_1 in log_entry['jsonPayload']['message'] except KeyError: return False def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=_filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_010_nodelocal_timeout.py ================================================ # Copyright 2023 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. """ NodeLocal DNSCache timeout errors. On clusters with NodeLocal DNSCache enabled sometimes response to a DNS request was not received from kube-dns in 2 seconds and hence the DNS timeout errors crop up. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = '[ERROR] plugin/errors: 2' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_container', log_name='log_id("stdout")', filter_str=f'textPayload:"{MATCH_STR_1}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['textPayload']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_011_wi_pod_ip_not_found.py ================================================ # Copyright 2023 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. """GKE Metadata Server isn't reporting errors for pod IP not found. The gke-metadata-server DaemonSet uses pod IP addresses to match client requests to Kubernetes Service Accounts. Pod IP not found errors may indicate a misconfiguration or a workload that is not compatible with GKE Workload Identity. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import crm, gce, gke, logs GKE_METADATA_SERVER_CONTAINER_NAME = 'gke-metadata-server' MATCH_STR = 'Unable to find pod: generic::not_found: retry budget exhausted' MATCH_STR_END = 'not recorded in the snapshot' # https://cloud.google.com/container-optimized-os/docs/how-to/logging GCE_METADATA_COS_LOGGING_ENABLED = 'google-logging-enabled' GCE_METADATA_COS_FLUENT_BIT = 'google-logging-use-fluentbit' COS_LEGACY_AGENT_WARNING = """Project metadata contains google-logging-enabled=true but not google-logging-use-fluentbit=true. COS VMs before Milestone 109 will use the deprecated legacy logging agent, which is not compatible with GKE Workload Identity. See https://cloud.google.com/container-optimized-os/docs/how-to/logging""" # k8s_container metadata_server_errors = {} def prepare_rule(context: models.Context): metadata_server_errors[context.project_id] = logs.query( project_id=context.project_id, resource_type='k8s_container', log_name='log_id("stderr")', filter_str='severity=ERROR AND '+\ f'resource.labels.container_name="{GKE_METADATA_SERVER_CONTAINER_NAME}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # Check if GCP Project metadata is configured for legacy agent or fluent-bit project_metadata = gce.get_project_metadata(context.project_id) if project_metadata.get(GCE_METADATA_COS_LOGGING_ENABLED) == 'true' and \ not project_metadata.get(GCE_METADATA_COS_FLUENT_BIT) == 'true': report.add_failed(crm.get_project(context.project_id), COS_LEGACY_AGENT_WARNING) # Search the logs. def filter_f(log_entry): try: if log_entry['jsonPayload']['message'].endswith( MATCH_STR_END) and MATCH_STR in log_entry['jsonPayload']['message']: return True except KeyError: return False clusters_with_errors = util.gke_logs_find_bad_clusters( context=context, logs_by_project=metadata_server_errors, filter_f=filter_f) for _, c in sorted(clusters.items()): if not c.has_workload_identity_enabled(): report.add_skipped(c, 'GKE Workload Identity is disabled') elif c in clusters_with_errors: report.add_failed(c, logs.format_log_entry(clusters_with_errors[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2023_012_missing_mem_request.py ================================================ # Copyright 2023 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. """ Missing request for memory resources. Error means that HPA is unable to calculate the number of replicas that should be scaled up or down based on the current metrics because there is no request for memory resources specified in the deployment or pod. The HPA requires at least one metric to be specified to scale the deployment or replica set. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'missing request for memory' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=f'jsonPayload.message:"{MATCH_STR_1}"', ) def _filter_f(log_entry): try: return MATCH_STR_1 in log_entry['jsonPayload']['message'] except KeyError: return False def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=_filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2024_001_psa_violoations.py ================================================ # Copyright 2024 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. """Checking for no Pod Security Admission violations in the project. Verify that there are no PSA violations in any namespace of any cluster in the project. If there are any violations inspect the logs to find what caused the violation and if required adjust the policy or pod manifest. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs _MATCH_STR = 'Forbidden' _LOG_RESOURCE_TYPE = 'k8s_cluster' _LOG_NAME = 'log_id("cloudaudit.googleapis.com/activity")' _LOG_FILTER_STR = ('severity=DEFAULT AND ' + 'protoPayload.response.message:"violates PodSecurity"') logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type=_LOG_RESOURCE_TYPE, log_name=_LOG_NAME, filter_str=_LOG_FILTER_STR, ) def _filter_f(log_entry): try: return _MATCH_STR in log_entry['protoPayload']['response']['reason'] except KeyError: return False def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return clusters = gke.get_clusters(context) # Check: if no projects then skip if not clusters: report.add_skipped(None, 'no clusters found') return # Check for Forbidden logs bad_pods_by_cluster = util.gke_logs_find_bad_pods( context=context, logs_by_project=logs_by_project, filter_f=_filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_pods_by_cluster: report.add_failed( c, 'PodSecurity Admission policy violation identified for pods:\n. ' + '\n. '.join(bad_pods_by_cluster[c]), ) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2024_002_webhook_failure_no_endpoint.py ================================================ # Copyright 2024 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. """GKE Webhook failures can seriously impact GKE Cluster. Impact typically depends on the webhook failure policy and what type of GKE API are handled by the webhook. In some cases, a failing customer created webhook can render a cluster unusable until corrected. Inability to create Pod (and similar)can lead to system pod not getting scheduled / new pod not reaching a healthy state. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs _MATCH_STR_1 = 'failed calling webhook' _MATCH_STR_2 = 'no endpoints available for service' # gce_instance, cloudaudit.googleapis.com/activity gke_logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: # k8s_cluster, api server logs gke_logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=f'protoPayload.response.message:"{_MATCH_STR_1}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # skip entire rule if no logs found if not gke_logs_by_project: report.add_skipped(None, 'no logs found') return # Process gke_logs_by_project and search for failed webhook calls def filter_f(log_entry): try: if _MATCH_STR_1 in log_entry['protoPayload']['response']['message']: return bool( _MATCH_STR_2 in log_entry['protoPayload']['response']['message']) except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=gke_logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/err_2024_003_default_node_serviceaccount_perm.py ================================================ # Copyright 2024 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. """GKE nodes service account permissions fit container.defaultNodeServiceAccount role The service account used by GKE nodes should possess the permissions of the container.defaultNodeServiceAccount role, otherwise ingestion of logs or metrics won't work. """ from gcpdiag import lint, models from gcpdiag.queries import gke, iam ROLE = 'roles/container.defaultNodeServiceAccount' def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. project_ids = {c.project_id for c in gke.get_clusters(context).values()} for pid in project_ids: iam.get_project_policy(context.copy_with(project_id=pid)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Find all clusters with logging and metrics enabled. clusters = gke.get_clusters(context) iam_policy = iam.get_project_policy(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if not c.has_logging_enabled(): report.add_skipped(c, 'logging disabled') elif not c.has_monitoring_enabled(): report.add_skipped(c, 'monitoring disabled') else: # Verify service-account permissions for every nodepool. for np in c.nodepools: sa = np.service_account if not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE): report.add_failed(np, f'service account: {sa}\nmissing role: {ROLE}') else: report.add_ok(np) ================================================ FILE: gcpdiag/lint/gke/err_2025_001_serial_port_logging.py ================================================ # Copyright 2025 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. # Lint as: python3 """ GKE cluster complies with the serial port logging organization policy. When the constraints/compute.disableSerialPortLogging policy is enabled, GKE clusters must be created with logging disabled (serial-port-logging-enable: 'false'), otherwise the creation of new nodes in Nodepool will fail. """ from typing import List from gcpdiag import lint, models from gcpdiag.queries import gke, orgpolicy def get_non_compliant_pools(cluster: gke.Cluster) -> List[str]: """ Checks if org serial port logging policy is enforced and if cluster complies with it. Args: cluster: The GKE cluster to check. Returns: List[str]: List of non-compliant nodepool names """ # Get the policy constraint status constraint = orgpolicy.get_effective_org_policy( cluster.project_id, 'constraints/compute.disableSerialPortLogging') # If policy is not enforced, return None (no compliance check needed) and empty list if not isinstance( constraint, orgpolicy.BooleanPolicyConstraint) or not constraint.is_enforced(): return [] # Get cluster node pools return [ nodepool.name for nodepool in cluster.nodepools if nodepool.config.has_serial_port_logging_enabled ] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'No clusters found') return for cluster in clusters.values(): # Skip Autopilot clusters as they are managed by Google if cluster.is_autopilot: report.add_skipped( cluster, 'Skipping Autopilot cluster - serial port logging managed by Google') continue # find list of non compliant node pools. non_compliant_pools = get_non_compliant_pools(cluster) if not non_compliant_pools: report.add_ok(cluster) else: report.add_failed( cluster, 'The following nodepools do not comply with the serial port logging org policy:\n. ' + '\n. '.join(non_compliant_pools), ) ================================================ FILE: gcpdiag/lint/gke/gke_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import gke, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke project_id = 'gcpdiag-gke1-aaaa' ================================================ FILE: gcpdiag/lint/gke/sec_2021_001_np_uses_default_sa.py ================================================ # Copyright 2021 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. """GKE nodes don't use the GCE default service account. The GCE default service account has more permissions than are required to run your Kubernetes Engine cluster. You should either use GKE Workload Identity or create and use a minimally privileged service account. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Find all clusters. clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): # Verify service-account for every standard nodepool. for np in c.nodepools: if np.has_workload_identity_enabled(): report.add_skipped(np, 'workload identity enabled') elif np.has_default_service_account(): report.add_failed(np, 'node pool uses the GCE default service account') else: report.add_ok(np) ================================================ FILE: gcpdiag/lint/gke/sec_2023_001_worload_id.py ================================================ # Copyright 2023 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. """GKE Workload Identity is enabled Workload Identity is the recommended way for your workloads running on Google Kubernetes Engine (GKE) to access Google Cloud services in a secure and manageable way. It lets you assign distinct, fine-grained identities and authorization for each application in your cluster. The sensitive node's metadata is also protected by Workload Identity. """ from gcpdiag import lint, models from gcpdiag.queries import gke clusters_by_project = {} def prepare_rule(context: models.Context): clusters_by_project[context.project_id] = gke.get_clusters(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = clusters_by_project[context.project_id] if not clusters: report.add_skipped(None, 'no clusters found') for _, c in sorted(clusters.items()): if c.is_autopilot or c.has_workload_identity_enabled(): report.add_ok(c) else: report.add_failed(c) ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2021_001.txt ================================================ * gke/BP/2021_001: GKE logging and monitoring enabled. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] workload logs are disabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] logging and monitoring are disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] Disabling either one of logging (SYSTEM, WORKLOADS) and monitoring (aka "GKE Cloud Operations") impacts the ability to effectively and efficiently troubleshoot cluster issues. https://gcpdiag.dev/rules/gke/BP/2021_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2022_001.txt ================================================ * gke/BP/2022_001: GKE clusters are regional. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] is not regional - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [FAIL] is not regional - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] is not regional The availability of regional clusters (both control plane and nodes) is higher for regional clusters as they are replicated across zones in the region. It is recommended to use regional clusters for the production workload. https://gcpdiag.dev/rules/gke/BP/2022_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2022_002.txt ================================================ * gke/BP/2022_002: GKE clusters are using unique subnets. - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] Subnet "gcpdiag-gke1-aaaa/default" is used by "gcpdiag-gke1-aaaa/europe-west4-a/gke4" cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL] Subnet "gcpdiag-gke1-aaaa/default" is used by "gcpdiag-gke1-aaaa/europe-west4-a/gke4" cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [FAIL] Subnet "gcpdiag-gke1-aaaa/default" is used by "gcpdiag-gke1-aaaa/europe-west4-a/gke4" cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] Subnet "gcpdiag-gke1-aaaa/default" is used by "gcpdiag-gke1-aaaa/europe-west4-a/gke4" cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] Subnet "gcpdiag-gke1-aaaa/default" is used by "gcpdiag-gke1-aaaa/europe-west4-a/gke4" cluster Verify that the Google Kubernetes Engine clusters are not sharing subnets. It is recommended to use unique subnet for each cluster. Keep in mind that subnets may be also reused in other projects. https://gcpdiag.dev/rules/gke/BP/2022_002 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2022_003.txt ================================================ * gke/BP/2022_003: GKE cluster is not near to end of life - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] GKE version 1.24 scheduled end of life: already reached EOL - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] GKE version 1.25 scheduled end of life: 2024-02-06 (estimation) - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] release channel: REGULAR The GKE clusters should be updated regularly. It is recommended to keep your GKE cluster version up to date and avoid reaching end of life. Rule will start failing if scheduled end of life is in less than 30 days. https://gcpdiag.dev/rules/gke/BP/2022_003 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2022_004.txt ================================================ * gke/BP/2022_004: Enable http load balancing on clusters to use GKE ingress and container-native load balancing. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] If this is disabled GKE ingresses will be stuck in the creating state. Similarly if this is disabled after GKE ingresses have been created but before they are deleted the GKE ingresses will be stuck in the deleting state. https://gcpdiag.dev/rules/gke/BP/2022_004 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2023_001.txt ================================================ * gke/BP/2023_001: GKE network policy minimum requirements - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] Dataplane V2 is enabled in the cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] Dataplane V2 is enabled in the cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [SKIP] network policy enforcement is disabled in the cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] network policy enforcement is disabled in the cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] network policy enforcement is disabled in the cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] network policy enforcement is disabled in the cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] network policy enforcement is disabled in the cluster ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2023_002.txt ================================================ * gke/BP/2023_002: Stateful workloads not run on preemptible node (Error: 'bool' object is not callable) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2023_004.txt ================================================ * gke/BP/2023_004: GKE clusters are VPC-native. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] is not VPC-native - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] is not VPC-native - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] is not VPC-native It's recommended to use VPC-native clusters. VPC-native clusters use alias IP address ranges on GKE nodes and are required for private GKE clusters and for creating clusters on Shared VPCs, as well as many other features. VPC-native clusters scale more easily than routes-based clusters without consuming Google Cloud routes and so are less susceptible to hitting routing limits. https://gcpdiag.dev/rules/gke/BP/2023_004 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2023_005.txt ================================================ * gke/BP/2023_005: Enable gateway resources through Gateway API. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_2025_001.txt ================================================ * gke/BP/2025_001: GKE clusters should have NodeLocal DNSCache enabled. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] NodeLocal DNSCache is default in Autopilot - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] NodeLocal DNSCache is default in Autopilot - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] NodeLocal DNSCache is not enabled. Enable it to improve DNS performance and reliability. You can enable it with the command: gcloud container clusters update gke2 --location=europe-west4 --update-addons=NodeLocalDNS=ENABLED See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] NodeLocal DNSCache is not enabled. Enable it to improve DNS performance and reliability. You can enable it with the command: gcloud container clusters update gke3 --location=europe-west4 --update-addons=NodeLocalDNS=ENABLED See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [FAIL] NodeLocal DNSCache is not enabled. Enable it to improve DNS performance and reliability. You can enable it with the command: gcloud container clusters update gke4 --location=europe-west4-a --update-addons=NodeLocalDNS=ENABLED See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] NodeLocal DNSCache is not enabled. Enable it to improve DNS performance and reliability. You can enable it with the command: gcloud container clusters update gke6 --location=europe-west4-a --update-addons=NodeLocalDNS=ENABLED See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache NodeLocal DNSCache improves DNS reliability and performance within the cluster by running a local DNS cache on each node. This reduces latency and load on kube-dns. It is a recommended best practice for most Standard clusters. Autopilot clusters have this enabled by default. https://gcpdiag.dev/rules/gke/BP/2025_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_EXT_2022_001.txt ================================================ * gke/BP_EXT/2022_001: Google Groups for RBAC enabled. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL] does not have Google Groups for RBAC enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [FAIL] does not have Google Groups for RBAC enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] does not have Google Groups for RBAC enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] does not have Google Groups for RBAC enabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [FAIL] does not have Google Groups for RBAC enabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] does not have Google Groups for RBAC enabled Enable Google Groups for RBAC so cluster administrators do not need to manage permissions manually for each user on the cluster and so Workspace administrators can manage user accounts, such as revoking access when someone leaves your organization. https://gcpdiag.dev/rules/gke/BP_EXT/2022_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_EXT_2023_001.txt ================================================ * gke/BP_EXT/2023_001: GKE maintenance windows are defined - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL] does not configure a maintenance window - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [FAIL] does not configure a maintenance window - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] does not configure a maintenance window - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] does not configure a maintenance window - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] does not configure a maintenance window - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [FAIL] does not configure a maintenance window - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] Maintenance windows give you fine-grained control over when automatic maintenance can occur on GKE clusters. They allow administrators to control the timing and impact of these updates, ensuring minimal disruption to running workloads. https://gcpdiag.dev/rules/gke/BP_EXT/2023_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/BP_EXT_2023_002.txt ================================================ * gke/BP_EXT/2023_002: GKE clusters are private clusters. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL] is a public cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] is a public cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] is a public cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] is a public cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] is a public cluster A private cluster is a type of VPC-native cluster that only depends on internal IP addresses. Nodes, Pods, and Services in a private cluster require unique subnet IP address ranges. Private clusters are used when the applications and services are needed to be isolated from the outside connections completely. This ensures the workloads are private and not exposed to untrusted sources. https://gcpdiag.dev/rules/gke/BP_EXT/2023_002 ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_001.txt ================================================ * gke/ERR/2021_001: GKE nodes service account permissions for logging. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL] service account: gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com missing role: roles/logging.logWriter - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] logging disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] The service account used by GKE nodes should have the logging.logWriter role, otherwise ingestion of logs won't work. https://gcpdiag.dev/rules/gke/ERR/2021_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_002.txt ================================================ * gke/ERR/2021_002: GKE nodes service account permissions for monitoring. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL] service account: gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com missing role: roles/monitoring.metricWriter - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] monitoring disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] The service account used by GKE nodes should have the monitoring.metricWriter role, otherwise ingestion of metrics won't work. https://gcpdiag.dev/rules/gke/ERR/2021_002 ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_003.txt ================================================ * gke/ERR/2021_003: App-layer secrets encryption is activated and Cloud KMS key is enabled. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] App-layer secrets encryption isn't enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] App-layer secrets encryption isn't enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [SKIP] App-layer secrets encryption isn't enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] App-layer secrets encryption isn't enabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] App-layer secrets encryption isn't enabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] App-layer secrets encryption isn't enabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] App-layer secrets encryption isn't enabled ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_004.txt ================================================ * gke/ERR/2021_004: GKE nodes aren't reporting connection issues to apiserver. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_005.txt ================================================ * gke/ERR/2021_005: GKE nodes aren't reporting connection issues to storage.google.com. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_006.txt ================================================ * gke/ERR/2021_006: GKE Autoscaler isn't reporting scaleup failures. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_007.txt ================================================ * gke/ERR/2021_007: GKE service account permissions. - projects/gcpdiag-gke1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_008.txt ================================================ * gke/ERR/2021_008: Google APIs service agent has Editor role. - projects/gcpdiag-gke1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_009.txt ================================================ * gke/ERR/2021_009: Version skew between cluster and node pool. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_010.txt ================================================ * gke/ERR/2021_010: Check internal peering forwarding limits which affect GKE. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_011.txt ================================================ * gke/ERR/2021_011: ip-masq-agent not reporting errors (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_012.txt ================================================ * gke/ERR/2021_012: Node pool service account exists and not is disabled. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_013.txt ================================================ * gke/ERR/2021_013: GKE cluster firewall rules are configured. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_014.txt ================================================ * gke/ERR/2021_014: GKE masters of private clusters can reach the nodes. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] no nodepools - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] no nodepools - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [SKIP] public cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] public cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] public cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] public cluster ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2021_015.txt ================================================ * gke/ERR/2021_015: GKE connectivity: node to pod communication. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] no nodepools - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] no nodepools - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2022_001.txt ================================================ * gke/ERR/2022_001: GKE connectivity: pod to pod communication. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] no nodepools - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] no nodepools - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] connections from 10.4.0.0/14 to tcp:53 blocked by None (node pool: default-pool) - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] connections from 10.1.0.0/19 to tcp:53 blocked by None (node pool: default-pool) - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] connections from 10.12.0.0/14 to tcp:53 blocked by None (node pool: default-pool) Traffic between all pods on a cluster is required by the Kubernetes networking model. Following protocols must be allowed: TCP, UDP, SCTP, ICMP, ESP, AH. https://gcpdiag.dev/rules/gke/ERR/2022_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2022_002.txt ================================================ * gke/ERR/2022_002: GKE nodes of private clusters can access Google APIs and services. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2022_003.txt ================================================ * gke/ERR/2022_003: GKE connectivity: load balancer to node communication (ingress). - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [FAIL] connections from 130.211.0.0/22 to port 30000 blocked by None - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [FAIL] connections from 130.211.0.0/22 to port 8080 blocked by None - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [FAIL] connections from 130.211.0.0/22 to port 30000 blocked by None - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [FAIL] connections from 130.211.0.0/22 to port 8080 blocked by None - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL] connections from 130.211.0.0/22 to port 30000 blocked by None - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL] connections from 130.211.0.0/22 to port 8080 blocked by None - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [SKIP] no ingress detected - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [FAIL] connections from 35.191.0.0/16 to port 8080 blocked by vpc firewall rule: gke-gke4-ingress-test-deny - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [FAIL] connections from 130.211.0.0/22 to port 30000 blocked by None - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [FAIL] connections from 130.211.0.0/22 to port 8080 blocked by None In order for the Ingress service to work correctly, the network connection from the load balancer must be allowed. https://gcpdiag.dev/rules/gke/ERR/2022_003 ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_001.txt ================================================ * gke/ERR/2023_001: Container File System API quota not exceeded (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_002.txt ================================================ * gke/ERR/2023_002: GKE private clusters are VPC-native. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_003.txt ================================================ * gke/ERR/2023_003: containerd config.toml is valid (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_004.txt ================================================ * gke/ERR/2023_004: GKE ingresses are well configured. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL] Check rule BackendConfigExistenceCheck on Ingress default/ingress-1 failed: BackendConfig default/my-backendconfig in service default/svc-1 does not exist Check rule ServiceExistenceCheck on Ingress default/ingress-2 failed: Service default/svc-2 does not exist - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] failed to access k8s cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [SKIP] failed to access k8s cluster - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] failed to access k8s cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] failed to access k8s cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] failed to access k8s cluster - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] failed to access k8s cluster Verify that the Google Kubernetes Engine ingresses are well configured. This rule will run a command line tool check-gke-ingress to inspect the ingresses. https://gcpdiag.dev/rules/gke/ERR/2023_004 ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_005.txt ================================================ * gke/ERR/2023_005: Workloads not reporting misconfigured CNI plugins (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_006.txt ================================================ * gke/ERR/2023_006: GKE Gateway controller reporting misconfigured annotations in Gateway resource (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_007.txt ================================================ * gke/ERR/2023_007: GKE Gateway controller reporting invalid HTTPRoute for Gateway (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_008.txt ================================================ * gke/ERR/2023_008: GKE Cluster does not have any pods in Crashloopbackoff state. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_009.txt ================================================ * gke/ERR/2023_009: Missing request for CPU resources. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_010.txt ================================================ * gke/ERR/2023_010: NodeLocal DNSCache timeout errors. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_011.txt ================================================ * gke/ERR/2023_011: GKE Metadata Server isn't reporting errors for pod IP not found. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] GKE Workload Identity is disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] GKE Workload Identity is disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] GKE Workload Identity is disabled ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2023_012.txt ================================================ * gke/ERR/2023_012: Missing request for memory resources. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2024_001.txt ================================================ * gke/ERR/2024_001: Checking for no Pod Security Admission violations in the project. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2024_002.txt ================================================ * gke/ERR/2024_002: GKE Webhook failures can seriously impact GKE Cluster. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2024_003.txt ================================================ * gke/ERR/2024_003: GKE nodes service account permissions fit container.defaultNodeServiceAccount role - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL] service account: gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com missing role: roles/container.defaultNodeServiceAccount - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] logging disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] The service account used by GKE nodes should possess the permissions of the container.defaultNodeServiceAccount role, otherwise ingestion of logs or metrics won't work. https://gcpdiag.dev/rules/gke/ERR/2024_003 ================================================ FILE: gcpdiag/lint/gke/snapshots/ERR_2025_001.txt ================================================ * gke/ERR/2025_001: GKE cluster complies with the serial port logging organization policy. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] Skipping Autopilot cluster - serial port logging managed by Google - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] Skipping Autopilot cluster - serial port logging managed by Google - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/SEC_2021_001.txt ================================================ * gke/SEC/2021_001: GKE nodes don't use the GCE default service account. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [SKIP] workload identity enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [SKIP] workload identity enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [FAIL] node pool uses the GCE default service account - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [SKIP] workload identity enabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [FAIL] node pool uses the GCE default service account The GCE default service account has more permissions than are required to run your Kubernetes Engine cluster. You should either use GKE Workload Identity or create and use a minimally privileged service account. https://gcpdiag.dev/rules/gke/SEC/2021_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/SEC_2023_001.txt ================================================ * gke/SEC/2023_001: GKE Workload Identity is enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] Workload Identity is the recommended way for your workloads running on Google Kubernetes Engine (GKE) to access Google Cloud services in a secure and manageable way. It lets you assign distinct, fine-grained identities and authorization for each application in your cluster. The sensitive node's metadata is also protected by Workload Identity. https://gcpdiag.dev/rules/gke/SEC/2023_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_001.txt ================================================ * gke/WARN/2021_001: GKE master version available for new clusters. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] 1.24.10-gke.2300 - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] 1.25.7-gke.1000 - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] release channel: REGULAR ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_002.txt ================================================ * gke/WARN/2021_002: GKE nodes version available for new clusters. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] 1.24.10-gke.2300 - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] 1.24.10-gke.2300 - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ] 1.25.7-gke.1000 - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] release channel: REGULAR - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] release channel: REGULAR ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_003.txt ================================================ * gke/WARN/2021_003: GKE pod CIDR range utilization close to 100%. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] 10.1.0.0/19(94% IPs used): all node pools - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [FAIL] 192.168.1.0/24(100% IPs used): default-pool - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] The maximum amount of nodes in a GKE cluster is limited based on its pod CIDR range. This test checks if any of the pod CIDRs in use in the cluster has 80% or more utilization. Note, this is limited to a single cluster although the pod CIDR can be shared across clusters. Enable the network management API to see GKE IP address utilization insights in Network Analyzer. https://gcpdiag.dev/rules/gke/WARN/2021_003 ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_004.txt ================================================ * gke/WARN/2021_004: GKE system workloads are running stable. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_005.txt ================================================ * gke/WARN/2021_005: GKE nodes have good disk performance. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] no data - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] no data - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [SKIP] no data - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] no data - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] no data - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] no data - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] no data ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_006.txt ================================================ * gke/WARN/2021_006: GKE nodes aren't reporting conntrack issues. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_007.txt ================================================ * gke/WARN/2021_007: GKE nodes have enough free space on the boot disk. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] no data - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] no data - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [SKIP] no data - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] no data - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] no data - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] no data - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] no data ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_008.txt ================================================ * gke/WARN/2021_008: Istio/ASM version not deprecated nor close to deprecation in GKE - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] GKE 1.24.10-gke.2300 - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] GKE 1.24.10-gke.2300 - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] GKE 1.24.10-gke.2300 - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] GKE 1.25.7-gke.1000 - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] GKE 1.25.7-gke.1000 - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] GKE 1.24.10-gke.2300 - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] GKE 1.25.7-gke.1000 ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2021_009.txt ================================================ * gke/WARN/2021_009: GKE nodes use a containerd image. (no nodepools found) [SKIP] (no nodepools found) [SKIP] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2022_001.txt ================================================ * gke/WARN/2022_001: GKE clusters with workload identity are regional. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [FAIL] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] Workload Identity is highly dependent of the availability of the cluster control plane during token fetches. It is recommended to use regional clusters for the production workload with Workload Identity enabled. https://gcpdiag.dev/rules/gke/WARN/2022_001 ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2022_002.txt ================================================ * gke/WARN/2022_002: GKE metadata concealment is not in use - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2022_003.txt ================================================ * gke/WARN/2022_003: GKE service account permissions to manage project VPC firewall rules. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2022_004.txt ================================================ * gke/WARN/2022_004: Cloud Logging API enabled when GKE logging is enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [FAIL] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [FAIL] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [FAIL] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] GKE logging is disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [FAIL] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] If Cloud Logging API is disabled, while GKE logging is enabled the Workload and Node logs won't be ingested, and thus, won't be visible in Logs Explorer. https://gcpdiag.dev/rules/gke/WARN/2022_004 ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2022_005.txt ================================================ * gke/WARN/2022_005: NVIDIA GPU device drivers are installed on GKE nodes with GPU (no nodepools found) [SKIP] (no nodepools found) [SKIP] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [SKIP] no nodes with GPU found - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [SKIP] no nodes with GPU found - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [SKIP] no nodes with GPU found - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] monitoring disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [SKIP] no nodes with GPU found - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [FAIL] The DaemonSet of nvidia-driver-installer is not found in the GKE cluster. After adding GPU nodes to the GKE cluster, the NVIDIA's device drivers should be installed in the nodes. Google provides a DaemonSet that will install the drivers. https://gcpdiag.dev/rules/gke/WARN/2022_005 ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2022_006.txt ================================================ * gke/WARN/2022_006: GKE NAP nodes use a containerd image. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] Node Type: COS_CONTAINERD - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] Node Type: COS_CONTAINERD - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [SKIP] Node Auto Provisioning Disabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [SKIP] Node Auto Provisioning Disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] Node Auto Provisioning Disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] Node Auto Provisioning Disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [SKIP] Node Auto Provisioning Disabled ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2022_007.txt ================================================ * gke/WARN/2022_007: GKE nodes have Storage API access scope to retrieve build artifacts - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2022_008.txt ================================================ * gke/WARN/2022_008: GKE connectivity: possible dns timeout in some gke versions. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] gke version >= 1.23 unaffected - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] gke version >= 1.23 unaffected - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] intra node visibility disabled -> unaffected - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] intra node visibility disabled -> unaffected - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [ OK ] intra node visibility disabled -> unaffected - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] intra node visibility disabled -> unaffected - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] intra node visibility disabled -> unaffected ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2023_001.txt ================================================ * gke/WARN/2023_001: Container File System has the required scopes for Image Streaming (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2023_002.txt ================================================ * gke/WARN/2023_002: GKE workload timeout to Compute Engine metadata server. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2023_003.txt ================================================ * gke/WARN/2023_003: Cloud Monitoring API enabled when GKE monitoring is enabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1 [SKIP] GKE monitoring is disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6 [ OK ] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2023_004.txt ================================================ * gke/WARN/2023_004: A Node Pool doesn't have too low `maxPodsPerNode` number - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [FAIL] the nodepool has too low `maxPodsPerNode` number: 8 - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ] - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ] Modern GKE clusters could run multiple system DaemonSets, and enabling a GKE feature could add another DaemonSet or two. 7+ DaemonSets is the norm for an average GKE cluster. Low `maxPodsPerNode` number could prevent normal workload scheduling as all the available slots could be occupied by system or custom DaemonSet pods. `maxPodsPerNode` >= 16 should be a safer option. https://gcpdiag.dev/rules/gke/WARN/2023_004 ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2024_001.txt ================================================ * gke/WARN/2024_001: GKE Node Auto Provisioning scales nodes to match workload demands. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2024_002.txt ================================================ * gke/WARN/2024_002: Number of Kubernetes service accounts not above 3000. - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP] API Server metrics are disabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP] API Server metrics are disabled - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2 [SKIP] API Server metrics are disabled - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4 [SKIP] API Server metrics are disabled ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2024_003.txt ================================================ * gke/WARN/2024_003: Ingress creation is successful if service is correctly mapped (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2024_004.txt ================================================ * gke/WARN/2024_004: Ingress creation is successful if backendconfig crd is correctly mapped (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2024_005.txt ================================================ * gke/WARN/2024_005: GKE Ingress successfully routes external traffic to NodePort service (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2024_007.txt ================================================ * gke/WARN/2024_007: GKE dual-stack with IPv6 enabled uses an internal IP address for the Internal LB (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/snapshots/WARN_2025_001.txt ================================================ * gke/WARN/2025_001: GKE external LB services are successfully created without encountering IP allocation failures due to external IPv6 subnet configurations. (logging api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/gke/util.py ================================================ # Copyright 2021 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. # Lint as: python3 """Utilities functions to make writing GKE lint rules easier.""" import collections import logging from typing import Any, Callable, Dict, Set, Tuple from gcpdiag import models from gcpdiag.queries import gce, gke, logs class _CantMapLogEntry(BaseException): pass # We also use context as index just to be sure, in case one day we have # situations where this code is running multiple times with different context # objects. _clusters_by_name: Dict[models.Context, Dict[Tuple[str, str, str], gke.Cluster]] = {} _clusters_by_instance_id: Dict[models.Context, Dict[str, Tuple[gke.Cluster, str]]] = {} def _initialize_clusters_by_name(context: models.Context): if not context in _clusters_by_name: _clusters_by_name[context] = {} clusters = gke.get_clusters(context) for c in clusters.values(): _clusters_by_name[context][(c.project_id, c.location, c.name)] = c def _initialize_clusters_by_instance_id(context: models.Context): # Don't assume that _initialize_clusters_by_name is called first, # so make sure here, even though actually it was already called. _initialize_clusters_by_name(context) if not context in _clusters_by_instance_id: _clusters_by_instance_id[context] = {} for instance_id, instance in gce.get_instances(context).items(): try: c = _clusters_by_name[context][( instance.project_id, instance.get_metadata('cluster-location'), instance.get_metadata('cluster-name'), )] # Also store the instance name because that's not available in the # logs sometimes. _clusters_by_instance_id[context][instance_id] = (c, instance.name) except KeyError: # Filter out non-GKE nodes. continue def _gke_node_of_log_entry(context, log_entry): try: labels = log_entry['resource']['labels'] project_id = labels['project_id'] except KeyError: logging.warning('log entry without project_id label: %s', log_entry) raise _CantMapLogEntry() from KeyError if 'node_name' in labels: # GKE node log try: c = _clusters_by_name[context][(project_id, labels['location'], labels['cluster_name'])] return (c, labels['node_name']) except KeyError as err: # log entry for a node that wasn't selected by context raise _CantMapLogEntry() from err elif 'instance_id' in labels: # GCE instance log # Note that once the instance is deleted, we can't determine anymore to what # cluster a GCE instance belonged. I wish we had GKE node labels in GCE # instance logs of GKE nodes... try: return _clusters_by_instance_id[context][labels['instance_id']] except KeyError as err: raise _CantMapLogEntry from err else: raise _CantMapLogEntry() def _gke_pod_of_log_entry(context, log_entry): """Retrieves a GKE Pod name from a log entry. Args: context: The context object. log_entry: A log entry. Returns: A tuple of GKE Cluster and Pod objects. Raises: _CantMapLogEntry: If the log entry cannot be mapped to a GKE Pod. """ try: labels = log_entry['resource']['labels'] project_id = labels['project_id'] # using entire resource name as it contains namespace as well as pod name pod_name = log_entry['protoPayload']['resourceName'] except KeyError: logging.warning('log entry without project_id label: %s', log_entry) raise _CantMapLogEntry() from KeyError try: c = _clusters_by_name[context][(project_id, labels['location'], labels['cluster_name'])] return (c, pod_name) except KeyError as err: raise _CantMapLogEntry() from err def _gke_cluster_of_log_entry(context, log_entry): try: labels = log_entry['resource']['labels'] project_id = labels['project_id'] except KeyError: logging.warning('log entry without project_id label: %s', log_entry) raise _CantMapLogEntry() from KeyError try: c = _clusters_by_name[context][(project_id, labels['location'], labels['cluster_name'])] return c except KeyError as err: raise _CantMapLogEntry() from err def gke_logs_find_bad_nodes(context: models.Context, logs_by_project: Dict[str, logs.LogsQuery], filter_f: Callable) -> Dict[gke.Cluster, Set[str]]: """Go through logs and find GKE node-level issues. Returns dict with clusters as key and node list of "bad nodes" as value. """ _initialize_clusters_by_name(context) _initialize_clusters_by_instance_id(context) # Process the log entries. bad_nodes_by_cluster = collections.defaultdict(set) for query in logs_by_project.values(): for log_entry in query.entries: # Retrieved logs are not guaranteed to only contain what we defined as # "filter_str", so we need to filter out what isn't ours. if not filter_f(log_entry): continue try: (c, node_name) = _gke_node_of_log_entry(context, log_entry) bad_nodes_by_cluster[c].add(node_name) except _CantMapLogEntry: continue return bad_nodes_by_cluster def gke_logs_find_bad_clusters(context: models.Context, logs_by_project: Dict[str, logs.LogsQuery], filter_f: Callable) -> Dict[gke.Cluster, Any]: """Go through logs and find GKE cluster-level issues. Returns dict with clusters as key and first matched log entry as value. """ _initialize_clusters_by_name(context) # Process the log entries. bad_clusters = {} for query in logs_by_project.values(): for log_entry in query.entries: # Retrieved logs are not guaranteed to only contain what we defined as # "filter_str", so we need to filter out what isn't ours. if not filter_f(log_entry): continue try: c = _gke_cluster_of_log_entry(context, log_entry) if c in bad_clusters: # only store the first log message continue bad_clusters[c] = log_entry except _CantMapLogEntry: continue return bad_clusters def get_cluster_object(cluster_dict, partial_path): """Retrieves a GKE Cluster object from a dictionary based on a partial path. Args: cluster_dict: A dictionary where keys are full GCP resource paths and values are Cluster objects. partial_path: A string representing the partial path to the cluster. Returns: The matching GKE Cluster object, or None if not found. """ for full_path, cluster_obj in cluster_dict.items(): if partial_path in full_path: return cluster_obj return None # Cluster not found def gke_logs_find_bad_pods( context: models.Context, logs_by_project: Dict[str, logs.LogsQuery], filter_f: Callable, ) -> Dict[gke.Cluster, Any]: """Go through logs and find GKE pod-level issues. Args: context: The context object. logs_by_project: A dictionary of logs.LogsQuery objects. filter_f: A function that takes a log entry and returns True if it matches the filter. Returns: A dictionary of GKE Cluster objects to a list of "bad pods". """ _initialize_clusters_by_name(context) # Process the log entries. bad_pods_by_cluster = collections.defaultdict(set) for query in logs_by_project.values(): for log_entry in query.entries: # Retrieved logs may not contain what we defined as # "filter_str", so we need to filter out what isn't ours. if not filter_f(log_entry): continue try: (c, pod_name) = _gke_pod_of_log_entry(context, log_entry) bad_pods_by_cluster[c].add(pod_name) except _CantMapLogEntry: continue return bad_pods_by_cluster ================================================ FILE: gcpdiag/lint/gke/warn_2021_001_cluster_version.py ================================================ # Copyright 2021 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. """GKE master version available for new clusters. The GKE master version should be a version that is available for new clusters. If a version is not available it could mean that it is deprecated, or possibly retired due to issues with it. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): if c.release_channel: report.add_skipped(c, 'release channel: ' + c.release_channel) continue valid_master_versions = gke.get_valid_master_versions( c.project_id, c.location) if c.master_version not in valid_master_versions: report.add_failed(c, 'valid versions: ' + ', '.join(valid_master_versions), c.master_version) else: report.add_ok(c, c.master_version) ================================================ FILE: gcpdiag/lint/gke/warn_2021_002_nodes_version.py ================================================ # Copyright 2021 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. """GKE nodes version available for new clusters. The GKE nodes version should be a version that is available for new clusters. If a version is not available it could mean that it is deprecated, or possibly retired due to issues with it. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): if c.release_channel: report.add_skipped(c, 'release channel: ' + c.release_channel) continue valid_node_versions = gke.get_valid_node_versions(c.project_id, c.location) for np in c.nodepools: if np.version not in valid_node_versions: report.add_failed(np, 'valid versions: ' + ', '.join(valid_node_versions), np.version) else: report.add_ok(np, np.version) ================================================ FILE: gcpdiag/lint/gke/warn_2021_003_pod_cidr_cluster_size.py ================================================ # Copyright 2021 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. # Lint as: python3 """GKE pod CIDR range utilization close to 100%. The maximum amount of nodes in a GKE cluster is limited based on its pod CIDR range. This test checks if any of the pod CIDRs in use in the cluster has 80% or more utilization. Note, this is limited to a single cluster although the pod CIDR can be shared across clusters. Enable the network management API to see GKE IP address utilization insights in Network Analyzer. """ from typing import Dict, List, Tuple from gcpdiag import lint, models from gcpdiag.queries import gke #Test fails if pod cidr usage is above FAIL_THRESHOLD (.8 similar to GKE IP utilization insights) FAIL_THRESHOLD_RATIO = .8 MAX_NODEPOOLS_TO_REPORT = 10 def nodepool_calc(cluster) -> Tuple[dict, dict]: """Calculates the number of used ips per pod cidr range and the number of nodes in each node pool""" cidr_used_ips: Dict[str, int] = {} nodepools_by_range: Dict[str, List[str]] = {} nodepool_nodes: Dict[str, int] = {} for np in cluster.nodepools: pod_range = np.pod_ipv4_cidr_block migs = np.instance_groups total_nodes = 0 for mig in migs: # approximation assuming that only running instances actually use pod cidr ranges nodes = mig.count_no_action_instances() total_nodes += nodes nodepool_nodes[np.name] = total_nodes if pod_range not in cidr_used_ips: cidr_used_ips[pod_range] = 0 nodepools_by_range[pod_range] = [] #sum up used IPs per pod range - running nodes*pod ip addresses allocated per node cidr_used_ips[pod_range] = cidr_used_ips[pod_range] + ( total_nodes * (2**(32 - np.pod_ipv4_cidr_size))) nodepools_by_range[pod_range].append(np.name) return cidr_used_ips, nodepools_by_range def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') for _, cluster in sorted(clusters.items()): if cluster.is_vpc_native: cidr_used_ips, nodepools_by_range = nodepool_calc(cluster) high_use = False summary = '' for pod_range, ips in cidr_used_ips.items(): used_ips = ips total_ip_addresses = pod_range.num_addresses nodepools = nodepools_by_range[pod_range] threshold_ips_used = total_ip_addresses * FAIL_THRESHOLD_RATIO if used_ips > threshold_ips_used: high_use = True if summary: summary += '\n' summary += ( f'{pod_range}({round(used_ips/total_ip_addresses*100)}% IPs used): ' f"{','.join(nodepools[:MAX_NODEPOOLS_TO_REPORT])}") if len(nodepools) > MAX_NODEPOOLS_TO_REPORT: summary += f' ({len(nodepools) - MAX_NODEPOOLS_TO_REPORT} more node pool(s))' if high_use: report.add_failed(cluster, summary) else: report.add_ok(cluster) else: #route-based: https://cloud.google.com/kubernetes-engine/docs/how-to/routes-based-cluster size = cluster.current_node_count pod_range = cluster.pod_ipv4_cidr #4096 IPs reserved for services range total_ip_addresses = pod_range.num_addresses - 4096 #256 because each node is assigned /24 from the pod CIDR range used_ips = size * 256 threshold_ips_used = (total_ip_addresses) * FAIL_THRESHOLD_RATIO if used_ips > threshold_ips_used: report.add_failed( cluster, f'{pod_range}({round(used_ips/total_ip_addresses*100)}% IPs used): all node pools' ) else: report.add_ok(cluster) ================================================ FILE: gcpdiag/lint/gke/warn_2021_004_system_workloads_stable.py ================================================ # Copyright 2021 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. """GKE system workloads are running stable. GKE includes some system workloads running in the user-managed nodes which are essential for the correct operation of the cluster. We verify that restart count of containers in one of the system namespaces (kube-system, istio-system, custom-metrics) stayed stable in the last 24 hours. """ # To add to the online description of the rule: # # To find the pod names with the containers that are restarting, you can use this # MQL query in Metrics explorer: # # fetch k8s_container # | metric 'kubernetes.io/container/restart_count' # | filter (resource.namespace_name == 'kube-system' || # resource.namespace_name == 'istio-system') # | align delta(1h) # | every 1h # | group_by [resource.pod_name], .sum # | filter val() > 0 from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import gke, monitoring # SLO: at least 99.8% of minutes are good (3 minutes in a day) SLO_BAD_MINUTES = 3 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): clusters = gke.get_clusters(context) if not clusters: return # Fetch the metrics for all clusters. within_str = 'within %dd, d\'%s\'' % (config.get('within_days'), monitoring.period_aligned_now(60)) _query_results_per_project_id[context.project_id] = monitoring.query( context.project_id, f""" fetch k8s_container | metric 'kubernetes.io/container/restart_count' | filter (resource.namespace_name == 'kube-system' || resource.namespace_name == 'istio-system' || resource.namespace_name == 'custom-metrics') && metadata.system.top_level_controller_type != 'Node' | {within_str} | align delta(1m) | filter val() >= 1 | group_by 1d, .count | filter val() > {SLO_BAD_MINUTES} | group_by [resource.project_id, cluster_name: resource.cluster_name, location: resource.location, controller: metadata.system.top_level_controller_name], [ .count ] """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # Organize the metrics per-cluster. per_cluster_results: Dict[tuple, Dict[str, int]] = {} for ts in _query_results_per_project_id[context.project_id].values(): try: cluster_key = (ts['labels']['resource.project_id'], ts['labels']['location'], ts['labels']['cluster_name']) cluster_values = per_cluster_results.setdefault(cluster_key, {}) cluster_values[ts['labels']['controller']] = ts except KeyError: # Ignore time series that don't have the required labels. pass # Go over the list of reported clusters for _, c in sorted(clusters.items()): ts_cluster_key = (c.project_id, c.location, c.name) if ts_cluster_key not in per_cluster_results: report.add_ok(c) else: report.add_failed( c, 'restarting: ' + ', '.join(per_cluster_results[ts_cluster_key].keys())) ================================================ FILE: gcpdiag/lint/gke/warn_2021_005_disk_latency.py ================================================ # Copyright 2021 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. # Lint as: python3 """GKE nodes have good disk performance. Disk performance is essential for the proper operation of GKE nodes. If too much IO is done and the disk latency gets too high, system components can start to misbehave. Often the boot disk is a bottleneck because it is used for multiple things: the operating system, docker images, container filesystems (usually including /tmp, etc.), and EmptyDir volumes. """ from typing import Any, Dict from gcpdiag import config, lint, models from gcpdiag.queries import gke, monitoring SLO_LATENCY_MS = 100 # SLO: at least 99.5% of minutes are good (7 minutes in a day) SLO_BAD_MINUTES_RATIO = 0.005 # If we have less than this minutes measured, skip SLO_VALID_MINUTES_PER_DAY = 12 * 60 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): # Fetch the metrics for all nodes. # # Note: we only group_by instance_id because of performance reasons (it gets # much slower if you group_by multiple labels) clusters = gke.get_clusters(context) if not clusters: return within_str = 'within %dd, d\'%s\'' % (config.get('within_days'), monitoring.period_aligned_now(60)) _query_results_per_project_id[context.project_id] = monitoring.query( context.project_id, f""" fetch gce_instance | {{ metric 'compute.googleapis.com/guest/disk/operation_time' ; metric 'compute.googleapis.com/guest/disk/operation_count' }} | {within_str} | filter metric.device_name = 'sda' | group_by [resource.instance_id], .sum() | every 1m | ratio | value(val() > cast_units({SLO_LATENCY_MS}, "ms")) | group_by 1d, [ .count_true, .count ] """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # Organize data per-cluster. per_cluster_results: Dict[gke.Cluster, Dict[str, Any]] = {} for ts in _query_results_per_project_id[context.project_id].values(): try: instance_id = ts['labels']['resource.instance_id'] node = gke.get_node_by_instance_id(context, instance_id) except KeyError: continue cluster_results = per_cluster_results.setdefault(node.nodepool.cluster, { 'bad_instances': [], 'valid': False }) # Did we miss the SLO on any day? # note: we don't calculate the SLO for the whole "WITHIN_DAYS" period # because otherwise you would get different results depending on how that # period is defined. total_minutes_bad = 0 total_minutes = 0 slo_missed = 0 for day_value in ts['values']: total_minutes_bad += day_value[0] total_minutes += day_value[1] if day_value[1] > SLO_VALID_MINUTES_PER_DAY: cluster_results['valid'] = 1 if day_value[0] / day_value[1] > SLO_BAD_MINUTES_RATIO: slo_missed = 1 if slo_missed: cluster_results['bad_instances'].append( (node.instance.name, total_minutes, total_minutes_bad)) # Go over all selected clusters and report results. for _, c in sorted(clusters.items()): if c not in per_cluster_results or not per_cluster_results[c]['valid']: report.add_skipped(c, 'no data') elif not per_cluster_results[c]['bad_instances']: report.add_ok(c) else: report.add_failed( c, (f'disk latency >{SLO_LATENCY_MS}ms (1 min. avg., within' f" {config.get('within_days')} days): \n. ") + '\n. '.join([ f'{i[0]} ({i[2]} out of {i[1]} minutes bad)' for i in sorted(per_cluster_results[c]['bad_instances']) ])) ================================================ FILE: gcpdiag/lint/gke/warn_2021_006_node_conntrack_full.py ================================================ # Copyright 2021 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. """GKE nodes aren't reporting conntrack issues. The following string was found in the serial logs: nf_conntrack: table full """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'nf_conntrack: table full' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='gce_instance', log_name='log_id("serialconsole.googleapis.com/serial_port_1_output")', filter_str=f'textPayload:"{MATCH_STR}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # Search the logs. def filter_f(log_entry): try: return MATCH_STR in log_entry['textPayload'] except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_nodes( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed( c, 'Full conntrack table detected. Nodes:\n. ' + '\n. '.join(bad_nodes_by_cluster[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2021_007_disk_full.py ================================================ # Copyright 2021 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. """GKE nodes have enough free space on the boot disk. GKE nodes need free space on their boot disks to be able to function properly. If /var is getting full, it might be because logs are not being rotated correctly, or maybe a container is creating too much data in the overlayfs. """ from collections import defaultdict from typing import Dict, List, Set from gcpdiag import lint, models from gcpdiag.queries import gke, monitoring # Verify that free/(free + used) is above this threshold MIN_FREE_THRESHOLD = 0.05 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): # Fetch the metrics for all nodes. # # Note: we only group_by instance_id because of performance reasons (it gets # much slower if you group_by multiple labels) clusters = gke.get_clusters(context) if not clusters: return # Only check the latest usage values within_str = 'within 5m, d\'%s\'' % (monitoring.period_aligned_now(300)) _query_results_per_project_id[context.project_id] = monitoring.query( context.project_id, f""" fetch gce_instance | metric 'compute.googleapis.com/guest/disk/bytes_used' | filter metric.device_name == 'sda1' | {within_str} | next_older 5m | filter_ratio_by [resource.instance_id], metric.state == 'free' | every 5m """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # Organize data per-cluster. clusters_with_data: Set[gke.Cluster] = set() bad_nodes_per_cluster: Dict[gke.Cluster, List[gke.Node]] = defaultdict(list) for ts in _query_results_per_project_id[context.project_id].values(): try: instance_id = ts['labels']['resource.instance_id'] node = gke.get_node_by_instance_id(context, instance_id) cluster = node.nodepool.cluster clusters_with_data.add(cluster) value = ts['values'][0][0] if value < MIN_FREE_THRESHOLD: bad_nodes_per_cluster[cluster].append(node) except KeyError: continue # Go over all selected clusters and report results. for _, c in sorted(clusters.items()): if c not in clusters_with_data: report.add_skipped(c, 'no data') elif c not in bad_nodes_per_cluster: report.add_ok(c) else: report.add_failed( c, 'nodes found founds with boot disk free space less than %d%%:\n. ' % (MIN_FREE_THRESHOLD * 100) + '\n. '.join( [node.instance.name for node in bad_nodes_per_cluster[c]])) ================================================ FILE: gcpdiag/lint/gke/warn_2021_008_gke_istio_incompatible_versions.py ================================================ # Copyright 2021 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. """Istio/ASM version not deprecated nor close to deprecation in GKE At the end of 2021, those Istio/ASM versions of 1.10.2 and below reached end of life and not supported. It is recommended that you upgrade to ASM Managed Control Plane or Istio version 1.10.3+ to avoid outages. """ from typing import Dict from gcpdiag import lint, models from gcpdiag.queries import gke, monitoring from gcpdiag.queries.gke import Version _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): clusters = gke.get_clusters(context) if not clusters: return # Fetch the metrics for all clusters. _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, """ fetch k8s_container | metric 'kubernetes.io/container/uptime' | filter (metadata.system_labels.container_image =~ '.*pilot.*') | within 1h | group_by [resource.project_id, cluster_name: resource.cluster_name, location: resource.location, container_image: metadata.system_labels.container_image] """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # Skip querying metrics if no cluster is in 1.21+ check_clusters = [] for _, c in sorted(clusters.items()): current_version = c.master_version if Version('1.21') < current_version < Version('1.23'): check_clusters.append(c) else: report.add_ok(c, f'GKE {c.master_version}') if len(check_clusters) == 0: return # Organize the metrics per-cluster. per_cluster_results: Dict[tuple, Dict[str, str]] = {} for ts in _query_results_per_project_id[context.project_id].values(): try: cluster_key = (ts['labels']['resource.project_id'], ts['labels']['location'], ts['labels']['cluster_name']) cluster_values = per_cluster_results.setdefault(cluster_key, {}) cluster_values['container_image'] = ts['labels']['container_image'] except KeyError: # Ignore metrics that don't have those labels pass # Go over the list of reported clusters for c in check_clusters: ts_cluster_key = (c.project_id, c.location, c.name) if ts_cluster_key not in per_cluster_results: report.add_skipped(c, 'no Istio/ASM reported') else: container_image = per_cluster_results[ts_cluster_key]['container_image'] (_, istio_version) = container_image.split(':') if Version(istio_version) > Version('1.10.2'): report.add_ok(c, f'Istio/ASM {istio_version}') return else: report.add_failed( c, f'Current GKE version: {c.master_version} (Release channel: '+\ f'{c.release_channel})\nIn-cluster Istio/ASM control plane ' +\ f'version: {istio_version}' ) ================================================ FILE: gcpdiag/lint/gke/warn_2021_009_node_deprecated_image_types.py ================================================ # Copyright 2021 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. """GKE nodes use a containerd image. Node images with the Docker runtime are deprecated. Switch to the containerd image types. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, cluster in sorted(clusters.items()): if not cluster.nodepools: report.add_skipped(None, 'no nodepools found') continue for nodepool in cluster.nodepools: if nodepool.config.image_type.find('CONTAINERD') != -1: report.add_ok(nodepool) elif nodepool.config.image_type.find('WINDOWS') != -1: if nodepool.version < gke.Version('1.21.1'): report.add_skipped( nodepool, f'GKE windows node pool {nodepool.version}. ' f'the Docker container runtime is deprecated ' f'only with windows image versions >= 1.21.1') else: report.add_failed( nodepool, f'nodepool is using the deprecated Docker container runtime ' f'(nodepool version: {nodepool.version}, image type: {nodepool.config.image_type})' ) else: if nodepool.version < gke.Version('1.19.0'): report.add_skipped( nodepool, f'GKE node pool {nodepool.version}. ' f'the Docker container runtime is deprecated ' f'only with image versions >= 1.19') else: report.add_failed( nodepool, f'nodepool is using the deprecated Docker container runtime ' f'(nodepool version: {nodepool.version}, image type: {nodepool.config.image_type})' ) ================================================ FILE: gcpdiag/lint/gke/warn_2022_001_wi_with_regional_cluster.py ================================================ # 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. """GKE clusters with workload identity are regional. Workload Identity is highly dependent of the availability of the cluster control plane during token fetches. It is recommended to use regional clusters for the production workload with Workload Identity enabled. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): if c.has_workload_identity_enabled() and not c.is_regional: report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2022_002_md_concealment.py ================================================ # 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. """GKE metadata concealment is not in use Metadata concealment is scheduled to be deprecated and removed in the future. Workload Identity replaces the need to use metadata concealment and the two approaches are incompatible. It is recommended that you use Workload Identity instead of metadata concealment. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Find all clusters. clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): # Verify MD concealment for every standard nodepool. for np in c.nodepools: if np.has_md_concealment_enabled(): report.add_failed(np, 'metadata concealment is in use') else: report.add_ok(np) ================================================ FILE: gcpdiag/lint/gke/warn_2022_003_firewall_rules_permission.py ================================================ # 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. """GKE service account permissions to manage project VPC firewall rules. Verify that the Google Kubernetes Engine service account has the Compute Network Admin role or custom role with sufficient fine-grained permissions to manage firewall rules in the current or host project with Shared VPC. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gke, iam # defining permissions PERMISSIONS = [ 'compute.firewalls.create', 'compute.firewalls.delete', 'compute.firewalls.get', 'compute.firewalls.list', 'compute.firewalls.update', 'compute.networks.updatePolicy', ] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Find all clusters. clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): # fetch project number p: str = c.project_id project = crm.get_project(p) if c.project_id != c.network.project_id: # shared vpc p = c.network.project_id sa = (f'serviceAccount:service-{project.number}' '@container-engine-robot.iam.gserviceaccount.com') # get iam policy iam_policy = iam.get_project_policy(context.copy_with(project_id=p)) failed = False missing = [] for permission in PERMISSIONS: if not iam_policy.has_permission(sa, permission): failed = True missing.append(permission) if failed: report.add_failed(c, (f'service account: {sa}\n' f'VPC network: {c.network.short_path}\n' f"missing permissions: {','.join(missing)})")) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2022_004_logging_api_disabled.py ================================================ # Copyright 2021 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. """Cloud Logging API enabled when GKE logging is enabled If Cloud Logging API is disabled, while GKE logging is enabled the Workload and Node logs won't be ingested, and thus, won't be visible in Logs Explorer. """ from gcpdiag import lint, models from gcpdiag.queries import apis, gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): if not c.has_logging_enabled(): report.add_skipped(c, 'GKE logging is disabled') elif c.has_logging_enabled() and \ not apis.is_enabled(context.project_id, 'logging'): report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2022_005_nvdia_gpu.py ================================================ # 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. """NVIDIA GPU device drivers are installed on GKE nodes with GPU After adding GPU nodes to the GKE cluster, the NVIDIA's device drivers should be installed in the nodes. Google provides a DaemonSet that will install the drivers. """ from typing import Dict from gcpdiag import lint, models from gcpdiag.queries import gke, monitoring _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): clusters = gke.get_clusters(context) if not clusters: return # Fetch the metrics for all clusters. _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, """ fetch k8s_container | metric 'kubernetes.io/container/uptime' | filter (metadata.user.c'k8s-app' = "nvidia-driver-installer") | within 1h | group_by [resource.project_id, cluster_name: resource.cluster_name, location: resource.location, container_image: metadata.system_labels.container_image] """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # Skip GKE cluster without GPU check_clusters = [] for _, cluster in sorted(clusters.items()): if not cluster.has_monitoring_enabled(): report.add_skipped(cluster, 'monitoring disabled') continue if not cluster.nodepools: report.add_skipped(None, 'no nodepools found') continue for nodepool in cluster.nodepools: if nodepool.config.has_accelerators() and nodepool.node_count > 0: check_clusters.append(cluster) break else: report.add_skipped(nodepool, 'no nodes with GPU found') if len(check_clusters) == 0: return # Organize the metrics per-cluster. per_cluster_results: Dict[tuple, Dict[str, str]] = {} for ts in _query_results_per_project_id[context.project_id].values(): try: cluster_key = (ts['labels']['resource.project_id'], ts['labels']['location'], ts['labels']['cluster_name']) per_cluster_results.setdefault(cluster_key, {}) except KeyError: # Ignore metrics that don't have those labels pass # Go over the list of reported clusters for c in check_clusters: ts_cluster_key = (c.project_id, c.location, c.name) if ts_cluster_key in per_cluster_results: report.add_ok(c) return else: report.add_failed( c, 'The DaemonSet of nvidia-driver-installer is not found in the GKE cluster.' ) ================================================ FILE: gcpdiag/lint/gke/warn_2022_006_nap_node_image_types.py ================================================ # 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. """GKE NAP nodes use a containerd image. Node images with the docker runtime are deprecated. Please switch to the containerd image types. """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): if c.nap_node_image_type is None: report.add_skipped(c, 'Node Auto Provisioning Disabled') continue if 'CONTAINERD' in c.nap_node_image_type: report.add_ok(c, 'Node Type: ' + c.nap_node_image_type) else: report.add_failed(c, 'Node Type: ' + c.nap_node_image_type) ================================================ FILE: gcpdiag/lint/gke/warn_2022_007_storage_scope.py ================================================ # Copyright 2021 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. """GKE nodes have Storage API access scope to retrieve build artifacts GKE nodes must have access to storage.googleapis.com to pull binaries/configs for node bootstrapping process and/or pull build artifacts from private Container or Artifact Registry repositories. Nodes may report connection timeouts during node bootstrapping or `401 Unauthorized` if they cannot pull from a private repositories. """ from gcpdiag import lint, models from gcpdiag.queries import gke required_storage_scope = [ 'https://www.googleapis.com/auth/devstorage.read_only', 'https://www.googleapis.com/auth/devstorage.read_write', 'https://www.googleapis.com/auth/devstorage.full_control', 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/cloud-platform.read-only' ] def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for cluster in sorted(clusters.values()): for nodepool in cluster.nodepools: if not cluster.nodepools: report.add_skipped(None, 'no nodepools found') if any(s in nodepool.config.oauth_scopes for s in required_storage_scope): report.add_ok(nodepool) else: report.add_failed(nodepool, None) ================================================ FILE: gcpdiag/lint/gke/warn_2022_008_dns_lookup_timeout_intra_node_visibility.py ================================================ # 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. ### """GKE connectivity: possible dns timeout in some gke versions. Some GKE versions (starting with 1.18.16-gke.300) have DNS timeout issues when intranode visibility is enabled and if the client Pod and kube-dns Pod are located on the same node. See: https://cloud.google.com/kubernetes-engine/docs/how-to/intranode-visibility#dns_timeouts """ from gcpdiag import lint, models from gcpdiag.queries import gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, cluster in sorted(clusters.items()): guarded_for_unaffected_versions = _guard_for_unaffected_versions( cluster, report) if guarded_for_unaffected_versions: continue _check_for_affected_version(cluster, report) def _guard_for_unaffected_versions( cluster: gke.Cluster, report: lint.LintReportRuleInterface) -> bool: if not cluster.has_intra_node_visibility_enabled(): report.add_ok(cluster, 'intra node visibility disabled -> unaffected') return True elif cluster.master_version.major != 1: report.add_ok(cluster, 'gke major version != 1 unaffected') return True elif cluster.master_version.minor >= 23: report.add_ok(cluster, 'gke version >= 1.23 unaffected') return True else: return False def _check_for_affected_version(cluster: gke.Cluster, report: lint.LintReportRuleInterface): if (cluster.master_version.minor == 18 and cluster.master_version.minor >= 16): report.add_failed( cluster, 'gke version ' + cluster.master_version.version_str + ' is affected') elif (cluster.master_version.minor == 19 and cluster.master_version.patch >= 7 and cluster.master_version.patch < 16): report.add_failed( cluster, 'gke version ' + cluster.master_version.version_str + ' is affected') elif (cluster.master_version.minor == 20 and cluster.master_version.patch >= 2 and cluster.master_version.patch < 13): report.add_failed( cluster, 'gke version ' + cluster.master_version.version_str + ' is affected') elif (cluster.master_version.minor == 21 and cluster.master_version.patch < 5): report.add_failed( cluster, 'gke version ' + cluster.master_version.version_str + ' is affected') elif (cluster.master_version.minor == 22 and cluster.master_version.patch < 2): report.add_failed( cluster, 'gke version ' + cluster.master_version.version_str + ' is affected') else: report.add_ok(cluster, 'no affected version detected') ================================================ FILE: gcpdiag/lint/gke/warn_2023_001_containerfilesystem_scope.py ================================================ # Copyright 2023 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. """Container File System has the required scopes for Image Streaming Verify GKE nodes have the required scopes to use Image Streaming. See https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming#permissiondenied """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'Request had insufficient authentication scopes' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_node', log_name='log_id("gcfsd")', filter_str=f'jsonPayload.MESSAGE:"{MATCH_STR}"') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return # skip entire rule is gcfs is disabled in all clusters has_image_streaming = any( c.has_image_streaming_enabled() for c in clusters.values()) if not has_image_streaming: report.add_skipped(None, 'image streaming disabled') return # Search the logs. def filter_f(log_entry): try: return MATCH_STR in log_entry['jsonPayload']['MESSAGE'] except KeyError: return False bad_nodes_by_cluster = util.gke_logs_find_bad_nodes( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_nodes_by_cluster: report.add_failed( c, "Nodes don't have required scopes for Image Streaming:\n. " + '\n. '.join(bad_nodes_by_cluster[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2023_002_metadata_server_timeout.py ================================================ # Copyright 2023 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. """GKE workload timeout to Compute Engine metadata server. If the workload uses a Google Authentication library, the default timeout for requests to the Compute Engine Metadata server might be too aggressive. Failed requests may return something like 'DefaultCredentialsError'. """ from collections import defaultdict from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, gke, logs CREDENTIALS_ERROR_LOG_FILTER = [ 'severity=ERROR', ('textPayload: "google.auth.exceptions.DefaultCredentialsError: ' 'Your default credentials were not found."') ] credential_logs_by_project = {} def prepare_rule(context: models.Context): credential_logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='k8s_container', log_name='log_id("stderr")', filter_str=' AND '.join(CREDENTIALS_ERROR_LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return clusters = gke.get_clusters(context) # Skip if no clusters found if not clusters: report.add_skipped(None, 'no clusters found') return # Clusters/containers with error from logs error_clusters: dict[tuple[str, str], set] = defaultdict(set) for log_entry in credential_logs_by_project[context.project_id].entries: cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name')) location = get_path(log_entry, ('resource', 'labels', 'location')) container_name = get_path(log_entry, ('resource', 'labels', 'container_name')) # Add container name to report failure if container_name: error_clusters[cluster_name, location].add(container_name) # Report final results for _, c in sorted(clusters.items()): if (c.name, c.location) in error_clusters: report.add_failed( c, 'Failed containers: %s' % ', '.join(error_clusters[(c.name, c.location)])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2023_003_monitoring_api_disabled.py ================================================ # Copyright 2023 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. """Cloud Monitoring API enabled when GKE monitoring is enabled If Cloud Monitoring API is disabled, while GKE monitoring is enabled the monitoring metrics won't be ingested, and thus, won't be visible in Cloud Monitoring. """ from gcpdiag import lint, models from gcpdiag.queries import apis, gke def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return for _, c in sorted(clusters.items()): if not c.has_monitoring_enabled(): report.add_skipped(c, 'GKE monitoring is disabled') elif c.has_monitoring_enabled() and \ not apis.is_enabled(context.project_id, 'monitoring'): report.add_failed(c) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2023_004_too_few_pods_per_node.py ================================================ # Copyright 2023 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. """A Node Pool doesn't have too low `maxPodsPerNode` number Modern GKE clusters could run multiple system DaemonSets, and enabling a GKE feature could add another DaemonSet or two. 7+ DaemonSets is the norm for an average GKE cluster. Low `maxPodsPerNode` number could prevent normal workload scheduling as all the available slots could be occupied by system or custom DaemonSet pods. `maxPodsPerNode` >= 16 should be a safer option.""" from gcpdiag import lint, models from gcpdiag.queries import gke TOO_FEW_PODS_PER_NODE_THRESHOLD = 15 def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context).values() if not clusters: report.add_skipped(None, "No GKE clusters found") for cluster in clusters: for nodepool in cluster.nodepools: if nodepool.max_pod_per_node > TOO_FEW_PODS_PER_NODE_THRESHOLD: report.add_ok(nodepool) else: report.add_failed( nodepool, reason= f"the nodepool has too low `maxPodsPerNode` number: {nodepool.max_pod_per_node}" ) ================================================ FILE: gcpdiag/lint/gke/warn_2024_001_cluster_nap_limits_prevent_autoscaling.py ================================================ # Copyright 2023 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. """GKE Node Auto Provisioning scales nodes to match workload demands. If a GKE cluster has Node Auto Provisioning (NAP) enabled, resource limits are configured to support workload scaling. Increased demand triggers successful node creation, ensuring application continuity. If NAP resource limits (CPU, memory) are configured too low, the autoscaler may be unable to add new nodes during high demand. This could potentially cause application disruptions. To prevent this, ensure NAP resource limits are set appropriately or consider manually scaling node pools as needed. """ from typing import Optional, Tuple from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs _LOG_RESOURCE_TYPE = 'k8s_cluster' _LOG_NAME = ( 'log_id("container.googleapis.com%2Fcluster-autoscaler-visibility")') _LOG_FILTER_STR = ( 'jsonPayload.noDecisionStatus.noScaleUp.unhandledPodGroups.' 'napFailureReasons.messageId="no.scale.up.nap.pod.zonal.resources.exceeded"' ) MATCH_STR_1 = 'no.scale.up.nap.pod.zonal.resources.exceeded' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type=_LOG_RESOURCE_TYPE, log_name=_LOG_NAME, filter_str=_LOG_FILTER_STR, ) def _filter_f(log_entry: logs.LogEntryShort) -> bool: try: return MATCH_STR_1 in get_path( log_entry, ( 'jsonPayload', 'noDecisionStatus', 'noScaleUp', 'unhandledPodGroups', 0, 'napFailureReasons', 0, 'messageId', ), ) except KeyError: return False def _extract_sample_affected_pod( log_entry: logs.LogEntryShort,) -> Tuple[Optional[str], Optional[str]]: try: pod_group = get_path( log_entry, ( 'jsonPayload', 'noDecisionStatus', 'noScaleUp', 'unhandledPodGroups', 0, 'podGroup', 'samplePod', ), ) return (pod_group['namespace'], pod_group['name']) except KeyError: return (None, None) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=_filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: namespace, name = _extract_sample_affected_pod(bad_clusters[c]) message = ( 'NAP cannot scale-up since cluster-wide cpu and/or memory limits' ' would be exceeded.') if namespace and name: message += f' Sample affected pod: {namespace}/{name}.' report.add_failed(c, message) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2024_002_ksa_exceed.py ================================================ # Copyright 2023 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. """Number of Kubernetes service accounts not above 3000. Fail the rule if WI is enabled and number of KSAs > `3000` """ from typing import Dict from gcpdiag import lint, models from gcpdiag.queries import gke, monitoring _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): clusters = gke.get_clusters(context) if not clusters: return # Fetch the metrics for all clusters. _query_results_per_project_id[context.project_id] = monitoring.query( context.project_id, """ fetch prometheus_target | metric 'prometheus.googleapis.com/apiserver_storage_objects/gauge' | filter (metric.resource == 'serviceaccounts') | group_by 1m, [value_apiserver_storage_objects_mean: mean(value.apiserver_storage_objects)] | every 1m | group_by [resource.cluster], [value_apiserver_storage_objects_mean_aggregate: aggregate(value_apiserver_storage_objects_mean)] """) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return per_cluster_results = {} # Organize the metrics per-cluster to get cluster name and KSA count. for ts in _query_results_per_project_id[context.project_id].values(): try: cluster_name = ts['labels']['resource.cluster'] sa_count = int(ts['values'][0][0]) per_cluster_results[cluster_name] = sa_count except KeyError: # Ignore time series that don't have the required labels. pass for _, c in sorted(clusters.items()): if c.is_autopilot or c.has_workload_identity_enabled( ) and c.has_monitoring_enabled: if 'APISERVER' not in c.enabled_monitoring_components(): report.add_skipped(c, 'API Server metrics are disabled') continue if c.name not in per_cluster_results: report.add_skipped( c, 'Unable to find serviceaccount count from APISERVER metrics') elif per_cluster_results[c.name] < 3000: report.add_ok(c) else: report.add_failed( c, 'Cluster has more than 3,000 Kubernetes service accounts.') ================================================ FILE: gcpdiag/lint/gke/warn_2024_003_ingress_svc_notfound.py ================================================ # Copyright 2024 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. """Ingress creation is successful if service is correctly mapped For an existing ingress, if the service is deleted somehow then ingress is left in the dangling state as service is not found. Also If the service mapped to GKE Ingress is not present Ingress will not be able to route the Requests to the service """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'Translation failed: invalid ingress spec: could not find service' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=f'jsonPayload.message:"{MATCH_STR_1}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2024_004_ingress_backendcrd.py ================================================ # Copyright 2024 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. """Ingress creation is successful if backendconfig crd is correctly mapped For an existing ingress, if the backendconfig is deleted somehow then ingress is left in the dangling state as backendcrd is not found. Also If the backendconfig crd is not mapped to GKE Ingress. Ingress health check will not pass and ingress will not be able to route the Requests """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = ( 'Translation failed: invalid ingress spec: error getting BackendConfig for' ' port') logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=f'jsonPayload.message:"{MATCH_STR_1}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2024_005_ingress_servicetype.py ================================================ # Copyright 2024 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. """GKE Ingress successfully routes external traffic to NodePort service Ingress translation errors occur when Service type mismatches load balancing. Non-container-native load balancing requires Service type: NodePort for external access. Container-native load balancing needs Service type: ClusterIP, handled internally. Correct Service type ensures Ingress functionality and prevents routing issues. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'Translation failed: invalid ingress spec: service' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=f'jsonPayload.message:"{MATCH_STR_1}"', ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_1 in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2024_007_loadbalancer_ipv6_no_internal_range.py ================================================ # Copyright 2024 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. """GKE dual-stack with IPv6 enabled uses an internal IP address for the Internal LB When using a GKE cluster with a dual-stack subnet and external IPv6 addresses, creating or updating an internal load balancer service is not possible. The external IPv6 configuration forces the system to prioritize external IP addresses, making internal IP addresses unavailable for the load balancer. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR = 'does not have internal IPv6 ranges, required for an internal IPv6 Service' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[context.project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=('severity="WARNING"' + ' AND ' + f'jsonPayload.message:"{MATCH_STR}"')) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # Skip entire rule if logging is disabled. if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/gke/warn_2025_001_loadbalancer_ipv6_no_external_range.py ================================================ # Copyright 2025 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. # pylint: disable=line-too-long """GKE external LB services are successfully created without encountering IP allocation failures due to external IPv6 subnet configurations. If you're using a Google Kubernetes Engine (GKE) cluster with a dual-stack subnet configured for internal IPv6 access, you won't be able to create or update an external load balancer service. External load balancers need an external IP address. This address is normally taken from the GKE subnet. Internal IPv6 access prevents external IP allocation. When your subnet is setup for internal IPv6 access, the system prioritizes internal IPs, making it impossible to get an external IPv6 address for the load balancer. This limitation applies to services without the annotation "networking.gke.io/load-balancer-type: "Internal", which specifically instructs GKE to create an external load balancer. """ from gcpdiag import lint, models from gcpdiag.lint.gke import util from gcpdiag.queries import apis, gke, logs MATCH_STR_1 = 'Error ensuring Resource for L4 External LoadBalancer, err: subnet' MATCH_STR_2 = 'does not have external IPv6 ranges, required for an external IPv6 Service' MATCH_STR_3 = 'You can specify an external IPv6 subnet using the' logs_by_project = {} def prepare_rule(context: models.Context): clusters = gke.get_clusters(context) for project_id in {c.project_id for c in clusters.values()}: logs_by_project[project_id] = logs.query( project_id=project_id, resource_type='k8s_cluster', log_name='log_id("events")', filter_str=(f'jsonPayload.message=~"{MATCH_STR_1}" AND ' f'jsonPayload.message=~"{MATCH_STR_2}" AND ' f'jsonPayload.message=~"{MATCH_STR_3}" '), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(None, 'logging api is disabled') return # Any work to do? clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') # Search the logs. def filter_f(log_entry): try: if MATCH_STR_2 in log_entry['jsonPayload']['message']: return True except KeyError: return False bad_clusters = util.gke_logs_find_bad_clusters( context=context, logs_by_project=logs_by_project, filter_f=filter_f) # Create the report. for _, c in sorted(clusters.items()): if c in bad_clusters: report.add_failed(c, logs.format_log_entry(bad_clusters[c])) else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/iam/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/iam/bp_2023_001_auto_grant_editor_role_default_sa.py ================================================ # Copyright 2021 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. """Policy constraint AutomaticIamGrantsForDefaultServiceAccounts is enforced Policy constraint AutomaticIamGrantsForDefaultServiceAccounts is strongly recommended to be enforced in production projects according to security best practices. """ from gcpdiag import lint, models from gcpdiag.queries import crm, orgpolicy constraints = None def prefetch_rule(context: models.Context): global constraints constraints = orgpolicy.get_effective_org_policy( context.project_id, "constraints/iam.automaticIamGrantsForDefaultServiceAccounts") def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if not constraints: report.add_failed(project) elif constraints.is_enforced(): report.add_ok(project) else: report.add_failed(project) ================================================ FILE: gcpdiag/lint/iam/iam_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import iam, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = iam project_id = 'gcpdiag-iam1-aaaa' ================================================ FILE: gcpdiag/lint/iam/sec_2021_001_sa_permissions.py ================================================ # Copyright 2021 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. """No service accounts have the Owner role A Service account should not have a role that could potentially increase the security risk to the project to malicious activity """ from gcpdiag import lint, models from gcpdiag.queries import crm, iam ROLE = 'roles/owner' def prefetch_rule(context: models.Context): # Make sure that we have the IAM policy in cache. iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) iam_policy = iam.get_project_policy(context) for member in sorted(iam_policy.get_members()): if member.startswith('serviceAccount:'): if iam_policy.has_role_permissions(member, ROLE): report.add_failed(project, member + f' has the role {ROLE}') break else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/iam/sec_2024_001_unused_sa.py ================================================ # Copyright 2021 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. """ No Unused Service Accounts Found Unused service accounts create an unnecessary security risk, so we recommend disabling unused service accounts then deleting the service accounts when you are sure that you no longer need them """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import iam, monitoring service_accounts = {} query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {} unique_id_set = set() def prefetch_rule(context: models.Context): iam.get_service_account_list(context.project_id) query_results_per_project_id[context.project_id] = monitoring.query( context.project_id, """ fetch iam_service_account | metric 'iam.googleapis.com/service_account/authn_events_count' | within 12w """, ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): service_accounts[context.project_id] = iam.get_service_account_list( context.project_id) accounts = service_accounts[context.project_id] if len(accounts) == 0: report.add_skipped(None, 'No Service accounts found') return for que in query_results_per_project_id[context.project_id].values(): try: val = get_path(que, ('labels', 'resource.unique_id')) unique_id_set.add(val) except KeyError: continue for account in accounts: if account.unique_id not in unique_id_set: report.add_failed(account, 'Unused Service Account Found') else: report.add_ok(account) ================================================ FILE: gcpdiag/lint/iam/snapshots/BP_2023_001.txt ================================================ * iam/BP/2023_001: Policy constraint AutomaticIamGrantsForDefaultServiceAccounts is enforced - projects/gcpdiag-iam1-aaaa [FAIL] Policy constraint AutomaticIamGrantsForDefaultServiceAccounts is strongly recommended to be enforced in production projects according to security best practices. https://gcpdiag.dev/rules/iam/BP/2023_001 ================================================ FILE: gcpdiag/lint/iam/snapshots/SEC_2021_001.txt ================================================ * iam/SEC/2021_001: No service accounts have the Owner role - projects/gcpdiag-iam1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/iam/snapshots/SEC_2024_001.txt ================================================ * iam/SEC/2024_001: No Unused Service Accounts Found - projects/gcpdiag-iam1-aaaa/serviceAccounts/demo2sa@gcpdiag-iam1-aaaa.iam.gserviceaccount.com [FAIL] Unused Service Account Found - projects/gcpdiag-iam1-aaaa/serviceAccounts/12340002-compute@developer.gserviceaccount.com [FAIL] Unused Service Account Found - projects/gcpdiag-iam1-aaaa/serviceAccounts/demo1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com [FAIL] Unused Service Account Found - projects/gcpdiag-iam1-aaaa/serviceAccounts/demo3@gcpdiag-iam1-aaaa.iam.gserviceaccount.com [FAIL] Unused Service Account Found Unused service accounts create an unnecessary security risk, so we recommend disabling unused service accounts then deleting the service accounts when you are sure that you no longer need them https://gcpdiag.dev/rules/iam/SEC/2024_001 ================================================ FILE: gcpdiag/lint/interconnect/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/interconnect/bp_2023_001_high_availability.py ================================================ # 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. """VLAN attachments deployed in same metro are in different EADs (Edge Availability Domains). To establish 99.99% high availability for interconnects, please ensure the following conditions: - Two metros are required, each metro has two attachments; - Attachments in same metro are in different EADs; - Two regions are required with four cloud router TASKS evenly distributed; - Global routing must be enabled on those cloud routers. """ from typing import Dict from gcpdiag import lint, models from gcpdiag.queries import crm, interconnect def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) attachments = interconnect.get_vlan_attachments(context.project_id) lookup: Dict[tuple[str, str], Dict] = {} ha_pairs: Dict[tuple[str, str], Dict] = {} if len(attachments) == 0: report.add_skipped(None, 'no vlan attachments found') return for attachment in attachments: region_metro = (attachment.region, attachment.metro) eads = lookup.setdefault(region_metro, {}) eads.setdefault(attachment.ead, []).append(attachment.name) # filter the region_metro that don't have EADs > 1 with attachments ha_pairs = {k: v for k, v in lookup.items() if len(v) > 1} if len(ha_pairs) < 2: report.add_failed( project, 'There are no vlan attachment pairs that can establish 99.99% high availability.' ) else: result = ( 'The following vlan attachments could be used to establish 99.99% high avaiablibility:\n' ) for region_metro, attachment_list in ha_pairs.items(): region, metro = region_metro result = result + ( f'\n * region:{region} and metro:{metro} ' f'have the following attachments in different EADs: {attachment_list}' ) note = ''' \nYou can use vlan attachments from above list to establsh 99.99% high availability for interconnects, please ensure the following conditions: - Two metros are required, each metro has two attachments; - Attachments in same metro are in different EADs; - Two regions are required with four cloud router TASKS evenly distributed; - Global routing must be enabled on those cloud routers.''' report.add_ok(project, result + note) ================================================ FILE: gcpdiag/lint/interconnect/interconnect_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import interconnect, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = interconnect project_id = 'gcpdiag-gke1-aaaa' ================================================ FILE: gcpdiag/lint/interconnect/snapshots/BP_2023_001.txt ================================================ * interconnect/BP/2023_001: VLAN attachments deployed in same metro are in different EADs (Edge Availability Domains). - projects/gcpdiag-gke1-aaaa [ OK ] The following vlan attachments could be used to establish 99.99% high avaiablibility: * region:us-east4 and metro:bos have the following attachments in different EADs: {'bos-zone1-219': ['dummy-attachment1', 'dummy-attachment2'], 'bos-zone2-219': ['dummy-attachment3', 'dummy-attachment4']} * region:us-west2 and metro:sjc have the following attachments in different EADs: {'sjc-zone1-6': ['dummy-attachment5'], 'sjc-zone2-6': ['dummy-attachment6', 'dummy-attachment7', 'dummy-attachment8', 'dummy-attachment9', 'dummy-attachment10']} You can use vlan attachments from above list to establsh 99.99% high availability for interconnects, please ensure the following conditions: - Two metros are required, each metro has two attachments; - Attachments in same metro are in different EADs; - Two regions are required with four cloud router TASKS evenly distributed; - Global routing must be enabled on those cloud routers. ================================================ FILE: gcpdiag/lint/interconnect/snapshots/WARN_2023_001.txt ================================================ * interconnect/WARN/2023_001: VLAN attachment is using Dataplane V1. - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL] this VLAN attachment is using Dataplane V1 - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ] Dataplane V1 doesn't support certain feature such as BFD, consider upgrading to Dataplane V2. For more information: https://cloud.google.com/network- connectivity/docs/interconnect/concepts/terminology#dataplaneVersion https://gcpdiag.dev/rules/interconnect/WARN/2023_001 ================================================ FILE: gcpdiag/lint/interconnect/snapshots/WARN_2023_002.txt ================================================ * interconnect/WARN/2023_002: VLAN attachment is in a non-functional state. - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL] this VLAN attachment is in a non-functional state This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted. https://gcpdiag.dev/rules/interconnect/WARN/2023_002 ================================================ FILE: gcpdiag/lint/interconnect/snapshots/WARN_2023_003.txt ================================================ * interconnect/WARN/2023_003: The interconnect link is undergoing a maintenance window. - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1 [ OK ] - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2 [ OK ] - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect3 [ OK ] - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4 [ OK ] - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4 [ OK ] - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4 [FAIL] this Interconnect link is currently under maintenance Please check the email sent to the technical contacts for further details about the maintenance. https://gcpdiag.dev/rules/interconnect/WARN/2023_003 ================================================ FILE: gcpdiag/lint/interconnect/snapshots/WARN_2025_001.txt ================================================ * interconnect/WARN/2025_001: VLAN attachment MTU matches VPC MTU - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4 [ OK ] - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5 [FAIL] MTU mismatch: 1450 vs VPC MTU 1460 - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL] MTU mismatch: 1440 vs VPC MTU 1460 - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL] MTU mismatch: 1440 vs VPC MTU 1460 - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL] MTU mismatch: 1440 vs VPC MTU 1460 - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL] MTU mismatch: 1440 vs VPC MTU 1460 - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL] MTU mismatch: 1440 vs VPC MTU 1460 Mismatched MTU may cause potential connection issues. Please check VLAN attachment and VPC network MTU configurations. https://gcpdiag.dev/rules/interconnect/WARN/2025_001 ================================================ FILE: gcpdiag/lint/interconnect/warn_2023_001_legacy_dataplane.py ================================================ # 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. """VLAN attachment is using Dataplane V1. Dataplane V1 doesn't support certain feature such as BFD, consider upgrading to Dataplane V2. For more information: https://cloud.google.com/network-connectivity/docs/interconnect/concepts/terminology#dataplaneVersion """ from gcpdiag import lint, models from gcpdiag.queries import interconnect def run_rule(context: models.Context, report: lint.LintReportRuleInterface): attachments = interconnect.get_vlan_attachments(context.project_id) if not attachments: report.add_skipped(None, 'no vlan attachments found') return for c in attachments: if c.legacy_dataplane: report.add_failed(c, None, ' this VLAN attachment is using Dataplane V1') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/interconnect/warn_2023_002_defunct_attachment.py ================================================ # 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. """VLAN attachment is in a non-functional state. This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted. """ from gcpdiag import lint, models from gcpdiag.queries import interconnect def run_rule(context: models.Context, report: lint.LintReportRuleInterface): attachments = interconnect.get_vlan_attachments(context.project_id) if not attachments: report.add_skipped(None, 'no vlan attachments found') return for c in attachments: if c.defunct_state: report.add_failed(c, None, ' this VLAN attachment is in a non-functional state') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/interconnect/warn_2023_003_link_maintenance.py ================================================ # 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. """The interconnect link is undergoing a maintenance window. Please check the email sent to the technical contacts for further details about the maintenance. """ from gcpdiag import lint, models from gcpdiag.queries import interconnect def run_rule(context: models.Context, report: lint.LintReportRuleInterface): interconnects = interconnect.get_links(context.project_id) if not interconnects: report.add_skipped(None, 'no Inteconnect links found') return for c in interconnects: if c.under_maintenance: report.add_failed( c, None, ' this Interconnect link is currently under maintenance') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/interconnect/warn_2025_001_check_interconnect_mtu.py ================================================ # Copyright 2025 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. """VLAN attachment MTU matches VPC MTU Mismatched MTU may cause potential connection issues. Please check VLAN attachment and VPC network MTU configurations. """ from gcpdiag import lint, models from gcpdiag.queries import interconnect, network def run_rule(context: models.Context, report: lint.LintReportRuleInterface): attachments = interconnect.get_vlan_attachments(context.project_id) if not attachments: report.add_skipped(None, 'no vlan attachments found') return for vlan in attachments: vlan_router = network.get_router_by_name(project_id=context.project_id, region=vlan.region, router_name=vlan.router) if not vlan_router: report.add_skipped(vlan, 'no vlan router found') continue vlan_network_name = vlan_router.get_network_name() vlan_network = network.get_network(project_id=context.project_id, network_name=vlan_network_name, context=context) if not vlan_network: report.add_skipped(vlan, 'no vlan network found') if vlan.mtu != vlan_network.mtu: report.add_failed( vlan, None, f' MTU mismatch: {vlan.mtu} vs VPC MTU {vlan_network.mtu}') else: report.add_ok(vlan) ================================================ FILE: gcpdiag/lint/lb/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/lb/bp_2022_001_lbpolicy_for_sessionaffinity.py ================================================ # 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. """LocalityLbPolicy compatible with sessionAffinity LocalityLbPolicy field need to be MAGLEV or RING_HASH, when sessionAffinity is not NONE. """ from gcpdiag import lint, models from gcpdiag.queries import crm, lb def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) bs_list = lb.get_backend_services(context.project_id) report_list = [] if len(bs_list) == 0: report.add_skipped(None, 'no backend services found') return for bs in bs_list: if bs.session_affinity != 'NONE': if bs.locality_lb_policy not in ('MAGLEV', 'RING_HASH'): report_list.append(bs.name) if len(report_list) == 0: report.add_ok(project) else: result = 'Session affinity might not work in the following backend services: ' + ', '.join( report_list) report.add_failed(project, result) ================================================ FILE: gcpdiag/lint/lb/bp_2023_001_cloudcdn_for_lb_backend_services.py ================================================ # 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. """Cloud CDN is enabled on backends for global external load balancers Performance best practices recommend that CloudCDN is enabled on backend services for Global External HTTP(S) load balancers. """ from gcpdiag import lint, models from gcpdiag.queries import lb EXTERNAL_MANAGED = 'EXTERNAL_MANAGED' MAX_BACKENDSERVICES_TO_REPORT = 10 def run_rule(context: models.Context, report: lint.LintReportRuleInterface): bs_list = lb.get_backend_services(context.project_id) # return if there are no BackendServices found in the project if not bs_list: report.add_skipped(None, 'no backend services found') return for bs in bs_list: # fail for backend services for Global HTTP(S) LB which have CloudCDN enabled if (bs.load_balancing_scheme == EXTERNAL_MANAGED and not bs.region and not bs.is_enable_cdn and not bs.region): report.add_failed(bs) # pass for backend services for Global HTTP(S) LB which have CloudCDN enabled elif (bs.load_balancing_scheme == EXTERNAL_MANAGED and not bs.region and bs.is_enable_cdn and not bs.region): report.add_ok(bs) else: # skip for non-global HTTP(S) LB backend services report.add_skipped(bs, 'Non Global HTTP(S) Load balancer backend service') ================================================ FILE: gcpdiag/lint/lb/bp_2023_002_healthcheck_logging_for_backend_services.py ================================================ # Copyright 2023 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. """Health check logging is enabled on health checks for load balancer backend services Best practice recommends that health check logging is enabled on health checks for load balancer backend services. """ from gcpdiag import lint, models from gcpdiag.queries import gce, lb bs_health_checks = set() bs_list = {} def prefetch_rule(context: models.Context): bs_list[context.project_id] = lb.get_backend_services(context.project_id) if not bs_list[context.project_id]: return # prefetch health checks for bs in bs_list[context.project_id]: if bs.health_check: health_check = gce.get_health_check(context.project_id, bs.health_check) del health_check def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # return if there are no BackendServices found in the project backend_services = bs_list[context.project_id] if not backend_services: report.add_skipped(None, 'no backend services found') return # get the health check resource object for each backend service for bs in backend_services: if bs.health_check: health_check = gce.get_health_check(context.project_id, bs.health_check) bs_health_checks.add(health_check) else: report.add_skipped(bs, 'No health check configured on backend service') # check that logging is enabled on the health check. for health_check in bs_health_checks: if health_check.is_log_enabled: report.add_ok(health_check) else: report.add_failed(health_check) ================================================ FILE: gcpdiag/lint/lb/bp_2024_001_sessionaffinity_for_lb_backendservices.py ================================================ # 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. """Session affinity is configured on backends for global external application load balancers Performance best practices recommend that configuring session affinity might be beneficial in some scenarios. """ from gcpdiag import lint, models from gcpdiag.queries import lb EXTERNAL_MANAGED = 'EXTERNAL_MANAGED' MAX_BACKENDSERVICES_TO_REPORT = 10 def run_rule(context: models.Context, report: lint.LintReportRuleInterface): bs_list = lb.get_backend_services(context.project_id) # return if there are no BackendServices found in the project if not bs_list: report.add_skipped(None, 'no backend services found') return for bs in bs_list: # fail for backend services for GXLB which don't have session affinity configured if (bs.load_balancing_scheme == EXTERNAL_MANAGED and not bs.region and bs.session_affinity == 'NONE' and not bs.region): report.add_failed(bs) # pass for backend services for GXLB which have session affinity configured elif (bs.load_balancing_scheme == EXTERNAL_MANAGED and not bs.region and bs.session_affinity != 'NONE' and not bs.region): report.add_ok(bs) else: # skip for non-global application LB backend services report.add_skipped( bs, 'Non Global application Load balancer backend service') ================================================ FILE: gcpdiag/lint/lb/bp_2024_002_global_access_for_regional_ilb.py ================================================ # Copyright 2024 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. """Global Access enabled on forwarding rule for Regional Internal Load Balancer. When global access is not on, resources/clients in other location might not be able to visit the Internal Load Balancer(iLB). It's recommended to enable the global access in regional iLB. """ import re from gcpdiag import lint, models from gcpdiag.queries import lb INTERNAL = 'INTERNAL' INTERNAL_MANAGED = 'INTERNAL_MANAGED' forwarding_rules_list = {} def prefetch_rule(context: models.Context): forwarding_rules_list[context.project_id] = lb.get_forwarding_rules( context.project_id) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Checks if global access is enabled on regional forwarding rule.""" forwarding_rules = forwarding_rules_list[context.project_id] # return if there is no forwarding_rule found in the project if not forwarding_rules: report.add_skipped(None, 'no Forwarding Rules found') return for forwarding_rule in forwarding_rules: forwarding_rule_regional = re.match( r'projects/([^/]+)/regions/([^/]+)/forwardingRules/([^/]+)', forwarding_rule.full_path, ) if forwarding_rule_regional and forwarding_rule.load_balancing_scheme in [ INTERNAL, INTERNAL_MANAGED, ]: if not forwarding_rule.global_access_allowed: report.add_failed(forwarding_rule) else: report.add_ok(forwarding_rule) ================================================ FILE: gcpdiag/lint/lb/bp_2025_001_protocol_for_lb_backendservices.py ================================================ # 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. """HTTP/2 between load balancer and backend may increase TCP connections. Connection pooling is not available with HTTP/2 which can lead to high backend latencies, so wisely select backend protocol """ from gcpdiag import lint, models from gcpdiag.queries import lb MAX_BACKENDSERVICES_TO_REPORT = 10 def run_rule(context: models.Context, report: lint.LintReportRuleInterface): bs_list = lb.get_backend_services(context.project_id) # return if there are no BackendServices found in the project if not bs_list: report.add_skipped(None, 'no backend services found') return for bs in bs_list: # fail for backend services which have HTTP/2 as backend service protocol if bs.protocol == 'HTTP2': report.add_failed(bs) # pass for backend services which have HTTP(S) as backend service protocol else: report.add_ok(bs) ================================================ FILE: gcpdiag/lint/lb/bp_2025_002_timeout_sec_for_lb_backendservices.py ================================================ # 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. """Backend Service Timeout for Global External Application Load Balancers. The default timeout is 30 seconds for external application load balancers and we don't recommend backend service timeout values greater than 24 hours (86,400 seconds) because Google Cloud periodically restarts GFEs for software updates and other routine maintenance. The longer the backend service timeout value, the more likely it is that Google Cloud terminates TCP connections for maintenance. """ from gcpdiag import lint, models from gcpdiag.queries import lb MAX_BACKENDSERVICES_TO_REPORT = 10 def run_rule(context: models.Context, report: lint.LintReportRuleInterface): bs_list = lb.get_backend_services(context.project_id) # return if there are no BackendServices found in the project if not bs_list: report.add_skipped(None, 'no backend services found') return for bs in bs_list: # fail for backend services where backend service timeout is greater than 24 # hours for external application load balancers if (bs.load_balancing_scheme in ('EXTERNAL_MANAGED', 'EXTERNAL') and bs.timeout_sec > 86400): report.add_failed(bs) # pass for backend services with timeout less than 24 hours. elif (bs.load_balancing_scheme in ('EXTERNAL_MANAGED', 'EXTERNAL') and bs.timeout_sec < 86400): report.add_ok(bs) else: # skip for others report.add_skipped(bs, 'No external load balancer backend services found') ================================================ FILE: gcpdiag/lint/lb/bp_2025_003_connection_draining_backend_services.py ================================================ # Copyright 2025 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. """Connection draining timeout is configured for proxy load balancers. Performance best practices recommend configuring connection draining timeout to allow existing requests to complete when instances are removed from a backend service. """ from gcpdiag import lint, models from gcpdiag.queries import lb def run_rule(context: models.Context, report: lint.LintReportRuleInterface): bs_list = lb.get_backend_services(context.project_id) # return if there are no BackendServices found in the project if not bs_list: report.add_skipped(None, 'No backend services found in this project.') return # Define load balancer types for which connection draining is applicable. proxy_lb_types = [ lb.LoadBalancerType.GLOBAL_EXTERNAL_PROXY_NETWORK_LB, lb.LoadBalancerType.REGIONAL_INTERNAL_PROXY_NETWORK_LB, lb.LoadBalancerType.REGIONAL_EXTERNAL_PROXY_NETWORK_LB, lb.LoadBalancerType.CROSS_REGION_INTERNAL_PROXY_NETWORK_LB, lb.LoadBalancerType.CLASSIC_PROXY_NETWORK_LB, lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB, lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB, lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB, lb.LoadBalancerType.CROSS_REGION_INTERNAL_APPLICATION_LB, lb.LoadBalancerType.CLASSIC_APPLICATION_LB, ] for bs in bs_list: if bs.load_balancer_type in proxy_lb_types: if bs.draining_timeout_sec > 0: report.add_ok( bs, 'Connection draining timeout is configured:' f' {bs.draining_timeout_sec} seconds.', ) else: report.add_failed( bs, 'Connection draining timeout is not configured (set to 0 seconds).', ) else: report.add_skipped( bs, 'Connection draining timeout not applicable to this load balancer' ' type.', ) ================================================ FILE: gcpdiag/lint/lb/lb_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import lb, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = lb project_id = 'gcpdiag-lb1-aaaa' ================================================ FILE: gcpdiag/lint/lb/snapshots/BP_2022_001.txt ================================================ * lb/BP/2022_001: LocalityLbPolicy compatible with sessionAffinity - projects/gcpdiag-lb1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/lb/snapshots/BP_2023_001.txt ================================================ * lb/BP/2023_001: Cloud CDN is enabled on backends for global external load balancers - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [SKIP] Non Global HTTP(S) Load balancer backend service ================================================ FILE: gcpdiag/lint/lb/snapshots/BP_2023_002.txt ================================================ * lb/BP/2023_002: Health check logging is enabled on health checks for load balancer backend services - projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check [ OK ] ================================================ FILE: gcpdiag/lint/lb/snapshots/BP_2024_001.txt ================================================ * lb/BP/2024_001: Session affinity is configured on backends for global external application load balancers - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [SKIP] Non Global application Load balancer backend service ================================================ FILE: gcpdiag/lint/lb/snapshots/BP_2024_002.txt ================================================ * lb/BP/2024_002: Global Access enabled on forwarding rule for Regional Internal Load Balancer. - projects/gcpdiag-lb1-aaaa/regions/us-west1/forwardingRules/forwardingRule1 [ OK ] ================================================ FILE: gcpdiag/lint/lb/snapshots/BP_2025_001.txt ================================================ * lb/BP/2025_001: HTTP/2 between load balancer and backend may increase TCP connections. - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [ OK ] ================================================ FILE: gcpdiag/lint/lb/snapshots/BP_2025_002.txt ================================================ * lb/BP/2025_002: Backend Service Timeout for Global External Application Load Balancers. - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [ OK ] ================================================ FILE: gcpdiag/lint/lb/snapshots/BP_2025_003.txt ================================================ * lb/BP/2025_003: Connection draining timeout is configured for proxy load balancers. - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [FAIL] Connection draining timeout is not configured (set to 0 seconds). Performance best practices recommend configuring connection draining timeout to allow existing requests to complete when instances are removed from a backend service. https://gcpdiag.dev/rules/lb/BP/2025_003 ================================================ FILE: gcpdiag/lint/lint_rule_repository_test.py ================================================ # Copyright 2021 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. """Tests for LintRuleRepository""" from functools import cached_property import pytest from gcpdiag.lint import LintRuleRepository, LintRulesPattern class FakePyPkg: def __init__(self, name, path): self.__name__ = name self.__path__ = path class FakeModulesGateway: 'Testing double to mock interactions with python modules' def __init__(self, modules_by_name): self.modules_by_name = modules_by_name def list_pkg_modules(self, pkg): return [ k for k in self.modules_by_name.keys() if k.startswith(pkg.__name__) ] def get_module(self, name): return self.modules_by_name[name] class FakeModule: 'Testing double to mock interactions with python module' def __init__(self, methods, doc): self.methods_by_name = methods self.doc = doc def get_method(self, name): return self.methods_by_name.get(name) def get_module_doc(self): return self.doc def get_attr(self, attribute): return attribute class FakeExecutionStrategy: """ Simple testing double for ExecutionStrategy """ def __init__(self): self.executed_rules = None def filter_runnable_rules(self, rules): return rules def run_rules(self, context, result, rules): del context, result self.executed_rules = rules class Setup: 'Helper class to instantiate testing subj and its dependencies' def __init__(self, modules_by_name, load_extended=None, include=None, exclude=None): self.modules_by_name = modules_by_name self.load_extended = load_extended self.include = include self.exclude = exclude @cached_property def repo(self): return LintRuleRepository(load_extended=self.load_extended, modules_gateway=self.modules_gw, execution_strategy=self.execution_strategy, exclude=self.exclude, include=self.include) @cached_property def modules_gw(self): return FakeModulesGateway(self.modules_by_name) @cached_property def execution_strategy(self): return FakeExecutionStrategy() def mk_simple_rule_module(methods=None, doc=None): methods = methods or {'run_rule': lambda context, rule_report: None} doc = doc or 'hello world, fake module' return FakeModule(methods=methods, doc=doc) def mk_simple_async_rule_module(methods=None, doc=None): methods = methods or {'async_run_rule': lambda context, rule_report: None} doc = doc or 'hello world, fake module' return FakeModule(methods=methods, doc=doc) def test_sync_happy_path(): fake_module1 = mk_simple_rule_module() fake_module2 = mk_simple_rule_module() setup = Setup( modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, 'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2 }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 2 executed_run_rule_fs = [ r.run_rule_f for r in setup.execution_strategy.executed_rules ] assert fake_module1.get_method('run_rule') in executed_run_rule_fs assert fake_module2.get_method('run_rule') in executed_run_rule_fs def test_async_happy_path(): fake_module1 = mk_simple_async_rule_module() fake_module2 = mk_simple_async_rule_module() setup = Setup( modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, 'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2 }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 2 executed_run_rule_fs = [ r.async_run_rule_f for r in setup.execution_strategy.executed_rules ] assert fake_module1.get_method('async_run_rule') in executed_run_rule_fs assert fake_module2.get_method('async_run_rule') in executed_run_rule_fs def test_no_entrypoint_raises(): fake_module1 = mk_simple_rule_module(methods={'dummy': lambda: None}) setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, }) with pytest.raises(RuntimeError): setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) def test_wrong_rule_class_raises(): fake_module1 = mk_simple_rule_module() setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.hello_2022_001_hello': fake_module1, }) with pytest.raises(ValueError): setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) def test_wrong_module_names_ignored(): fake_module1 = mk_simple_rule_module() setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.err_hello': fake_module1, }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 0 def test_tests_ignored(): fake_module1 = mk_simple_rule_module() setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello_test': fake_module1, }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 0 def test_empty_doc_raises(): fake_module1 = FakeModule( methods={'run_rule': lambda context, rule_report: None}, doc='') setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, }) with pytest.raises(RuntimeError): setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) def test_singleline_doc_happy_path(): fake_module1 = FakeModule( methods={'run_rule': lambda context, rule_report: None}, doc='first line') setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 1 assert setup.execution_strategy.executed_rules[0].short_desc == 'first line' assert setup.execution_strategy.executed_rules[0].long_desc == '' def test_multiline_doc_happy_path(): fake_module1 = FakeModule( methods={'run_rule': lambda context, rule_report: None}, doc='first line \n\n third line \n fourth line') setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 1 assert setup.execution_strategy.executed_rules[0].short_desc == 'first line ' assert setup.execution_strategy.executed_rules[ 0].long_desc == ' third line \n fourth line' def test_non_empty_second_doc_line_raises(): fake_module1 = FakeModule( methods={'run_rule': lambda context, rule_report: None}, doc='first line \n second line \n third line \n fourth line') setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, }) with pytest.raises(RuntimeError): setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) def test_ext_ignored(): fake_module1 = mk_simple_rule_module() setup = Setup(modules_by_name={ 'gcpdiag.lint.fakeprod.err_ext_2022_001_hello': fake_module1, }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 0 def test_ext_loaded(): fake_module1 = mk_simple_rule_module() setup = Setup(load_extended=True, modules_by_name={ 'gcpdiag.lint.fakeprod.err_ext_2022_001_hello': fake_module1, }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 1 def test_include_id(): fake_module1 = mk_simple_rule_module() fake_module2 = mk_simple_rule_module() setup = Setup(include=[LintRulesPattern('fakeprod/ERR/2022_001')], modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, 'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2 }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 1 executed_run_rule_fs = [ r.run_rule_f for r in setup.execution_strategy.executed_rules ] assert fake_module1.get_method('run_rule') in executed_run_rule_fs assert fake_module2.get_method('run_rule') not in executed_run_rule_fs def test_include_class(): fake_module1 = mk_simple_rule_module() fake_module2 = mk_simple_rule_module() setup = Setup(include=[LintRulesPattern('fakeprod/ERR/*')], modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, 'gcpdiag.lint.fakeprod.warn_2022_002_world': fake_module2 }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 1 executed_run_rule_fs = [ r.run_rule_f for r in setup.execution_strategy.executed_rules ] assert fake_module1.get_method('run_rule') in executed_run_rule_fs assert fake_module2.get_method('run_rule') not in executed_run_rule_fs def test_include_product(): fake_module1 = mk_simple_rule_module() fake_module2 = mk_simple_rule_module() fake_module3 = mk_simple_rule_module() setup = Setup( include=[LintRulesPattern('fakeprod/*/*')], modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, 'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2, 'gcpdiag.lint.anotherfakeprod.err_2022_001_hihi': fake_module3 }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.anotherfakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 2 executed_run_rule_fs = [ r.run_rule_f for r in setup.execution_strategy.executed_rules ] assert fake_module1.get_method('run_rule') in executed_run_rule_fs assert fake_module2.get_method('run_rule') in executed_run_rule_fs def test_exclude_id(): fake_module1 = mk_simple_rule_module() fake_module2 = mk_simple_rule_module() setup = Setup(exclude=[LintRulesPattern('fakeprod/ERR/2022_002')], modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, 'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2 }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 1 executed_run_rule_fs = [ r.run_rule_f for r in setup.execution_strategy.executed_rules ] assert fake_module1.get_method('run_rule') in executed_run_rule_fs assert fake_module2.get_method('run_rule') not in executed_run_rule_fs def test_exclude_class(): fake_module1 = mk_simple_rule_module() fake_module2 = mk_simple_rule_module() setup = Setup(exclude=[LintRulesPattern('fakeprod/WARN/*')], modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, 'gcpdiag.lint.fakeprod.warn_2022_002_world': fake_module2 }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 1 executed_run_rule_fs = [ r.run_rule_f for r in setup.execution_strategy.executed_rules ] assert fake_module1.get_method('run_rule') in executed_run_rule_fs assert fake_module2.get_method('run_rule') not in executed_run_rule_fs def test_exclude_product(): fake_module1 = mk_simple_rule_module() fake_module2 = mk_simple_rule_module() fake_module3 = mk_simple_rule_module() setup = Setup( exclude=[LintRulesPattern('fakeprod/*/*')], modules_by_name={ 'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1, 'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2, 'gcpdiag.lint.anotherfakeprod.err_2022_001_hihi': fake_module3 }) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path')) setup.repo.load_rules(FakePyPkg('gcpdiag.lint.anotherfakeprod', 'fake.path')) setup.repo.run_rules(context=None) assert len(setup.execution_strategy.executed_rules) == 1 executed_run_rule_fs = [ r.run_rule_f for r in setup.execution_strategy.executed_rules ] assert fake_module1.get_method('run_rule') not in executed_run_rule_fs assert fake_module2.get_method('run_rule') not in executed_run_rule_fs assert fake_module3.get_method('run_rule') in executed_run_rule_fs ================================================ FILE: gcpdiag/lint/looker/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/looker/bp_2025_001_get_all_instances.py ================================================ # Copyright 2025 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. """List all Looker Core instances in given GCP project. Probable reasons for failure would be insufficient permissions or corrupted state of instances. """ from gcpdiag import lint, models from gcpdiag.queries import looker def run_rule(context: models.Context, report: lint.LintReportRuleInterface): instances = looker.get_instances(context) if not instances: report.add_skipped(None, 'No instances found') for _, c in sorted(instances.items()): if c.name == '': report.add_failed(c) else: report.add_ok(c, c.status) ================================================ FILE: gcpdiag/lint/looker/bp_2025_002_lsp_high_intensity_queries_bq.py ================================================ # Copyright 2025 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. # Lint as: python3 """Number of expensive Looker Studio bigquery job. Checking BigQuery jobs associated with Looker Studio which are billed over 1 GB""" from boltons.iterutils import get_path # type: ignore from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs HIGHLY_EXTENSIVE_FILTER = [ 'protoPayload.methodName="jobservice.jobcompleted"', ('protoPayload.serviceData.jobCompletedEvent.job.' 'jobStatistics.totalBilledBytes>="1073741824"'), ('protoPayload.serviceData.jobCompletedEvent.job.' 'jobConfiguration.labels.reques' 'tor="looker_studio"') ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='bigquery_resource', log_name='log_id("cloudaudit.googleapis.com/data_access")', filter_str=' '.join(HIGHLY_EXTENSIVE_FILTER), ) def run_rule( context: models.Context, report: lint.LintReportRuleInterface, ): job_counts: dict[str, int] = {} project = crm.get_project(context.project_id) # skip entire rule if logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if logs_by_project.get( context.project_id) and logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: email_id = get_path( log_entry, ( 'protoPayload', 'authenticationInfo', 'principalEmail', ), ) if email_id: job_counts[email_id] = job_counts.get(email_id, 0) + 1 for email_id, count in job_counts.items(): report.add_failed( project, f'The user {email_id} ran {count} BigQuery jobs in LSP billed over 1 GB' ) return # in case of there is no log or all logs are non-relevant else: report.add_ok( project, 'No BigQuery jobs billed over 1 GB from Looker Studio were found.') ================================================ FILE: gcpdiag/lint/looker/bp_2025_003_get_all_lags_operations.py ================================================ # Lint as: python3 """ This module contains linting rules to confirm all Looker (Google Cloud core) instance operations are inventoried """ from gcpdiag import lint, models from gcpdiag.queries import looker def format_operation_message(operation): """Helper function to format the operation message.""" if operation.status == 'In Progress': action_message = ( f'Activity: {operation.operation_type} | Status: {operation.status}.') else: action_message = ( f'Activity: {operation.operation_type} | Action: {operation.action} | ' f'Status: {operation.status}.') return (f'\n Location: {operation.location_id}\n' f' Instance: {operation.instance_name}\n' f' - {action_message}') def run_rule(context: models.Context, report: lint.LintReportRuleInterface): operations_by_location = looker.get_operations(context) if not operations_by_location: report.add_skipped(None, 'No operations found') return for _, instances in operations_by_location.items(): for _, operations in instances.items(): for operation in operations: message = format_operation_message(operation) if operation.status == 'In Progress': report.add_failed(operation, message) else: report.add_ok(operation, message) ================================================ FILE: gcpdiag/lint/looker/looker_rules_snapshot_test.py ================================================ # Copyright 2025 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import looker, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = looker project_id = 'gcpdiag-looker1-aaaa' ================================================ FILE: gcpdiag/lint/looker/snapshots/BP_2025_001.txt ================================================ * looker/BP/2025_001: List all Looker Core instances in given GCP project. - projects/gcpdiag-looker1-aaaa/locations/us-central1/instances/gcpdiag-test-01 [ OK ] ACTIVE ================================================ FILE: gcpdiag/lint/looker/snapshots/BP_2025_002.txt ================================================ * looker/BP/2025_002: Number of expensive Looker Studio bigquery job. - projects/gcpdiag-looker1-ijtqsckn [FAIL] The user user@google.com ran 2 BigQuery jobs in LSP billed over 1 GB https://gcpdiag.dev/rules/looker/BP/2025_002 ================================================ FILE: gcpdiag/lint/looker/snapshots/BP_2025_003.txt ================================================ * looker/BP/2025_003: This module contains linting rules to confirm all Looker - projects/gcpdiag-looker1-aaaa/locations/us-central1/operations/operation-1 [ OK ] Location: us-central1 Instance: gcpdiag-test-01 - Activity: update | Action: databases | Status: Completed. ================================================ FILE: gcpdiag/lint/notebooks/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/notebooks/bp_2023_001_enable_report_system_health.py ================================================ # 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. """Vertex AI Workbench instance enables system health report User-managed notebooks instances can report the system health of the core services like Docker service, Docker reverse proxy agent, Jupyter service and Jupyter API. """ from gcpdiag import lint, models from gcpdiag.queries import apis, notebooks GUEST_ATTRIBUTES = { 'enable-guest-attributes': 'true', 'report-system-health': 'true' } instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = notebooks.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'No instances found') return for instance in instances.values(): if all( instance.metadata.get(k, 'false').casefold() == v.casefold() for k, v in GUEST_ATTRIBUTES.items()): report.add_ok(instance) else: report.add_failed(instance) ================================================ FILE: gcpdiag/lint/notebooks/bp_2023_002_instances_upgrade_available.py ================================================ # Copyright 2023 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. """Vertex AI Workbench user-managed notebook instances are up to date Vertex AI Workbench user-managed notebook instance can be upgraded to have latest bug fixes, new capabilities, framework and package updates """ from gcpdiag import lint, models from gcpdiag.queries import apis, notebooks instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = notebooks.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'No instances found') return for instance in instances.values(): is_upgradeable = notebooks.instance_is_upgradeable(context, instance.name) upgradeable_message = ( 'Instance is upgradeable - ' f"upgradeVersion: {is_upgradeable.get('upgradeVersion', 'unknown')}, " f"upgradeInfo: {is_upgradeable.get('upgradeInfo', 'unknown')}, " f"upgradeImage: {is_upgradeable.get('upgradeImage', 'unknown')}") if is_upgradeable.get('upgradeable', False): report.add_failed(instance, upgradeable_message) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/notebooks/bp_2023_003_runtimes_upgrade_available.py ================================================ # 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. """Vertex AI Workbench runtimes for managed notebooks are up to date Maintaining runtimes up to date is generally beneficial thanks to new capabilities, framework updates, package updates, and bug fixes that have been implemented in newer versions of your environment. """ from gcpdiag import lint, models from gcpdiag.queries import apis, notebooks runtimes_by_project = {} def prefetch_rule(context: models.Context): runtimes_by_project[context.project_id] = notebooks.get_runtimes(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return runtimes = runtimes_by_project[context.project_id] if not runtimes: report.add_skipped(None, 'No runtimes found') return for runtime in runtimes.values(): if runtime.is_upgradeable: report.add_failed(runtime) else: report.add_ok(runtime) ================================================ FILE: gcpdiag/lint/notebooks/bp_2023_004_runtime_idle_shutdown.py ================================================ # 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. """Vertex AI Workbench runtimes for managed notebooks enable idle shutdown To help manage costs, you can set your managed notebooks instance to shut down after being idle for a specific time period. You can change the amount of time. """ from gcpdiag import lint, models from gcpdiag.queries import apis, notebooks runtimes_by_project = {} def prefetch_rule(context: models.Context): runtimes_by_project[context.project_id] = notebooks.get_runtimes(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return runtimes = runtimes_by_project[context.project_id] if not runtimes: report.add_skipped(None, 'No runtimes found') return for runtime in runtimes.values(): if not runtime.idle_shutdown: report.add_failed(runtime) else: report.add_ok(runtime) ================================================ FILE: gcpdiag/lint/notebooks/err_2023_001_instances_health_state.py ================================================ # Copyright 2023 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. # Lint as: python3 """Vertex AI Workbench user-managed notebook instances are healthy Rule which verifies the Vertex AI Workbench user-managed notebook instances have a healthy state """ from gcpdiag import lint, models from gcpdiag.queries import apis, notebooks instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = notebooks.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'No instances found') return for instance in instances.values(): if not instance.name: report.add_skipped(instance, 'Instance name not found') continue health_state = notebooks.get_instance_health_state(context, instance.name) health_state_message = f'Health state = {health_state}' if health_state == notebooks.HealthStateEnum.HEALTHY: report.add_ok(instance) if health_state == notebooks.HealthStateEnum.UNHEALTHY: report.add_failed(instance, health_state_message) else: report.add_skipped(instance, health_state_message) ================================================ FILE: gcpdiag/lint/notebooks/err_2023_002_create_notebook_compute_subnetworks_permissions_missing.py ================================================ # Copyright 2023 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. # Lint as: python3 """Vertex AI Workbench account has compute.subnetworks permissions to create notebook in VPC Creating notebook inside VPC requires user and service-*@gcp-sa-notebooks.iam.gserviceaccount.com to have compute.subnetworks.use and compute.subnetworks.useExternalIp permissions in VPC project """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs # used by check for relevant logs MATCH_STRING = 'Required \'compute.subnetworks' # to get .use and .useExternalIp errors MATCH_STRING_REGEX = f'{MATCH_STRING}.*\' permission for' NOTEBOOKS_SA = '^service-.*@gcp-sa-notebooks.iam.gserviceaccount.com$' NOTEBOOKS_MISSING_PERMISSIONS_FILTER = [ 'severity=ERROR', 'protoPayload.serviceName = "notebooks.googleapis.com"', f'protoPayload.status.message =~ "{MATCH_STRING_REGEX}"', ] COMPUTE_ENGINE_MISSING_PERMISSIONS_FILTER = [ 'severity=ERROR', f'protoPayload.authenticationInfo.principalEmail =~ "{NOTEBOOKS_SA}"', f'protoPayload.status.message =~ "{MATCH_STRING_REGEX}"', ] logs_by_project_notebooks = {} logs_by_project_compute = {} def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("cloudaudit.googleapis.com/activity")' logs_by_project_notebooks[context.project_id] = logs.query( project_id=project_id, log_name=log_name, resource_type='audited_resource', filter_str=' AND '.join(NOTEBOOKS_MISSING_PERMISSIONS_FILTER)) logs_by_project_compute[context.project_id] = logs.query( project_id=project_id, log_name=log_name, resource_type='gce_instance', filter_str=' AND '.join(COMPUTE_ENGINE_MISSING_PERMISSIONS_FILTER)) def find_logs_with_permission_errors(context: models.Context, logs_by_project: dict, principals_with_error: set): if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: principal_email = get_path( log_entry, ('protoPayload', 'authenticationInfo', 'principalEmail'), default='') if not principal_email: # filter out entries with no affected account continue # Filter out non-relevant and repeated log entries. if (log_entry['severity'] == 'ERROR' and MATCH_STRING in get_path( log_entry, ('protoPayload', 'status', 'message'), default='') and principal_email not in principals_with_error): principals_with_error.add(principal_email) return principals_with_error def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging API is disabled') return if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(project, 'Notebooks API is disabled') return principals_with_error = find_logs_with_permission_errors( context, logs_by_project_notebooks, set()) principals_with_error.update( find_logs_with_permission_errors(context, logs_by_project_compute, principals_with_error)) if principals_with_error: for principal_email in principals_with_error: report.add_failed( project, (f'{principal_email} account is missing mandatory' ' compute.subnetworks.use and compute.subnetworks.useExternalIp' ' permissions to create notebook'), ) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/notebooks/err_2023_003_create_notebook_permissions_missing.py ================================================ # Copyright 2023 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. # Lint as: python3 """Vertex AI Workbench account has required permissions to create and use notebooks Creating and using a notebook requires service-*@gcp-sa-notebooks.iam.gserviceaccount.com to have "AI Platform Notebooks Service Agent" role and for user to have "Service Account User" role """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STRING = 'permission' NOTEBOOKS_SA = '^service-.*@gcp-sa-notebooks.iam.gserviceaccount.com$' NOTEBOOKS_MISSING_PERMISSIONS_FILTER = [ 'severity=ERROR', 'protoPayload.serviceName = "notebooks.googleapis.com"', f'protoPayload.status.message =~ "{MATCH_STRING}"', 'protoPayload.status.code = 7', ] COMPUTE_ENGINE_MISSING_PERMISSIONS_FILTER = [ 'severity=ERROR', 'protoPayload.serviceName = "compute.googleapis.com"', 'protoPayload.authorizationInfo.granted != True', f'protoPayload.authenticationInfo.principalEmail =~ "{NOTEBOOKS_SA}"', f'protoPayload.status.message =~ "{MATCH_STRING}"', 'protoPayload.status.code = 7', ] logs_by_project_notebooks = {} logs_by_project_compute = {} def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("cloudaudit.googleapis.com/activity")' logs_by_project_notebooks[context.project_id] = logs.query( project_id=project_id, log_name=log_name, resource_type='audited_resource', filter_str=' AND '.join(NOTEBOOKS_MISSING_PERMISSIONS_FILTER)) logs_by_project_compute[context.project_id] = logs.query( project_id=project_id, log_name=log_name, resource_type='gce_instance', filter_str=' AND '.join(COMPUTE_ENGINE_MISSING_PERMISSIONS_FILTER)) def find_logs_with_permission_errors(context: models.Context, logs_by_project: dict): if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant and repeated log entries. if (log_entry['severity'] == 'ERROR' and MATCH_STRING in get_path( log_entry, ('protoPayload', 'status', 'message'), default='')): return True return False def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging API is disabled') return if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(project, 'Notebooks API is disabled') return # Logs-based rule as any user account or SA can create/use/own notebooks if (find_logs_with_permission_errors(context, logs_by_project_notebooks) or find_logs_with_permission_errors(context, logs_by_project_compute)): report.add_failed( project, ('Missing permissions: ' '@gcp-sa-notebooks.iam.gserviceaccount.com Service Account must ' 'have "AI Platform Notebooks Service Agent" role and user account ' 'must have "Service Account User" role')) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/notebooks/err_2023_004_runtimes_health_state.py ================================================ # Copyright 2023 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. # Lint as: python3 """Vertex AI Workbench runtimes for managed notebooks are healthy Rule which verifies the Vertex AI Workbench runtimes for managed notebooks have a healthy state """ from gcpdiag import lint, models from gcpdiag.queries import apis, notebooks runtimes_by_project = {} def prefetch_rule(context: models.Context): runtimes_by_project[context.project_id] = notebooks.get_runtimes(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return runtimes = runtimes_by_project[context.project_id] if not runtimes: report.add_skipped(None, 'No runtimes for managed notebooks found') return for runtime in runtimes.values(): if not runtime.name: report.add_skipped(runtime, 'Runtime name not found') continue health_state = runtime.health_state health_state_message = f'Health state = {health_state}' if health_state == notebooks.HealthStateEnum.HEALTHY: report.add_ok(runtime) if health_state == notebooks.HealthStateEnum.UNHEALTHY: report.add_failed(runtime, health_state_message) else: report.add_skipped(runtime, health_state_message) ================================================ FILE: gcpdiag/lint/notebooks/err_2024_001_executor_explicit_project_permissions.py ================================================ # Copyright 2024 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. # Lint as: python3 """Vertex AI Workbench Notebooks Executor code uses explicit project selection Running a notebook code execution requires user to explicitly set client libraries with the user's project to avoid 40X errors with the executor project """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs ERROR_CODE = '40' ERROR_MESSAGE = 'permission' ERROR_MESSAGE_MATCH_STRING_1 = ( f'{ERROR_CODE}[4,3] (GET|POST) ' r'https:\/\/bigquery.googleapis.com\/bigquery\/[a-z0-9.]*\/projects\/[a-z0-9]{1,20}-tp' ) ERROR_MESSAGE_MATCH_STRING_2 = ( 'does not have ' f'[a-z.]* {ERROR_MESSAGE} in project [a-z0-9]{1,20}-tp') ERROR_MESSAGE_MATCH_STRING_3 = fr'{ERROR_CODE}[3,4] gs:\/\/[a-z0-9]{1,20}-tp' ERROR_MESSAGES = ( f'(jsonPayload.message =~ "{ERROR_MESSAGE_MATCH_STRING_1}" OR ' f'jsonPayload.message =~ "{ERROR_MESSAGE_MATCH_STRING_2}" OR ' f'jsonPayload.message =~ "{ERROR_MESSAGE_MATCH_STRING_3}")') NOTEBOOKS_EXECUTOR_PERMISSIONS_ERRORS_FILTER = [ 'severity=ERROR', 'labels."compute.googleapis.com/resource_name" =~ "training"', ERROR_MESSAGES ] logs_by_project = {} def prepare_rule(context: models.Context): project_id = context.project_id log_name = 'log_id("workerpool0-0")' logs_by_project[context.project_id] = logs.query( project_id=project_id, log_name=log_name, resource_type='ml_job', filter_str=' AND '.join(NOTEBOOKS_EXECUTOR_PERMISSIONS_ERRORS_FILTER), ) def find_logs_with_permission_errors(context: models.Context): if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant and repeated log entries. path_message = get_path(log_entry, ('jsonPayload', 'message'), default='') if log_entry['severity'] == 'ERROR' and (ERROR_CODE in path_message or ERROR_MESSAGE in path_message): return True return False def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule if logging is disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'Logging API is disabled') return if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(project, 'Notebooks API is disabled') return if not apis.is_enabled(context.project_id, 'aiplatform'): # Notebooks executor depends on Vertex AI API report.add_skipped(project, 'Vertex API is disabled') return # Logs-based rule as error only occurs at runtime and depends on user code if find_logs_with_permission_errors(context): report.add_failed( project, ('Missing permissions in executor project: You did not specify your' 'own project id explicitly in your notebook code'), ) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/notebooks/notebooks_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import notebooks, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = notebooks project_id = 'gcpdiag-notebooks1-aaaa' ================================================ FILE: gcpdiag/lint/notebooks/snapshots/BP_2023_001.txt ================================================ * notebooks/BP/2023_001: Vertex AI Workbench instance enables system health report - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [FAIL] User-managed notebooks instances can report the system health of the core services like Docker service, Docker reverse proxy agent, Jupyter service and Jupyter API. https://gcpdiag.dev/rules/notebooks/BP/2023_001 ================================================ FILE: gcpdiag/lint/notebooks/snapshots/BP_2023_002.txt ================================================ * notebooks/BP/2023_002: Vertex AI Workbench user-managed notebook instances are up to date - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [FAIL] Instance is upgradeable - upgradeVersion: m109, upgradeInfo: A new image is available for upgrade. Backup user data before upgrading, upgradeImage: https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-latest-cpu-v20230615 Vertex AI Workbench user-managed notebook instance can be upgraded to have latest bug fixes, new capabilities, framework and package updates https://gcpdiag.dev/rules/notebooks/BP/2023_002 ================================================ FILE: gcpdiag/lint/notebooks/snapshots/BP_2023_003.txt ================================================ * notebooks/BP/2023_003: Vertex AI Workbench runtimes for managed notebooks are up to date - projects/gcpdiag-notebooks1-aaaa/locations/us-west1/runtimes/gcpdiag-notebooks1runtime-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/notebooks/snapshots/BP_2023_004.txt ================================================ * notebooks/BP/2023_004: Vertex AI Workbench runtimes for managed notebooks enable idle shutdown - projects/gcpdiag-notebooks1-aaaa/locations/us-west1/runtimes/gcpdiag-notebooks1runtime-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/notebooks/snapshots/ERR_2023_001.txt ================================================ * notebooks/ERR/2023_001: Vertex AI Workbench user-managed notebook instances are healthy - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [FAIL] Health state = UNHEALTHY Rule which verifies the Vertex AI Workbench user-managed notebook instances have a healthy state https://gcpdiag.dev/rules/notebooks/ERR/2023_001 ================================================ FILE: gcpdiag/lint/notebooks/snapshots/ERR_2023_002.txt ================================================ * notebooks/ERR/2023_002: Vertex AI Workbench account has compute.subnetworks permissions to create notebook in VPC - projects/gcpdiag-notebooks1-aaaa [SKIP] Logging API is disabled ================================================ FILE: gcpdiag/lint/notebooks/snapshots/ERR_2023_003.txt ================================================ * notebooks/ERR/2023_003: Vertex AI Workbench account has required permissions to create and use notebooks - projects/gcpdiag-notebooks1-aaaa [SKIP] Logging API is disabled ================================================ FILE: gcpdiag/lint/notebooks/snapshots/ERR_2023_004.txt ================================================ * notebooks/ERR/2023_004: Vertex AI Workbench runtimes for managed notebooks are healthy - projects/gcpdiag-notebooks1-aaaa/locations/us-west1/runtimes/gcpdiag-notebooks1runtime-aaaa [SKIP] Health state = HEALTH_STATE_UNSPECIFIED ================================================ FILE: gcpdiag/lint/notebooks/snapshots/ERR_2024_001.txt ================================================ * notebooks/ERR/2024_001: Vertex AI Workbench Notebooks Executor code uses explicit project selection - projects/gcpdiag-notebooks1-aaaa [SKIP] Logging API is disabled ================================================ FILE: gcpdiag/lint/notebooks/snapshots/WARN_2023_001.txt ================================================ * notebooks/WARN/2023_001: Vertex AI Workbench instance is not being OOMKilled (serial port output is unavailable) [SKIP] ================================================ FILE: gcpdiag/lint/notebooks/snapshots/WARN_2023_002.txt ================================================ * notebooks/WARN/2023_002: Vertex AI Workbench instance is in healthy data disk space status - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [SKIP] No health info found ================================================ FILE: gcpdiag/lint/notebooks/snapshots/WARN_2023_003.txt ================================================ * notebooks/WARN/2023_003: Vertex AI Workbench instance is in healthy boot disk space status - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [SKIP] No health info found ================================================ FILE: gcpdiag/lint/notebooks/warn_2023_001_notebooks_oom.py ================================================ # 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. """Vertex AI Workbench instance is not being OOMKilled High memory utilization more than 85% in the user-managed notebooks instance could be a cause of 524 (A Timeout Occurred) errors while opening Jupyterlab. """ import re from gcpdiag import lint, models from gcpdiag.lint.gce import utils from gcpdiag.queries import apis, gce, notebooks OOMKILLED_MESSAGES = [ 'Out of memory: Kill process', 'oom_reaper: reaped process' ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = utils.SerialOutputSearch( context, search_strings=OOMKILLED_MESSAGES) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return instances = notebooks.get_instances(context) if not instances: report.add_skipped(None, 'No instances found') return if not utils.is_serial_port_one_logs_available(context): report.add_skipped(None, 'serial port output is unavailable') return search = logs_by_project[context.project_id] p_gce_vm = re.compile(r'projects/.+/locations/(.+)/instances/(.+)') for instance in instances.values(): result = p_gce_vm.match(instance.name) if not result: continue zone, vm_name = result.group(1), result.group(2) gce_vm = gce.get_instance(context.project_id, zone, vm_name) if search.get_last_match(instance_id=gce_vm.id): report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/notebooks/warn_2023_002_data_disk_utilization.py ================================================ # 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. """Vertex AI Workbench instance is in healthy data disk space status The data disk space status is unhealthy if the disk space is greater than 85% full. """ from gcpdiag import lint, models from gcpdiag.queries import apis, notebooks instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = notebooks.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'No instances found') return for instance in instances.values(): health_info = notebooks.get_instance_health_info(context, instance.name) if not health_info: report.add_skipped(instance, 'No health info found') continue disk_util = int(health_info.get('data_disk_utilization_percent', '0')) if disk_util > 85: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/notebooks/warn_2023_003_boot_disk_utilization.py ================================================ # 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. """Vertex AI Workbench instance is in healthy boot disk space status The boot disk space status is unhealthy if the disk space is greater than 85% full. """ from gcpdiag import lint, models from gcpdiag.queries import apis, notebooks instances_by_project = {} def prefetch_rule(context: models.Context): instances_by_project[context.project_id] = notebooks.get_instances(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'notebooks'): report.add_skipped(None, 'Notebooks API is disabled') return instances = instances_by_project[context.project_id] if not instances: report.add_skipped(None, 'No instances found') return for instance in instances.values(): health_info = notebooks.get_instance_health_info(context, instance.name) if not health_info: report.add_skipped(instance, 'No health info found') continue disk_util = int(health_info.get('boot_disk_utilization_percent', '0')) if disk_util > 85: report.add_failed(instance) else: report.add_ok(instance) ================================================ FILE: gcpdiag/lint/output/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/output/api_output.py ================================================ # Copyright 2024 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. """API class for api output implementations """ import logging import sys from gcpdiag import lint from gcpdiag.lint.output import base_output class APIOutput(base_output.BaseOutput): """API output implementation.""" @property def result_handler(self) -> 'lint.LintResultsHandler': return self def process_rule_report(self, rule_report: lint.LintReportRuleInterface) -> None: pass def get_logging_handler(self) -> logging.Handler: stream_handler = logging.StreamHandler(stream=sys.stdout) formatter = logging.Formatter('%(levelname)-6s: %(message)s') stream_handler.setFormatter(formatter) return stream_handler ================================================ FILE: gcpdiag/lint/output/base_output.py ================================================ """ Base class for different output implementations """ import logging import sys import threading from typing import TextIO # pylint: disable=unused-import (lint is used in type annotations) from gcpdiag import config, lint, models class BaseOutput: """ Base class for different output implementations """ file: TextIO show_ok: bool show_skipped: bool log_info_for_progress_only: bool lock: threading.Lock def __init__(self, file: TextIO = sys.stdout, log_info_for_progress_only: bool = True, show_ok: bool = True, show_skipped: bool = False) -> None: self.file = file self.show_ok = show_ok self.show_skipped = show_skipped self.log_info_for_progress_only = log_info_for_progress_only self.lock = threading.Lock() def display_banner(self) -> None: print(f'gcpdiag {config.VERSION}\n', file=sys.stderr) def display_header(self, context: models.Context) -> None: print(f'Starting lint inspection ({context})...\n', file=sys.stderr) def display_footer(self, result: 'lint.LintResults') -> None: totals = result.get_totals_by_status() state_strs = [ f'{totals.get(state, 0)} {state}' for state in ['skipped', 'ok', 'failed'] ] print(f"Rules summary: {', '.join(state_strs)}", file=sys.stderr) def get_logging_handler(self) -> logging.Handler: return _LoggingHandler(self) def print_line(self, text: str = '') -> None: """Write a line to the desired output provided as self.file.""" print(text, file=self.file, flush=True) def _should_result_be_skipped(self, result: 'lint.LintRuleResult') -> bool: skipped = result.status == 'skipped' and not self.show_skipped ok = result.status == 'ok' and not self.show_ok return skipped or ok def _should_rule_be_skipped( self, rule_report: 'lint.LintReportRuleInterface') -> bool: skipped = rule_report.overall_status == 'skipped' and not self.show_skipped ok = rule_report.overall_status == 'ok' and not self.show_ok return skipped or ok class _LoggingHandler(logging.Handler): """logging.Handler implementation used when producing a lint report.""" output: BaseOutput def __init__(self, output: BaseOutput): super().__init__() self.output = output def format(self, record: logging.LogRecord) -> str: return record.getMessage() def emit(self, record: logging.LogRecord) -> None: if record.levelno == logging.INFO: # Do not output anything, assuming that the # interesting output will be passed via print_line return else: msg = f'[{record.levelname}] ' + self.format(record) + ' ' # workaround for bug: # https://github.com/googleapis/google-api-python-client/issues/1116 if 'Invalid JSON content from response' in msg: return with self.output.lock: sys.stdout.flush() print(msg, file=sys.stderr) ================================================ FILE: gcpdiag/lint/output/csv_output.py ================================================ # Copyright 2021 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. """Output implementation that prints result in CSV format.""" import csv import sys from typing import Optional, TextIO from gcpdiag import lint, models from gcpdiag.lint.output import base_output class CSVOutput(base_output.BaseOutput): """ Output implementation that prints result in CSV format. """ columns = ['rule', 'resource', 'status', 'message', 'doc_url'] def __init__(self, file: TextIO = sys.stdout, log_info_for_progress_only: bool = True, show_ok: bool = True, show_skipped: bool = False): super().__init__(file, log_info_for_progress_only, show_ok, show_skipped) self.writer = csv.DictWriter(sys.stdout, fieldnames=self.columns) @property def result_handler(self) -> 'lint.LintResultsHandler': return self def process_rule_report(self, rule_report: lint.LintReportRuleInterface) -> None: with self.lock: self._print_rule_report(rule_report) def _print_rule_report(self, rule_report: lint.LintReportRuleInterface) -> None: for result in rule_report.results: if not self._should_result_be_skipped(result): self._add_result(rule=rule_report.rule, resource=result.resource, status=result.status, reason=result.reason, short_info=result.short_info) def _add_result(self, rule: lint.LintRule, resource: Optional[models.Resource], status: str, short_info: Optional[str] = None, reason: Optional[str] = None) -> None: self.rule_has_results = True rule_id = f'{rule.product}/{rule.rule_class}/{rule.rule_id}' if reason: message = '' + reason elif short_info: message = '' + short_info else: message = '-' self.writer.writerow({ 'rule': rule_id, 'resource': resource.full_path if resource else '-', 'status': status, 'message': message, 'doc_url': rule.doc_url }) def display_header(self, context): super().display_header(context) self.writer.writeheader() def display_footer(self, result) -> None: # add extra line self.print_line() return super().display_footer(result) ================================================ FILE: gcpdiag/lint/output/json_output.py ================================================ # Copyright 2021 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. """ Output implementation that prints result in JSON format. """ import json from typing import Optional from gcpdiag import lint, models from gcpdiag.lint.output import base_output class JSONOutput(base_output.BaseOutput): """ Output implementation that prints result in JSON format. """ _printed_first_result = False def display_header(self, context: models.Context) -> None: super().display_header(context) # group output as list - start self.print_line('[') def display_footer(self, result: lint.LintResults) -> None: # group output as list - end self.print_line(']') # add extra line self.print_line() return super().display_footer(result) @property def result_handler(self) -> 'lint.LintResultsHandler': return self def process_rule_report(self, rule_report: lint.LintReportRuleInterface) -> None: with self.lock: self._print_rule_report(rule_report) def _print_rule_report(self, rule_report: lint.LintReportRuleInterface) -> None: for result in rule_report.results: if not self._should_result_be_skipped(result): self._add_result(rule=rule_report.rule, resource=result.resource, status=result.status, reason=result.reason, short_info=result.short_info) def _add_result(self, rule: lint.LintRule, resource: Optional[models.Resource], status: str, short_info: Optional[str] = None, reason: Optional[str] = None) -> None: self.rule_has_results = True rule_id = f'{rule.product}/{rule.rule_class}/{rule.rule_id}' if reason: message = '' + reason elif short_info: message = '' + short_info else: message = '-' if self._printed_first_result: self.print_line(',') else: self._printed_first_result = True self.print_line( json.dumps( { 'rule': rule_id, 'resource': resource.full_path if resource else '-', 'status': status, 'message': message, 'doc_url': rule.doc_url }, ensure_ascii=False, indent=2)) ================================================ FILE: gcpdiag/lint/output/terminal_output.py ================================================ # Copyright 2021 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. # Lint as: python3 """ Output implementation that prints result in human-readable format. """ import functools import logging import os import sys import textwrap from typing import Any, Dict, List, Optional, TextIO import blessings # pylint: disable=unused-import (lint is used in type hints) from gcpdiag import config, lint, models from gcpdiag.lint.output import base_output OUTPUT_WIDTH = 68 def is_cloud_shell(): return os.getenv('CLOUD_SHELL') def emoji_wrap(char): if is_cloud_shell(): # emoji not displayed as double width in Cloud Shell (bug?) return char + ' ' else: return char class OutputOrderer: """ Helper to maintain sorting order of the rules """ _result_handler: 'lint.LintResultsHandler' _output_order: List[str] _next_rule_idx: int _rule_reports_ready: Dict[str, 'lint.LintReportRuleInterface'] def __init__(self, result_handler: 'lint.LintResultsHandler', output_order: List[str]) -> None: self._result_handler = result_handler self._output_order = output_order self._next_rule_idx = 0 self._rule_reports_ready = {} def process_rule_report(self, rule_report: Any) -> None: rule_id = str(rule_report.rule) self._rule_reports_ready[rule_id] = rule_report self._output_ready() def _output_ready(self) -> None: while self._has_more_work and self._is_next_rule_ready: rule_report = self._rule_reports_ready[self._next_rule_id] self._result_handler.process_rule_report(rule_report) self._next_rule_idx += 1 @property def _has_more_work(self) -> bool: return self._next_rule_idx < len(self._output_order) @property def _is_next_rule_ready(self) -> bool: return self._next_rule_id in self._rule_reports_ready @property def _next_rule_id(self) -> str: return self._output_order[self._next_rule_idx] class TerminalOutput(base_output.BaseOutput): """ Output implementation that prints result in human-readable format. """ _output_order: Optional[List[str]] line_unfinished: bool term: blessings.Terminal def __init__(self, file: TextIO = sys.stdout, log_info_for_progress_only: bool = True, show_ok: bool = True, show_skipped: bool = False, output_order: Optional[List[str]] = None): super().__init__(file, log_info_for_progress_only, show_ok, show_skipped) self._output_order = output_order self.line_unfinished = False self.term = blessings.Terminal() @functools.cached_property def result_handler(self) -> 'lint.LintResultsHandler': default_handler = self if self._output_order is None: return default_handler else: return OutputOrderer(result_handler=default_handler, output_order=self._output_order) def process_rule_report(self, rule_report: 'lint.LintReportRuleInterface') -> None: if not self._should_rule_be_skipped(rule_report): with self.lock: self._print_rule_report(rule_report) def _print_rule_report(self, rule_report: 'lint.LintReportRuleInterface') -> None: self._print_rule_header(rule=rule_report.rule) for check_result in rule_report.results: self._handle_rule_report_result(check_result) if rule_report.overall_status == 'failed': self._print_long_desc(rule=rule_report.rule) self.terminal_print_line() def _handle_rule_report_result(self, check_result: 'lint.LintRuleResult') -> None: if check_result.status == 'failed': self._print_failed(resource=check_result.resource, reason=check_result.reason, short_info=check_result.short_info) elif check_result.status == 'skipped': self._print_skipped(resource=check_result.resource, reason=check_result.reason, short_info=check_result.short_info) elif check_result.status == 'ok': self._print_ok(resource=check_result.resource, short_info=check_result.short_info) else: raise RuntimeError('Unknown rule report status') def _wrap_indent(self, text: str, prefix: str) -> str: width = self.term.width or 80 width = min(width, 80) return textwrap.indent(textwrap.fill(text, width - len(prefix)), prefix) def _italic(self, text: str) -> str: if is_cloud_shell(): # TODO(b/201958597): Cloud Shell with tmux doesn't format italic properly at the moment return text else: return self.term.italic(text) def terminal_update_line(self, text: str) -> None: """Update the current line on the terminal.""" if self.term.width: print(self.term.move_x(0) + self.term.clear_eol() + text, end='', flush=True, file=self.file) self.line_unfinished = True else: # If it's a stream, do not output anything, assuming that the # interesting output will be passed via terminal_print_line pass def terminal_erase_line(self) -> None: """Remove the current content on the line.""" if self.line_unfinished and self.term.width: print(self.term.move_x(0) + self.term.clear_eol(), flush=True, end='', file=self.file) self.line_unfinished = False def terminal_print_line(self, text: str = '') -> None: """Write a line to the terminal, replacing any current line content, and add a line feed.""" if self.line_unfinished and self.term.width: self.terminal_update_line(text) print(file=self.file) else: print(text, file=self.file) # flush the output, so that we can more easily grep, tee, etc. sys.stdout.flush() self.line_unfinished = False def display_banner(self) -> None: if self.term.does_styling: print(self.term.bold(f"gcpdiag {emoji_wrap('🩺')} {config.VERSION}\n")) else: print(f'gcpdiag {config.VERSION}\n', file=sys.stderr) def _print_rule_header(self, rule: 'lint.LintRule') -> None: bullet = '' if self.term.does_styling: bullet = emoji_wrap('🔎') + ' ' else: bullet = '* ' self.terminal_print_line( bullet + self.term.yellow(f'{rule.product}/{rule.rule_class}/{rule.rule_id}') + ': ' + f'{rule.short_desc}') def _print_long_desc(self, rule: 'lint.LintRule') -> None: self.terminal_print_line() long_desc = rule.long_desc or '' self.terminal_print_line(self._italic(self._wrap_indent(long_desc, ' '))) self.terminal_print_line() self.terminal_print_line(' ' + rule.doc_url) def _print_skipped(self, resource: Optional[models.Resource], reason: Optional[str], short_info: Optional[str]) -> None: if not self.show_skipped: return if short_info: short_info = ' ' + short_info else: short_info = '' reason = reason or '' if resource: self.terminal_print_line(' - ' + resource.full_path.ljust(OUTPUT_WIDTH) + ' [SKIP]' + short_info) self.terminal_print_line(textwrap.indent(reason, ' ')) else: self.terminal_print_line(' ' + ('(' + reason + ')').ljust(OUTPUT_WIDTH + 2) + ' [SKIP]' + short_info) def _print_ok(self, resource: Optional[models.Resource], short_info: Optional[str]) -> None: if not self.show_ok: return if short_info: short_info = ' ' + str(short_info) else: short_info = '' full_path = resource.full_path if resource is not None \ and resource.full_path is not None else '' self.terminal_print_line(' - ' + full_path.ljust(OUTPUT_WIDTH) + ' [' + self.term.green(' OK ') + ']' + short_info) def _print_failed(self, resource: Optional[models.Resource], reason: Optional[str], short_info: Optional[str]) -> None: if short_info: short_info = ' ' + short_info else: short_info = '' full_path = resource.full_path if resource is not None \ and resource.full_path is not None else '' self.terminal_print_line(' - ' + full_path.ljust(OUTPUT_WIDTH) + ' [' + self.term.red('FAIL') + ']' + short_info) if reason: self.terminal_print_line(textwrap.indent(reason, ' ')) def get_logging_handler(self) -> logging.Handler: return _LoggingHandler(self) class _LoggingHandler(logging.Handler): """logging.Handler implementation used when producing a lint report.""" output: TerminalOutput def __init__(self, output: TerminalOutput) -> None: super().__init__() self.output = output def format(self, record: logging.LogRecord) -> str: return record.getMessage() def emit(self, record: logging.LogRecord) -> None: if record.levelno == logging.INFO and self.output.log_info_for_progress_only: msg = ' ... ' + self.format(record) # make sure we don't go beyond the terminal width if self.output.term.width: term_overflow = len(msg) - self.output.term.width if term_overflow > 0: msg = msg[:-term_overflow] with self.output.lock: self.output.terminal_update_line(msg) else: msg = f'[{record.levelname}] ' + self.format(record) + ' ' # workaround for bug: # https://github.com/googleapis/google-api-python-client/issues/1116 if 'Invalid JSON content from response' in msg: return with self.output.lock: self.output.terminal_print_line(msg) ================================================ FILE: gcpdiag/lint/pubsub/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/pubsub/bp_2024_001_ouma_less_one_day.py ================================================ # Copyright 2024 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. # Lint as: python3 """Oldest Unacked Message Age Value less than 24 hours. Failing to pull messages and ack them within 24 hours could lead to additional storage charges, as well as potentially overwhelm subscribers who are not flow-controlled when delivery is begun at a high backlog. """ from itertools import islice from typing import Dict from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import crm, monitoring, pubsub # ouma == oldest_unacked_message_age ouma_tracker: Dict[str, monitoring.TimeSeriesCollection] = {} MAX_SUBSCRIPTIONS_TO_DISPLAY = 10 def prefetch_rule(context: models.Context): """Gathers the metric values for the ouma for all subscriptions.""" subscription_name = '' query_ouma = ( 'fetch pubsub_subscription | metric' ' "pubsub.googleapis.com/subscription/oldest_unacked_message_age" |' ' filter resource.project_id == "{}" &&' ' (resource.subscription_id == "{}") | group_by 1m,' ' [value_oldest_unacked_message_age_mean:' ' mean(value.oldest_unacked_message_age)]| every 1m') subscriptions = pubsub.get_subscriptions(context) for _, subscription in subscriptions.items(): subscription_name = subscription.name ouma_tracker[subscription_name] = monitoring.query( context.project_id, query_ouma.format(context.project_id, subscription_name), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Checks for ouma value as more than 24 h to get FAIL.""" project = crm.get_project(context.project_id) if not ouma_tracker: report.add_skipped(None, 'no subscription metrics found') failing_subs = set() for subscription_name, ouma_metric in ouma_tracker.items(): for metric_values in ouma_metric.values(): # eval needs to unwrap Dict result similar to {..., 'values': [[0.0]]} if get_path(metric_values, ('values'))[0][0] > 24: failing_subs.add(subscription_name) # reporting if failing_subs: extra_subs = '' if len(failing_subs) > MAX_SUBSCRIPTIONS_TO_DISPLAY: extra_subs = (', and' f' {len(failing_subs) - MAX_SUBSCRIPTIONS_TO_DISPLAY} more' ' subscriptions') # pylint: disable=line-too-long report.add_failed( project, f'{len(failing_subs)} subscriptions have an' ' oldest_unacked_message_age of more than 24 hours' f" {', '.join(islice(failing_subs, MAX_SUBSCRIPTIONS_TO_DISPLAY))}{extra_subs}", ) # pylint: enable=line-too-long else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/pubsub/err_2024_001_bq_subscription_table_not_found.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Pub/Sub Bigquery Subscription Created using Exist BigQuery table. Unable to Create the BigQuery Subscription using BigQuery table does not already exist, Check If the table you are trying to use for Bigquery Subscription creation is already existed in the BigQuery or not. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'Not found: Table' TABLE_EXIST_CHECK_FILTER = [ 'severity=ERROR', f'protoPayload.status.message:"{MATCH_STR}"', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='pubsub_subscription', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(TABLE_EXIST_CHECK_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if not apis.is_enabled(context.project_id, 'bigquery'): report.add_skipped(project, 'bigquery api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue report.add_failed( project, 'The BigQuery "' + log_entry['protoPayload']['request']['bigqueryConfig']['table'] + '" table does not already exist, which is required for ' 'setting up a BigQuery subscription.', ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/pubsub/err_2024_002_vpc_sc_new_subs_create_policy_violated.py ================================================ # # Copyright 2021 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. # Lint as: python3 """ Creating Pub/Sub Push didn't fail because of organization policy. Creating a New Pub/Sub Push Subscription in VPC-SC enabled project is not allowed due to violation of organization policies. This is by design in VPC-SC setup. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = "Request is prohibited by organization's policy" NEW_PUSH_SUBSCRIPTION_CREATE_CHECK_FILTER = [ 'severity=ERROR', 'protoPayload.methodName="google.pubsub.v1.Subscriber.CreateSubscription"', f'protoPayload.status.message:"{MATCH_STR}"', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='pubsub_subscription', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(NEW_PUSH_SUBSCRIPTION_CREATE_CHECK_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue report.add_failed( project, 'Found matching log line for endpoint "' + log_entry['protoPayload']['request']['pushConfig']['pushEndpoint'] + '" is not allowed as the project is configured in VPC-SC perimeter ', ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/pubsub/err_2024_003_snapshot_creation_fails.py ================================================ # # Copyright 2024 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. # Lint as: python3 """Snapshot should be created before it expires in less than 1hour of creation. Unable to create snapshot if the subscription backlog is too old and message of 'subscription's backlog is too old' is displayed on the cloud console. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = ('The operation could not be completed because the requested ' 'source subscription\'s backlog is too old') SNAPSHOT_CREATION_FAIL_CHECK_FILTER = [ 'severity=ERROR', f'protoPayload.status.message:"{MATCH_STR}"', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='pubsub_snapshot', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(SNAPSHOT_CREATION_FAIL_CHECK_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if (logs_by_project.get(context.project_id) and logs_by_project[context.project_id].entries): for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path( log_entry, ('protoPayload', 'status', 'message'), default=''): continue report.add_failed( project, 'The snapshot creation fails since backlog in subscription is greater than 6days23hours' + 'which makes it eligible to expire in 1hour after creation', ) return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/pubsub/err_2025_001_push_service_agent_permission.py ================================================ # Copyright 2024 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 # 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. """Pub/Sub push subscription service agent has the Service Account Token Creator Role. The Pub/Sub service agent (service-{project-number}@gcp-sa-pubsub.iam.gserviceaccount.com) requires the Service Account Token Creator Role (roles/iam.serviceAccountTokenCreator) on the service account configured for a push subscription with authentication enabled. This allows Pub/Sub to generate tokens for authenticating to the push endpoint. """ from gcpdiag import lint, models from gcpdiag.queries import crm, iam, pubsub TOKEN_CREATOR_ROLE = 'roles/iam.serviceAccountTokenCreator' PUBSUB_SERVICE_AGENT_ROLE = 'roles/pubsub.serviceAgent' subscriptions = {} def prefetch_rule(context: models.Context): subscriptions[context.project_id] = pubsub.get_subscriptions(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Run the rule.""" project = crm.get_project(context.project_id) project_subscriptions = subscriptions.get(context.project_id) if not project_subscriptions: report.add_skipped(project, 'no Pub/Sub subscriptions found') return project_number = crm.get_project(context.project_id).number pubsub_service_agent = ( f'serviceAccount:service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com' ) project_iam_policy = iam.get_project_policy(context) for sub in project_subscriptions.values(): if not sub.is_push_subscription() or 'oidcToken' not in sub.push_config: report.add_ok(sub) continue service_account_email = sub.push_config['oidcToken']['serviceAccountEmail'] sa_iam_policy = iam.get_service_account_iam_policy( context=context, service_account=service_account_email) has_permission = sa_iam_policy.has_role_permissions( pubsub_service_agent, TOKEN_CREATOR_ROLE) or project_iam_policy.has_role_permissions( pubsub_service_agent, TOKEN_CREATOR_ROLE) if not has_permission: report.add_failed( sub, (f'The Pub/Sub service agent ({pubsub_service_agent}) is missing the' f' {TOKEN_CREATOR_ROLE} role on the service account' f' {service_account_email} or on the project.'), ) else: report.add_ok(sub) ================================================ FILE: gcpdiag/lint/pubsub/pubsub_rules_snapshot_test.py ================================================ # 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. """Generalize rule snapshot testing.""" from gcpdiag.lint import pubsub, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = pubsub project_id = 'gcpdiag-pubsub1-aaaa' ================================================ FILE: gcpdiag/lint/pubsub/snapshots/BP_2024_001.txt ================================================ * pubsub/BP/2024_001: Oldest Unacked Message Age Value less than 24 hours. - projects/gcpdiag-pubsub1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/pubsub/snapshots/ERR_2024_001.txt ================================================ * pubsub/ERR/2024_001: Pub/Sub Bigquery Subscription Created using Exist BigQuery table. - projects/gcpdiag-pubsub1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/pubsub/snapshots/ERR_2024_002.txt ================================================ * pubsub/ERR/2024_002: Creating Pub/Sub Push didn't fail because of organization policy. - projects/gcpdiag-pubsub1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/pubsub/snapshots/ERR_2024_003.txt ================================================ * pubsub/ERR/2024_003: Snapshot should be created before it expires in less than 1hour of creation. - projects/gcpdiag-pubsub1-aaaa [SKIP] logging api is disabled ================================================ FILE: gcpdiag/lint/pubsub/snapshots/ERR_2025_001.txt ================================================ * pubsub/ERR/2025_001: Pub/Sub push subscription service agent has the Service Account Token Creator Role. - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [ OK ] - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1 [ OK ] - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1 [ OK ] - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-bqdlqsubscription-9pm6hng1 [ OK ] - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-gcsdlqsubscription-9pm6hng1 [ OK ] ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2023_001.txt ================================================ * pubsub/WARN/2023_001: Project should not have a detached subscription. - projects/gcpdiag-pubsub1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2023_002.txt ================================================ * pubsub/WARN/2023_002: BigQuery subscription should have a dead-letter topic attached. - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-bqdlqsubscription-9pm6hng1 [SKIP] is not a BigQuery Subscription - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-gcsdlqsubscription-9pm6hng1 [SKIP] is not a BigQuery Subscription - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1 [SKIP] is not a BigQuery Subscription - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1 [ OK ] - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [SKIP] is not a BigQuery Subscription ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2023_003.txt ================================================ * pubsub/WARN/2023_003: Each topic has at least one subscription attached. - projects/gcpdiag-pubsub1-aaaa [ OK ] All active topics have subscriptions ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2023_004.txt ================================================ * pubsub/WARN/2023_004: Project should not have a subscription without a topic attached. - projects/gcpdiag-pubsub1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2023_005.txt ================================================ * pubsub/WARN/2023_005: Pub/Sub service account has BigQuery Permissions if BigQuery Subscription(s) exist. - projects/gcpdiag-pubsub1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2023_006.txt ================================================ * pubsub/WARN/2023_006: Push delivery requests for push subscriptions are not failing. - projects/gcpdiag-pubsub1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2024_001.txt ================================================ * pubsub/WARN/2024_001: Pub/Sub service account has the Publisher and Subscriber Permissions if DLQ exist. - projects/gcpdiag-pubsub1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2024_002.txt ================================================ * pubsub/WARN/2024_002: Pub/Sub service account has GCS permissions if GCS subscription(s) exist. - projects/gcpdiag-pubsub1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/pubsub/snapshots/WARN_2024_003.txt ================================================ * pubsub/WARN/2024_003: Pub/Sub service account has the Encrypter and Decrypter Role if CMEK exist. (CloudKMS api is disabled) [SKIP] ================================================ FILE: gcpdiag/lint/pubsub/warn_2023_001_detached_subscription_exists.py ================================================ # 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. # Lint as: python3 """Project should not have a detached subscription. A detached subscription is one whose reading privilege from the topic has been revoked; it's retained messages are also deleted. To free up the quota, it should be deleted. """ from gcpdiag import lint, models from gcpdiag.queries import crm, pubsub def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check if the project has a detached subscription.""" subscriptions = pubsub.get_subscriptions(context) detached_subscription_exists = False if not subscriptions: report.add_skipped(None, "no subscriptions found") for _, subscription in sorted(subscriptions.items()): if subscription.is_detached(): report.add_failed(subscription) detached_subscription_exists = True if not detached_subscription_exists: report.add_ok(crm.get_project(context.project_id)) ================================================ FILE: gcpdiag/lint/pubsub/warn_2023_002_bq_subscription_has_dlq_topic.py ================================================ # 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. # Lint as: python3 """BigQuery subscription should have a dead-letter topic attached. A BigQuery subscription could be configured to forward undeliverable/failed messages to a special dead-letter topic for further analysis/handling. """ from gcpdiag import lint, models from gcpdiag.queries import pubsub def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check if the BigQuery subscription has dead-letter topic .""" subscriptions = pubsub.get_subscriptions(context) if not subscriptions: report.add_skipped(None, "no subscriptions found") for _, subscription in sorted(subscriptions.items()): if subscription.is_big_query_subscription(): if subscription.has_dead_letter_topic(): report.add_ok(subscription) else: report.add_failed(subscription, "has no dead-letter topic attached") else: report.add_skipped(subscription, "is not a BigQuery Subscription") ================================================ FILE: gcpdiag/lint/pubsub/warn_2023_003_topic_atleastone_sub.py ================================================ # 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. # Lint as: python3 """Each topic has at least one subscription attached. Without a subscription, subscribers cannot pull messages or receive pushed messages published to the topic. At the end of the max message retention period, the messages will be discarded from Pub/Sub regardless, resulting in loss of data published to the topic. """ from gcpdiag import lint, models from gcpdiag.queries import crm, pubsub def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check if a valid topic has a subscription attached.""" topics = pubsub.get_topics(context) subscriptions = pubsub.get_subscriptions(context) for _, subscription in subscriptions.items(): if (subscription.topic != "_deleted_topic_" and subscription.topic.full_path in topics): del topics[subscription.topic.full_path] if topics: for _, topic in topics.items(): report.add_failed(topic) else: report.add_ok( crm.get_project(context.project_id), "All active topics have subscriptions", ) ================================================ FILE: gcpdiag/lint/pubsub/warn_2023_004_orphaned_subscription_exists.py ================================================ # 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. # Lint as: python3 """Project should not have a subscription without a topic attached. For a subscription whose topic is deleted, it cannot be reattached to a new topic and thus cannot receive new published messages. Messages in the subscription will expire after the message retention period if unacked, and discarded from Pub/Sub which may lead to data loss. The subscription is then counting as quota consumed for an unusable resource. """ from gcpdiag import lint, models from gcpdiag.queries import crm, pubsub def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check if subscription is attached to a valid topic.""" subscriptions = pubsub.get_subscriptions(context) orphaned_subscription_exists = False if not subscriptions: report.add_skipped(None, "no subscriptions found") for _, subscription in subscriptions.items(): if subscription.topic == "_deleted_topic_": report.add_failed(subscription) orphaned_subscription_exists = True if not orphaned_subscription_exists: report.add_ok(crm.get_project(context.project_id)) ================================================ FILE: gcpdiag/lint/pubsub/warn_2023_005_bq_subscription_permisions.py ================================================ # 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. # Lint as: python3 """Pub/Sub service account has BigQuery Permissions if BigQuery Subscription(s) exist. For any BigQuery subscriptions to deliver messages successfully, they should have the appropriate BigQuery Editor permissions to the appropriate service. """ import re from gcpdiag import lint, models from gcpdiag.queries import crm, iam, pubsub policies = {} def prefetch_rule(context: models.Context): policies[context.project_id] = iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check if subscription has relevant BQ permissions.""" role_bq_data_editor = 'roles/bigquery.dataEditor' project = crm.get_project(context.project_id) project_nr = crm.get_project(context.project_id).number bq_subscriptions_exist = False subscriptions = pubsub.get_subscriptions(context) if not subscriptions: report.add_skipped(None, 'no subscriptions found') for _, subscription in subscriptions.items(): if bq_subscriptions_exist: break elif subscription.is_big_query_subscription(): bq_subscriptions_exist = True if not bq_subscriptions_exist: report.add_skipped(None, 'no BQ subscriptions found') else: service_account_re = re.compile('serviceAccount:service-' + str(project_nr) + '@gcp-sa-pubsub.iam.gserviceaccount.com') member = next( filter( service_account_re.match, policies[context.project_id].get_members(), ), None, ) if not member: report.add_failed(project, 'no Pub/Sub Service Account found') elif bq_subscriptions_exist and not policies[ context.project_id].has_role_permissions(member, role_bq_data_editor): report.add_failed( project, f'{member} does not have permissions for the role' f' {role_bq_data_editor}', ) else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/pubsub/warn_2023_006_push_requests_failing.py ================================================ # Copyright 2024 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. # Lint as: python3 """Push delivery requests for push subscriptions are not failing. For any push subscription, delivery to the endpoint should return an ack response for successfully processed messages. """ from itertools import islice from typing import Dict from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import crm, monitoring, pubsub push_request_count: Dict[str, monitoring.TimeSeriesCollection] = {} DURATION = '10m' # 10 minutes - also used to measure delivery latency health MAX_SUBSCRIPTIONS_TO_DISPLAY = 10 def prefetch_rule(context: models.Context): subscription_name = '' query_push_request_count = ( 'fetch pubsub_subscription| metric' ' "pubsub.googleapis.com/subscription/push_request_count"| filter' ' resource.project_id == "{}" &&' ' (resource.subscription_id == "{}") | align rate(1m)|' ' every 1m| group_by' ' [metric.response_class],[value_push_request_count_aggregate:' ' aggregate(value.push_request_count)] | within {}') subscriptions = pubsub.get_subscriptions(context) for _, subscription in subscriptions.items(): if subscription.is_push_subscription(): subscription_name = subscription.name push_request_count[subscription_name] = monitoring.query( context.project_id, query_push_request_count.format(context.project_id, subscription_name, DURATION), ) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if not push_request_count: report.add_skipped(None, 'no subscription metrics found') failing_subs = set() for subscription_name, push_metric in push_request_count.items(): if (not push_metric ): # empty for subscription without traffic for the duration continue else: for metric_values in push_metric.values(): # one of ['ack', 'deadline_exceeded', 'internal', 'invalid', # 'remote_server_4xx', 'remote_server_5xx', 'unreachable'] response_class = get_path(metric_values, ('labels', 'metric.response_class')) if response_class != 'ack': failing_subs.add(subscription_name) # reporting if failing_subs: extra_subs = '' if len(failing_subs) > MAX_SUBSCRIPTIONS_TO_DISPLAY: extra_subs = (', and' f' {len(failing_subs) - MAX_SUBSCRIPTIONS_TO_DISPLAY} more' ' subscriptions') # pylint: disable=line-too-long report.add_failed( project, f'{len(failing_subs)} subscriptions have non-ack responses' ' from the endpoint:' f" {', '.join(islice(failing_subs, MAX_SUBSCRIPTIONS_TO_DISPLAY))}{extra_subs}", ) # pylint: enable=line-too-long else: report.add_ok(project) ================================================ FILE: gcpdiag/lint/pubsub/warn_2024_001_dead_letter_queues_permissions.py ================================================ # Copyright 2024 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. # Lint as: python3 """Pub/Sub service account has the Publisher and Subscriber Permissions if DLQ exist. To forward undeliverable messages to a dead-letter topic, Pub/Sub must have the 'roles/pubsub.subscriber' and 'roles/pubsub.publisher' permissions enabled on the automatically created Pub/Sub service account. """ import re from gcpdiag import lint, models from gcpdiag.queries import crm, iam, pubsub role_publisher = 'roles/pubsub.publisher' role_subscriber = 'roles/pubsub.subscriber' policy_by_project = {} projects = {} def prefetch_rule(context: models.Context): projects[context.project_id] = crm.get_project(context.project_id) policy_by_project[context.project_id] = iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check if the subscription has dead-letter topic .""" subscriptions = pubsub.get_subscriptions(context) if not subscriptions: report.add_skipped(None, 'no subscriptions found') return project = projects[context.project_id] dlq_subscriptions_exist = False required_permission = True for _, subscription in subscriptions.items(): if subscription.has_dead_letter_topic(): dlq_subscriptions_exist = True break if not dlq_subscriptions_exist: report.add_skipped(None, 'has no dead-letter topic attached') return else: project_policy = policy_by_project[context.project_id] service_account_re = re.compile('serviceAccount:service-' + str(project.number) + '@gcp-sa-pubsub.iam.gserviceaccount.com') service_account = next( filter( service_account_re.match, project_policy.get_members(), ), None, ) if not service_account: report.add_failed(project, 'no Pub/Sub Service Account found') if not project_policy.has_role_permissions(service_account, role_publisher): report.add_failed( project, f'{service_account}\nmissing role: {role_publisher}', ) required_permission = False if not project_policy.has_role_permissions(service_account, role_subscriber): report.add_failed( project, f'{service_account}\nmissing role: {role_subscriber}', ) required_permission = False if dlq_subscriptions_exist and required_permission: report.add_ok(project) ================================================ FILE: gcpdiag/lint/pubsub/warn_2024_002_gcs_subscription_permissions.py ================================================ # Copyright 2024 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. # Lint as: python3 """Pub/Sub service account has GCS permissions if GCS subscription(s) exist. For any GCS subscriptions to deliver messages successfully, they should have the appropriate permissions at the project or bucket level. """ import re from typing import Dict from gcpdiag import lint, models from gcpdiag.queries import crm, gcs, iam, pubsub policies: Dict[str, Dict] = {'projects': {}, 'buckets': {}} ROLE_GCS_STORAGE_ADMIN = 'roles/storage.admin' ROLE_LEGACY_BUCKET_READER = 'roles/storage.legacyBucketReader' ROLE_OBJECT_CREATOR = 'roles/storage.objectCreator' def prefetch_rule(context: models.Context): """Collect project & unique bucket policies.""" policies['projects'][context.project_id] = iam.get_project_policy(context) gcs_subscription_buckets = set() subscriptions = pubsub.get_subscriptions(context) if subscriptions: for _, subscription in subscriptions.items(): if subscription.is_gcs_subscription(): gcs_subscription_buckets.add(subscription.gcs_subscription_bucket()) if gcs_subscription_buckets: for bucket in gcs_subscription_buckets: policies['buckets'][bucket] = gcs.get_bucket_iam_policy(context, bucket) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check if subscription has relevant GCS permissions.""" project = crm.get_project(context.project_id) project_nr = crm.get_project(context.project_id).number if not policies['buckets']: report.add_skipped(None, 'no GCS subscriptions found') else: service_account_re = re.compile('serviceAccount:service-' + str(project_nr) + '@gcp-sa-pubsub.iam.gserviceaccount.com') member = next( filter( service_account_re.match, policies['projects'][context.project_id].get_members(), ), None, ) if not member: report.add_failed(project, 'no Pub/Sub Service Account found') # Check at project level for role_gcs_storage_admin # and at bucket level for all(role_legacy_bucket_reader,role_object_creator) elif not check_policy_project(context, member) and not check_policy_buckets(member): report.add_failed( project, f'{member} does not have GCS subscription permissions for the role', ) else: report.add_ok(project) def check_policy_project(context, member) -> bool: """Check if a member is assigned the (one) apt role at project level.""" if not policies['projects'][context.project_id].has_role_permissions( member, ROLE_GCS_STORAGE_ADMIN): return False return True def check_policy_buckets(member) -> bool: """Check if a member is assigned the (two) apt roles at bucket level.""" for bucket_policy in policies['buckets'].values(): if not bucket_policy.has_role_permissions( member, ROLE_LEGACY_BUCKET_READER) or not bucket_policy.has_role_permissions( member, ROLE_OBJECT_CREATOR): return False return True ================================================ FILE: gcpdiag/lint/pubsub/warn_2024_003_cmek_topic_permissions.py ================================================ # Copyright 2024 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. # Lint as: python3 """Pub/Sub service account has the Encrypter and Decrypter Role if CMEK exist. As long as the service account has the CyptoKey Encrypter/Decrypter role, the service can encrypt and decrypt its data. If you revoke this role, or if you disable or destroy the CMEK key, that data can't be accessed. """ import re from gcpdiag import lint, models from gcpdiag.queries import apis, crm, iam, pubsub role_encrypter_decrypter = 'roles/cloudkms.cryptoKeyEncrypterDecrypter' policy_by_project = {} projects = {} def prefetch_rule(context: models.Context): projects[context.project_id] = crm.get_project(context.project_id) policy_by_project[context.project_id] = iam.get_project_policy(context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): """Check if the topic has CMEK .""" if not apis.is_enabled(context.project_id, 'pubsub'): report.add_skipped(None, 'PubSub is disabled') return if not apis.is_enabled(context.project_id, 'cloudkms'): report.add_skipped(None, 'CloudKMS api is disabled') return topics = pubsub.get_topics(context) if not topics: report.add_skipped(None, 'no topics found') return project = projects[context.project_id] required_permission = True customer_encryption_key_exist = False for _, topic in topics.items(): try: kms_key = topic.kms_key_name.split('/') if context.project_id == kms_key[1]: customer_encryption_key_exist = True break except KeyError: continue if not customer_encryption_key_exist: report.add_skipped(None, 'no customer managed encryption topic found') else: project_policy = policy_by_project[context.project_id] service_account_re = re.compile('serviceAccount:service-' + str(project.number) + '@gcp-sa-pubsub.iam.gserviceaccount.com') service_account = next( filter( service_account_re.match, project_policy.get_members(), ), None, ) if not service_account: report.add_failed(project, 'no Pub/Sub Service Account found') if not project_policy.has_role_permissions(service_account, role_encrypter_decrypter): report.add_failed( project, f'{service_account}\nmissing role: {role_encrypter_decrypter}', ) required_permission = False if required_permission: report.add_ok(project) ================================================ FILE: gcpdiag/lint/snapshot_test_base.py ================================================ # Copyright 2021 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. """Base class for snapshot tests""" import io from os import path from unittest import mock from gcpdiag import lint, models from gcpdiag.lint.output import terminal_output from gcpdiag.queries import apis_stub, kubectl_stub, web_stub from gcpdiag.queries.generic_api.api_build import generic_api_stub @mock.patch('gcpdiag.queries.web.get', new=web_stub.get) @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.queries.kubectl.verify_auth', new=kubectl_stub.verify_auth) @mock.patch( 'gcpdiag.queries.kubectl.check_gke_ingress', new=kubectl_stub.check_gke_ingress, ) @mock.patch( 'gcpdiag.queries.generic_api.api_build.get_generic.get_generic_api', new=generic_api_stub.get_generic_api_stub, ) class RulesSnapshotTestBase: """Run snapshot test""" def test_all_rules(self, snapshot): for rule in self._list_rules(): snapshot.snapshot_dir = path.join(path.dirname(self.rule_pkg.__file__), 'snapshots') repo = self._mk_repo(rule) output_stream = io.StringIO() repo.result.add_result_handler( self._mk_output(output_stream).result_handler) repo.run_rules(self._mk_context()) snapshot.assert_match( output_stream.getvalue(), path.join(snapshot.snapshot_dir, f'{rule.rule_class}_{rule.rule_id}.txt'), ) def _list_rules(self): return self._mk_repo().rules_to_run def _mk_context(self): return models.Context(project_id=self.project_id) def _mk_output(self, output_stream): return terminal_output.TerminalOutput(file=output_stream, show_skipped=True) def _mk_repo(self, rule=None): if rule is None: include = None else: include = [ lint.LintRulesPattern( f'{rule.product}/{rule.rule_class}/{rule.rule_id}') ] repo = lint.LintRuleRepository(load_extended=True, include=include) repo.load_rules(self.rule_pkg) return repo ================================================ FILE: gcpdiag/lint/tpu/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/tpu/snapshots/WARN_2022_001.txt ================================================ * tpu/WARN/2022_001: Cloud TPU resource availability - projects/gcpdiag-tpu1-aaaa [ OK ] ================================================ FILE: gcpdiag/lint/tpu/tpu_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import snapshot_test_base, tpu class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = tpu project_id = 'gcpdiag-tpu1-aaaa' ================================================ FILE: gcpdiag/lint/tpu/warn_2022_001_stockout.py ================================================ # # Copyright 2021 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. # Lint as: python3 """Cloud TPU resource availability Resource errors occur when you try to request new resources in a zone that cannot accommodate your request due to the current unavailability of a Cloud TPU resource. """ from boltons.iterutils import get_path from gcpdiag import lint, models from gcpdiag.queries import apis, crm, logs MATCH_STR = 'There is no more capacity in the zone' MATCH_STR2 = 'you can try in another zone where Cloud TPU Nodes' METHOD_NAME = 'google.cloud.tpu.v1.Tpu.CreateNode' LOG_FILTER = [ 'severity=ERROR', f'protoPayload.methodName="{METHOD_NAME}"', f'protoPayload.status.message:"{MATCH_STR}"', f'protoPayload.status.message:"{MATCH_STR2}"', ] logs_by_project = {} def prepare_rule(context: models.Context): logs_by_project[context.project_id] = logs.query( project_id=context.project_id, resource_type='audited_resource', log_name='log_id("cloudaudit.googleapis.com/activity")', filter_str=' AND '.join(LOG_FILTER)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) if not apis.is_enabled(context.project_id, 'tpu'): report.add_skipped(project, 'tpu api is disabled') return # skip entire rule is logging disabled if not apis.is_enabled(context.project_id, 'logging'): report.add_skipped(project, 'logging api is disabled') return if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if log_entry['severity'] != 'ERROR' or \ METHOD_NAME not in get_path(log_entry, ('protoPayload', 'methodName'), default='') or \ MATCH_STR not in get_path(log_entry, ('protoPayload', 'status', 'message'), default='') or \ MATCH_STR2 not in get_path(log_entry, ('protoPayload', 'status', 'message'), default=''): continue report.add_failed(project, 'TPU failed to create due to resource availability') return # in case of there is no log or all logs are non-relevant report.add_ok(project) ================================================ FILE: gcpdiag/lint/vertex/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/vertex/snapshots/WARN_2023_001.txt ================================================ * vertex/WARN/2023_001: Vertex AI Feature Store has a known state - projects/12340015/locations/us-west1/featurestores/gcpdiag_vertex1featurestore_aaaa [ OK ] ================================================ FILE: gcpdiag/lint/vertex/vertex_rules_snapshot_test.py ================================================ # Copyright 2023 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import snapshot_test_base, vertex class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = vertex project_id = 'gcpdiag-vertex1-aaaa' ================================================ FILE: gcpdiag/lint/vertex/warn_2023_001_featurestores_state.py ================================================ # Copyright 2023 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. # Lint as: python3 """Vertex AI Feature Store has a known state Vertex AI featurestores should have a known state """ from gcpdiag import lint, models from gcpdiag.queries import apis, vertex featurestores_by_project = {} def prefetch_rule(context: models.Context): featurestores_by_project[context.project_id] = vertex.get_featurestores( context) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): if not apis.is_enabled(context.project_id, 'aiplatform'): report.add_skipped(None, 'Vertex API is disabled') return featurestores = featurestores_by_project[context.project_id] if not featurestores: report.add_skipped(None, 'No featurestores found') return for featurestore in featurestores.values(): state = vertex.FeaturestoreStateEnum.STATE_UNSPECIFIED if featurestore.state: state = vertex.FeaturestoreStateEnum(featurestore.state) if state != vertex.FeaturestoreStateEnum.STATE_UNSPECIFIED: report.add_ok(featurestore) else: state_message = f'Featurestore state is unknown. State = {state}' report.add_failed(featurestore, state_message) ================================================ FILE: gcpdiag/lint/vpc/__init__.py ================================================ ================================================ FILE: gcpdiag/lint/vpc/bp_2022_001_pga_next_hop.py ================================================ """Explicit routes for Google APIs if the default route is modified. If you need to modify the default route, then add explicit routes for Google API destination IP ranges. https://cloud.google.com/architecture/best-practices-vpc-design#explicit-routes Note: This does not consider tagged routes or shadowed default routes. Validate with a Connectivity Test. """ from gcpdiag import lint, models from gcpdiag.queries import crm, network def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) networks = network.get_networks(context) misconfigured_networks = '' if not networks: report.add_skipped(None, 'rule networks found') # Which networks have a subnet with PGA? pga_networks = {} for net in networks: for subnet in net.subnetworks.values(): if subnet.is_private_ip_google_access(): pga_networks[net.name] = 'missing' # Starts with missing def route continue if not pga_networks: all_skipped = True # There are no subnets with PGA, no need to run the rule else: all_skipped = False explicit_routes = ['199.36.153.8/30', '199.36.153.4/30'] default_internet_gateway = 'default-internet-gateway' routes = network.get_routes(context.project_id) best_routes: dict[tuple[str, str], network.Route] = {} for route in routes: if route.dest_range != '0.0.0.0/0' and route.dest_range not in explicit_routes: continue current_network = route.network.split('/')[-1] key = (current_network, route.dest_range) if key not in best_routes or route.priority < best_routes[key].priority: best_routes[key] = route for route in best_routes.values(): current_network = route.network.split('/')[-1] if current_network not in pga_networks: continue if route.dest_range in explicit_routes: if route.next_hop_gateway and default_internet_gateway in route.next_hop_gateway: if pga_networks[current_network] != 'misconfig': pga_networks[current_network] = 'ok' continue # OK: Next Hop for PGA routes is default-internet-gateway else: pga_networks[current_network] = 'misconfig' continue elif route.dest_range == '0.0.0.0/0': if route.next_hop_gateway and default_internet_gateway in route.next_hop_gateway: if pga_networks[current_network] != 'misconfig': pga_networks[current_network] = 'ok' continue # OK: Next Hop for 0.0.0.0/0 is default-internet-gateway else: if pga_networks[current_network] != 'misconfig': pga_networks[current_network] = 'modified' continue # Dump all the networks and their status for p_net, status in pga_networks.items(): if status == 'modified': missing_text = 'might be missing explicit routes' misconfigured_networks += f' - Network: {p_net} -> {missing_text} \n' all_skipped = False continue elif status == 'misconfig': explicit_text = 'explicit routes not pointing to Default Internet \ Gateway' misconfigured_networks += f' - Network: {p_net} -> \ {explicit_text} \n' elif status == 'missing': missing_text = 'might be missing a default route for Google APIs' misconfigured_networks += f' - Network: {p_net} -> {missing_text} \n' all_skipped = False continue # Results text = 'The following networks have a modified default route and might \ be missing explicit routes to Google APIs:\n' if misconfigured_networks: report.add_failed(project, text + misconfigured_networks) else: report.add_ok(project) if all_skipped: report.add_skipped(project, 'no data') ================================================ FILE: gcpdiag/lint/vpc/bp_2023_001_public_zone_logging.py ================================================ """DNS logging is enabled for public zones. If not enabled, customers wouldn't have visibility to what queries are being made to the zone. """ from gcpdiag import lint, models from gcpdiag.queries import network def run_rule(context: models.Context, report: lint.LintReportRuleInterface): # project = crm.get_project(context.project_id) zones = network.get_zones(context.project_id) if not zones: report.add_skipped(None, 'no zones found') return for c in zones: if (c.is_public and not c.cloud_logging_config): report.add_failed(c, None, ' logging is disabled for this public zone') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/vpc/sec_2023_001_public_zone_dnssec.py ================================================ # Copyright 2023 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. """DNSSEC is enabled for public zones. It is recommended to enable DNSSEC for public zones. """ from gcpdiag import lint, models from gcpdiag.queries import network def run_rule(context: models.Context, report: lint.LintReportRuleInterface): zones = network.get_zones(context.project_id) if not zones: report.add_skipped(None, 'no zones found') return for c in zones: if (c.is_public and not c.dnssec_config_state): report.add_failed(c, None, ' DNSSEC is disabled for this public zone') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/vpc/snapshots/BP_2022_001.txt ================================================ * vpc/BP/2022_001: Explicit routes for Google APIs if the default route is modified. (rule networks found) [SKIP] - projects/gcpdiag-vpc1-aaaa [ OK ] - projects/gcpdiag-vpc1-aaaa [SKIP] no data ================================================ FILE: gcpdiag/lint/vpc/snapshots/BP_2023_001.txt ================================================ * vpc/BP/2023_001: DNS logging is enabled for public zones. (Error: unsupported service: dns) [SKIP] ================================================ FILE: gcpdiag/lint/vpc/snapshots/SEC_2023_001.txt ================================================ * vpc/SEC/2023_001: DNSSEC is enabled for public zones. (Error: unsupported service: dns) [SKIP] ================================================ FILE: gcpdiag/lint/vpc/snapshots/WARN_2022_001.txt ================================================ * vpc/WARN/2022_001: Per-project quotas are not near the limit. - projects/gcpdiag-vpc1-aaaa [SKIP] no data ================================================ FILE: gcpdiag/lint/vpc/snapshots/WARN_2023_001.txt ================================================ * vpc/WARN/2023_001: On-premises hosts can communicate with the service producer's network (no networks found) [SKIP] ================================================ FILE: gcpdiag/lint/vpc/snapshots/WARN_2023_002.txt ================================================ * vpc/WARN/2023_002: Private zone is attached to a VPC. (Error: unsupported service: dns) [SKIP] ================================================ FILE: gcpdiag/lint/vpc/snapshots/WARN_2024_001.txt ================================================ * vpc/WARN/2024_001: No Unused reserved IP addresses are found. - projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address1 [ OK ] - projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address2 [FAIL] Unused Reserved IP address found - projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address3 [FAIL] Unused Reserved IP address found - projects/gcpdiag-vpc1-aaaa/regions/asia-east1/addresses/address4 [FAIL] Unused Reserved IP address found We can reserve IP addresses and persists until we explicitly release it. Unused reserved IP addresses over the time will cause extra money. Make sure you identify and release those IP addresses. https://gcpdiag.dev/rules/vpc/WARN/2024_001 ================================================ FILE: gcpdiag/lint/vpc/vpc_rules_snapshot_test.py ================================================ # 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. """ Generalize rule snapshot testing """ from gcpdiag.lint import snapshot_test_base, vpc class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = vpc project_id = 'gcpdiag-vpc1-aaaa' ================================================ FILE: gcpdiag/lint/vpc/warn_2022_001_project_level_quota.py ================================================ # 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. """Per-project quotas are not near the limit. A project level quota restricts how much of a particular shared Google Cloud resource you can use in a given Cloud project, including hardware, software, and network components. Rule will start failing if any project level quota usage is higher than 80%. """ from typing import Dict from gcpdiag import config, lint, models from gcpdiag.queries import crm, gce, monitoring, quotas GCE_SERVICE_NAME = 'compute.googleapis.com' # name of the quota limit : name of the quota metric QUOTA_LIST = { 'BACKEND-BUCKETS-per-project': 'compute.googleapis.com/backend_buckets', 'BACKEND-SERVICES-per-project': 'compute.googleapis.com/backend_services', 'FIREWALLS-per-project': 'compute.googleapis.com/firewalls', 'FORWARDING-RULES-per-project': 'compute.googleapis.com/forwarding_rules', 'GLOBAL-EXTERNAL-MANAGED-FORWARDING-RULES-per-project': 'compute.googleapis.com/global_external_managed_forwarding_rules', 'INTERNAL-TRAFFIC-DIRECTOR-FORWARDING-RULES-per-project': 'compute.googleapis.com/internal_traffic_director_forwarding_rules', 'GLOBAL-INTERNAL-ADDRESSES-per-project': 'compute.googleapis.com/global_internal_addresses', 'HEALTH-CHECK-SERVICES-per-project': 'compute.googleapis.com/health_check_services', 'HEALTH-CHECKS-per-project': 'compute.googleapis.com/health_checks', 'IMAGES-per-project': 'compute.googleapis.com/images', 'MACHINE-IMAGES-per-project': 'compute.googleapis.com/machine_images', 'INSTANCE-TEMPLATES-per-project': 'compute.googleapis.com/instance_templates', 'INTERCONNECTS-per-project': 'compute.googleapis.com/interconnects', 'INTERCONNECT-TOTAL-GBPS-per-project': 'compute.googleapis.com/interconnect_total_gbps', 'IN-USE-ADDRESSES-per-project': 'compute.googleapis.com/global_in_use_addresses', 'NETWORKS-per-project': 'compute.googleapis.com/networks', 'NETWORK-FIREWALL-POLICIES-per-project': 'compute.googleapis.com/network_firewall_policies', 'NETWORK-ENDPOINT-GROUPS-per-project': 'compute.googleapis.com/global_network_endpoint_groups', 'NOTIFICATION-ENDPOINTS-per-project': 'compute.googleapis.com/notification_endpoints', 'PUBLIC-ADVERTISED-PREFIXES-per-project': 'compute.googleapis.com/public_advertised_prefixes', 'PUBLIC-DELEGATED-PREFIXES-per-project': 'compute.googleapis.com/global_public_delegated_prefixes', 'ROUTERS-per-project': 'compute.googleapis.com/routers', 'ROUTES-per-project': 'compute.googleapis.com/routes', 'PACKET-MIRRORINGS-per-project': 'compute.googleapis.com/packet_mirrorings', 'SECURITY-POLICIES-per-project': 'compute.googleapis.com/security_policies', 'SECURITY-POLICY-CEVAL-RULES-per-project': 'compute.googleapis.com/security_policy_ceval_rules', 'SECURITY-POLICY-RULES-per-project': 'compute.googleapis.com/security_policy_rules', 'SNAPSHOTS-per-project': 'compute.googleapis.com/snapshots', 'SSL-CERTIFICATES-per-project': 'compute.googleapis.com/ssl_certificates', 'SSL-POLICIES-per-project': 'compute.googleapis.com/ssl_policies', 'STATIC-ADDRESSES-per-project': 'compute.googleapis.com/global_static_addresses', 'STATIC-BYOIP-ADDRESSES-per-project': 'compute.googleapis.com/global_static_byoip_addresses', 'EXTERNAL-IPV6-SPACES-per-project': 'compute.googleapis.com/global_external_ipv6_spaces', 'SUBNETWORKS-per-project': 'compute.googleapis.com/subnetworks', 'PRIVATE-V6-ACCESS-SUBNETWORKS-per-project': 'compute.googleapis.com/private_v6_access_subnetworks', 'SUBNETWORK-RANGES-UNDER-ALL-AGGREGATES-per-project': 'compute.googleapis.com/subnetwork_ranges_under_all_aggregates', 'TARGET-GRPC-PROXIES-per-project': 'compute.googleapis.com/target_grpc_proxies', 'TARGET-HTTP-PROXIES-per-project': 'compute.googleapis.com/target_http_proxies', 'TARGET-HTTPS-PROXIES-per-project': 'compute.googleapis.com/target_https_proxies', 'TARGET-INSTANCES-per-project': 'compute.googleapis.com/target_instances', 'TARGET-POOLS-per-project': 'compute.googleapis.com/target_pools', 'TARGET-SSL-PROXIES-per-project': 'compute.googleapis.com/target_ssl_proxies', 'TARGET-TCP-PROXIES-per-project': 'compute.googleapis.com/target_tcp_proxies', 'TARGET-VPN-GATEWAYS-per-project': 'compute.googleapis.com/target_vpn_gateways', 'CPUS-ALL-REGIONS-per-project': 'compute.googleapis.com/cpus_all_regions', 'GPUS-ALL-REGIONS-per-project': 'compute.googleapis.com/gpus_all_regions', 'URL-MAPS-per-project': 'compute.googleapis.com/url_maps', 'VPN-GATEWAYS-per-project': 'compute.googleapis.com/vpn_gateways', 'EXTERNAL-VPN-GATEWAYS-per-project': 'compute.googleapis.com/external_vpn_gateways', 'VPN-TUNNELS-per-project': 'compute.googleapis.com/vpn_tunnels', 'XPN-SERVICE-PROJECTS-per-project': 'compute.googleapis.com/xpn_service_projects' } # percentage of the quota limit usage QUOTA_LIMIT_THRESHOLD = 0.80 _query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} def prefetch_rule(context: models.Context): quota_limit_names = '|'.join(QUOTA_LIST.keys()) params = { 'service_name': GCE_SERVICE_NAME, 'limit_name': quota_limit_names, 'within_days': config.get('within_days') } _query_results_per_project_id[context.project_id] = \ monitoring.query( context.project_id, quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params)) def run_rule(context: models.Context, report: lint.LintReportRuleInterface): project = crm.get_project(context.project_id) region = gce.Region(context.project_id, {'name': 'global', 'selfLink': ''}) #set region to global as this is project level quota if len(_query_results_per_project_id[context.project_id]) == 0: report.add_skipped(project, 'no data') return all_skipped = True exceeded_quotas = '' for quota_metrics_name in QUOTA_LIST.values(): ts_key = frozenset({ f'resource.project_id:{context.project_id}', f'metric.quota_metric:{quota_metrics_name}', f'resource.location:{region.name}' }) try: ts = _query_results_per_project_id[context.project_id][ts_key] all_skipped = False except KeyError: # silently skip continue # did we exceeded threshold on any day? ratio = 0 for day_value in ts['values']: ratio = max(ratio, day_value[0]) if ratio > QUOTA_LIMIT_THRESHOLD: exceeded_quotas += f' - quota metric: {quota_metrics_name}.\n' #verify and report the result if len(exceeded_quotas) > 0: report.add_failed( project, ('The following quotas in this project have been exceeded recently:\n' + exceeded_quotas)) else: report.add_ok(project) # report skip if all data for region not available if all_skipped: report.add_skipped(project, 'no data') ================================================ FILE: gcpdiag/lint/vpc/warn_2023_001_psa_no_export_custom_routes.py ================================================ # Copyright 2023 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. """On-premises hosts can communicate with the service producer's network When you create a private connection, the VPC network and service producer's network only exchange subnet routes by default. Enabling the export of custom routes to this private connection allows on-premises hosts to access the service producer's network via private services access. """ from gcpdiag import lint, models from gcpdiag.queries import interconnect, network def run_rule(context: models.Context, report: lint.LintReportRuleInterface): networks = network.get_networks(context) if not networks: report.add_skipped(None, 'no networks found') return for net in networks: peerings = net.peerings all_custom_routes_exported = True for peering in peerings: if peering.name == 'servicenetworking-googleapis-com': if not peering.exports_custom_routes: all_custom_routes_exported = False break else: report.add_ok(net) if not all_custom_routes_exported: routes = network.get_routes(context.project_id) for route in routes: if ((route.next_hop_hub or route.next_hop_vpn_tunnel) and (net.full_path in route.network)): report.add_failed( net, 'Private Service Access not exporting custom routes.') break attachments = interconnect.get_vlan_attachments(context.project_id) if attachments: report.add_failed( net, 'Private Service Access not exporting custom routes.') break ================================================ FILE: gcpdiag/lint/vpc/warn_2023_002_private_zone_attachment.py ================================================ # Copyright 2023 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. """Private zone is attached to a VPC. If not attached to a VPC, Private zones will not be usable. """ from gcpdiag import lint, models from gcpdiag.queries import network def run_rule(context: models.Context, report: lint.LintReportRuleInterface): zones = network.get_zones(context.project_id) if not zones: report.add_skipped(None, 'no zones found') return for c in zones: if (not c.is_public and not c.vpc_attached): report.add_failed(c, None, ' Private zone that is not attached to a VPC') else: report.add_ok(c) ================================================ FILE: gcpdiag/lint/vpc/warn_2024_001_unused_reserved_ip_addresses.py ================================================ # Copyright 2024 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. """No Unused reserved IP addresses are found. We can reserve IP addresses and persists until we explicitly release it. Unused reserved IP addresses over the time will cause extra money. Make sure you identify and release those IP addresses. """ from gcpdiag import lint, models from gcpdiag.queries import network ip_addresses = {} def run_rule(context: models.Context, report: lint.LintReportRuleInterface): ip_addresses[context.project_id] = network.get_addresses(context.project_id) addresses = ip_addresses[context.project_id] if not addresses: report.add_skipped(None, 'no Reserved IP addresses found') return for address in addresses: if address.status == 'RESERVED': report.add_failed(address, 'Unused Reserved IP address found') else: report.add_ok(address) ================================================ FILE: gcpdiag/models.py ================================================ # Copyright 2021 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. # Lint as: python3 """Data structures representing generic objects in GCP.""" import abc import dataclasses import re from types import MappingProxyType from typing import Any, Generic, Iterable, List, Mapping, Optional, TypeVar from gcpdiag import context as gcpdiag_context from gcpdiag import utils def _mapping_str(mapping: Mapping[str, str]) -> str: return ','.join(f'{k}={v}' for k, v in sorted(mapping.items())) class Messages(dict): def get_msg(self, template: str, **kwargs): return self.get( template, 'NOTICE: No message available to parse for this step').format(**kwargs) T = TypeVar('T') V = TypeVar('V', bound=Any) class Parameter(dict[T, V], Generic[T, V]): """Class to store parameters""" def __init__(self, *args, **kwargs): super().__init__() for dict_arg in args: for key, value in dict_arg.items(): self[key] = value for key, value in kwargs.items(): self[key] = value def _parse_value(self, value: str) -> Any: """Make all values lower string and strip whitespaces.""" if isinstance(value, str): return value.strip() return value def __setitem__(self, key: T, value: V) -> None: super().__setitem__(key, self._parse_value(value)) def update(self, *args, **kwargs) -> None: for k, v in dict(*args, **kwargs).items(): self[k] = v def setdefault(self, key: T, default: V = None) -> V: if key not in self: converted_default = self._parse_value(default) if isinstance( default, str) else default self[key] = converted_default return super().setdefault(key, self[key]) def __str__(self): return _mapping_str(self) @dataclasses.dataclass class Context: """List of resource groups / scopes that should be analyzed.""" # project_id of project that is being analyzed, mandatory project_id: str # a pattern of sub project resources that match resources_pattern: Optional[re.Pattern] # list of GCP all locations to use as linting scope # i.e. regions (e.g.: 'us-central1') or zone (e.g.: 'us-central1-a'). # a compiled project resources provided by user locations_pattern: Optional[re.Pattern] # list of "label sets" that must match. labels: Optional[Mapping[str, str]] # list of "runbook parameters sets" that must match. parameters: Parameter[str, Any] # Optional provider for context-specific operations (e.g., thread setup) context_provider: Optional[gcpdiag_context.ContextProvider] = None def copy_with(self, **changes) -> 'Context': """Returns a new Context instance with the specified attributes changed.""" return dataclasses.replace(self, **changes) # the selected resources are the intersection of project_id, locations, # and labels(i.e. all must match), but each value in locations, and # labels is a OR, so it means: # project_id AND # (region1 OR region2) AND # ({label1=value1,label2=value2} OR {label3=value3}) def __init__( self, project_id: str, locations: Optional[Iterable[str]] = None, labels: Optional[Mapping[str, str]] = None, parameters: Optional[Parameter[str, str]] = None, resources: Optional[Iterable[str]] = None, context_provider: Optional[gcpdiag_context.ContextProvider] = None, **kwargs, ): """Args: project: project_id of project that should be inspected. locations: only include resources in these GCP locations. labels: only include resources with these labels. Expected is a dict, is a set of key=value pairs that must match. Example: `{'key1'='bla', 'key2'='baz'}`. This will match resources that either have key1=bla or key2=baz. resources: only include sub project resources with this name attribute. context_provider: Optional provider for context-specific operations. """ self.project_id = project_id self.context_provider = context_provider if 'locations_pattern' in kwargs: self.locations_pattern = kwargs['locations_pattern'] elif locations: if not isinstance(locations, List): raise ValueError( str(locations) + ' did not supply full list of locations') for location in locations: if not (utils.is_region(location) or utils.is_zone(location)): raise ValueError(location + ' does not look like a valid region/zone') self.locations_pattern = re.compile('|'.join(locations), re.IGNORECASE) else: self.locations_pattern = None if labels: if not isinstance(labels, Mapping): raise ValueError('labels must be Mapping[str,str]]') self.labels = labels else: self.labels = None if 'resources_pattern' in kwargs: self.resources_pattern = kwargs['resources_pattern'] elif resources: if not isinstance(resources, List): raise ValueError( str(resources) + ' did not supply full list of resources') self.resources_pattern = re.compile('|'.join(resources), re.IGNORECASE) else: self.resources_pattern = None if parameters: if not isinstance(parameters, Mapping): raise ValueError('parameters must be Mapping[str,str]]') self.parameters = Parameter(parameters) else: self.parameters = Parameter() self.parameters['project_id'] = self.project_id def __str__(self): string = 'project: ' + self.project_id if self.resources_pattern: string += ', resources: ' + self.resources_pattern.pattern if self.locations_pattern: string += ', locations (regions/zones): ' + self.locations_pattern.pattern if self.labels: string += ', labels: {' + _mapping_str(self.labels) + '}' if self.parameters: string += ', parameters: {' + _mapping_str(self.parameters) + '}' return string def __hash__(self): return self.__str__().__hash__() IGNORELOCATION = 'IGNORELOCATION' IGNORELABEL = MappingProxyType({'IGNORELABEL': 'IGNORELABEL'}) def match_project_resource( self, resource: Optional[str], location: Optional[str] = IGNORELOCATION, labels: Optional[Mapping[str, str]] = IGNORELABEL, ) -> bool: """Compare resource fields to the name and/or location and/or labels supplied by the user and return a boolean outcome depending on the context. Args: resource: name of the resource under analysis. Always inspected if user supplied a name criteria location: region or zone of the resource. IGNORELOCATION completely skips analysis of the location even if user has supplied location criteria labels: labels in the resource under inspection. Functions which do not support labels can completely skip checks by providing the IGNORELABEL constant Returns: A boolean which indicates the outcome of the analysis """ # Match resources. if self.resources_pattern: if not resource or not self.resources_pattern.match(resource): return False # Match location. if self.locations_pattern and location is not self.IGNORELOCATION: if not location or not self.locations_pattern.match(location): return False # Match labels. if self.labels and labels is not self.IGNORELABEL: if not labels: return False if any(labels.get(k) == v for k, v in self.labels.items()): pass else: return False # Everything matched. return True class Resource(abc.ABC): """Represents a single resource in GCP.""" _project_id: str def __init__(self, project_id): self._project_id = project_id def __str__(self): return self.full_path def __hash__(self): return self.full_path.__hash__() def __lt__(self, other): return self.full_path < other.full_path def __eq__(self, other): if self.__class__ == other.__class__: return self.full_path == other.full_path else: return False @property def project_id(self) -> str: """Project id (not project number).""" return self._project_id @property @abc.abstractmethod def full_path(self) -> str: """Returns the full path of this resource. Example: 'projects/gcpdiag-gke-1-9b90/zones/europe-west4-a/clusters/gke1' """ pass @property def short_path(self) -> str: """Returns the short name for this resource. Note that it isn't clear from this name what kind of resource it is. Example: 'gke1' """ return self.full_path ================================================ FILE: gcpdiag/models_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Unit tests for test.py.""" import pytest from gcpdiag import models def test_context_region_exception(): """Context constructor with non-list regions should raise an exception.""" with pytest.raises(ValueError): models.Context(project_id='project1', locations='us-central1-b') def test_context_to_string(): """Verify stringification of Context with and without regions/labels.""" c = models.Context(project_id='project1') assert str(c) == 'project: project1, parameters: {project_id=project1}' c = models.Context(project_id='project1', locations=[]) assert str(c) == 'project: project1, parameters: {project_id=project1}' c = models.Context(project_id='project1', locations=['us-central1']) assert str(c) == ( 'project: project1, locations (regions/zones): us-central1, ' 'parameters: {project_id=project1}') c = models.Context(project_id='project1', locations=['us-west1', 'us-west2'], resources=['dev-1', 'prod-1']) assert str(c) == ( 'project: project1, resources: dev-1|prod-1, locations ' '(regions/zones): us-west1|us-west2, parameters: {project_id=project1}') c = models.Context(project_id='project1', labels={'A': 'B', 'X': 'Y'}) assert str( c ) == 'project: project1, labels: {A=B,X=Y}, parameters: {project_id=project1}' c = models.Context(project_id='project1', locations=['us-central1'], labels={'X': 'Y'}, resources=['name']) assert str(c) == ( 'project: project1, resources: name, locations (regions/zones): us-central1, ' 'labels: {X=Y}, parameters: {project_id=project1}') def test_match_project_resource(): """Verify Context matching evaluations""" # common use case simply lint one resource. c = models.Context(project_id='project1', resources=['gke-prod']) assert c.match_project_resource(resource='gke-prod', location='', labels={}) assert c.match_project_resource(resource='gke-prod', location='us-central1', labels={'X': 'Y'}) assert not c.match_project_resource( resource='', location='us-central1', labels={'X': 'Y'}) # More complex context scope c = models.Context(project_id='project1', locations=['us-central1', 'us-central2'], labels={ 'X': 'Y', 'A': 'B' }, resources=['dev-*', '^bastion-(host|machine)$']) assert c.match_project_resource(resource='bastion-host', location='us-central1', labels={'X': 'Y'}) assert c.match_project_resource(resource='dev-frontend', location='us-central1', labels={'X': 'Y'}) assert c.match_project_resource(resource='dev-backend', location='us-central1', labels={'X': 'Y'}) assert not c.match_project_resource( resource='', location='us-central1', labels={'X': 'Y'}) assert not c.match_project_resource( resource='bastion-host', location='', labels={'X': 'Y'}) assert not c.match_project_resource( resource='bastion-host', location='us-central1', labels={'X': 'B'}) assert not c.match_project_resource( resource='name', labels={'X': 'Y'}, location='us-central3') assert not c.match_project_resource( location='us-central3', labels={'X': 'Y'}, resource='uninterested-name') assert not c.match_project_resource(resource='', location='', labels={}) # allow some products to ignore locations or labels if there are tricky to support assert c.match_project_resource(resource='bastion-host') assert c.match_project_resource(resource='BASTION-machine') assert c.match_project_resource(resource='dev-backend', labels={'X': 'Y'}) assert c.match_project_resource(resource='dev-frontend', labels={'X': 'Y'}) # Zones under a region should be considered if user set's on it's region assert c.match_project_resource(resource='bastion-host', location='us-central2-a') # Test IGNORELOCATION AND IGNORELABEL assert c.match_project_resource(resource='bastion-host', location=c.IGNORELOCATION, labels=c.IGNORELABEL) # If for some strange coincidence customer's label is IGNORELABEL evaluation # should fail if it doesn't match context. assert not c.match_project_resource(resource='bastion-host', labels={'IGNORELABEL': 'IGNORELABEL'}) def test_generic_declaration(): param = models.Parameter({'key': True}) assert param.get('key') def test_string_strip(): param = models.Parameter() param['bool_value_true'] = ' TRUE ' assert param['bool_value_true'] == 'TRUE' def test_update_method(): param = models.Parameter() updates = {'new_string': 'world'} param.update(updates) assert param['new_string'] == 'world' def test_setdefault_existing_key(): param = models.Parameter({'existing_key': '100'}) old_val = param.setdefault('existing_key', '200') assert old_val == '100' def test_setdefault_non_existing_key(): param = models.Parameter() param.setdefault('new_key', '300') assert param['new_key'] == '300' ================================================ FILE: gcpdiag/product_list.py ================================================ """ Returns project-wide product list """ from typing import Dict def get_product_list() -> Dict: return { 'apigee': '[Apigee API Management](https://cloud.google.com/apigee)', 'asm': '[Anthos Service Mesh](https://cloud.google.com/anthos)', 'bigquery': '[BigQuery](https://cloud.google.com/bigquery)', 'billing': '[Cloud Billing](https://cloud.google.com/billing)', 'cloudrun': '[Cloud Run](https://cloud.google.com/run)', 'cloudsql': '[CloudSQL](https://cloud.google.com/sql)', 'composer': '[Cloud Composer](https://cloud.google.com/composer)', 'crm': '[Cloud Resource Manager](https://cloud.google.com/resource-manager)', 'dataflow': '[Dataflow](https://cloud.google.com/dataflow)', 'datafusion': '[Cloud Data Fusion](https://cloud.google.com/data-fusion)', 'dataproc': '[Cloud Dataproc](https://cloud.google.com/dataproc)', 'gae': '[App Engine](https://cloud.google.com/appengine)', 'gcb': '[Cloud Build](https://cloud.google.com/build)', 'gce': '[Compute Engine](https://cloud.google.com/compute)', 'gcf': '[Cloud Functions](https://cloud.google.com/functions)', 'gcs': '[Cloud Storage](https://cloud.google.com/storage)', 'gke': '[Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)', 'iam': '[Identity and Access Management (IAM)](https://cloud.google.com/iam)', 'interconnect': '[Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)', 'lb': '[Load balancing](https://cloud.google.com/load-balancing)', 'logs': '[Cloud Logging](https://cloud.google.com/logging)', 'monitoring': 'https://cloud.google.com/monitoring', 'notebooks': '[Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)', 'nat': '[Cloud NAT](https://cloud.google.com/nat)', 'pubsub': '[Cloud Pub/Sub](https://cloud.google.com/pubsub/)', 'tpu': '[Cloud TPU](https://cloud.google.com/tpu)', 'vertex': '[Vertex AI](https://cloud.google.com/vertex-ai)', 'vpc': '[Virtual Private Cloud](https://cloud.google.com/vpc)', 'vpn': '[Vpn](https://cloud.google.com/hybrid-connectivity)', } ================================================ FILE: gcpdiag/queries/__init__.py ================================================ ================================================ FILE: gcpdiag/queries/apigee.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to Apigee.""" import functools import re from typing import Dict, Iterable, List, Mapping, Optional import googleapiclient.errors from gcpdiag import caching, config, models from gcpdiag.queries import apis, apis_utils, gce, network from gcpdiag.utils import GcpApiError MIG_STARTUP_SCRIPT_URL = \ 'gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh' class ApigeeEnvironment(models.Resource): """Represents an Apigee Environment https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments#Environment """ def __init__(self, apigee_org, env_name: str): super().__init__(project_id=apigee_org.project_id) self.org_name = apigee_org.name self.name = env_name @property def full_path(self) -> str: return f'organizations/{self.org_name}/environments/{self.name}' class ApigeeOrganization(models.Resource): """Represents an Apigee Organization https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations#Organization """ _resource_data: Optional[dict] _environments: List[ApigeeEnvironment] # It is possible to create an Apigee organization resource in another GCP project, # set the resource_data as optional to avoid permission issues while accessing another GCP project def __init__(self, project_id: str, org_name: str, resource_data: Optional[dict] = None): super().__init__(project_id=project_id) self._resource_data = resource_data self.name = org_name @property def full_path(self) -> str: return f'organizations/{self.name}' @property def environments(self) -> Iterable[ApigeeEnvironment]: if self._resource_data is None: return [] return [ ApigeeEnvironment(self, env) for env in self._resource_data.get('environments', []) ] @property def runtime_type(self) -> str: if self._resource_data is None: return '' return self._resource_data['runtimeType'] @property def runtime_database_encryption_key_name(self) -> str: if self._resource_data is None: return '' return self._resource_data.get('runtimeDatabaseEncryptionKeyName', '') @property def authorized_network(self) -> str: if self._resource_data is None: return '' return self._resource_data.get('authorizedNetwork', '') @property def network(self) -> network.Network: if self.authorized_network: match = re.match( r'projects/(?P[^/]+)/([^/]+)/networks/(?P[^/]+)$', self.authorized_network) # Check whether the authorized network is a shared VPC network # A shared VPC network is using following format: # `projects/{host-project-id}/{region}/networks/{network-name}` if match: return network.get_network( match.group('project'), match.group('network'), models.Context(project_id=match.group('project'))) else: return network.get_network(self.project_id, self.authorized_network, models.Context(project_id=self.project_id)) return network.get_network(self.project_id, 'default', models.Context(project_id=self.project_id)) class EnvironmentGroup(models.Resource): """Represents an Apigee Environment Group https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.envgroups#resource:-environmentgroup """ _resource_data: dict def __init__(self, apigee_org: ApigeeOrganization, resource_data): super().__init__(project_id=apigee_org.project_id) self._resource_data = resource_data self.org_name = apigee_org.name @property def name(self) -> str: return self._resource_data['name'] @property def full_path(self) -> str: return f'organizations/{self.org_name}/envgroups/{self.name}' @property def host_names(self) -> List[str]: return self._resource_data['hostnames'] class ApigeeInstance(models.Resource): """Represents an Apigee Runtime Instance https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.instances#Instance """ _resource_data: dict def __init__(self, apigee_org: ApigeeOrganization, resource_data): super().__init__(project_id=apigee_org.project_id) self._resource_data = resource_data self.org_name = apigee_org.name @property def name(self) -> str: return self._resource_data['name'] @property def full_path(self) -> str: return f'organizations/{self.org_name}/instances/{self.name}' @property def disk_encryption_key_name(self) -> str: return self._resource_data.get('diskEncryptionKeyName', '') @property def host(self) -> str: return self._resource_data.get('host', '') @property def location(self) -> str: return self._resource_data.get('location', '') @caching.cached_api_call def get_org(context: models.Context) -> Optional[ApigeeOrganization]: """Get Apigee organizations matching the GCP Project Id""" if not apis.is_enabled(context.project_id, 'apigee'): return None apigee_api = apis.get_api('apigee', 'v1', context.project_id) # Apigee Organization : GCP Project = 1 : 1 org_list_query = apigee_api.organizations().list(parent='organizations') try: resp = org_list_query.execute(num_retries=config.API_RETRIES) if 'organizations' not in resp: return None for resp_o in resp['organizations']: if 'organization' not in resp_o or 'projectId' not in resp_o: raise RuntimeError('missing data in organizations.list response') if context.project_id == resp_o['projectId']: org_name = resp_o['organization'] get_org_query = apigee_api.organizations().get( name=f'organizations/{org_name}') get_org_resp = get_org_query.execute(num_retries=config.API_RETRIES) return ApigeeOrganization(context.project_id, resp_o['organization'], get_org_resp) except googleapiclient.errors.HttpError as err: raise GcpApiError(err) from err return None @caching.cached_api_call def get_envgroups( apigee_org: ApigeeOrganization) -> Mapping[str, EnvironmentGroup]: """Get Environment group list by organization name, caching the result.""" envgroups: Dict[str, EnvironmentGroup] = {} apigee_api = apis.get_api('apigee', 'v1') request = apigee_api.organizations().envgroups().list( parent=f'organizations/{apigee_org.name}') for envgroup in apis_utils.list_all( request, next_function=apigee_api.organizations().envgroups().list_next, response_keyword='environmentGroups'): envgroups[envgroup['name']] = EnvironmentGroup(apigee_org=apigee_org, resource_data=envgroup) return envgroups @caching.cached_api_call def get_envgroups_attachments(envgroup_name: str) -> List[str]: """Get Environment group attachments by environment group name, caching the result.""" environments: List[str] = [] apigee_api = apis.get_api('apigee', 'v1') request = apigee_api.organizations().envgroups().attachments().list( parent=envgroup_name) for attachments in apis_utils.list_all( request, next_function=apigee_api.organizations().envgroups().attachments( ).list_next, response_keyword='environmentGroupAttachments'): environments.append(attachments['environment']) return environments @caching.cached_api_call def get_instances( apigee_org: ApigeeOrganization) -> Mapping[str, ApigeeInstance]: """Get instance list from Apigee Organization, caching the result.""" instances: Dict[str, ApigeeInstance] = {} # Not supported for Apigee hybrid. if apigee_org.runtime_type == 'HYBRID': return instances apigee_api = apis.get_api('apigee', 'v1') request = apigee_api.organizations().instances().list( parent=f'organizations/{apigee_org.name}') for instance in apis_utils.list_all( request, next_function=apigee_api.organizations().instances().list_next, response_keyword='instances'): instances[instance['name']] = ApigeeInstance(apigee_org=apigee_org, resource_data=instance) return instances @caching.cached_api_call def get_instances_attachments(instance_name: str) -> List[str]: """Get instance attachments by instance name, caching the result.""" environments: List[str] = [] if not instance_name: return environments apigee_api = apis.get_api('apigee', 'v1') request = apigee_api.organizations().instances().attachments().list( parent=instance_name) for attachments in apis_utils.list_all(request, next_function=apigee_api.organizations( ).instances().attachments().list_next, response_keyword='attachments'): environments.append(attachments['environment']) return environments @functools.lru_cache() def get_network_bridge_instance_groups( project_id: str) -> List[gce.ManagedInstanceGroup]: """Get a list of managed instance groups used by Apigee for routing purposes.""" migs: List[gce.ManagedInstanceGroup] = [] for m in gce.get_region_managed_instance_groups( models.Context(project_id=project_id)).values(): if m.template.get_metadata('startup-script-url') == MIG_STARTUP_SCRIPT_URL: migs.append(m) return migs ================================================ FILE: gcpdiag/queries/apigee_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in apigee.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument DUMMY_PROJECT_ID = 'gcpdiag-apigee1-aaaa' class ApigeeApiStub: """Mock object to simulate apigee api calls.""" def __init__(self, project_id=DUMMY_PROJECT_ID): self.project_id = project_id def organizations(self): return ApigeeOraganizationsApiStub() class ApigeeOraganizationsApiStub(ApigeeApiStub): """Mock object to simulate apigee organizations api calls""" def list(self, parent): return apis_stub.RestCallStub(self.project_id, 'apigee-organizations') def get(self, name): return apis_stub.RestCallStub(self.project_id, 'apigee-organization') def envgroups(self): return ApigeeEnvgroupsApiStub(self.project_id) def instances(self): return ApigeeInstancesApiStub(self.project_id) class ApigeeEnvgroupsApiStub(ApigeeApiStub): """Mock object to simulate apigee environment groups api calls""" def list(self, parent): return apis_stub.RestCallStub( self.project_id, 'apigee-envgroups', default_json_basename='apigee-envgroups-empty') def attachments(self): return ApigeeEnvGroupsAttachmentsApiStub(self.project_id) def list_next(self, previous_request, previous_response): return None class ApigeeInstancesApiStub(ApigeeApiStub): """Mock object to simulate apigee instances api calls""" def list(self, parent): return apis_stub.RestCallStub( self.project_id, 'apigee-instances', default_json_basename='apigee-instances-empty') def attachments(self): return ApigeeInstancesAttachmentsApiStub(self.project_id) def list_next(self, previous_request, previous_response): return None class ApigeeEnvGroupsAttachmentsApiStub(ApigeeApiStub): """Mock object to simulate apigee environment groups attachments api calls""" def list(self, parent): m = re.match(r'organizations/([^/]+)/envgroups/(.*)', parent) if m: envgroup_name = m.group(2) return apis_stub.RestCallStub( self.project_id, f'apigee-envgroups-{envgroup_name}-attachments', default_json_basename='apigee-envgroups-attachments-empty') def list_next(self, previous_request, previous_response): return None class ApigeeInstancesAttachmentsApiStub(ApigeeApiStub): """Mock object to simulate apigee instances attachments api calls""" def list(self, parent): m = re.match(r'organizations/([^/]+)/instances/(.*)', parent) if m: instance_name = m.group(2) return apis_stub.RestCallStub( self.project_id, f'apigee-instances-{instance_name}-attachments', default_json_basename='apigee-instances-attachments-empty') def list_next(self, previous_request, previous_response): return None ================================================ FILE: gcpdiag/queries/apigee_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in apigee.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apigee, apis_stub DUMMY_PROJECT_NAME = 'gcpdiag-apigee1-aaaa' DUMMY_APIGEE_ORG_NAME = 'gcpdiag-apigee1-aaaa' DUMMY_APIGEE_ORG_RUNTIME_TYPE = 'CLOUD' DUMMY_APIGEE_NETWORK_NAME = 'apigee-network' DUMMY_APIGEE_ENVGROUP_NAME = 'gcpdiag-demo-envgroup' DUMMY_APIGEE_ENVGROUP_FULL_PATH = \ f'organizations/{DUMMY_APIGEE_ORG_NAME}/envgroups/{DUMMY_APIGEE_ENVGROUP_NAME}' DUMMY_APIGEE_ENVGROUP_HOST_NAMES = ['gcpdiag.apigee.example.com'] DUMMY_APIGEE_ENVGROUP1_ATTACHMENTS_ENV = 'gcpdiag-demo-env-1' DUMMY_APIGEE_ENVGROUP1_NAME = 'gcpdiag-demo-envgroup-1' DUMMY_APIGEE_ENVGROUP1_FULL_PATH = \ f'organizations/{DUMMY_APIGEE_ORG_NAME}/envgroups/{DUMMY_APIGEE_ENVGROUP1_NAME}' DUMMY_APIGEE_INSTANCE1_NAME = 'gcpdiag-apigee1-inst1-aaaa' DUMMY_APIGEE_INSTANCE1_FULL_PATH = \ f'organizations/{DUMMY_APIGEE_ORG_NAME}/instances/{DUMMY_APIGEE_INSTANCE1_NAME}' DUMMY_APIGEE_INSTANCE1_ATTACHMENTS_ENV = 'gcpdiag-demo-env' DUMMY_APIGEE_NETWORK_BRIDGE_INSTANCE_GROUP1_NAME = 'mig-bridge-manager-us-central1' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestOrganization: """Test apigee.Organization.""" def test_get_org(self): """ get_org returns the right apigee organization by project name """ context = models.Context(project_id=DUMMY_PROJECT_NAME) apigee_org = apigee.get_org(context=context) assert apigee_org.name == DUMMY_APIGEE_ORG_NAME assert apigee_org.runtime_type == DUMMY_APIGEE_ORG_RUNTIME_TYPE assert apigee_org.network.project_id == DUMMY_PROJECT_NAME assert apigee_org.network.name == DUMMY_APIGEE_NETWORK_NAME apigee_envs = [e.name for e in apigee_org.environments] assert DUMMY_APIGEE_ENVGROUP1_ATTACHMENTS_ENV in apigee_envs assert DUMMY_APIGEE_INSTANCE1_ATTACHMENTS_ENV in apigee_envs def test_get_envgroups(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) apigee_org = apigee.get_org(context=context) apigee_envgroups = apigee.get_envgroups(apigee_org) assert len(apigee_envgroups) == 2 assert DUMMY_APIGEE_ENVGROUP_NAME in apigee_envgroups e = apigee_envgroups[DUMMY_APIGEE_ENVGROUP_NAME] assert e.full_path == DUMMY_APIGEE_ENVGROUP_FULL_PATH assert e.host_names == DUMMY_APIGEE_ENVGROUP_HOST_NAMES def test_get_envgroups_attachments(self): apigee_envgroups_attachments = apigee.get_envgroups_attachments( envgroup_name=DUMMY_APIGEE_ENVGROUP1_FULL_PATH) assert DUMMY_APIGEE_ENVGROUP1_ATTACHMENTS_ENV in apigee_envgroups_attachments def test_get_instances(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) apigee_org = apigee.get_org(context=context) apigee_instances = apigee.get_instances(apigee_org) assert len(apigee_instances) == 1 assert DUMMY_APIGEE_INSTANCE1_NAME in apigee_instances i = apigee_instances[DUMMY_APIGEE_INSTANCE1_NAME] assert i.full_path == DUMMY_APIGEE_INSTANCE1_FULL_PATH def test_get_instances_attachments(self): apigee_instances_attachments = apigee.get_instances_attachments( instance_name=DUMMY_APIGEE_INSTANCE1_FULL_PATH) assert DUMMY_APIGEE_INSTANCE1_ATTACHMENTS_ENV in apigee_instances_attachments def test_get_network_bridge_instance_groups(self): apigee_network_bridge_migs = apigee.get_network_bridge_instance_groups( project_id=DUMMY_PROJECT_NAME) assert len(apigee_network_bridge_migs) == 1 assert apigee_network_bridge_migs[ 0].name == DUMMY_APIGEE_NETWORK_BRIDGE_INSTANCE_GROUP1_NAME ================================================ FILE: gcpdiag/queries/apis.py ================================================ # Copyright 2021 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. # Lint as: python3 """Build and cache GCP APIs + handle authentication.""" import json import logging import os from typing import Dict, Optional, Set import google.auth import google_auth_httplib2 import googleapiclient.http import httplib2 from google.api_core.client_options import ClientOptions from google.auth import exceptions from google.oauth2 import credentials as oauth2_credentials from googleapiclient import discovery from gcpdiag import caching, config, hooks, utils _credentials = None AUTH_SCOPES = [ 'openid', 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/userinfo.email', ] def _auth_method(): """Calculate proper authentication method based on provided configuration Returns: str: Return type of authentication method """ if config.get('auth_key'): auth_method = 'key' elif config.get('auth_adc'): auth_method = 'adc' else: # use ADC by default auth_method = 'adc' return auth_method def _get_credentials_adc(): logging.debug('auth: using application default credentials') global _credentials if not _credentials: # workaround to avoid log message: # "WARNING:google.auth._default:No project ID could be determined." os.environ.setdefault('GOOGLE_CLOUD_PROJECT', '...fake project id...') _credentials, _ = google.auth.default(scopes=AUTH_SCOPES) return _credentials def _get_credentials_key(): filename = config.get('auth_key') logging.debug('auth: using service account key') global _credentials if not _credentials: _credentials, _ = google.auth.load_credentials_from_file(filename=filename, scopes=AUTH_SCOPES) return _credentials def set_credentials(cred_json): global _credentials if not cred_json: _credentials = None else: _credentials = oauth2_credentials.Credentials.from_authorized_user_info( json.loads(cred_json)) def get_credentials(): if _auth_method() == 'adc': return _get_credentials_adc() elif _auth_method() == 'key': return _get_credentials_key() else: raise AssertionError( 'BUG: AUTH_METHOD method should be one of `adc` or `key`, ' f'but got `{_auth_method()}` instead.' ' Please report at https://gcpdiag.dev/issues/') def _get_project_or_billing_id(project_id: str) -> str: """Return project or billing project id (if defined)""" if config.get('billing_project'): return config.get('billing_project') return project_id def login(): """Force GCP login (this otherwise happens on the first get_api call).""" get_credentials() def get_user_email() -> str: if config.get('universe_domain') != 'googleapis.com': return 'TPC user' credentials = get_credentials().with_quota_project(None) http = google_auth_httplib2.AuthorizedHttp(credentials, http=httplib2.Http()) resp, content = http.request('https://www.googleapis.com/userinfo/v2/me') if resp['status'] != '200': raise RuntimeError(f"can't determine user email. status={resp['status']}") data = json.loads(content) logging.debug('determined my email address: %s', data['email']) return data['email'] @caching.cached_api_call(in_memory=True) def get_api(service_name: str, version: str, project_id: Optional[str] = None, region: Optional[str] = None): """Get an API object, as returned by googleapiclient.discovery.build. If project_id is specified, this will be used as the billed project, and usually you should put there the project id of the project that you are inspecting.""" credentials = get_credentials() def _request_builder(http, *args, **kwargs): del http if 'headers' in kwargs: # thread safety: make sure that original dictionary isn't modified kwargs['headers'] = kwargs['headers'].copy() headers = kwargs.get('headers', {}) headers['user-agent'] = f'gcpdiag/{config.VERSION} (gzip)' if project_id: headers['x-goog-user-project'] = _get_project_or_billing_id(project_id) hooks.request_builder_hook(*args, **kwargs) # thread safety: create a new AuthorizedHttp object for every request # https://github.com/googleapis/google-api-python-client/blob/master/docs/thread_safety.md new_http = google_auth_httplib2.AuthorizedHttp(credentials, http=httplib2.Http()) return googleapiclient.http.HttpRequest(new_http, *args, **kwargs) universe_domain = config.get('universe_domain') cred_universe = getattr(credentials, 'universe_domain', 'googleapis.com') if cred_universe != universe_domain: raise ValueError('credential universe_domain mismatch ' f'{cred_universe} != {universe_domain}') client_options = ClientOptions() if universe_domain != 'googleapis.com': client_options.universe_domain = universe_domain if region: client_options.api_endpoint = f'https://{region}-{service_name}.{universe_domain}' else: client_options.api_endpoint = f'https://{service_name}.{universe_domain}' if service_name in ['compute', 'bigquery', 'storage', 'dns']: client_options.api_endpoint += f'/{service_name}/{version}' api = discovery.build(service_name, version, cache_discovery=False, credentials=credentials, requestBuilder=_request_builder, client_options=client_options) return api @caching.cached_api_call(in_memory=True) def _list_enabled_apis(project_id: str) -> Set[str]: """List all enabled services available to the specified project""" logging.debug('listing enabled APIs') serviceusage = get_api('serviceusage', 'v1', project_id) request = serviceusage.services().list(parent=f'projects/{project_id}', filter='state:ENABLED') enabled_apis: Set[str] = set() try: while request is not None: response = request.execute(num_retries=config.API_RETRIES) if not response: logging.debug("No 'services' found in the response for project: %s", project_id) break services = response.get('services', []) if services is None: logging.debug("No 'services' found in the response for project: %s", project_id) break for service in services: if 'config' in service and 'name' in service['config']: enabled_apis.add(service['config']['name']) request = serviceusage.services().list_next(request, response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return enabled_apis def is_enabled(project_id: str, service_name: str) -> bool: universe_domain = config.get('universe_domain') return f'{service_name}.{universe_domain}' in _list_enabled_apis(project_id) def is_all_enabled(project_id: str, services: list) -> Dict[str, str]: service_state = {} for service in services: if not is_enabled(project_id, service): service_state[service] = 'DISABLED' else: service_state[service] = 'ENABLED' return service_state @caching.cached_api_call(in_memory=True) def list_services_with_state(project_id: str) -> Dict[str, str]: logging.debug('listing all APIs with their state') serviceusage = get_api('serviceusage', 'v1', project_id) request = serviceusage.services().list(parent=f'projects/{project_id}') apis_state: Dict[str, str] = {} try: while request is not None: response = request.execute(num_retries=config.API_RETRIES) for service in response['services']: apis_state.setdefault(service['config']['name'], service['state']) request = serviceusage.services().list_next(request, response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return apis_state def verify_access(project_id: str): """Verify that the user has access to the project, exit with an error otherwise.""" try: if not is_enabled(project_id, 'cloudresourcemanager'): service = f"cloudresourcemanager.{config.get('universe_domain')}" error_msg = ( 'Cloud Resource Manager API must be enabled. To enable, execute:\n' f'gcloud services enable {service} --project={project_id}') raise utils.GcpApiError(response=error_msg, service=service, reason='SERVICE_DISABLED') if not is_enabled(project_id, 'iam'): service = f"iam.{config.get('universe_domain')}" error_msg = ( 'Identity and Access Management (IAM) API must be enabled. To enable, execute:\n' f"gcloud services enable iam.{config.get('universe_domain')} --project={project_id}" ) raise utils.GcpApiError(response=error_msg, service=service, reason='SERVICE_DISABLED') if not is_enabled(project_id, 'logging'): service = f"logging.{config.get('universe_domain')}" warning_msg = ( 'Cloud Logging API is not enabled (related rules will be skipped).' ' To enable, execute:\n' f"gcloud services enable logging.{config.get('universe_domain')} --project={project_id}\n" ) raise utils.GcpApiError(response=warning_msg, service=service, reason='SERVICE_DISABLED') except utils.GcpApiError as err: if 'SERVICE_DISABLED' == err.reason: if f"serviceusage.{config.get('universe_domain')}" == err.service: err.response += ( '\nService Usage API must be enabled. To enable, execute:\n' f"gcloud services enable serviceusage.{config.get('universe_domain')} " f'--project={project_id}') else: logging.error('can\'t access project %s: %s', project_id, err.message) raise err except exceptions.GoogleAuthError as err: logging.error(err) if _auth_method() == 'adc': logging.error('Error using application default credentials. ' 'Try running: gcloud auth login --update-adc') raise err # Plug-in additional authorization verifications hooks.verify_access_hook(project_id) ================================================ FILE: gcpdiag/queries/apis_stub.py ================================================ # Copyright 2021 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. # pylint: disable=cyclic-import """Stub API calls used in apis.py for testing.""" import json import pathlib import re from typing import Optional import googleapiclient import httplib2 # pylint: disable=unused-argument JSON_PROJECT_DIR = { 'gcpdiag-apigee1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/apigee1/json-dumps', '12340005': pathlib.Path(__file__).parents[2] / 'test-data/apigee1/json-dumps', 'gcpdiag-gce1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gce1/json-dumps', '12340001': pathlib.Path(__file__).parents[2] / 'test-data/gce1/json-dumps', 'test-project': pathlib.Path(__file__).parents[2] / 'test-data/gce1/json-dumps', 'gcpdiag-gce-faultyssh-runbook': pathlib.Path(__file__).parents[2] / 'test-data/gce2/json-dumps', '12345601': pathlib.Path(__file__).parents[2] / 'test-data/gce2/json-dumps', 'gcpdiag-gce-vm-performance': pathlib.Path(__file__).parents[2] / 'test-data/gce4/json-dumps', '123456270': pathlib.Path(__file__).parents[2] / 'test-data/gce4/json-dumps', 'gcpdiag-bigquery1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/bigquery1/json-dumps', 'gcpdiag-gke1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gke1/json-dumps', '12340002': pathlib.Path(__file__).parents[2] / 'test-data/gke1/json-dumps', 'gcpdiag-gcf1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gcf1/json-dumps', '12340003': pathlib.Path(__file__).parents[2] / 'test-data/gcf1/json-dumps', 'gcpdiag-gcs1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gcs1/json-dumps', 'gcpdiag-datafusion1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/datafusion1/json-dumps', '12340010': pathlib.Path(__file__).parents[2] / 'test-data/datafusion1/json-dumps', 'gcpdiag-dataproc1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/dataproc1/json-dumps', 'gcpdiag-dataproc2-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/dataproc2/json-dumps', 'gcpdiag-dataproc3-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/dataproc3/json-dumps', 'gcpdiag-composer1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/composer1/json-dumps', 'gcpdiag-cloudsql1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/cloudsql1/json-dumps', 'gcpdiag-cloudasset1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/cloudasset1/json-dumps', '12340071': pathlib.Path(__file__).parents[2] / 'test-data/cloudasset1/json-dumps', 'gcpdiag-fw-policy-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/fw-policy/json-dumps', '12340004': pathlib.Path(__file__).parents[2] / 'test-data/fw-policy/json-dumps', 'gcpdiag-pubsub1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/pubsub1/json-dumps', '12340014': pathlib.Path(__file__).parents[2] / 'test-data/pubsub1/json-dumps', 'gcpdiag-gaes1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gaes1/json-dumps', 'gcpdiag-gcb1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gcb1/json-dumps', 'gcpdiag-vpc1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/vpc1/json-dumps', 'gcpdiag-lb1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/lb1/json-dumps', 'gcpdiag-lb2-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/lb2/json-dumps', 'gcpdiag-lb3-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/lb3/json-dumps', 'gcpdiag-tpu1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/tpu1/json-dumps', 'gcpdiag-iam1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/iam1/json-dumps', 'gcpdiag-cloudrun1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/cloudrun1/json-dumps', '123400010': pathlib.Path(__file__).parents[2] / 'test-data/cloudrun1/json-dumps', 'gcpdiag-cloudrun2-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/cloudrun2/json-dumps', 'gcpdiag-notebooks1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/notebooks1/json-dumps', 'gcpdiag-notebooks2-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/notebooks2/json-dumps', 'gcpdiag-dataflow1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/dataflow1/json-dumps', 'gcpdiag-vertex1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/vertex1/json-dumps', 'gcpdiag-billing1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/billing1/json-dumps', 'gcpdiag-billing2-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/billing1/json-dumps', 'gcpdiag-billing3-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/billing1/json-dumps', 'gcpdiag-osconfig1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/osconfig1/json-dumps', 'gcpdiag-gke-cluster-autoscaler-rrrr': pathlib.Path(__file__).parents[2] / 'test-data/gke2/json-dumps', '1234000173': pathlib.Path(__file__).parents[2] / 'test-data/gke2/json-dumps', 'gcpdiag-vpc2-runbook': pathlib.Path(__file__).parents[2] / 'test-data/vpc2/json-dumps', '12345602': pathlib.Path(__file__).parents[2] / 'test-data/vpc2/json-dumps', 'gcpdiag-gce3-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gce3/json-dumps', '12345001': pathlib.Path(__file__).parents[2] / 'test-data/gce3/json-dumps', 'gcpdiag-gke3-gggg': pathlib.Path(__file__).parents[2] / 'test-data/gke3/json-dumps', 'gcpdiag-interconnect1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/interconnect1/json-dumps', '12340032': pathlib.Path(__file__).parents[2] / 'test-data/gke3/json-dumps', 'gcpdiag-gke4-runbook': pathlib.Path(__file__).parents[2] / 'test-data/gke4/json-dumps', 'gcpdiag-nat1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/nat1/json-dumps', '12340033': pathlib.Path(__file__).parents[2] / 'test-data/gke4/json-dumps', 'centos-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'cos-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'debian-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'fedora-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'fedora-coreos-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'opensuse-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'rhel-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'rhel-sap-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'rocky-linux-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'suse-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'suse-sap-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'ubuntu-os-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'ubuntu-os-pro-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'windows-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'windows-sql-cloud': pathlib.Path(__file__).parents[2] / 'test-data/gce-image-license/json-dumps', 'gcpdiag-gce5-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gce5/json-dumps', '123456012345': pathlib.Path(__file__).parents[2] / 'test-data/gce5/json-dumps', 'gcpdiag-looker1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/looker1/json-dumps', 'gcpdiag-gce6-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/gce6/json-dumps', '1234560123456': pathlib.Path(__file__).parents[2] / 'test-data/gce6/json-dumps', 'gcpdiag-vpn1-aaaa': pathlib.Path(__file__).parents[2] / 'test-data/vpn/json-dumps', } # set to a value higher than 0 to emulate API temp. failure fail_next_execute_count = 0 def get_json_dir(project_id: str): return JSON_PROJECT_DIR[project_id] class ApiStub: """Base class for "API Stubs", i.e. objects that mock what is returned by the googleapiclient modules. This base class makes it easier to implement testing of failure modes on API failures thanks to the fail_next() and _maybe_raise_api_exception() methods.""" _fail_count: int = 0 def fail_next(self, fail_count: int, fail_status: int = 429): self._fail_count = fail_count self._fail_status = fail_status def _maybe_raise_api_exception(self): """Simulate API errors by possibly raising an exception, if fail_next() was called before to do that. Raises: googleapiclient.errors.HttpError exception.""" if self._fail_count > 0: self._fail_count -= 1 raise googleapiclient.errors.HttpError( httplib2.Response({'status': self._fail_status}), b'mocking API error') class RestCallStub(ApiStub): """Generic mock object to simulate executable api request.""" def __init__(self, project_id: str, json_basename: str, *, page: int = 1, default: Optional[dict] = None, default_json_basename: Optional[str] = None, request_uri: str = ''): self.project_id = project_id self.json_dir = get_json_dir(project_id) self.json_basename = json_basename self.page = page self.default = default self.default_json_basename = default_json_basename self.uri = request_uri def execute(self, num_retries: int = 0) -> dict: self._maybe_raise_api_exception() try: filename = str(self.json_dir / self.json_basename) if self.page > 1: filename += f'-{self.page}' filename += '.json' with open(filename, encoding='utf-8') as json_file: return json.load(json_file) except FileNotFoundError: if self.default is not None: return self.default if self.default_json_basename is not None: with open(str(self.json_dir / self.default_json_basename) + '.json', encoding='utf-8') as json_file: return json.load(json_file) raise class ServiceUsageApiStub(ApiStub): """Mock object to simulate api calls.""" def __init__(self, mock_state=None, project_id=None, service=None): self._mock_state = mock_state self._project_id = project_id self._service = service def services(self): return self # pylint: disable=redefined-builtin def list(self, parent, filter): m = re.match(r'projects/([^/]+)', parent) if not m: raise ValueError(f"can't parse parent: {parent}") project_id = m.group(1) return RestCallStub(project_id, 'services') def list_next(self, request, response): return None def get(self, name): m = re.match(r'projects/([^/]+)/services/([^/]+)', name) if not m: raise ValueError(f"can't parse name: {name}") return ServiceUsageApiStub(mock_state='get', project_id=m.group(1), service=m.group(2)) def execute(self, num_retries=0): self._maybe_raise_api_exception() json_dir = get_json_dir(self._project_id) with open(json_dir / 'services.json', encoding='utf-8') as json_file: services_list = json.load(json_file) if self._mock_state == 'get': for service in services_list.get('services', []): if service.get('config', {}).get('name') \ == f'{self._service}': return service return {'state': 'DISABLED'} def _batch_request_default_callback(req_id, response, exception): """Make sure we catch when there is no callback defined.""" raise RuntimeError(f'no callback defined for request {req_id}!') class BatchRequestStub(ApiStub): """Mock object returned by new_batch_http_request().""" def __init__(self, callback=_batch_request_default_callback): self.queue = [] self.callback = callback def add(self, request, callback=None, request_id=None): self.queue.append({ 'request': request, 'cb': callback or self.callback, 'request_id': request_id }) return self def execute(self): self._maybe_raise_api_exception() for op in self.queue: try: response = op['request'].execute() op['cb'](op['request_id'], response, None) except googleapiclient.errors.HttpError as err: op['cb'](op['request_id'], None, err) def get_api_stub(service_name: str, version: str, project_id: Optional[str] = None, regional_service_endpoint: Optional[str] = None): # Avoid circular import dependencies by importing the required modules here. # pylint: disable=import-outside-toplevel if service_name == 'cloudresourcemanager': from gcpdiag.queries import crm_stub return crm_stub.CrmApiStub() elif service_name == 'container': from gcpdiag.queries import gke_stub return gke_stub.ContainerApiStub() elif service_name == 'cloudkms': from gcpdiag.queries import kms_stub return kms_stub.KmsApiStub() elif service_name == 'compute': from gcpdiag.queries import gce_stub return gce_stub.ComputeEngineApiStub() elif service_name == 'iam': from gcpdiag.queries import iam_stub # project_id isn't required in serviceaccounts.get requests # and it cannot be easily extracted from a service account name # thus passing api_project_id to determine the correct test-data return iam_stub.IamApiStub(project_id) elif service_name == 'logging': from gcpdiag.queries import logs_stub return logs_stub.LoggingApiStub() elif service_name == 'monitoring': from gcpdiag.queries import monitoring_stub return monitoring_stub.MonitoringApiStub() elif service_name == 'serviceusage': return ServiceUsageApiStub() elif service_name == 'cloudfunctions': from gcpdiag.queries import gcf_stub return gcf_stub.CloudFunctionsApiStub() elif service_name == 'datafusion': from gcpdiag.queries import datafusion_stub return datafusion_stub.DataFusionApiStub() elif service_name == 'dataproc': from gcpdiag.queries import dataproc_stub return dataproc_stub.DataprocApiStub() elif service_name == 'apigee': from gcpdiag.queries import apigee_stub return apigee_stub.ApigeeApiStub() elif service_name == 'composer': from gcpdiag.queries import composer_stub return composer_stub.ComposerApiStub() elif service_name == 'sqladmin': from gcpdiag.queries import cloudsql_stub return cloudsql_stub.CloudSQLApiStub() elif service_name == 'storage': from gcpdiag.queries import gcs_stub # project_id isn't required in buckets.get and buckets.getIamPolicy requests # and it cannot be extracted from bucket name # thus passing api_project_id to determine the correct test-data return gcs_stub.BucketApiStub(project_id) elif service_name == 'cloudbuild': from gcpdiag.queries import gcb_stub return gcb_stub.CloudBuildApiStub() elif service_name == 'pubsub': from gcpdiag.queries import pubsub_stub return pubsub_stub.PubsubApiStub() elif service_name == 'appengine': from gcpdiag.queries import gae_stub return gae_stub.AppEngineApiStub() elif service_name == 'artifactregistry': from gcpdiag.queries import artifact_registry_stub return artifact_registry_stub.ArtifactRegistryApiStub() elif service_name == 'run': from gcpdiag.queries import cloudrun_stub return cloudrun_stub.CloudRunApiStub() elif service_name == 'notebooks': from gcpdiag.queries import notebooks_stub return notebooks_stub.NotebooksApiStub() elif service_name == 'dataflow': from gcpdiag.queries import dataflow_stub return dataflow_stub.DataflowApiStub() elif service_name == 'bigquery': from gcpdiag.queries import bigquery_stub return bigquery_stub.BigQueryApiStub() elif 'aiplatform' in service_name: from gcpdiag.queries import vertex_stub return vertex_stub.VertexApiStub() elif service_name == 'recommender': from gcpdiag.queries import recommender_stub return recommender_stub.RecommenderApiStub() elif service_name == 'cloudbilling': from gcpdiag.queries import billing_stub return billing_stub.BillingApiStub() elif service_name == 'osconfig': from gcpdiag.queries import osconfig_stub return osconfig_stub.OSConfigStub() elif service_name == 'networkmanagement': from gcpdiag.queries import networkmanagement_stub return networkmanagement_stub.NetworkManagementApiStub() elif service_name == 'cloudasset': from gcpdiag.queries import cloudasset_stub return cloudasset_stub.CloudAssetApiStub() elif service_name == 'looker': from gcpdiag.queries import looker_stub return looker_stub.LookerApiStub() else: raise ValueError('unsupported service: %s' % service_name) ================================================ FILE: gcpdiag/queries/apis_test.py ================================================ # Copyright 2023 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. """Test code in apis.py.""" from unittest import TestCase, mock from gcpdiag import config from gcpdiag.queries import apis, apis_stub DUMMY_PROJECT_NAME = 'gcpdiag-gke1-aaaa' class TestCredential: """Test apis set_credentials.""" def test_set_credential_null(self): # pylint:disable=protected-access apis._credentials = 'something to clear' apis.set_credentials(None) assert apis._credentials is None # pylint:enable=protected-access @mock.patch('google.oauth2.credentials.Credentials.from_authorized_user_info') def test_set_credential(self, mock_cred): mock_cred.return_value = 'credential_data' apis.set_credentials('"some json data"') # pylint:disable=protected-access assert apis._credentials == 'credential_data' # pylint:enable=protected-access @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class Test: """Test apis.""" def test_is_enabled(self): assert apis.is_enabled(DUMMY_PROJECT_NAME, 'container') assert not apis.is_enabled(DUMMY_PROJECT_NAME, 'containerxyz') def test_is_all_enabled(self): for value in apis.is_all_enabled(DUMMY_PROJECT_NAME, ['container', 'compute']).values(): assert value == 'ENABLED' for val in apis.is_all_enabled(DUMMY_PROJECT_NAME, ['containerxyz', 'computelol']).values(): assert val == 'DISABLED' class TestTPC(TestCase): """testing for TPC universe domain settings.""" @mock.patch('gcpdiag.queries.apis.get_credentials') @mock.patch('googleapiclient.discovery.build') def test_tpc_endpoint(self, mock_build, mock_cred): mock_cred.return_value.universe_domain = 'test_domain.goog' config.init({'universe_domain': 'test_domain.goog'}, 'x') _ = apis.get_api('dataproc', 'v1', 'test_project') endpoint = mock_build.call_args[1]['client_options'].api_endpoint assert endpoint.endswith('test_domain.goog') @mock.patch('gcpdiag.queries.apis.get_credentials') @mock.patch('googleapiclient.discovery.build') def test_not_tpc_endpoint(self, mock_build, mock_cred): mock_cred.return_value.universe_domain = 'googleapis.com' config.init({'universe_domain': ''}, 'x') _ = apis.get_api('composer', 'v1', 'test_project') endpoint = mock_build.call_args[1]['client_options'].api_endpoint assert endpoint == 'https://composer.googleapis.com' @mock.patch('gcpdiag.queries.apis._get_credentials_adc') @mock.patch('googleapiclient.discovery.build') def test_universe_mismatch(self, mock_build, mock_cred): del mock_build mock_cred.return_value.universe_domain = 'googleapis.com.not' config.init({'universe_domain': 'a_mismatching_universe'}, 'x') with self.assertRaises(ValueError): _ = apis.get_api('composer', 'v1', 'test_project') ================================================ FILE: gcpdiag/queries/apis_utils.py ================================================ # Copyright 2021 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. """GCP API-related utility functions.""" import concurrent.futures import logging import random import time from typing import Any, Callable, Iterator, List, Optional, Tuple import apiclient import googleapiclient.errors import httplib2 from gcpdiag import config, executor, models, utils def execute_concurrently( api: Any, requests: List[Any], context: models.Context ) -> Iterator[Tuple[Any, Optional[Any], Optional[Exception]]]: """ Executes a list of API requests concurrently. Uses ThreadPoolExecutor in API server context, batch_execute_all in CLI context. Yields: (request, response, exception) """ if not requests: return if context.context_provider: # API Server context: Use ThreadPoolExecutor exec_ = executor.get_executor(context) future_to_request = { exec_.submit(execute_single_request, req): req for req in requests } for future in concurrent.futures.as_completed(future_to_request): request = future_to_request[future] try: response, exception = future.result() yield (request, response, exception) except googleapiclient.errors.HttpError as e: yield (request, None, e) else: # CLI context: Use original batch_execute_all yield from batch_execute_all(api, requests) def _execute_with_pagination_in_api_context( api: Any, requests: List[Any], next_function: Callable, context: models.Context, response_keyword: str = 'items') -> Iterator[Any]: """ Executes and paginates a list of API 'list' requests concurrently in an API context. """ pending_requests = list(requests) while pending_requests: next_page_requests = [] results_iterator = execute_concurrently(api=api, requests=pending_requests, context=context) for request, response, exception in results_iterator: if exception: if (isinstance(exception, apiclient.errors.HttpError) and exception.resp.status == 404): continue raise utils.GcpApiError(exception) from exception if not response: continue yield from response.get(response_keyword, []) if 'nextPageToken' in response: next_req = next_function(previous_request=request, previous_response=response) if next_req: next_page_requests.append(next_req) pending_requests = next_page_requests def execute_concurrently_with_pagination( api: Any, requests: List[Any], next_function: Callable, context: models.Context, log_text: Optional[str] = None, response_keyword: str = 'items') -> Iterator[Any]: """ Executes and paginates a list of API 'list' requests concurrently. """ if not context.context_provider: yield from batch_list_all(api, requests, next_function, log_text, response_keyword) return yield from _execute_with_pagination_in_api_context(api, requests, next_function, context, response_keyword) def list_all(request, next_function: Callable, response_keyword='items') -> Iterator[Any]: """Execute GCP API `request` and subsequently call `next_function` until there are no more results. Assumes that it is a list method and that the results are under a `items` key.""" while True: try: response = request.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err # Empty lists are omitted in GCP API responses if response_keyword in response: yield from response[response_keyword] request = next_function(previous_request=request, previous_response=response) if request is None: break def multi_list_all( requests: list, next_function: Callable, ) -> Iterator[Any]: for req in requests: yield from list_all(req, next_function) def batch_list_all(api, requests: list, next_function: Callable, log_text: Optional[str] = None, response_keyword='items'): """Similar to list_all but using batch API except in TPC environment.""" if 'googleapis.com' not in requests[0].uri: # the api client library does not handle batch api calls for TPC yet, so # the batch is processed and collected one at a time in that case for req in requests: yield from list_all(req, next_function) else: yield from _original_batch(api, requests, next_function, log_text, response_keyword) def _original_batch(api, requests: list, next_function: Callable, log_text: Optional[str] = None, response_keyword='items'): """Similar to list_all but using batch API.""" pending_requests = requests page = 1 while pending_requests: next_requests = pending_requests pending_requests = [] if log_text: if page == 1: logging.info(log_text) else: logging.info('%s (page: %d)', log_text, page) for (request, response, exception) in batch_execute_all(api, next_requests): if exception: logging.info('Exception requesting %s: %s', request.uri, exception.message) raise exception # add request for next page if required req = next_function(request, response) if req: pending_requests.append(req) # yield items if response_keyword in response: yield from response[response_keyword] page += 1 # inspired by: # https://github.com/googleapis/google-api-python-client/blob/063dc27da5371264d36d299edb0682e63874089b/googleapiclient/http.py#L79 # but without the json "reason" handling. If we get a 403, we won't retry. def should_retry(resp_status): if resp_status >= 500: return True if resp_status == 429: # too many requests return True return False def get_nth_exponential_random_retry(n, random_pct, multiplier, random_fn=None): random_fn = random_fn or random.random return (1 - random_fn() * random_pct) * multiplier**n def batch_execute_all(api, requests: list): """Execute all `requests` using the batch API and yield (request,response,exception) tuples.""" # results: (request, result, exception) tuples results: List[Tuple[Any, Optional[Any], Optional[Exception]]] = [] requests_todo = requests requests_in_flight: List = [] retry_count = 0 def fetch_all_cb(request_id, response, exception): try: request = requests_in_flight[int(request_id)] except (IndexError, ValueError, TypeError): logging.debug( 'BUG: Cannot find request %r in list of pending requests, dropping request.', request_id) return if exception: if isinstance(exception, googleapiclient.errors.HttpError) and \ should_retry(exception.status_code) and \ retry_count < config.API_RETRIES: logging.debug('received HTTP error status code %d from API, retrying', exception.status_code) requests_todo.append(request) else: results.append((request, None, utils.GcpApiError(exception))) return if not response: return results.append((request, response, None)) while True: requests_in_flight = requests_todo requests_todo = [] results = [] # Do the batch API request try: batch = api.new_batch_http_request() for i, req in enumerate(requests_in_flight): batch.add(req, callback=fetch_all_cb, request_id=str(i)) batch.execute() except (googleapiclient.errors.HttpError, httplib2.HttpLib2Error) as err: if isinstance(err, googleapiclient.errors.HttpError): error_msg = f'received HTTP error status code {err.status_code} from Batch API, retrying' else: error_msg = f'received exception from Batch API: {err}, retrying' if (not isinstance(err, googleapiclient.errors.HttpError) or \ should_retry(err.status_code)) \ and retry_count < config.API_RETRIES: logging.debug(error_msg) requests_todo = requests_in_flight results = [] else: raise utils.GcpApiError(err) from err # Yield results yield from results # If no requests_todo, means we are done. if not requests_todo: break # for example: retry delay: 20% is random, progression: 1, 1.4, 2.0, 2.7, ... 28.9 (10 retries) sleep_time = get_nth_exponential_random_retry( n=retry_count, random_pct=config.API_RETRY_SLEEP_RANDOMNESS_PCT, multiplier=config.API_RETRY_SLEEP_MULTIPLIER) logging.debug('sleeping %.2f seconds before retry #%d', sleep_time, retry_count + 1) time.sleep(sleep_time) retry_count += 1 def execute_single_request( request: Any) -> Tuple[Optional[Any], Optional[Exception]]: """Executes a single API request and returns the response and exception.""" try: response = request.execute(num_retries=config.API_RETRIES) return response, None except googleapiclient.errors.HttpError as e: return None, e ================================================ FILE: gcpdiag/queries/apis_utils_test.py ================================================ # Copyright 2021 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. """Test code in apis_utils.py.""" import concurrent.futures import unittest from unittest import mock import googleapiclient.errors import httplib2 from gcpdiag import config, models, utils from gcpdiag.queries import apis_stub, apis_utils class RequestMock(apis_stub.ApiStub): """Mock a googleapiclient.request object.""" def __init__(self, n: int, fail_count: int = 0, fail_status: int = 429, uri: str = 'googleapis.com'): self.n = n if fail_count: self.fail_next(fail_count, fail_status) self.uri = uri def execute(self, num_retries: int = 0): del num_retries self._maybe_raise_api_exception() if self.n == 1: return {'items': ['a', 'b']} elif self.n == 2: return {'items': ['c', 'd']} elif self.n == 3: return {'items': ['e']} def next_function_mock(previous_request, previous_response): del previous_response if previous_request.n == 1: return RequestMock(2) else: return None mock_sleep_slept_time = [] def mock_sleep(sleep_time: float): mock_sleep_slept_time.append(sleep_time) @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('time.sleep', new=mock_sleep) class Test(unittest.TestCase): def test_list_all(self): results = list(apis_utils.list_all(RequestMock(1), next_function_mock)) assert (results == ['a', 'b', 'c', 'd']) def test_multi_list_all(self): results = list( apis_utils.multi_list_all(requests=[RequestMock(1), RequestMock(3)], next_function=next_function_mock)) assert (results == ['a', 'b', 'c', 'd', 'e']) def test_batch_list_all(self): api = apis_stub.get_api_stub('compute', 'v1') results = list( apis_utils.batch_list_all( # api=api, requests=[RequestMock(1), RequestMock(3)], next_function=next_function_mock, log_text='testing')) # batch_list_all will first retrieve all requests (first page), then in a # second step any further required pages. assert (results == ['a', 'b', 'e', 'c', 'd']) def test_batch_execute_all(self): api = apis_stub.get_api_stub('compute', 'v1') results = list( apis_utils.batch_execute_all( api, [RequestMock(1), RequestMock(3)])) # requests assert [x[0].n for x in results] == [1, 3] # responses assert [x[1] for x in results] == [{'items': ['a', 'b']}, {'items': ['e']}] def test_batch_execute_all_unretriable_exception(self): api = apis_stub.get_api_stub('compute', 'v1') results = list( apis_utils.batch_execute_all( api, [RequestMock(1, fail_count=1, fail_status=403), RequestMock(3)])) assert isinstance(results[0][2], utils.GcpApiError) and \ results[0][2].status == 403 def test_batch_execute_all_too_many_failures(self): api = apis_stub.get_api_stub('compute', 'v1') results = list( apis_utils.batch_execute_all(api, [ RequestMock(1, fail_count=config.API_RETRIES + 1, fail_status=429), RequestMock(3) ])) assert isinstance(results[1][2], Exception) def test_batch_execute_all_retriable_exception(self): global mock_sleep_slept_time mock_sleep_slept_time = [] api = apis_stub.get_api_stub('compute', 'v1') results = list( apis_utils.batch_execute_all(api, [ RequestMock(1, fail_count=config.API_RETRIES, fail_status=429), RequestMock(3) ])) assert len(mock_sleep_slept_time) == config.API_RETRIES # 20% is random, progression: 1, 1.4, 2.0, 2.7, ... 28.9 (10 retries) assert 0.8 <= mock_sleep_slept_time[0] <= 1.0 assert 1.1 <= mock_sleep_slept_time[1] <= 1.4 # requests assert [x[0].n for x in results] == [3, 1] # responses assert [x[1] for x in results] == [{'items': ['e']}, {'items': ['a', 'b']}] def test_batch_execute_batchapi_tempfail(self): """Test the batch API producing a retryable failure.""" global mock_sleep_slept_time mock_sleep_slept_time = [] api = apis_stub.get_api_stub('compute', 'v1') api.fail_next(1) results = list( apis_utils.batch_execute_all( api, [RequestMock(1), RequestMock(3)])) assert len(mock_sleep_slept_time) == 1 # requests assert [x[0].n for x in results] == [1, 3] # responses assert [x[1] for x in results] == [{'items': ['a', 'b']}, {'items': ['e']}] @mock.patch('gcpdiag.queries.apis_utils.execute_single_request') @mock.patch('gcpdiag.executor.get_executor') def test_execute_concurrently_api_server(self, mock_get_executor, mock_execute_single_request): api = apis_stub.get_api_stub('compute', 'v1') context = models.Context(project_id='test-project') context.context_provider = mock.Mock() mock_executor = mock.Mock() mock_get_executor.return_value = mock_executor mock_execute_single_request.side_effect = [ ({ 'items': ['a', 'b'] }, None), ({ 'items': ['e'] }, None), ] # Mock the submit method to return a Future object def mock_submit(fn, *args, **kwargs): future = concurrent.futures.Future() try: result = fn(*args, **kwargs) future.set_result(result) except googleapiclient.errors.HttpError as e: future.set_exception(e) return future mock_executor.submit.side_effect = mock_submit requests = [RequestMock(1), RequestMock(3)] results = list(apis_utils.execute_concurrently(api, requests, context)) mock_get_executor.assert_called_once_with(context) self.assertEqual(mock_executor.submit.call_count, 2) self.assertEqual(len(results), 2) # Check that first result element is request self.assertIsInstance(results[0][0], RequestMock) self.assertIsInstance(results[1][0], RequestMock) self.assertEqual(sorted(r[0].n for r in results), [1, 3]) @mock.patch('gcpdiag.queries.apis_utils.batch_execute_all') def test_execute_concurrently_cli(self, mock_batch_execute_all): api = apis_stub.get_api_stub('compute', 'v1') context = models.Context(project_id='test-project') mock_batch_execute_all.return_value = iter([ (RequestMock(1), { 'items': ['a', 'b'] }, None), (RequestMock(3), { 'items': ['e'] }, None), ]) requests = [RequestMock(1), RequestMock(3)] results = list(apis_utils.execute_concurrently(api, requests, context)) mock_batch_execute_all.assert_called_once_with(api, requests) assert len(results) == 2 class ExecuteConcurrentlyWithPaginationTest(unittest.TestCase): """Tests for execute_concurrently_with_pagination.""" def setUp(self): super().setUp() self.mock_api = mock.Mock() self.request_1 = mock.Mock() self.request_1.uri = 'request/1' self.request_2 = mock.Mock() self.request_2.uri = 'request/2' @mock.patch('gcpdiag.queries.apis_utils.batch_list_all') def test_cli_context_uses_batch_list_all(self, mock_batch_list_all): """Verify that batch_list_all is called in CLI context.""" context = models.Context(project_id='test-project') requests = [self.request_1] mock_batch_list_all.return_value = iter(['item1', 'item2']) results = list( apis_utils.execute_concurrently_with_pagination( self.mock_api, requests, next_function_mock, context, log_text='testing', response_keyword='items')) self.assertEqual(results, ['item1', 'item2']) mock_batch_list_all.assert_called_once_with(self.mock_api, requests, next_function_mock, 'testing', 'items') @mock.patch('gcpdiag.queries.apis_utils.execute_concurrently') def test_api_context_single_page(self, mock_execute_concurrently): """Test API context with a single page of results.""" context = models.Context(project_id='test-project', context_provider='api') requests = [self.request_1] # execute_concurrently yields: (request, response, exception) mock_execute_concurrently.return_value = iter([ (self.request_1, { 'items': ['item1'] }, None), ]) results = list( apis_utils.execute_concurrently_with_pagination( self.mock_api, requests, mock.Mock(), context, log_text='testing', response_keyword='items')) self.assertEqual(results, ['item1']) mock_execute_concurrently.assert_called_once() @mock.patch('gcpdiag.queries.apis_utils.execute_concurrently') def test_api_context_multi_page(self, mock_execute_concurrently): """Test API context with multiple pages of results.""" context = models.Context(project_id='test-project', context_provider='api') req1, resp1 = mock.Mock(uri='uri1'), { 'items': ['item1'], 'nextPageToken': 'page2' } req2, resp2 = mock.Mock(uri='uri2'), {'items': ['item2']} def side_effect_func(*args, **kwargs): # pylint: disable=unused-argument if req1 in kwargs['requests']: return iter([(req1, resp1, None)]) elif req2 in kwargs['requests']: return iter([(req2, resp2, None)]) return iter([]) mock_execute_concurrently.side_effect = side_effect_func def next_func(previous_request, previous_response): # pylint: disable=unused-argument if previous_response.get('nextPageToken') == 'page2': return req2 return None results = list( apis_utils.execute_concurrently_with_pagination( self.mock_api, [req1], next_func, context, log_text='testing', response_keyword='items')) self.assertEqual(results, ['item1', 'item2']) self.assertEqual(mock_execute_concurrently.call_count, 2) @mock.patch('gcpdiag.queries.apis_utils.execute_concurrently') def test_api_context_skips_404(self, mock_execute_concurrently): """Test that 404 errors are skipped in API context.""" context = models.Context(project_id='test-project', context_provider='api') requests = [self.request_1] http_error_404 = googleapiclient.errors.HttpError(resp=httplib2.Response( {'status': 404}), content=b'Not Found') mock_execute_concurrently.return_value = iter([ (self.request_1, None, http_error_404), ]) results = list( apis_utils.execute_concurrently_with_pagination( self.mock_api, requests, mock.Mock(), context, log_text='testing', response_keyword='items')) self.assertEqual(results, []) mock_execute_concurrently.assert_called_once() @mock.patch('gcpdiag.queries.apis_utils.execute_concurrently') def test_api_context_raises_other_error(self, mock_execute_concurrently): """Test that non-404 errors raise GcpApiError in API context.""" context = models.Context(project_id='test-project', context_provider='api') requests = [self.request_1] http_error_500 = googleapiclient.errors.HttpError(resp=httplib2.Response( {'status': 500}), content=b'Server Error') mock_execute_concurrently.return_value = iter([ (self.request_1, None, http_error_500), ]) with self.assertRaises(utils.GcpApiError): list( apis_utils.execute_concurrently_with_pagination( self.mock_api, requests, mock.Mock(), context, log_text='testing', response_keyword='items')) ================================================ FILE: gcpdiag/queries/artifact_registry.py ================================================ # 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. # Lint as: python3 """Queries related to GCP Artifact Registry """ import dataclasses from gcpdiag import caching, config, models from gcpdiag.queries import apis, iam class ArtifactRegistryIAMPolicy(iam.BaseIAMPolicy): def _is_resource_permission(self, permission): return True @dataclasses.dataclass class ProjectSettings: legacy_redirect: bool @caching.cached_api_call(in_memory=True) def get_registry_iam_policy(context: models.Context, location: str, registry_name: str) -> ArtifactRegistryIAMPolicy: project_id = context.project_id ar_api = apis.get_api('artifactregistry', 'v1', project_id) registry_id = 'projects/{}/locations/{}/repositories/{}'.format( project_id, location, registry_name) request = ar_api.projects().locations().repositories().getIamPolicy( resource=registry_id) return iam.fetch_iam_policy(request, ArtifactRegistryIAMPolicy, project_id, registry_id, context) @caching.cached_api_call(in_memory=True) def get_project_settings(project_id: str) -> ProjectSettings: ar_api = apis.get_api('artifactregistry', 'v1', project_id) response = ar_api.projects().getProjectSettings( name=f'projects/{project_id}/projectSettings').execute( num_retries=config.API_RETRIES) return ProjectSettings(legacy_redirect=response.get('legacyRedirectionState') == 'REDIRECTION_FROM_GCR_IO_ENABLED') ================================================ FILE: gcpdiag/queries/artifact_registry_stub.py ================================================ # 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. # Lint as: python3 """Stub API calls used in gcf.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name INCORRECT_RESOURCE_ERROR = ('incorrect resource format. Use ' 'projects/*/locations/*/repositories/') class ArtifactRegistryApiStub: """Mock object to simulate function api calls.""" def projects(self): return self def locations(self): return self def repositories(self): return self def getIamPolicy(self, resource: str) -> apis_stub.RestCallStub: m = re.match(r'projects/([^/]+)/locations/([^/]+)/repositories/([^/]+)', resource) if m: project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'artifact-registry-policy') else: raise ValueError(INCORRECT_RESOURCE_ERROR) def getProjectSettings(self, name: str) -> apis_stub.RestCallStub: m = re.match(r'projects/([^/]+)/projectSettings', name) if m: project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'artifact-registry-project-settings') else: raise ValueError(INCORRECT_RESOURCE_ERROR) ================================================ FILE: gcpdiag/queries/artifact_registry_test.py ================================================ # 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. # Lint as: python3 """Test code in artifact_registry.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, artifact_registry DUMMY_PROJECT_NAME = 'gcpdiag-gcb1-aaaa' DUMMY_REGISTRY_ID = 'gcb1-repository' DUMMY_REGISTRY_LOCATION = 'us-central1' DUMMY_POLICY_MEMBER = 'serviceAccount:gcb-custom2@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestArtifactRegistry: """Test Artifact Registry.""" def test_get_bucket_iam_policy(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) policy = artifact_registry.get_registry_iam_policy(context, DUMMY_REGISTRY_LOCATION, DUMMY_REGISTRY_ID) assert set(policy.get_members()) == {DUMMY_POLICY_MEMBER} def test_get_project_settings(self): settings = artifact_registry.get_project_settings(DUMMY_PROJECT_NAME) assert settings == artifact_registry.ProjectSettings(legacy_redirect=True) ================================================ FILE: gcpdiag/queries/bigquery.py ================================================ """Queries related to BigQuery.""" import logging import time import uuid from typing import Any, Dict, List, Optional, Set, Union from google.auth import exceptions from googleapiclient import errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, crm, iam from gcpdiag.runbook import op BIGQUERY_REGIONS = [ 'me-central1', 'me-central2', 'me-west1', 'africa-south1', 'us', 'eu', 'us-east1', 'us-east4', 'us-east5', 'us-west1', 'us-west2', 'us-west3', 'us-west4', 'us-central1', 'us-south1', 'northamerica-northeast1', 'northamerica-northeast2', 'southamerica-east1', 'southamerica-west1', 'asia-east1', 'asia-east2', 'asia-south1', 'asia-south2', 'asia-northeast1', 'asia-northeast2', 'asia-northeast3', 'asia-southeast1', 'asia-southeast2', 'australia-southeast1', 'australia-southeast2', 'europe-north1', 'europe-southwest1', 'europe-central2', 'europe-west1', 'europe-west10', 'europe-west2', 'europe-west3', 'europe-west4', 'europe-west6', 'europe-west8', 'europe-west9', 'europe-west12', ] # STRING CONSTANTS C_NOT_AVAILABLE = 'N/A' PolicyObject = Union[iam.ProjectPolicy, iam.OrganizationPolicy] def get_project_policy(context: models.Context): """Fetches the IAM policy object for a project.""" root_logger = logging.getLogger() original_level = root_logger.level try: root_logger.setLevel(logging.ERROR) policy = iam.get_project_policy(context, raise_error_if_fails=False) return policy except utils.GcpApiError: return None finally: root_logger.setLevel(original_level) def get_organization_policy(context: models.Context, organization_id: str): """Fetches the IAM policy object for an organization.""" root_logger = logging.getLogger() original_level = root_logger.level try: root_logger.setLevel(logging.ERROR) policy = iam.get_organization_policy(context, organization_id, raise_error_if_fails=False) return policy except utils.GcpApiError as err: if 'doesn\'t have access to' in err.message.lower( ) or 'denied on resource' in err.message.lower(): op.info( 'User does not have access to the organization policy. Investigation' ' completeness and accuracy might depend on the presence of' ' organization level permissions.') return None finally: root_logger.setLevel(original_level) def check_permissions_for_principal( policy: PolicyObject, principal: str, permissions_to_check: Set[str]) -> Dict[str, bool]: """Uses a policy object to check a set of permissions for a principal. Returns a dictionary mapping each permission to a boolean indicating its presence. """ return { permission: policy.has_permission(principal, permission) for permission in permissions_to_check } def get_missing_permissions(required_permissions: Set[str], actual_permissions: Dict[str, bool]) -> Set[str]: """Compares a set of required permissions against a dictionary of actual permissions and returns the set of missing ones. """ return { perm for perm in required_permissions if not actual_permissions.get(perm) } class BigQueryTable: """Represents a BigQuery Table object.""" project_id: str dataset_id: str table_id: str def __init__(self, project_id: str, dataset_id: str, table_id: str): self.project_id = project_id self.dataset_id = dataset_id self.table_id = table_id @property def table_identifier(self) -> str: return f'{self.project_id}:{self.dataset_id}.{self.table_id}' class BigQueryRoutine: """Represents a BigQuery Routine object.""" project_id: str dataset_id: str routine_id: str def __init__(self, project_id: str, dataset_id: str, routine_id: str): self.project_id = project_id self.dataset_id = dataset_id self.routine_id = routine_id @property def routine_identifier(self) -> str: return f'{self.project_id}:{self.dataset_id}.{self.routine_id}' class BigQueryJob(models.Resource): """Represents a BigQuery Job object.""" _job_api_resource_data: dict[str, Any] _information_schema_job_metadata: dict[str, Any] project_id: str def __init__( self, project_id: str, job_api_resource_data: dict[str, Any], information_schema_job_metadata: dict[str, str], ): super().__init__(project_id) self._job_api_resource_data = job_api_resource_data self._information_schema_job_metadata = (information_schema_job_metadata or {}) @property def full_path(self) -> str: # returns 'https://content-bigquery.googleapis.com/bigquery/v2/ # projects//jobs/?location=' return self._job_api_resource_data.get('selfLink', '') @property def id(self) -> str: # returns :. return self._job_api_resource_data.get('id', '') @property def short_path(self) -> str: # returns :. return self.id @property def user_email(self) -> str: return self._job_api_resource_data.get('user_email', '') @property def _job_configuration(self) -> dict[str, Any]: return self._job_api_resource_data.get('configuration', {}) @property def _query(self) -> dict[str, Any]: return self._job_configuration.get('query', {}) @property def _stats(self) -> dict[str, Any]: """Safely access the 'statistics' dictionary.""" return self._job_api_resource_data.get('statistics', {}) @property def _query_stats(self) -> dict[str, Any]: """Safely access the 'statistics.query' dictionary.""" return self._stats.get('query', {}) @property def _query_info(self) -> dict[str, Any]: return self._query_stats.get('queryInfo', {}) @property def _status(self) -> dict[str, Any]: return self._job_api_resource_data.get('status', {}) @property def job_type(self) -> str: return self._job_configuration.get('jobType', '') @property def query_sql(self) -> str: return self._query.get('query', '') @property def use_legacy_sql(self) -> bool: return self._query.get('useLegacySql', False) @property def priority(self) -> str: return self._query.get('priority', '') @property def edition(self) -> str: edition_value = self._query.get('edition') return str(edition_value) if edition_value else '' @property def creation_time(self) -> Optional[int]: time_str = self._stats.get('creationTime') return (int(time_str) if isinstance(time_str, str) and time_str.isdigit() else None) @property def start_time(self) -> Optional[int]: time_str = self._stats.get('startTime') return (int(time_str) if isinstance(time_str, str) and time_str.isdigit() else None) @property def end_time(self) -> Optional[int]: time_str = self._stats.get('endTime') return (int(time_str) if isinstance(time_str, str) and time_str.isdigit() else None) @property def total_bytes_processed(self) -> int: bytes_str = self._stats.get('totalBytesProcessed', '0') return (int(bytes_str) if isinstance(bytes_str, str) and bytes_str.isdigit() else 0) @property def total_bytes_billed(self) -> int: bytes_str = self._query_stats.get('totalBytesBilled', '0') return (int(bytes_str) if isinstance(bytes_str, str) and bytes_str.isdigit() else 0) @property def total_slot_ms(self) -> int: ms_str = self._stats.get('totalSlotMs', '0') return int(ms_str) if isinstance(ms_str, str) and ms_str.isdigit() else 0 @property def cache_hit(self) -> bool: return self._query_stats.get('cacheHit') is True @property def quota_deferments(self) -> list[str]: deferments_dict = self._stats.get('quotaDeferments', {}) if isinstance(deferments_dict, dict): deferment_list = deferments_dict.get('', []) if isinstance(deferment_list, list) and all( isinstance(s, str) for s in deferment_list): return deferment_list return [] @property def query_plan(self) -> list[dict[str, Any]]: plan = self._query_stats.get('queryPlan', []) return plan if isinstance(plan, list) else [] @property def total_partitions_processed(self) -> int: partitions_str = self._query_stats.get('totalPartitionsProcessed', '0') return (int(partitions_str) if isinstance(partitions_str, str) and partitions_str.isdigit() else 0) @property def referenced_tables(self) -> list[BigQueryTable]: tables_list = self._query_stats.get('referencedTables', []) referenced_tables = [] if isinstance(tables_list, list): for item in tables_list: if isinstance(item, dict): project_id = item.get('projectId') dataset_id = item.get('datasetId') table_id = item.get('tableId') if (isinstance(project_id, str) and project_id and isinstance(dataset_id, str) and dataset_id and isinstance(table_id, str) and table_id): referenced_tables.append( BigQueryTable(project_id, dataset_id, table_id)) return referenced_tables @property def referenced_routines(self) -> list[BigQueryRoutine]: routines_list = self._query_stats.get('referencedRoutines', []) referenced_routines = [] if isinstance(routines_list, list): for item in routines_list: if isinstance(item, dict): project_id = item.get('projectId') dataset_id = item.get('datasetId') routine_id = item.get('routineId') if (isinstance(project_id, str) and project_id and isinstance(dataset_id, str) and dataset_id and isinstance(routine_id, str) and routine_id): referenced_routines.append( BigQueryRoutine(project_id, dataset_id, routine_id)) return referenced_routines @property def num_affected_dml_rows(self) -> int: rows_str = self._query_stats.get('numDmlAffectedRows', '0') return (int(rows_str) if isinstance(rows_str, str) and rows_str.isdigit() else 0) @property def dml_stats(self) -> dict[str, int]: stats = self._query_stats.get('dmlStats') if not isinstance(stats, dict): return {} inserted_str = stats.get('insertedRowCount', '0') deleted_str = stats.get('deletedRowCount', '0') updated_str = stats.get('updatedRowCount', '0') return { 'insertedRowCount': (int(inserted_str) if isinstance(inserted_str, str) and inserted_str.isdigit() else 0), 'deletedRowCount': (int(deleted_str) if isinstance(deleted_str, str) and deleted_str.isdigit() else 0), 'updatedRowCount': (int(updated_str) if isinstance(updated_str, str) and updated_str.isdigit() else 0), } @property def statement_type(self) -> str: stype = self._query_stats.get('statementType', '') return stype if isinstance(stype, str) else '' @property def bi_engine_statistics(self) -> dict[str, Any]: stats = self._query_stats.get('biEngineStatistics') if not isinstance(stats, dict): return {} reasons_list = stats.get('accelerationMode', {}).get('biEngineReasons', []) bi_engine_reasons = [] if isinstance(reasons_list, list): for item in reasons_list: if isinstance(item, dict): bi_engine_reasons.append({ 'code': str(item.get('code', '')), 'message': item.get('message', ''), }) return { 'biEngineMode': str(stats.get('biEngineMode', '')), 'accelerationMode': str(stats.get('accelerationMode', '')), 'biEngineReasons': bi_engine_reasons, } @property def vector_search_statistics(self) -> dict[str, Any]: stats = self._query_stats.get('vectorSearchStatistics') if not isinstance(stats, dict): return {} reasons_list = stats.get('indexUnusedReasons', []) index_unused_reasons = [] if isinstance(reasons_list, list): for item in reasons_list: if isinstance(item, dict): base_table_data = item.get('baseTable') base_table_obj = None if isinstance(base_table_data, dict): project_id = base_table_data.get('projectId') dataset_id = base_table_data.get('datasetId') table_id = base_table_data.get('tableId') if (isinstance(project_id, str) and project_id and isinstance(dataset_id, str) and dataset_id and isinstance(table_id, str) and table_id): base_table_obj = BigQueryTable(project_id, dataset_id, table_id) index_unused_reasons.append({ 'code': str(item.get('code', '')), 'message': item.get('message', ''), 'indexName': item.get('indexName', ''), 'baseTable': base_table_obj, }) return { 'indexUsageMode': str(stats.get('indexUsageMode', '')), 'indexUnusedReasons': index_unused_reasons, } @property def performance_insights(self) -> dict[str, Any]: insights = self._query_stats.get('performanceInsights') if not isinstance(insights, dict): return {} standalone_list = insights.get('stagePerformanceStandaloneInsights', []) stage_performance_standalone_insights = [] if isinstance(standalone_list, list): for item in standalone_list: if isinstance(item, dict): stage_performance_standalone_insights.append({ 'stageId': item.get('stageId', ''), }) change_list = insights.get('stagePerformanceChangeInsights', []) stage_performance_change_insights = [] if isinstance(change_list, list): for item in change_list: if isinstance(item, dict): stage_performance_change_insights.append({ 'stageId': item.get('stageId', ''), }) avg_ms_str = insights.get('avgPreviousExecutionMs', '0') return { 'avgPreviousExecutionMs': (int(avg_ms_str) if isinstance(avg_ms_str, str) and avg_ms_str.isdigit() else 0), 'stagePerformanceStandaloneInsights': (stage_performance_standalone_insights), 'stagePerformanceChangeInsights': stage_performance_change_insights, } @property def optimization_details(self) -> Any: return self._query_info.get('optimizationDetails') @property def export_data_statistics(self) -> dict[str, int]: stats = self._query_stats.get('exportDataStatistics') if not isinstance(stats, dict): return {} file_count_str = stats.get('fileCount', '0') row_count_str = stats.get('rowCount', '0') return { 'fileCount': (int(file_count_str) if isinstance(file_count_str, str) and file_count_str.isdigit() else 0), 'rowCount': (int(row_count_str) if isinstance(row_count_str, str) and row_count_str.isdigit() else 0), } @property def load_query_statistics(self) -> dict[str, int]: stats = self._query_stats.get('loadQueryStatistics') if not isinstance(stats, dict): return {} input_files_str = stats.get('inputFiles', '0') input_bytes_str = stats.get('inputFileBytes', '0') output_rows_str = stats.get('outputRows', '0') output_bytes_str = stats.get('outputBytes', '0') bad_records_str = stats.get('badRecords', '0') return { 'inputFiles': (int(input_files_str) if isinstance(input_files_str, str) and input_files_str.isdigit() else 0), 'inputFileBytes': (int(input_bytes_str) if isinstance(input_bytes_str, str) and input_bytes_str.isdigit() else 0), 'outputRows': (int(output_rows_str) if isinstance(output_rows_str, str) and output_rows_str.isdigit() else 0), 'outputBytes': (int(output_bytes_str) if isinstance(output_bytes_str, str) and output_bytes_str.isdigit() else 0), 'badRecords': (int(bad_records_str) if isinstance(bad_records_str, str) and bad_records_str.isdigit() else 0), } @property def spark_statistics(self) -> dict[str, Any]: stats = self._query_stats.get('sparkStatistics') if not isinstance(stats, dict): return {} logging_info_dict = stats.get('loggingInfo', {}) logging_info = ({ 'resourceType': logging_info_dict.get('resourceType', ''), 'projectId': logging_info_dict.get('projectId', ''), } if isinstance(logging_info_dict, dict) else {}) return { 'endpoints': stats.get('endpoints', {}), 'sparkJobId': stats.get('sparkJobId', ''), 'sparkJobLocation': stats.get('sparkJobLocation', ''), 'kmsKeyName': stats.get('kmsKeyName', ''), 'gcsStagingBucket': stats.get('gcsStagingBucket', ''), 'loggingInfo': logging_info, } @property def transferred_bytes(self) -> int: bytes_str = self._query_stats.get('transferredBytes', '0') return (int(bytes_str) if isinstance(bytes_str, str) and bytes_str.isdigit() else 0) @property def reservation_id(self) -> str: res_id = self._stats.get('reservation_id', '') return res_id if isinstance(res_id, str) else '' @property def reservation_admin_project_id(self) -> Optional[str]: if not self.reservation_id: return None try: parts = self.reservation_id.split('/') if parts[0] == 'projects' and len(parts) >= 2: return parts[1] else: logging.warning( 'Could not parse project ID from reservation_id: %s', self.reservation_id, ) return None except (IndexError, AttributeError): logging.warning( 'Could not parse project ID from reservation_id: %s', self.reservation_id, ) return None @property def num_child_jobs(self) -> int: num_str = self._stats.get('numChildJobs', '0') return int(num_str) if isinstance(num_str, str) and num_str.isdigit() else 0 @property def parent_job_id(self) -> str: parent_id = self._stats.get('parentJobId', '') return parent_id if isinstance(parent_id, str) else '' @property def row_level_security_applied(self) -> bool: rls_stats = self._stats.get('RowLevelSecurityStatistics', {}) return (rls_stats.get('rowLevelSecurityApplied') is True if isinstance( rls_stats, dict) else False) @property def data_masking_applied(self) -> bool: masking_stats = self._stats.get('dataMaskingStatistics', {}) return (masking_stats.get('dataMaskingApplied') is True if isinstance( masking_stats, dict) else False) @property def session_id(self) -> str: session_info = self._stats.get('sessionInfo', {}) session_id_val = (session_info.get('sessionId', '') if isinstance( session_info, dict) else '') return session_id_val if isinstance(session_id_val, str) else '' @property def final_execution_duration_ms(self) -> int: duration_str = self._stats.get('finalExecutionDurationMs', '0') return (int(duration_str) if isinstance(duration_str, str) and duration_str.isdigit() else 0) @property def job_state(self) -> str: state = self._status.get('state', '') return state if isinstance(state, str) else '' @property def job_error_result(self) -> dict[str, Optional[str]]: error_result = self._status.get('errorResult') if not isinstance(error_result, dict): return {} return { 'reason': error_result.get('reason'), 'location': error_result.get('location'), 'debugInfo': error_result.get('debugInfo'), 'message': error_result.get('message'), } @property def job_errors(self) -> list[dict[str, Optional[str]]]: errors_list = self._status.get('errors', []) errors_iterable = [] if isinstance(errors_list, list): for item in errors_list: if isinstance(item, dict): errors_iterable.append({ 'reason': item.get('reason'), 'location': item.get('location'), 'debugInfo': item.get('debugInfo'), 'message': item.get('message'), }) return errors_iterable @property def materialized_view_statistics(self) -> dict[str, Any]: stats_list = self._query_stats.get('materializedViewStatistics') materialized_view = [] if isinstance(stats_list, list): for item in stats_list: if isinstance(item, dict): table_ref_data = item.get('tableReference') table_ref_obj = None if isinstance(table_ref_data, dict): project_id = table_ref_data.get('projectId') dataset_id = table_ref_data.get('datasetId') table_id = table_ref_data.get('tableId') if (isinstance(project_id, str) and project_id and isinstance(dataset_id, str) and dataset_id and isinstance(table_id, str) and table_id): table_ref_obj = BigQueryTable(project_id, dataset_id, table_id) chosen = item.get('chosen') is True saved_str = item.get('estimatedBytesSaved', '0') estimated_bytes_saved = (int(saved_str) if isinstance(saved_str, str) and saved_str.isdigit() else 0) rejected_reason = str(item.get('rejectedReason', '')) materialized_view.append({ 'chosen': chosen, 'estimatedBytesSaved': estimated_bytes_saved, 'rejectedReason': rejected_reason, 'tableReference': table_ref_obj, }) return {'materialView': materialized_view} @property def metadata_cache_statistics(self) -> dict[str, Any]: stats_list = self._query_stats.get('metadataCacheStatistics') metadata_cache = [] if isinstance(stats_list, list): for item in stats_list: if isinstance(item, dict): table_ref_data = item.get('tableReference') table_ref_obj = None if isinstance(table_ref_data, dict): project_id = table_ref_data.get('projectId') dataset_id = table_ref_data.get('datasetId') table_id = table_ref_data.get('tableId') if (isinstance(project_id, str) and project_id and isinstance(dataset_id, str) and dataset_id and isinstance(table_id, str) and table_id): table_ref_obj = BigQueryTable(project_id, dataset_id, table_id) metadata_cache.append({ 'explanation': item.get('explanation', ''), 'unusedReason': str(item.get('unusedReason', '')), 'tableReference': table_ref_obj, }) return {'tableMetadataCacheUsage': metadata_cache} # Properties derived from _information_schema_job_metadata @property def information_schema_user_email(self) -> str | None: if not self._information_schema_job_metadata: return C_NOT_AVAILABLE return self._information_schema_job_metadata.get('user_email') @property def information_schema_start_time_str(self) -> str | None: if not self._information_schema_job_metadata: return C_NOT_AVAILABLE return self._information_schema_job_metadata.get('start_time_str') @property def information_schema_end_time_str(self) -> str | None: if not self._information_schema_job_metadata: return C_NOT_AVAILABLE return self._information_schema_job_metadata.get('end_time_str') @property def information_schema_query(self) -> str | None: if not self._information_schema_job_metadata: return C_NOT_AVAILABLE return self._information_schema_job_metadata.get('query') @property def information_schema_total_modified_partitions(self) -> Union[int, str]: """The total number of partitions the job modified. This field is populated for LOAD and QUERY jobs. """ if not self._information_schema_job_metadata: return C_NOT_AVAILABLE try: total_modified_partitions = self._information_schema_job_metadata[ 'total_modified_partitions'] return total_modified_partitions except KeyError: return C_NOT_AVAILABLE @property def information_schema_resource_warning(self) -> str: """The warning message that appears if the resource usage during query processing is above the internal threshold of the system. """ if not self._information_schema_job_metadata: return C_NOT_AVAILABLE try: resource_warning = self._information_schema_job_metadata['query_info'][ 'resource_warning'] return resource_warning except KeyError: return C_NOT_AVAILABLE @property def information_schema_normalized_literals(self) -> str: """Contains the hashes of the query.""" try: query_hashes = self._information_schema_job_metadata['query_info'][ 'query_hashes']['normalized_literals'] return query_hashes except KeyError: return C_NOT_AVAILABLE @caching.cached_api_call def get_bigquery_job_api_resource_data( project_id: str, region: str, job_id: str, ) -> Union[dict[str, Any], None]: """Fetch a specific BigQuery job's raw API resource data.""" api = apis.get_api('bigquery', 'v2', project_id) query_job = api.jobs().get(projectId=project_id, location=region, jobId=job_id) try: resp = query_job.execute(num_retries=config.API_RETRIES) return resp except errors.HttpError as err: raise utils.GcpApiError(err) from err @caching.cached_api_call def get_information_schema_job_metadata( context: models.Context, project_id: str, region: str, job_id: str, creation_time_milis: Optional[int] = None, skip_permission_check: bool = False, ) -> Optional[dict[str, Any]]: """Fetch metadata about a BigQuery job from the INFORMATION_SCHEMA.""" if not apis.is_enabled(project_id, 'bigquery'): return None user_email = '' try: user_email = apis.get_user_email() except (RuntimeError, exceptions.DefaultCredentialsError): pass except AttributeError as err: if (('has no attribute' in str(err)) and ('with_quota_project' in str(err))): op.info('Running the investigation within the GCA context.') user = 'user:' + user_email if not skip_permission_check: try: policy = iam.get_project_policy(context) if (not policy.has_permission(user, 'bigquery.jobs.create')) or ( not policy.has_permission(user, 'bigquery.jobs.listAll')): op.info( f'WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions.\ \nMake sure to grant {user_email} "bigquery.jobs.create" and "bigquery.jobs.listAll".\ \nContinuing the investigation with the BigQuery job metadata obtained from the API.' ) return None except utils.GcpApiError: op.info( 'Attempting to query INFORMATION_SCHEMA with no knowledge of project' ' level permissions \n(due to missing' ' resourcemanager.projects.get permission).') else: op.info( 'Attempting to query INFORMATION_SCHEMA without checking project level permissions.' ) try: creation_time_milis_filter = ' ' if creation_time_milis: creation_time_milis_filter = ( f'AND creation_time = TIMESTAMP_MILLIS({creation_time_milis})') query = f""" SELECT user_email, start_time, end_time, query FROM `{project_id}`.`region-{region}`.INFORMATION_SCHEMA.JOBS WHERE job_id = '{job_id}' {creation_time_milis_filter} LIMIT 1 """ results = get_query_results( project_id=project_id, query=query, location=region, timeout_sec=30, poll_interval_sec=2, # Short poll interval ) if not results or len(results) != 1: # We cannot raise an exception otherwise tests that use get_bigquery_job would fail # raise ValueError(f"Job {job_id} not found in INFORMATION_SCHEMA") return None return results[0] except errors.HttpError as err: logging.warning( 'Failed to retrieve INFORMATION_SCHEMA job metadata for job %s: %s', job_id, err, ) return None except KeyError as err: logging.warning( 'Failed to parse INFORMATION_SCHEMA response for job %s: %s', job_id, err, ) return None except utils.GcpApiError as err: logging.error('GcpApiError during BigQuery query execution for job %s: %s', job_id, err) # Raise specific GcpApiError if needed for upstream handling if 'permission' in err.message.lower(): logging.debug('permissions issue FOUND HERE : %s', err.message.lower()) return None else: return None def get_bigquery_job( context: models.Context, region: str, job_id: str, skip_permission_check: bool = False) -> Union[BigQueryJob, None]: """Fetch a BigQuery job, combining API and INFORMATION_SCHEMA data.""" project_id = context.project_id if not project_id: return None try: job_api_resource_data = get_bigquery_job_api_resource_data( project_id, region, job_id) if not job_api_resource_data: return None except utils.GcpApiError as err: # This will be returned when permissions to fetch a job are missing. if 'permission' in err.message.lower(): user_email = '' try: user_email = apis.get_user_email() except (RuntimeError, AttributeError, exceptions.DefaultCredentialsError) as error: if (('has no attribute' in str(error)) and ('with_quota_project' in str(error))): op.info('Running the investigation within the GCA context.') logging.debug(('Could not retrieve BigQuery job %s.\ \n make sure to give the bigquery.jobs.get and bigquery.jobs.create permissions to %s', (project_id + ':' + region + '.' + job_id), user_email)) raise utils.GcpApiError(err) # This will be returned when a job is not found. elif 'not found' in err.message.lower(): job_id_string = project_id + ':' + region + '.' + job_id logging.debug('Could not find BigQuery job %s', job_id_string) return None else: logging.debug(( 'Could not retrieve BigQuery job %s due to an issue calling the API. \ Please restart the investigation.', (project_id + ':' + region + '.' + job_id))) return None information_schema_job_metadata = {} job_creation_millis = None creation_time_str = job_api_resource_data.get('statistics', {}).get('creationTime') if creation_time_str: try: job_creation_millis = int(creation_time_str) except (ValueError, TypeError): pass information_schema_job_metadata = get_information_schema_job_metadata( context, project_id, region, job_id, job_creation_millis, skip_permission_check) return BigQueryJob( project_id=project_id, job_api_resource_data=job_api_resource_data, information_schema_job_metadata=information_schema_job_metadata) def _parse_value(field_schema: dict, value_data: Any) -> Any: """Recursively parses a BigQuery TableCell value.""" if value_data is None: return None if field_schema.get('mode') == 'REPEATED': if not isinstance(value_data, list): # This can happen for an empty repeated field, which is represented as None return [] # For repeated fields, the value is a list of {'v': ...} objects. # The schema for each item is the same field schema but with mode set to NULLABLE. item_schema = field_schema.copy() item_schema['mode'] = 'NULLABLE' return [_parse_value(item_schema, item.get('v')) for item in value_data] if field_schema.get('type') in ('RECORD', 'STRUCT'): # For record fields, the value is a dictionary {'f': [...]}. # The schema for the record's fields is in field_schema['fields']. if isinstance(value_data, dict) and 'f' in value_data: return _parse_row(field_schema.get('fields', []), value_data['f']) return {} # For scalar types, the value is directly in 'v'. # BigQuery API returns numbers as strings, so we leave them as is. # The consumer can perform type conversion if needed. return value_data def _parse_row(schema_fields: List[dict], row_cells: List[dict]) -> dict[str, Any]: """Parses a BigQuery TableRow into a dictionary.""" row_dict = {} for i, field_schema in enumerate(schema_fields): field_name = field_schema.get('name') if field_name and i < len(row_cells): cell_data = row_cells[i] row_dict[field_name] = _parse_value(field_schema, cell_data.get('v')) return row_dict def get_query_results( project_id: str, query: str, location: Optional[str] = None, timeout_sec: int = 30, poll_interval_sec: int = 2, ) -> Optional[List[dict[str, Any]]]: """Executes a BigQuery query, waits for completion, and returns the results. Args: project_id: The GCP project ID where the query should run. query: The SQL query string to execute. location: The location (e.g., 'US', 'EU', 'us-central1') where the job should run. If None, BigQuery defaults might apply, often based on dataset locations if referenced. timeout_sec: Maximum time in seconds to wait for the query job to complete. poll_interval_sec: Time in seconds between polling the job status. Returns: A list of dictionaries representing the result rows, or None if the query fails, times out, or the API is disabled. Raises: utils.GcpApiError: If an unrecoverable API error occurs during job insertion, status check, or result fetching. """ if not apis.is_enabled(project_id, 'bigquery'): logging.warning('BigQuery API is not enabled in project %s.', project_id) return None api = apis.get_api('bigquery', 'v2', project_id) job_id = f'gcpdiag_query_{uuid.uuid4()}' job_body = { 'jobReference': { 'projectId': project_id, 'jobId': job_id, 'location': location, # Location can be None }, 'configuration': { 'query': { 'query': query, 'useLegacySql': False, # Consider adding priority, destinationTable, etc. if needed } }, } try: logging.debug( 'Starting BigQuery job %s in project %s, location %s', job_id, project_id, location or 'default', ) insert_request = api.jobs().insert(projectId=project_id, body=job_body) insert_response = insert_request.execute(num_retries=config.API_RETRIES) job_ref = insert_response['jobReference'] actual_job_id = job_ref['jobId'] actual_location = job_ref.get('location') # Get location assigned by BQ logging.debug('Job %s created. Polling for completion...', actual_job_id) start_time = time.time() while True: # Check for timeout if time.time() - start_time > timeout_sec: logging.error( 'BigQuery job %s timed out after %d seconds.', actual_job_id, timeout_sec, ) return None # Get job status logging.debug('>>> Getting job status for %s', actual_job_id) get_request = api.jobs().get( projectId=job_ref['projectId'], jobId=actual_job_id, location=actual_location, ) job_status_response = get_request.execute(num_retries=config.API_RETRIES) status = job_status_response.get('status', {}) logging.debug('>>> Job status: %s', status.get('state')) if status.get('state') == 'DONE': if status.get('errorResult'): error_info = status['errorResult'] if 'User does not have permission to query table' in error_info.get( 'message'): op.info( error_info.get('message')[15:] + '\nContinuing the investigation with the job metadata obtained from the API.' ) else: error_info = status['errorResult'] logging.error( 'BigQuery job %s failed. Reason: %s, Message: %s', actual_job_id, error_info.get('reason'), error_info.get('message'), ) # Log detailed errors if available for error in status.get('errors', []): logging.error( ' - Detail: %s (Location: %s)', error.get('message'), error.get('location'), ) return None else: logging.debug('BigQuery job %s completed successfully.', actual_job_id) break # Job finished successfully elif status.get('state') in ['PENDING', 'RUNNING']: logging.debug('>>> Job running, sleeping...') # Job still running, wait and poll again time.sleep(poll_interval_sec) else: # Unexpected state logging.error( 'BigQuery job %s entered unexpected state: %s', actual_job_id, status.get('state', 'UNKNOWN'), ) return None # Fetch results logging.debug('>>> Fetching results for job %s...', actual_job_id) # <-- ADD results_request = api.jobs().getQueryResults( projectId=job_ref['projectId'], jobId=actual_job_id, location=actual_location, # Add startIndex, maxResults for pagination if needed ) results_response = results_request.execute(num_retries=config.API_RETRIES) # Check if job actually completed (getQueryResults might return before DONE sometimes) if not results_response.get('jobComplete', False): logging.warning( 'getQueryResults returned jobComplete=False for job %s, results might' ' be incomplete.', actual_job_id, ) # Decide if you want to wait longer or return potentially partial results rows = [] if 'rows' in results_response and 'schema' in results_response: schema_fields = results_response['schema'].get('fields') if not schema_fields: return [] for row_data in results_response['rows']: if 'f' in row_data: rows.append(_parse_row(schema_fields, row_data['f'])) if results_response.get('pageToken'): logging.warning( 'Query results for job %s are paginated, but pagination ' 'is not yet implemented.', actual_job_id, ) return rows except errors.HttpError as err: logging.error('API error during BigQuery query execution for job %s: %s', job_id, err) # Raise specific GcpApiError if needed for upstream handling raise utils.GcpApiError(err) from err except Exception as e: logging.exception( 'Unexpected error during BigQuery query execution for job %s: %s', job_id, e, ) # Re-raise or handle as appropriate raise @caching.cached_api_call def get_bigquery_project(project_id: str) -> crm.Project: """Attempts to retrieve project details for the supplied BigQuery project id or number. If the project is found/accessible, it returns a Project object with the resource data. If the project cannot be retrieved, the application raises one of the exceptions below. The get_bigquery_project method avoids unnecessary printing of the error message to keep the user interface of the tool cleaner to focus on meaningful investigation results. Corresponding errors are handled gracefully downstream. Args: project_id (str): The project id or number of the project (e.g., "123456789", "example-project"). Returns: Project: An object representing the BigQuery project's full details. Raises: utils.GcpApiError: If there is an issue calling the GCP/HTTP Error API. Usage: When using project identifier from gcpdiag.models.Context project = crm.get_project(context.project_id) An unknown project identifier try: project = crm.get_project("123456789") except: # Handle exception else: # use project data """ try: logging.debug('retrieving project %s ', project_id) crm_api = apis.get_api('cloudresourcemanager', 'v3', project_id) request = crm_api.projects().get(name=f'projects/{project_id}') response = request.execute(num_retries=config.API_RETRIES) except errors.HttpError as e: error = utils.GcpApiError(response=e) raise error from e else: return crm.Project(resource_data=response) @caching.cached_api_call def get_table(project_id: str, dataset_id: str, table_id: str) -> Optional[Dict[str, Any]]: """Retrieves a BigQuery table resource if it exists. Args: project_id: The project ID. dataset_id: The dataset ID. table_id: The table ID. Returns: A dictionary representing the table resource, or None if not found. """ try: api = apis.get_api('bigquery', 'v2', project_id) request = api.tables().get(projectId=project_id, datasetId=dataset_id, tableId=table_id) response = request.execute(num_retries=config.API_RETRIES) return response except errors.HttpError as err: if err.resp.status == 404: return None raise utils.GcpApiError(err) from err ================================================ FILE: gcpdiag/queries/bigquery_stub.py ================================================ # pylint: disable=unused-argument,invalid-name """Stub API calls used in bigquery.py for testing.""" import json import logging import re import uuid from typing import Any, Optional import httplib2 from googleapiclient import errors from gcpdiag.queries import apis_stub HttpError = errors.HttpError class GetJobRequest(apis_stub.ApiStub): """Mocks jobs.get().execute() by loading a specific job file.""" def __init__(self, project_id: str, location: str, job_id: str): super().__init__() self.project_id = project_id self.job_id = job_id # Handle potential None location passed from get() self.location = location.lower() if location else 'us' self.short_job_id = job_id.split('.')[-1].split('_')[ -1] # More robust split self.json_basename = f'job_get_{self.location}_{self.short_job_id}' logging.debug('Stub: GetJobRequest prepared for %s', self.json_basename) def execute(self, num_retries=0): self._maybe_raise_api_exception() if self.job_id == 'test_notfound': raise HttpError(httplib2.Response({'status': 404}), b'Not Found') file_path = None try: json_dir = apis_stub.get_json_dir(self.project_id) file_path = json_dir / f'{self.json_basename}.json' with open(file_path, encoding='utf-8') as json_file: return json.load(json_file) except FileNotFoundError as e: logging.warning( 'Stub: File not found for GetJobRequest: %s. Raising 404.', file_path) raise HttpError(httplib2.Response({'status': 404}), b'Not Found') from e except Exception as e: logging.error( 'Stub: Error executing GetJobRequest for %s: %s', self.json_basename, e, ) raise # Add a stub for getQueryResults class GetQueryResultsRequest(apis_stub.ApiStub): """Mocks jobs.getQueryResults().execute() by loading a specific results file.""" def __init__(self, project_id: str, location: str, job_id: str): super().__init__() self.project_id = project_id self.location = location.lower() if location else 'us' # Default if None # Extract the UUID part assuming format gcpdiag_query_{uuid} self.short_job_id = job_id.split('_')[-1] self.json_basename = f'job_results_{self.location}_{self.short_job_id}' logging.debug('Stub: GetQueryResultsRequest prepared for %s', self.json_basename) def execute(self, num_retries=0): self._maybe_raise_api_exception() file_path = None try: json_dir = apis_stub.get_json_dir(self.project_id) file_path = json_dir / f'{self.json_basename}.json' with open(file_path, encoding='utf-8') as json_file: return json.load(json_file) except FileNotFoundError: # Return a default empty successful result if file not found logging.warning( 'Stub: File not found for GetQueryResultsRequest: %s. Returning empty' ' success.', file_path, ) return { 'kind': 'bigquery#getQueryResultsResponse', 'jobComplete': True, 'jobReference': { 'projectId': self.project_id, 'jobId': f'gcpdiag_query_{self.short_job_id}', 'location': self.location, }, 'schema': { 'fields': [] }, 'rows': [], 'totalRows': '0', } except Exception as e: logging.error( 'Stub: Error executing GetQueryResultsRequest for %s: %s', self.json_basename, e, ) raise # Modify BigQueryJobsStub class BigQueryJobsStub(apis_stub.ApiStub): """Mocks the object returned by bigquery_api.jobs().""" # Store job states for simulation - use a class variable _job_states: dict[str, list[dict[str, Any]]] = {} def insert(self, projectId: str, body: dict[str, Any]): """Mocks jobs.insert(). Args: projectId: The ID of the project. body: The request body. Returns: A stub response and prepares state for get(). """ job_ref = body.get('jobReference', {}) job_id = job_ref.get( 'jobId', f'gcpdiag_query_{uuid.uuid4()}') # Use provided or generate location = job_ref.get('location', 'us') # Default location # Simulate job progression: RUNNING -> DONE (default for success tests) # Store states to be returned by subsequent get() calls, unless already set # by a test if job_id not in BigQueryJobsStub._job_states: BigQueryJobsStub._job_states[job_id] = [ { 'status': { 'state': 'RUNNING' }, 'jobReference': { 'projectId': projectId, 'jobId': job_id, 'location': location, }, }, { 'status': { 'state': 'DONE' }, 'jobReference': { 'projectId': projectId, 'jobId': job_id, 'location': location, }, }, ] # Prepare the insert response insert_response = { 'kind': 'bigquery#job', 'etag': 'some_etag', 'id': f'{projectId}:{location}.{job_id}', 'selfLink': f'/projects/{projectId}/jobs/{job_id}?location={location}', 'jobReference': { 'projectId': projectId, 'jobId': job_id, 'location': location, }, 'status': { 'state': 'PENDING' }, # Initial state reported by insert 'configuration': body.get('configuration'), } logging.debug( 'Stub: jobs.insert called for %s. Prepared states: %s', job_id, BigQueryJobsStub._job_states.get(job_id), ) # Return an object that mimics the execute() method return apis_stub.RestCallStub(projectId, '', default=insert_response) def get(self, projectId: str, jobId: str, location: Optional[str] = None): """Mocks jobs.get(). Returns states based on stored sequence.""" logging.debug('Stub: jobs.get called for %s, location %s', jobId, location) effective_location = location or 'us' # Use default if None if (jobId in BigQueryJobsStub._job_states and BigQueryJobsStub._job_states[jobId]): next_state = BigQueryJobsStub._job_states[jobId].pop( 0) # Get and remove the next state logging.debug( 'Stub: jobs.get returning state: %s', next_state.get('status', {}).get('state'), ) # Ensure jobReference matches what get_query_results expects if 'jobReference' not in next_state: next_state['jobReference'] = { 'projectId': projectId, 'jobId': jobId, 'location': effective_location, } elif 'location' not in next_state['jobReference']: next_state['jobReference']['location'] = effective_location # Add other fields if needed, mimicking the real response structure next_state.setdefault('kind', 'bigquery#job') next_state.setdefault('id', f'{projectId}:{effective_location}.{jobId}') next_state.setdefault('status', {}).setdefault( 'state', 'UNKNOWN') # Default state if missing return apis_stub.RestCallStub(projectId, '', default=next_state) else: # If no specific state is prepared or states are exhausted, fallback to # file or 404 logging.warning( 'Stub: No predefined state for job %s. Falling back to file-based' ' GetJobRequest.', jobId, ) return GetJobRequest(project_id=projectId, location=effective_location, job_id=jobId) def getQueryResults(self, projectId: str, jobId: str, location: Optional[str] = None, **kwargs): """Mocks jobs.getQueryResults(). Returns a custom request object.""" logging.debug('Stub: jobs.getQueryResults called for %s, location %s', jobId, location) effective_location = location or 'us' # Use default if None return GetQueryResultsRequest(project_id=projectId, location=effective_location, job_id=jobId) def query(self, projectId: str, body: dict[str, Any]): """Mocks jobs.query(). Returns a RestCallStub for the query result.""" # Keep existing query logic for INFORMATION_SCHEMA query_text = body.get('query', '') if not isinstance(query_text, str): query_text = '' job_id_match = re.search(r"job_id\s*=\s*'([^']+)'", query_text) schema_match = re.search( r'FROM\s*`[^`]+`\.`([^`]+)`\.INFORMATION_SCHEMA\.JOBS', query_text, re.IGNORECASE, ) json_basename = 'job_query_info_schema_default' if job_id_match and schema_match: job_id_in_query = job_id_match.group(1) short_job_id = job_id_in_query.split('.')[-1] region = schema_match.group(1).lower() json_basename = f'job_query_info_schema_{region}_{short_job_id}' logging.debug( 'Stub: jobs.query parsed job=%s, region=%s -> basename=%s', short_job_id, region, json_basename, ) else: # This is likely not an INFORMATION_SCHEMA query, handle differently if # needed # For now, assume it's an INFO_SCHEMA query that failed parsing if 'INFORMATION_SCHEMA' in query_text.upper(): logging.warning( 'Stub: jobs.query could not parse job/region from INFO_SCHEMA' ' query: %s', query_text, ) else: # This could be a direct query call, not handled by get_query_results # flow logging.error('Stub: jobs.query received unexpected query type: %s', query_text) # Return an error or specific response for direct queries if needed raise NotImplementedError( "Stub doesn't handle direct jobs.query calls yet.") default_empty_result = { 'kind': 'bigquery#queryResponse', 'schema': {}, 'rows': [], 'totalRows': '0', 'jobComplete': True, } return apis_stub.RestCallStub( project_id=projectId, json_basename=json_basename, default=default_empty_result, ) # Update BigQueryApiStub to use the modified BigQueryJobsStub class BigQueryApiStub(apis_stub.ApiStub): """Mocks the top-level BigQuery API object returned by apis.get_api.""" def __init__(self): super().__init__() # Ensure a fresh jobs stub instance for each API stub instance self._jobs_stub = BigQueryJobsStub() def jobs(self): """Returns the stub for the jobs resource.""" return self._jobs_stub def new_batch_http_request(self, callback=None): raise NotImplementedError( 'Batch requests not implemented in BigQueryApiStub yet') ================================================ FILE: gcpdiag/queries/bigquery_test.py ================================================ """Tests for code in bigquery.py.""" from unittest import mock import pytest from gcpdiag import caching, models from gcpdiag.queries import apis, apis_stub, bigquery from gcpdiag.queries.bigquery import C_NOT_AVAILABLE, BigQueryJob from gcpdiag.runbook.op_test import with_operator_context from gcpdiag.utils import GcpApiError DUMMY_PROJECT_ID = 'gcpdiag-bigquery1-aaaa' DUMMY_REGION = 'us' DUMMY_JOB_ID = 'job1' DUMMY_JOB_ID_2 = 'job2' DUMMY_JOB_ID_I_S = 'information_schema_job1' DUMMY_JOB_ID_FAIL = 'job_not_found' DUMMY_JOB_FULL_ID = f'{DUMMY_PROJECT_ID}:{DUMMY_REGION.upper()}.{DUMMY_JOB_ID}' DUMMY_JOB_FULL_ID_2 = ( f'{DUMMY_PROJECT_ID}:{DUMMY_REGION.upper()}.{DUMMY_JOB_ID_2}') DUMMY_PRINCIPAL = 'user:test@example.com' DUMMY_ORG_ID = '123456789012' DUMMY_QUERY = ( 'NOT BEING EXECUTED (SELECT col1, col2 FROM my_dataset.my_table LIMIT 2)') DUMMY_UUID = 'mockresult1' # Corresponds to the results file name @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestBigQueryQueries: """Test BigQuery queries.""" @with_operator_context @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True) @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') def test_get_bigquery_job1_success_and_properties(self, mock_api_is_enabled, mock_get_user_email): # Test creating BigQueryJob object successfully for job1 and check # properties. del mock_api_is_enabled del mock_get_user_email context = models.Context(project_id=DUMMY_PROJECT_ID) job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(), DUMMY_JOB_ID) assert isinstance(job, BigQueryJob) assert job.project_id == DUMMY_PROJECT_ID assert job.id == DUMMY_JOB_FULL_ID # TOmarcialrDO: does not make much sense since models.py makes short_path # == fullpath # assert job.short_path == f'{DUMMY_PROJECT_ID}/{DUMMY_REGION.upper()}/ # {DUMMY_JOB_ID}' assert job.full_path.endswith( f'/jobs/{DUMMY_JOB_ID}?location={DUMMY_REGION.upper()}') assert job.user_email is not None assert job.query_sql is not None assert job.creation_time is not None assert isinstance(job.total_bytes_billed, int) assert isinstance(job.cache_hit, bool) assert job.job_state == 'DONE' # TOmarcialrDO: information_schema query not implemented yet # assert job.information_schema_user_email is not None # assert job.information_schema_start_time_str is not None # assert job.information_schema_end_time_str is not None # assert job.information_schema_query is not None @with_operator_context @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') @mock.patch('gcpdiag.queries.bigquery.uuid.uuid4', return_value=DUMMY_UUID) @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True) def test_get_query_results_success(self, mock_api_is_enabled, mock_uuid, mock_get_user_email): # Test get_query_results successfully executes and returns rows. del mock_api_is_enabled del mock_uuid del mock_get_user_email results = bigquery.get_query_results( project_id=DUMMY_PROJECT_ID, query=DUMMY_QUERY, location=DUMMY_REGION, # Use 'us' timeout_sec=10, # Short timeout for test poll_interval_sec=1, # Short poll interval ) assert results is not None assert isinstance(results, list) assert len(results) == 2 # Note: BQ returns strings for INTs via JSON API, handle potential type # conversion if needed assert results[0] == {'col1': 'value1', 'col2': '100'} assert results[1] == {'col1': 'value2', 'col2': '200'} @with_operator_context @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=False) def test_get_query_results_api_disabled(self, mock_api_is_enabled, mock_get_user_email): # Test get_query_results returns None when API is disabled del mock_get_user_email results = bigquery.get_query_results(project_id=DUMMY_PROJECT_ID, query=DUMMY_QUERY, location=DUMMY_REGION) assert results is None mock_api_is_enabled.assert_called_once_with(DUMMY_PROJECT_ID, 'bigquery') @with_operator_context @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True) def test_get_bigquery_job2_success(self, mock_api_is_enabled, mock_get_user_email): # Test creating BigQueryJob object successfully for job2. del mock_api_is_enabled del mock_get_user_email context = models.Context(project_id=DUMMY_PROJECT_ID) job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(), DUMMY_JOB_ID_2) assert isinstance(job, BigQueryJob) assert job.project_id == DUMMY_PROJECT_ID assert job.id == DUMMY_JOB_FULL_ID_2 assert job.job_state == 'DONE' # TOmarcialrDO: alihanoz # assert job.job_error_result == {} # assert job.job_errors == [] # Add more assertions based on job2 data (e.g., check billing > 0) assert job.total_bytes_billed >= 0 def test_get_bigquery_job_returns_none_on_api_fail(self): """Test get_bigquery_job returns None if the underlying jobs.get call fails.""" context = models.Context(project_id=DUMMY_PROJECT_ID) job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(), DUMMY_JOB_ID_FAIL) assert job is None @with_operator_context @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') def test_get_info_schema_not_found_returns_none(self, mock_get_user_email): """Verify get_information_schema_job_metadata returns None when query finds no match.""" del mock_get_user_email context = models.Context(project_id=DUMMY_PROJECT_ID) result = bigquery.get_information_schema_job_metadata( context, DUMMY_PROJECT_ID, DUMMY_REGION.upper(), DUMMY_JOB_ID_FAIL) assert result is None @with_operator_context @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=False) def test_get_info_schema_api_disabled(self, mock_api_is_enabled, mock_get_user_email): """Test jobs.query returning None when API is disabled.""" del mock_get_user_email del mock_api_is_enabled context = models.Context(project_id=DUMMY_PROJECT_ID) result = bigquery.get_information_schema_job_metadata( context, DUMMY_PROJECT_ID, DUMMY_REGION.upper(), DUMMY_JOB_ID) assert result is None @with_operator_context @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True) def test_get_bigquery_job_info_schema_fails(self, mock_api_is_enabled, mock_get_user_email): # While testing, we cannot retrieve IS job so it behaves # like an error happened when querying I_S so # job._information_schema_job_metadata = {} del mock_get_user_email del mock_api_is_enabled with caching.bypass_cache(): context = models.Context(project_id=DUMMY_PROJECT_ID) job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(), DUMMY_JOB_ID) assert isinstance(job, BigQueryJob) assert job.id == DUMMY_JOB_FULL_ID assert job.information_schema_user_email is C_NOT_AVAILABLE assert job.information_schema_start_time_str is C_NOT_AVAILABLE assert job.information_schema_end_time_str is C_NOT_AVAILABLE assert job.information_schema_query is C_NOT_AVAILABLE @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True) def test_get_job_api_data_not_found_raises_error(self, mock_api_is_enabled, mock_get_user_email): # Verify get_bigquery_job_api_resource_data raises GcpApiError on 404. del mock_api_is_enabled del mock_get_user_email with caching.bypass_cache(): with pytest.raises(GcpApiError): bigquery.get_bigquery_job_api_resource_data(DUMMY_PROJECT_ID, DUMMY_REGION.upper(), DUMMY_JOB_ID_FAIL) @with_operator_context @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True) @mock.patch.object(apis, 'get_user_email', return_value='testuser@example.com') def test_get_bigquery_job_info_schema_extended_fields_fail( self, mock_api_is_enabled, mock_get_user_email): # Test get_bigquery_job returns CONST_NOT_AVAILABLE for extended info # schema fields when the underlying query for metadata fails. # We actually do not have a working underlying query del mock_api_is_enabled del mock_get_user_email with caching.bypass_cache(): context = models.Context(project_id=DUMMY_PROJECT_ID) job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(), DUMMY_JOB_ID) assert isinstance(job, BigQueryJob) assert job.id == DUMMY_JOB_FULL_ID assert job.information_schema_total_modified_partitions == C_NOT_AVAILABLE assert job.information_schema_resource_warning == C_NOT_AVAILABLE assert job.information_schema_normalized_literals == C_NOT_AVAILABLE ================================================ FILE: gcpdiag/queries/billing.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP Billing Accounts.""" import logging import sys from typing import List, Optional import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, apis_utils from gcpdiag.utils import GcpApiError API_VERSION = 'v1' class BillingAccount(models.Resource): """Represents a Cloud Billing Account. See also the API documentation: https://cloud.google.com/billing/docs/reference/rest/v1/billingAccounts """ @property def full_path(self) -> str: return self._resource_data['name'] @property def name(self) -> str: return self._resource_data['name'] @property def display_name(self) -> str: return self._resource_data['displayName'] def is_open(self) -> bool: return self._resource_data['open'] def is_master(self) -> bool: return len(self._resource_data['masterBillingAccount']) > 0 def list_projects(self, context) -> list: return get_all_projects_in_billing_account(context, self.name) def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data class ProjectBillingInfo(models.Resource): """Represents a Billing Information about a Project. See also the API documentation: https://cloud.google.com/billing/docs/reference/rest/v1/ProjectBillingInfo """ @property def full_path(self) -> str: return self._resource_data['name'] @property def name(self) -> str: return self._resource_data['name'] @property def project_id(self) -> str: return self._resource_data['projectId'] @property def billing_account_name(self) -> str: return self._resource_data['billingAccountName'] def is_billing_enabled(self) -> bool: return self._resource_data['billingEnabled'] def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data class CostInsights(models.Resource): """Represents a Costs Insights object""" @property def full_path(self) -> str: return self._resource_data['name'] @property def description(self) -> str: return self._resource_data['description'] @property def anomaly_details(self) -> dict: return self._resource_data['content']['anomalyDetails'] @property def forecasted_units(self) -> str: return self.anomaly_details['forecastedCostData']['cost']['units'] @property def forecasted_currency(self) -> str: return self.anomaly_details['forecastedCostData']['cost']['currencyCode'] @property def actual_units(self) -> str: return self.anomaly_details['actualCostData']['cost']['units'] @property def actual_currency(self) -> str: return self.anomaly_details['actualCostData']['cost']['currencyCode'] @property def start_time(self) -> str: return self.anomaly_details['costSlice']['startTime'] @property def end_time(self) -> str: return self.anomaly_details['costSlice']['endTime'] @property def anomaly_type(self) -> str: return 'Below' if self._resource_data['insightSubtype'] == \ 'COST_BELOW_FORECASTED' else 'Above' def is_anomaly(self) -> bool: if 'description' in self._resource_data.keys(): return 'This is a cost anomaly' in self.description return False def build_anomaly_description(self): return self.description + '\nCost ' + self.anomaly_type + \ ' forecast, Forecasted: ' + self.forecasted_units + \ ' ' + self.forecasted_currency + ', Actual: ' + \ self.actual_units + ' ' + self.actual_currency + \ '\nAnomaly Period From: ' + self.start_time + ', To: ' + self.end_time def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @caching.cached_api_call def get_billing_info(project_id) -> ProjectBillingInfo: """Get Billing Information for a project, caching the result.""" project_api = apis.get_api('cloudbilling', 'v1', project_id) project_id = 'projects/' + project_id if 'projects/' not in project_id else project_id query = project_api.projects().getBillingInfo(name=project_id) logging.debug('fetching Billing Information for project %s', project_id) try: resource_data = query.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: raise GcpApiError(err) from err return ProjectBillingInfo(project_id, resource_data) @caching.cached_api_call def get_billing_account(project_id: str) -> Optional[BillingAccount]: """Get a Billing Account object by its project name, caching the result.""" if not apis.is_enabled(project_id, 'cloudbilling'): return None billing_info = get_billing_info(project_id) if not billing_info.is_billing_enabled(): return None billing_account_api = apis.get_api('cloudbilling', 'v1', project_id) query = billing_account_api.billingAccounts().get( name=billing_info.billing_account_name) logging.debug('fetching Billing Account for project %s', project_id) try: resource_data = query.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as error: e = utils.GcpApiError(error) if ('The caller does not have permission' in e.message) or ('PERMISSION_DENIED' in e.reason): # billing rules cannot be tested without permissions on billing account return None else: raise GcpApiError(error) from error return BillingAccount(project_id, resource_data) @caching.cached_api_call def get_all_billing_accounts(project_id: str) -> Optional[List[BillingAccount]]: """Get all Billing Accounts that current user has permission to view""" accounts = [] if not apis.is_enabled(project_id, 'cloudbilling'): return None api = apis.get_api('cloudbilling', API_VERSION, project_id) try: for account in apis_utils.list_all( request=api.billingAccounts().list(), next_function=api.billingAccounts().list_next, response_keyword='billingAccounts'): accounts.append(BillingAccount(project_id, account)) except utils.GcpApiError as e: if ('The caller does not have permission' in e.message) or ('PERMISSION_DENIED' in e.reason): # billing rules cannot be tested without permissions on billing account return None else: raise e return accounts @caching.cached_api_call def get_all_projects_in_billing_account( context: models.Context, billing_account_name: str) -> List[ProjectBillingInfo]: """Get all projects associated with the Billing Account that current user has permission to view""" projects = [] api = apis.get_api('cloudbilling', API_VERSION, context.project_id) for p in apis_utils.list_all( request=api.billingAccounts().projects().list(name=billing_account_name,), next_function=api.billingAccounts().projects().list_next, response_keyword='projectBillingInfo'): try: crm_api = apis.get_api('cloudresourcemanager', 'v3', p['projectId']) p_name = 'projects/' + p['projectId'] if 'projects/' not in p[ 'projectId'] else p['projectId'] request = crm_api.projects().get(name=p_name) response = request.execute(num_retries=config.API_RETRIES) projects.append(ProjectBillingInfo(response['projectId'], p)) except (utils.GcpApiError, googleapiclient.errors.HttpError) as error: if isinstance(error, googleapiclient.errors.HttpError): error = utils.GcpApiError(error) if error.reason in [ 'IAM_PERMISSION_DENIED', 'USER_PROJECT_DENIED', 'SERVICE_DISABLED' ]: # skip projects that user does not have permissions on continue else: print( f'[ERROR]: An Http Error occurred whiles accessing projects.get \n\n{error}', file=sys.stderr) raise error from error return projects @caching.cached_api_call def get_cost_insights_for_a_project(project_id: str): """Get cost insights for the project""" billing_account = get_billing_account(project_id) # If Billing Account is closed or is a reseller account then Cost Insights # are not available if (not billing_account.is_open()) or billing_account.is_master(): return None api = apis.get_api('recommender', 'v1', project_id) insight_name = billing_account.name + '/locations/global/insightTypes/google.billing.CostInsight' insights = [] for insight in apis_utils.list_all( request=api.billingAccounts().locations().insightTypes().insights().list( parent=insight_name), next_function=api.billingAccounts().locations().insightTypes().insights( ).list_next, response_keyword='insights'): insights.append(CostInsights(project_id, insight)) return insights ================================================ FILE: gcpdiag/queries/billing_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in billing.py for testing. Instead of doing real API calls, we return test JSON data. """ from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name DUMMY_PROJECT_ID = 'gcpdiag-billing1-aaaa' class BillingApiStub: """Mock object to simulate billing api calls.""" def __init__(self, project_id=DUMMY_PROJECT_ID): self.project_id = project_id def projects(self): return ProjectBillingInfo(self.project_id) def billingAccounts(self): return BillingAccountStub(self.project_id) class ProjectBillingInfo(BillingApiStub): """Mock object to simulate Project Billing Info api calls""" def getBillingInfo(self, name): return apis_stub.RestCallStub(self.project_id, 'project_billing_info') class BillingAccountStub(BillingApiStub): """Mock object to simulate Billing Account api calls""" def get(self, name): return apis_stub.RestCallStub(self.project_id, 'billing_account') def list(self): return apis_stub.RestCallStub(self.project_id, 'all_billing_accounts') def list_next(self, previous_request, previous_response): return None def projects(self): return BillingAccountProjectsStub(self.project_id) class BillingAccountProjectsStub(BillingApiStub): """Mock object to simulate Billing Account Projects api calls""" def list(self, name): return apis_stub.RestCallStub(self.project_id, 'all_billing_account_projects') def list_next(self, previous_request, previous_response): return None class RecommenderBillingApiStub: """Mock object to simulate recommender cost insights""" def __init__(self, project_id=DUMMY_PROJECT_ID): self.project_id = project_id def locations(self): return self def insightTypes(self): return self def insights(self): return self def get(self, name): return apis_stub.RestCallStub(self.project_id, 'cost_insights') def list(self, parent): return apis_stub.RestCallStub(self.project_id, 'cost_insights') def list_next(self, previous_request, previous_response): return None ================================================ FILE: gcpdiag/queries/billing_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in billing.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, billing DUMMY_PROJECT_ID = 'gcpdiag-billing1-aaaa' DUMMY_BILLING_ACCOUNT_NAME = 'Cloud Billing Support billing account' DUMMY_BILLING_ACCOUNT_IS_MASTER = False DUMMY_BILLING_ACCOUNT_IS_OPEN = True DUMMY_BILLING_ACCOUNT_HAS_PROJECTS = True DUMMY_NUMBER_ALL_BILLING_ACCOUNTS = 4 DUMMY_NUMBER_ALL_PROJECTS = 3 DUMMY_PROJECT_BILLING_ENABLED = True DUMMY_PROJECT_NAME = 'projects/gcpdiag-billing1-aaaa/billingInfo' DUMMY_PROJECT_BILLING_ACCOUNT_NAME = 'billingAccounts/005E32-00FAKE-123456' DUMMY_COST_INSIGHT_IS_ANOMALY = True DUMMY_COST_INSIGHT_FORCASTED_UNITS = '80' DUMMY_COST_INSIGHT_FORCASTED_CURRENCY = 'USD' DUMMY_COST_INSIGHT_ACTUAL_UNITS = '16' DUMMY_COST_INSIGHT_ACTUAL_CURRENCY = 'USD' DUMMY_COST_INSIGHT_ANOMALY_TYPE = 'Below' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestBilling: """Test Billing queries""" def test_get_billing_account(self): context = models.Context(project_id=DUMMY_PROJECT_ID) billing_account = billing.get_billing_account(context.project_id) assert billing_account.display_name == DUMMY_BILLING_ACCOUNT_NAME assert billing_account.is_open() == DUMMY_BILLING_ACCOUNT_IS_OPEN assert billing_account.is_master() == DUMMY_BILLING_ACCOUNT_IS_MASTER assert (len(billing_account.list_projects(context)) > 0) == DUMMY_BILLING_ACCOUNT_HAS_PROJECTS def test_get_all_billing_accounts(self): context = models.Context(project_id=DUMMY_PROJECT_ID) billing_accounts = billing.get_all_billing_accounts(context.project_id) assert len(billing_accounts) == DUMMY_NUMBER_ALL_BILLING_ACCOUNTS assert billing_accounts[1].display_name == DUMMY_BILLING_ACCOUNT_NAME def test_get_all_projects_in_billing_account(self): context = models.Context(project_id=DUMMY_PROJECT_ID) billing_account = billing.get_billing_account(context.project_id) projects = billing.get_all_projects_in_billing_account( context, billing_account.name) assert len(projects) == DUMMY_NUMBER_ALL_PROJECTS assert projects[0].project_id == DUMMY_PROJECT_ID def test_get_billing_info(self): context = models.Context(project_id=DUMMY_PROJECT_ID) project_billing_info = billing.get_billing_info(context.project_id) assert project_billing_info.billing_account_name == DUMMY_PROJECT_BILLING_ACCOUNT_NAME assert project_billing_info.name == DUMMY_PROJECT_NAME assert project_billing_info.is_billing_enabled( ) == DUMMY_PROJECT_BILLING_ENABLED def test_get_cost_insights_for_a_project(self): context = models.Context(project_id=DUMMY_PROJECT_ID) cost_insights = billing.get_cost_insights_for_a_project( context.project_id)[0] assert cost_insights.is_anomaly() == DUMMY_COST_INSIGHT_IS_ANOMALY assert cost_insights.forecasted_units == DUMMY_COST_INSIGHT_FORCASTED_UNITS assert cost_insights.forecasted_currency == DUMMY_COST_INSIGHT_FORCASTED_CURRENCY assert cost_insights.actual_units == DUMMY_COST_INSIGHT_ACTUAL_UNITS assert cost_insights.actual_currency == DUMMY_COST_INSIGHT_ACTUAL_CURRENCY assert cost_insights.anomaly_type == DUMMY_COST_INSIGHT_ANOMALY_TYPE ================================================ FILE: gcpdiag/queries/cloudasset.py ================================================ # Copyright 2024 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. # Lint as: python3 """Queries related to GCP Cloud Asset Inventory.""" import logging import re from typing import Dict, Mapping, Optional import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis class AssetResource(models.Resource): """Represents Resource Retrieved from the Cloud Asset Inventory.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: m = re.search(r'//(.+)', self._resource_data['name']) if not m: raise RuntimeError('can\'t determine name of service %s' % (self._resource_data['name'])) return m.group(1) @property def full_path(self) -> str: return self.name @property def asset_type(self) -> str: return self._resource_data['assetType'] @caching.cached_api_call def search_all_resources( project_id: str, asset_type: Optional[str] = None, query: Optional[str] = None, ) -> Mapping[str, AssetResource]: """Searches all resources in the project.""" resources: Dict[str, AssetResource] = {} if not apis.is_enabled(project_id, 'cloudasset'): return resources cloudasset_api = apis.get_api('cloudasset', 'v1', project_id) logging.debug('fetching list of resources in the project %s', project_id) request = cloudasset_api.v1().searchAllResources( scope=f'projects/{project_id}', assetTypes=asset_type, query=query) response = request.execute(num_retries=config.API_RETRIES) try: if 'results' in response: for resource in response['results']: resources[resource['name']] = AssetResource(project_id, resource) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return resources ================================================ FILE: gcpdiag/queries/cloudasset_stub.py ================================================ # Copyright 2024 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. """Stub API calls used in cloudasset.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub #pylint: disable=unused-argument class CloudAssetApiStub(apis_stub.ApiStub): """Mock object to simulate Cloud Asset api calls.""" def v1(self): return self # pylint: disable=invalid-name def searchAllResources(self, scope, assetTypes=None, query=None): project_id_match = re.match(r'projects/([^/]*)', scope) if not project_id_match: raise RuntimeError(f"Can't parse scope {scope}") project_id = project_id_match.group(1) location_match = re.match(r'location:([^/]*)', query) if not location_match: raise RuntimeError(f"Can't parse query {query}") location = location_match.group(1) return apis_stub.RestCallStub(project_id, f'search-all-resources-{location}') ================================================ FILE: gcpdiag/queries/cloudasset_test.py ================================================ # Copyright 2024 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. """Test code in cloudasset.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, cloudasset DUMMY_PROJECT_NAME = 'gcpdiag-cloudasset1-aaaa' DUMMY_QUERY = 'location:us-central1' ASSET_TYPE1 = 'compute.googleapis.com/Subnetwork' ASSET_TYPE2 = 'compute.googleapis.com/Address' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestCloudAsset: """Test CloudAsset.""" def test_search_all_resources(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) asset_resources = cloudasset.search_all_resources(context.project_id, query=DUMMY_QUERY) assert len(asset_resources) == 4 assert ASSET_TYPE1 in [ resource.asset_type for resource in asset_resources.values() ] assert ASSET_TYPE2 in [ resource.asset_type for resource in asset_resources.values() ] ================================================ FILE: gcpdiag/queries/cloudrun.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP Cloud Run service.""" import logging import re from typing import Dict, Iterable, Mapping import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis class Service(models.Resource): """Represents Cloud Run service.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: m = re.search(r'/services/([^/]+)$', self._resource_data['name']) if not m: raise RuntimeError('can\'t determine name of service %s' % (self._resource_data['name'])) return m.group(1) @property def id(self) -> str: return self._resource_data['uid'] @property def full_path(self) -> str: return self._resource_data['name'] @property def conditions(self) -> Dict[str, 'ServiceCondition']: return { condition['type']: ServiceCondition(condition) for condition in self._resource_data['conditions'] } @property def short_path(self) -> str: path = self.project_id + '/' + self.id return path class ServiceCondition: """Represents Cloud Run service status condition.""" _resource_data: dict def __init__(self, resource_data): self._resource_data = resource_data @property def message(self) -> str: return self._resource_data.get('message', '') def get_all_locations(project_id: str) -> Iterable[str]: """Return list of all regions Args: project_id (str): project id for this request Raises: utils.GcpApiError: Raises GcpApiError in case of query issues Returns: Iterable[Region]: Return list of all regions """ try: cloudrun_api = apis.get_api('run', 'v1', project_id) request = cloudrun_api.projects().locations().list( name=f'projects/{project_id}') response = request.execute(num_retries=config.API_RETRIES) if not response or 'locations' not in response: return set() return { location['name'] for location in response['locations'] if 'name' in location } except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err @caching.cached_api_call def get_services(context: models.Context) -> Mapping[str, Service]: """Get a list of Cloud Run services matching the given context, indexed by service id.""" services: Dict[str, Service] = {} if not apis.is_enabled(context.project_id, 'run'): return services locations = get_all_locations(context.project_id) for location in locations: m = re.search(r'/locations/([^/]+)$', location) if not m: continue region = m.group(1) cloudrun_api = apis.get_api('run', 'v2', context.project_id) logging.debug( 'fetching list of cloud run services in the project %s for the region %s', context.project_id, region) query = cloudrun_api.projects().locations().services().list( parent=f'projects/{context.project_id}/locations/{region}') try: resp = query.execute(num_retries=config.API_RETRIES) if 'services' not in resp: continue for s in resp['services']: # projects/{project}/locations/{location}/services/{serviceId}. result = re.match(r'projects/[^/]+/locations/([^/]+)/services/([^/]+)', s['name']) if not result: logging.error('invalid cloudrun name: %s', s['name']) raise RuntimeError( 'missing data in projects.locations.services.list response') location = result.group(1) labels = s.get('labels', {}) name = result.group(2) if not context.match_project_resource( location=location, labels=labels, resource=name): continue services[s['uid']] = Service(project_id=context.project_id, resource_data=s) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return services def get_service(project_id: str, region: str, service_name: str) -> Service: cloudrun_api = apis.get_api('run', 'v2', project_id) request = cloudrun_api.projects().locations().services().get( name=f'projects/{project_id}/locations/{region}/services/{service_name}') response = request.execute(num_retries=config.API_RETRIES) return Service(project_id, response) ================================================ FILE: gcpdiag/queries/cloudrun_stub.py ================================================ # 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. # Lint as: python3 """Stub API calls used in cloudrun.py for testing. Instead of doing real API calls, we return test JSON data. """ import json import re import googleapiclient.errors import httplib2 from gcpdiag.queries import apis_stub #pylint: disable=unused-argument class CloudRunApiStub: """Mock object to simulate function api calls.""" def projects(self): return self def locations(self): return self def services(self): return self def list(self, **args): if 'parent' in args: m = re.match(r'projects/([^/]+)/', args['parent']) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'cloudrun_services') m = re.match(r'projects/([^/]+)', args['name']) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'locations') def get(self, name): return GetServiceRequest(name) class GetServiceRequest: """Fake get service request that finds the service in the captured list response.""" def __init__(self, name: str): self.name = name def execute(self, num_retries=0): m = re.match(r'projects/([^/]+)/locations/[^/]+/services/[^/]+', self.name) project_id = m.group(1) json_dir = apis_stub.get_json_dir(project_id) with open(json_dir / 'cloudrun_services.json', encoding='utf-8') as json_file: response = json.load(json_file) services = response['services'] for service in services: if service['name'] == self.name: return service raise googleapiclient.errors.HttpError(httplib2.Response({'status': 404}), b'Not found') ================================================ FILE: gcpdiag/queries/cloudrun_test.py ================================================ # 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. # Lint as: python3 """Test code in cloudrun.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, cloudrun DUMMY_PROJECT_NAME = 'gcpdiag-cloudrun1-aaaa' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestCloudRun: """Test Cloud Run""" def test_get_services(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=['us-central1']) services = cloudrun.get_services(context) assert len(services) == 1 def test_get_service(self): service = cloudrun.get_service(DUMMY_PROJECT_NAME, 'us-central1', 'cloudrun1') expected = 'projects/gcpdiag-cloudrun1-aaaa/locations/us-central1/services/cloudrun1' assert service.full_path == expected ================================================ FILE: gcpdiag/queries/cloudsql.py ================================================ # Copyright 2021 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. """Queries related to CloudSQL.""" import ipaddress from typing import Iterable, List from boltons.iterutils import get_path from gcpdiag import caching, config, models from gcpdiag.queries import apis, network class Instance(models.Resource): """ Represents CloudSQL Instance""" _resource_data: dict def __init__(self, project_id: str, resource_data: dict): super().__init__(project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def state(self) -> str: return self._resource_data['state'] @property def version(self) -> str: return self._resource_data['databaseVersion'] @property def is_regional(self) -> bool: return get_path(self._resource_data, ('settings', 'availabilityType'), default='ZONAL') == 'REGIONAL' @property def ip_addresses(self) -> Iterable[network.IPv4AddrOrIPv6Addr]: return [ ipaddress.ip_address(nic['ipAddress']) for nic in self._resource_data.get('ipAddresses', []) ] @property def has_public_ip(self) -> bool: return get_path(self._resource_data, ('settings', 'ipConfiguration', 'ipv4Enabled')) @property def has_maint_window(self) -> int: try: return get_path(self._resource_data, ('settings', 'maintenanceWindow', 'day')) except KeyError: return 0 @property def is_storage_auto_resize_enabled(self) -> bool: return get_path(self._resource_data, ('settings', 'storageAutoResize')) @property def has_del_protection(self) -> bool: return get_path(self._resource_data, ('settings', 'deletionProtectionEnabled'), False) @property def authorizednetworks(self) -> List[str]: authorizednetworks = get_path( self._resource_data, ('settings', 'ipConfiguration', 'authorizedNetworks'), []) return [ authorizednetwork['value'] for authorizednetwork in authorizednetworks ] @property def is_publically_accessible(self) -> List[str]: return self.authorizednetworks @property def is_automated_backup_enabled(self) -> bool: return get_path(self._resource_data, ('settings', 'backupConfiguration', 'enabled')) @property def is_suspended_state(self) -> bool: return self.state == 'SUSPENDED' @property def is_shared_core(self) -> bool: shared_core_tiers = ['db-g1-small', 'db-f1-micro'] return get_path(self._resource_data, ('settings', 'tier')) in shared_core_tiers @property def is_high_available(self) -> bool: return get_path(self._resource_data, ('settings', 'availabilityType')) == 'REGIONAL' @property def flags(self) -> dict: flags = get_path(self._resource_data, ('settings', 'databaseFlags'), []) return {flag['name']: flag['value'] for flag in flags} @property def is_log_output_configured_as_table(self) -> bool: return self.flags.get('log_output') == 'TABLE' @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def full_path(self) -> str: return self.self_link def __str__(self) -> str: return self.self_link @caching.cached_api_call def get_instances(context: models.Context) -> Iterable[Instance]: if not apis.is_enabled(context.project_id, 'sqladmin'): return [] api = apis.get_api('sqladmin', 'v1', context.project_id) query = api.instances().list(project=context.project_id) resp = query.execute(num_retries=config.API_RETRIES) databases = [] for d in resp.get('items', []): location = d.get('region', '') labels = d.get('userLabels', {}) resource = d.get('name', '') if not context.match_project_resource( location=location, labels=labels, resource=resource): continue databases.append(Instance(context.project_id, d)) return databases ================================================ FILE: gcpdiag/queries/cloudsql_stub.py ================================================ # Copyright 2021 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. """Stub API calls used in cloudsql.py for testing. Instead of doing real API calls, we return test JSON data. """ from gcpdiag.queries import apis_stub #pylint: disable=unused-argument class CloudSQLApiStub: """Mock object to simulate CloudSQL api calls.""" def instances(self): return self # pylint: disable=invalid-name def list(self, project): return apis_stub.RestCallStub(project, 'cloudsql-instances', default={}) ================================================ FILE: gcpdiag/queries/cloudsql_test.py ================================================ # Copyright 2021 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. """Test code in cloudsql.py.""" import ipaddress from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, cloudsql DUMMY_PROJECT_NAME = 'gcpdiag-cloudsql1-aaaa' INSTANCE_IP = ipaddress.ip_address('172.17.0.3') @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestCloudSQL: """Test CloudSQL""" def test_get_instances(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = cloudsql.get_instances(context) assert len(instances) == 1 def test_docker_bridge_ip_addresses(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = cloudsql.get_instances(context) assert INSTANCE_IP in instances[0].ip_addresses ================================================ FILE: gcpdiag/queries/composer.py ================================================ # Copyright 2021 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. """Queries related to Composer.""" import logging import re from typing import Iterable, List, Tuple from boltons.iterutils import get_path from packaging import version from gcpdiag import caching, models from gcpdiag.lint import get_executor from gcpdiag.queries import apis, crm class Environment(models.Resource): """ Represents Composer environment """ _resource_data: dict def __init__(self, project_id: str, resource_data: dict): super().__init__(project_id) self._resource_data = resource_data self.region, self.name = self.parse_full_path() self.version_pattern = re.compile(r'composer-(.*)-airflow-(.*)') @property def num_schedulers(self) -> int: return get_path(self._resource_data, ('config', 'workloadsConfig', 'scheduler', 'count'), default=1) @property def worker_cpu(self) -> float: return get_path(self._resource_data, ('config', 'workloadsConfig', 'worker', 'cpu')) @property def worker_memory_gb(self) -> float: return get_path(self._resource_data, ('config', 'workloadsConfig', 'worker', 'memoryGb')) @property def worker_max_count(self) -> int: return get_path(self._resource_data, ('config', 'workloadsConfig', 'worker', 'maxCount')) @property def worker_concurrency(self) -> float: def default_value(): airflow_version = self.airflow_version if version.parse(airflow_version) < version.parse('2.3.3'): return 12 * self.worker_cpu else: return min(32, 12 * self.worker_cpu, 8 * self.worker_memory_gb) return float( self.airflow_config_overrides.get('celery-worker_concurrency', default_value())) @property def parallelism(self) -> float: return float(self.airflow_config_overrides.get('core-parallelism', 'inf')) @property def composer_version(self) -> str: v = self.version_pattern.search(self.image_version) assert v is not None return v.group(1) @property def airflow_version(self) -> str: v = self.version_pattern.search(self.image_version) assert v is not None return v.group(2) @property def is_composer2(self) -> bool: return self.composer_version.startswith('2') @property def full_path(self) -> str: return self._resource_data['name'] @property def state(self) -> str: return self._resource_data['state'] @property def image_version(self) -> str: return self._resource_data['config']['softwareConfig']['imageVersion'] @property def short_path(self) -> str: return f'{self.project_id}/{self.region}/{self.name}' @property def airflow_config_overrides(self) -> dict: return self._resource_data['config']['softwareConfig'].get( 'airflowConfigOverrides', {}) @property def service_account(self) -> str: sa = self._resource_data['config']['nodeConfig'].get('serviceAccount') if sa is None: # serviceAccount is marked as optional in REST API docs # using a default GCE SA as a fallback project_nr = crm.get_project(self.project_id).number sa = f'{project_nr}-compute@developer.gserviceaccount.com' return sa def parse_full_path(self) -> Tuple[str, str]: match = re.match(r'projects/[^/]*/locations/([^/]*)/environments/([^/]*)', self.full_path) if not match: raise RuntimeError(f'Can\'t parse full_path {self.full_path}') return match.group(1), match.group(2) def __str__(self) -> str: return self.short_path def is_private_ip(self) -> bool: return self._resource_data['config']['privateEnvironmentConfig'].get( 'enablePrivateEnvironment', False) @property def gke_cluster(self) -> str: return self._resource_data['config']['gkeCluster'] COMPOSER_REGIONS = [ 'asia-northeast2', 'us-central1', 'northamerica-northeast1', 'us-west3', 'southamerica-east1', 'us-east1', 'asia-northeast1', 'europe-west1', 'europe-west2', 'asia-northeast3', 'us-west4', 'asia-east2', 'europe-central2', 'europe-west6', 'us-west2', 'australia-southeast1', 'europe-west3', 'asia-south1', 'us-west1', 'us-east4', 'asia-southeast1' ] def _query_region_envs(region, api, project_id): query = api.projects().locations().environments().list( parent=f'projects/{project_id}/locations/{region}') # be careful not to retry too many times because querying all regions # sometimes causes requests to fail permanently resp = query.execute(num_retries=1) return resp.get('environments', []) def _query_regions_envs(regions, api, project_id, context: models.Context): result: List[Environment] = [] executor = get_executor(context) for descriptions in executor.map( lambda r: _query_region_envs(r, api, project_id), regions): result += descriptions return result @caching.cached_api_call def get_environments(context: models.Context) -> Iterable[Environment]: environments: List[Environment] = [] if not apis.is_enabled(context.project_id, 'composer'): return environments api = apis.get_api('composer', 'v1', context.project_id) for env in _query_regions_envs(COMPOSER_REGIONS, api, context.project_id, context): # projects/{projectId}/locations/{locationId}/environments/{environmentId}. result = re.match(r'projects/[^/]+/locations/([^/]+)/environments/([^/]+)', env['name']) if not result: logging.error('invalid composer name: %s', env['name']) continue location = result.group(1) labels = env.get('labels', {}) name = result.group(2) if not context.match_project_resource( location=location, labels=labels, resource=name): continue environments.append(Environment(context.project_id, env)) return environments ================================================ FILE: gcpdiag/queries/composer_stub.py ================================================ # Copyright 2021 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. """Stub API calls used in composer.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub #pylint: disable=unused-argument class ComposerApiStub: """Mock object to simulate Composer api calls.""" def projects(self): return self def locations(self): return self def environments(self): return self # pylint: disable=invalid-name def list(self, parent): match = re.match(r'projects/([^/]*)/locations/([^/]*)', parent) if not match: raise RuntimeError(f"Can't parse parent {parent}") project_id, region = match.group(1), match.group(2) return apis_stub.RestCallStub(project_id, f'composer-environments-{region}', default={}) ================================================ FILE: gcpdiag/queries/composer_test.py ================================================ # Copyright 2021 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. """Test code in composer.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, composer DUMMY_PROJECT_NAME = 'gcpdiag-composer1-aaaa' GCE_SERVICE_ACCOUNT = '12340005-compute@developer.gserviceaccount.com' ENV_SERVICE_ACCOUNT = f'env2sa@{DUMMY_PROJECT_NAME}.iam.gserviceaccount.com' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestComposer: """Test Composer""" def test_get_environments(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) environments = composer.get_environments(context) assert len(environments) == 2 def test_service_account(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) environments = composer.get_environments(context) assert ('env1', GCE_SERVICE_ACCOUNT) in [ (c.name, c.service_account) for c in environments ] assert ('env2', ENV_SERVICE_ACCOUNT) in [ (c.name, c.service_account) for c in environments ] def test_is_private_ip(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) environments = composer.get_environments(context) assert ('env1', False) in [(c.name, c.is_private_ip()) for c in environments ] assert ('env2', True) in [(c.name, c.is_private_ip()) for c in environments] ================================================ FILE: gcpdiag/queries/crm.py ================================================ # Copyright 2021 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. """Queries related to Resource Manager (projects, resources).""" import logging import re import sys from typing import List import googleapiclient from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, apis_utils from gcpdiag.queries.billing import ProjectBillingInfo, get_billing_info class Project(models.Resource): """Represents a Project resource. See also the API documentation: https://cloud.google.com/resource-manager/reference/rest/v3/projects/get """ _id: str _resource_data: dict _number: int def __init__(self, resource_data): super().__init__(project_id=resource_data['projectId']) self._id = resource_data['projectId'] self._resource_data = resource_data match = re.match(r'projects/(\d+)$', resource_data['name']) if not match: raise ValueError(f'can\'t determine project id ({resource_data})') self._number = int(match.group(1)) @property def number(self) -> int: return self._number @property def id(self) -> str: """Project id (not project number).""" return self._id @property def name(self) -> str: return self._resource_data['displayName'] @property def full_path(self) -> str: return f'projects/{self._id}' @property def short_path(self) -> str: return self._id @property def default_compute_service_account(self) -> str: return f'{self.number}-compute@developer.gserviceaccount.com' @property def parent(self) -> str: return self._resource_data['parent'] @caching.cached_api_call def get_project(project_id: str) -> Project: '''Attempts to retrieve project details for the supplied project id or number. If the project is found/accessible, it returns a Project object with the resource data. If the project cannot be retrieved, the application raises one of the exceptions below. Args: project_id (str): The project id or number of the project (e.g., "123456789", "example-project"). Returns: Project: An object representing the project's full details. Raises: utils.GcpApiError: If there is an issue calling the GCP/HTTP Error API. Usage: When using project identifier from gcpdiag.models.Context project = crm.get_project(context.project_id) An unknown project identifier try: project = crm.get_project("123456789") except: # Handle exception else: # use project data ''' try: logging.debug('retrieving project %s ', project_id) crm_api = apis.get_api('cloudresourcemanager', 'v3', project_id) request = crm_api.projects().get(name=f'projects/{project_id}') response = request.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as e: error = utils.GcpApiError(response=e) if 'IAM_PERMISSION_DENIED' == error.reason: print( f'[ERROR]:Authenticated account doesn\'t have access to project details of {project_id}.' f'\nExecute:\ngcloud projects add-iam-policy-binding {project_id} --role=roles/viewer' '--member="user|group|serviceAccount:EMAIL_ACCOUNT"', file=sys.stderr) else: print(f'[ERROR]:can\'t access project {project_id}: {error.message}.', file=sys.stderr) print( f'[DEBUG]: An Http Error occurred whiles accessing projects.get \n\n{e}', file=sys.stderr) raise error from e else: return Project(resource_data=response) @caching.cached_api_call def get_all_projects_in_parent(project_id: str) -> List[ProjectBillingInfo]: """Get all projects in the Parent Folder that current user has permission to view""" projects: List[ProjectBillingInfo] = [] if (not project_id) or (not apis.is_enabled(project_id, 'cloudbilling')): return projects project = get_project(project_id) p_filter = ('parent.type:' + project.parent.split('/')[0][:-1] + ' parent.id:' + project.parent.split('/')[1] if project.parent else '') api = apis.get_api('cloudresourcemanager', 'v3') for p in apis_utils.list_all(request=api.projects().search(query=p_filter), next_function=api.projects().search_next, response_keyword='projects'): try: crm_api = apis.get_api('cloudresourcemanager', 'v3', p['projectId']) p_name = 'projects/' + p['projectId'] if 'projects/' not in p[ 'projectId'] else p['projectId'] request = crm_api.projects().get(name=p_name) response = request.execute(num_retries=config.API_RETRIES) projects.append(get_billing_info(response['projectId'])) except (utils.GcpApiError, googleapiclient.errors.HttpError) as error: if isinstance(error, googleapiclient.errors.HttpError): error = utils.GcpApiError(error) if error.reason in [ 'IAM_PERMISSION_DENIED', 'USER_PROJECT_DENIED', 'SERVICE_DISABLED' ]: # skip projects that user does not have permissions on continue else: print( f'[ERROR]: An Http Error occurred whiles accessing projects.get \n\n{error}', file=sys.stderr) raise error from error return projects class Organization(models.Resource): """Represents an Organization resource. See also the API documentation: https://cloud.google.com/resource-manager/reference/rest/v1/organizations/get """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def id(self) -> str: """The numeric organization ID.""" # Note: organization ID is returned in the format 'organizations/12345' return self._resource_data['name'].split('/')[-1] @property def name(self) -> str: """The organization's display name.""" return self._resource_data['displayName'] @property def full_path(self) -> str: return self._resource_data['name'] @property def short_path(self) -> str: return f"organizations/{self.id}" @caching.cached_api_call def get_organization(project_id: str, skip_error_print: bool = True) -> Organization | None: """Retrieves the parent Organization for a given project. This function first finds the project's ancestry to identify the organization ID, then fetches the organization's details. Args: project_id (str): The ID of the project whose organization is to be fetched. Returns: An Organization object if the project belongs to an organization, otherwise None. Raises: utils.GcpApiError: If there is an issue calling the GCP/HTTP Error API. """ try: logging.debug('retrieving ancestry for project %s', project_id) crm_v1_api = apis.get_api('cloudresourcemanager', 'v1', project_id) ancestry_request = crm_v1_api.projects().getAncestry(projectId=project_id) ancestry_response = ancestry_request.execute(num_retries=config.API_RETRIES) org_id = None for ancestor in ancestry_response.get('ancestor', []): if ancestor.get('resourceId', {}).get('type') == 'organization': org_id = ancestor['resourceId']['id'] break if not org_id: logging.debug('project %s is not part of an organization', project_id) return None crm_v1_api = apis.get_api('cloudresourcemanager', 'v1', project_id) org_request = crm_v1_api.organizations().get(name=f'organizations/{org_id}') org_response = org_request.execute(num_retries=config.API_RETRIES) return Organization(project_id=project_id, resource_data=org_response) except googleapiclient.errors.HttpError as e: error = utils.GcpApiError(response=e) if not skip_error_print: print( f'[ERROR]: can\'t access organization for project {project_id}: {error.message}.', file=sys.stderr) print( f'[DEBUG]: An Http Error occurred while accessing organization details \n\n{e}', file=sys.stderr) raise error from e ================================================ FILE: gcpdiag/queries/crm_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in crm.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument DUMMY_PROJECT_ID = 'gcpdiag-billing1-aaaa' class CrmApiStub: """Mock object to simulate CRM API calls.""" # example API call: # crm_api.projects().getIamPolicy(resource=self._project_id).execute() def new_batch_http_request(self): return apis_stub.BatchRequestStub() def projects(self): return self def organizations(self): return self # pylint: disable=redefined-builtin def list(self, parent=None, page_token=None, filter=None): if not parent: return apis_stub.RestCallStub(DUMMY_PROJECT_ID, 'projects') def list_next(self, previous_request, previous_response): return None def search(self, query=None): return apis_stub.RestCallStub(DUMMY_PROJECT_ID, 'projects') def search_next(self, previous_request, previous_response): return None # pylint: disable=invalid-name def get(self, project_id=None, name=None): if not project_id and name is not None: m = re.match(r'projects/(.*)', name) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'project') # pylint: disable=invalid-name def getAncestry(self, projectId='gcpdiag-bigquery1-aaaa', project_id=None): if not project_id and projectId is not None: #m = re.match(r'^(.*?):getAncestry$', projectId) #project_id = m.group(1) project_id = projectId return apis_stub.RestCallStub(project_id, 'ancestor') # pylint: disable=invalid-name def getIamPolicy(self, resource): m = re.match(r'projects/(.*)', resource) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'iam-policy') # pylint: disable=invalid-name def getEffectiveOrgPolicy(self, resource, body): m = re.match(r'projects/([^/]+)', resource) if not m: raise ValueError( 'only projects are supported for getEffectiveOrgPolicy stub') project_id = m.group(1) if 'constraint' not in body: raise ValueError('constraint not defined') m = re.match(r'(customConstraints|constraints)/([^/]+)', body['constraint']) if not m: raise ValueError( f"constraint doesn\'t start with constraints/: {body['constraint']}") return apis_stub.RestCallStub(project_id, f'org-constraint-{m.group(2)}') def listOrgPolicies(self, resource): m = re.match(r'projects/([^/]+)', resource) if not m: raise ValueError('only projects are supported for listOrgPolicies stub') project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'org-policies') def listOrgPolicies_next(self, previous_request, previous_response): if isinstance(previous_response, dict) and previous_response.get('nextPageToken'): return apis_stub.RestCallStub( project_id=previous_request.project_id, json_basename=previous_request.json_basename, page=previous_request.page + 1, ) else: return None ================================================ FILE: gcpdiag/queries/crm_test.py ================================================ # Copyright 2021 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. """Test code in crm.py.""" from unittest import mock import diskcache from gcpdiag.queries import apis_stub, crm DUMMY_PROJECT_ID = 'gcpdiag-gke1-aaaa' DUMMY_PROJECT_NR = 12340002 DUMMY_PROJECT_NAME = 'gcpdiag test - gke1' DUMMY_PROJECT_PARENT = 'folders/422810093603' def get_cache_stub(): """Use a temporary directory instead of the user cache for testing.""" return diskcache.Cache() @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.caching.get_disk_cache', new=get_cache_stub) class Test: """Test project.py""" def test_get_project(self): p = crm.get_project(DUMMY_PROJECT_ID) assert p.id == DUMMY_PROJECT_ID assert p.number == DUMMY_PROJECT_NR assert p.name == DUMMY_PROJECT_NAME assert p.parent == DUMMY_PROJECT_PARENT # getIamPolicy is tested in iam_test.py # getEffectiveOrgPolicy is tested in orgpolicy_test.py # listOrgPolicies is tested in orgpolicy_test.py ================================================ FILE: gcpdiag/queries/dataflow.py ================================================ """Queries related to Dataflow.""" import logging from datetime import datetime from typing import List, Optional, Union import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.executor import get_executor from gcpdiag.queries import apis, apis_utils, logs DATAFLOW_REGIONS = [ 'asia-northeast2', 'us-central1', 'northamerica-northeast1', 'us-west3', 'southamerica-east1', 'us-east1', 'asia-northeast1', 'europe-west1', 'europe-west2', 'asia-northeast3', 'us-west4', 'asia-east2', 'europe-central2', 'europe-west6', 'us-west2', 'australia-southeast1', 'europe-west3', 'asia-south1', 'us-west1', 'us-east4', 'asia-southeast1' ] class Job(models.Resource): """Represents Dataflow job. resource_data is of the form similar to: {'id': 'my_job_id', 'projectId': 'my_project_id', 'name': 'pubsubtogcs-20240328-122953', 'environment': {}, 'currentState': 'JOB_STATE_FAILED', 'currentStateTime': '2024-03-28T12:34:27.383249Z', 'createTime': '2024-03-28T12:29:55.284524Z', 'location': 'europe-west2', 'startTime': '2024-03-28T12:29:55.284524Z'} """ _resource_data: dict project_id: str def __init__(self, project_id: str, resource_data: dict): super().__init__(project_id) self._resource_data = resource_data @property def full_path(self) -> str: return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def state(self) -> str: return self._resource_data['currentState'] @property def job_type(self) -> str: return self._resource_data['type'] @property def location(self) -> str: return self._resource_data['location'] @property def sdk_support_status(self) -> str: return self._resource_data['jobMetadata']['sdkVersion']['sdkSupportStatus'] @property def sdk_language(self) -> str: return self._resource_data['jobMetadata']['sdkVersion'][ 'versionDisplayName'] @property def minutes_in_current_state(self) -> int: timestamp = datetime.strptime(self._resource_data['currentStateTime'], '%Y-%m-%dT%H:%M:%S.%fZ') delta = datetime.now() - timestamp return int(delta.total_seconds() // 60) def get_region_dataflow_jobs(api, context: models.Context, region: str) -> List[Job]: response = apis_utils.list_all( request=api.projects().locations().jobs().list( projectId=context.project_id, location=region), next_function=api.projects().locations().jobs().list_next, response_keyword='jobs') jobs = [] for job in response: location = job.get('location', '') labels = job.get('labels', {}) name = job.get('name', '') # add job id as one of labels for filtering labels['id'] = job.get('id', '') # we could get the specific job but correctly matching the location will take too # much effort. Hence get all the jobs and filter afterwards # https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs/list#query-parameters if not context.match_project_resource( location=location, labels=labels, resource=name): continue jobs.append(Job(context.project_id, job)) return jobs @caching.cached_api_call def get_all_dataflow_jobs(context: models.Context) -> List[Job]: api = apis.get_api('dataflow', 'v1b3', context.project_id) if not apis.is_enabled(context.project_id, 'dataflow'): return [] result: List[Job] = [] executor = get_executor(context) for jobs in executor.map(lambda r: get_region_dataflow_jobs(api, context, r), DATAFLOW_REGIONS): result += jobs print(f'\n\nFound {len(result)} Dataflow jobs\n') # print one Dataflow job id when it is found if context.labels and result and 'id' in context.labels: print(f'{result[0].full_path} - {result[0].id}\n') return result @caching.cached_api_call def get_job(project_id: str, job: str, region: str) -> Union[Job, None]: """Fetch a specific Dataflow job.""" api = apis.get_api('dataflow', 'v1b3', project_id) if not apis.is_enabled(project_id, 'dataflow'): return None query = (api.projects().locations().jobs().get(projectId=project_id, location=region, jobId=job)) try: resp = query.execute(num_retries=config.API_RETRIES) return Job(project_id, resp) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err @caching.cached_api_call def get_all_dataflow_jobs_for_project( project_id: str, filter_str: Optional[str] = None, ) -> Union[List[Job], None]: """Fetch all Dataflow jobs for a project.""" api = apis.get_api('dataflow', 'v1b3', project_id) if not apis.is_enabled(project_id, 'dataflow'): return None jobs: List[Job] = [] request = (api.projects().jobs().aggregated(projectId=project_id, filter=filter_str)) logging.debug('listing dataflow jobs of project %s', project_id) while request: # Continue as long as there are pages response = request.execute(num_retries=config.API_RETRIES) if 'jobs' in response: jobs.extend([Job(project_id, job) for job in response['jobs']]) request = (api.projects().jobs().aggregated_next( previous_request=request, previous_response=response)) return jobs @caching.cached_api_call def logs_excluded(project_id: str) -> Union[bool, None]: """Check if Dataflow Logs are excluded.""" if not apis.is_enabled(project_id, 'dataflow'): return None exclusions = logs.exclusions(project_id) if exclusions is None: return None else: for log_exclusion in exclusions: if 'resource.type="dataflow_step"' in log_exclusion.filter and log_exclusion.disabled: return True return False ================================================ FILE: gcpdiag/queries/dataflow_stub.py ================================================ """Mocks to simulate Dataflow API calls.""" from gcpdiag.queries import apis_stub class DataflowApiStub(apis_stub.ApiStub): """Mock object to simulate instance api calls.""" def projects(self): return self def locations(self): return self def jobs(self): return DataflowJobsStub() class DataflowJobsStub: """Stub for Testing Dataflow.""" # pylint: disable=invalid-name def list(self, projectId, location): return apis_stub.RestCallStub(projectId, f'dataflow-jobs-{location}', default={}) def list_next(self, previous_request, previous_response): pass # pylint: disable=unused-argument def get(self, projectId, location, jobId): return apis_stub.RestCallStub(projectId, f'dataflow-jobs-{location}-streaming') def aggregated( self, projectId, # pylint: disable=invalid-name filter=None): # pylint: disable=redefined-builtin return apis_stub.RestCallStub(projectId, 'dataflow-jobs-aggregated') def aggregated_next(self, previous_request, previous_response): if isinstance(previous_response, dict) and previous_response.get('nextPageToken'): return apis_stub.RestCallStub( project_id=previous_request.project_id, json_basename=previous_request.json_basename, page=previous_request.page + 1, ) else: return None ================================================ FILE: gcpdiag/queries/dataflow_test.py ================================================ """Test code in dataflow.py.""" import unittest from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, dataflow DUMMY_PROJECT_NAME = 'gcpdiag-dataflow1-aaaa' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestDataFlow(unittest.TestCase): """Test Dataflow.""" def test_get_jobs(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) jobs = dataflow.get_all_dataflow_jobs(context) assert {j.state for j in jobs} != {'JOB_STATE_FAILED'} assert None not in [j.minutes_in_current_state for j in jobs] def test_get_jobs_with_id(self): context = models.Context( project_id=DUMMY_PROJECT_NAME #, # labels={'id': '2022-09-19_09_20_57-11848816011797209899'}) ) jobs = dataflow.get_all_dataflow_jobs(context=context) assert len(jobs) != 0 sample_job = dataflow.get_job(project_id=context.project_id, job=jobs[0].id, region='us-central1') assert sample_job is not None def test_get_jobs_for_project(self): jobs = dataflow.get_all_dataflow_jobs_for_project(DUMMY_PROJECT_NAME) assert {j.state for j in jobs} != {'JOB_STATE_FAILED'} assert None not in [j.minutes_in_current_state for j in jobs] ================================================ FILE: gcpdiag/queries/datafusion.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to Data Fusion.""" import datetime import ipaddress import logging import re from typing import Dict, Iterable, List, Mapping, Optional import googleapiclient.errors import requests from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, crm, network, web from gcpdiag.queries.generic_api.api_build import get_generic from gcpdiag.utils import Version # To avoid name conflict with L145 # pylint: disable=invalid-name IPv4NetOrIPv6Net = network.IPv4NetOrIPv6Net class Instance(models.Resource): """Represents a Data Fusion instance. https://cloud.google.com/data-fusion/docs/reference/rest/v1/projects.locations.instances#Instance """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: """ The 'name' of the instance is already in the full path form projects/{project}/locations/{location}/instances/{instance}. """ return self._resource_data['name'] @property def short_path(self) -> str: path = self.full_path path = re.sub(r'^projects/', '', path) path = re.sub(r'/locations/', '/', path) path = re.sub(r'/instances/', '/', path) return path @property def name(self) -> str: return utils.extract_value_from_res_name(self._resource_data['name'], 'instances') @property def location(self) -> str: return utils.extract_value_from_res_name(self._resource_data['name'], 'locations') @property def zone(self) -> str: return self._resource_data['zone'] @property def type(self) -> str: return self._resource_data['type'] @property def is_basic_type(self) -> bool: return self._resource_data['type'] == 'BASIC' @property def is_enterprise_type(self) -> bool: return self._resource_data['type'] == 'ENTERPRISE' @property def is_developer_type(self) -> bool: return self._resource_data['type'] == 'DEVELOPER' @property def is_private(self) -> bool: if 'privateInstance' in self._resource_data: return self._resource_data['privateInstance'] return False @property def status(self) -> str: return self._resource_data['state'] @property def status_details(self) -> Optional[str]: if 'stateMessage' in self._resource_data: return self._resource_data['stateMessage'] return None @property def is_running(self) -> bool: return self.status == 'ACTIVE' @property def is_deleting(self) -> bool: return self._resource_data['state'] == 'DELETING' @property def version(self) -> Version: return Version(self._resource_data['version']) @property def api_service_agent(self) -> str: return self._resource_data['p4ServiceAccount'] @property def dataproc_service_account(self) -> str: sa = self._resource_data.get('dataprocServiceAccount') if sa is None: sa = crm.get_project(self.project_id).default_compute_service_account return sa @property def tenant_project_id(self) -> str: return self._resource_data['tenantProjectId'] @property def uses_shared_vpc(self) -> bool: """ If shared VPC then 'network_string' = 'projects/{host-project-id}/global/networks/{network}' else 'network_string' = {network} """ if 'network' in self._resource_data['networkConfig']: network_string = self._resource_data['networkConfig']['network'] match = re.match(r'projects/([^/]+)/global/networks/([^/]+)$', network_string) if match and match.group(1) != self.project_id: return True return False @property def network(self) -> network.Network: if 'network' in self._resource_data['networkConfig']: network_string = self._resource_data['networkConfig']['network'] match = re.match(r'projects/([^/]+)/global/networks/([^/]+)$', network_string) if match: return network.get_network( match.group(1), match.group(2), context=models.Context(project_id=match.group(1)), ) else: return network.get_network( self.project_id, network_string, context=models.Context(project_id=self.project_id), ) return network.get_network( self.project_id, 'default', context=models.Context(project_id=self.project_id), ) @property def tp_ipv4_cidr(self) -> Optional[IPv4NetOrIPv6Net]: if 'network' in self._resource_data['networkConfig']: cidr = self._resource_data['networkConfig']['ipAllocation'] return ipaddress.ip_network(cidr) return None @property def api_endpoint(self) -> str: return self._resource_data['apiEndpoint'] @caching.cached_api_call def get_instances(context: models.Context) -> Mapping[str, Instance]: """Get a dict of Instance matching the given context, indexed by instance full path.""" instances: Dict[str, Instance] = {} if not apis.is_enabled(context.project_id, 'datafusion'): return instances logging.debug('fetching list of Data Fusion instances in project %s', context.project_id) datafusion_api = apis.get_api('datafusion', 'v1', context.project_id) query = datafusion_api.projects().locations().instances().list( parent=f'projects/{context.project_id}/locations/-' ) #'-' (wildcard) all regions try: resp = query.execute(num_retries=config.API_RETRIES) if 'instances' not in resp: return instances for i in resp['instances']: # projects/{project}/locations/{location}/instances/{instance}. result = re.match(r'projects/[^/]+/locations/([^/]+)/instances/([^/]+)', i['name']) if not result: logging.error('invalid datafusion name: %s', i['name']) continue location = result.group(1) labels = i.get('labels', {}) name = result.group(2) if not context.match_project_resource( location=location, labels=labels, resource=name): continue instances[i['name']] = Instance(project_id=context.project_id, resource_data=i) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return instances @caching.cached_api_call def extract_support_datafusion_version() -> Dict[str, str]: """Extract the version policy dictionary from the data fusion version support policy page. Returns: A dictionary of data fusion versions and their support end dates. """ page_url = 'https://cloud.google.com/data-fusion/docs/support/version-support-policy' try: data_fusion_table = web.fetch_and_extract_table(page_url, tag='h2', tag_id='support_timelines') if data_fusion_table: versions = [] support_end_dates = [] version_policy_dict = {} for row in data_fusion_table.find_all('tr')[1:]: columns = row.find_all('td') version = columns[0] support_end_date = columns[2].text.strip() if version.sup: version.sup.decompose() version = version.text.strip() try: support_end_date = datetime.datetime.strptime(support_end_date, '%B %d, %Y') support_end_date = datetime.datetime.strftime(support_end_date, '%Y-%m-%d') except ValueError: continue versions.append(version) support_end_dates.append(support_end_date) version_policy_dict = dict(zip(versions, support_end_dates)) return version_policy_dict else: return {} except ( requests.exceptions.RequestException, AttributeError, TypeError, ValueError, IndexError, ) as e: logging.error('Error in extracting data fusion version support policy: %s', e) return {} class Profile(models.Resource): """Represents a Compute Profile.""" _resource_data: dict def __init__(self, project_id, instance_name, resource_data): super().__init__(project_id=project_id) self.instance_name = instance_name self._resource_data = resource_data @property def full_path(self) -> str: """The full path form : projects/{project}/instances/{instance}/computeProfiles/{profile}. """ return (f'projects/{self.project_id}/instances/{self.instance_name}' f"/computeProfiles/{self._resource_data['name']}") @property def short_path(self) -> str: """The short path form : {project}/{instance}/{profile}. """ return ( f"{self.project_id}/{self.instance_name}/{self._resource_data['name']}") @property def name(self) -> str: return self._resource_data['name'] @property def region(self) -> str: for value in self._resource_data['provisioner'].get('properties'): if value.get('name') == 'region' and value.get('value') is not None: return value.get('value') return 'No region defined' @property def status(self) -> str: return self._resource_data['status'] @property def scope(self) -> str: return self._resource_data['scope'] @property def is_dataproc_provisioner(self) -> bool: return self._resource_data['provisioner']['name'] == 'gcp-dataproc' @property def is_existing_dataproc_provisioner(self) -> bool: return self._resource_data['provisioner']['name'] == 'gcp-existing-dataproc' @property def autoscaling_enabled(self) -> bool: for value in self._resource_data['provisioner'].get('properties'): if (value.get('name') == 'enablePredefinedAutoScaling' and value.get('value') is not None): return value.get('value') == 'true' return False @property def image_version(self) -> str: for value in self._resource_data['provisioner'].get('properties'): if value.get('name') == 'imageVersion' and value.get('value') != '': return value.get('value') return 'No imageVersion defined' @property def auto_scaling_policy(self) -> str: for value in self._resource_data['provisioner'].get('properties'): if value.get('name') == 'autoScalingPolicy' and value.get('value') != '': return value.get('value') return 'No autoScalingPolicy defined' @caching.cached_api_call def get_instance_system_compute_profile( context: models.Context, instance: Instance) -> Iterable[Profile]: """Get a list of datafusion Instance dataproc System compute profile.""" logging.debug('fetching dataproc System compute profile list: %s', context.project_id) system_profiles: List[Profile] = [] cdap_endpoint = instance.api_endpoint datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint) response = datafusion.get_system_profiles() if response is not None: for res in response: if (res['provisioner']['name'] == 'gcp-dataproc' or res['provisioner']['name'] == 'gcp-existing-dataproc'): system_profiles.append(Profile(context.project_id, instance.name, res)) return system_profiles @caching.cached_api_call def get_instance_user_compute_profile(context: models.Context, instance: Instance) -> Iterable[Profile]: """Get a list of datafusion Instance dataproc User compute profile.""" logging.debug('fetching dataproc User compute profile list: %s', context.project_id) user_profiles: List[Profile] = [] cdap_endpoint = instance.api_endpoint datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint) response_namespaces = datafusion.get_all_namespaces() if response_namespaces is not None: for res in response_namespaces: response = datafusion.get_user_profiles(namespace=res['name']) if response is not None: for res in response: if (res['provisioner']['name'] == 'gcp-dataproc' or res['provisioner']['name'] == 'gcp-existing-dataproc'): user_profiles.append(Profile(context.project_id, instance.name, res)) user_profiles = list(filter(bool, user_profiles)) return user_profiles @caching.cached_api_call def extract_datafusion_dataproc_version() -> Dict[str, list[str]]: """Extract the supported Data Fusion versions and their corresponding Dataproc versions from the GCP documentation.""" page_url = 'https://cloud.google.com/data-fusion/docs/concepts/configure-clusters' try: table = web.fetch_and_extract_table(page_url, tag='h2', tag_id='version-compatibility') if table: rows = table.find_all('tr')[1:] #Skip the header row version_dict = {} for row in rows: cdf_versions = row.find_all('td')[0].get_text().strip() dp_versions = row.find_all('td')[1].get_text().strip() cdf_versions = cdf_versions.replace(' and later', '') cdf_versions_list = [] if '-' in cdf_versions: start, end = map(float, cdf_versions.split('-')) while start <= end: cdf_versions_list.append(f'{start:.1f}') start += 0.1 else: cdf_versions_list.append(cdf_versions) dp_versions = [v.split('*')[0].strip() for v in dp_versions.split(',')] for version in cdf_versions_list: version_dict[version] = dp_versions return version_dict else: return {} except ( requests.exceptions.RequestException, AttributeError, TypeError, ValueError, IndexError, ) as e: logging.error( 'Error in extracting datafusion and dataproc versions: %s', e, ) return {} class Preference(models.Resource): """Represents a Preference.""" _resource_data: dict def __init__(self, project_id, instance, resource_data): super().__init__(project_id=project_id) self.instance = instance self._resource_data = resource_data @property def full_path(self) -> str: """The full path form : projects/{project}/locations/{location}/instances/{instance}. """ return self.instance.full_path @property def image_version(self): return self._resource_data.get('system.profile.properties.imageVersion', None) def get_system_preferences(context: models.Context, instance: Instance) -> Preference: """Get datafusion Instance system preferences.""" logging.debug('fetching dataproc System preferences: %s', context.project_id) cdap_endpoint = instance.api_endpoint datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint) response = datafusion.get_system_preferences() return Preference(context.project_id, instance, response) def get_namespace_preferences(context: models.Context, instance: Instance) -> Mapping[str, Preference]: """Get datafusion cdap namespace preferences. """ logging.debug('fetching dataproc namespace preferences: %s', context.project_id) cdap_endpoint = instance.api_endpoint datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint) namespaces = datafusion.get_all_namespaces() namespaces_preferences = {} if namespaces is not None: for namespace in namespaces: response = datafusion.get_namespace_preferences( namespace=namespace['name']) if bool(response): namespaces_preferences[namespace['name']] = Preference( context.project_id, instance, response) return namespaces_preferences def get_application_preferences(context: models.Context, instance: Instance) -> Mapping[str, Preference]: """Get datafusion cdap application preferences.""" logging.debug('fetching dataproc application preferences: %s', context.project_id) cdap_endpoint = instance.api_endpoint datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint) applications_preferences = {} namespaces = datafusion.get_all_namespaces() if namespaces is not None: for namespace in namespaces: applications = datafusion.get_all_applications( namespace=namespace['name']) if applications is not None: for application in applications: response = datafusion.get_application_preferences( namespace=namespace['name'], application_name=application['name']) if bool(response): applications_preferences[application['name']] = Preference( context.project_id, instance, response) return applications_preferences ================================================ FILE: gcpdiag/queries/datafusion_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in datafusion.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument class DataFusionApiStub(apis_stub.ApiStub): """Mock object to simulate instance api calls.""" def __init__(self, mock_state='init', region=None): self.mock_state = mock_state self.region = region def projects(self): return self def locations(self): return self def instances(self): return self def list(self, parent): m = re.match(r'projects/([^/]+)/', parent) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'datafusion-instances') ================================================ FILE: gcpdiag/queries/datafusion_test.py ================================================ # Copyright 2021 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. """Test code in datafusion.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, datafusion, web_stub from gcpdiag.queries.generic_api.api_build import generic_api_stub DUMMY_REGION = 'us-central1' DUMMY_PROJECT_NAME = 'gcpdiag-datafusion1-aaaa' DUMMY_PROJECT_NR = '12340010' DUMMY_DEFAULT_NAME = 'default' DUMMY_INSTANCE1_NAME = 'my-instance' DUMMY_INSTANCE1_LABELS = {'gcpdiag': 'test'} GCE_SERVICE_ACCOUNT = '12340010-compute@developer.gserviceaccount.com' ENV_SERVICE_ACCOUNT = f'env2sa@{DUMMY_PROJECT_NAME}.iam.gserviceaccount.com' NUMBER_OF_INSTANCES_IN_DATAFUSION_JSON_DUMP_FILE = 1 SUPPORTED_VERSIONS_DICT = { '6.9': '2025-03-31', '6.8': '2024-08-31', '6.7': '2023-02-28', '6.6': '2023-10-31', '6.5': '2023-05-31', '6.4': '2022-11-30', '6.3': '2022-07-31', '6.2': '2022-03-31', '6.1': '2021-06-30', } DATAFUSION_DATAPROC_VERSIONS_DICT = { '6.7': ['1.3'], '6.6': ['2.0', '1.3'], '6.5': ['2.0', '1.3'], '6.4': ['2.0', '1.3'], '6.3': ['1.3'], '6.2': ['1.3'], '6.1': ['1.3'], } @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestDataFusion: """Test Data Fusion""" def test_get_instances(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = datafusion.get_instances(context) assert len(instances) == NUMBER_OF_INSTANCES_IN_DATAFUSION_JSON_DUMP_FILE def test_running(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = datafusion.get_instances(context) assert (DUMMY_INSTANCE1_NAME, True) in [(i.name, i.is_running) for k, i in instances.items()] def test_is_private_ip(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = datafusion.get_instances(context) assert (DUMMY_INSTANCE1_NAME, True) in [(i.name, i.is_private) for k, i in instances.items()] @mock.patch('gcpdiag.queries.web.get', new=web_stub.get) class TestExtractVersionPolicyDict: """Test html content.""" def test_extract_support_datafusion_version(self): response_dict = datafusion.extract_support_datafusion_version() assert response_dict == SUPPORTED_VERSIONS_DICT def test_extract_datafusion_dataproc_version(self): response_dict = datafusion.extract_datafusion_dataproc_version() assert response_dict == DATAFUSION_DATAPROC_VERSIONS_DICT @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.queries.generic_api.api_build.get_generic.get_generic_api', new=generic_api_stub.get_generic_api_stub) class TestComputeProfile: """Test Compute Profile""" def test_get_instance_system_compute_profile(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = datafusion.get_instances(context) instance = list(instances.values())[0] profiles = datafusion.get_instance_system_compute_profile(context, instance) assert len(profiles) == 2 def test_get_instance_user_compute_profile(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = datafusion.get_instances(context) instance = list(instances.values())[0] profiles = datafusion.get_instance_user_compute_profile(context, instance) assert len(profiles) == 1 @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.queries.generic_api.api_build.get_generic.get_generic_api', new=generic_api_stub.get_generic_api_stub) class TestPreferences: """Test datafusion cdap preferences""" def test_get_system_preferences(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = datafusion.get_instances(context) instance = list(instances.values())[0] preference = datafusion.get_system_preferences(context, instance) assert preference.image_version == '2.1' def test_get_application_preferences(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = datafusion.get_instances(context) instance = list(instances.values())[0] preferences = datafusion.get_application_preferences(context, instance) assert '2.2' in [(i.image_version) for k, i in preferences.items()] def test_get_namespace_preferences(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = datafusion.get_instances(context) instance = list(instances.values())[0] preferences = datafusion.get_namespace_preferences(context, instance) assert '2.1' in [(i.image_version) for k, i in preferences.items()] ================================================ FILE: gcpdiag/queries/dataproc.py ================================================ # Copyright 2021 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. """Queries related to Dataproc.""" import logging import re from typing import Iterable, List, Mapping, Optional import googleapiclient.errors import requests from gcpdiag import caching, config, models, utils from gcpdiag.executor import get_executor from gcpdiag.queries import apis, crm, gce, network, web class Cluster(models.Resource): """Represents Dataproc Cluster""" name: str _resource_data: Mapping def __init__(self, name: str, project_id: str, resource_data: Mapping): super().__init__(project_id) self.name = name self._resource_data = resource_data def is_running(self) -> bool: return self.status == 'RUNNING' def get_software_property(self, property_name) -> str: return self._resource_data['config']['softwareConfig']['properties'].get( property_name) def is_stackdriver_logging_enabled(self) -> bool: # Unless overridden during create, # properties with default values are not returned, # therefore get_software_property should only return when its false return (not self.get_software_property( 'dataproc:dataproc.logging.stackdriver.enable') == 'false') def is_stackdriver_monitoring_enabled(self) -> bool: return (self.get_software_property( 'dataproc:dataproc.monitoring.stackdriver.enable') == 'true') @property def region(self) -> str: """biggest regions have a trailing '-d' at most in its zoneUri https://www.googleapis.com/compute/v1/projects/dataproc1/zones/us-central1-d """ return self._resource_data['config']['gceClusterConfig']['zoneUri'].split( '/')[-1][0:-2] @property def zone(self) -> Optional[str]: zone = (self._resource_data.get('config', {}).get('gceClusterConfig', {}).get('zoneUri')) if zone: m = re.search(r'/zones/([^/]+)$', zone) if m: return m.group(1) raise RuntimeError(f"can't determine zone for cluster {self.name}") @property def full_path(self) -> str: return ( f'projects/{self.project_id}/regions/{self.region}/clusters/{self.name}' ) @property def short_path(self) -> str: return f'{self.project_id}/{self.region}/{self.name}' @property def status(self) -> str: return self._resource_data['status']['state'] def __str__(self) -> str: return self.short_path @property def cluster_uuid(self) -> str: return self._resource_data['clusterUuid'] @property def image_version(self): return self._resource_data['config']['softwareConfig']['imageVersion'] @property def vm_service_account_email(self): sa = self._resource_data['config']['gceClusterConfig'].get('serviceAccount') if sa is None: sa = crm.get_project(self.project_id).default_compute_service_account return sa @property def is_custom_gcs_connector(self) -> bool: return bool( self._resource_data.get('config', {}).get('gceClusterConfig', {}).get( 'metadata', {}).get('GCS_CONNECTOR_VERSION')) @property def cluster_provided_bq_connector(self): """Check user-supplied BigQuery connector on the cluster level""" bigquery_connector = (self._resource_data.get('config', {}).get( 'gceClusterConfig', {}).get('metadata', {}).get('SPARK_BQ_CONNECTOR_VERSION')) if not bigquery_connector: bigquery_connector = (self._resource_data.get('config', {}).get( 'gceClusterConfig', {}).get('metadata', {}).get('SPARK_BQ_CONNECTOR_URL')) if bigquery_connector: if bigquery_connector == 'spark-bigquery-latest.jar': return 'spark-bigquery-latest' else: match = re.search( r'spark-bigquery(?:-with-dependencies_\d+\.\d+)?-(\d+\.\d+\.\d+)\.jar', bigquery_connector) if match: return match.group(1) # If returns None, it means that the cluster is using the default, # pre-installed BQ connector for the image version return bigquery_connector @property def is_gce_cluster(self) -> bool: return bool(self._resource_data.get('config', {}).get('gceClusterConfig')) @property def gce_network_uri(self) -> Optional[str]: """Get network uri from cluster network or subnetwork""" if not self.is_gce_cluster: raise RuntimeError( 'Can not return network URI for a Dataproc on GKE cluster') network_uri = (self._resource_data.get('config', {}).get('gceClusterConfig', {}).get('networkUri')) if not network_uri: subnetwork_uri = (self._resource_data.get('config', {}).get( 'gceClusterConfig', {}).get('subnetworkUri')) network_uri = network.get_subnetwork_from_url(subnetwork_uri).network return network_uri @property def gce_subnetwork_uri(self) -> Optional[str]: """Get subnetwork uri from cluster subnetwork.""" if not self.is_gce_cluster: raise RuntimeError( 'Can not return subnetwork URI for a Dataproc on GKE cluster') subnetwork_uri = (self._resource_data.get('config', {}).get('gceClusterConfig', {}).get('subnetworkUri')) if not subnetwork_uri: subnetwork_uri = ('https://www.googleapis.com/compute/v1/projects/' + self.project_id + '/regions/' + self.region + '/subnetworks/default') return subnetwork_uri @property def is_single_node_cluster(self) -> bool: workers = (self._resource_data.get('config', {}).get('workerConfig', {}).get('numInstances', 0)) return workers == 0 @property def is_ha_cluster(self) -> bool: masters = (self._resource_data.get('config', {}).get('masterConfig', {}).get('numInstances', 1)) return masters != 1 @property def is_internal_ip_only(self) -> bool: # internalIpOnly is set to true by default when creating a # Dataproc 2.2 image version cluster. # The default should be false in older versions instead. internal_ip_only = self._resource_data['config']['gceClusterConfig'][ 'internalIpOnly'] return internal_ip_only @property def has_autoscaling_policy(self) -> bool: """Checks if an autoscaling policy is configured for the cluster.""" return bool(self._resource_data['config'].get('autoscalingConfig', {})) @property def autoscaling_policy_id(self) -> str: """Returns the autoscaling policy ID for the cluster.""" if self.has_autoscaling_policy: return (self._resource_data['config'].get('autoscalingConfig', {}).get('policyUri', '').split('/')[-1]) else: return '' @property def number_of_primary_workers(self) -> float: """Gets the number of primary worker nodes in the cluster.""" return (self._resource_data['config'].get('workerConfig', {}).get('numInstances', 0)) @property def number_of_secondary_workers(self) -> float: """Gets the number of secondary worker nodes in the cluster.""" return (self._resource_data['config'].get('secondaryWorkerConfig', {}).get('numInstances', 0)) @property def is_preemptible_primary_workers(self) -> bool: """Checks if the primary worker nodes in the cluster are preemptible.""" return (self._resource_data['config'].get('workerConfig', {}).get('isPreemptible', False)) @property def is_preemptible_secondary_workers(self) -> bool: """Checks if the secondary worker nodes in the cluster are preemptible.""" return (self._resource_data['config'].get('secondaryWorkerConfig', {}).get('isPreemptible', False)) @property def initialization_actions(self) -> List[str]: return self._resource_data['config'].get('initializationActions', []) class Region: """Represents Dataproc region""" project_id: str region: str def __init__(self, project_id: str, region: str): self.project_id = project_id self.region = region def get_clusters(self, context: models.Context) -> Iterable[Cluster]: clusters = [] for cluster in self.query_api(): if not context.match_project_resource(resource=cluster.get('clusterName'), labels=cluster.get('labels', {})): continue c = Cluster( name=cluster['clusterName'], project_id=self.project_id, resource_data=cluster, ) clusters.append(c) return clusters def query_api(self) -> Iterable[dict]: try: api = apis.get_api('dataproc', 'v1', self.project_id) query = (api.projects().regions().clusters().list( projectId=self.project_id, region=self.region)) # be careful not to retry too many times because querying all regions # sometimes causes requests to fail permanently resp = query.execute(num_retries=1) return resp.get('clusters', []) except googleapiclient.errors.HttpError as err: # b/371526148 investigate permission denied error logging.error(err) return [] # raise utils.GcpApiError(err) from err class Dataproc: """Represents Dataproc product""" project_id: str def __init__(self, project_id: str): self.project_id = project_id def get_regions(self) -> Iterable[Region]: return [ Region(self.project_id, r.name) for r in gce.get_all_regions(self.project_id) ] def is_api_enabled(self) -> bool: return apis.is_enabled(self.project_id, 'dataproc') @caching.cached_api_call def get_clusters(context: models.Context) -> Iterable[Cluster]: r: List[Cluster] = [] dataproc = Dataproc(context.project_id) if not dataproc.is_api_enabled(): return r executor = get_executor(context) for clusters in executor.map(lambda r: r.get_clusters(context), dataproc.get_regions()): r += clusters return r @caching.cached_api_call def get_cluster(cluster_name, region, project) -> Optional[Cluster]: api = apis.get_api('dataproc', 'v1', project) request = api.projects().regions().clusters().get(projectId=project, clusterName=cluster_name, region=region) try: r = request.execute(num_retries=config.API_RETRIES) except (googleapiclient.errors.HttpError, requests.exceptions.RequestException): #logging.error(err) return None return Cluster(r['clusterName'], project_id=r['projectId'], resource_data=r) class AutoScalingPolicy(models.Resource): """AutoScalingPolicy.""" _resource_data: dict def __init__(self, project_id, resource_data, region): super().__init__(project_id=project_id) self._resource_data = resource_data self.region = region @property def policy_id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: return self._resource_data['name'] @property def short_path(self) -> str: return f'{self.project_id}/{self.region}/{self.policy_id}' @property def name(self) -> str: return self._resource_data['name'] @property def scale_down_factor(self) -> float: return self._resource_data['basicAlgorithm']['yarnConfig'].get( 'scaleDownFactor', 0.0) @property def has_graceful_decommission_timeout(self) -> bool: """Checks if a graceful decommission timeout is configured in the autoscaling policy.""" return bool( self._resource_data.get('basicAlgorithm', {}).get('yarnConfig', {}).get('gracefulDecommissionTimeout', {})) @property def graceful_decommission_timeout(self) -> float: """Gets the configured graceful decommission timeout in the autoscaling policy.""" return (self._resource_data.get('basicAlgorithm', {}).get('yarnConfig', {}).get( 'gracefulDecommissionTimeout', -1)) @caching.cached_api_call def get_auto_scaling_policy(project_id: str, region: str, policy_id: str) -> AutoScalingPolicy: logging.debug('fetching autoscalingpolicy: %s', project_id) dataproc = apis.get_api('dataproc', 'v1', project_id) name = ( f'projects/{project_id}/regions/{region}/autoscalingPolicies/{policy_id}') try: request = dataproc.projects().regions().autoscalingPolicies().get(name=name) response = request.execute(num_retries=config.API_RETRIES) return AutoScalingPolicy(project_id, response, region) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err @caching.cached_api_call def list_auto_scaling_policies(project_id: str, region: str) -> List[AutoScalingPolicy]: """Lists all autoscaling policies in the given project and region.""" dataproc = apis.get_api('dataproc', 'v1', project_id) parent = f'projects/{project_id}/regions/{region}' try: request = (dataproc.projects().regions().autoscalingPolicies().list( parent=parent)) response = request.execute(num_retries=config.API_RETRIES) return [ AutoScalingPolicy(project_id, policy_data, region) for policy_data in response.get('policies', []) ] except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err class Job(models.Resource): """Job.""" _resource_data: dict def __init__(self, project_id, job_id, region, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self.region = region self.job_id = job_id @property def full_path(self) -> str: return ( f'projects/{self.project_id}/regions/{self.region}/jobs/{self.job_id}') @property def short_path(self) -> str: return f'{self.project_id}/{self.region}/{self.job_id}' @property def cluster_name(self) -> str: return self._resource_data['placement']['clusterName'] @property def cluster_uuid(self) -> str: return self._resource_data['placement']['clusterUuid'] @property def state(self): return self._resource_data['status']['state'] @property def details(self): if self._resource_data['status']['state'] == 'ERROR': return self._resource_data['status']['details'] return None @property def status_history(self): status_history_dict = {} for previous_status in self._resource_data['statusHistory']: if previous_status['state'] not in status_history_dict: status_history_dict[ previous_status['state']] = previous_status['stateStartTime'] return status_history_dict @property def yarn_applications(self): return self._resource_data['yarnApplications'] @property def driver_output_resource_uri(self): return self._resource_data.get('driverOutputResourceUri') @property def job_uuid(self): return self._resource_data.get('jobUuid') @property def job_provided_bq_connector(self): """Check user-supplied BigQuery connector on the job level""" jar_file_uris = (self._resource_data.get('sparkJob', {}).get('jarFileUris')) if jar_file_uris is not None: for file in jar_file_uris: if 'spark-bigquery-latest.jar' in file: return 'spark-bigquery-latest' else: match = re.search( r'spark-bigquery(?:-with-dependencies_\d+\.\d+)?-(\d+\.\d+\.\d+)\.jar', file) if match: return match.group(1) return None @caching.cached_api_call def get_job_by_jobid(project_id: str, region: str, job_id: str): dataproc = apis.get_api('dataproc', 'v1', project_id) try: request = (dataproc.projects().regions().jobs().get(projectId=project_id, region=region, jobId=job_id)) response = request.execute(num_retries=config.API_RETRIES) return Job(project_id, region, job_id, response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err @caching.cached_api_call def extract_dataproc_supported_version() -> list[str]: """Extract the supported Dataproc versions(use Debian as representative). """ page_url = 'https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters' try: table = web.fetch_and_extract_table(page_url, tag='h3', tag_id='debian_images') if table: rows = table.find_all('tr')[1:] #Skip the header row version_list = [] for row in rows: dp_version = row.find_all('td')[0].get_text().strip().split('-')[0] version_list.append(dp_version) return version_list else: return [] except ( requests.exceptions.RequestException, AttributeError, TypeError, ValueError, IndexError, ) as e: logging.error( 'Error in extracting dataproc versions: %s', e, ) return [] @caching.cached_api_call def extract_dataproc_bigquery_version(image_version) -> list[str]: """Extract Dataproc BigQuery connector versions based on image version GCP documentation. """ page_url = ('https://cloud.google.com/dataproc/docs/concepts/versioning/' 'dataproc-release-' + image_version) try: table = web.fetch_and_extract_table(page_url, tag='div') bq_version = [] if table: rows = table.find_all('tr')[1:] for row in rows: cells = row.find_all('td') if 'BigQuery Connector' in cells[0].get_text(strip=True): bq_version = cells[1].get_text(strip=True) return bq_version except ( requests.exceptions.RequestException, AttributeError, TypeError, ValueError, IndexError, ) as e: logging.error( '%s Error in extracting BigQuery connector versions.' ' Please check BigQuery Connector version on %s', e, page_url, ) return [] ================================================ FILE: gcpdiag/queries/dataproc_stub.py ================================================ # Copyright 2021 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. """Stub API calls used in dataproc.py for testing. Instead of doing real API calls, we return test JSON data. """ import json import re from gcpdiag.queries import apis_stub #pylint: disable=unused-argument #pylint: disable=invalid-name class DataprocApiStub(apis_stub.ApiStub): """Mock object to simulate dataproc api calls.""" def __init__(self, json_basename=None, project_id=None, mock_state='init'): self.mock_state = mock_state self.json_basename = json_basename self.project_id = project_id def projects(self): return self def regions(self): return self def clusters(self): return DataprocApiStub(mock_state='clusters') def jobs(self): return DataprocApiStub(mock_state='jobs') def autoscalingPolicies(self): return DataprocApiStub(mock_state='autoscalingPolicies') def get(self, name='', clusterName='', region='', projectId='', jobId=''): if self.mock_state == 'autoscalingPolicies': m = re.match( r'projects/([^/]+)/regions/([^/]+)/autoscalingPolicies/([^/]+)', name) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'autoscaling-policy') if self.mock_state == 'clusters': stub = DataprocApiStub(project_id=projectId, json_basename=f'dataproc-clusters-{region}', mock_state='clusters') stub.cluster_name = clusterName stub.region = region return stub if self.mock_state == 'jobs': stub = DataprocApiStub(project_id=projectId, mock_state='jobs') if jobId == '1234567891': stub.json_basename = 'dataproc-job-failed' else: stub.json_basename = 'dataproc-job-success' stub.job_id = jobId stub.region = region return stub def list(self, projectId, region): if self.mock_state == 'clusters': return apis_stub.RestCallStub(projectId, f'dataproc-clusters-{region}', default={}) # Implement other list mocked states here def execute(self, num_retries=0): self._maybe_raise_api_exception() json_dir = apis_stub.get_json_dir(self.project_id) with open(json_dir / f'{self.json_basename}.json', encoding='utf-8') as json_file: data = json.load(json_file) if self.mock_state == 'clusters': for cluster in data.get('clusters', []): if cluster['clusterName'] == self.cluster_name: return cluster return data ================================================ FILE: gcpdiag/queries/dataproc_test.py ================================================ # Copyright 2021 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. """Test code in dataproc.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, dataproc DUMMY_PROJECT_NAME = 'gcpdiag-dataproc1-aaaa' DUMMY_SUCCESS_JOB_ID = '1234567890' DUMMY_FAILED_JOB_ID = '1234567891' NUMBER_OF_CLUSTERS_IN_DATAPROC_JSON_DUMP_FILE = 4 REGION = 'us-central1' POLICY_ID = 'CDF_AUTOSCALING_POLICY_V1' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestDataproc: """Test Dataproc""" def test_get_clusters(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = dataproc.get_clusters(context) assert len(clusters) == NUMBER_OF_CLUSTERS_IN_DATAPROC_JSON_DUMP_FILE def test_get_cluster(self): cluster = dataproc.get_cluster('good', 'us-central1', DUMMY_PROJECT_NAME) assert cluster.name == 'good' def test_is_running(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = dataproc.get_clusters(context) assert ('good', True) in [(c.name, c.is_running()) for c in clusters] def test_stackdriver_logging_enabled(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = dataproc.get_clusters(context) for c in clusters: # dataproc:dataproc.logging.stackdriver.enable is set # and equals "true" if c.name == 'test-best-practices-enabled': assert c.is_stackdriver_logging_enabled() # dataproc:dataproc.logging.stackdriver.enable is set # and equals "false" if c.name == 'test-best-practices-disabled': assert not c.is_stackdriver_logging_enabled() def test_monitoring_enabled(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = dataproc.get_clusters(context) for cluster in clusters: if cluster.name == 'test-best-practices-enabled': assert cluster.is_stackdriver_monitoring_enabled() if cluster.name == 'test-best-practices-disabled': assert not cluster.is_stackdriver_monitoring_enabled() def test_zone(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = dataproc.get_clusters(context) for cluster in clusters: if cluster.name == 'test-best-practices-enabled': assert cluster.zone == 'us-central1-b' def test_is_gce_cluster(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = dataproc.get_clusters(context) for cluster in clusters: if cluster.name == 'test-best-practices-enabled': assert cluster.is_gce_cluster def test_gce_network_uri(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = dataproc.get_clusters(context) uri = 'projects/gcpdiag-dataproc1-aaaa/global/networks/default' for cluster in clusters: if cluster.name == 'test-best-practices-enabled': assert uri in cluster.gce_network_uri def test_auto_scaling_policy(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) policy = dataproc.get_auto_scaling_policy(context.project_id, REGION, POLICY_ID) policy_name = ('projects/gcpdiag-dataproc1-aaaa/regions/us-central1/' 'autoscalingPolicies/CDF_AUTOSCALING_POLICY_V1') assert policy.name == policy_name def test_get_job_by_jobid_(self): failed_job = dataproc.get_job_by_jobid( project_id=DUMMY_PROJECT_NAME, region='us-central1', job_id=DUMMY_FAILED_JOB_ID, ) assert failed_job.state == 'ERROR' success_job = dataproc.get_job_by_jobid( project_id=DUMMY_PROJECT_NAME, region='us-central1', job_id=DUMMY_SUCCESS_JOB_ID, ) assert success_job.state == 'DONE' ================================================ FILE: gcpdiag/queries/dns.py ================================================ # Copyright 2024 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. # Lint as: python3 """Queries related to DNS.""" import logging from typing import Set import dns.resolver def find_dns_records(domain: str) -> Set: """Resolves DNS records for a given domain and returns a set of IP addresses. Returns an empty set if any error occurs. Logs errors using logging.info. """ try: answer = dns.resolver.resolve_name(domain) return set(answer.addresses()) except dns.resolver.NoAnswer: logging.info("Error: No records found for domain: %s", domain) return set() except dns.resolver.NXDOMAIN: logging.info("Error: Invalid domain: %s", domain) return set() except dns.resolver.Timeout: logging.info("Error: DNS resolution timed out for domain: %s", domain) return set() except dns.name.EmptyLabel: logging.info("Error: Empty A/AAAA record for domain: %s", domain) return set() except dns.name.LabelTooLong: logging.info("Error: Invalid record label too long for domain: %s", domain) return set() except dns.name.NameTooLong: logging.info("Error: DNS name too long for domain: %s", domain) return set() except dns.resolver.NoNameservers: logging.info("Error: No nameservers found for domain: %s", domain) return set() except dns.exception.DNSException as e: # Catch any other DNS exception logging.info("Error: An unexpected DNS error occurred: %s", str(e)) return set() ================================================ FILE: gcpdiag/queries/dns_stub.py ================================================ """Queries related to DNS.""" from typing import Set domain_to_ips = { 'natka123.com': {'1.2.3.4', '1.2.3.5'}, 'second.natka123.com': {'2600:1901:0:d0d7::'}, 'test.natka123.com': {'192.168.3.4'}, 'test.org': {'192.168.3.5'}, 'second.test.org': {'2600:1901:0:d0d7::'}, } def find_dns_records(domain: str) -> Set: return domain_to_ips[domain] ================================================ FILE: gcpdiag/queries/gae.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP App Engine Standard app.""" import logging import re from typing import Dict, Mapping import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis class Service(models.Resource): """Represents an App Engine Standard app service.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: m = re.search(r'/services/([^/]+)$', self._resource_data['name']) if not m: raise RuntimeError('can\'t determine name of service %s' % (self._resource_data['name'])) return m.group(1) @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: return self._resource_data['name'] @property def short_path(self) -> str: path = self.project_id + '/' + self.id return path class Version(models.Resource): """Represents an App Engine Standard app version.""" _resource_data: dict service: Service def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: return self._resource_data['name'] @property def short_path(self) -> str: path = self.project_id + '/' + self.id return path @property def runtime(self) -> str: return self._resource_data['runtime'] @property def env(self) -> str: return self._resource_data['env'] @caching.cached_api_call def get_services(context: models.Context) -> Mapping[str, Service]: """Get a list of App Engine Standard services matching the given context, indexed by service id.""" services: Dict[str, Service] = {} if not apis.is_enabled(context.project_id, 'appengine'): return services appengine_api = apis.get_api('appengine', 'v1', context.project_id) logging.debug('fetching list of app engine services in the project %s', context.project_id) query = appengine_api.apps().services().list(appsId=context.project_id) try: resp = query.execute(num_retries=config.API_RETRIES) if 'services' not in resp: return services for s in resp['services']: # apps/myapp/services/default result = re.match(r'apps/[^/]+/services/([^/]+)', s['name']) if not result: logging.error('invalid appengine data: %s', s['name']) continue labels = s.get('labels', {}) if not context.match_project_resource(resource=result.group(1), labels=labels): continue services[s['id']] = Service(project_id=context.project_id, resource_data=s) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return services @caching.cached_api_call def get_versions(context: models.Context) -> Mapping[str, Version]: """Get a list of App Engine Standard service versions the given context, indexed by a version id.""" versions: Dict[str, Version] = {} if not apis.is_enabled(context.project_id, 'appengine'): return versions appengine_api = apis.get_api('appengine', 'v1', context.project_id) services = get_services(context) for service in services.values(): query = appengine_api.apps().services().versions().list( appsId=context.project_id, servicesId=service.id) try: resp = query.execute(num_retries=config.API_RETRIES) if 'versions' not in resp: return versions for resp_s in resp['versions']: # verify that we have some minimal data that we expect if 'id' not in resp_s: raise RuntimeError('missing data in apps.services.list response') v = Version(project_id=context.project_id, resource_data=resp_s) v.service = service versions[v.id] = v except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err logging.debug('fetching list of app engine services in the project %s', context.project_id) return versions ================================================ FILE: gcpdiag/queries/gae_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in gae.py for testing. Instead of doing real API calls, we return test JSON data. """ from gcpdiag.queries import apis_stub #pylint: disable=unused-argument #pylint: disable=invalid-name class AppEngineApiStub(apis_stub.ApiStub): """Mock object to simulate App Engine api calls.""" def __init__(self, mock_state='init'): self.mock_state = mock_state def apps(self): return self def services(self): return AppEngineApiStub('services') def versions(self): return AppEngineApiStub('versions') def list(self, appsId='appsId', servicesId='servicesId'): if self.mock_state == 'services': return apis_stub.RestCallStub(appsId, 'appengine_services') else: return apis_stub.RestCallStub(appsId, 'versions') ================================================ FILE: gcpdiag/queries/gae_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in gae.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, gae DUMMY_PROJECT_NAME = 'gcpdiag-gaes1-aaaa' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestAppEngine: """Test App Engine""" def test_get_services(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) services = gae.get_services(context) assert len(services) == 1 def test_get_versions(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) versions = gae.get_versions(context) assert len(versions) == 1 ================================================ FILE: gcpdiag/queries/gcb.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP Cloud Build instances.""" import dataclasses import datetime import logging import re from typing import Dict, List, Mapping, Optional import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, apis_utils # List of locations from https://cloud.google.com/build/docs/locations # There is no API to get them programmatically. LOCATIONS = [ '-', # global 'asia-east1', 'asia-east2', 'asia-northeast1', 'asia-northeast2', 'asia-northeast3', 'asia-south1', 'asia-southeast1', 'asia-southeast2', 'australia-southeast1', 'europe-central2', 'europe-north1', 'europe-west1', 'europe-west2', 'europe-west3', 'europe-west4', 'europe-west6', 'northamerica-northeast1', 'southamerica-east1', 'us-central1', 'us-east1', 'us-east4', 'us-west1', 'us-west2', 'us-west3', 'us-west4', ] @dataclasses.dataclass(frozen=True) class BuildOptions: """representation of build.options object""" logging: str log_streaming_option: str def is_bucket_streaming_enabled(self) -> bool: return (self.logging != 'GCS_ONLY' or self.log_streaming_option != 'STREAM_OFF') class BuildOptionsBuilder: """Build options builder from dictionary.""" def __init__(self, options: dict): self._options = options def build(self) -> BuildOptions: return BuildOptions( logging=self._get_logging(), log_streaming_option=self._get_log_streaming_option(), ) def _get_logging(self) -> str: return self._options.get('logging', 'LEGACY') def _get_log_streaming_option(self) -> str: return self._options.get('logStreamingOption', 'LOGGING_UNSPECIFIED') @dataclasses.dataclass(frozen=True) class FailureInfo: """Wrapper around build.failureInfo object.""" failure_type: str class FailureInfoBuilder: """Wrapper around build.failureInfo object.""" def __init__(self, failure_info: dict): self._failure_info = failure_info def build(self) -> FailureInfo: return FailureInfo(failure_type=self._get_failure_type()) def _get_failure_type(self) -> str: return self._failure_info.get('type', '') class Build(models.Resource): """Represents a Cloud Build execution.""" _resource_data: dict def __init__(self, project_id, location, resource_data): super().__init__(project_id=project_id) self.location = location self._resource_data = resource_data @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: return f'projects/{self.project_id}/locations/{self.location}/builds/{self.id}' @property def short_path(self) -> str: path = self.project_id + '/' + self.id return path @property def status(self) -> str: return self._resource_data['status'] @property def service_account(self) -> Optional[str]: return self._resource_data.get('serviceAccount') @property def images(self) -> List[str]: return self._resource_data.get('images', []) @property def logs_bucket(self) -> str: return self._resource_data.get('logsBucket', '') @property def options(self) -> BuildOptions: return BuildOptionsBuilder(self._resource_data.get('options', {})).build() @property def failure_info(self) -> FailureInfo: return FailureInfoBuilder(self._resource_data.get('failureInfo', {})).build() class Trigger(models.Resource): """Represents a Cloud Build trigger instance.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: if 'name' not in self._resource_data: return '' return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: return f'projects/{self.project_id}/locations/-/triggers/{self.id}' @property def short_path(self) -> str: path = self.project_id + '/' + self.id return path @caching.cached_api_call def get_builds(context: models.Context) -> Mapping[str, Build]: """Get a list of Cloud Build instances matching the given context, indexed by Cloud Build id.""" if not apis.is_enabled(context.project_id, 'cloudbuild'): return {} build_api = apis.get_api('cloudbuild', 'v1', context.project_id) batch = [] builds = {} start_time = datetime.datetime.now( datetime.timezone.utc) - datetime.timedelta( days=config.get('within_days')) logging.debug('fetching list of builds in the project %s', context.project_id) for location in LOCATIONS: query = build_api.projects().locations().builds().list( parent=f'projects/{context.project_id}/locations/{location}', filter=f'create_time>"{start_time.isoformat()}"') batch.append(query) for request, response, exception in apis_utils.execute_concurrently( api=build_api, requests=batch, context=context): if exception: if isinstance(exception, googleapiclient.errors.HttpError): raise utils.GcpApiError(exception) from exception else: raise exception if request is None or not hasattr(request, 'uri'): logging.warning('Skipping request in batch, invalid request: %s', request) continue match = re.search(r'projects/([^/]+)/locations/([^/]+)', request.uri) assert match, 'Bug: request uri does not match respected format' project_id = match.group(1) location = match.group(2) if response is None or 'builds' not in response: continue for build in response['builds']: # verify that we have some minimal data that we expect if 'id' not in build: raise RuntimeError( 'missing data in projects.locations.builds.list response') r = re.search(r'projects/([^/]+)/locations/([^/]+)/builds/([^/]+)', build['name']) if not r: logging.error('build has invalid data: %s', build['name']) continue if not context.match_project_resource(resource=r.group(3)): continue builds[build['id']] = Build(project_id=project_id, location=location, resource_data=build) return builds @caching.cached_api_call def get_triggers(context: models.Context) -> Mapping[str, Trigger]: """Get a list of Cloud Build triggers matching the given context, indexed by Cloud Build trigger id.""" triggers: Dict[str, Trigger] = {} if not apis.is_enabled(context.project_id, 'cloudbuild'): return triggers build_api = apis.get_api('cloudbuild', 'v1', context.project_id) logging.debug('fetching list of triggers in the project %s', context.project_id) query = build_api.projects().locations().triggers().list( parent=f'projects/{context.project_id}/locations/global') try: resp = query.execute(num_retries=config.API_RETRIES) if 'triggers' not in resp: return triggers for resp_f in resp['triggers']: # verify that we have some minimal data that we expect if 'id' not in resp_f: raise RuntimeError( 'missing data in projects.locations.triggers.list response') f = Trigger(project_id=context.project_id, resource_data=resp_f) triggers[f.id] = f except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return triggers ================================================ FILE: gcpdiag/queries/gcb_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in gcf.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub #pylint: disable=unused-argument class CloudBuildApiStub: """Mock object to simulate function api calls.""" def new_batch_http_request(self): return apis_stub.BatchRequestStub() def projects(self): return self def locations(self): return self def builds(self): return CloudBuildBuildsApiStub() def triggers(self): return CloudBuildTriggersApiStub() class CloudBuildBuildsApiStub: """Mock object to simulate functions of builds api calls.""" # pylint: disable-next=redefined-builtin def list(self, parent, filter): del filter # unused m = re.match(r'^projects/([^/]+)/locations/([^/]+)', parent) project_id = m.group(1) location = m.group(2) if location == '-': path = 'cloudbuild' else: path = f'cloudbuild-{location}' return apis_stub.RestCallStub( project_id, path, default={}, request_uri=f'https://build.googleapis.com/{parent}') class CloudBuildTriggersApiStub: """Mock object to simulate functions of triggers api calls.""" def list(self, parent): m = re.match(r'projects/([^/]+)/', parent) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'cloudbuild-triggers') ================================================ FILE: gcpdiag/queries/gcb_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in gcb.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, gcb DUMMY_PROJECT_NAME = 'gcpdiag-gcb1-aaaa' BUILD_ID_FAILED_STEP = '01ff384c-d7f2-4295-ad68-5c32529d8b85' BUIDL_ID_FAILED_LOGGING = '58c22070-5629-480e-b822-cd8eff7befb8' BUIDL_ID_SUCCESS_LOGGING = '4b040094-4204-4f00-a7bd-302639dd6785' BUILD_ID_FAILED_IMAGE_UPLOAD = 'db540598-5a45-46f3-a716-39d834e884c6' BUILD_ID_REGIONAL = 'f055f209-21ef-4fa1-84f8-8509d24b0fae' CUSTOM1_SERVICE_ACCOUNT = \ 'projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com' BUILD_IMAGE = 'us-central1-docker.pkg.dev/gcpdiag-gcb1-aaaa/gcb1-repository/image' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestCloudBuild: """Test Cloud Build""" def test_get_builds(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) builds = gcb.get_builds(context=context) assert len(builds) == 6 assert BUILD_ID_FAILED_STEP in builds assert BUIDL_ID_FAILED_LOGGING in builds assert BUIDL_ID_SUCCESS_LOGGING in builds assert BUILD_ID_FAILED_IMAGE_UPLOAD in builds assert BUILD_ID_REGIONAL in builds def test_build_service_account(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) builds = gcb.get_builds(context=context) assert (builds[BUILD_ID_FAILED_IMAGE_UPLOAD].service_account == CUSTOM1_SERVICE_ACCOUNT) assert builds[BUILD_ID_FAILED_STEP].service_account is None def test_build_images(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) builds = gcb.get_builds(context=context) assert builds[BUILD_ID_FAILED_IMAGE_UPLOAD].images == [BUILD_IMAGE] assert builds[BUILD_ID_FAILED_STEP].images == [] def test_build_failure_info(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) builds = gcb.get_builds(context=context) assert builds[BUILD_ID_FAILED_IMAGE_UPLOAD].failure_info.failure_type == '' assert (builds[BUIDL_ID_FAILED_LOGGING].failure_info.failure_type == 'LOGGING_FAILURE') assert (builds[BUILD_ID_FAILED_STEP].failure_info.failure_type == 'USER_BUILD_STEP') def test_build_options(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) builds = gcb.get_builds(context=context) assert (builds[BUIDL_ID_SUCCESS_LOGGING].options.log_streaming_option == 'STREAM_OFF') assert builds[BUIDL_ID_SUCCESS_LOGGING].options.logging == 'GCS_ONLY' ================================================ FILE: gcpdiag/queries/gce.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP Compute Engine.""" import concurrent.futures import dataclasses import ipaddress import logging import re from datetime import datetime, timezone from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Set import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import caching, config, executor, models, utils from gcpdiag.queries import apis, apis_utils, crm from gcpdiag.queries import network as network_q POSITIVE_BOOL_VALUES = {'Y', 'YES', 'TRUE', '1'} DATAPROC_LABEL = 'goog-dataproc-cluster-name' GKE_LABEL = 'goog-gke-node' class InstanceTemplate(models.Resource): """Represents a GCE Instance Template.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def name(self) -> str: return self._resource_data['name'] @property def tags(self) -> List[str]: return self._resource_data['properties'].get('tags', {}).get('items', []) @property def service_account(self) -> Optional[str]: sa_list = self._resource_data['properties'].get('serviceAccounts', []) if not sa_list: return None email = sa_list[0]['email'] if email == 'default': project_nr = crm.get_project(self._project_id).number return f'{project_nr}-compute@developer.gserviceaccount.com' return email @property def network(self) -> network_q.Network: return network_q.get_network_from_url( self._resource_data['properties']['networkInterfaces'][0]['network']) @property def subnetwork(self) -> network_q.Subnetwork: subnet_url = self._resource_data['properties']['networkInterfaces'][0][ 'subnetwork'] return self.network.subnetworks[subnet_url] def get_metadata(self, key: str) -> str: for item in self._resource_data['properties']['metadata']['items']: if item['key'] == key: return item['value'] return '' class InstanceGroup(models.Resource): """Represents a GCE instance group.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: result = re.match( r'https://www.googleapis.com/compute/v1/(.*)', self._resource_data['selfLink'], ) if result: return result.group(1) else: return '>> ' + self._resource_data['selfLink'] @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def name(self) -> str: return self._resource_data['name'] @property def named_ports(self) -> List[dict]: if 'namedPorts' in self._resource_data: return self._resource_data['namedPorts'] return [] def has_named_ports(self) -> bool: if 'namedPorts' in self._resource_data: return True return False class ManagedInstanceGroup(models.Resource): """Represents a GCE managed instance group.""" _resource_data: dict _region: Optional[str] def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._region = None @property def full_path(self) -> str: result = re.match( r'https://www.googleapis.com/compute/v1/(.*)', self._resource_data['selfLink'], ) if result: return result.group(1) else: return '>> ' + self._resource_data['selfLink'] @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path def is_gke(self) -> bool: """Is this managed instance group part of a GKE cluster? Note that the results are based on heuristics (the mig name), which is not ideal. Returns: bool: True if this managed instance group is part of a GKE cluster. """ # gke- is normal GKE, gk3- is GKE autopilot return self.name.startswith('gke-') or self.name.startswith('gk3-') @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def name(self) -> str: return self._resource_data['name'] @property def region(self) -> str: if self._region is None: if 'region' in self._resource_data: m = re.search(r'/regions/([^/]+)$', self._resource_data['region']) if not m: raise RuntimeError("can't determine region of mig %s (%s)" % (self.name, self._resource_data['region'])) self._region = m.group(1) elif 'zone' in self._resource_data: m = re.search(r'/zones/([^/]+)$', self._resource_data['zone']) if not m: raise RuntimeError("can't determine region of mig %s (%s)" % (self.name, self._resource_data['region'])) zone = m.group(1) self._region = utils.zone_region(zone) else: raise RuntimeError( f"can't determine region of mig {self.name}, both region and zone" " aren't set!") return self._region @property def zone(self) -> Optional[str]: if 'zone' in self._resource_data: m = re.search(r'/zones/([^/]+)$', self._resource_data['zone']) if not m: raise RuntimeError("can't determine zone of mig %s (%s)" % (self.name, self._resource_data['zone'])) return m.group(1) return None def count_no_action_instances(self) -> int: """number of instances in the mig that are running and have no scheduled actions.""" return self._resource_data['currentActions']['none'] def is_instance_member(self, project_id: str, region: str, instance_name: str): """Given the project_id, region and instance name, is it a member of this MIG?""" return (self.project_id == project_id and self.region == region and instance_name.startswith(self._resource_data['baseInstanceName'])) @property def template(self) -> InstanceTemplate: if 'instanceTemplate' not in self._resource_data: raise RuntimeError('instanceTemplate not set for MIG {self.name}') m = re.match( r'https://www.googleapis.com/compute/v1/(.*)', self._resource_data['instanceTemplate'], ) if not m: raise RuntimeError("can't parse instanceTemplate: %s" % self._resource_data['instanceTemplate']) template_self_link = m.group(1) templates = get_instance_templates(self.project_id) if template_self_link not in templates: raise RuntimeError( f'instanceTemplate {template_self_link} for MIG {self.name} not found' ) return templates[template_self_link] @property def version_target_reached(self) -> bool: return get_path(self._resource_data, ('status', 'versionTarget', 'isReached')) def get(self, path: str, default: Any = None) -> Any: """Gets a value from resource_data using a dot-separated path.""" return get_path(self._resource_data, tuple(path.split('.')), default=default) class Autoscaler(models.Resource): """Represents a GCE Autoscaler.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def name(self) -> str: return self._resource_data['name'] def get(self, path: str, default: Any = None) -> Any: """Gets a value from resource_data using a dot-separated path.""" return get_path(self._resource_data, tuple(path.split('.')), default=default) class SerialPortOutput: """Represents the full Serial Port Output (/dev/ttyS0 or COM1) of an instance. contents is the full 1MB of the instance. """ _project_id: str _instance_id: str _contents: List[str] def __init__(self, project_id, instance_id, contents): self._project_id = project_id self._instance_id = instance_id self._contents = contents @property def contents(self) -> List[str]: return self._contents @property def instance_id(self) -> str: return self._instance_id class Instance(models.Resource): """Represents a GCE instance.""" _resource_data: dict _region: Optional[str] def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._metadata_dict = None self._region = None @property def id(self) -> str: return self._resource_data['id'] @property def name(self) -> str: return self._resource_data['name'] @property def full_path(self) -> str: result = re.match( r'https://www.googleapis.com/compute/v1/(.*)', self._resource_data['selfLink'], ) if result: return result.group(1) else: return '>> ' + self._resource_data['selfLink'] @property def short_path(self) -> str: # Note: instance names must be unique per project, # so no need to add the zone. path = self.project_id + '/' + self.name return path @property def creation_timestamp(self) -> datetime: """VM creation time, as a *naive* `datetime` object.""" return (datetime.fromisoformat( self._resource_data['creationTimestamp']).astimezone( timezone.utc).replace(tzinfo=None)) @property def region(self) -> str: if self._region is None: if 'zone' in self._resource_data: m = re.search(r'/zones/([^/]+)$', self._resource_data['zone']) if not m: raise RuntimeError("can't determine region of instance %s (%s)" % (self.name, self._resource_data['region'])) zone = m.group(1) self._region = utils.zone_region(zone) else: raise RuntimeError( f"can't determine region of instance {self.name}, zone isn't set!") return self._region @property def zone(self) -> str: zone_uri = self._resource_data['zone'] m = re.search(r'/zones/([^/]+)$', zone_uri) if m: return m.group(1) else: raise RuntimeError(f"can't determine zone of instance {self.name}") @property def disks(self) -> List[dict]: if 'disks' in self._resource_data: return self._resource_data['disks'] return [] @property def boot_disk_licenses(self) -> List[str]: """Returns license names associated with boot disk.""" for disk in self.disks: if disk.get('boot'): return [ l.partition('/global/licenses/')[2] for l in disk.get('licenses', []) ] return [] @property def guest_os_features(self) -> List[str]: """Returns guestOsFeatures types associated with boot disk.""" for disk in self.disks: if disk.get('boot'): return [f['type'] for f in disk.get('guestOsFeatures', [])] return [] @property def startrestricted(self) -> bool: return self._resource_data['startRestricted'] def laststarttimestamp(self) -> str: return self._resource_data['lastStartTimestamp'] def laststoptimestamp(self) -> str: if 'lastStopTimestamp' in self._resource_data: return self._resource_data['lastStopTimestamp'] return '' def is_serial_port_logging_enabled(self) -> bool: value = self.get_metadata('serial-port-logging-enable') return bool(value and value.upper() in POSITIVE_BOOL_VALUES) def is_oslogin_enabled(self) -> bool: value = self.get_metadata('enable-oslogin') return bool(value and value.upper() in POSITIVE_BOOL_VALUES) def is_metadata_enabled(self, metadata_name) -> bool: """Use to check for common boolean metadata value""" value = self.get_metadata(metadata_name) return bool(value and value.upper() in POSITIVE_BOOL_VALUES) def has_label(self, label) -> bool: return label in self.labels def is_dataproc_instance(self) -> bool: return self.has_label(DATAPROC_LABEL) def is_gke_node(self) -> bool: return self.has_label(GKE_LABEL) @property def is_preemptible_vm(self) -> bool: return ('scheduling' in self._resource_data and 'preemptible' in self._resource_data['scheduling'] and self._resource_data['scheduling']['preemptible']) def min_cpu_platform(self) -> str: if 'minCpuPlatform' in self._resource_data: return self._resource_data['minCpuPlatform'] return 'None' @property def created_by_mig(self) -> bool: """Return bool indicating if the instance part of a mig. MIG which were part of MIG however have been removed or terminated will return True. """ created_by = self.get_metadata('created-by') if created_by is None: return False created_by_match = re.match( r'projects/([^/]+)/((?:regions|zones)/[^/]+/instanceGroupManagers/[^/]+)$', created_by, ) if not created_by_match: return False return True def is_windows_machine(self) -> bool: if 'disks' in self._resource_data: disks = next(iter(self._resource_data['disks'])) if 'guestOsFeatures' in disks: if 'WINDOWS' in [t['type'] for t in iter(disks['guestOsFeatures'])]: return True return False def is_public_machine(self) -> bool: if 'networkInterfaces' in self._resource_data: return 'natIP' in str(self._resource_data['networkInterfaces']) return False def machine_type(self): if 'machineType' in self._resource_data: # return self._resource_data['machineType'] machine_type_uri = self._resource_data['machineType'] mt = re.search(r'/machineTypes/([^/]+)$', machine_type_uri) if mt: return mt.group(1) else: raise RuntimeError( f"can't determine machineType of instance {self.name}") return None def check_license(self, licenses: List[str]) -> bool: """Checks that a license is contained in a given license list.""" if 'disks' in self._resource_data: for disk in self._resource_data['disks']: if 'license' in str(disk): for license_ in licenses: for attached_license in disk['licenses']: if license_ == attached_license.partition('/global/licenses/')[2]: return True return False def get_boot_disk_image(self) -> str: """Get VM's boot disk image.""" boot_disk_image: str = '' for disk in self.disks: if disk.get('boot', False): disk_source = disk.get('source', '') m = re.search(r'/disks/([^/]+)$', disk_source) if not m: raise RuntimeError(f"can't determine name of boot disk {disk_source}") disk_name = m.group(1) gce_disk: Disk = get_disk(self.project_id, zone=self.zone, disk_name=disk_name) return gce_disk.source_image return boot_disk_image @property def is_sole_tenant_vm(self) -> bool: return bool('nodeAffinities' in self._resource_data['scheduling']) @property def network(self) -> network_q.Network: # 'https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default' network_string = self._resource_data['networkInterfaces'][0]['network'] m = re.match(r'^.+/projects/([^/]+)/global/networks/([^/]+)$', network_string) if not m: raise RuntimeError("can't parse network string: %s" % network_string) return network_q.get_network(m.group(1), m.group(2), context=models.Context(project_id=m.group(1))) @property def network_ips(self) -> List[network_q.IPv4AddrOrIPv6Addr]: return [ ipaddress.ip_address(nic['networkIP']) for nic in self._resource_data['networkInterfaces'] ] @property def get_network_interfaces(self): return self._resource_data['networkInterfaces'] @property def subnetworks(self) -> List[network_q.Subnetwork]: subnetworks = [] for nic in self._resource_data['networkInterfaces']: subnetworks.append(network_q.get_subnetwork_from_url(nic['subnetwork'])) return subnetworks @property def routes(self) -> List[network_q.Route]: routes = [] for nic in self._resource_data['networkInterfaces']: for route in network_q.get_routes(self.project_id): if nic['network'] == route.network: if route.tags == []: routes.append(route) continue else: temp = [x for x in self.tags if x in route.tags] if len(temp) > 0: routes.append(route) return routes def get_network_ip_for_instance_interface( self, network: str) -> Optional[network_q.IPv4NetOrIPv6Net]: """Get the network ip for a nic given a network name.""" for nic in self._resource_data['networkInterfaces']: if nic.get('network') == network: return ipaddress.ip_network(nic.get('networkIP')) return None def secure_boot_enabled(self) -> bool: if 'shieldedInstanceConfig' in self._resource_data: return self._resource_data['shieldedInstanceConfig']['enableSecureBoot'] return False @property def access_scopes(self) -> List[str]: if 'serviceAccounts' in self._resource_data: saccts = self._resource_data['serviceAccounts'] if isinstance(saccts, list) and len(saccts) >= 1: return saccts[0].get('scopes', []) return [] @property def service_account(self) -> Optional[str]: if 'serviceAccounts' in self._resource_data: saccts = self._resource_data['serviceAccounts'] if isinstance(saccts, list) and len(saccts) >= 1: return saccts[0]['email'] return None @property def tags(self) -> List[str]: if 'tags' in self._resource_data: if 'items' in self._resource_data['tags']: return self._resource_data['tags']['items'] return [] def get_metadata(self, key: str) -> str: if not self._metadata_dict: self._metadata_dict = {} if ('metadata' in self._resource_data and 'items' in self._resource_data['metadata']): for item in self._resource_data['metadata']['items']: if 'key' in item and 'value' in item: self._metadata_dict[item['key']] = item['value'] project_metadata = get_project_metadata(self.project_id) return self._metadata_dict.get(key, project_metadata.get(key)) @property def status(self) -> str: """VM Status.""" return self._resource_data.get('status', None) @property def is_running(self) -> bool: """VM Status is indicated as running.""" return self._resource_data.get('status', False) == 'RUNNING' @property def network_interface_count(self) -> int: """Returns the number of network interfaces attached to the instance.""" return len(self._resource_data.get('networkInterfaces', [])) @property # type: ignore @caching.cached_api_call(in_memory=True) def mig(self) -> ManagedInstanceGroup: """Return ManagedInstanceGroup that owns this instance. Throws AttributeError in case it isn't MIG-managed. """ created_by = self.get_metadata('created-by') if created_by is None: raise AttributeError(f'instance {self.id} is not managed by a mig') # Example created-by: # pylint: disable=line-too-long # "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-e5e20a34-grp" # (note how it uses a project number and not a project id...) created_by_match = re.match( r'projects/([^/]+)/((?:regions|zones)/[^/]+/instanceGroupManagers/[^/]+)$', created_by, ) if not created_by_match: raise AttributeError(f'instance {self.id} is not managed by a mig' f' (created-by={created_by})') project = crm.get_project(created_by_match.group(1)) mig_self_link = ('https://www.googleapis.com/compute/v1/' f'projects/{project.id}/{created_by_match.group(2)}') # Try to find a matching mig. context = models.Context(project_id=self.project_id) all_migs = list(get_managed_instance_groups(context).values()) + list( get_region_managed_instance_groups(context).values()) for mig in all_migs: if mig.self_link == mig_self_link: return mig raise AttributeError(f'MIG not found for instance {self.id}. ' f'Created by: {created_by}') @property def labels(self) -> dict: return self._resource_data.get('labels', {}) class Disk(models.Resource): """Represents a GCE disk.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def id(self) -> str: return self._resource_data['id'] @property def name(self) -> str: return self._resource_data['name'] @property def type(self) -> str: disk_type = re.search(r'/diskTypes/([^/]+)$', self._resource_data['type']) if not disk_type: raise RuntimeError("can't determine type of the disk %s (%s)" % (self.name, self._resource_data['type'])) return disk_type.group(1) @property def users(self) -> list: pattern = r'/instances/(.+)$' # Extracting the instances instances = [] for i in self._resource_data.get('users', []): m = re.search(pattern, i) if m: instances.append(m.group(1)) return instances @property def zone(self) -> str: m = re.search(r'/zones/([^/]+)$', self._resource_data['zone']) if not m: raise RuntimeError("can't determine zone of disk %s (%s)" % (self.name, self._resource_data['zone'])) return m.group(1) @property def source_image(self) -> str: return self._resource_data.get('sourceImage', '') @property def full_path(self) -> str: result = re.match( r'https://www.googleapis.com/compute/v1/(.*)', self._resource_data['selfLink'], ) if result: return result.group(1) else: return '>> ' + self._resource_data['selfLink'] @property def short_path(self) -> str: return f'{self.project_id}/{self.name}' @property def bootable(self) -> bool: return 'guestOsFeatures' in self._resource_data @property def in_use(self) -> bool: return 'users' in self._resource_data @property def size(self) -> int: return self._resource_data['sizeGb'] @property def provisionediops(self) -> Optional[int]: return self._resource_data.get('provisionedIops') @property def has_snapshot_schedule(self) -> bool: return 'resourcePolicies' in self._resource_data @caching.cached_api_call(in_memory=True) def get_gce_zones(project_id: str) -> Set[str]: try: gce_api = apis.get_api('compute', 'v1', project_id) logging.debug('listing gce zones of project %s', project_id) request = gce_api.zones().list(project=project_id) response = request.execute(num_retries=config.API_RETRIES) if not response or 'items' not in response: return set() return {item['name'] for item in response['items'] if 'name' in item} except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err def get_gce_public_licences(project_id: str) -> List[str]: """Returns a list of licenses based on publicly available image project""" licenses = [] gce_api = apis.get_api('compute', 'v1', project_id) logging.debug('listing licenses of project %s', project_id) request = gce_api.licenses().list(project=project_id) while request is not None: response = request.execute() for license_ in response['items']: formatted_license = license_['selfLink'].partition('/global/licenses/')[2] licenses.append(formatted_license) request = gce_api.licenses().list_next(previous_request=request, previous_response=response) return licenses def get_instance(project_id: str, zone: str, instance_name: str) -> Instance: """Returns instance object matching instance name and zone""" compute = apis.get_api('compute', 'v1', project_id) request = compute.instances().get(project=project_id, zone=zone, instance=instance_name) response = request.execute(num_retries=config.API_RETRIES) return Instance(project_id, resource_data=response) @caching.cached_api_call(in_memory=True) def get_instance_by_id(project_id: str, instance_id: str) -> Optional[Instance]: """Returns instance object matching instance id in the project. Searches all zones. Args: project_id: The ID of the GCP project. instance_id: The unique ID of the GCE instance. """ if not apis.is_enabled(project_id, 'compute'): return None gce_api = apis.get_api('compute', 'v1', project_id) # Use aggregatedList with filter to efficiently find the instance by ID. request = gce_api.instances().aggregatedList(project=project_id, filter=f'id eq {instance_id}', returnPartialSuccess=True) while request: response = request.execute(num_retries=config.API_RETRIES) items = response.get('items', {}) for _, data in items.items(): if 'instances' in data: for instance_data in data['instances']: if str(instance_data.get('id')) == str(instance_id): return Instance(project_id, instance_data) request = gce_api.instances().aggregatedList_next( previous_request=request, previous_response=response) return None @caching.cached_api_call(in_memory=True) def get_global_operations( project: str, filter_str: Optional[str] = None, order_by: Optional[str] = None, max_results: Optional[int] = None, service_project_number: Optional[int] = None, ) -> List[Dict[str, Any]]: """Returns global operations object matching project id.""" compute = apis.get_api('compute', 'v1', project) logging.debug(('searching compute global operations' 'logs in project %s with filter %s'), project, filter_str) operations: List[Dict[str, Any]] = [] request = compute.globalOperations().aggregatedList( project=project, filter=filter_str, orderBy=order_by, maxResults=max_results, serviceProjectNumber=service_project_number, returnPartialSuccess=True, ) while request: response = request.execute(num_retries=config.API_RETRIES) operations_by_regions = response.get('items', {}) for _, data in operations_by_regions.items(): if 'operations' not in data: continue operations.extend(data['operations']) request = compute.globalOperations().aggregatedList_next( previous_request=request, previous_response=response) return operations @caching.cached_api_call(in_memory=True) def get_disk(project_id: str, zone: str, disk_name: str) -> Disk: """Returns disk object matching disk name and zone.""" compute = apis.get_api('compute', 'v1', project_id) request = compute.disks().get(project=project_id, zone=zone, disk=disk_name) response = request.execute(num_retries=config.API_RETRIES) return Disk(project_id, resource_data=response) def get_instance_group_manager( project_id: str, zone: str, instance_group_manager_name: str) -> ManagedInstanceGroup: """Get a zonal ManagedInstanceGroup object by name and zone. Args: project_id: The project ID of the instance group manager. zone: The zone of the instance group manager. instance_group_manager_name: The name of the instance group manager. Returns: A ManagedInstanceGroup object. Raises: utils.GcpApiError: If the API call fails. """ compute = apis.get_api('compute', 'v1', project_id) request = compute.instanceGroupManagers().get( project=project_id, zone=zone, instanceGroupManager=instance_group_manager_name) try: response = request.execute(num_retries=config.API_RETRIES) return ManagedInstanceGroup(project_id, resource_data=response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err def get_region_instance_group_manager( project_id: str, region: str, instance_group_manager_name: str) -> ManagedInstanceGroup: """Get a regional ManagedInstanceGroup object by name and region. Args: project_id: The project ID of the instance group manager. region: The region of the instance group manager. instance_group_manager_name: The name of the instance group manager. Returns: A ManagedInstanceGroup object. Raises: utils.GcpApiError: If the API call fails. """ compute = apis.get_api('compute', 'v1', project_id) request = compute.regionInstanceGroupManagers().get( project=project_id, region=region, instanceGroupManager=instance_group_manager_name, ) try: response = request.execute(num_retries=config.API_RETRIES) return ManagedInstanceGroup(project_id, resource_data=response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err def get_autoscaler(project_id: str, zone: str, autoscaler_name: str) -> Autoscaler: """Get a zonal Autoscaler object by name and zone.""" compute = apis.get_api('compute', 'v1', project_id) request = compute.autoscalers().get(project=project_id, zone=zone, autoscaler=autoscaler_name) try: response = request.execute(num_retries=config.API_RETRIES) return Autoscaler(project_id, resource_data=response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err def get_region_autoscaler(project_id: str, region: str, autoscaler_name: str) -> Autoscaler: """Get a regional Autoscaler object by name and region.""" compute = apis.get_api('compute', 'v1', project_id) request = compute.regionAutoscalers().get(project=project_id, region=region, autoscaler=autoscaler_name) try: response = request.execute(num_retries=config.API_RETRIES) return Autoscaler(project_id, resource_data=response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err @caching.cached_api_call(in_memory=True) def get_instances(context: models.Context) -> Mapping[str, Instance]: """Get a list of Instance matching the given context, indexed by instance id.""" instances: Dict[str, Instance] = {} if not apis.is_enabled(context.project_id, 'compute'): return instances gce_api = apis.get_api('compute', 'v1', context.project_id) request = gce_api.instances().aggregatedList(project=context.project_id, returnPartialSuccess=True) logging.debug('listing gce instances of project %s', context.project_id) while request: # Continue as long as there are pages response = request.execute(num_retries=config.API_RETRIES) instances_by_zones = response.get('items', {}) for _, data_ in instances_by_zones.items(): if 'instances' not in data_: continue for instance in data_['instances']: result = re.match( r'https://www.googleapis.com/compute/v1/projects/[^/]+/zones/([^/]+)/', instance['selfLink'], ) if not result: logging.error( "instance %s selfLink didn't match regexp: %s", instance['id'], instance['selfLink'], ) continue zone = result.group(1) labels = instance.get('labels', {}) if not context.match_project_resource( resource=instance.get('name'), location=zone, labels=labels) and not context.match_project_resource( resource=instance.get('id'), location=zone, labels=labels): continue instances.update({ instance['id']: Instance(project_id=context.project_id, resource_data=instance) }) request = gce_api.instances().aggregatedList_next( previous_request=request, previous_response=response) return instances @caching.cached_api_call(in_memory=True) def get_instance_groups(context: models.Context) -> Mapping[str, InstanceGroup]: """Get a list of InstanceGroups matching the given context, indexed by name.""" groups: Dict[str, InstanceGroup] = {} if not apis.is_enabled(context.project_id, 'compute'): return groups gce_api = apis.get_api('compute', 'v1', context.project_id) request = gce_api.instanceGroups().aggregatedList(project=context.project_id, returnPartialSuccess=True) logging.debug('listing gce instance groups of project %s', context.project_id) while request: # Continue as long as there are pages response = request.execute(num_retries=config.API_RETRIES) groups_by_zones = response.get('items', {}) for _, data_ in groups_by_zones.items(): if 'instanceGroups' not in data_: continue for group in data_['instanceGroups']: result = re.match( r'https://www.googleapis.com/compute/v1/projects/[^/]+/(zones|regions)/([^/]+)', group['selfLink'], ) if not result: logging.error( "instance %s selfLink didn't match regexp: %s", group['id'], group['selfLink'], ) continue location = result.group(2) labels = group.get('labels', {}) resource = group.get('name', '') if not context.match_project_resource( location=location, labels=labels, resource=resource): continue instance_group = InstanceGroup(context.project_id, resource_data=group) groups[instance_group.full_path] = instance_group request = gce_api.instanceGroups().aggregatedList_next( previous_request=request, previous_response=response) return groups @caching.cached_api_call(in_memory=True) def get_managed_instance_groups( context: models.Context,) -> Mapping[int, ManagedInstanceGroup]: """Get a list of zonal ManagedInstanceGroups matching the given context, indexed by mig id.""" migs: Dict[int, ManagedInstanceGroup] = {} if not apis.is_enabled(context.project_id, 'compute'): return migs gce_api = apis.get_api('compute', 'v1', context.project_id) request = gce_api.instanceGroupManagers().aggregatedList( project=context.project_id, returnPartialSuccess=True) logging.debug('listing zonal managed instance groups of project %s', context.project_id) while request: # Continue as long as there are pages response = request.execute(num_retries=config.API_RETRIES) migs_by_zones = response.get('items', {}) for _, data_ in migs_by_zones.items(): if 'instanceGroupManagers' not in data_: continue for mig in data_['instanceGroupManagers']: result = re.match( r'https://www.googleapis.com/compute/v1/projects/[^/]+/(?:regions|zones)/([^/]+)/', mig['selfLink'], ) if not result: logging.error( "mig %s selfLink didn't match regexp: %s", mig['name'], mig['selfLink'], ) continue location = result.group(1) labels = mig.get('labels', {}) resource = mig.get('name', '') if not context.match_project_resource( location=location, labels=labels, resource=resource): continue migs[mig['id']] = ManagedInstanceGroup(project_id=context.project_id, resource_data=mig) request = gce_api.instanceGroupManagers().aggregatedList_next( previous_request=request, previous_response=response) return migs @caching.cached_api_call(in_memory=True) def get_region_managed_instance_groups( context: models.Context,) -> Mapping[int, ManagedInstanceGroup]: """Get a list of regional ManagedInstanceGroups matching the given context, indexed by mig id.""" migs: Dict[int, ManagedInstanceGroup] = {} if not apis.is_enabled(context.project_id, 'compute'): return migs gce_api = apis.get_api('compute', 'v1', context.project_id) requests = [ gce_api.regionInstanceGroupManagers().list(project=context.project_id, region=r.name) for r in get_all_regions(context.project_id) ] logging.debug( 'listing regional managed instance groups of project %s', context.project_id, ) items = apis_utils.execute_concurrently_with_pagination( api=gce_api, requests=requests, next_function=gce_api.regionInstanceGroupManagers().list_next, context=context, log_text= f'listing regional managed instance groups of project {context.project_id}' ) for i in items: result = re.match( r'https://www.googleapis.com/compute/v1/projects/[^/]+/(?:regions)/([^/]+)/', i['selfLink'], ) if not result: logging.error("mig %s selfLink didn't match regexp: %s", i['name'], i['selfLink']) continue location = result.group(1) labels = i.get('labels', {}) name = i.get('name', '') if not context.match_project_resource( location=location, labels=labels, resource=name): continue migs[i['id']] = ManagedInstanceGroup(project_id=context.project_id, resource_data=i) return migs @caching.cached_api_call def get_instance_templates(project_id: str) -> Mapping[str, InstanceTemplate]: logging.info('fetching instance templates') templates = {} gce_api = apis.get_api('compute', 'v1', project_id) request = gce_api.instanceTemplates().list( project=project_id, returnPartialSuccess=True, # Fetch only a subset of the fields to improve performance. fields=('items/name, items/properties/tags,' ' items/properties/networkInterfaces,' ' items/properties/serviceAccounts, items/properties/metadata'), ) for t in apis_utils.list_all( request, next_function=gce_api.instanceTemplates().list_next): instance_template = InstanceTemplate(project_id, t) templates[instance_template.full_path] = instance_template return templates @caching.cached_api_call def get_project_metadata(project_id) -> Mapping[str, str]: gce_api = apis.get_api('compute', 'v1', project_id) logging.debug('fetching metadata of project %s\n', project_id) query = gce_api.projects().get(project=project_id) try: response = query.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err mapped_metadata: Dict[str, str] = {} metadata = response.get('commonInstanceMetadata') if metadata and 'items' in metadata: for m_item in metadata['items']: mapped_metadata[m_item.get('key')] = m_item.get('value') return mapped_metadata @caching.cached_api_call def get_instances_serial_port_output(context: models.Context): """Get a list of serial port output for instances which matches the given context, running and is not exported to cloud logging. """ # Create temp storage (diskcache.Deque) for output deque = caching.get_tmp_deque('tmp-gce-serial-output-') if not apis.is_enabled(context.project_id, 'compute'): return deque gce_api = apis.get_api('compute', 'v1', context.project_id) # Serial port output are rolled over on day 7 and limited to 1MB. # Fetching serial outputs are very expensive so optimize to fetch. # Only relevant instances as storage size can grow drastically for # massive projects. Think 1MB * N where N is some large number. requests = [ gce_api.instances().getSerialPortOutput( project=i.project_id, zone=i.zone, instance=i.id, # To get all 1mb output start=-1000000, ) for i in get_instances(context).values() # fetch running instances that do not export to cloud logging if not i.is_serial_port_logging_enabled() and i.is_running ] requests_start_time = datetime.now() # Note: We are limited to 1000 calls in a single batch request. # We have to use multiple batch requests in batches of 1000 # https://github.com/googleapis/google-api-python-client/blob/main/docs/batch.md batch_size = 1000 for i in range(0, len(requests), batch_size): batch_requests = requests[i:i + batch_size] for _, response, exception in apis_utils.execute_concurrently( api=gce_api, requests=batch_requests, context=context): if exception: if isinstance(exception, googleapiclient.errors.HttpError): raise utils.GcpApiError(exception) from exception else: raise exception if response: result = re.match( r'https://www.googleapis.com/compute/v1/projects/([^/]+)/zones/[^/]+/instances/([^/]+)', response['selfLink'], ) if not result: logging.error("instance selfLink didn't match regexp: %s", response['selfLink']) return project_id = result.group(1) instance_id = result.group(2) deque.appendleft( SerialPortOutput( project_id=project_id, instance_id=instance_id, contents=response['contents'].splitlines(), )) requests_end_time = datetime.now() logging.debug( 'total serial logs processing time: %s, number of instances: %s', requests_end_time - requests_start_time, len(requests), ) return deque @caching.cached_api_call def get_instance_serial_port_output( project_id, zone, instance_name) -> Optional[SerialPortOutput]: """Get a list of serial port output for instances which matches the given context, running and is not exported to cloud logging. """ # Create temp storage (diskcache.Deque) for output if not apis.is_enabled(project_id, 'compute'): return None gce_api = apis.get_api('compute', 'v1', project_id) request = gce_api.instances().getSerialPortOutput( project=project_id, zone=zone, instance=instance_name, # To get all 1mb output start=-1000000, ) try: response = request.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError: return None if response: result = re.match( r'https://www.googleapis.com/compute/v1/projects/([^/]+)/zones/[^/]+/instances/([^/]+)', response['selfLink'], ) if not result: logging.error("instance selfLink didn't match regexp: %s", response['selfLink']) return None project_id = result.group(1) instance_id = result.group(2) return SerialPortOutput( project_id, instance_id=instance_id, contents=response['contents'].splitlines(), ) return None class Region(models.Resource): """Represents a GCE Region.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def name(self) -> str: return self._resource_data['name'] @caching.cached_api_call def get_all_regions(project_id: str) -> Iterable[Region]: """Return list of all regions Args: project_id (str): project id for this request Raises: utils.GcpApiError: Raises GcpApiError in case of query issues Returns: Iterable[Region]: Return list of all regions """ try: gce_api = apis.get_api('compute', 'v1', project_id) request = gce_api.regions().list(project=project_id) response = request.execute(num_retries=config.API_RETRIES) if not response or 'items' not in response: return set() return { Region(project_id, item) for item in response['items'] if 'name' in item } except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err def get_regions_with_instances(context: models.Context) -> Iterable[Region]: """Return list of regions with instances Args: context (models.Context): context for this request Returns: Iterable[Region]: Return list of regions which contains instances """ regions_of_instances = {i.region for i in get_instances(context).values()} all_regions = get_all_regions(context.project_id) if not all_regions: return set() return {r for r in all_regions if r.name in regions_of_instances} @caching.cached_api_call def get_all_disks(context: models.Context) -> Iterable[Disk]: """Get all disks in a project, matching the context. Args: context: The project context. Returns: An iterable of Disk objects. """ project_id = context.project_id # Fetching only Zonal Disks(Regional disks exempted) try: gce_api = apis.get_api('compute', 'v1', project_id) requests = [ gce_api.disks().list(project=project_id, zone=zone) for zone in get_gce_zones(project_id) ] logging.debug('listing gce disks of project %s', project_id) items = apis_utils.execute_concurrently_with_pagination( api=gce_api, requests=requests, next_function=gce_api.disks().list_next, context=context, log_text=f'listing GCE disks of project {project_id}') return {Disk(project_id, item) for item in items} except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err @caching.cached_api_call def get_all_disks_of_instance(context: models.Context, zone: str, instance_name: str) -> dict: """Get all disks of a given instance. Args: context: The project context. zone: The zone of the instance. instance_name: The name of the instance. Returns: A dict of Disk objects keyed by disk name. """ project_id = context.project_id # Fetching only Zonal Disks(Regional disks exempted) attached to an instance try: gce_api = apis.get_api('compute', 'v1', project_id) requests = [gce_api.disks().list(project=project_id, zone=zone)] logging.debug( 'listing gce disks attached to instance %s in project %s', instance_name, project_id, ) items = apis_utils.execute_concurrently_with_pagination( api=gce_api, requests=requests, next_function=gce_api.disks().list_next, context=context, log_text= f'listing gce disks attached to instance {instance_name} in project {project_id}' ) all_disk_list = {Disk(project_id, item) for item in items} disk_list = {} for disk in all_disk_list: if disk.users == [instance_name]: disk_list[disk.name] = disk return disk_list except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err class InstanceEffectiveFirewalls(network_q.EffectiveFirewalls): """Effective firewall rules for a network interface on a VM instance. Includes org/folder firewall policies). """ _instance: Instance _nic: str def __init__(self, instance, nic, resource_data): super().__init__(resource_data) self._instance = instance self._nic = nic @caching.cached_api_call(in_memory=True) def get_instance_interface_effective_firewalls( instance: Instance, nic: str) -> InstanceEffectiveFirewalls: """Return effective firewalls for a network interface on the instance.""" compute = apis.get_api('compute', 'v1', instance.project_id) request = compute.instances().getEffectiveFirewalls( project=instance.project_id, zone=instance.zone, instance=instance.name, networkInterface=nic, ) response = request.execute(num_retries=config.API_RETRIES) return InstanceEffectiveFirewalls(Instance, nic, response) def is_project_serial_port_logging_enabled(project_id: str) -> bool: if not apis.is_enabled(project_id, 'compute'): return False value = get_project_metadata( project_id=project_id).get('serial-port-logging-enable') return bool(value and value.upper() in POSITIVE_BOOL_VALUES) def is_serial_port_buffer_enabled(): return config.get('enable_gce_serial_buffer') @dataclasses.dataclass class _SerialOutputJob: """A group of log queries that will be executed with a single API call.""" context: models.Context future: Optional[concurrent.futures.Future] = None def __init__(self, context, future: Optional[concurrent.futures.Future] = None): self.context = context self.future = future class SerialOutputQuery: """A serial output job that was started with prefetch_logs().""" job: _SerialOutputJob def __init__(self, job): self.job = job @property def entries(self) -> Sequence: if not self.job.future: raise RuntimeError("Fetching serial logs wasn't executed. did you call" ' execute_get_serial_port_output()?') elif self.job.future.running(): logging.debug( 'waiting for serial output results for project: %s', self.job.context.project_id, ) return self.job.future.result() jobs_todo: Dict[models.Context, _SerialOutputJob] = {} def execute_fetch_serial_port_outputs( query_executor: executor.ContextAwareExecutor): # start a thread to fetch serial log; processing logs can be large # depending on he number of instances in the project which aren't # logging to cloud logging. currently expects only one job but # implementing it so support for multiple projects is possible. global jobs_todo jobs_executing = jobs_todo jobs_todo = {} # query_executor = get_executor(context) for job in jobs_executing.values(): job.future = query_executor.submit(get_instances_serial_port_output, job.context) def fetch_serial_port_outputs(context: models.Context) -> SerialOutputQuery: # Aggregate by context job = jobs_todo.setdefault(context, _SerialOutputJob(context=context)) return SerialOutputQuery(job=job) # Health check implementation class HealthCheck(models.Resource): """A Health Check resource.""" _resource_data: dict _type: str def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def is_log_enabled(self) -> bool: try: log_config = self._resource_data.get('logConfig', False) if log_config and log_config['enable']: return True except KeyError: return False return False @property def region(self): url = self._resource_data.get('region', '') match = re.search(r'/([^/]+)/?$', url) if match: region = match.group(1) return region return None @property def type(self) -> str: return self._resource_data['type'] @property def request_path(self) -> str: return self.get_health_check_property('requestPath', '/') @property def request(self) -> str: return self.get_health_check_property('request') @property def response(self) -> str: return self.get_health_check_property('response') @property def port(self) -> int: return self.get_health_check_property('port') @property def port_specification(self) -> str: return self.get_health_check_property('portSpecification', 'USE_FIXED_PORT') @property def timeout_sec(self) -> int: return self._resource_data.get('timeoutSec', 5) @property def check_interval_sec(self) -> int: return self._resource_data.get('checkIntervalSec', 5) @property def unhealthy_threshold(self) -> int: return self._resource_data.get('unhealthyThreshold', 2) @property def healthy_threshold(self) -> int: return self._resource_data.get('healthyThreshold', 2) def get_health_check_property(self, property_name: str, default_value=None): health_check_types = { 'HTTP': 'httpHealthCheck', 'HTTPS': 'httpsHealthCheck', 'HTTP2': 'http2HealthCheck', 'TCP': 'tcpHealthCheck', 'SSL': 'sslHealthCheck', 'GRPC': 'grpcHealthCheck', } if self.type in health_check_types: health_check_data = self._resource_data.get(health_check_types[self.type]) if health_check_data: return health_check_data.get(property_name) or default_value return default_value @caching.cached_api_call(in_memory=True) def get_health_check(project_id: str, health_check: str, region: str = None) -> object: compute = apis.get_api('compute', 'v1', project_id) if not region or region == 'global': request = compute.healthChecks().get(project=project_id, healthCheck=health_check) else: request = compute.regionHealthChecks().get(project=project_id, healthCheck=health_check, region=region) response = request.execute(num_retries=config.API_RETRIES) return HealthCheck(project_id, response) class NetworkEndpointGroup(models.Resource): """A Network Endpoint Group resource.""" _resource_data: dict _type: str def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def self_link(self) -> str: return self._resource_data['selfLink'] @caching.cached_api_call(in_memory=True) def get_zonal_network_endpoint_groups( context: models.Context,) -> Mapping[str, NetworkEndpointGroup]: """Returns a list of Network Endpoint Groups in the project.""" groups: Dict[str, NetworkEndpointGroup] = {} if not apis.is_enabled(context.project_id, 'compute'): return groups gce_api = apis.get_api('compute', 'v1', context.project_id) requests = [ gce_api.networkEndpointGroups().list(project=context.project_id, zone=zone) for zone in get_gce_zones(context.project_id) ] logging.debug('listing gce networkEndpointGroups of project %s', context.project_id) items = apis_utils.execute_concurrently_with_pagination( api=gce_api, requests=requests, next_function=gce_api.networkEndpointGroups().list_next, context=context, log_text=( f'listing gce networkEndpointGroups of project {context.project_id}'), ) for i in items: result = re.match( r'https://www.googleapis.com/compute/v1/projects/[^/]+/zones/([^/]+)', i['selfLink'], ) if not result: logging.error("instance %s selfLink didn't match regexp: %s", i['id'], i['selfLink']) continue zone = result.group(1) labels = i.get('labels', {}) resource = i.get('name', '') if not context.match_project_resource( location=zone, labels=labels, resource=resource): continue data = NetworkEndpointGroup(context.project_id, i) groups[data.full_path] = data return groups ================================================ FILE: gcpdiag/queries/gce_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in gce.py for testing. Instead of doing real API calls, we return test JSON data. """ import json from gcpdiag.queries import (apis_stub, interconnect_stub, lb_stub, network_stub, vpn_stub) # pylint: disable=unused-argument # pylint: disable=invalid-name class ComputeEngineApiStub(apis_stub.ApiStub): """Mock object to simulate compute engine api calls.""" # mocked methods: # gce_api.zones().list(project=project_id).execute() # gce_api.zones().list_next(request, response) # op1=gce_api.instances().list(project=pid, zone=z) # gce_api.new_batch_http_request().add(op1, callback=cb, request_id=id).execute() # gce_api.instanceGroupManagers().list(project=project_id, zone=zone) # gce_api.regionInstanceGroupManagers().list(project=project_id, region=region) # gce_api.instanceGroups().list(project=project_id, zone=zone) # gce_api.disks().list(project=project_id, zone=zone) # gce_api.instances().get(project=project_id, zone=zone, instance=instance_name) # gce_api.instances().getSerialPortOutput(project,zone,instance,start) def __init__(self, mock_state='init', project_id=None, zone=None, page=1): self.mock_state = mock_state self.project_id = project_id self.zone = zone self.page = page def regions(self): return ComputeEngineApiStub('regions') def zones(self): return ComputeEngineApiStub('zones') def disks(self): return ComputeEngineApiStub('disks') def list(self, project, zone=None, returnPartialSuccess=None, fields=None): # TODO: implement fields filtering if self.mock_state in ['igs', 'instances', 'disks', 'negs']: return apis_stub.RestCallStub( project, f'compute-{self.mock_state}-{zone}', default=f'compute-{self.mock_state}-empty', ) elif self.mock_state in ['regions', 'templates', 'zones']: return apis_stub.RestCallStub(project, f'compute-{self.mock_state}') elif self.mock_state in ['licenses']: return apis_stub.RestCallStub(project, f'{project}-licenses') else: raise RuntimeError(f'can\'t list for mock state {self.mock_state}') def aggregatedList( self, project, filter=None, # pylint:disable=redefined-builtin returnPartialSuccess=None, orderBy=None, maxResults=None, serviceProjectNumber=None, ): if self.mock_state == 'projects': return apis_stub.RestCallStub(project, 'compute-project') elif self.mock_state == 'globalOperations': return apis_stub.RestCallStub(project, 'global-operations') else: return apis_stub.RestCallStub(project, f'compute-{self.mock_state}-aggregated') def aggregatedList_next(self, previous_request, previous_response): if isinstance(previous_response, dict) and previous_response.get('nextPageToken'): return apis_stub.RestCallStub( project_id=previous_request.project_id, json_basename=previous_request.json_basename, page=previous_request.page + 1, ) else: return None def list_next(self, previous_request, previous_response): if isinstance(previous_response, dict) and previous_response.get('nextPageToken'): return apis_stub.RestCallStub( project_id=previous_request.project_id, json_basename=previous_request.json_basename, page=previous_request.page + 1, ) else: return None def instances(self): return ComputeEngineApiStub('instances') def globalOperations(self): return ComputeEngineApiStub('globalOperations') def instanceGroupManagers(self): return InstanceGroupManagersApiStub() def regionInstanceGroupManagers(self): return RegionInstanceGroupManagersApiStub() def licenses(self): return ComputeEngineApiStub('licenses') def instanceGroups(self): return ComputeEngineApiStub('igs') def instanceTemplates(self): return ComputeEngineApiStub('templates') def getSerialPortOutput(self, project, zone, instance, start): return apis_stub.RestCallStub( project_id=project, json_basename=f'compute-serial-port-output-{instance}', ) def networkEndpointGroups(self): return ComputeEngineApiStub('negs') def new_batch_http_request(self): batch_api = apis_stub.BatchRequestStub() if self._fail_count: batch_api.fail_next(self._fail_count, self._fail_status) self._fail_count = 0 return batch_api def get(self, project, zone=None, instance=None, disk=None): if self.mock_state == 'projects': return apis_stub.RestCallStub(project, 'compute-project') elif self.mock_state == 'instances': if instance: self.mock_state = 'instance' self.instance = instance self.project = project self.zone = zone return self else: return apis_stub.RestCallStub(project, f'compute-instances-{zone}') elif self.mock_state == 'disks': if disk: self.mock_state = 'disk' self.instance = instance self.project = project self.zone = zone self.disk = disk return self else: return apis_stub.RestCallStub(project, f'compute-instances-disks-{zone}') def projects(self): return ComputeEngineApiStub('projects') def addresses(self): return network_stub.NetworkApiStub(mock_state='addresses') def networks(self): return network_stub.NetworkApiStub(mock_state='networks') def subnetworks(self): return network_stub.NetworkApiStub(mock_state='subnetworks') def routes(self): return network_stub.NetworkApiStub(mock_state='routes') def routers(self): return network_stub.NetworkApiStub(mock_state='routers') def backendServices(self): return lb_stub.LbApiStub(mock_state='backendServices') def regionBackendServices(self): return lb_stub.LbApiStub(mock_state='regionBackendServices') def targetHttpsProxies(self): return lb_stub.TargetProxyStub(mock_state='targetHttpsProxies') def targetSslProxies(self): return lb_stub.TargetProxyStub(mock_state='targetSslProxies') def sslCertificates(self): return lb_stub.SslCertificateApiStub(mock_state='sslCertificates') def regionSslCertificates(self): return lb_stub.SslCertificateApiStub(mock_state='regionSslCertificates') def forwardingRules(self): return lb_stub.LbApiStub(mock_state='forwardingRules') def globalForwardingRules(self): return lb_stub.LbApiStub(mock_state='globalForwardingRules') def healthChecks(self): return HealthCheckApiStub(mock_state='healthChecks') def regionHealthChecks(self): return HealthCheckApiStub(mock_state='regionHealthChecks') def interconnects(self): return interconnect_stub.InterconnectApiStub(mock_state='interconnects') def interconnectAttachments(self): return interconnect_stub.VlanAttachmentApiStub(mock_state='vlan_attachment') def vpnTunnels(self): return vpn_stub.VpnTunnelApiStub('vpnTunnels') def execute(self, num_retries=0): json_dir = apis_stub.get_json_dir(self.project) with open(json_dir / f'compute-instances-{self.zone}.json', encoding='utf-8') as json_file: instances = json.load(json_file)['items'] # get instance if self.mock_state == 'instance': for instance in instances: if instance['name'] == self.instance: return instance # get network interface elif self.mock_state == 'effective_firewalls': for instance in instances: if instance['name'] == self.instance: interfaces = instance['networkInterfaces'] if self.network_interface: for interface in interfaces: if interface['name'] == self.network_interface: return interface else: return interfaces elif self.mock_state == 'disk': with open( json_dir / f'compute-instances-disks-{self.zone}.json', encoding='utf-8', ) as json_file: disks = json.load(json_file)['items'] for disk in disks: if disk['name'] == self.disk: return disk else: raise ValueError( f"can't call this method here (mock_state: {self.mock_state}") def getEffectiveFirewalls(self, project, zone, instance, networkInterface): self.mock_state = 'effective_firewalls' self.instance = instance self.project = project self.zone = zone self.network_interface = networkInterface return self class InstanceGroupManagersApiStub(ComputeEngineApiStub): """Mock object to simulate zonal instance group managers api calls""" def list(self, project, zone=None): return apis_stub.RestCallStub(project, f'compute-migs-{zone}', default='compute-migs-empty') def aggregatedList(self, project, returnPartialSuccess=True): return apis_stub.RestCallStub(project, 'compute-migs-aggregated') def aggregatedList_next(self, previous_request, previous_response): if isinstance(previous_response, dict) and previous_response.get('nextPageToken'): return apis_stub.RestCallStub( project_id=previous_request.project_id, json_basename=previous_request.json_basename, page=previous_request.page + 1, ) else: return None def get(self, project, zone=None, instanceGroupManager=None): if instanceGroupManager: self.instance_group_manager = instanceGroupManager self.project = project self.zone = zone return self else: raise ValueError('missing instanceGroupManager') def execute(self, num_retries=0): json_dir = apis_stub.get_json_dir(self.project) with open(json_dir / f'compute-migs-{self.zone}.json', encoding='utf-8') as json_file: migs = json.load(json_file) if 'items' in migs: for mig in migs['items']: if mig['name'] == self.instance_group_manager: return mig # fallback to aggregated list with open(json_dir / 'compute-migs-aggregated.json', encoding='utf-8') as json_file: migs_by_zone = json.load(json_file)['items'] for zone_migs in migs_by_zone.values(): if 'instanceGroupManagers' not in zone_migs: continue for mig in zone_migs['instanceGroupManagers']: if mig['name'] == self.instance_group_manager: return mig raise ValueError( f'instanceGroupManager {self.instance_group_manager} not found') class RegionInstanceGroupManagersApiStub(ComputeEngineApiStub): """Mock object to simulate regional instance group managers api calls""" def list(self, project, region=None): return apis_stub.RestCallStub(project, f'compute-migs-{region}', default='compute-migs-empty') class HealthCheckApiStub: """Mock object to simulate health check api calls""" def __init__(self, mock_state): self.mock_state = mock_state # pylint: disable=redefined-builtin def list(self, project, region=None): if self.mock_state == 'healthChecks': return apis_stub.RestCallStub(project, 'lb-health-checks') if self.mock_state == 'regionHealthChecks': return apis_stub.RestCallStub(project, f'regionHealthChecks-{region}') else: raise ValueError(f'cannot call method {self.mock_state} here') def get(self, project, healthCheck=None, region=None): if healthCheck: self.health_check = healthCheck self.project = project self.region = region return self else: raise ValueError(f'cannot call method {self.mock_state} here') def execute(self, num_retries=0): json_dir = apis_stub.get_json_dir(self.project) json_file_name = f'{self.mock_state}.json' if self.mock_state == 'regionHealthChecks': json_file_name = f'{self.mock_state}-{self.region}.json' with open(json_dir / json_file_name, encoding='utf-8') as json_file: health_checks = json.load(json_file)['items'] # search for and get the health check if health_checks: for health_check in health_checks: if health_check['name'] == self.health_check: return health_check else: raise ValueError( f'the health check {self.health_check} is not found') else: raise ValueError(f'cannot call method {self.mock_state} here') ================================================ FILE: gcpdiag/queries/gce_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in gce.py.""" import concurrent.futures import re import unittest from unittest import mock from gcpdiag import config, models from gcpdiag.queries import apigee, apis_stub, gce, network DATAPROC_LABELS = {'goog-dataproc-cluster-name': 'cluster'} DUMMY_REGION = 'europe-west4' DUMMY_ZONE = 'europe-west4-a' DUMMY_ZONE2 = 'europe-west1-b' DUMMY_ZONE3 = 'europe-west4-b' DUMMY_PROJECT_NAME2 = 'gcpdiag-gce-vm-performance' DUMMY_PROJECT_NAME = 'gcpdiag-gce1-aaaa' DUMMY_LICENSE_PROJECT_NAME = 'windows-cloud' DUMMY_PROJECT_NR = '12340001' DUMMY_DEFAULT_NAME = 'default' DUMMY_INSTANCE1_NAME = 'gce1' DUMMY_INSTANCE1_PATH = (f'projects/{DUMMY_PROJECT_NAME}/zones/{DUMMY_ZONE}/' f'instances/{DUMMY_INSTANCE1_NAME}') DUMMY_INSTANCE1_LABELS = {'foo': 'bar'} DUMMY_INSTANCE2_NAME = 'gce2' DUMMY_INSTANCE2_PATH = (f'projects/{DUMMY_PROJECT_NAME}/zones/{DUMMY_ZONE}/' f'instances/{DUMMY_INSTANCE2_NAME}') DUMMY_INSTANCE2_LABELS = {'gcpdiag-test': 'mig'} DUMMY_INSTANCE3_NAME = 'gke-gke1-default-pool-35923fbc-2xxp' DUMMY_INSTANCE3_PATH = (f'projects/{DUMMY_PROJECT_NAME}/zones/{DUMMY_ZONE}/' f'instances/{DUMMY_INSTANCE3_NAME}') DUMMY_INSTANCE3_LABELS = {'gcp_doctor_test': 'gke'} DUMMY_INSTANCE4_NAME = 'windows-test' DUMMY_NEG1_NAME = 'neg1' DUMMY_NEG1_PATH = (f'projects/{DUMMY_PROJECT_NAME}/zones/{DUMMY_ZONE3}/' f'networkEndpointGroups/{DUMMY_NEG1_NAME}') DUMMY_REGION_MIG_PROJECT_NAME = 'gcpdiag-apigee1-aaaa' DUMMY_REGION_MIG_NAME = 'mig-bridge-manager-us-central1' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestGce(unittest.TestCase): """Test code in gce.py""" def test_get_instances(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = gce.get_instances(context) assert len(instances) == 6 instances_by_path = {i.full_path: i for i in instances.values()} assert DUMMY_INSTANCE1_PATH in instances_by_path assert (instances_by_path[DUMMY_INSTANCE1_PATH].full_path == DUMMY_INSTANCE1_PATH) assert (instances_by_path[DUMMY_INSTANCE1_PATH].short_path == f'{DUMMY_PROJECT_NAME}/{DUMMY_INSTANCE1_NAME}') # also verify that the instances dict uses the instance id as key assert instances_by_path[DUMMY_INSTANCE1_PATH].id in instances def test_get_instances_by_region_returns_instance(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=['fake-region', DUMMY_REGION]) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert DUMMY_INSTANCE1_PATH in instances_by_path and len(instances) == 6 def test_get_instances_by_label(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert DUMMY_INSTANCE1_PATH in instances_by_path and len(instances) == 1 def test_get_instances_by_other_region_returns_empty_result(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=['fake-region']) instances = gce.get_instances(context) assert len(instances) == 0 def test_is_serial_port_logging_enabled(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} i = instances_by_path[DUMMY_INSTANCE1_PATH] assert i.is_serial_port_logging_enabled() assert i.get_metadata('serial-port-logging-enable') def test_is_serial_port_logging_enabled_instance_level(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} i = instances_by_path[DUMMY_INSTANCE2_PATH] assert not i.is_serial_port_logging_enabled() def test_is_gke_node_false(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert not instances_by_path[DUMMY_INSTANCE1_PATH].is_gke_node() def test_is_gke_node_true(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE3_LABELS) instances = gce.get_instances(context) assert len(instances) == 1 for n in instances.values(): assert n.is_gke_node() def test_is_windows_machine(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert instances_by_path[DUMMY_INSTANCE1_PATH].is_windows_machine() is True assert instances_by_path[DUMMY_INSTANCE2_PATH].is_windows_machine() is True def test_is_preemptible_vm(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert instances_by_path[DUMMY_INSTANCE1_PATH].is_preemptible_vm is True assert instances_by_path[DUMMY_INSTANCE2_PATH].is_preemptible_vm is True assert instances_by_path[DUMMY_INSTANCE3_PATH].is_preemptible_vm is False def test_min_cpu_platform(self): instance = gce.get_instance(DUMMY_PROJECT_NAME, DUMMY_ZONE, DUMMY_INSTANCE1_NAME) self.assertEqual(instance.min_cpu_platform(), 'Intel Skylake') instance2 = gce.get_instance(DUMMY_PROJECT_NAME, DUMMY_ZONE, DUMMY_INSTANCE2_NAME) self.assertEqual(instance2.min_cpu_platform(), 'None') def test_network(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert (instances_by_path[DUMMY_INSTANCE1_PATH].network.name == DUMMY_DEFAULT_NAME) assert (instances_by_path[DUMMY_INSTANCE2_PATH].network.name == DUMMY_DEFAULT_NAME) def test_tags(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert 'secured-instance' in instances_by_path[DUMMY_INSTANCE1_PATH].tags assert 'secured-instance' in instances_by_path[DUMMY_INSTANCE2_PATH].tags def test_disks(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert len(instances_by_path[DUMMY_INSTANCE1_PATH].disks) == 1 assert len(instances_by_path[DUMMY_INSTANCE2_PATH].disks) == 1 def test_access_scopes(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert set(instances_by_path[DUMMY_INSTANCE1_PATH].access_scopes) == { 'https://www.googleapis.com/auth/devstorage.read_only', 'https://www.googleapis.com/auth/logging.write', 'https://www.googleapis.com/auth/monitoring.write', 'https://www.googleapis.com/auth/service.management.readonly', 'https://www.googleapis.com/auth/servicecontrol', } def test_service_account(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) instances = gce.get_instances(context) instances_by_path = {i.full_path: i for i in instances.values()} assert (instances_by_path[DUMMY_INSTANCE1_PATH].service_account == f'{DUMMY_PROJECT_NR}-compute@developer.gserviceaccount.com') def test_get_global_operations(self): """get global operations.""" operations = gce.get_global_operations(project=DUMMY_PROJECT_NAME2) assert len(operations) > 0 for op in operations: assert isinstance(op['id'], str) def test_get_instance_groups(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=['europe-west4']) groups = gce.get_instance_groups(context) ig1_path = 'projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1' mig_path = 'projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig' assert groups[ig1_path].has_named_ports() is True assert groups[mig_path].has_named_ports() is False assert 'http' in [p['name'] for p in groups[ig1_path].named_ports] assert 'https' not in [p['name'] for p in groups[ig1_path].named_ports] def test_get_managed_instance_groups(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=['europe-west4']) migs = gce.get_managed_instance_groups(context) assert len(migs) == 2 for n in migs.values(): if n.name == 'mig': assert n.is_gke() is False def test_get_region_managed_instance_groups(self): context = models.Context(project_id=DUMMY_REGION_MIG_PROJECT_NAME, locations=['us-central1']) migs = gce.get_region_managed_instance_groups(context) assert len(migs) == 1 m = next(iter(migs.values())) assert m.name == DUMMY_REGION_MIG_NAME assert m.template.get_metadata('') == '' assert m.template.get_metadata('non-existing') == '' assert (m.template.get_metadata('startup-script-url') == apigee.MIG_STARTUP_SCRIPT_URL) def test_get_managed_instance_groups_gke(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=['europe-west4']) migs = gce.get_managed_instance_groups(context) assert len(migs) == 2 m = next(iter(migs.values())) assert m.is_gke() is True def test_get_managed_instance_groups_empty_result(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) migs = gce.get_managed_instance_groups(context) assert len(migs) == 0 def test_managed_instance_group_zone(self): # zonal mig mig1 = gce.ManagedInstanceGroup( 'p1', { 'name': 'mig1', 'zone': 'https://www.googleapis.com/compute/v1/projects/p1/zones/us-central1-a', 'selfLink': '...' }) self.assertEqual(mig1.zone, 'us-central1-a') # regional mig mig2 = gce.ManagedInstanceGroup( 'p1', { 'name': 'mig2', 'region': 'https://www.googleapis.com/compute/v1/projects/p1/regions/us-central1', 'selfLink': '...' }) self.assertIsNone(mig2.zone) # malformed zone mig3 = gce.ManagedInstanceGroup( 'p1', { 'name': 'mig3', 'zone': 'https://www.googleapis.com/compute/v1/projects/p1/zones/', 'selfLink': '...' }) with self.assertRaises(RuntimeError): _ = mig3.zone def test_managed_instance_group_get_method(self): mig = gce.ManagedInstanceGroup( 'p1', { 'name': 'mig1', 'zone': 'https://www.googleapis.com/compute/v1/projects/p1/zones/us-central1-a', 'selfLink': '...', 'status': { 'versionTarget': { 'isReached': True } } }) self.assertEqual(mig.get('status.versionTarget.isReached'), True) self.assertEqual(mig.get('name'), 'mig1') self.assertIsNone(mig.get('foo.bar')) self.assertEqual(mig.get('foo.bar', 'default'), 'default') def test_autoscaler_get_method(self): autoscaler = gce.Autoscaler( 'p1', { 'name': 'autoscaler1', 'selfLink': 'https://www.googleapis.com/compute/v1/projects/p1/zones/us-central1-a/' 'autoscalers/autoscaler1', 'autoscalingPolicy': { 'mode': 'ON' } }) self.assertEqual(autoscaler.name, 'autoscaler1') self.assertEqual( autoscaler.self_link, 'https://www.googleapis.com/compute/v1/projects/p1/zones/' 'us-central1-a/autoscalers/autoscaler1') self.assertEqual(autoscaler.full_path, 'projects/p1/zones/us-central1-a/autoscalers/autoscaler1') self.assertEqual(autoscaler.get('autoscalingPolicy.mode'), 'ON') self.assertIsNone(autoscaler.get('foo.bar')) self.assertEqual(autoscaler.get('foo.bar', 'default'), 'default') def test_mig_property(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE3_LABELS) for n in gce.get_instances(context).values(): assert re.match(r'gke-gke1-default-pool-\w+-grp', n.mig.name) def test_mig_property_instance_not_in_mig(self): instance = gce.get_instance(DUMMY_PROJECT_NAME, DUMMY_ZONE, DUMMY_INSTANCE1_NAME) with self.assertRaises(AttributeError): _ = instance.mig def test_get_instance_group_manager(self): mig = gce.get_instance_group_manager(DUMMY_PROJECT_NAME, DUMMY_ZONE, 'mig') self.assertEqual(mig.name, 'mig') self.assertEqual(mig.zone, DUMMY_ZONE) def test_get_all_regions(self): regions = gce.get_all_regions(DUMMY_PROJECT_NAME) assert len(regions) > 0 assert 'us-east1' in [r.name for r in regions] assert 'europe-north1' in [r.name for r in regions] assert 'asia-southeast1' in [r.name for r in regions] assert 'southamerica-east1' in [r.name for r in regions] def test_get_regions_with_instances(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) regions = gce.get_regions_with_instances(context) assert len(regions) == 1 assert 'europe-west4' in [r.name for r in regions] def test_count_no_action_instances(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=['europe-west4']) migs = gce.get_managed_instance_groups(context) # check for number of migs since I am only checking for a single mig in the region assert len(migs) == 2 for m in migs.values(): print(m) count = m.count_no_action_instances() assert count == 2 def test_get_instance_templates(self): templates = gce.get_instance_templates(DUMMY_PROJECT_NAME) # find the GKE node pool template prefix = ('projects/gcpdiag-gce1-aaaa/global/instanceTemplates/' 'gke-gke1-default-pool') matched_names = [t for t in templates if t.startswith(prefix)] assert len(matched_names) == 2 t = templates[matched_names[0]] assert t.name.startswith('gke-gke1-default-pool') # GKE nodes pools have at least one tag called 'gke-CLUSTERNAME-CLUSTERHASH-node' assert any( tag.startswith('gke-') and tag.endswith('-node') for tag in t.tags) # service_account assert (t.service_account == f'{DUMMY_PROJECT_NR}-compute@developer.gserviceaccount.com') def test_mig_template(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE2_LABELS) for n in {i.mig for i in gce.get_instances(context).values()}: assert n.template.name.startswith('mig-') def test_get_all_disks(self): disks = gce.get_all_disks(models.Context(project_id=DUMMY_PROJECT_NAME)) for d in disks: assert d.bootable is True if 'unattached-disk' == d.name: assert d.in_use is False else: assert d.in_use is True def test_get_instance(self): instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE1_NAME, ) assert instance.name == DUMMY_INSTANCE1_NAME def test_get_instance_interface_effective_firewalls(self): # use default network interface as nic0 instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE1_NAME, ) firewalls = gce.get_instance_interface_effective_firewalls( instance=instance, nic='nic0') assert isinstance(firewalls, gce.InstanceEffectiveFirewalls) def test_is_public_machine(self): instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE1_NAME, ) assert instance.is_public_machine() is False instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE4_NAME, ) assert instance.is_public_machine() is True def test_check_license(self): licenses = gce.get_gce_public_licences(DUMMY_LICENSE_PROJECT_NAME) payg_licenses = [x for x in licenses if not x.endswith('-byol')] instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE1_NAME, ) assert instance.check_license(payg_licenses) is True instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE4_NAME, ) assert instance.check_license(payg_licenses) is False def test_get_instance_interface_subnetworks(self): instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE1_NAME, ) for subnetwork in instance.subnetworks: assert isinstance(subnetwork, network.Subnetwork) def test_get_instance_interface_routes(self): instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE1_NAME, ) for route in instance.routes: assert isinstance(route, network.Route) def test_is_vm_running(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) instances = gce.get_instances(context) for i in instances.values(): if i.status == 'RUNNING': assert i.is_running else: assert not i.is_running def test_network_interface_count(self): instance = gce.get_instance( project_id=DUMMY_PROJECT_NAME, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE1_NAME, ) self.assertEqual(instance.network_interface_count, 1) def test_get_serial_port_outputs(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) query = gce.get_instances_serial_port_output(context) assert len(query) > 0 assert len(query) > 0 def test_fetch_serial_port_outputs(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) query = gce.fetch_serial_port_outputs(context=context) with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: gce.execute_fetch_serial_port_outputs(executor) # verify that at least one instance serial log (gce2) is present all_entries = list(query.entries) assert len(all_entries) > 0 def test_serial_output_contents_order(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) query = gce.get_instances_serial_port_output(context=context) gce2_id = '1010101010' serial_output = next(iter(query)) assert gce2_id == serial_output.instance_id # gce2 output assert serial_output.contents first_entry = serial_output.contents[0] assert ('01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.' in first_entry) # last_entry = serial_output.contents[-1] assert '[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished' in last_entry def test_is_serial_port_buffer_enabled(self): config.init({'enable_gce_serial_buffer': False}, 'x') assert not gce.is_serial_port_buffer_enabled() config.init({'enable_gce_serial_buffer': True}, 'x') assert gce.is_serial_port_buffer_enabled() def test_is_dataproc_instance(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DATAPROC_LABELS) instances = gce.get_instances(context) for i in instances.values(): assert i.is_dataproc_instance() context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) instances = gce.get_instances(context) for i in instances.values(): assert not i.is_dataproc_instance() def test_get_labels(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_INSTANCE1_LABELS) instances = gce.get_instances(context) for i in instances.values(): assert i.labels == DUMMY_INSTANCE1_LABELS def test_get_zonal_network_endpoint_groups(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) negs = gce.get_zonal_network_endpoint_groups(context) assert len(negs) == 1 negs_by_path = {i.full_path: i for i in negs.values()} assert DUMMY_NEG1_PATH in negs_by_path def test_get_instances_by_id(self): context = models.Context(project_id=DUMMY_PROJECT_NAME, resources=['1010101011']) instances = gce.get_instances(context) self.assertEqual(len(instances), 1) self.assertEqual(list(instances.values())[0].name, 'gce2') def test_get_instance_by_id(self): instance = gce.get_instance_by_id(DUMMY_PROJECT_NAME, '1010101011') self.assertIsNotNone(instance) self.assertEqual(instance.name, 'gce2') self.assertEqual(instance.zone, DUMMY_ZONE) def test_get_instance_by_id_not_found(self): instance = gce.get_instance_by_id(DUMMY_PROJECT_NAME, 'non-existent-id') self.assertIsNone(instance) ================================================ FILE: gcpdiag/queries/gcf.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP CloudFunctions instances.""" import logging import re from typing import Dict, Mapping import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis class CloudFunction(models.Resource): """Represents a GCF instance.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._metadata_dict = None @property def name(self) -> str: m = re.search(r'/functions/([^/]+)$', self._resource_data['name']) if not m: raise RuntimeError('can\'t determine name of cloudfunction %s' % (self._resource_data['name'])) return m.group(1) @property def description(self) -> str: return self._resource_data['description'] @property def full_path(self) -> str: return self._resource_data['name'] @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def runtime(self) -> str: return self._resource_data['runtime'] @property def memory(self) -> str: return self._resource_data['availableMemoryMb'] @caching.cached_api_call def get_cloudfunctions(context: models.Context) -> Mapping[str, CloudFunction]: """Get a list of CloudFunctions matching the given context, indexed by CloudFunction name.""" cloudfunctions: Dict[str, CloudFunction] = {} if not apis.is_enabled(context.project_id, 'cloudfunctions'): return cloudfunctions gcf_api = apis.get_api('cloudfunctions', 'v1', context.project_id) logging.debug('fetching list of GCF functions in project %s', context.project_id) query = gcf_api.projects().locations().functions().list( parent=f'projects/{context.project_id}/locations/-') try: resp = query.execute(num_retries=config.API_RETRIES) if 'functions' not in resp: return cloudfunctions for f in resp['functions']: # verify that we have some minimal data that we expect if 'name' not in f or 'runtime' not in f: raise RuntimeError( 'missing data in projects.locations.functions.list response') # projects/*/locations/*/functions/* result = re.match( r'projects/[^/]+/(?:locations)/([^/]+)/functions/([^/]+)', f['name']) if not result: logging.error('invalid cloud functions data: %s', f['name']) continue location = result.group(1) labels = f.get('labels', {}) name = f.get('name', '') if not context.match_project_resource( location=location, labels=labels, resource=name): continue cloudfunctions[f['name']] = CloudFunction(project_id=context.project_id, resource_data=f) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return cloudfunctions ================================================ FILE: gcpdiag/queries/gcf_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in gcf.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub #pylint: disable=unused-argument class CloudFunctionsApiStub: """Mock object to simulate function api calls.""" def projects(self): return self def locations(self): return self def functions(self): return self def list(self, parent): m = re.match(r'projects/([^/]+)/', parent) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'cloudfunctions') ================================================ FILE: gcpdiag/queries/gcf_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in gcf.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, gcf DUMMY_PROJECT_NAME = 'gcpdiag-gcf1-aaaa' DUMMY_CLOUD_FUNCTION_1_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/us-central1/functions/gcf1' DUMMY_REGION_1 = 'us-central1' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestGcf: """Test GCF""" def test_get_functions(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) cloudfunctions = gcf.get_cloudfunctions(context=context) assert len(cloudfunctions) == 1 assert DUMMY_CLOUD_FUNCTION_1_NAME in cloudfunctions ================================================ FILE: gcpdiag/queries/gcs.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP Cloud Storage """ import dataclasses import logging import re from typing import Dict, Mapping import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, iam @dataclasses.dataclass(frozen=True) class RetentionPolicy: """Bucket's retention policy.""" retention_period: int class RetentionPolicyBuilder: """Builds Bucket's retention policy from dict representation.""" def __init__(self, retention_policy): self._retention_policy = retention_policy def build(self) -> RetentionPolicy: return RetentionPolicy(retention_period=self._get_retention_period()) def _get_retention_period(self) -> int: try: return int(self._retention_policy['retentionPeriod']) except (KeyError, ValueError): return 0 class Bucket(models.Resource): """Represents a GCS Bucket.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._metadata_dict = None @property def id(self) -> str: return self._resource_data['id'] @property def name(self) -> str: return self._resource_data['name'] def is_uniform_access(self) -> bool: return get_path(self._resource_data, ('iamConfiguration', 'uniformBucketLevelAccess', 'enabled'), default=False) @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/storage/v1/(.*)', self._resource_data['selfLink']) if result: return result.group(1) else: return '>> ' + self._resource_data['selfLink'] @property def short_path(self) -> str: return self.name @property def labels(self) -> dict: return self._resource_data.get('labels', {}) @property def retention_policy(self) -> RetentionPolicy: return RetentionPolicyBuilder(self._resource_data.get( 'retentionPolicy', {})).build() class BucketIAMPolicy(iam.BaseIAMPolicy): def _is_resource_permission(self, permission): return True @caching.cached_api_call(in_memory=True) def get_bucket_iam_policy(context: models.Context, bucket: str) -> BucketIAMPolicy: project_id = context.project_id gcs_api = apis.get_api('storage', 'v1', project_id) request = gcs_api.buckets().getIamPolicy(bucket=bucket) return iam.fetch_iam_policy(request, BucketIAMPolicy, project_id, bucket, context) @caching.cached_api_call(in_memory=True) def get_bucket(context: models.Context, bucket: str) -> Bucket: gcs_api = apis.get_api('storage', 'v1', context.project_id) logging.debug('fetching GCS bucket %s', bucket) query = gcs_api.buckets().get(bucket=bucket) try: response = query.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: print(err) raise utils.GcpApiError(err) from err print(response) # Resource data only provides us project number. # We don't know project id at this point. return Bucket(project_id=None, resource_data=response) @caching.cached_api_call(in_memory=True) def get_buckets(context: models.Context) -> Mapping[str, Bucket]: buckets: Dict[str, Bucket] = {} if not apis.is_enabled(context.project_id, 'storage'): return buckets gcs_api = apis.get_api('storage', 'v1', context.project_id) logging.debug('fetching list of GCS buckets in project %s', context.project_id) query = gcs_api.buckets().list(project=context.project_id) try: resp = query.execute(num_retries=config.API_RETRIES) if 'items' not in resp: return buckets for b in resp['items']: # verify that we have some minimal data that we expect if 'id' not in b: raise RuntimeError('missing data in bucket response') # Does not support matching for location for buckets # names are globally unique and should suffice if not context.match_project_resource( resource=b.get('name'), labels=b.get('labels', {}), ): continue buckets[b['name']] = Bucket(project_id=context.project_id, resource_data=b) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return buckets ================================================ FILE: gcpdiag/queries/gcs_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in gcs.py for testing. Instead of doing real API calls, we return test JSON data. """ from typing import Optional from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name NO_PROJECT_ID_ERROR = 'Not able to call {} without setting project_id for API.' class BucketApiStub: """Mock object to simulate storage api calls. Attributes: project_id: Since buckets are not explicitly assigned to projects we need a project_id to be provided by user to know where to find json_directory with bucket data. Without providing it you can still list buckets per project. """ def __init__(self, project_id: Optional[str] = None): self.project_id = project_id def buckets(self): return self def list(self, project): return apis_stub.RestCallStub(project, 'storage') def get(self, bucket): return apis_stub.RestCallStub(self.project_id, f'bucket-{bucket}') def getIamPolicy(self, bucket): if not self.project_id: raise ValueError(NO_PROJECT_ID_ERROR.format('getIamPolicy')) return apis_stub.RestCallStub(self.project_id, 'bucket-roles') ================================================ FILE: gcpdiag/queries/gcs_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in gcs.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, gcs DUMMY_PROJECT_NAME = 'gcpdiag-gcs1-aaaa' DUMMY_BUCKET_PATH = 'b/gcpdiag-gcs1bucket-aaaa' DUMMY_BUCKET_NAME = 'gcpdiag-gcs1bucket-aaaa' DUMMY_BUCKET_WITH_RETENTION_NAME = 'gcpdiag-gcs1bucket2-aaaa' DUMMY_BUCKET_PERM = 'projectEditor:gcpdiag-gcs1-aaaa' DUMMY_BUCKET_LABELS = { 'gcpdiag-gcs1bucket-aaaa': {}, 'gcpdiag-gcs1bucket-labels-aaaa': { 'label1': 'value1' }, } FAKE_BUCKET_RESOURCE_DATA = { 'kind': 'storage#bucket', 'selfLink': 'https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket-aaaa', 'id': 'gcpdiag-gcs1bucket-aaaa', 'name': 'gcpdiag-gcs1bucket-aaaa', 'projectNumber': '12340008', 'metageneration': '9', 'location': 'US', 'storageClass': 'STANDARD', 'etag': 'CAE=', 'timeCreated': '2016-07-12T15:05:45.473Z', 'updated': '2022-06-22T10:25:28.219Z', 'locationType': 'multi-region', 'rpo': 'DEFAULT' } @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestGcs: """Test GCS""" def test_get_buckets(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) buckets = gcs.get_buckets(context=context) assert len(buckets) == 3 assert DUMMY_BUCKET_NAME in buckets def test_get_bucket_iam_policy(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) policy = gcs.get_bucket_iam_policy(context, DUMMY_BUCKET_PATH) assert DUMMY_BUCKET_PERM in policy.get_members() def test_bucket_labels(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) buckets = gcs.get_buckets(context=context) for bucket_name, labels in DUMMY_BUCKET_LABELS.items(): assert buckets[bucket_name].labels == labels def test_get_bucket_with_retention(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) bucket = gcs.get_bucket(context=context, bucket=DUMMY_BUCKET_WITH_RETENTION_NAME) assert bucket.retention_policy.retention_period == 10 def test_get_uniform_access(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) bucket = gcs.get_bucket(context=context, bucket=DUMMY_BUCKET_WITH_RETENTION_NAME) assert bucket.is_uniform_access() is False fake_bucket = gcs.Bucket(project_id=DUMMY_PROJECT_NAME, resource_data=FAKE_BUCKET_RESOURCE_DATA) assert fake_bucket.is_uniform_access() is False ================================================ FILE: gcpdiag/queries/generic_api/api_build/__init__.py ================================================ ================================================ FILE: gcpdiag/queries/generic_api/api_build/api.py ================================================ """Make REST API requests.""" import time from typing import Dict, Iterable, Protocol import requests from gcpdiag.queries import apis_utils class Creds(Protocol): def update_headers(self, headers: Dict[str, str]) -> None: pass class RetryStrategy(Protocol): def get_sleep_intervals(self) -> Iterable[float]: pass class API: """Class abstracting aspects of REST API requests.""" def __init__(self, base_url: str, creds: Creds, retry_strategy: RetryStrategy) -> None: self._creds = creds self._url = base_url self._retry_strategy = retry_strategy def _request(self, method: str, endpoint: str, **kwargs): for timeout in self._retry_strategy.get_sleep_intervals(): try: url = f'{self._url}/{endpoint}' response = requests.request(method, url, headers=self._get_headers(), **kwargs) if response.status_code == 200: return response.json() if response.content else None if not apis_utils.should_retry(response.status_code): raise RuntimeError( f'http status {response.status_code} calling {method} {url}') except requests.exceptions.RequestException: time.sleep(timeout) raise RuntimeError('Failed to get an API response after maximum retries') def _get_headers(self) -> Dict[str, str]: headers: Dict[str, str] = {} self._creds.update_headers(headers) return headers def get(self, endpoint, params=None): return self._request('GET', endpoint, params=params) ================================================ FILE: gcpdiag/queries/generic_api/api_build/api_unittest.py ================================================ """ Tests for API python -m unittest gcpdiag.queries.generic_api.api_build.api_unittest """ import unittest from typing import Dict from unittest.mock import Mock, patch from gcpdiag.async_queries.api import constant_time_retry_strategy from gcpdiag.queries.generic_api.api_build import api class FakeCreds: _token: str def __init__(self, token: str) -> None: self._token = token def update_headers(self, headers: Dict[str, str]) -> None: headers['test_auth'] = f'test_auth {self._token}' class TestAPI(unittest.TestCase): """ Tests for API call """ def setUp(self): self._token = 'fake token' self._base_url = 'https://test.com' self._api = api.API(self._base_url, creds=FakeCreds(self._token), retry_strategy=constant_time_retry_strategy. ConstantTimeoutRetryStrategy(timeout=42, retries=3)) @patch('requests.request') def test_sucessful_get_request(self, mock_request): mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'hello': 'world'} mock_request.return_value = mock_response response = self._api.get('test_endpoint') self.assertEqual(response, {'hello': 'world'}) mock_request.assert_called_once_with( 'GET', f'{self._base_url}/test_endpoint', headers={'test_auth': f'test_auth {self._token}'}, params=None) mock_response.json.assert_called_once() @patch('requests.request') def test_failure_get_request(self, mock_request): mock_response = Mock() mock_response.status_code = 404 mock_response.text = 'Not found' mock_request.return_value = mock_response with self.assertRaises(RuntimeError) as context: self._api.get('test_endpoint') self.assertIn('http status 404 calling GET https://test.com/test_endpoint', str(context.exception)) @patch('requests.request') def test_max_retries_exceeded(self, mock_request): mock_response = Mock() mock_response.status_code = 500 mock_response.text = 'Internal Server Error' mock_request.return_value = mock_response with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy, 'get_sleep_intervals', return_value=[0.1, 0.2, 0.3]): with self.assertRaises(RuntimeError) as context: self._api.get('test_endpoint') self.assertIn('Failed to get an API response after maximum retries', str(context.exception)) self.assertEqual(mock_request.call_count, 3) @patch('requests.request') def test_temporary_failure_then_success(self, mock_request): temporary_failure = Mock() temporary_failure.status_code = 500 temporary_failure.text = 'Internal Server Error' sucessful_response = Mock() sucessful_response.status_code = 200 sucessful_response.json.return_value = {'hello': 'world'} mock_request.side_effect = [ temporary_failure, temporary_failure, sucessful_response ] with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy, 'get_sleep_intervals', return_value=[0.1, 0.2, 0.3]): response = self._api.get('test_endpoint') self.assertEqual(response, {'hello': 'world'}) self.assertEqual(mock_request.call_count, 3) ================================================ FILE: gcpdiag/queries/generic_api/api_build/generic_api_stub.py ================================================ # Copyright 2024 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. """Stub API calls used in apis.py for testing.""" import json import os # pylint: disable=unused-argument class GenericApiStub: """Attributes: project_root: data_dir: """ def __init__(self, service_name: str): self.project_root = os.path.abspath( os.path.join(os.path.dirname(__file__), '..', '..', '..', '..')) self.data_dir = os.path.join(self.project_root, 'test-data', service_name, 'json-dumps') def _load_json(self, file_name: str) -> dict: file_path = os.path.join(self.data_dir, file_name) file_path = str(file_path + '.json') if not os.path.exists(file_path): raise FileNotFoundError('file not found: %s' % file_path) with open(file_path, encoding='utf-8') as file: return json.load(file) def get_generic_api_stub(service_name: str, api_base_url: str): # Avoid circular import dependencies by importing the required modules here. # pylint: disable=import-outside-toplevel if service_name == 'datafusion': from gcpdiag.queries.generic_api.datafusion import datafusion_stub return datafusion_stub.DataFusionApiStub() else: raise ValueError('unsupported endpoint: %s' % service_name) ================================================ FILE: gcpdiag/queries/generic_api/api_build/get_generic.py ================================================ """ Helper method to initialize API object """ from gcpdiag import caching, config from gcpdiag.async_queries.api import (default_random, exponential_random_retry_strategy, gcpdiag_creds) from gcpdiag.queries.generic_api.api_build import api, service_factory def pick_creds_implementation() -> api.Creds: try: # This is for Google-internal use only and allows us to modify the request # to make it work also internally. The import will fail for the public # version of gcpdiag. # pylint: disable=import-outside-toplevel from gcpdiag_google_internal import async_api_creds_internal return async_api_creds_internal.GcpdiagInternalCreds() except ImportError: return gcpdiag_creds.GcpdiagCreds() @caching.cached_api_call(in_memory=True) def get_generic_api(service_name: str, api_base_url: str) -> api.API: """Args: api_base_url: version: Returns: """ return service_factory.build_api( service_name, api_base_url, creds=pick_creds_implementation(), retry_strategy=exponential_random_retry_strategy. ExponentialRandomTimeoutRetryStrategy( retries=config.API_RETRIES, random_pct=config.API_RETRY_SLEEP_RANDOMNESS_PCT, multiplier=config.API_RETRY_SLEEP_MULTIPLIER, random=default_random.Random(), ), ) ================================================ FILE: gcpdiag/queries/generic_api/api_build/service_factory.py ================================================ """Helper functions to create service objects for the API.""" from gcpdiag.queries.generic_api.api_build import api def build_api(service_name: str, api_base_url: str, creds: api.Creds, retry_strategy: api.RetryStrategy) -> object: """Builds a service object for the given service name.""" # Avoid circular import dependencies by importing the required modules here. # pylint: disable=import-outside-toplevel if service_name == "datafusion": from gcpdiag.queries.generic_api.datafusion import datafusion return datafusion.Datafusion(api_base_url, creds=creds, retry_strategy=retry_strategy) else: raise ValueError(f"Unknown service name: {service_name}") ================================================ FILE: gcpdiag/queries/generic_api/datafusion/__init__.py ================================================ ================================================ FILE: gcpdiag/queries/generic_api/datafusion/datafusion.py ================================================ """Gateway for Datafusion service""" from gcpdiag.queries.generic_api.api_build import api class Datafusion(api.API): """Gateway for Datafusion service""" def __init__(self, base_url: str, creds: api.Creds, retry_strategy: api.RetryStrategy) -> None: super().__init__(base_url, creds, retry_strategy) def get_system_profiles(self): endpoint = 'v3/profiles' return self.get(endpoint) def get_all_namespaces(self): endpoint = 'v3/namespaces' return self.get(endpoint) def get_user_profiles(self, namespace: str): endpoint = f'v3/namespaces/{namespace}/profiles' return self.get(endpoint) def get_system_preferences(self): endpoint = 'v3/preferences/' return self.get(endpoint) def get_namespace_preferences(self, namespace: str): endpoint = f'v3/namespaces/{namespace}/preferences' return self.get(endpoint) def get_all_applications(self, namespace: str): endpoint = f'v3/namespaces/{namespace}/apps' return self.get(endpoint) def get_application_preferences(self, namespace: str, application_name: str): endpoint = f'v3/namespaces/{namespace}/apps/{application_name}/preferences' return self.get(endpoint) ================================================ FILE: gcpdiag/queries/generic_api/datafusion/datafusion_stub.py ================================================ """Stub for Data Fusion API.""" from gcpdiag.queries.generic_api.api_build.generic_api_stub import \ GenericApiStub class DataFusionApiStub(GenericApiStub): """Stub for Data Fusion API.""" def __init__(self): super().__init__('datafusion1') def get_system_profiles(self): return self._load_json('datafusion-system-compute-profile') def get_all_namespaces(self): return self._load_json('namespaces') def get_user_profiles(self, namespace: str): return self._load_json(f'datafusion-{namespace}-user-compute-profile') def get_system_preferences(self): return self._load_json('datafusion-system-preferences') def get_namespace_preferences(self, namespace: str): return self._load_json(f'datafusion-{namespace}-namespace-preferences') def get_all_applications(self, namespace: str): return self._load_json(f'datafusion-{namespace}-applications') def get_application_preferences(self, namespace: str, application_name: str): return self._load_json( f'datafusion-{namespace}-application-{application_name}-preferences') ================================================ FILE: gcpdiag/queries/generic_api/datafusion/datafusion_test.py ================================================ """ Tests for datafusion API python -m unittest gcpdiag.queries.generic_api.datafusion.datafusion_test """ import unittest from typing import Dict from unittest.mock import Mock, patch import requests from gcpdiag.async_queries.api import constant_time_retry_strategy from gcpdiag.queries.generic_api.datafusion import datafusion class FakeCreds: _token: str def __init__(self, token: str) -> None: self._token = token def update_headers(self, headers: Dict[str, str]) -> None: headers['test_auth'] = f'test_auth {self._token}' class TestDatafusion(unittest.TestCase): """ Tests for API call """ def setUp(self): self._token = 'fake token' self._base_url = 'https://datafusion.googleusercontent.com' self._api = datafusion.Datafusion( self._base_url, creds=FakeCreds(self._token), retry_strategy=constant_time_retry_strategy. ConstantTimeoutRetryStrategy(timeout=42, retries=3)) @patch('requests.request') def test_get_system_profiles_success(self, mock_request): mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'profile': {}} mock_request.return_value = mock_response response = self._api.get_system_profiles() self.assertEqual(response, {'profile': {}}) mock_request.assert_called_once_with( 'GET', f'{self._base_url}/v3/profiles', headers={'test_auth': f'test_auth {self._token}'}, params=None) mock_response.json.assert_called_once() @patch('requests.request') def test_get_all_namespaces(self, mock_request): mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'namespaces': []} mock_request.return_value = mock_response response = self._api.get_all_namespaces() self.assertEqual(response, {'namespaces': []}) mock_request.assert_called_once_with( 'GET', f'{self._base_url}/v3/namespaces', headers={'test_auth': f'test_auth {self._token}'}, params=None) mock_response.json.assert_called_once() @patch('requests.request') def test_get_user_profiles(self, mock_request): mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'userProfiles': []} mock_request.return_value = mock_response response = self._api.get_user_profiles(namespace='test-namespace') self.assertEqual(response, {'userProfiles': []}) mock_request.assert_called_once_with( 'GET', f'{self._base_url}/v3/namespaces/test-namespace/profiles', headers={'test_auth': f'test_auth {self._token}'}, params=None) mock_response.json.assert_called_once() @patch('requests.request') def test_get_system_profiles_failure(self, mock_request): mock_request.side_effect = requests.exceptions.RequestException( 'Network error') with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy, 'get_sleep_intervals', return_value=[0.1, 0.2, 0.3]): with self.assertRaises(RuntimeError) as context: self._api.get('test_endpoint') self.assertIn('Failed to get an API response after maximum retries', str(context.exception)) self.assertEqual(mock_request.call_count, 3) @patch('requests.request') def test_get_user_profiles_temporary_failure_then_success(self, mock_request): temporary_failure = Mock() temporary_failure.status_code = 500 temporary_failure.text = 'Internal Server Error' sucessful_response = Mock() sucessful_response.status_code = 200 sucessful_response.json.return_value = {'userProfiles': []} mock_request.side_effect = [ temporary_failure, temporary_failure, sucessful_response ] with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy, 'get_sleep_intervals', return_value=[0.1, 0.2, 0.3]): response = self._api.get_user_profiles(namespace='test-namespace') self.assertEqual(response, {'userProfiles': []}) self.assertEqual(mock_request.call_count, 3) @patch('requests.request') def test_get_all_namespaces_max_retries_exceeded(self, mock_request): mock_response = Mock() mock_response.status_code = 500 mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError( 'Internal Server Error') mock_request.return_value = mock_response with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy, 'get_sleep_intervals', return_value=[0.1, 0.2, 0.3]): with self.assertRaises(RuntimeError) as context: self._api.get_all_namespaces() self.assertIn('Failed to get an API response after maximum retries', str(context.exception)) self.assertEqual(mock_request.call_count, 3) @patch('requests.request') def test_get_user_profiles_failure(self, mock_request): mock_response = Mock() mock_response.status_code = 404 mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError( 'Not Found') mock_request.return_value = mock_response with self.assertRaises(RuntimeError) as context: self._api.get_user_profiles(namespace='test-namespace') self.assertIn( 'http status 404 calling GET https://datafusion.googleusercontent.com/v3/namespaces/test-namespace/profiles', # pylint: disable=line-too-long str(context.exception)) self.assertEqual(mock_request.call_count, 1) @patch('requests.request') def test_get_all_applications(self, mock_request): mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'apps': []} mock_request.return_value = mock_response response = self._api.get_all_applications(namespace='test-namespace') self.assertEqual(response, {'apps': []}) @patch('requests.request') def test_get_application_preferences(self, mock_request): mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'preferences': {}} mock_request.return_value = mock_response response = self._api.get_application_preferences( namespace='test-namespace', application_name='test-application') self.assertEqual(response, {'preferences': {}}) @patch('requests.request') def test_get_application_preferences_failure(self, mock_request): mock_response = Mock() mock_response.status_code = 404 mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError( 'Not Found') mock_request.return_value = mock_response with self.assertRaises(RuntimeError) as context: self._api.get_application_preferences(namespace='test-namespace', application_name='test-application') self.assertIn( 'http status 404 calling GET https://datafusion.googleusercontent.com/v3/namespaces/test-namespace/apps/test-application/preferences', # pylint: disable=line-too-long str(context.exception)) self.assertEqual(mock_request.call_count, 1) @patch('requests.request') def test_get_system_preferences(self, mock_request): mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'preferences': {}} mock_request.return_value = mock_response response = self._api.get_system_preferences() self.assertEqual(response, {'preferences': {}}) @patch('requests.request') def test_get_namespace_preferences(self, mock_request): mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'preferences': {}} mock_request.return_value = mock_response response = self._api.get_namespace_preferences(namespace='test-namespace') self.assertEqual(response, {'preferences': {}}) ================================================ FILE: gcpdiag/queries/gke.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP Kubernetes Engine clusters.""" import datetime import functools import ipaddress import logging import re from typing import Dict, Iterable, List, Mapping, Optional, Union import bs4 import googleapiclient.errors import requests from boltons.iterutils import get_path from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, crm, gce, network, web from gcpdiag.utils import Version # To avoid name conflict with L342 # pylint: disable=invalid-name IPv4NetOrIPv6Net = network.IPv4NetOrIPv6Net DEFAULT_MAX_PODS_PER_NODE = 110 class NodeConfig: """Represents a GKE node pool configuration.""" def __init__(self, resource_data): self._resource_data = resource_data def has_accelerators(self) -> bool: if 'accelerators' in self._resource_data: return True return False @property def machine_type(self) -> str: return self._resource_data['machineType'] @property def image_type(self) -> str: return self._resource_data['imageType'] @property def oauth_scopes(self) -> list: return self._resource_data['oauthScopes'] @property def has_serial_port_logging_enabled(self) -> bool: """ Check if serial port logging is enabled in the node config. Returns: bool: True if serial port logging is enabled or not explicitly disabled. False if explicitly disabled. """ metadata = self._resource_data.get('metadata', {}) return metadata.get('serial-port-logging-enable', 'true').lower() == 'true' class NodePool(models.Resource): """Represents a GKE node pool.""" version: Version def __init__(self, cluster, resource_data): super().__init__(project_id=cluster.project_id) self._cluster = cluster self._resource_data = resource_data self.version = Version(self._resource_data['version']) self._migs = None def _get_service_account(self) -> str: return self._resource_data.get('config', {}).get('serviceAccount', None) @property def full_path(self) -> str: # https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/ # locations/europe-west1/clusters/gke2/nodePools/default-pool m = re.match(r'https://container.googleapis.com/v1/(.*)', self._resource_data.get('selfLink', '')) if not m: raise RuntimeError('can\'t parse selfLink of nodepool resource') return m.group(1) @property def short_path(self) -> str: path = self.full_path path = re.sub(r'^projects/', '', path) path = re.sub(r'/locations/', '/', path) path = re.sub(r'/zones/', '/', path) path = re.sub(r'/clusters/', '/', path) path = re.sub(r'/nodePools/', '/', path) return path @property def name(self) -> str: return self._resource_data['name'] @property def config(self) -> NodeConfig: return NodeConfig(self._resource_data['config']) @property def node_count(self) -> int: return self._resource_data.get('initialNodeCount', 0) def has_default_service_account(self) -> bool: sa = self._get_service_account() return sa == 'default' def has_image_streaming_enabled(self) -> bool: return get_path(self._resource_data, ('config', 'gcfsConfig', 'enabled'), default=False) def has_md_concealment_enabled(self) -> bool: # Empty ({}) workloadMetadataConfig means that 'Metadata concealment' # (predecessor of Workload Identity) is enabled. # https://cloud.google.com/kubernetes-engine/docs/how-to/protecting-cluster-metadata#concealment return get_path(self._resource_data, ('config', 'workloadMetadataConfig'), default=None) == {} def has_workload_identity_enabled(self) -> bool: # 'Metadata concealment' (workloadMetadataConfig == {}) doesn't protect the # default SA's token return bool( get_path(self._resource_data, ('config', 'workloadMetadataConfig'), default=None)) @property def service_account(self) -> str: sa = self._get_service_account() if sa == 'default': project_nr = crm.get_project(self.project_id).number return f'{project_nr}-compute@developer.gserviceaccount.com' else: return sa @property def pod_ipv4_cidr_size(self) -> int: return self._resource_data['podIpv4CidrSize'] @property def pod_ipv4_cidr_block(self) -> Optional[IPv4NetOrIPv6Net]: # Get the pod cidr range in use by the nodepool pod_cidr = get_path(self._resource_data, ('networkConfig', 'podIpv4CidrBlock'), default=None) if pod_cidr: return ipaddress.ip_network(pod_cidr) else: return None @property def max_pod_per_node(self) -> int: return int( get_path(self._resource_data, ('maxPodsConstraint', 'maxPodsPerNode'), default=DEFAULT_MAX_PODS_PER_NODE)) @property def cluster(self) -> 'Cluster': return self._cluster @property def instance_groups(self) -> List[gce.ManagedInstanceGroup]: if self._migs is None: project_migs_by_selflink = {} for m in gce.get_managed_instance_groups( models.Context(project_id=self.project_id)).values(): project_migs_by_selflink[m.self_link] = m self._migs = [] for url in self._resource_data.get('instanceGroupUrls', []): try: self._migs.append(project_migs_by_selflink[url]) except KeyError: continue return self._migs @property def node_tags(self) -> List[str]: """Returns the firewall tags used for nodes in this cluster. If the node tags can't be determined, [] is returned. """ migs = self.instance_groups if not migs: return [] return migs[0].template.tags def get_machine_type(self) -> str: """Returns the machine type of the nodepool nodes""" return self.config.machine_type class UndefinedClusterPropertyError(Exception): """Thrown when a property of a cluster can't be determined for some reason. For example, the cluster_hash can't be determined because there are no nodepools defined.""" pass class Cluster(models.Resource): """Represents a GKE cluster. https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters#Cluster """ _resource_data: dict master_version: Version _context: models.Context _nodepools: Optional[List[NodePool]] def __init__(self, project_id, resource_data, context: models.Context): super().__init__(project_id=project_id) self._resource_data = resource_data self.master_version = Version(self._resource_data['currentMasterVersion']) self._nodepools = None self._context = context @property def full_path(self) -> str: if utils.is_region(self._resource_data['location']): return (f'projects/{self.project_id}/' f'locations/{self.location}/clusters/{self.name}') else: return (f'projects/{self.project_id}/' f'zones/{self.location}/clusters/{self.name}') @property def short_path(self) -> str: path = self.full_path path = re.sub(r'^projects/', '', path) path = re.sub(r'/locations/', '/', path) path = re.sub(r'/zones/', '/', path) path = re.sub(r'/clusters/', '/', path) return path @property def name(self) -> str: return self._resource_data['name'] @property def location(self) -> str: return self._resource_data['location'] @property def pod_ipv4_cidr(self) -> IPv4NetOrIPv6Net: cidr = self._resource_data['clusterIpv4Cidr'] return ipaddress.ip_network(cidr) @property def current_node_count(self) -> int: return self._resource_data.get('currentNodeCount', 0) @property def release_channel(self) -> Optional[str]: try: return self._resource_data['releaseChannel']['channel'] except KeyError: return None @property def nap_node_image_type(self) -> Optional[str]: return get_path( self._resource_data, ('autoscaling', 'autoprovisioningNodePoolDefaults', 'imageType'), default=None) @property def app_layer_sec_key(self) -> str: return self._resource_data['databaseEncryption'].get('keyName') @property def status(self) -> str: return self._resource_data['status'] @property def status_message(self) -> str: return self._resource_data.get('statusMessage', None) def has_app_layer_enc_enabled(self) -> bool: # state := 'DECRYPTED' | 'ENCRYPTED', keyName := 'full_path_to_key_resouce' return get_path(self._resource_data, ('databaseEncryption', 'state'), default=None) == 'ENCRYPTED' def has_logging_enabled(self) -> bool: return self._resource_data['loggingService'] != 'none' def enabled_logging_components(self) -> List[str]: return self._resource_data['loggingConfig']['componentConfig'][ 'enableComponents'] def has_monitoring_enabled(self) -> bool: return self._resource_data['monitoringService'] != 'none' def enabled_monitoring_components(self) -> List[str]: return self._resource_data['monitoringConfig']['componentConfig'][ 'enableComponents'] def has_authenticator_group_enabled(self) -> bool: return len(self._resource_data.get('authenticatorGroupsConfig', {})) > 0 def has_workload_identity_enabled(self) -> bool: return len(self._resource_data.get('workloadIdentityConfig', {})) > 0 def has_http_load_balancing_enabled(self) -> bool: # HTTP load balancing needs to be enabled to use GKE ingress return not (get_path(self._resource_data, ('addonsConfig', 'httpLoadBalancing', 'disabled'), default=None) is True) def has_network_policy_enabled(self) -> bool: # Network policy enforcement return get_path(self._resource_data, ('addonsConfig', 'networkPolicyConfig', 'disabled'), default=False) is not True def has_dpv2_enabled(self) -> bool: # Checks whether dataplane V2 is enabled in clusters return (get_path(self._resource_data, ('networkConfig', 'datapathProvider'), default=None) == 'ADVANCED_DATAPATH') def has_intra_node_visibility_enabled(self) -> bool: if ('networkConfig' in self._resource_data and 'enableIntraNodeVisibility' in self._resource_data['networkConfig']): return self._resource_data['networkConfig']['enableIntraNodeVisibility'] return False def has_maintenance_window(self) -> bool: # 'e3b0c442' is a hexadecimal string that represents the value of an empty # string ('') in cryptography. If the maintenance windows are defined, the # value of 'resourceVersion' is not empty ('e3b0c442'). return self._resource_data['maintenancePolicy'][ 'resourceVersion'] != 'e3b0c442' def has_image_streaming_enabled(self) -> bool: """ Check if cluster has Image Streaming (aka Google Container File System) enabled """ global_gcsfs = get_path( self._resource_data, ('nodePoolDefaults', 'nodeConfigDefaults', 'gcfsConfig', 'enabled'), default=False) # Check nodePoolDefaults settings if global_gcsfs: return True for np in self.nodepools: # Check if any nodepool has image streaming enabled if np.has_image_streaming_enabled(): return True return False @property def nodepools(self) -> List[NodePool]: if self._nodepools is None: self._nodepools = [] for n in self._resource_data.get('nodePools', []): self._nodepools.append(NodePool(self, n)) return self._nodepools @property def network(self) -> network.Network: # projects/gcpdiag-gke1-aaaa/global/networks/default network_string = self._resource_data['networkConfig']['network'] m = re.match(r'projects/([^/]+)/global/networks/([^/]+)$', network_string) if not m: raise RuntimeError("can't parse network string: %s" % network_string) return network.get_network(m.group(1), m.group(2), self._context) @property def subnetwork(self) -> Optional[models.Resource]: # 'projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default' if 'subnetwork' not in self._resource_data['networkConfig']: return None subnetwork_string = self._resource_data['networkConfig']['subnetwork'] m = re.match(r'projects/([^/]+)/regions/([^/]+)/subnetworks/([^/]+)$', subnetwork_string) if not m: raise RuntimeError("can't parse network string: %s" % subnetwork_string) return network.get_subnetwork(m.group(1), m.group(2), m.group(3)) @property def get_subnet_name(self) -> Optional[models.Resource]: if 'subnetwork' not in self._resource_data: return None return self._resource_data['subnetwork'] @property def get_nodepool_config(self) -> Optional[models.Resource]: if 'nodePools' not in self._resource_data: return None return self._resource_data['nodePools'] @property def get_network_string(self) -> str: if 'networkConfig' not in self._resource_data: return '' if 'network' not in self._resource_data['networkConfig']: return '' return self._resource_data['networkConfig']['network'] @property def is_private(self) -> bool: if not 'privateClusterConfig' in self._resource_data: return False return self._resource_data['privateClusterConfig'].get( 'enablePrivateNodes', False) @property def is_vpc_native(self) -> bool: return (get_path(self._resource_data, ('ipAllocationPolicy', 'useIpAliases'), default=False)) @property def is_regional(self) -> bool: return len(self._resource_data['locations']) > 1 @property def cluster_ca_certificate(self) -> str: return self._resource_data['masterAuth']['clusterCaCertificate'] @property def endpoint(self) -> Optional[str]: if 'endpoint' not in self._resource_data: return None return self._resource_data['endpoint'] @property def is_autopilot(self) -> bool: if not 'autopilot' in self._resource_data: return False return self._resource_data['autopilot'].get('enabled', False) @property def masters_cidr_list(self) -> Iterable[IPv4NetOrIPv6Net]: if get_path(self._resource_data, ('privateClusterConfig', 'masterIpv4CidrBlock'), default=None): return [ ipaddress.ip_network(self._resource_data['privateClusterConfig'] ['masterIpv4CidrBlock']) ] else: #only older clusters still have ssh firewall rules if self.current_node_count and not self.cluster_hash: logging.warning("couldn't retrieve cluster hash for cluster %s.", self.name) return [] fw_rule_name = f'gke-{self.name}-{self.cluster_hash}-ssh' rule = self.network.firewall.get_vpc_ingress_rules(name=fw_rule_name) if rule and rule[0].is_enabled(): return rule[0].source_ranges return [] @property def cluster_hash(self) -> Optional[str]: """Returns the "cluster hash" as used in automatic firewall rules for GKE clusters. Cluster hash is the first 8 characters of cluster id. See also: https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules """ if 'id' in self._resource_data: return self._resource_data['id'][:8] raise UndefinedClusterPropertyError('no id') @property def is_nodelocal_dnscache_enabled(self) -> bool: """Returns True if NodeLocal DNSCache is enabled for the cluster.""" addons_config = self._resource_data.get('addonsConfig', {}) dns_cache_config = addons_config.get('dnsCacheConfig', {}) return dns_cache_config.get('enabled', False) @caching.cached_api_call def get_clusters(context: models.Context) -> Mapping[str, Cluster]: """Get a list of Cluster matching the given context, indexed by cluster full path.""" clusters: Dict[str, Cluster] = {} if not apis.is_enabled(context.project_id, 'container'): return clusters container_api = apis.get_api('container', 'v1', context.project_id) logging.debug('fetching list of GKE clusters in project %s', context.project_id) query = container_api.projects().locations().clusters().list( parent=f'projects/{context.project_id}/locations/-') try: resp = query.execute(num_retries=config.API_RETRIES) if 'clusters' not in resp: return clusters for resp_c in resp['clusters']: # verify that we some minimal data that we expect if 'name' not in resp_c or 'location' not in resp_c: raise RuntimeError( 'missing data in projects.locations.clusters.list response') if not context.match_project_resource(location=resp_c.get('location', ''), labels=resp_c.get( 'resourceLabels', {}), resource=resp_c.get('name', '')): continue c = Cluster(project_id=context.project_id, resource_data=resp_c, context=context) clusters[c.full_path] = c except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return clusters @caching.cached_api_call def get_cluster( project_id, cluster_id, location, ) -> Union[Cluster, None]: """Get a Cluster from project_id of a context.""" if not apis.is_enabled(project_id, 'container'): return None container_api = apis.get_api('container', 'v1', project_id) logging.debug('fetching the GKE cluster %s in project %s', cluster_id, project_id) query = container_api.projects().locations().clusters().get( name=f'projects/{project_id}/locations/{location}/clusters/{cluster_id}') try: resp = query.execute(num_retries=config.API_RETRIES) if cluster_id not in str(resp): raise RuntimeError( 'missing data in projects.locations.clusters.list response') except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return Cluster(project_id=project_id, resource_data=resp, context=models.Context(project_id=project_id)) @caching.cached_api_call def _get_server_config(project_id: str, location: str): container_api = apis.get_api('container', 'v1', project_id) name = f'projects/{project_id}/locations/{location}' request = container_api.projects().locations().getServerConfig(name=name) try: resp = request.execute(num_retries=config.API_RETRIES) return resp except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err def get_valid_master_versions(project_id: str, location: str) -> List[str]: """Get a list of valid GKE master versions.""" server_config = _get_server_config(project_id, location) versions: List[str] = [] # channel versions may extend the list of all available versions.\ # Especially for the Rapid channel - many new versions only available in Rapid # channel and not as a static version to make sure nobody stuck on that # version for an extended period of time. for c in server_config['channels']: versions += c['validVersions'] versions += server_config['validMasterVersions'] return versions def get_valid_node_versions(project_id: str, location: str) -> List[str]: """Get a list of valid GKE master versions.""" server_config = _get_server_config(project_id, location) versions: List[str] = [] # See explanation in get_valid_master_versions for c in server_config['channels']: versions += c['validVersions'] versions += server_config['validNodeVersions'] return versions class Node(models.Resource): """Represents a GKE node. This class useful for example to determine the GKE cluster when you only have an GCE instance id (like from a metrics label). """ instance: gce.Instance nodepool: NodePool mig: gce.ManagedInstanceGroup def __init__(self, instance, nodepool, mig): super().__init__(project_id=instance.project_id) self.instance = instance self.nodepool = nodepool self.mig = mig pass @property def full_path(self) -> str: return self.nodepool.cluster.full_path + '/nodes/' + self.instance.name @property def short_path(self) -> str: #return self.nodepool.cluster.short_path + '/' + self.instance.name return self.instance.short_path # Note: we don't use caching.cached_api_call here to avoid the locking # overhead. which is not required because all API calls are wrapper already # around caching.cached_api_call. @functools.lru_cache() def get_node_by_instance_id(context: models.Context, instance_id: str) -> Node: """Get a gke.Node instance by instance id. Throws a KeyError in case this instance is not found or isn't part of a GKE cluster. """ # This will throw a KeyError if the instance is not found, which is also # the behavior that we want for this function. instance = gce.get_instances(context)[instance_id] clusters = get_clusters(context) try: # instance.mig throws AttributeError if it isn't part of a mig mig = instance.mig # find a NodePool that uses this MIG for c in clusters.values(): for np in c.nodepools: for np_mig in np.instance_groups: if mig == np_mig: return Node(instance=instance, nodepool=np, mig=mig) # if we didn't find a nodepool that owns this instance, raise a KeyError raise KeyError('can\'t determine GKE cluster for instance %s' % (instance_id)) except AttributeError as err: raise KeyError from err return None @caching.cached_api_call def get_release_schedule() -> Dict: """Extract the release schedule for gke clusters Returns: A dictionary of release schedule. """ page_url = 'https://cloud.google.com/kubernetes-engine/docs/release-schedule' release_data = {} # estimate first month of the quarter quarter_dates = {'Q1': '1', 'Q2': '4', 'Q3': '7', 'Q4': '10'} try: table = web.fetch_and_extract_table(page_url, tag='table', class_name='gke-release-schedule') # Function to parse a date string or return None for 'N/A' def parse_date(date_str) -> Optional[datetime.date]: p = r'(?P\d{4})-(?:(?PQ[1-4])|(?P[0-9]{1,2}))(?:-(?P[0-9]{1,2}))?' match = re.search(p, date_str) # Handle incomplete dates in 'YYYY-MM' form if match and match.group('month') and not match.group('day'): return datetime.date.fromisoformat(f'{date_str}-15') # Handle quarter year (for example, 2025-Q3) approximations that are updated when known. # https://cloud.google.com/kubernetes-engine/docs/release-schedule.md#fn6 if match and match.group('quarter') and not match.group('day'): date_str = f"{match.group('year')}-{quarter_dates[match.group('quarter')]}-01" return datetime.date.fromisoformat(date_str) if match and match.group('year') and match.group('month') and match.group( 'day'): return datetime.date.fromisoformat(date_str) # anything less like N/A return None return None def find_date_str_in_td(e): """recursively find a date string in a td""" if isinstance(e, str): return e if isinstance(e, bs4.element.Tag): return find_date_str_in_td(e.next) return None # Find all table rows within tbody rows = table.find('tbody').find_all('tr') # Iterate over each row and extract the data for row in rows: # Extract all the columns (td elements) cols = row.find_all('td') # Extract relevant data minor_version = cols[0].next.strip() rapid_avail = parse_date(find_date_str_in_td(cols[1].next)) regular_avail = parse_date(find_date_str_in_td(cols[3].next)) stable_avail = parse_date(find_date_str_in_td(cols[5].next)) extended_avail = parse_date(find_date_str_in_td(cols[7].next)) end_of_standard_support = parse_date(find_date_str_in_td(cols[9].next)) # Add the extracted data into the dictionary in the desired format release_data[minor_version] = { 'rapid_avail': rapid_avail, 'regular_avail': regular_avail, 'stable_avail': stable_avail, 'extended_avail': extended_avail, 'eol': end_of_standard_support, } return release_data except ( requests.exceptions.RequestException, AttributeError, TypeError, ValueError, IndexError, ) as e: logging.error('Error in extracting gke release schedule: %s', e) return release_data ================================================ FILE: gcpdiag/queries/gke_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in gke.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag import utils from gcpdiag.queries import apis_stub # pylint: disable=unused-argument class ContainerApiStub(apis_stub.ApiStub): """Mock object to simulate container api calls.""" def __init__(self, mock_state='init', region=None): self.mock_state = mock_state self.region = region def projects(self): return self def locations(self): return self def clusters(self): return self # pylint: disable=invalid-name def getServerConfig(self, name): project_id = utils.get_project_by_res_name(name) region = utils.get_region_by_res_name(name) return apis_stub.RestCallStub(project_id, f'container-server-config-{region}') def list(self, parent): m = re.match(r'projects/([^/]+)/', parent) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'container-clusters') def get(self, name): m = re.match(r'projects/([^/]+)/locations/([^/]+)/clusters/([^/]+)', name) project_id = m.group(1) cluster = m.group(3) return apis_stub.RestCallStub(project_id, f'container-cluster-{cluster}') ================================================ FILE: gcpdiag/queries/gke_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in gke.py.""" import ipaddress import re import unittest from unittest import mock import pytest from gcpdiag import models from gcpdiag.queries import apis_stub, gce, gke from gcpdiag.queries.gke import Version DUMMY_PROJECT_NAME = 'gcpdiag-gke1-aaaa' DUMMY_CLUSTER1_NAME = f'projects/{DUMMY_PROJECT_NAME}/zones/europe-west4-a/clusters/gke1' DUMMY_CLUSTER1_LABELS = {'foo': 'bar'} DUMMY_CLUSTER2_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/europe-west4/clusters/gke2' DUMMY_CLUSTER2_SHORT_NAME = f'{DUMMY_PROJECT_NAME}/europe-west4/gke2' DUMMY_CLUSTER1_SERVICE_ACCOUNT = '12340002-compute@developer.gserviceaccount.com' DUMMY_CLUSTER2_SERVICE_ACCOUNT = 'gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com' DUMMY_CLUSTER3_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/europe-west4/clusters/gke3' DUMMY_CLUSTER4_NAME = f'projects/{DUMMY_PROJECT_NAME}/zones/europe-west4-a/clusters/gke4' DUMMY_CLUSTER6_NAME = f'projects/{DUMMY_PROJECT_NAME}/zones/europe-west4-a/clusters/gke6' DUMMY_AUTOPILOT_CLUSTER1_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/europe-west4/clusters/autopilot-gke1' # pylint: disable=C0301 DUMMY_DEFAULT_NAME = 'default' # pylint: disable=consider-iterating-dictionary @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestCluster(unittest.TestCase): """Test gke.Cluster.""" def test_get_clusters_by_label(self): """get_clusters returns the right cluster matched by label.""" context = models.Context(project_id=DUMMY_PROJECT_NAME, labels=DUMMY_CLUSTER1_LABELS) clusters = gke.get_clusters(context) assert DUMMY_CLUSTER1_NAME in clusters and len(clusters) == 1 def test_get_clusters_by_region(self): """get_clusters returns the right cluster matched by region.""" context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=['europe-west4']) clusters = gke.get_clusters(context) assert DUMMY_CLUSTER1_NAME in clusters and len(clusters) == 7 def test_cluster_properties(self): """verify cluster property methods.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert c.name == 'gke1' assert re.match(r'1\.\d+\.\d+-gke\.\d+', str(c.master_version)) assert c.release_channel is None c = clusters[DUMMY_CLUSTER4_NAME] assert c.name == 'gke4' assert c.release_channel == 'REGULAR' def test_get_path_regional(self): """full_path and short_path should return correct results with regional clusters.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) assert DUMMY_CLUSTER2_NAME in clusters.keys() c = clusters[DUMMY_CLUSTER2_NAME] assert c.full_path == DUMMY_CLUSTER2_NAME assert str(c) == DUMMY_CLUSTER2_NAME assert c.short_path == DUMMY_CLUSTER2_SHORT_NAME def test_has_logging_enabled_false(self): """has_logging_enabled should return false for GKE cluster with logging disabled.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) assert DUMMY_CLUSTER1_NAME in clusters.keys() c = clusters[DUMMY_CLUSTER1_NAME] assert not c.has_logging_enabled() def test_has_logging_enabled_true(self): """has_logging_enabled should return true for GKE cluster with logging enabled.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) assert DUMMY_CLUSTER2_NAME in clusters.keys() c = clusters[DUMMY_CLUSTER2_NAME] assert c.has_logging_enabled() def test_has_monitoring_enabled_false(self): """has_monitoring_enabled should return false for GKE cluster with monitoring disabled.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) assert DUMMY_CLUSTER1_NAME in clusters.keys() c = clusters[DUMMY_CLUSTER1_NAME] assert not c.has_monitoring_enabled() def test_has_monitoring_enabled_true(self): """has_monitoring_enabled should return true for GKE cluster with monitoring enabled.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) assert DUMMY_CLUSTER2_NAME in clusters.keys() c = clusters[DUMMY_CLUSTER2_NAME] assert c.has_monitoring_enabled() def test_has_authenticator_group_enabled(self): """""has_authenticator_group_enabled should return true for GKE cluster with Groups for RBAC enabled.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) assert DUMMY_CLUSTER3_NAME in clusters.keys() assert DUMMY_CLUSTER4_NAME in clusters.keys() c = clusters[DUMMY_CLUSTER3_NAME] assert c.has_authenticator_group_enabled() c = clusters[DUMMY_CLUSTER4_NAME] assert not c.has_authenticator_group_enabled() def test_cluster_has_workload_identity_enabled(self): """has_workload_identity_enabled should return true for GKE cluster with workload identity enabled.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert not c.has_workload_identity_enabled() c = clusters[DUMMY_CLUSTER4_NAME] assert c.has_workload_identity_enabled() def test_has_http_load_balancing_enabled(self): """has_http_load_balancing_enabled should return true if the GKE cluster has http load balancing enabled""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert not c.has_http_load_balancing_enabled() c = clusters[DUMMY_CLUSTER4_NAME] assert c.has_http_load_balancing_enabled() def test_has_default_service_account(self): """has_default_service_account should return true for GKE node-pools with the default GCE SA.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) # 'default-pool' has the default SA c = clusters[DUMMY_CLUSTER1_NAME] assert c.nodepools[0].has_default_service_account() # 'default-pool' doesn't have the default SA c = clusters[DUMMY_CLUSTER2_NAME] assert not c.nodepools[0].has_default_service_account() def test_pod_ipv4_cidr(self): """returns correct pod CIDR""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) # cluster 1 c = clusters[DUMMY_CLUSTER1_NAME] assert c.pod_ipv4_cidr.compare_networks( ipaddress.ip_network('192.168.1.0/24')) == 0 # cluster 2 c = clusters[DUMMY_CLUSTER2_NAME] assert c.pod_ipv4_cidr.compare_networks( ipaddress.ip_network('10.4.0.0/14')) == 0 def test_current_node_count(self): """returns correct number of nodes running""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) # cluster 1 c = clusters[DUMMY_CLUSTER1_NAME] assert c.current_node_count == 1 # cluster 2 c = clusters[DUMMY_CLUSTER2_NAME] assert c.current_node_count == 3 def test_np_pod_ipv4_cidr_size(self): """return correct pod CIDR size per allocated to node pool.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) # cluster 1 c = clusters[DUMMY_CLUSTER1_NAME] assert c.nodepools[0].pod_ipv4_cidr_size == 24 def test_np_pod_ipv4_cidr_block(self): """Get the pod cidr range in use by the nodepool.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) #cluster 1 is vpc-native and has a value set for the nodepool cidr block c = clusters[DUMMY_CLUSTER1_NAME] assert c.nodepools[0].pod_ipv4_cidr_block.compare_networks( ipaddress.ip_network('192.168.1.0/24')) == 0 c = clusters[DUMMY_CLUSTER2_NAME] assert c.nodepools[0].pod_ipv4_cidr_block is None def test_has_md_concealment_enabled(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert not c.nodepools[0].has_md_concealment_enabled() def test_has_workload_identity_enabled(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert not c.nodepools[0].has_workload_identity_enabled() def test_has_intra_node_visibility_enabled(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER3_NAME] assert not c.has_intra_node_visibility_enabled() # Abusing an Autopilot cluster here as I cannot recreate the testfiles at the moment c = clusters[DUMMY_AUTOPILOT_CLUSTER1_NAME] assert c.has_intra_node_visibility_enabled() def test_no_accelerators(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert not c.nodepools[0].config.has_accelerators() def test_has_accelerators(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER6_NAME] assert c.nodepools[0].config.has_accelerators() def test_no_maintenance_window(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert not c.has_maintenance_window() def test_maintenance_window(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER6_NAME] assert c.has_maintenance_window() def test_nodepool_instance_groups(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] migs = c.nodepools[0].instance_groups assert len(migs) == 1 m = next(iter(migs)) assert m.is_gke() def test_get_node_by_instance_id(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] migs = c.nodepools[0].instance_groups assert len(migs) == 1 m = next(iter(migs)) found_nodes = 0 for i in gce.get_instances(context).values(): if m.is_instance_member(m.project_id, m.region, i.name): node = gke.get_node_by_instance_id(context, i.id) assert node.mig == m found_nodes += 1 assert found_nodes == 1 def test_service_account_property(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) # 'default-pool' has the default SA c = clusters[DUMMY_CLUSTER1_NAME] assert c.nodepools[0].service_account == DUMMY_CLUSTER1_SERVICE_ACCOUNT # cluster2 has a custom SA c = clusters[DUMMY_CLUSTER2_NAME] assert c.nodepools[0].service_account == DUMMY_CLUSTER2_SERVICE_ACCOUNT def test_masters_cidr_list(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER4_NAME] assert c.masters_cidr_list == [ipaddress.IPv4Network('10.0.1.0/28')] def test_cluster_is_private(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert not c.is_private c = clusters[DUMMY_CLUSTER4_NAME] assert c.is_private def test_cluster_is_vpc_native(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER3_NAME] assert not c.is_vpc_native c = clusters[DUMMY_CLUSTER1_NAME] assert c.is_vpc_native def test_cluster_is_regional(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER4_NAME] assert not c.is_regional c = clusters[DUMMY_CLUSTER2_NAME] assert c.is_regional def test_cluster_ca_certificate(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert c.cluster_ca_certificate == 'REDACTED' def test_cluster_endpoint(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert c.endpoint == '192.168.1.1' def test_node_tag_property(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert [t for t in c.nodepools[0].node_tags if t.startswith('gke-gke1-')] c = clusters[DUMMY_CLUSTER4_NAME] assert [t for t in c.nodepools[0].node_tags if t.endswith('-node')] def test_cluster_hash_property(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER4_NAME] assert re.match('[a-z0-9]+$', c.cluster_hash) def test_verify_firewall_rule_exists(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER4_NAME] assert c.network.firewall.verify_ingress_rule_exists( f'gke-gke4-{c.cluster_hash}-master') assert not c.network.firewall.verify_ingress_rule_exists('foobar') def test_cluster_network_subnetwork(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER4_NAME] assert DUMMY_DEFAULT_NAME == c.network.name assert DUMMY_DEFAULT_NAME == c.subnetwork.name assert c.subnetwork.ip_network == ipaddress.IPv4Network('10.164.0.0/20') def test_cluster_masters_cidr_list(self): # test both public and private clusters, because the code is quite # different for each of them. context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_AUTOPILOT_CLUSTER1_NAME] ips = c.masters_cidr_list assert len(ips) == 3 assert isinstance(ips[0], ipaddress.IPv4Network) assert not ips[0].is_private c = clusters[DUMMY_CLUSTER4_NAME] ips = c.masters_cidr_list assert len(ips) == 1 assert isinstance(ips[0], ipaddress.IPv4Network) assert ips[0].is_private def test_has_network_policy_enabled(self): # test for network policy enabled and disabled context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER1_NAME] assert not c.has_network_policy_enabled() def test_has_dpv2_enabled(self): # test for dpv2 enabled context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c = clusters[DUMMY_CLUSTER2_NAME] assert not c.has_dpv2_enabled() c2 = clusters[DUMMY_AUTOPILOT_CLUSTER1_NAME] assert c2.has_dpv2_enabled() def test_is_nodelocal_dnscache_enabled(self): """Test the is_nodelocal_dnscache_enabled property.""" context = models.Context(project_id=DUMMY_PROJECT_NAME) clusters = gke.get_clusters(context) c1 = clusters[DUMMY_CLUSTER1_NAME] assert c1.is_nodelocal_dnscache_enabled c2 = clusters[DUMMY_CLUSTER2_NAME] assert not c2.is_nodelocal_dnscache_enabled c_autopilot = clusters[DUMMY_AUTOPILOT_CLUSTER1_NAME] assert c_autopilot.is_nodelocal_dnscache_enabled class TestVersion: """ Test GKE Version class """ def test_init(self): Version('1.19.13-gke.701') self.raises('x.19.13-gke.701') self.raises('.19.13-gke.701') self.raises('1.x.13-gke.701') self.raises('1..13-gke.701') self.raises('x') def test_same_major(self): assert Version('1.19.13-gke.701').same_major(Version('1.23.45-six.7')) assert not Version('1.19.13-gke.701').same_major(Version('9.23.45-six.7')) def test_diff_minor(self): assert Version('1.19.13-gke.701').diff_minor(Version('1.23.45-six.7')) == 4 assert Version('1.19.13-gke.701').diff_minor(Version('1.19.45-six.7')) == 0 def test_eq_str(self): assert Version('1.19.13-gke.701') == '1.19.13-gke.701' assert Version('1.19.13-gke.701') != '1.19.13-gke.702' def test_add_str(self): assert 'the version is: ' + Version('1.19.13-gke.701') == \ 'the version is: 1.19.13-gke.701' assert Version('1.19.13-gke.701') + '!' == '1.19.13-gke.701!' with pytest.raises(TypeError): assert Version('1.19.13-gke.701') + 42 with pytest.raises(TypeError): assert 42 + Version('1.19.13-gke.701') with pytest.raises(TypeError): assert Version('1.19.13-gke.701') + Version('1.19.13-gke.701') def test_eq_version(self): assert Version('1.19.13-gke.701') == Version('1.19.13-gke.701') assert Version('1.19.13-gke.701') != Version('1.19.13-gke.702') def test_compare_lt_gt(self): assert Version('1.19.13-gke.701') < Version('2.19.13-gke.701') assert Version('1.19.13-gke.701') < Version('1.20.13-gke.701') assert Version('1.19.13-gke.701') < Version('1.19.14-gke.701') assert Version('1.19') < Version('1.19.13-gke.701') assert Version('1.19.13-gke.701') < Version('1.20') assert Version('1') < Version('1.19.13-gke.701') assert Version('1.19.13-gke.701') < Version('2') assert Version('1') < Version('2') def raises(self, v): with pytest.raises(Exception): Version(v) ================================================ FILE: gcpdiag/queries/iam.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP Identity and Access Management.""" import abc import collections import functools import logging import re from typing import Any, Dict, List, Optional, Tuple, Type import googleapiclient import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, apis_utils, crm class Role(models.Resource): """Represents an IAM role""" def __init__(self, resource_data): try: project_id = utils.get_project_by_res_name(resource_data['name']) except ValueError: project_id = None super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def full_path(self) -> str: return self.name @property def permissions(self) -> List[str]: # roles should usually include one or more permissions return self._resource_data.get('includedPermissions', []) class RoleNotFoundError(Exception): pass # Note: caching is done in get_*_roles because of different caching policies def _fetch_iam_roles(parent: str, api_project_id: str) -> Dict[str, Role]: def _make_role(resource_data: Dict[str, Any]) -> Tuple[str, Role]: resource_name = resource_data['name'] return resource_name, Role(resource_data) logging.info("fetching IAM roles of '%s'", parent) iam_api = apis.get_api('iam', 'v1', api_project_id) if parent.startswith('projects/'): roles_api = iam_api.projects().roles() elif parent.startswith('organizations/'): roles_api = iam_api.organizations().roles() else: roles_api = iam_api.roles() try: res = apis_utils.list_all(roles_api.list(view='FULL', parent=parent), roles_api.list_next, 'roles') except googleapiclient.errors.HttpError as err: logging.error('failed to list roles: %s', err) raise utils.GcpApiError(err) from err return dict(map(_make_role, res)) # Cache both in memory and on disk, so that multiple calls during the same # gcpdiag execution are very quick, but also results are cached on disk # for the next execution. Only caching on disk causes slowness because this method # is called multiple times. @functools.lru_cache() @caching.cached_api_call(expire=config.STATIC_DOCUMENTS_EXPIRY_SECONDS) def _get_predefined_roles(api_project_id: str) -> Dict[str, Role]: return _fetch_iam_roles('', api_project_id) @caching.cached_api_call(expire=config.STATIC_DOCUMENTS_EXPIRY_SECONDS) def _get_predefined_role(name: str, api_project_id: str) -> Role: """Returns a predefined role using roles.get It should only be used if role is internal and cannot be retrieved using roles.list. For all other roles, _get_predefined_roles should be preferred because of caching efficiency """ logging.info("fetching IAM role '%s'", name) iam_api = apis.get_api('iam', 'v1', api_project_id) request = iam_api.roles().get(name=name) try: response = request.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: if err.resp.status == 404: raise RoleNotFoundError(f'unknown role: {name}') from err raise utils.GcpApiError(err) from err return Role(response) @caching.cached_api_call(in_memory=True) def _get_organization_roles(organization_name: str, api_project_id: str) -> Dict[str, Role]: return _fetch_iam_roles(organization_name, api_project_id) @caching.cached_api_call(in_memory=True) def _get_project_roles(project_name: str, api_project_id: str) -> Dict[str, Role]: return _fetch_iam_roles(project_name, api_project_id) @functools.lru_cache() def _get_iam_role(name: str, default_project_id: str) -> Role: m = re.match(r'(.*)(^|/)roles/.*$', name) if not m: raise ValueError(f'invalid role: {name}') parent = m.group(1) if parent == '': parent_roles = _get_predefined_roles(default_project_id) if name in parent_roles: return parent_roles[name] # IAM roles can be marked as internal and won't be returned by `list` # But they are available using `get` method and can be granted or revoked # using gcloud CLI, so using it as a fallback return _get_predefined_role(name, default_project_id) if parent.startswith('projects/'): project_id = utils.get_project_by_res_name(parent) parent_roles = _get_project_roles(parent, project_id) elif parent.startswith('organizations/'): parent_roles = _get_organization_roles(parent, default_project_id) else: raise ValueError(f'invalid role: {name}') if name not in parent_roles: raise RoleNotFoundError(f'unknown role: {name}') return parent_roles[name] class BaseIAMPolicy(models.Resource): """Common class for IAM policies""" _name: str _policy_by_member: Dict[str, Any] @property def full_path(self): return self._name @abc.abstractmethod def _is_resource_permission(self, permission: str) -> bool: """Checks that a permission is applicable to the resource Any role can be assigned on a resource level but only a subset of permissions will be relevant to a resource Irrelevant permissions are ignored in `has_role_permissions` method """ pass def _expand_policy(self, resource_data: Dict[str, Any]) -> Dict[str, Any]: """Groups `getIamPolicy` bindings by member API response contains a list of bindings of a role to members: { "bindings": [ { "role": "roles/resourcemanager.organizationAdmin", "members": [ "user:mike@example.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, ... } This method will convert those bindings into the following structure: { "user:mike@example.com": { "roles": { "roles/resourcemanager.organizationAdmin" }, }, "serviceAccount:my-project-id@appspot.gserviceaccount.com": { "roles": { "roles/resourcemanager.organizationAdmin" }, }, } """ policy_roles = set() policy_by_member: Dict[str, Any] = collections.defaultdict(dict) # Empty lists are omitted in GCP API responses for binding in resource_data.get('bindings', []): if 'condition' in binding: logging.warning( 'IAM binding contains a condition, which would be ignored: %s', binding, ) # IAM binding should always have a role and at least one member policy_roles.add(binding['role']) for member in binding['members']: member_policy = policy_by_member[member] member_policy.setdefault('roles', set()).add(binding['role']) # Populate cache for IAM roles used in the policy # Unlike `has_role_permissions` this part will be executed inside # `prefetch_rule` and will benefit from multi-threading execution for role in policy_roles: # Ignore all errors - there could be no rules involving this role try: _get_iam_role(role, self.project_id) except (RoleNotFoundError, utils.GcpApiError) as err: # Ignore roles if cannot retrieve a role # For example, due to lack of permissions if isinstance(err, utils.GcpApiError): logging.error('API failure getting IAM roles: %s', err) raise utils.GcpApiError(err) from err elif isinstance(err, RoleNotFoundError): logging.warning("Unable to get IAM role '%s', ignoring: %s", role, err) # Populate cache for service accounts used in the policy # Note: not implemented as a generator expression because # it looks ugly without assignment expressions, available # only with Python >= 3.8. sa_emails = set() for member in policy_by_member.keys(): # Note: not matching / makes sure that we don't match for example fleet # workload identities: # https://cloud.google.com/anthos/multicluster-management/fleets/workload-identity m = re.match(r'serviceAccount:([^/]+)$', member) if m: sa_emails.add(m.group(1)) _batch_fetch_service_accounts(list(sa_emails), self.context) return policy_by_member def _expand_member_policy(self, member: str): """Expands member roles into set of permissions Permissions are using "lazy" initialization and only expanded if needed """ member_policy = self._policy_by_member.get(member) if not member_policy or 'permissions' in member_policy: return permissions = set() for role in member_policy['roles']: try: permissions.update(_get_iam_role(role, self.project_id).permissions) except (RoleNotFoundError, utils.GcpApiError) as err: if isinstance(err, utils.GcpApiError): logging.error('API failure getting IAM roles: %s', err) raise utils.GcpApiError(err) from err elif isinstance(err, RoleNotFoundError): logging.warning("Unable to find IAM role '%s', ignoring: %s", role, err) member_policy['permissions'] = permissions def _is_active_member(self, member: str) -> bool: """Checks that the member isn't disabled Currently supports only service accounts and not other account types Used in `has_role_permissions` and similar methods to ensure that the member isn't disabled and permissions are effectively working """ # If this is a service account, make sure that the service account is enabled. # Note: not matching / makes sure that we don't match for example fleet # workload identities: # https://cloud.google.com/anthos/multicluster-management/fleets/workload-identity m = re.match(r'serviceAccount:([^/]+)$', member) if m: if not is_service_account_enabled(m.group(1), self.context): logging.info('service account %s is disabled', m.group(1)) return False return True def __init__(self, project_id: Optional[str], name: str, resource_data: Dict[str, Any], context: models.Context): super().__init__(project_id) self._name = name self.context = context self._policy_by_member = self._expand_policy(resource_data) def get_member_permissions(self, member: str) -> List[str]: """Return permissions for a member (either a user or serviceAccount). The "member" can be a user or a service account and must be specified with the IAM member syntax, i.e. using the prefixes `user:` or `serviceAccount:`. """ if member not in self._policy_by_member: return [] self._expand_member_policy(member) return sorted(self._policy_by_member[member]['permissions']) def get_members(self) -> List[str]: """Returns the IAM members of the project. The "member" can be a user or a service account and is specified with the IAM member syntax, i.e. using the prefixes `user:` or `serviceAccount:`. """ return list(self._policy_by_member.keys()) def get_member_type(self, member) -> Optional[str]: """Returns the IAM members of the project. The "member" can be a user or a service account and is specified with the IAM member syntax, i.e. using the prefixes `user:` or `serviceAccount:`. """ for m in self._policy_by_member.keys(): parts = m.split(':') if member == parts[1]: return parts[0] return None def has_permission(self, member: str, permission: str) -> bool: """Return true if user or service account member has this permission. Note that any indirect bindings, for example through group membership, aren't supported and only direct bindings to this member are checked """ if member not in self._policy_by_member: return False self._expand_member_policy(member) if permission not in self._policy_by_member[member]['permissions']: return False return self._is_active_member(member) def has_any_permission(self, member: str, permission: set[str]) -> bool: """Return true if user or service account member has any of these permission. Note that any indirect bindings, for example through group membership, aren't supported and only direct bindings to this member are checked """ if member not in self._policy_by_member: return False self._expand_member_policy(member) if any( p in self._policy_by_member[member]['permissions'] for p in permission): return True return self._is_active_member(member) def _has_role(self, member: str, role: str) -> bool: """Checks that the member has this role It performs exact match and doesn't expand role to list of permissions. Note that this method is not public because users of this module should use has_role_permissions(), i.e. verify effective permissions instead of roles. """ if member not in self._policy_by_member: return False if role not in self._policy_by_member[member]['roles']: return False return self._is_active_member(member) def has_role_permissions(self, member: str, role: str) -> bool: """Checks that this member has all the permissions defined by this role""" if member not in self._policy_by_member: return False # Avoid expanding roles to permissions if self._has_role(member, role): # member status was already checked in `has_role` return True self._expand_member_policy(member) role_permissions = { p for p in _get_iam_role(role, self.project_id).permissions if self._is_resource_permission(p) } missing_roles = (role_permissions - self._policy_by_member[member]['permissions']) if missing_roles: logging.debug( "member '%s' doesn't have permissions %s", member, ','.join(missing_roles), ) return False return self._is_active_member(member) def fetch_iam_policy( request, resource_class: Type[BaseIAMPolicy], project_id: Optional[str], name: str, context: models.Context, raise_error_if_fails=True, ): """Executes `getIamPolicy` request and converts into a resource class Supposed to be used by `get_*_policy` functions in gcpdiag.queries.* and requires an API request, which can be executed, to be passed in parameters An abstract policy request should look like: class ResourcePolicy(BaseIAMPolicy): pass def get_resource_policy(name): api_request = get_api(..).resources().get(name=name) ... return fetch_iam_policy(api_request, ResourcePolicy, project_id, name) Note: API calls aren't cached and it should be done externally """ logging.info("fetching IAM policy of '%s'", name) try: response = request.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: if raise_error_if_fails: raise utils.GcpApiError(err) from err else: return return resource_class(project_id, name, response, context) class ProjectPolicy(BaseIAMPolicy): """Represents the IAM policy of a single project. Note that you should use the get_project_policy() method so that the objects are cached and you don't re-fetch the project policy. See also the API documentation: https://cloud.google.com/resource-manager/reference/rest/v1/projects/getIamPolicy """ def _is_resource_permission(self, permission: str) -> bool: # Filter out permissions that can be granted only on organization or folders # It also excludes some permissions that aren't supported in custom roles # # https://cloud.google.com/resource-manager/docs/access-control-proj#permissions # https://cloud.google.com/monitoring/access-control#custom_roles if permission.startswith('resourcemanager.projects.' ) or permission.startswith('stackdriver.projects.'): return False return True @caching.cached_api_call(in_memory=True) def get_project_policy(context: models.Context, raise_error_if_fails=True) -> ProjectPolicy: """Return the ProjectPolicy object for a project, caching the result.""" project_id = context.project_id resource_name = f'projects/{project_id}' crm_api = apis.get_api('cloudresourcemanager', 'v3', project_id) request = crm_api.projects().getIamPolicy(resource='projects/' + project_id) return fetch_iam_policy(request, ProjectPolicy, project_id, resource_name, context, raise_error_if_fails) class OrganizationPolicy(BaseIAMPolicy): """Represents the IAM policy of a single organization using v1 API. See also the API documentation: https://cloud.google.com/resource-manager/reference/rest/v1/organizations/getIamPolicy """ def _is_resource_permission(self, permission: str) -> bool: # Filter out permissions that can be granted only on projects or folders if permission.startswith( 'resourcemanager.projects.') or permission.startswith( 'resourcemanager.folders.'): return False return True @caching.cached_api_call(in_memory=True) def get_organization_policy(context: models.Context, organization_id: str, raise_error_if_fails=True) -> OrganizationPolicy: """Return the OrganizationPolicy object for an organization, caching the result.""" resource_name = f'organizations/{organization_id}' crm_api = apis.get_api('cloudresourcemanager', 'v1') request = crm_api.organizations().getIamPolicy(resource=resource_name) return fetch_iam_policy(request, OrganizationPolicy, None, resource_name, context, raise_error_if_fails) class ServiceAccount(models.Resource): """Class represents the service account. Add more fields as needed from the declaration: https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts#ServiceAccount """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def email(self) -> str: return self._resource_data['email'] @property def unique_id(self) -> str: return self._resource_data['uniqueId'] @property def disabled(self) -> bool: return self._resource_data.get('disabled', False) @property def full_path(self) -> str: # example: "name": # "projects/skanzhelev-gke-dev/serviceAccounts/test-service-account-1 # @skanzhelev-gke-dev.iam.gserviceaccount.com" return self.name @property def short_path(self) -> str: path = self.full_path path = re.sub(r'^projects/', '', path) path = re.sub(r'/serviceAccounts/', '/', path) return path SERVICE_AGENT_DOMAINS = ( # https://cloud.google.com/iam/docs/service-accounts 'cloudservices.gserviceaccount.com', # https://cloud.google.com/iam/docs/service-agents 'cloudbuild.gserviceaccount.com', 'cloudcomposer-accounts.iam.gserviceaccount.com', 'cloud-filer.iam.gserviceaccount.com', 'cloud-memcache-sa.iam.gserviceaccount.com', 'cloud-ml.google.com.iam.gserviceaccount.com', 'cloud-redis.iam.gserviceaccount.com', 'cloud-tpu.iam.gserviceaccount.com', 'compute-system.iam.gserviceaccount.com', 'container-analysis.iam.gserviceaccount.com', 'container-engine-robot.iam.gserviceaccount.com', 'containerregistry.iam.gserviceaccount.com', 'dataflow-service-producer-prod.iam.gserviceaccount.com', 'dataproc-accounts.iam.gserviceaccount.com', 'dlp-api.iam.gserviceaccount.com', 'endpoints-portal.iam.gserviceaccount.com', 'firebase-rules.iam.gserviceaccount.com', 'gae-api-prod.google.com.iam.gserviceaccount.com', 'gcf-admin-robot.iam.gserviceaccount.com', 'gcp-gae-service.iam.gserviceaccount.com', # gcp-sa-*.iam.gserviceaccount.com included with a separate matching condition 'genomics-api.google.com.iam.gserviceaccount.com', 'remotebuildexecution.iam.gserviceaccount.com', 'serverless-robot-prod.iam.gserviceaccount.com', 'service-consumer-management.iam.gserviceaccount.com', 'service-networking.iam.gserviceaccount.com', 'sourcerepo-service-accounts.iam.gserviceaccount.com', # https://firebase.google.com/support/guides/service-accounts 'appspot.gserviceaccount.com', 'cloudservices.gserviceaccount.com', 'crashlytics-bigquery-prod.iam.gserviceaccount.com', 'fcm-bq-export-prod.iam.gserviceaccount.com', 'firebase-sa-management.iam.gserviceaccount.com', 'performance-bq-export-prod.iam.gserviceaccount.com', 'predictions-bq-export-prod.iam.gserviceaccount.com', 'system.gserviceaccount.com', ) DEFAULT_SERVICE_ACCOUNT_DOMAINS = ( 'appspot.gserviceaccount.com', 'developer.gserviceaccount.com', ) # The main reason to have two dicts instead of using for example None as value, # is that it works better for static typing (i.e. avoiding Optional[]). _service_account_cache: Dict[str, ServiceAccount] = {} _service_account_cache_fetched: Dict[str, bool] = {} _service_account_cache_is_not_found: Dict[str, bool] = {} def _batch_fetch_service_accounts(emails: List[str], context: models.Context): """Retrieve a list of service accounts. This function is used when inspecting a project, to retrieve all service accounts that are used in the IAM policy, so that we can do this in a single batch request. The goal is to be able to call is_service_account_enabled() without triggering another API call. `project_id` is used primarily as the default billing project. Service accounts from other projects in `emails` will be also retrieved. """ billing_project_id = context.project_id iam_api = apis.get_api('iam', 'v1', billing_project_id) service_accounts_api = iam_api.projects().serviceAccounts() requests = [ service_accounts_api.get( name=f'projects/{_extract_project_id(email)}/serviceAccounts/{email}') for email in emails if email not in _service_account_cache_fetched ] for email in emails: _service_account_cache_fetched[email] = True if not requests: return results_iterator = apis_utils.execute_concurrently(api=iam_api, requests=requests, context=context) for request, response, exception in results_iterator: if response: sa = ServiceAccount(response['projectId'], response) _service_account_cache[sa.email] = sa continue if not exception: logging.warning('BUG: no response and no exception for SA') continue if isinstance(exception, utils.GcpApiError): status = exception.status elif isinstance(exception, googleapiclient.errors.HttpError): status = exception.resp.status else: raise exception # Extract the requested service account and its associated project ID # from the URI. This is especially useful when dealing with scenarios # involving cross-project service accounts within a project. m = re.search(r'/projects/([^/]+)/[^/]+/([^?]+@[^?]+)', request.uri) if not m: logging.warning("BUG: can't determine SA email from request URI: %s", request.uri) continue sa_project_id = m.group(1) email = m.group(2) # 403 or 404 is expected for Google-managed service agents. if email.partition('@')[2] in SERVICE_AGENT_DOMAINS or email.partition( '@')[2].startswith('gcp-sa-'): # Too noisy even for debug-level # logging.debug( # 'ignoring error retrieving google-managed service agent %s: %s', email, # exception) pass elif status == 404: _service_account_cache_is_not_found[email] = True else: # Determine if the failing service account belongs to a different project. # Retrieving service account details may fail due to various conditions. if sa_project_id != billing_project_id: logging.warning( "Can't retrieve service account associated with one project but" ' used in another project') _service_account_cache_is_not_found[email] = True continue project_nr = crm.get_project(sa_project_id).number if ((sa_project_id == billing_project_id) and re.match(rf'{project_nr}-\w+@', email) or email.endswith(f'@{billing_project_id}.iam.gserviceaccount.com')): # if retrieving service accounts from the project being inspected fails, # we need to fail hard because many rules won't work correctly. raise utils.GcpApiError(exception) from exception else: logging.warning("can't get service account %s: %s", email, exception) def _extract_project_id(email: str): if email in _service_account_cache: return _service_account_cache[email].project_id if email.endswith('.iam.gserviceaccount.com') and not ( email.startswith('service-') or email.split('@')[1].startswith('gcp-sa-')): project_id = re.split(r'[@ .]', email)[1] return project_id # extract project number from service agents and compute default SA elif (email.partition('@')[2] in SERVICE_AGENT_DOMAINS or email.partition('@')[2].startswith('gcp-sa-') or email.endswith(DEFAULT_SERVICE_ACCOUNT_DOMAINS[1])): # AppEngine Default SA is unique if email.endswith(DEFAULT_SERVICE_ACCOUNT_DOMAINS[0]): return email.partition('@')[0] m = re.search(r'[\d]+', email.partition('@')[0]) if m and (m.group(0) is not None): try: project_id = crm.get_project(m.group(0)).id except utils.GcpApiError: # Default to using '-' wildcard to infer the project. # - wildcard character is unreliable and should be used as last resort # because it can cause response codes to contain misleading error codes # such as 403 for deleted service accounts instead of returning 404 # https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts/get logging.warning( 'Using "-" wildcard to infer host project for service account: %s. ' 'Rules which rely on method: projects.serviceAccounts.get to' ' determine ' 'disabled vrs deleted status of %s may produce misleading results. ' 'See: https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts/get', email, email, ) return '-' else: return project_id else: logging.warning( 'Using "-" wildcard to infer host project for service account: %s. ' 'Rules which rely on method: projects.serviceAccounts.get to determine ' 'disabled vrs deleted status of %s may produce misleading results. ' 'See: https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts/get', email, email, ) return '-' def is_service_account_existing(email: str, context: models.Context) -> bool: """Verify that a service account exists. If we get a non-404 API error when retrieving the service account, we will assume that the service account exists, not to throw false positives (but a warning will be printed out). """ # Make sure that the service account is fetched (this is also # called by get_project_policy). _batch_fetch_service_accounts([email], context) return email not in _service_account_cache_is_not_found def is_service_account_enabled(email: str, context: models.Context) -> bool: """Verify that a service account exists and is enabled. If we get an API error when retrieving the service account, we will assume that the service account is enabled, not to throw false positives (but a warning will be printed out). """ _batch_fetch_service_accounts([email], context) return (email not in _service_account_cache_is_not_found ) and not (email in _service_account_cache and _service_account_cache[email].disabled) class ServiceAccountIAMPolicy(BaseIAMPolicy): def _is_resource_permission(self, permission): return True @caching.cached_api_call(in_memory=True) def get_service_account_iam_policy( context: models.Context, service_account: str) -> ServiceAccountIAMPolicy: """Returns an IAM policy for a service account""" project_id = context.project_id resource_name = f'projects/{project_id}/serviceAccounts/{service_account}' iam_api = apis.get_api('iam', 'v1', project_id) request = (iam_api.projects().serviceAccounts().getIamPolicy( resource=resource_name)) return fetch_iam_policy(request, ServiceAccountIAMPolicy, project_id, resource_name, context) @caching.cached_api_call(in_memory=True) def get_service_account_list(project_id: str) -> List[ServiceAccount]: """Returns list of service accounts""" iam_api = apis.get_api('iam', 'v1', project_id) project_name = f'projects/{project_id}' request = iam_api.projects().serviceAccounts().list(name=project_name, pageSize=100) try: response = request.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return [ ServiceAccount(project_id, service_account) for service_account in response.get('accounts', []) ] ================================================ FILE: gcpdiag/queries/iam_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in iam.py for testing. Instead of doing real API calls, we return test JSON data. """ import gzip import json import pathlib import re from typing import Optional import googleapiclient.errors import httplib2 from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name PREFIX_GKE1 = pathlib.Path(__file__).parents[2] / 'test-data/gke1/json-dumps' class IamApiStub: """Mock object to simulate IAM API calls.""" # example API call: iam_api.projects().roles().list().execute() def __init__(self, api_project_id: Optional[str] = None, mock_state='init', argument=None): # project_id cannot be easily extracted from a service account name and can # contain a project id / number in different places, for example: # SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com # PROJECT_NUMBER-compute@developer.gserviceaccount.com # service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com # PROJECT_NUMBER@cloudservices.gserviceaccount.com # keeping api_project_id to map those requests to the correct json dumps self.api_project_id = api_project_id self.mock_state = mock_state self.project_id = None self.argument = argument def new_batch_http_request(self, callback=None): if callback: return apis_stub.BatchRequestStub(callback) else: return apis_stub.BatchRequestStub() def projects(self): return IamApiStub(self.api_project_id, 'projects') def serviceAccounts(self): return IamApiStub(self.api_project_id, 'serviceaccounts') def get(self, name): if self.mock_state == 'serviceaccounts': m = re.match(r'projects/[^/]+/serviceAccounts/(.*)', name) return IamApiStub(self.api_project_id, 'serviceaccounts_get', m.group(1)) elif self.mock_state == 'roles': # roles.get is only used for predefined roles, skip extracting project_id return IamApiStub(self.api_project_id, 'roles_get', name) else: raise ValueError("can't call this method here (mock_state: %s)" % self.mock_state) def getIamPolicy(self, resource): if self.mock_state == 'serviceaccounts': m = re.match(r'projects/[^/]+/serviceAccounts/(.*)', resource) return IamApiStub(self.api_project_id, 'serviceaccounts_getIamPolicy', m.group(1)) else: raise ValueError("can't call this method here (mock_state: %s)" % self.mock_state) def roles(self): if self.mock_state == 'init': return IamApiStub(self.api_project_id, 'roles') elif self.mock_state == 'projects': return IamApiStub(self.api_project_id, 'project_roles') else: raise ValueError("can't call this method here (mock_state: %s)" % self.mock_state) # def list(self, parent, view): # self.list_page = 1 # m = re.match(r'projects/([^/]+)', parent) # if m: # self.project_id = m.group(1) # return self def list(self, **args): if 'parent' in args: self.list_page = 1 m = re.match(r'projects/([^/]+)', args['parent']) if m: self.project_id = m.group(1) return self if self.mock_state == 'serviceaccounts': m = re.match(r'projects/([^/]+)', args['name']) self.project_id = m.group(1) return self def list_next(self, previous_request, previous_response): self.list_page += 1 if self.list_page >= 3: return None return self @property def uri(self): return f'https://iam.googleapis.com/v1/projects/-/serviceAccounts/{self.argument}?alt=json' def execute(self, num_retries=0): if self.mock_state == 'roles': # Predefined roles don't depend on a project, always using dump in `gke1` json_dir = PREFIX_GKE1 elif self.project_id: json_dir = apis_stub.get_json_dir(self.project_id) elif self.api_project_id: json_dir = apis_stub.get_json_dir(self.api_project_id) else: json_dir = PREFIX_GKE1 if self.mock_state == 'serviceaccounts_get': service_accounts_filename = json_dir / 'iam-service-accounts.json' with open(service_accounts_filename, encoding='utf-8') as json_file: service_accounts_data = json.load(json_file) service_accounts = { sa['email']: sa for sa in service_accounts_data['accounts'] } if self.argument in service_accounts: return service_accounts[self.argument] else: raise googleapiclient.errors.HttpError( httplib2.Response({'status': 404}), b'not found') elif self.mock_state == 'serviceaccounts_getIamPolicy': json_filename = json_dir / 'iam-service-account-policy.json' with open(json_filename, encoding='utf-8') as json_file: return json.load(json_file) elif self.mock_state == 'serviceaccounts': json_filename = json_dir / 'iam-service-accounts.json' with open(json_filename, encoding='utf-8') as json_file: return json.load(json_file) elif self.mock_state == 'roles_get': json_filename = json_dir / 'iam-roles-get.json' with open(json_filename, encoding='utf-8') as json_file: roles_data = json.load(json_file) roles = {role['name']: role for role in roles_data['roles']} if self.argument in roles: return roles[self.argument] else: raise googleapiclient.errors.HttpError( httplib2.Response({'status': 404}), b'not found') else: if self.mock_state == 'roles': json_filename = json_dir / f'iam-roles-predefined-{self.list_page}.json.gz' elif self.mock_state == 'project_roles': json_filename = json_dir / 'iam-roles-custom.json' else: raise ValueError("can't call this method here (mock_state: %s)" % self.mock_state) if json_filename.suffix == '.gz': with gzip.open(json_filename) as json_file: return json.load(json_file) else: with open(json_filename, encoding='utf-8') as json_file: return json.load(json_file) ================================================ FILE: gcpdiag/queries/iam_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in iam.py.""" from unittest import mock import diskcache import pytest from gcpdiag import models from gcpdiag.queries import apis_stub, iam def get_cache_stub(): """Use a temporary directory instead of the user cache for testing. This is used to avoid using the cached IAM roles from the disk cache.""" return diskcache.Cache() TEST_PROJECT_ID = 'gcpdiag-gke1-aaaa' TEST_PROJECT_IAM_ID = 'gcpdiag-iam1-aaaa' TEST_SERVICE_ACCOUNT = 'gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com' TEST_SERVICE_ACCOUNT_ROLE = 'projects/gcpdiag-gke1-aaaa/roles/gke2_custom_role' TEST_SERVICE_ACCOUNT_PERMISSIONS = [ 'autoscaling.sites.writeMetrics', 'cloudnotifications.activities.list', 'logging.logEntries.create', 'monitoring.alertPolicies.get', 'monitoring.alertPolicies.list', 'monitoring.dashboards.get', 'monitoring.dashboards.list', 'monitoring.groups.get', 'monitoring.groups.list', 'monitoring.metricDescriptors.create', 'monitoring.metricDescriptors.get', 'monitoring.metricDescriptors.list', 'monitoring.monitoredResourceDescriptors.get', 'monitoring.monitoredResourceDescriptors.list', 'monitoring.notificationChannelDescriptors.get', 'monitoring.notificationChannelDescriptors.list', 'monitoring.notificationChannels.get', 'monitoring.notificationChannels.list', 'monitoring.publicWidgets.get', 'monitoring.publicWidgets.list', 'monitoring.services.get', 'monitoring.services.list', 'monitoring.slos.get', 'monitoring.slos.list', 'monitoring.timeSeries.create', 'monitoring.timeSeries.list', 'monitoring.uptimeCheckConfigs.get', 'monitoring.uptimeCheckConfigs.list', 'opsconfigmonitoring.resourceMetadata.list', 'stackdriver.resourceMetadata.write', 'storage.objects.get', 'storage.objects.list', ] TEST_DUMMY_SERVICE_ACCOUNT = { 'gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com', # custom service account 'gcpdiag-gke1-aaaa@appspot.gserviceaccount.com', # GAE Default SA '12340002-compute@developer.gserviceaccount.com', # GCE Default SA # Sample Service Agent 'service-12340002@gcp-sa-aiplatform-cc.iam.gserviceaccount.com', 'p12340002-123a@gcp-sa-cloud-sql.iam.gserviceaccount.com' } @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.caching.get_disk_cache', new=get_cache_stub) class TestProjectPolicy: """Test gke.ProjectPolicy""" def test_get_member_permissions(self): context = models.Context(project_id=TEST_PROJECT_ID) policy = iam.get_project_policy(context) assert policy.get_member_permissions( f'serviceAccount:{TEST_SERVICE_ACCOUNT}' ) == TEST_SERVICE_ACCOUNT_PERMISSIONS def test_has_permission(self): context = models.Context(project_id=TEST_PROJECT_ID) policy = iam.get_project_policy(context) assert policy.has_permission(f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'monitoring.groups.get') assert not policy.has_permission(f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'monitoring.groups.create') # pylint: disable=protected-access def test_has_role(self): context = models.Context(project_id=TEST_PROJECT_ID) policy = iam.get_project_policy(context) assert policy._has_role(f'serviceAccount:{TEST_SERVICE_ACCOUNT}', TEST_SERVICE_ACCOUNT_ROLE) assert not policy._has_role(f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/container.nodeServiceAgent') def test_has_role_permissions(self): context = models.Context(project_id=TEST_PROJECT_ID) policy = iam.get_project_policy(context) assert policy.has_role_permissions(f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/monitoring.viewer') assert not policy.has_role_permissions( f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/monitoring.editor') def test_missing_role(self): with pytest.raises(iam.RoleNotFoundError): context = models.Context(project_id=TEST_PROJECT_ID) policy = iam.get_project_policy(context) policy.has_role_permissions(f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/non-existing-role') def test_internal_role(self): context = models.Context(project_id=TEST_PROJECT_ID) policy = iam.get_project_policy(context) policy.has_role_permissions(f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/container.nodeServiceAgent') def test_is_service_acccount_existing(self): context = models.Context(project_id=TEST_PROJECT_ID) assert iam.is_service_account_existing(TEST_SERVICE_ACCOUNT, context) def test_is_service_acccount_existing_inexisting(self): context = models.Context(project_id=TEST_PROJECT_ID) assert not iam.is_service_account_existing('foobar@example.com', context) def test_is_service_acccount_enabled(self): context = models.Context(project_id=TEST_PROJECT_ID) assert iam.is_service_account_enabled(TEST_SERVICE_ACCOUNT, context) def test_service_account_policy(self): context = models.Context(project_id=TEST_PROJECT_ID) policy = iam.get_service_account_iam_policy(context, TEST_SERVICE_ACCOUNT) assert policy.has_role_permissions(f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/iam.serviceAccountUser') assert not policy.has_role_permissions( f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/monitoring.editor') def test_project_id_extraction_from_service_account(self): for sa in TEST_DUMMY_SERVICE_ACCOUNT: extracted_project_id = iam._extract_project_id(sa) assert TEST_PROJECT_ID == extracted_project_id # Test exceptional case which should return '-' wildcard wild_card = iam._extract_project_id('random-sa@fake-sa-iam-gservice.com') assert wild_card == '-' def test_service_account_list(self): service_accounts = iam.get_service_account_list(TEST_PROJECT_IAM_ID) assert len(service_accounts) > 1 for account in service_accounts: if account.unique_id == '102417873155869406705': assert (account.email == 'demo2sa@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') if account.unique_id == '112819826788395589395': assert account.email == '12340002-compute@developer.gserviceaccount.com' if account.unique_id == '106302102062593675693': assert ( account.email == 'demo1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') if account.unique_id == '104735732736559639086': assert ( account.email == 'demo3@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') ================================================ FILE: gcpdiag/queries/interconnect.py ================================================ # Copyright 2021 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. """Queries related to interconnects.""" import logging import re from typing import List from gcpdiag import caching, config, models from gcpdiag.queries import apis DEFAULT_MTU = 1440 class Interconnect(models.Resource): """Represents an Interconnect. https://cloud.google.com/compute/docs/reference/rest/v1/interconnects """ _resource_data: dict _ead: str _attachments: List[str] def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._attachments = [] self._ead = '' @property def name(self) -> str: return self._resource_data['name'] @property def under_maintenance(self) -> bool: return self._resource_data['state'] == 'UNDER_MAINTENANCE' @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def attachments(self) -> List[str]: if not self._attachments: self._attachments = [ x.split('/')[-1] for x in self._resource_data['interconnectAttachments'] ] return self._attachments @property def ead(self) -> str: if not self._ead: self._ead = self._resource_data['location'].split('/')[-1] return self._ead @property def metro(self) -> str: return _metro(self.ead) @caching.cached_api_call(in_memory=True) def get_interconnect(project_id: str, interconnect_name: str) -> Interconnect: logging.debug('fetching interconnect: %s', interconnect_name) compute = apis.get_api('compute', 'v1', project_id) request = compute.interconnects().get(project=project_id, interconnect=interconnect_name) response = request.execute(num_retries=config.API_RETRIES) return Interconnect(project_id, response) @caching.cached_api_call(in_memory=True) def get_interconnects(project_id: str) -> List[Interconnect]: logging.info('fetching interconnects') compute = apis.get_api('compute', 'v1', project_id) request = compute.interconnects().list(project=project_id) response = request.execute(num_retries=config.API_RETRIES) return [Interconnect(project_id, link) for link in response] @caching.cached_api_call(in_memory=True) def get_links(project_id: str) -> List[Interconnect]: logging.info('fetching interconnects') compute = apis.get_api('compute', 'v1', project_id) request = compute.interconnects().list(project=project_id) response = request.execute(num_retries=config.API_RETRIES) links = [] if isinstance(response, dict): # Handle the case when 'response' is a dictionary links = [ Interconnect(project_id, name) for name in response.get('items', []) ] elif isinstance(response, list): # Handle the case when 'response' is a list links = [Interconnect(project_id, name) for name in response] return links def _metro(ead: str) -> str: return ead.split('-')[0] class VlanAttachment(models.Resource): """Represents an Interconnect. https://cloud.google.com/compute/docs/reference/rest/v1/interconnectAttachments """ _resource_data: dict _type: str _interconnect: str _ead: str def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._type = '' self._interconnect = '' self._ead = '' @property def name(self) -> str: return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def type(self) -> str: return self._resource_data['type'] @property def interconnect(self) -> str: if not self._interconnect: self._interconnect = self._resource_data['interconnect'].split('/')[-1] return self._interconnect @property def router(self) -> str: return self._resource_data['router'].split('/')[-1] @property def region(self) -> str: return self._resource_data['region'].split('/')[-1] @property def mtu(self) -> int: if 'mtu' in self._resource_data: return self._resource_data['mtu'] else: return DEFAULT_MTU @property def ipv4address(self) -> str: return self._resource_data['cloudRouterIpAddress'].split('/')[0] @property def remoteip(self) -> str: return self._resource_data['customerRouterIpAddress'].split('/')[0] @property def ead(self) -> str: if not self._ead: interconnect_obj = get_interconnect(self.project_id, self.interconnect) self._ead = interconnect_obj.ead return self._ead @property def metro(self) -> str: return _metro(self.ead) @property def legacy_dataplane(self) -> bool: if 'dataplaneVersion' not in self._resource_data: self._resource_data['dataplaneVersion'] = {} return self._resource_data['dataplaneVersion'] != 2 @property def defunct_state(self) -> bool: return self._resource_data['state'] == 'DEFUNCT' @caching.cached_api_call(in_memory=True) def get_vlan_attachment(project_id: str, region: str, vlan_attachment: str) -> VlanAttachment: logging.debug('fetching vlan attachment: %s', vlan_attachment) compute = apis.get_api('compute', 'v1', project_id) request = compute.interconnectAttachments().get( project=project_id, region=region, interconnectAttachment=vlan_attachment) response = request.execute(num_retries=config.API_RETRIES) return VlanAttachment(project_id, response) @caching.cached_api_call(in_memory=True) def get_vlan_attachments(project_id: str) -> List[VlanAttachment]: logging.info('fetching vlan attachments') compute = apis.get_api('compute', 'v1', project_id) attachments = [] request = compute.interconnectAttachments().aggregatedList(project=project_id) response = request.execute(num_retries=config.API_RETRIES) attachments_by_regions = response['items'] for _, data_ in attachments_by_regions.items(): if 'interconnectAttachments' not in data_: continue attachments.extend([ VlanAttachment(project_id, va) for va in data_['interconnectAttachments'] ]) return attachments ================================================ FILE: gcpdiag/queries/interconnect_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in interconnect.py for testing. Instead of doing real API calls, we return test JSON data. """ from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name DUMMY_INTERCONNECTS = 'compute-interconnects' DUMMY_ATTACHMENTS = 'interconnect-attachments' class InterconnectApiStub(apis_stub.ApiStub): """Mock object to simulate interconnect api calls. This object is created by GceApiStub, not used directly in test scripts.""" def __init__(self, mock_state): self.mock_state = mock_state # pylint: disable=redefined-builtin def get(self, project, interconnect): if self.mock_state == 'interconnects': interconnect_data = _find_test_data(interconnect) return apis_stub.RestCallStub(project, interconnect_data) else: raise ValueError(f'cannot call method {self.mock_state} here') # pylint: disable=redefined-builtin def list(self, project): if self.mock_state == 'interconnects': return apis_stub.RestCallStub(project, DUMMY_INTERCONNECTS) else: raise ValueError(f'cannot call method {self.mock_state} here') def _find_test_data(interconnect_name): if interconnect_name.startswith('dummy-'): return interconnect_name.replace('dummy-', 'compute-') return interconnect_name class VlanAttachmentApiStub(apis_stub.ApiStub): """Mock object to simulate interconnect attachment api calls. This object is created by GceApiStub, not used directly in test scripts.""" def __init__(self, mock_state): self.mock_state = mock_state # pylint: disable=redefined-builtin def get(self, project, region, interconnectAttachment): if self.mock_state == 'vlan_attachment': return apis_stub.RestCallStub(project, interconnectAttachment) else: raise ValueError(f'cannot call method {self.mock_state} here') # pylint: disable=redefined-builtin def aggregatedList(self, project): if self.mock_state == 'vlan_attachment': return apis_stub.RestCallStub(project, DUMMY_ATTACHMENTS) else: raise ValueError(f'cannot call method {self.mock_state} here') ================================================ FILE: gcpdiag/queries/interconnect_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in interconnect.py.""" from unittest import mock # from gcpdiag import models from gcpdiag.queries import apis_stub, interconnect DUMMY_PROJECT_ID = 'gcpdiag-gke1-aaaa' DUMMY_INTERCONNECT = 'dummy-interconnect1' DUMMY_ATTACHMENT = 'dummy-attachment1' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestInterconnect: """Test Interconnect.""" def test_get_interconnect(self): """get interconnect by name.""" link = interconnect.get_interconnect(project_id=DUMMY_PROJECT_ID, interconnect_name=DUMMY_INTERCONNECT) assert link.name == DUMMY_INTERCONNECT assert len(link.attachments) == 2 assert link.metro == 'bos' def test_get_interconnects(self): """get interconnects by project.""" links = interconnect.get_interconnects(project_id=DUMMY_PROJECT_ID) for link in links: if link.name == DUMMY_INTERCONNECT: assert 'dummy-attachment1' in link.attachments assert 'dummy-attachment2' in link.attachments assert link.ead == 'bos-zone1-219' if link.name == 'dummy-interconnect2': assert 'dummy-attachment3' in link.attachments assert 'dummy-attachment4' in link.attachments assert link.ead == 'bos-zone2-219' if link.name == 'dummy-interconnect3': assert 'dummy-attachment5' in link.attachments assert link.ead == 'sjc-zone1-6' if link.name == 'dummy-interconnect4': assert 'dummy-attachment6' in link.attachments assert link.ead == 'sjc-zone2-6' def test_get_vlan_attachment(self): """get interconnect by name.""" attachment = interconnect.get_vlan_attachment( project_id=DUMMY_PROJECT_ID, region='us-east4', vlan_attachment='interconnect-attachment1') assert attachment.name == DUMMY_ATTACHMENT assert attachment.interconnect == DUMMY_INTERCONNECT assert attachment.metro in ['bos', 'sjc'] assert attachment.region in ['us-east4', 'us-west2'] def test_get_vlan_attachments(self): """get interconnects by project.""" attachments = interconnect.get_vlan_attachments(project_id=DUMMY_PROJECT_ID) assert len(attachments) > 2 for attachment in attachments: if attachment.name == 'dummy-attachment1': assert attachment.interconnect == 'dummy-interconnect1' assert attachment.ead == 'bos-zone1-219' assert attachment.router == 'dummy-router1' if attachment.name == 'dummy-attachment2': assert attachment.interconnect == 'dummy-interconnect1' assert attachment.ead == 'bos-zone1-219' assert attachment.router == 'dummy-router1' if attachment.name == 'dummy-attachment3': assert attachment.interconnect == 'dummy-interconnect2' assert attachment.ead == 'bos-zone2-219' assert attachment.router == 'dummy-router2' if attachment.name == 'dummy-attachment4': assert attachment.interconnect == 'dummy-interconnect2' assert attachment.ead == 'bos-zone2-219' assert attachment.router == 'dummy-router2' if attachment.name == 'dummy-attachment5': assert attachment.interconnect == 'dummy-interconnect3' assert attachment.ead == 'sjc-zone1-6' assert attachment.router == 'dummy-router3' if attachment.name == 'dummy-attachment6': assert attachment.interconnect == 'dummy-interconnect4' assert attachment.ead == 'sjc-zone2-6' assert attachment.router == 'dummy-router3' def test_legacy_dataplane(self): attachments = interconnect.get_vlan_attachments(project_id=DUMMY_PROJECT_ID) for attachment in attachments: if attachment.name == 'dummy-attachment7': assert attachment.legacy_dataplane is True if attachment.name == 'dummy-attachment8': assert attachment.legacy_dataplane is False def test_defunct_state(self): attachments = interconnect.get_vlan_attachments(project_id=DUMMY_PROJECT_ID) for attachment in attachments: if attachment.name == 'dummy-attachment9': assert attachment.defunct_state is False if attachment.name == 'dummy-attachment10': assert attachment.defunct_state is True def test_under_maintenance(self): links = interconnect.get_links(project_id=DUMMY_PROJECT_ID) for link in links: if link.name == 'dummy-interconnect5': assert link.under_maintenance is True def test_get_links(self): links = interconnect.get_links(project_id=DUMMY_PROJECT_ID) assert len(links) > 0 for link in links: if link.name == 'dummy-interconnect5': assert link.under_maintenance is True def test_ipv4address(self): attachments = interconnect.get_vlan_attachments( 'gcpdiag-interconnect1-aaaa') for vlan in attachments: if vlan.name == 'dummy-attachment1': assert vlan.ipv4address == '169.254.1.1' if vlan.name == 'dummy-attachment2': assert vlan.ipv4address == '169.254.2.1' if vlan.name == 'dummy-attachment3': assert vlan.ipv4address == '169.254.3.1' if vlan.name == 'dummy-attachment4': assert vlan.ipv4address == '169.254.4.1' ================================================ FILE: gcpdiag/queries/kms.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP Cloud Key Management.""" import logging import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, iam from gcpdiag.utils import GcpApiError class CryptoKey(models.Resource): """Represents a KMS Crypto Key. See also the API documentation: https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys """ @property def full_path(self) -> str: return self._resource_data['name'] @property def name(self) -> str: return self._resource_data['name'] def is_destroyed(self) -> bool: return self._resource_data['primary'].get('state') == 'DESTROYED' def is_enabled(self) -> bool: return self._resource_data['primary'].get('state') == 'ENABLED' def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data class KMSCryptoKeyIAMPolicy(iam.BaseIAMPolicy): def _is_resource_permission(self, permission): return True @caching.cached_api_call def get_crypto_key(key_name: str) -> CryptoKey: """Get a Crypto Key object by its resource name, caching the result.""" project_id = utils.get_project_by_res_name(key_name) kms_api = apis.get_api('cloudkms', 'v1', project_id) query = kms_api.projects().locations().keyRings().cryptoKeys().get( name=key_name) logging.debug('fetching KMS Key %s in project %s', utils.extract_value_from_res_name(key_name, 'cryptoKeys'), project_id) try: resource_data = query.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: raise GcpApiError(err) from err return CryptoKey(project_id, resource_data) @caching.cached_api_call def get_crypto_key_iam_policy(context: models.Context, key_name: str) -> KMSCryptoKeyIAMPolicy: project_id = utils.get_project_by_res_name(key_name) kms_api = apis.get_api('cloudkms', 'v1', project_id) query = kms_api.projects().locations().keyRings().cryptoKeys().getIamPolicy( resource=key_name) return iam.fetch_iam_policy(query, KMSCryptoKeyIAMPolicy, project_id, key_name, context) ================================================ FILE: gcpdiag/queries/kms_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in kms.py for testing. Instead of doing real API calls, we return test JSON data. """ # pylint: disable=unused-argument # pylint: disable=invalid-name import pathlib from gcpdiag import utils from gcpdiag.queries import apis_stub PREFIX_GKE1 = pathlib.Path(__file__).parents[2] / 'test-data/gke1/json-dumps' class KmsApiStub: """Mock object to simulate container api calls.""" def projects(self): return self def locations(self): return self def keyRings(self): return self def cryptoKeys(self): return self def get(self, name=None): project_id = utils.get_project_by_res_name(name) basename = utils.extract_value_from_res_name(name, 'cryptoKeys') return apis_stub.RestCallStub(project_id, basename) def getIamPolicy(self, resource): project_id = utils.get_project_by_res_name(resource) return apis_stub.RestCallStub(project_id, 'kms-key-iam-policy') ================================================ FILE: gcpdiag/queries/kms_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in kms.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, kms DUMMY_PROJECT_NAME = 'gcpdiag-gke1-aaaa' BASE_KEY_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/us-central1/keyRings/usckr/cryptoKeys/' DUMMY_DESTROYED_CRYPTO_KEY_NAME = BASE_KEY_NAME + 'kms-key-destroyed' DUMMY_DISABLED_CRYPTO_KEY_NAME = BASE_KEY_NAME + 'kms-key-disabled' DUMMY_ENABLED_CRYPTO_KEY_NAME = BASE_KEY_NAME + 'kms-key-enabled' DUMMY_IAM_POLICY_PROJECT_NAME = 'gcpdiag-apigee1-aaaa' DUMMY_IAM_POLICY_CRYPTO_KEY_NAME = f'projects/{DUMMY_IAM_POLICY_PROJECT_NAME}/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key' # pylint: disable=C0301 DUMMY_IAM_POLICY_MEMBER = 'serviceAccount:service-12340005@gcp-sa-apigee.iam.gserviceaccount.com' DUMMY_IAM_POLICY_ROLE = 'roles/cloudkms.cryptoKeyEncrypterDecrypter' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestCryptoKey: """Test kms.CryptoKey.""" def test_get_crypto_key(self): """get_crypto_key returns the right key matched by name.""" crypto_key = kms.get_crypto_key(DUMMY_ENABLED_CRYPTO_KEY_NAME) assert crypto_key.name == DUMMY_ENABLED_CRYPTO_KEY_NAME crypto_key = kms.get_crypto_key(DUMMY_DISABLED_CRYPTO_KEY_NAME) assert crypto_key.name == DUMMY_DISABLED_CRYPTO_KEY_NAME def test_is_destroyed(self): crypto_key = kms.get_crypto_key(DUMMY_DESTROYED_CRYPTO_KEY_NAME) assert crypto_key.is_destroyed() def test_is_enabled(self): crypto_key = kms.get_crypto_key(DUMMY_ENABLED_CRYPTO_KEY_NAME) assert crypto_key.is_enabled() crypto_key = kms.get_crypto_key(DUMMY_DISABLED_CRYPTO_KEY_NAME) assert not crypto_key.is_enabled() def test_get_crypto_key_iam_policy(self): context = models.Context(project_id=DUMMY_IAM_POLICY_PROJECT_NAME) policy = kms.get_crypto_key_iam_policy(context, DUMMY_IAM_POLICY_CRYPTO_KEY_NAME) assert policy.has_role_permissions(DUMMY_IAM_POLICY_MEMBER, DUMMY_IAM_POLICY_ROLE) ================================================ FILE: gcpdiag/queries/kubectl.py ================================================ # Copyright 2023 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. # Lint as: python3 """ Queries related to Kubectl plugins. """ import functools import logging import os import subprocess import threading import yaml from gcpdiag import config from gcpdiag.queries import gke def get_config_path(): return config.get_cache_dir() + '/gcpdiag-config' class KubectlExecutor: """Represents a kubectl executor.""" lock: threading.Lock def __init__(self, cluster: gke.Cluster): self.cluster = cluster self.lock = threading.Lock() def make_kube_config(self) -> bool: """Add a new kubernetes context for kubectl plugin CLIs.""" cfg: dict = {} if not os.path.isfile(get_config_path()): cfg['apiVersion'] = 'v1' cfg['users'] = [{ 'name': 'gcpdiag', 'user': { 'exec': { 'apiVersion': 'client.authentication.k8s.io/v1beta1', 'command': 'gke-gcloud-auth-plugin', 'installHint': 'x', 'provideClusterInfo': True, }, }, }] cfg['clusters'] = [] cfg['contexts'] = [] else: with open(get_config_path(), encoding='UTF-8') as f: cfg = yaml.safe_load(f) if self.cluster.endpoint is None: logging.warning('No kubernetes API server endpoint found for cluster %s', self.cluster.short_path) return False kubecontext = 'gcpdiag-ctx-' + self.cluster.name cfg['clusters'].append({ 'cluster': { 'certificate-authority-data': self.cluster.cluster_ca_certificate, 'server': 'https://' + self.cluster.endpoint, }, 'name': self.cluster.short_path, }) cfg['contexts'].append({ 'context': { 'cluster': self.cluster.short_path, 'user': 'gcpdiag', }, 'name': kubecontext, }) self.kubecontext = kubecontext config_text = yaml.dump(cfg, default_flow_style=False) with open(get_config_path(), 'w', encoding='UTF-8') as config_file: config_file.write(config_text) config_file.close() return True def kubectl_execute(self, command_list: list[str]): """ Execute a kubectl command. Will take a list of strings which contains all the command and parameters to be executed and return the stdout and stderr of the execution. """ res = subprocess.run(command_list, check=False, capture_output=True, text=True) return res.stdout, res.stderr def verify_auth(executor: KubectlExecutor) -> bool: """ Verify the authentication for kubernetes by running kubeclt cluster-info. Will raise a warning and return False if authentication failed. """ _, stderr = executor.kubectl_execute([ 'kubectl', 'cluster-info', '--kubeconfig', get_config_path(), '--context', executor.kubecontext ]) if stderr: logging.warning('Failed to authenticate kubectl for cluster %s: %s', executor.cluster.short_path, stderr.strip('\n')) return False return True def check_gke_ingress(executor: KubectlExecutor): return executor.kubectl_execute([ 'kubectl', 'check-gke-ingress', '--kubeconfig', get_config_path(), '--context', executor.kubecontext ]) @functools.lru_cache() def get_kubectl_executor(c: gke.Cluster): """ Create a kubectl_executor for a GKE cluster. """ executor = KubectlExecutor(cluster=c) with executor.lock: if not executor.make_kube_config(): return None try: if not verify_auth(executor): logging.warning('Authentication failed for cluster %s', c.short_path) return None except FileNotFoundError as err: logging.warning('Can not inspect Kubernetes resources: %s: %s', type(err).__name__, err) return None return executor def clean_up(): """ Delete the kubeconfig file generated for gcpdiag. """ try: os.remove(get_config_path()) except OSError as err: logging.debug('Error cleaning up kubeconfig file used by gcpdiag: %s: %s', type(err).__name__, err) def error_message(rule_name, kind, namespace, name, message) -> str: return f'Check rule {rule_name} on {kind} {namespace}/{name} failed: {message}\n' ================================================ FILE: gcpdiag/queries/kubectl_stub.py ================================================ # Copyright 2023 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. """Stub kubectl command execution for testing.""" import json import pathlib from gcpdiag.queries import kubectl def check_gke_ingress(executor: kubectl.KubectlExecutor): filepath = pathlib.Path(__file__).parents[ 2] / 'test-data/gke1/json-dumps' / 'container-kubectl.json' with open(filepath, encoding='utf-8') as json_file: cluster_list = json.load(json_file) return json.dumps(cluster_list[executor.cluster.short_path]), None def verify_auth(executor: kubectl.KubectlExecutor) -> bool: if executor.cluster.cluster_ca_certificate == 'REDACTED': return False return True ================================================ FILE: gcpdiag/queries/lb.py ================================================ # Copyright 2021 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. """Queries related to load balancer.""" import logging import re from enum import Enum from typing import Dict, List, Literal, Optional import googleapiclient from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, apis_utils class LoadBalancerType(Enum): """Load balancer type.""" LOAD_BALANCER_TYPE_UNSPECIFIED = 0 EXTERNAL_PASSTHROUGH_LB = 1 INTERNAL_PASSTHROUGH_LB = 2 TARGET_POOL_LB = 3 # deprecated but customers still have them GLOBAL_EXTERNAL_PROXY_NETWORK_LB = 4 # envoy based proxy lb REGIONAL_INTERNAL_PROXY_NETWORK_LB = 5 REGIONAL_EXTERNAL_PROXY_NETWORK_LB = 6 CROSS_REGION_INTERNAL_PROXY_NETWORK_LB = 7 CLASSIC_PROXY_NETWORK_LB = 8 GLOBAL_EXTERNAL_APPLICATION_LB = 9 # envoy based application lb REGIONAL_INTERNAL_APPLICATION_LB = 10 REGIONAL_EXTERNAL_APPLICATION_LB = 11 CROSS_REGION_INTERNAL_APPLICATION_LB = 12 CLASSIC_APPLICATION_LB = 13 def get_load_balancer_type_name(lb_type: LoadBalancerType) -> str: """Returns a human-readable name for the given load balancer type.""" type_names = { LoadBalancerType.LOAD_BALANCER_TYPE_UNSPECIFIED: 'Unspecified', LoadBalancerType.EXTERNAL_PASSTHROUGH_LB: ('External Passthrough Network Load Balancer'), LoadBalancerType.INTERNAL_PASSTHROUGH_LB: ('Internal Passthrough Network Load Balancer'), LoadBalancerType.TARGET_POOL_LB: 'Target Pool Network Load Balancer', LoadBalancerType.GLOBAL_EXTERNAL_PROXY_NETWORK_LB: ('Global External Proxy Network Load Balancer'), LoadBalancerType.REGIONAL_INTERNAL_PROXY_NETWORK_LB: ('Regional Internal Proxy Network Load Balancer'), LoadBalancerType.REGIONAL_EXTERNAL_PROXY_NETWORK_LB: ('Regional External Proxy Network Load Balancer'), LoadBalancerType.CROSS_REGION_INTERNAL_PROXY_NETWORK_LB: ('Cross-Region Internal Proxy Network Load Balancer'), LoadBalancerType.CLASSIC_PROXY_NETWORK_LB: ('Classic Proxy Network Load Balancer'), LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB: ('Global External Application Load Balancer'), LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB: ('Regional Internal Application Load Balancer'), LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB: ('Regional External Application Load Balancer'), LoadBalancerType.CROSS_REGION_INTERNAL_APPLICATION_LB: ('Cross-Region Internal Application Load Balancer'), LoadBalancerType.CLASSIC_APPLICATION_LB: ('Classic Application Load Balancer'), } return type_names.get(lb_type, 'Unspecified') def get_load_balancer_type( load_balancing_scheme: str, scope: str, layer: Literal['application', 'network'], backend_service_based: bool = True, ) -> LoadBalancerType: if load_balancing_scheme == 'EXTERNAL': if not scope or scope == 'global': if layer == 'application': return LoadBalancerType.CLASSIC_APPLICATION_LB else: return LoadBalancerType.CLASSIC_PROXY_NETWORK_LB else: return (LoadBalancerType.EXTERNAL_PASSTHROUGH_LB if backend_service_based else LoadBalancerType.TARGET_POOL_LB) elif load_balancing_scheme == 'INTERNAL': return LoadBalancerType.INTERNAL_PASSTHROUGH_LB elif load_balancing_scheme == 'INTERNAL_MANAGED': if not scope or scope == 'global': if layer == 'application': return LoadBalancerType.CROSS_REGION_INTERNAL_APPLICATION_LB else: return LoadBalancerType.CROSS_REGION_INTERNAL_PROXY_NETWORK_LB else: if layer == 'application': return LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB else: return LoadBalancerType.REGIONAL_INTERNAL_PROXY_NETWORK_LB elif load_balancing_scheme == 'EXTERNAL_MANAGED': if not scope or scope == 'global': if layer == 'application': return LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB else: return LoadBalancerType.GLOBAL_EXTERNAL_PROXY_NETWORK_LB else: if layer == 'application': return LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB else: return LoadBalancerType.REGIONAL_EXTERNAL_PROXY_NETWORK_LB return LoadBalancerType.LOAD_BALANCER_TYPE_UNSPECIFIED def normalize_url(url: str) -> str: """Returns normalized url.""" result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', url) if result: return result.group(1) else: return '' class BackendServices(models.Resource): """A Backend Service resource.""" _resource_data: dict _type: str def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def session_affinity(self) -> str: return self._resource_data.get('sessionAffinity', 'NONE') @property def timeout_sec(self) -> int: return self._resource_data.get('timeoutSec', None) @property def locality_lb_policy(self) -> str: return self._resource_data.get('localityLbPolicy', 'ROUND_ROBIN') @property def is_enable_cdn(self) -> str: return self._resource_data.get('enableCDN', False) @property def draining_timeout_sec(self) -> int: return self._resource_data.get('connectionDraining', {}).get('drainingTimeoutSec', 0) @property def load_balancing_scheme(self) -> str: return self._resource_data.get('loadBalancingScheme', None) @property def health_check(self): if 'healthChecks' not in self._resource_data: return None health_check_url = self._resource_data['healthChecks'][0] matches = re.search(r'/([^/]+)$', health_check_url) if matches: healthcheck_name = matches.group(1) return healthcheck_name else: return None @property def health_check_region(self): if 'healthChecks' not in self._resource_data: return None health_check_url = self._resource_data['healthChecks'][0] m = re.search(r'/regions/([^/]+)', health_check_url) if m: return m.group(1) else: return None @property def backends(self) -> List[dict]: return self._resource_data.get('backends', []) @property def region(self): try: url = self._resource_data.get('region') if url is not None: match = re.search(r'/([^/]+)/?$', url) if match is not None: region = match.group(1) return region else: return None except KeyError: return None @property def protocol(self) -> str: return self._resource_data.get('protocol', None) @property def port_name(self) -> str: return self._resource_data.get('portName', None) @property def used_by_refs(self) -> List[str]: used_by = [] for x in self._resource_data.get('usedBy', []): reference = x.get('reference') if reference: match = re.match(r'https://www.googleapis.com/compute/v1/(.*)', reference) if match: used_by.append(match.group(1)) return used_by @property def load_balancer_type(self) -> LoadBalancerType: application_protocols = ['HTTP', 'HTTPS', 'HTTP2'] return get_load_balancer_type( self.load_balancing_scheme, self.region, 'application' if self.protocol in application_protocols else 'network', backend_service_based=True, ) @caching.cached_api_call(in_memory=True) def get_backend_services(project_id: str) -> List[BackendServices]: logging.debug('fetching Backend Services: %s', project_id) compute = apis.get_api('compute', 'v1', project_id) backend_services = [] request = compute.backendServices().aggregatedList(project=project_id) response = request.execute(num_retries=config.API_RETRIES) backend_services_by_region = response['items'] for _, data_ in backend_services_by_region.items(): if 'backendServices' not in data_: continue backend_services.extend([ BackendServices(project_id, backend_service) for backend_service in data_['backendServices'] ]) return backend_services @caching.cached_api_call(in_memory=True) def get_backend_service(project_id: str, backend_service_name: str, region: str = None) -> BackendServices: """Returns instance object matching backend service name and region""" compute = apis.get_api('compute', 'v1', project_id) try: if not region or region == 'global': request = compute.backendServices().get( project=project_id, backendService=backend_service_name) else: request = compute.regionBackendServices().get( project=project_id, region=region, backendService=backend_service_name) response = request.execute(num_retries=config.API_RETRIES) return BackendServices(project_id, resource_data=response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err def get_backend_service_by_self_link( backend_service_self_link: str,) -> Optional[BackendServices]: backend_service_name = backend_service_self_link.split('/')[-1] backend_service_scope = backend_service_self_link.split('/')[-3] match = re.match(r'projects/([^/]+)/', backend_service_self_link) if not match: return None project_id = match.group(1) return get_backend_service(project_id, backend_service_name, backend_service_scope) class BackendHealth: """A Backend Service resource.""" _resource_data: dict def __init__(self, resource_data, group): self._resource_data = resource_data self._group = group @property def instance(self) -> str: return self._resource_data['instance'] @property def group(self) -> str: return self._group @property def health_state(self) -> str: return self._resource_data.get('healthState', 'UNHEALTHY') @caching.cached_api_call(in_memory=True) def get_backend_service_health( context: models.Context, backend_service_name: str, backend_service_region: str = None, ) -> List[BackendHealth]: """Returns health data for backend service. Args: context: The project context. backend_service_name: The name of the backend service. backend_service_region: The region of the backend service. Returns: A list of BackendHealth objects. """ project_id = context.project_id try: backend_service = get_backend_service(project_id, backend_service_name, backend_service_region) except googleapiclient.errors.HttpError: return [] backend_health_statuses: List[BackendHealth] = [] compute = apis.get_api('compute', 'v1', project_id) request_map = {} for backend in backend_service.backends: group = backend['group'] if not backend_service.region: request = compute.backendServices().getHealth( project=project_id, backendService=backend_service.name, body={'group': group}) else: request = compute.regionBackendServices().getHealth( project=project_id, region=backend_service.region, backendService=backend_service.name, body={'group': group}) request_map[request] = group for i, response, exception in apis_utils.execute_concurrently( api=compute, requests=list(request_map.keys()), context=context): group = request_map[i] if exception: logging.warning( 'getHealth API call failed for backend service %s, group %s: %s', backend_service_name, group, exception) continue # None is returned when backend type doesn't support health check if response is not None: for health_status in response.get('healthStatus', []): backend_health_statuses.append(BackendHealth(health_status, group)) return backend_health_statuses class SslCertificate(models.Resource): """A SSL Certificate resource.""" _resource_data: dict _type: str def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def type(self) -> str: return self._resource_data.get('type', 'SELF_MANAGED') @property def status(self) -> str: return self._resource_data.get('managed', {}).get('status') @property def domains(self) -> List[str]: return self._resource_data.get('managed', {}).get('domains', []) @property def domain_status(self) -> Dict[str, str]: return self._resource_data.get('managed', {}).get('domainStatus', {}) @caching.cached_api_call(in_memory=True) def get_ssl_certificate( project_id: str, certificate_name: str, ) -> SslCertificate: """Returns object matching certificate name and region""" compute = apis.get_api('compute', 'v1', project_id) request = compute.sslCertificates().get(project=project_id, sslCertificate=certificate_name) response = request.execute(num_retries=config.API_RETRIES) return SslCertificate(project_id, resource_data=response) class ForwardingRules(models.Resource): """A Forwarding Rule resource.""" _resource_data: dict _type: str def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def region(self): url = self._resource_data.get('region', '') if url is not None: match = re.search(r'/([^/]+)/?$', url) if match is not None: region = match.group(1) return region return 'global' @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def global_access_allowed(self) -> bool: return self._resource_data.get('allowGlobalAccess', False) @property def load_balancing_scheme(self) -> str: return self._resource_data.get('loadBalancingScheme', None) @property def target(self) -> str: full_path = self._resource_data.get('target', '') result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', full_path) if result: return result.group(1) else: return '' @property def backend_service(self) -> str: full_path = self._resource_data.get('backendService', '') result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', full_path) if result: return result.group(1) else: return '' @property def ip_address(self) -> str: return self._resource_data.get('IPAddress', '') @property def port_range(self) -> str: return self._resource_data.get('portRange', '') @caching.cached_api_call(in_memory=True) def get_related_backend_services(self) -> List[BackendServices]: """Returns the backend services related to the forwarding rule.""" if self.backend_service: resource = get_backend_service_by_self_link(self.backend_service) return [resource] if resource else [] if self.target: target_proxy_target = get_target_proxy_reference(self.target) if not target_proxy_target: return [] target_proxy_target_type = target_proxy_target.split('/')[-2] if target_proxy_target_type == 'backendServices': resource = get_backend_service_by_self_link(target_proxy_target) return [resource] if resource else [] elif target_proxy_target_type == 'urlMaps': # Currently it doesn't work for shared-vpc backend services backend_services = get_backend_services(self.project_id) return [ backend_service for backend_service in backend_services if target_proxy_target in backend_service.used_by_refs ] return [] @property def load_balancer_type(self) -> LoadBalancerType: target_type = None if self.target: parts = self.target.split('/') if len(parts) >= 2: target_type = parts[-2] application_targets = [ 'targetHttpProxies', 'targetHttpsProxies', 'targetGrpcProxies', ] return get_load_balancer_type( self.load_balancing_scheme, self.region, 'application' if target_type in application_targets else 'network', target_type != 'targetPools', ) @caching.cached_api_call(in_memory=True) def get_target_proxy_reference(target_proxy_self_link: str) -> str: """Retrieves the URL map or backend service associated with a given target proxy. Args: target_proxy_self_link: self link of the target proxy Returns: The url map or the backend service self link """ target_proxy_type = target_proxy_self_link.split('/')[-2] target_proxy_name = target_proxy_self_link.split('/')[-1] target_proxy_scope = target_proxy_self_link.split('/')[-3] match_result = re.match(r'projects/([^/]+)/', target_proxy_self_link) if not match_result: return '' project_id = match_result.group(1) compute = apis.get_api('compute', 'v1', project_id) request = None if target_proxy_type == 'targetHttpsProxies': if target_proxy_scope == 'global': request = compute.targetHttpsProxies().get( project=project_id, targetHttpsProxy=target_proxy_name) else: request = compute.regionTargetHttpsProxies().get( project=project_id, region=target_proxy_scope, targetHttpsProxy=target_proxy_name, ) elif target_proxy_type == 'targetHttpProxies': if target_proxy_scope == 'global': request = compute.targetHttpProxies().get( project=project_id, targetHttpProxy=target_proxy_name) else: request = compute.regionTargetHttpProxies().get( project=project_id, region=target_proxy_scope, targetHttpProxy=target_proxy_name, ) elif target_proxy_type == 'targetTcpProxies': if target_proxy_scope == 'global': request = compute.targetTcpProxies().get(project=project_id, targetTcpProxy=target_proxy_name) else: request = compute.regionTargetTcpProxies().get( project=project_id, region=target_proxy_scope, targetTcpProxy=target_proxy_name, ) elif target_proxy_type == 'targetSslProxies': request = compute.targetSslProxies().get(project=project_id, targetSslProxy=target_proxy_name) elif target_proxy_type == 'targetGrcpProxies': request = compute.targetGrpcProxies().get(project=project_id, targetGrpcProxy=target_proxy_name) if not request: # target is not target proxy return '' response = request.execute(num_retries=config.API_RETRIES) if 'urlMap' in response: return normalize_url(response['urlMap']) if 'service' in response: return normalize_url(response['service']) return '' @caching.cached_api_call(in_memory=True) def get_forwarding_rules(project_id: str) -> List[ForwardingRules]: logging.debug('fetching Forwarding Rules: %s', project_id) compute = apis.get_api('compute', 'v1', project_id) forwarding_rules = [] request = compute.forwardingRules().aggregatedList(project=project_id) response = request.execute(num_retries=config.API_RETRIES) forwarding_rules_by_region = response['items'] for _, data_ in forwarding_rules_by_region.items(): if 'forwardingRules' not in data_: continue forwarding_rules.extend([ ForwardingRules(project_id, forwarding_rule) for forwarding_rule in data_['forwardingRules'] ]) return forwarding_rules @caching.cached_api_call(in_memory=True) def get_forwarding_rule(project_id: str, forwarding_rule_name: str, region: str = None) -> ForwardingRules: compute = apis.get_api('compute', 'v1', project_id) if not region or region == 'global': request = compute.globalForwardingRules().get( project=project_id, forwardingRule=forwarding_rule_name) else: request = compute.forwardingRules().get(project=project_id, region=region, forwardingRule=forwarding_rule_name) response = request.execute(num_retries=config.API_RETRIES) return ForwardingRules(project_id, resource_data=response) class TargetHttpsProxy(models.Resource): """A Target HTTPS Proxy resource.""" _resource_data: dict _type: str def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def region(self): url = self._resource_data.get('region', '') if url is not None: match = re.search(r'/([^/]+)/?$', url) if match is not None: region = match.group(1) return region return 'global' @property def ssl_certificates(self) -> List[str]: return self._resource_data.get('sslCertificates', []) @property def certificate_map(self) -> str: certificate_map = self._resource_data.get('certificateMap', '') result = re.match(r'https://certificatemanager.googleapis.com/v1/(.*)', certificate_map) if result: return result.group(1) return certificate_map @caching.cached_api_call(in_memory=True) def get_target_https_proxies(project_id: str) -> List[TargetHttpsProxy]: logging.debug('fetching Target HTTPS Proxies: %s', project_id) compute = apis.get_api('compute', 'v1', project_id) target_https_proxies = [] request = compute.targetHttpsProxies().aggregatedList(project=project_id) response = request.execute(num_retries=config.API_RETRIES) target_https_proxies_by_region = response['items'] for _, data_ in target_https_proxies_by_region.items(): if 'targetHttpsProxies' not in data_: continue target_https_proxies.extend([ TargetHttpsProxy(project_id, target_https_proxy) for target_https_proxy in data_['targetHttpsProxies'] ]) return target_https_proxies class TargetSslProxy(models.Resource): """A Target SSL Proxy resource.""" _resource_data: dict _type: str def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def id(self) -> str: return self._resource_data['id'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def region(self): url = self._resource_data.get('region', '') if url is not None: match = re.search(r'/([^/]+)/?$', url) if match is not None: region = match.group(1) return region return 'global' @property def ssl_certificates(self) -> List[str]: return self._resource_data.get('sslCertificates', []) @property def certificate_map(self) -> str: certificate_map = self._resource_data.get('certificateMap', '') result = re.match(r'https://certificatemanager.googleapis.com/v1/(.*)', certificate_map) if result: return result.group(1) return certificate_map @caching.cached_api_call(in_memory=True) def get_target_ssl_proxies(project_id: str) -> List[TargetSslProxy]: logging.debug('fetching Target SSL Proxies: %s', project_id) compute = apis.get_api('compute', 'v1', project_id) request = compute.targetSslProxies().list(project=project_id) response = request.execute(num_retries=config.API_RETRIES) return [ TargetSslProxy(project_id, item) for item in response.get('items', []) ] class LoadBalancerInsight(models.Resource): """Represents a Load Balancer Insights object""" @property def full_path(self) -> str: return self._resource_data['name'] @property def description(self) -> str: return self._resource_data['description'] @property def insight_subtype(self) -> str: return self._resource_data['insightSubtype'] @property def details(self) -> dict: return self._resource_data['content'] @property def is_firewall_rule_insight(self) -> bool: firewall_rule_subtypes = ( 'HEALTH_CHECK_FIREWALL_NOT_CONFIGURED', 'HEALTH_CHECK_FIREWALL_FULLY_BLOCKING', 'HEALTH_CHECK_FIREWALL_PARTIALLY_BLOCKING', 'HEALTH_CHECK_FIREWALL_INCONSISTENT', ) return self.insight_subtype.startswith(firewall_rule_subtypes) @property def is_health_check_port_mismatch_insight(self) -> bool: return self.insight_subtype == 'HEALTH_CHECK_PORT_MISMATCH' def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @caching.cached_api_call def get_lb_insights_for_a_project(project_id: str, region: str = 'global'): api = apis.get_api('recommender', 'v1', project_id) insight_name = (f'projects/{project_id}/locations/{region}/insightTypes/' 'google.networkanalyzer.networkservices.loadBalancerInsight') insights = [] for insight in apis_utils.list_all( request=api.projects().locations().insightTypes().insights().list( parent=insight_name), next_function=api.projects().locations().insightTypes().insights(). list_next, response_keyword='insights', ): insights.append(LoadBalancerInsight(project_id, insight)) return insights ================================================ FILE: gcpdiag/queries/lb_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in lb.py for testing. Instead of doing real API calls, we return test JSON data. """ import json from typing import Any import httplib2 from googleapiclient import errors from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name backend_service_states = ('backendServices', 'regionBackendServices') forwarding_rule_states = ('forwardingRules', 'globalForwardingRules') target_http_proxy_states = ('targetHttpProxies', 'regionTargetHttpProxies') target_https_proxy_states = ( 'targetHttpsProxies', 'regionTargetHttpsProxies', ) target_ssl_proxy_states = 'targetSslProxies' target_grpc_proxy_states = 'targetGrpcProxies' target_tcp_proxy_states = ('targetTcpProxies', 'regionTargetTcpProxies') aggregated_supported = ( 'backendServices', 'forwardingRules', 'targetHttpProxies', 'targetHttpsProxies', 'targetTcpProxies', ) class LbApiStub: """Mock object to simulate compute engine networking api calls. This object is created by GceApiStub, not used directly in test scripts. """ def __init__(self, mock_state): self.mock_state = mock_state def aggregatedList(self, project): if self.mock_state == 'forwardingRules': return apis_stub.RestCallStub(project, 'compute-aggregated-forwardingRules') if self.mock_state == 'backendServices': return apis_stub.RestCallStub(project, 'compute-aggregated-backendServices') else: raise ValueError(f'cannot call method {self.mock_state} here') # pylint: disable=redefined-builtin def list(self, project, region=None): if self.mock_state == 'backendServices': return apis_stub.RestCallStub(project, 'compute-backendServices') if self.mock_state == 'regionBackendServices': return apis_stub.RestCallStub(project, f'compute-backendServices-{region}') else: raise ValueError(f'cannot call method {self.mock_state} here') def get( self, project, region=None, backendService=None, forwardingRule=None, ): self.region = region self.project = project if self.mock_state in backend_service_states and backendService: self.backend_service = backendService return self elif self.mock_state in forwarding_rule_states and forwardingRule: self.forwarding_rule = forwardingRule return self else: raise ValueError(f'cannot call method {self.mock_state} here') def getHealth(self, project, backendService, body, region=None): backend_url_parts = body.get('group').split('/') backend_name, backend_type, backend_scope = ( backend_url_parts[-1], backend_url_parts[-2], backend_url_parts[-3], ) if self.mock_state == 'backendServices': stub_name = (f'backendService-{backendService}-get-health-{backend_type}-' f'{backend_name}-{backend_scope}') return apis_stub.RestCallStub(project, stub_name) if self.mock_state == 'regionBackendServices': stub_name = (f'regionBackendService-{backendService}-{region}-get-health-' f'{backend_type}-{backend_name}-{backend_scope}') return apis_stub.RestCallStub(project, stub_name) else: raise ValueError(f'cannot call method {self.mock_state} here') def _get_resources_from_json_items(self, items: Any, resource_name: str): if resource_name in aggregated_supported: items_by_scope = items[f'regions/{self.region}' if self. region else 'global'] return items_by_scope[resource_name] return items def execute(self, num_retries=0): json_dir = apis_stub.get_json_dir(self.project) if self.mock_state in backend_service_states: resource_name = 'backendServices' elif self.mock_state in forwarding_rule_states: resource_name = 'forwardingRules' else: resource_name = self.mock_state json_file_name = (f'compute-aggregated-{resource_name}.json' if resource_name in aggregated_supported else f'compute-{resource_name}.json') with open(json_dir / f'{json_file_name}', encoding='utf-8') as json_file: items = json.load(json_file)['items'] resources = self._get_resources_from_json_items(items, resource_name) if not resources: raise errors.HttpError( httplib2.Response({ 'status': 404, 'reason': 'Not Found' }), b'The resource is not found', ) if self.mock_state in backend_service_states: for backend_service in resources: if backend_service['name'] == self.backend_service: return backend_service else: raise errors.HttpError( httplib2.Response({ 'status': 404, 'reason': 'Not Found' }), f'The backend service {self.backend_service} is not found'. encode(), ) elif self.mock_state in forwarding_rule_states: for forwarding_rule in resources: if forwarding_rule['name'] == self.forwarding_rule: return forwarding_rule else: raise errors.HttpError( httplib2.Response({ 'status': 404, 'reason': 'Not Found' }), f'The forwarding rule {self.forwarding_rule} is not found'. encode(), ) else: raise ValueError(f'cannot call method {self.mock_state} here') def list_next(self, prev_request, prev_response): return None class SslCertificateApiStub: """Mock object to simulate SSL certificate api calls""" def __init__(self, mock_state): self.mock_state = mock_state def get(self, project, sslCertificate=None, region=None): if sslCertificate: self.ssl_certificate = sslCertificate self.project = project self.region = region return self else: raise ValueError(f'cannot call method {self.mock_state} here') def execute(self, num_retries=0): json_dir = apis_stub.get_json_dir(self.project) json_file_name = f'compute-{self.mock_state}.json' if self.mock_state == 'regionSslCertificates': json_file_name = f'compute-{self.mock_state}-{self.region}.json' with open(json_dir / json_file_name, encoding='utf-8') as json_file: ssl_certificates = json.load(json_file)['items'] # search for and get the ssl certificate if ssl_certificates: for ssl_certificate in ssl_certificates: if ssl_certificate['name'] == self.ssl_certificate: return ssl_certificate raise errors.HttpError( httplib2.Response({ 'status': 404, 'reason': 'Not Found' }), f'The SSL certificate {self.ssl_certificate} is not found'.encode(), ) else: raise ValueError(f'cannot call method {self.mock_state} here') class TargetProxyStub: """Mock object to simulate target proxy api calls""" def __init__(self, mock_state): self.mock_state = mock_state def aggregatedList(self, project): return apis_stub.RestCallStub(project, f'compute-aggregated-{self.mock_state}') def list(self, project): return apis_stub.RestCallStub(project, f'compute-{self.mock_state}') def get( self, project, region=None, targetHttpProxy=None, targetHttpsProxy=None, targetSslProxy=None, targetGrpcProxy=None, targetTcpProxy=None, ): self.region = region self.project = project if self.mock_state in target_tcp_proxy_states and targetTcpProxy: self.target_proxy = targetTcpProxy return self if self.mock_state in target_https_proxy_states and targetHttpsProxy: self.target_proxy = targetHttpsProxy return self if self.mock_state in target_http_proxy_states and targetHttpProxy: self.target_proxy = targetHttpProxy return self if self.mock_state in target_ssl_proxy_states and targetSslProxy: self.target_proxy = targetSslProxy return self if self.mock_state in target_grpc_proxy_states and targetGrpcProxy: self.target_proxy = targetGrpcProxy return self else: raise ValueError(f'cannot call method {self.mock_state} here') def execute(self, num_retries=0): json_dir = apis_stub.get_json_dir(self.project) json_file_name = f'compute-{self.mock_state}.json' if self.region: json_file_name = f'compute-{self.mock_state}-{self.region}.json' with open(json_dir / json_file_name, encoding='utf-8') as json_file: target_proxies = json.load(json_file)['items'] # search for and get the ssl certificate if target_proxies: for target_proxy in target_proxies: if target_proxy['name'] == self.target_proxy: return target_proxy raise errors.HttpError( httplib2.Response({ 'status': 404, 'reason': 'Not Found' }), f'The Target proxy {self.target_proxy} is not found'.encode(), ) else: raise ValueError(f'cannot call method {self.mock_state} here') ================================================ FILE: gcpdiag/queries/lb_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in lb.py.""" import unittest import urllib.parse from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, lb DUMMY_PROJECT_ID = 'gcpdiag-lb1-aaaa' DUMMY_PROJECT2_ID = 'gcpdiag-lb2-aaaa' DUMMY_PROJECT3_ID = 'gcpdiag-lb3-aaaa' DUMMY_PORT = 80 DUMMY_PROTOCOL = 'HTTP' DUMMY_URLMAP_NAME = 'web-map-http' DUMMY_TARGET_NAME = 'http-lb-proxy' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestURLMap(unittest.TestCase): """Test lb.URLMap.""" def test_get_backend_services(self): """get_backend_services returns the right backend services matched by name.""" context = models.Context(project_id=DUMMY_PROJECT_ID) obj_list = lb.get_backend_services(context.project_id) assert len(obj_list) == 1 n = obj_list[0] assert n.session_affinity == 'NONE' assert n.locality_lb_policy == 'ROUND_ROBIN' def test_get_backend_service_global(self): context = models.Context(project_id=DUMMY_PROJECT2_ID) obj = lb.get_backend_service(context.project_id, 'web-backend-service') assert obj.name == 'web-backend-service' assert obj.session_affinity == 'NONE' assert obj.locality_lb_policy == 'ROUND_ROBIN' assert obj.protocol == 'HTTP' assert obj.load_balancer_type == lb.LoadBalancerType.CLASSIC_APPLICATION_LB assert obj.health_check == 'http-basic-check' assert not obj.health_check_region def test_get_backend_service_regional(self): context = models.Context(project_id=DUMMY_PROJECT2_ID) obj = lb.get_backend_service(context.project_id, 'backend-service-2', 'europe-west4') assert obj.name == 'backend-service-2' assert obj.region == 'europe-west4' assert obj.session_affinity == 'NONE' assert obj.locality_lb_policy == 'ROUND_ROBIN' assert obj.protocol == 'TCP' assert obj.load_balancer_type == lb.LoadBalancerType.EXTERNAL_PASSTHROUGH_LB assert obj.health_check == 'tcp-basic-check-2' assert obj.health_check_region == 'europe-west4' def test_get_backend_service_health_implicit_global(self): context = models.Context(project_id=DUMMY_PROJECT2_ID) states_list = lb.get_backend_service_health(context, 'web-backend-service') assert len(states_list) == 2 assert states_list[0].health_state == 'UNHEALTHY' def test_get_backend_service_health_explicit_global(self): context = models.Context(project_id=DUMMY_PROJECT2_ID) states_list = lb.get_backend_service_health(context, 'web-backend-service', 'global') assert len(states_list) == 2 assert states_list[0].health_state == 'UNHEALTHY' def test_get_backend_service_health_regional(self): context = models.Context(project_id=DUMMY_PROJECT2_ID) states_list = lb.get_backend_service_health(context, 'backend-service-2', 'europe-west4') assert len(states_list) == 1 assert states_list[0].health_state == 'UNHEALTHY' def test_get_forwarding_rules(self): """get_forwarding_rules returns the right forwarding rules matched by name.""" forwarding_rules = lb.get_forwarding_rules(project_id=DUMMY_PROJECT_ID) assert len(forwarding_rules) == 1 forwarding_rule = forwarding_rules[0] assert forwarding_rule.name == 'forwardingRule1' assert forwarding_rule.short_path == 'gcpdiag-lb1-aaaa/forwardingRule1' def test_get_forwarding_rule_regional(self): """get_forwarding_rule returns the right forwarding rule matched by name.""" forwarding_rule = lb.get_forwarding_rule( project_id=DUMMY_PROJECT2_ID, forwarding_rule_name='forwardingRule1', region='us-west1', ) assert forwarding_rule.name == 'forwardingRule1' assert forwarding_rule.short_path == 'gcpdiag-lb2-aaaa/forwardingRule1' assert (forwarding_rule.load_balancer_type == lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB) def test_get_forwarding_rule_global(self): """get_forwarding_rule returns the right forwarding rule matched by name.""" forwarding_rule = lb.get_forwarding_rule( project_id=DUMMY_PROJECT3_ID, forwarding_rule_name='https-content-rule', ) assert forwarding_rule.name == 'https-content-rule' assert (forwarding_rule.load_balancer_type == lb.LoadBalancerType.CLASSIC_APPLICATION_LB) def test_forwarding_rule_related_backend_service_http(self): forwarding_rule = lb.get_forwarding_rule( project_id=DUMMY_PROJECT3_ID, forwarding_rule_name='https-content-rule') related_backend_service = forwarding_rule.get_related_backend_services() assert len(related_backend_service) == 1 assert related_backend_service[0].name == 'web-backend-service' def test_get_ssl_certificate_global(self): """get_ssl_certificate returns the right SSL certificate matched by name.""" obj = lb.get_ssl_certificate(project_id=DUMMY_PROJECT3_ID, certificate_name='cert1') assert obj.name == 'cert1' assert obj.type == 'MANAGED' self.assertTrue( any( urllib.parse.urlparse('//' + d).hostname == 'natka123.com' for d in obj.domains)) self.assertTrue( any( urllib.parse.urlparse('//' + d).hostname == 'second.natka123.com' for d in obj.domains)) def test_get_target_https_proxies(self): """get_target_https_proxy returns the list of target https proxies.""" items = lb.get_target_https_proxies(project_id=DUMMY_PROJECT3_ID) assert len(items) == 2 assert items[0].name == 'https-lb-proxy' assert ( items[0].full_path == 'projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy') assert items[1].name == 'https-lb-proxy-working' def test_get_target_ssl_proxies(self): """get_target_https_proxy returns the list of target ssl proxies.""" items = lb.get_target_ssl_proxies(project_id=DUMMY_PROJECT3_ID) assert len(items) == 1 assert items[0].name == 'ssl-proxy' assert (items[0].full_path == 'projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy') def test_get_lb_insights_for_a_project(self): context = models.Context(project_id=DUMMY_PROJECT2_ID) lb_insights = lb.get_lb_insights_for_a_project(context.project_id) assert lb_insights[0].is_health_check_port_mismatch_insight assert lb_insights[1].is_firewall_rule_insight ================================================ FILE: gcpdiag/queries/logs.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to Cloud Logging. The main functionality is querying log entries, which is supposed to be used as follows: 1. Call query() with the logs query parameters that you need. This returns a LogsQuery object which can be used to retrieve the logs later. 2. Call execute_queries() to execute all log query jobs. Similar queries will be grouped together to minimize the number of required API calls. Multiple queries will be done in parallel, while always respecting the Cloud Logging limit of 60 queries per 60 seconds. 3. Use the entries property on the LogsQuery object to iterate over the fetched logs. Note that the entries are not guaranteed to be filtered by what was given in the "filter_str" argument to query(), you will need to filter out the entries in code as well when iterating over the log entries. Side note: this module is not called 'logging' to avoid using the same name as the standard python library for logging. """ import concurrent.futures import dataclasses import datetime import logging import threading from typing import (Any, Deque, Dict, List, Mapping, Optional, Sequence, Set, Tuple, Union) import dateutil.parser import ratelimit from boltons.iterutils import get_path from googleapiclient import errors from gcpdiag import caching, config, executor, models, utils from gcpdiag.queries import apis @dataclasses.dataclass class _LogsQueryJob: """A group of log queries that will be executed with a single API call.""" project_id: str resource_type: str log_name: str filters: Set[str] future: Optional[concurrent.futures.Future] = None class LogsQuery: """A log search job that was started with prefetch_logs().""" job: _LogsQueryJob def __init__(self, job): self.job = job @property def entries(self) -> Sequence: if not self.job.future: raise RuntimeError( 'log query was\'t executed. did you forget to call execute_queries()?' ) elif self.job.future.running(): logging.debug( 'waiting for logs query results (project: %s, resource type: %s)', self.job.project_id, self.job.resource_type) return self.job.future.result() jobs_todo: Dict[Tuple[str, str, str], _LogsQueryJob] = {} class LogEntryShort: """A common log entry""" _text: str _timestamp: Optional[datetime.datetime] def __init__(self, raw_entry): if isinstance(raw_entry, dict): self._text = get_path(raw_entry, ('textPayload',), default='') self._timestamp = log_entry_timestamp(raw_entry) if isinstance(raw_entry, str): self._text = raw_entry # we could extract timestamp from serial entries # but they are not always present # and may be unreliable as we don't know the system clock setting self._timestamp = None @property def text(self): return self._text @property def timestamp(self): return self._timestamp @property def timestamp_iso(self): if self._timestamp: return self._timestamp.astimezone().isoformat(sep=' ', timespec='seconds') return None class LogExclusion(models.Resource): """A log exclusion entry""" _resource_data: dict project_id: str def __init__(self, project_id: str, resource_data: dict): super().__init__(project_id) self._resource_data = resource_data @property def full_path(self) -> str: return self._resource_data['name'] @property def filter(self) -> str: return self._resource_data['filter'] @property def disabled(self) -> bool: if 'disabled' in self._resource_data: return self._resource_data['disabled'] return False def query(project_id: str, resource_type: str, log_name: str, filter_str: str) -> LogsQuery: # Aggregate by project_id, resource_type, log_name job_key = (project_id, resource_type, log_name) job = jobs_todo.setdefault( job_key, _LogsQueryJob( project_id=project_id, resource_type=resource_type, log_name=log_name, filters=set(), )) job.filters.add(filter_str) return LogsQuery(job=job) @ratelimit.sleep_and_retry @ratelimit.limits(calls=config.get('logging_ratelimit_requests'), period=config.get('logging_ratelimit_period_seconds')) def _ratelimited_execute(req): """Wrapper to req.execute() with rate limiting to avoid hitting quotas.""" try: return req.execute(num_retries=config.API_RETRIES) except errors.HttpError as err: logging.error('failed to execute logging request for request %s. Error: %s', req, err) raise utils.GcpApiError(err) from err def _execute_query_job(job: _LogsQueryJob, context: models.Context): ## pylint: disable=unused-argument thread = threading.current_thread() thread.name = f'log_query:{job.log_name}' logging_api = apis.get_api('logging', 'v2', job.project_id) # Convert "within" relative time to an absolute timestamp. start_time = datetime.datetime.now( datetime.timezone.utc) - datetime.timedelta( days=config.get('within_days')) filter_lines = ['timestamp>"%s"' % start_time.isoformat(timespec='seconds')] filter_lines.append('resource.type="%s"' % job.resource_type) if job.log_name.startswith('log_id('): # Special case: log_id(logname) # https://cloud.google.com/logging/docs/view/logging-query-language#functions filter_lines.append(job.log_name) else: filter_lines.append('logName="%s"' % job.log_name) if len(job.filters) == 1: filter_lines.append('(' + next(iter(job.filters)) + ')') else: filter_lines.append( '(' + ' OR '.join(['(' + val + ')' for val in sorted(job.filters)]) + ')') filter_str = '\n'.join(filter_lines) logging.debug('searching logs in project %s (resource type: %s)', job.project_id, job.resource_type) # Fetch all logs and put the results in temporary storage (diskcache.Deque) deque = caching.get_tmp_deque('tmp-logs-') req = logging_api.entries().list( body={ 'resourceNames': [f'projects/{job.project_id}'], 'filter': filter_str, 'orderBy': 'timestamp desc', 'pageSize': config.get('logging_page_size') }) fetched_entries_count = 0 query_pages = 0 query_start_time = datetime.datetime.now() while req is not None: query_pages += 1 res = _ratelimited_execute(req) if 'entries' in res: for e in res['entries']: fetched_entries_count += 1 deque.appendleft(e) # Verify that we aren't above limits, exit otherwise. if fetched_entries_count > config.get('logging_fetch_max_entries'): logging.warning( 'maximum number of log entries (%d) reached (project: %s, query: %s).', config.get('logging_fetch_max_entries'), job.project_id, filter_str.replace('\n', ' AND ')) return deque run_time = (datetime.datetime.now() - query_start_time).total_seconds() if run_time >= config.get('logging_fetch_max_time_seconds'): logging.warning( 'maximum query runtime for log query reached (project: %s, query: %s).', job.project_id, filter_str.replace('\n', ' AND ')) return deque req = logging_api.entries().list_next(req, res) if req is not None: logging.debug( 'still fetching logs (project: %s, resource type: %s, max wait: %ds)', job.project_id, job.resource_type, config.get('logging_fetch_max_time_seconds') - run_time) query_end_time = datetime.datetime.now() logging.debug('logging query run time: %s, pages: %d, query: %s', query_end_time - query_start_time, query_pages, filter_str.replace('\n', ' AND ')) return deque @caching.cached_api_call def realtime_query(project_id, filter_str, start_time, end_time, disable_paging=False): """Intended for use in only runbooks. use logs.query() for lint rules.""" logging_api = apis.get_api('logging', 'v2', project_id) filter_lines = [filter_str] filter_lines.append('timestamp>"%s"' % start_time.isoformat(timespec='seconds')) filter_lines.append('timestamp<"%s"' % end_time.isoformat(timespec='seconds')) filter_str = '\n'.join(filter_lines) logging.debug('searching logs in project %s for logs between %s and %s', project_id, str(start_time), str(end_time)) deque = Deque() req = logging_api.entries().list( body={ 'resourceNames': [f'projects/{project_id}'], 'filter': filter_str, 'orderBy': 'timestamp desc', 'pageSize': config.get('logging_page_size') }) fetched_entries_count = 0 query_pages = 0 query_start_time = datetime.datetime.now() while req is not None: query_pages += 1 res = _ratelimited_execute(req) if 'entries' in res: for e in res['entries']: fetched_entries_count += 1 deque.appendleft(e) # Verify that we aren't above limits, exit otherwise. if fetched_entries_count > config.get('logging_fetch_max_entries'): logging.warning( 'maximum number of log entries (%d) reached (project: %s, query:' ' %s).', config.get('logging_fetch_max_entries'), project_id, filter_str.replace('\n', ' AND '), ) return deque run_time = (datetime.datetime.now() - query_start_time).total_seconds() if run_time >= config.get('logging_fetch_max_time_seconds'): logging.warning( 'maximum query runtime for log query reached (project: %s, query:' ' %s).', project_id, filter_str.replace('\n', ' AND '), ) return deque if disable_paging: break req = logging_api.entries().list_next(req, res) if req is not None: logging.debug( 'still fetching logs (project: %s, max wait: %ds)', project_id, config.get('logging_fetch_max_time_seconds') - run_time, ) query_end_time = datetime.datetime.now() logging.debug( 'logging query run time: %s, pages: %d, query: %s', query_end_time - query_start_time, query_pages, filter_str.replace('\n', ' AND '), ) return deque def execute_queries(query_executor: executor.ContextAwareExecutor, context: models.Context): global jobs_todo jobs_executing = jobs_todo jobs_todo = {} for job in jobs_executing.values(): job.future = query_executor.submit(_execute_query_job, job, context) def log_entry_timestamp(log_entry: Mapping[str, Any]) -> datetime.datetime: # Use receiveTimestamp so that we don't have any time synchronization issues # (i.e. don't trust the timestamp field) timestamp = log_entry.get('receiveTimestamp', None) if timestamp: return dateutil.parser.parse(timestamp) return timestamp def format_log_entry(log_entry: dict) -> str: """Format a log_entry, as returned by LogsQuery.entries to a simple one-line string with the date and message.""" log_message = None if 'jsonPayload' in log_entry: for key in ['message', 'MESSAGE']: if key in log_entry['jsonPayload']: log_message = log_entry['jsonPayload'][key] break if log_message is None: log_message = log_entry.get('textPayload') log_date = log_entry_timestamp(log_entry) log_date_str = log_date.astimezone().isoformat(sep=' ', timespec='seconds') return f'{log_date_str}: {log_message}' def exclusions(project_id: str) -> Union[List[LogExclusion], None]: logging_api = apis.get_api('logging', 'v2', project_id) if not apis.is_enabled(project_id, 'logging'): return None log_exclusions: List[LogExclusion] = [] fetched_entries_count = 0 req = logging_api.exclusions().list(parent=f'projects/{project_id}') while req is not None: res = req.execute(num_retries=config.API_RETRIES) fetched_entries_count += 1 if res: for log_exclusion_resp in res['exclusions']: log_exclusions.append(LogExclusion(project_id, log_exclusion_resp)) req = logging_api.exclusions().list_next(req, res) if req is not None: # pylint: disable=logging-fstring-interpolation logging.debug(f'still fetching log exclusions for project {project_id}') # pylint: enable=logging-fstring-interpolation return log_exclusions ================================================ FILE: gcpdiag/queries/logs_helper/__init__.py ================================================ """ Simple decorator injecting real logs.query into PureLogsQuery """ from gcpdiag.queries import logs from .logs_query import LogsQuery as PureLogsQuery from .search_exprs import AnyREFound, Equals, REFound class LogsQuery: """ Simple decorator injecting real logs.query into PureLogsQuery """ def __init__(self, *args, **kwargs): self._pure_logs_query = PureLogsQuery(logs_query_fn=logs.query, *args, **kwargs) def mk_query(self): self._pure_logs_query.mk_query() @property def has_matching_entries(self): return self._pure_logs_query.has_matching_entries def get_unique(self, fn): return self._pure_logs_query.get_unique(fn) ================================================ FILE: gcpdiag/queries/logs_helper/logs_query.py ================================================ """ Helper to work with gcpdiag.queries.logs module """ from functools import cached_property class LogsQuery: """ Encapsulates gcpdiag queries to Cloud Logging By default gcpdiag logs module combines different logging queries into a single query. Therefore we might by simply inspecting the output of gcpdiag's logs module query we might face unrelated log entries. So we have to filter entries again. This helper class helps with accomplishing this double filtering. It receives a parameter search_exprs, which contains a list of classes (see logs_helper/logs_query.py) encapsulating search operations both for Cloud Logging filter and later python filter. Example: LogsQuery( ... search_exprs=[ REFound(field='textPayload', re_exp='.*hello world.*'), ], ... ) is basically the same as fetching textPayload=~'.*hello world.*' from Cloud Logging using logs.query and then filter, like: if logs_by_project.get(context.project_id) and \ logs_by_project[context.project_id].entries: for log_entry in logs_by_project[context.project_id].entries: # Filter out non-relevant log entries. if re.match('.*hello world.*', log_entry['textPayload']) and ...: continue # Do something with the matching entry it abstracts usual questions we're asking to Cloud Logging: - if we have any such entries at all (has_matching_entries method) - extract a list of unique values from all relevant log entries (get_unique method) Example - getting unique dataflow job ids that have matching entries: def prepare_rule(...): global query query = LogsQuery(...) query.mk_query() def run_rule(...): unique_jobs = logs_query.get_unique( lambda e: get_path(e, ('resource', 'labels', 'job_name'), default='unknown job') ) This will give us unique resource.labels.job_name values found among matching entries. IMPORTANT: gcpdiag's logs.query are supposed to be used only in prepare_rule(), so LogsQuery needs to be defined and run (mk_query method) there as well. """ def __init__(self, project_id, resource_type, log_name, search_exprs, logs_query_fn): self._project_id = project_id self._resource_type = resource_type self._log_name = log_name self._search_exprs = search_exprs self._logs_query_fn = logs_query_fn self.project_id = None self._result = None def mk_query(self): self._result = self._logs_query_fn(project_id=self._project_id, resource_type=self._resource_type, log_name=self._log_name, filter_str=self._stackdriver_expr) @cached_property def has_matching_entries(self): if not self._result or not self._result.entries: return False return any(self._is_log_entry_matches(e) for e in self._result.entries) def get_unique(self, fn): if not self._result or not self._result.entries: return set() return { fn(e) for e in self._result.entries if self._is_log_entry_matches(e) } @property def _stackdriver_expr(self): return ' AND '.join(e.stackdriver_expr for e in self._search_exprs) def _is_log_entry_matches(self, log_entry): return all(e.is_log_entry_matches(log_entry) for e in self._search_exprs) ================================================ FILE: gcpdiag/queries/logs_helper/logs_query_test.py ================================================ """ Unit tests for LogsQuery """ from unittest import TestCase from boltons.iterutils import get_path from .logs_query import LogsQuery from .search_exprs import Equals class FakeLogsResult: def __init__(self, entries): self.entries = entries class FakeLogsQueryFn: """ Testing double for gcpdiag.queries.logs.query """ def __init__(self, entries): self._entries = entries def __call__(self, project_id, resource_type, log_name, filter_str): key = (project_id, resource_type, log_name, filter_str) print(key) if key not in self._entries: raise RuntimeError(f'Unexpected call {key}') return self._entries[key] ENTRIES1 = [ { 'one': { 'two': 'five' } }, { 'one': { 'two': 'three' } }, { 'one': { 'two': 'six' } }, { 'one': { 'three': 'three' } }, ] ENTRIES2 = [ { 'one': { 'two': 'five', 'data': 'alpha' } }, { 'one': { 'two': 'eight', 'data': 'beta' } }, { 'one': { 'two': 'eight', 'data': 'gamma' } }, { 'one': { 'two': 'six' } }, { 'one': { 'two': 'eight' } }, { 'one': { 'two': 'eight', 'data': 'gamma' } }, ] class TestLogsQuery(TestCase): """ Unit tests for LogsQuery """ def setUp(self): self._logs_query_fn = FakeLogsQueryFn( entries={ ('mytestproject', 'mytestresource', 'mytestlogname', 'one.two="three"'): FakeLogsResult(ENTRIES1), ('mytestproject', 'mytestresource', 'mytestlogname', 'one.two="seven"'): FakeLogsResult(ENTRIES1), ('mytestproject', 'mytestresource', 'mytestlogname', 'one.two="eight"'): FakeLogsResult(ENTRIES2), ('emptylogs', 'mytestresource', 'mytestlogname', 'one.two="three"'): FakeLogsResult([]), ('noresult', 'mytestresource', 'mytestlogname', 'one.two="three"'): FakeLogsResult([]), }) def _create_query(self, search_exprs, project_id=None): return LogsQuery(project_id=project_id or 'mytestproject', resource_type='mytestresource', log_name='mytestlogname', search_exprs=search_exprs, logs_query_fn=self._logs_query_fn) def test_no_result(self): query = self._create_query([Equals(field='one.two', value='three')], project_id='noresult') query.mk_query() self.assertFalse(query.has_matching_entries) def test_empty_entries(self): query = self._create_query([Equals(field='one.two', value='three')], project_id='emptylogs') query.mk_query() self.assertFalse(query.has_matching_entries) def test_found(self): query = self._create_query([Equals(field='one.two', value='three')]) query.mk_query() self.assertTrue(query.has_matching_entries) def test_not_found(self): query = self._create_query([Equals(field='one.two', value='seven')]) query.mk_query() self.assertFalse(query.has_matching_entries) def test_unique(self): query = self._create_query([Equals(field='one.two', value='eight')]) query.mk_query() unique = query.get_unique( lambda e: get_path(e, ('one', 'data'), default='unknown')) self.assertSetEqual(unique, {'unknown', 'beta', 'gamma'}) def test_unique_found(self): query = self._create_query([Equals(field='one.two', value='eight')]) query.mk_query() unique = query.get_unique( lambda e: get_path(e, ('one', 'data'), default='unknown')) self.assertSetEqual(unique, {'unknown', 'beta', 'gamma'}) ================================================ FILE: gcpdiag/queries/logs_helper/search_exprs.py ================================================ """ Search terms for LogsQueres """ import re from functools import cached_property from boltons.iterutils import get_path class Equals: """ Filter log entries that has field=value Example: query = LogsQuery( ... search_exprs=[ Equals( field='labels.hello.world', value='forty two', ), ], ... ) query.mk_query() """ def __init__(self, field, value): self._field = field self._value = value @property def stackdriver_expr(self): return f'{self._field}="{self._value}"' def is_log_entry_matches(self, log_entry): value = get_path(log_entry, self._field.split('.'), default=None) if value is None: return False return value == self._value class REFound: """ Filter log entries that contain specified regex in the specified field Example: query = LogsQuery( ... search_exprs=[ REFound( field='labels.hello.world', re_exp='Hello.*World', ), ], ... ) query.mk_query() """ def __init__(self, field, re_exp): self._field = field self._re_exp = re_exp @property def stackdriver_expr(self): return f'{self._field}=~"{self._re_exp}"' def is_log_entry_matches(self, log_entry): value = get_path(log_entry, self._field.split('.'), default=None) return bool(self._compiled_re.search(value)) @cached_property def _compiled_re(self): return re.compile(self._re_exp) class AnyREFound: """ Filter log entries that contain any of the specified regexes in the specified field Example: query = LogsQuery( ... search_exprs=[ AnyREFound( field='labels.hello.world', re_exps=[ 'Hello.*World', 'world.*hello', 'something [Ee]lse', ], ), ], ... ) query.mk_query() """ def __init__(self, field, re_exps): self._field = field self._re_exps = re_exps @property def stackdriver_expr(self): return '{field}=~({re_list})'.format(field=self._field, re_list=' OR '.join( f'"{p}"' for p in self._re_exps)) def is_log_entry_matches(self, log_entry): value = get_path(log_entry, self._field.split('.'), default=None) return any(r.search(value) for r in self._compiled_re_exps) @cached_property def _compiled_re_exps(self): return [re.compile(p) for p in self._re_exps] ================================================ FILE: gcpdiag/queries/logs_helper/search_exprs_test.py ================================================ """ Tests for search expressions for LogsQuery """ from unittest import TestCase from .search_exprs import AnyREFound, Equals, REFound class TestEquals(TestCase): """ Test Equals search expression """ def test_stackdriver_expr(self): expr = Equals(field='hello', value='world') self.assertEqual(expr.stackdriver_expr, 'hello="world"') def test_field_equals(self): entry = {'hello': 'world'} expr = Equals(field='hello', value='world') self.assertTrue(expr.is_log_entry_matches(entry)) def test_field_not_equals(self): entry = {'hello': 'world'} expr = Equals(field='hello', value='42') self.assertFalse(expr.is_log_entry_matches(entry)) def test_nested_stackdriver_expr(self): expr = Equals(field='one.two.three', value='four') self.assertEqual(expr.stackdriver_expr, 'one.two.three="four"') def test_nested_field_equals(self): entry = {'one': {'two': {'three': 'four'}}} expr = Equals(field='one.two.three', value='four') self.assertTrue(expr.is_log_entry_matches(entry)) def test_nested_field_not_equals(self): entry = {'one': {'two': {'three': 'four'}}} expr = Equals(field='one.two.three', value='five') self.assertFalse(expr.is_log_entry_matches(entry)) class TestREFound(TestCase): """ Test TestREFound search expression """ def test_stackdriver_expr(self): expr = REFound(field='hello', re_exp='.*world.*') self.assertEqual(expr.stackdriver_expr, 'hello=~".*world.*"') def test_found(self): entry = {'one': 'two three four'} expr = REFound(field='one', re_exp='.*three.*') self.assertTrue(expr.is_log_entry_matches(entry)) def test_not_found(self): entry = {'one': 'two three four'} expr = REFound(field='one', re_exp='.*five.*') self.assertFalse(expr.is_log_entry_matches(entry)) def test_nested_stackdriver_expr(self): expr = REFound(field='one.two.three', re_exp='.*four.*') self.assertEqual(expr.stackdriver_expr, 'one.two.three=~".*four.*"') def test_nested_found(self): entry = {'one': {'two': {'three': 'four five six'}}} expr = REFound(field='one.two.three', re_exp='.*five.*') self.assertTrue(expr.is_log_entry_matches(entry)) def test_nested_not_found(self): entry = {'one': {'two': {'three': 'four five six'}}} expr = REFound(field='one.two.three', re_exp='.*seven.*') self.assertFalse(expr.is_log_entry_matches(entry)) class TestAnyREFound(TestCase): """ Test TestAnyREFound search expression """ def test_stackdriver_expr_one_re(self): expr = AnyREFound(field='one', re_exps=['.*two.*']) self.assertEqual(expr.stackdriver_expr, 'one=~(".*two.*")') def test_stackdriver_expr_many_res(self): expr = AnyREFound(field='one', re_exps=['.*two.*', 'three', 'four']) self.assertEqual(expr.stackdriver_expr, 'one=~(".*two.*" OR "three" OR "four")') def test_found(self): entry = {'one': 'two three four'} expr = AnyREFound(field='one', re_exps=['.*three.*', '.*five.*', '.*six.*']) self.assertTrue(expr.is_log_entry_matches(entry)) def test_not_found(self): entry = {'one': 'two three four'} expr = AnyREFound(field='one', re_exps=['.*five.*', '.*six.*', '.*seven.*']) self.assertFalse(expr.is_log_entry_matches(entry)) def test_nested_stackdriver_expr_many_res(self): expr = AnyREFound(field='one.two.three', re_exps=['.*four.*', 'five', 'six']) self.assertEqual(expr.stackdriver_expr, 'one.two.three=~(".*four.*" OR "five" OR "six")') def test_nested_found(self): entry = {'one': {'two': {'three': 'five four six'}}} expr = AnyREFound(field='one.two.three', re_exps=['.*four.*', '.*seven.*', '.*eight.*']) self.assertTrue(expr.is_log_entry_matches(entry)) def test_nested_not_found(self): entry = {'one': {'two': {'three': 'five four six'}}} expr = AnyREFound(field='one.two.three', re_exps=['.*seven.*', '.*eight.*', '.*nine.*']) self.assertFalse(expr.is_log_entry_matches(entry)) ================================================ FILE: gcpdiag/queries/logs_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in logs.py for testing. Instead of doing real API calls, we return test JSON data. """ # pylint: disable=unused-argument # pylint: disable=invalid-name from gcpdiag import utils from gcpdiag.queries import apis_stub GKE1_PROJECT = 'gcpdiag-gke1-aaaa' logging_body = None class LoggingApiStub: """Mock object to simulate container api calls.""" body: str def __init__(self, mock_state='init', project_id=None, zone=None, page=1): self.mock_state = mock_state self.project_id = project_id self.zone = zone self.page = page def exclusions(self): return LoggingApiStub('exclusions') def entries(self): return LoggingApiStub('entries') def list(self, parent=None, body=None): if self.mock_state == 'entries': if body: global logging_body logging_body = body project = utils.get_project_by_res_name(body['resourceNames'][0]) return apis_stub.RestCallStub(project, 'logging-entries-1') elif self.mock_state == 'exclusions': if parent: return apis_stub.RestCallStub(project_id=parent.split('/')[1], json_basename='log-exclusions') def list_next(self, req, res): del req, res ================================================ FILE: gcpdiag/queries/logs_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in logs.py.""" import concurrent.futures import re import time from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, logs, logs_stub DUMMY_PROJECT_ID = 'gcpdiag-gke1-aaaa' FIRST_INSERT_ID = '-tt9mudi768' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestLogs: """Test logs.py functions.""" def test_single_query(self): context = models.Context(project_id=DUMMY_PROJECT_ID) query = logs.query( project_id=context.project_id, resource_type='gce_instance', log_name='fake.log', filter_str='filter1', ) with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: logs.execute_queries(executor, context) # verify the number of entries all_entries = list(query.entries) assert len(all_entries) > 0 # verify that the first log entry is correct (the earliest one) first = next(iter(query.entries)) assert first['insertId'] == FIRST_INSERT_ID def test_aggregated_query(self): """Verify that multiple queries get aggregated into one.""" context = models.Context(project_id=DUMMY_PROJECT_ID) logs.query(project_id=context.project_id, resource_type='gce_instance', log_name='fake.log', filter_str='filter1') logs.query(project_id=context.project_id, resource_type='gce_instance', log_name='fake.log', filter_str='filter2') with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: logs.execute_queries(executor, context) # verify the filter that is used assert re.match( r'timestamp>"\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\+00:00"\n' r'resource.type="gce_instance"\n' r'logName="fake.log"\n' r'\(\(filter1\) OR \(filter2\)\)', logs_stub.logging_body['filter']) # also verify other parameters of the job assert logs_stub.logging_body['orderBy'] == 'timestamp desc' assert logs_stub.logging_body['pageSize'] == 500 assert logs_stub.logging_body['resourceNames'] == [ 'projects/gcpdiag-gke1-aaaa' ] def test_format_log_entry(self): with mock.patch.dict('os.environ', {'TZ': 'America/Los_Angeles'}): time.tzset() assert logs.format_log_entry({ 'jsonPayload': { 'message': 'test message' }, 'receiveTimestamp': '2022-03-24T13:26:37.370862686Z' }) == '2022-03-24 06:26:37-07:00: test message' assert logs.format_log_entry({ 'jsonPayload': { 'MESSAGE': 'test message' }, 'receiveTimestamp': '2022-03-24T13:26:37.370862686Z' }) == '2022-03-24 06:26:37-07:00: test message' assert logs.format_log_entry({ 'textPayload': 'test message', 'receiveTimestamp': '2022-03-24T13:26:37.370862686Z' }) == '2022-03-24 06:26:37-07:00: test message' ================================================ FILE: gcpdiag/queries/looker.py ================================================ # Copyright 2025 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. """Queries related to GCP Looker Core.""" import logging from datetime import datetime, timedelta, timezone from typing import Dict, List, MutableMapping import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, apis_utils class Instance(models.Resource): """Represents a Looker Core Instance.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def full_path(self) -> str: return self._resource_data['name'] @property def short_path(self) -> str: return '/'.join(self.full_path.split('/')[-4:]) @property def status(self) -> str: return self._resource_data.get('state', 'STATE_UNSPECIFIED') @property def create_time(self) -> str: return self._resource_data.get('createTime', '') @property def update_time(self) -> str: return self._resource_data.get('updateTime', '') @property def platform_edition(self) -> str: return self._resource_data.get('platformEdition', '') @property def looker_version(self) -> str: return self._resource_data.get('lookerVersion', '') @property def looker_uri(self) -> str: return self._resource_data.get('lookerUri', '') class Operation(models.Resource): """Represents Looker Core long-running operation.""" def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: return self._resource_data.get('name', '') @property def name(self) -> str: return self._resource_data['name'].split('/')[-1] @property def metadata(self) -> dict: return self._resource_data.get('metadata', {}) @property def done(self) -> bool: return self._resource_data.get('done', False) @property def target(self) -> str: return self._resource_data.get('metadata', {}).get('target', '') @property def verb(self) -> str: return self._resource_data.get('metadata', {}).get('verb', '') @property def status(self) -> str: return 'Completed' if self._resource_data.get('done') else 'In Progress' @property def location_id(self) -> str: parts = self._resource_data.get('name', '').split('/') return parts[3] if len(parts) > 3 else '' @property def instance_name(self) -> str: parts = self.target.split('/') return parts[5] if len(parts) >= 6 else '' @property def operation_type(self) -> str: return self.verb @property def action(self) -> str: if self.verb == 'update' and not self.done: return 'Updating Instance' else: parts = self.target.split('/') return parts[6] if len(parts) >= 7 else '' @property def create_time(self) -> datetime: create_time_str = self._resource_data.get('metadata', {}).get('createTime', '') if create_time_str: return datetime.fromisoformat( create_time_str.rstrip('Z')).replace(tzinfo=timezone.utc) return datetime.now(timezone.utc) def _get_locations_to_scan(context: models.Context, looker_api) -> List[str]: """Returns a list of locations to scan based on the context.""" if context.locations_pattern: return str(context.locations_pattern.pattern).split('|') try: request = looker_api.projects().locations().list( name=f'projects/{context.project_id}') return [ loc['locationId'] for loc in apis_utils.list_all( request=request, next_function=looker_api.projects().locations().list_next, response_keyword='locations') ] except googleapiclient.errors.HttpError as err: logging.error('Error fetching locations: %s', err) raise utils.GcpApiError(err) from err @caching.cached_api_call def get_instances(context: models.Context) -> Dict[str, Instance]: """Get a list of Instances from the given GCP project.""" instances: Dict[str, Instance] = {} if not apis.is_enabled(context.project_id, 'looker'): return instances looker_api = apis.get_api('looker', 'v1', context.project_id) try: locations_to_scan = _get_locations_to_scan(context, looker_api) except utils.GcpApiError as err: raise err for loc_id in locations_to_scan: try: parent_path = f'projects/{context.project_id}/locations/{loc_id}' request = looker_api.projects().locations().instances().list( parent=parent_path) for inst in apis_utils.list_all( request=request, next_function=looker_api.projects().locations().instances().list_next, response_keyword='instances'): if not context.match_project_resource(resource=inst.get('name', '')): continue instance = Instance(project_id=context.project_id, resource_data=inst) instances[instance.name] = instance except googleapiclient.errors.HttpError as err: logging.warning('Could not list instances for location %s: %s', loc_id, err) continue return instances @caching.cached_api_call def get_operations( context: models.Context ) -> MutableMapping[str, MutableMapping[str, List[Operation]]]: """Get a list of recent operations from the given GCP project.""" location_instance_operations: MutableMapping[str, MutableMapping[ str, List[Operation]]] = {} if not apis.is_enabled(context.project_id, 'looker'): return location_instance_operations looker_api = apis.get_api('looker', 'v1', context.project_id) now = context.parameters.get('now', datetime.now(timezone.utc)) one_day_ago = now - timedelta(days=1) try: locations_to_scan = _get_locations_to_scan(context, looker_api) except utils.GcpApiError: return {} for location_id in locations_to_scan: try: op_request_name = f'projects/{context.project_id}/locations/{location_id}' operations_request = looker_api.projects().locations().operations().list( name=op_request_name) for resp_op in apis_utils.list_all(request=operations_request, next_function=looker_api.projects(). locations().operations().list_next, response_keyword='operations'): operation_details = looker_api.projects().locations().operations().get( name=resp_op['name']).execute(num_retries=config.API_RETRIES) operation = Operation(project_id=context.project_id, resource_data=operation_details) if operation.create_time >= one_day_ago: location_instance_operations.setdefault(operation.location_id, {}).setdefault( operation.instance_name, []).append(operation) except googleapiclient.errors.HttpError as err: logging.warning('Could not list operations for location %s: %s', location_id, err) continue return location_instance_operations ================================================ FILE: gcpdiag/queries/looker_stub.py ================================================ # Copyright 2025 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. """Stub API calls used in looker.py for testing.""" import json import re from datetime import datetime, timezone import googleapiclient.errors import httplib2 from gcpdiag.queries import apis_stub DUMMY_PROJECT_NAME_FOR_STUB = 'gcpdiag-looker1-aaaa' DUMMY_OP_LOCATION = 'us-central1' DUMMY_OP_ID = 'operation-1' class LookerApiStub(apis_stub.ApiStub): """Mock object for the Looker API.""" def __init__(self, project_id=None): super().__init__() self.project_id = project_id or DUMMY_PROJECT_NAME_FOR_STUB self._resource_type = None class _HttpRequest: def __init__(self, stub, resource_type, method, kwargs): self._stub = stub self._resource_type = resource_type self._method = method self._kwargs = kwargs def execute(self, num_retries=0): return self._stub.execute_request(self._resource_type, self._method, self._kwargs, num_retries) def projects(self): return self def locations(self): self._resource_type = 'locations' return self def instances(self): self._resource_type = 'instances' return self def operations(self): self._resource_type = 'operations' return self def list(self, **kwargs): if self._resource_type == 'instances': return apis_stub.RestCallStub(self.project_id, 'looker-instances') return self._HttpRequest(self, self._resource_type, 'list', kwargs) def get(self, **kwargs): if self._resource_type == 'instances': name = kwargs.get('name') m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)', name) if not m: raise KeyError('Invalid instance name format') return apis_stub.RestCallStub(self.project_id, f'instance-{m.group(3)}') return self._HttpRequest(self, self._resource_type, 'get', kwargs) def get_operations(self, **kwargs): return self._HttpRequest(self, 'operations', 'get', kwargs) # pylint: disable=useless-return def list_next(self, previous_request, previous_response=None): _, _ = previous_request, previous_response return None def execute_request(self, resource_type, method, kwargs, num_retries=0): _ = num_retries if resource_type == 'locations' and method == 'list': parent_path = kwargs.get('name') or f'projects/{self.project_id}' return { 'locations': [{ 'name': f'{parent_path}/locations/{DUMMY_OP_LOCATION}', 'locationId': DUMMY_OP_LOCATION }, { 'name': f'{parent_path}/locations/europe-west1', 'locationId': 'europe-west1' }] } if resource_type == 'operations' and method == 'list': ops = [] parent_path = kwargs.get('name') if parent_path and DUMMY_OP_LOCATION in parent_path: project_id = parent_path.split('/')[1] ops.append({ 'name': (f'projects/{project_id}/locations/{DUMMY_OP_LOCATION}/' f'operations/{DUMMY_OP_ID}'), 'metadata': { 'verb': 'update' }, 'done': False }) return {'operations': ops} if resource_type == 'operations' and method == 'get': request_path = kwargs.get('name') or '' if DUMMY_OP_ID in request_path and DUMMY_OP_LOCATION in request_path: project_id = request_path.split('/')[1] op_path = ( f'projects/{project_id}/locations/{DUMMY_OP_LOCATION}/operations/{DUMMY_OP_ID}' ) target_path = (f'projects/{project_id}/locations/' f'{DUMMY_OP_LOCATION}/instances/' f'gcpdiag-test-01/databases/' f'my-db') return { 'name': op_path, 'metadata': { 'createTime': datetime.now(timezone.utc).isoformat(), 'target': target_path, 'verb': 'update' }, 'done': True, 'response': {} } raise googleapiclient.errors.HttpError( httplib2.Response({'status': 404}), b'Operation not found by GET stub') raise NotImplementedError( f'API call not stubbed in LookerApiStub.execute_request: ' f'resource_type={resource_type}, method={method}') class LookerInstanceRestCallStub(apis_stub.RestCallStub): """Mock object to simulate api calls for Looker instances.""" def execute(self, num_retries=0): _ = num_retries json_dir = apis_stub.get_json_dir(self.project_id) try: with open(json_dir / 'looker-instances.json', encoding='utf-8') as json_file: return json.load(json_file) except FileNotFoundError as exc: raise googleapiclient.errors.HttpError(httplib2.Response({'status': 404}), b'File not found') from exc ================================================ FILE: gcpdiag/queries/looker_test.py ================================================ # Copyright 2025 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. """Test code in looker.py.""" import datetime from datetime import timezone from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, looker DUMMY_PROJECT_NAME = 'gcpdiag-looker1-aaaa' DUMMY_I_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/us-central1/instances/gcpdiag-test-01' DUMMY_OP_LOCATION = ['us-central1'] DUMMY_OP_ID = 'operation-1' # This FAKE_NOW must correspond to the DUMMY_TIMESTAMP in the stub FAKE_NOW = datetime.datetime.now(timezone.utc) @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestInstance: """Test Looker.Instances.""" def test_get_instances_by_project(self): """get_instances returns the number of instances in the given project.""" context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=DUMMY_OP_LOCATION) instances = looker.get_instances(context) assert DUMMY_I_NAME in instances assert len(instances) >= 1 @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestOperation: """Test gcpdiag.queries.looker for operations.""" def test_get_operations_by_project(self): """Test that get_operations retrieves and structures data correctly.""" context = models.Context(project_id=DUMMY_PROJECT_NAME, locations=DUMMY_OP_LOCATION, parameters={'now': FAKE_NOW}) operations_by_location = looker.get_operations(context) expected_instance_name = 'gcpdiag-test-01' location_str = DUMMY_OP_LOCATION[0] assert operations_by_location, 'The returned operations dictionary is empty.' assert location_str in operations_by_location, ( f"Location '{location_str}' not found as a key. " f'Keys: {list(operations_by_location.keys())}') operations_at_location = operations_by_location[location_str] assert operations_at_location, \ f"No operations found for location '{location_str}'." assert expected_instance_name in operations_at_location, ( f"Instance '{expected_instance_name}' not found for location " f"'{location_str}'. Instance keys: {list(operations_at_location.keys())}" ) op_list = operations_at_location[expected_instance_name] assert op_list and len(op_list) >= 1, ( f"Expected at least one operation for instance '{expected_instance_name}'." ) found_operation_1 = any(op.name == DUMMY_OP_ID for op in op_list) assert found_operation_1, ( f"Operation with ID '{DUMMY_OP_ID}' not found in the list for instance " f"'{expected_instance_name}' in location '{location_str}'.") ================================================ FILE: gcpdiag/queries/monitoring.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to Monitoring / Metrics / MQL.""" import collections.abc import datetime import logging import time from typing import Any, List, Mapping import googleapiclient.errors from gcpdiag import config, utils from gcpdiag.queries import apis # see: https://cloud.google.com/monitoring/api/ref_v3/rest/v3/TypedValue def _gcp_typed_values_to_python_list( typed_values: List[Mapping[str, Any]]) -> List[Any]: out_list: List[Any] = [] for val in typed_values: if 'boolValue' in val: out_list.append(int(val['boolValue'])) elif 'int64Value' in val: out_list.append(int(val['int64Value'])) elif 'doubleValue' in val: out_list.append(float(val['doubleValue'])) elif 'stringValue' in val: out_list.append(val['stringValue']) else: raise RuntimeError('TypedValue type not supported: %s' % (val.keys())) return out_list def period_aligned_now(period_seconds: int) -> str: """Return a MQL date string for the current timestamp aligned to the given period. This will return "now - now%period" in a MQL-parseable date string and is useful to get stable results. See also: (internal) """ now = time.time() now -= now % period_seconds return time.strftime('%Y/%m/%d-%H:%M:%S+00:00', time.gmtime(now)) class TimeSeriesCollection(collections.abc.Mapping): """A mapping that stores Cloud Monitoring time series data. Each time series is identified by a set of labels stored as frozenset where the elements are strings 'label:value'. E.g.: frozenset({'resource.cluster_name:regional', 'resource.container_name:dnsmasq'}) The frozenset is used as key to store the time series data. The data is a dictionary with the following fields: - 'start_time': timestamp string (ISO format) for the earliest point - 'end_time': timestamp string (ISO format) for the latest point - 'values': point values in bi-dimensional array-like structure: [[val1_t0, val2_t0], [val1_t1, val2_t1], ...]. The first dimension of the array is time, and the second is the value columns (usually there will be only one). The points are sorted chronologically (most recent point is the latest in the list). """ _data: dict def __init__(self): # In order to ease the retrieval and matching, we store # label:value pairs as strings in a frozenset object. self._data = {} def __str__(self): return str(self._data) def __repr__(self): return repr(self._data) def add_api_response(self, resource_data): """Add results to an existing TimeSeriesCollection object. The monitoring API returns paginated results, so we need to be able to add results to an existing TimeSeriesCollection object. """ if 'timeSeriesData' not in resource_data: return for ts in resource_data['timeSeriesData']: # No data? if not ts['pointData'] or not 'values' in ts['pointData'][0] or not ts[ 'pointData'][0]['values']: continue # Use frozenset of label:value pairs as key to store the data labels_dict = {} if 'labelValues' in ts: for i, value in enumerate(ts['labelValues']): label_name = resource_data['timeSeriesDescriptor'][ 'labelDescriptors'][i]['key'] if 'stringValue' in value: labels_dict[label_name] = value['stringValue'] labels_frozenset = frozenset(f'{k}:{v}' for k, v in labels_dict.items()) else: labels_frozenset = frozenset() ts_point_data = ts['pointData'] self._data[labels_frozenset] = { 'labels': labels_dict, 'start_time': ts_point_data[-1]['timeInterval']['startTime'], 'end_time': ts_point_data[0]['timeInterval']['endTime'], 'values': [ _gcp_typed_values_to_python_list(ts_point_data[i]['values']) for i in reversed(range(len(ts_point_data))) ] } def __getitem__(self, labels): """Returns the time series identified by labels (frozenset).""" return self._data[labels] def __iter__(self): return iter(self._data) def __len__(self): return len(self._data) def keys(self): return self._data.keys() def items(self): return self._data.items() def values(self): return self._data.values() def query(project_id: str, query_str: str) -> TimeSeriesCollection: """Do a monitoring query in the specified project. Note that the project can be either the project where the monitored resources are, or a workspace host project, in which case you will get results for all associated monitored projects. """ time_series = TimeSeriesCollection() mon_api = apis.get_api('monitoring', 'v3', project_id) try: request = mon_api.projects().timeSeries().query(name='projects/' + project_id, body={'query': query_str}) logging.debug('executing monitoring query (project: %s)', project_id) logging.debug('query: %s', query_str) pages = 0 start_time = datetime.datetime.now() while request: pages += 1 response = request.execute(num_retries=config.API_RETRIES) time_series.add_api_response(response) request = mon_api.projects().timeSeries().query_next( previous_request=request, previous_response=response) if request: logging.debug('still executing monitoring query (project: %s)', project_id) end_time = datetime.datetime.now() logging.debug('query run time: %s, pages: %d', end_time - start_time, pages) except googleapiclient.errors.HttpError as err: gcp_err = utils.GcpApiError(err) # Ignore 502 because we get that when the monitoring query times out. if gcp_err.status in [502]: logging.warning('error executing monitoring query: %s', str(gcp_err.message)) else: raise utils.GcpApiError(err) from err return time_series def queryrange(project_id: str, query_str: str, start_time: datetime.datetime, end_time: datetime.datetime): """ Do a monitoring query during specific timeframe in the specified project. Note that the project can be either the project where the monitored resources are, or a workspace host project, in which case you will get results for all associated monitored projects. """ mon_api = apis.get_api('monitoring', 'v1', project_id) try: step = '1m' start_time_str = start_time.isoformat(timespec='seconds').replace( '+00:00', 'Z') end_time_str = end_time.isoformat(timespec='seconds').replace('+00:00', 'Z') request = mon_api.projects().location().prometheus().api().v1().query_range( name=f'projects/{project_id}', location='global', body={ 'query': query_str, 'start': start_time_str, 'end': end_time_str, 'step': step }) response = request.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: gcp_err = utils.GcpApiError(err) # Ignore 502 because we get that when the monitoring query times out. if gcp_err.status in [502]: logging.warning('error executing monitoring query: %s', str(gcp_err.message)) else: raise utils.GcpApiError(err) from err return response ================================================ FILE: gcpdiag/queries/monitoring_stub.py ================================================ # Copyright 2021 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. """Stub API calls used in monitoring.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument class MonitoringApiStub: """Mock object to simulate monitoring.googleapis.com calls.""" def location(self): return self def prometheus(self): return self def projects(self): return self # pylint: disable=invalid-name def timeSeries(self): return self def api(self): return self def v1(self): return self def query_range(self, name, location, body): m = re.match(r'projects/([^/]+)', name) project_id = m.group(1) if m else 'unknown-project' return apis_stub.RestCallStub( project_id=project_id, json_basename='monitoring-query-range', default={ 'status': 'success', 'data': { 'resultType': 'matrix', 'result': [{ 'metric': { '__name__': 'vpn_gateway_tunnel_is_up', 'tunnel_id': 'tunnel-abc-123', 'project_id': project_id }, 'values': [[1621438831, '0'], [1621439131, '1']] }] } }) def query(self, name, body): del body m = re.match(r'projects/([^/]+)', name) project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'monitoring-query') def query_next(self, previous_request, previous_response): del previous_request del previous_response ================================================ FILE: gcpdiag/queries/monitoring_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in monitoring.py.""" from datetime import datetime, timedelta from unittest import mock from gcpdiag.queries import apis_stub, monitoring DUMMY_PROJECT_NAME = 'gcpdiag-gce1-aaaa' DUMMY_INSTANCE_NAME = 'gce1' DUMMY_ZONE = 'europe-west4-a' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class Test: def test_timeserie(self): ts_col = monitoring.query(DUMMY_PROJECT_NAME, 'mocked query (this is ignored)') fs = frozenset({ f'resource.zone:{DUMMY_ZONE}', f'metric.instance_name:{DUMMY_INSTANCE_NAME}' }) assert fs in ts_col.keys() value = ts_col[fs] # expected data: # { # 'labels': { # 'resource.zone': 'europe-west4-a', # 'metric.instance_name': 'gce1' # }, # 'start_time': '2021-05-19T15:40:31.414435Z', # 'end_time': '2021-05-19T15:45:31.414435Z', # 'values': [[10917.0, 5], [11187.0, 4]] # } assert value['labels']['metric.instance_name'] == 'gce1' assert 'start_time' in value assert 'end_time' in value assert isinstance(value['values'][0][0], float) assert isinstance(value['values'][1][0], float) assert isinstance(value['values'][0][1], int) assert isinstance(value['values'][1][1], int) def test_queryrange(self): end_time = datetime.now() start_time = end_time - timedelta(minutes=30) vpn_query = 'cloud_monitoring_vpn_gateway_network_googleapis_com_vpn_gateway_tunnel_is_up' response = monitoring.queryrange(project_id=DUMMY_PROJECT_NAME, query_str=vpn_query, start_time=start_time, end_time=end_time) assert response['status'] == 'success' results = response['data']['result'] if len(results) > 0: metric_labels = results[0]['metric'] assert 'project_id' in metric_labels ================================================ FILE: gcpdiag/queries/network.py ================================================ # Copyright 2021 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. """Queries related to VPC Networks.""" import copy import dataclasses import ipaddress import logging import re from typing import Any, Dict, FrozenSet, Iterable, List, Optional, Union from gcpdiag import caching, config, models from gcpdiag.queries import apis, apis_utils, iam #pylint: disable=invalid-name IPv4AddrOrIPv6Addr = Union[ipaddress.IPv4Address, ipaddress.IPv6Address] IPv4NetOrIPv6Net = Union[ipaddress.IPv4Network, ipaddress.IPv6Network] IPAddrOrNet = Union[IPv4AddrOrIPv6Addr, IPv4NetOrIPv6Net] DEFAULT_MTU = 1460 class Subnetwork(models.Resource): """A VPC subnetwork.""" _resource_data: dict _context: models.Context def __init__(self, project_id, resource_data, context: models.Context): super().__init__(project_id=project_id) self._resource_data = resource_data self._context = context @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def name(self) -> str: return self._resource_data['name'] @property def self_link(self) -> str: return self._resource_data.get('selfLink', '') @property def ip_network(self) -> IPv4NetOrIPv6Net: return ipaddress.ip_network(self._resource_data['ipCidrRange']) @property def region(self) -> str: # https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4 m = re.match( r'https://www.googleapis.com/compute/v1/projects/([^/]+)/regions/([^/]+)', self._resource_data['region']) if not m: raise RuntimeError( f"can't parse region URL: {self._resource_data['region']}") return m.group(2) def is_private_ip_google_access(self) -> bool: return self._resource_data.get('privateIpGoogleAccess', False) @property def network(self): return self._resource_data['network'] class Route(models.Resource): """A VPC Route.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def name(self) -> str: return self._resource_data['name'] @property def kind(self) -> str: return self._resource_data['kind'] @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def network(self) -> str: return self._resource_data['network'] @property def tags(self) -> List[str]: if 'tags' in self._resource_data: return self._resource_data['tags'] return [] @property def dest_range(self) -> str: return self._resource_data['destRange'] @property def next_hop_gateway(self) -> Optional[str]: if 'nextHopGateway' in self._resource_data: return self._resource_data['nextHopGateway'] return None @property def next_hop_vpn_tunnel(self) -> Optional[str]: return self._resource_data.get('nextHopVpnTunnel') @property def next_hop_hub(self) -> Optional[str]: return self._resource_data.get('nextHopHub') @property def priority(self) -> int: return self._resource_data['priority'] def get_next_hop(self) -> Union[Dict[str, Any], Optional[str]]: hop_types = { 'nextHopGateway': 'nextHopGateway', 'nextHopVpnTunnel': 'nextHopVpnTunnel', 'nextHopHub': 'nextHopHub', 'nextHopInstance': 'nextHopInstance', 'nextHopAddress': 'nextHopAddress', 'nextHopPeering': 'nextHopPeering', 'nextHopIlb': 'nextHopIlb', 'nextHopNetwork': 'nextHopNetwork', 'nextHopIp': 'nextHopIp' } for hop_type, value in hop_types.items(): if self._resource_data.get(hop_type): return {'type': value, 'link': self._resource_data[hop_type]} return None def check_route_match(self, ip1: IPAddrOrNet, ip2: str) -> bool: ip2_list = [ipaddress.ip_network(ip2)] if _ip_match(ip1, ip2_list, 'allow'): return True return False class ManagedZone(models.Resource): """ Represent a DNS zone (public or private https://cloud.google.com/dns/docs/reference/v1beta2/managedZones """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def cloud_logging_config(self) -> bool: return self._resource_data['cloudLoggingConfig'].get('enableLogging', False) @property def is_public(self) -> bool: return self._resource_data['visibility'] == 'public' @property def vpc_attached(self) -> bool: if 'privateVisibilityConfig' not in self._resource_data: self._resource_data['privateVisibilityConfig'] = {} return (self._resource_data['privateVisibilityConfig'].get( 'networks', False) or self._resource_data['privateVisibilityConfig'].get( 'gkeClusters', False)) @property def dnssec_config_state(self) -> bool: if 'dnssecConfig' not in self._resource_data: self._resource_data['dnssecConfig'] = {} return self._resource_data['dnssecConfig'].get('state', False) @property def name(self) -> str: return self._resource_data['name'] @property def full_path(self) -> str: result = re.match(r'https://dns.googleapis.com/dns/v1beta2/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def self_link(self) -> str: return self._resource_data.get('selfLink', '') class Router(models.Resource): """A VPC Router.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._nats = None @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def name(self) -> str: return self._resource_data['name'] @property def self_link(self) -> str: return self._resource_data.get('selfLink', '') @property def network(self) -> str: return self._resource_data['network'] def get_network_name(self) -> str: logging.info('inside get_network_name function') if self._resource_data['network']: return self._resource_data['network'].split('/')[-1] return '' @property def nats(self): return self._resource_data.get('nats', []) def get_nat_ip_allocate_option(self, nat_gateway) -> str: nats = self._resource_data.get('nats', []) nat = [n for n in nats if n['name'] == nat_gateway] return nat[0].get('natIpAllocateOption', '') def get_enable_dynamic_port_allocation(self, nat_gateway) -> str: nats = self._resource_data.get('nats', []) nat = [n for n in nats if n['name'] == nat_gateway] return nat[0].get('enableDynamicPortAllocation', '') def subnet_has_nat(self, subnetwork): if not self._resource_data.get('nats', []): return False for n in self._resource_data.get('nats', []): if n['sourceSubnetworkIpRangesToNat'] == 'LIST_OF_SUBNETWORKS': # Cloud NAT configure for specific subnets if 'subnetworks' in n and subnetwork.self_link in [ s['name'] for s in n['subnetworks'] ]: return True else: # Cloud NAT configured for all subnets return True return False class RouterStatus(models.Resource): """NAT Router Status""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def name(self) -> str: return self._resource_data.get('name', '') @property def self_link(self) -> str: return self._resource_data.get('selfLink', '') @property def min_extra_nat_ips_needed(self) -> str: nat_status = self._resource_data.get('result', {}).get('natStatus', {}) return nat_status[0].get('minExtraNatIpsNeeded', None) @property def num_vms_with_nat_mappings(self) -> str: nat_status = self._resource_data.get('result', {}).get('natStatus', {}) return nat_status[0].get('numVmEndpointsWithNatMappings', None) @property def bgp_peer_status(self) -> str: bgp_peer_status = self._resource_data.get('result', {}).get('bgpPeerStatus', {}) return bgp_peer_status class RouterNatIpInfo(models.Resource): """NAT IP Info""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def self_link(self) -> str: return self._resource_data.get('selfLink', '') @property def name(self) -> str: return self._resource_data.get('name', '') @property def result(self) -> str: return self._resource_data.get('result', []) @dataclasses.dataclass class Peering: """VPC Peerings""" name: str url: str state: str exports_custom_routes: bool imports_custom_routes: bool auto_creates_routes: bool def __str__(self): return self.name class Network(models.Resource): """A VPC network.""" _resource_data: dict _subnetworks: Optional[Dict[str, Subnetwork]] _context: models.Context def __init__(self, project_id, resource_data, context: models.Context): super().__init__(project_id=project_id) self._resource_data = resource_data self._subnetworks = None self._context = context @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def name(self) -> str: return self._resource_data['name'] @property def self_link(self) -> str: return self._resource_data.get('selfLink', '') @property def firewall(self) -> 'EffectiveFirewalls': return _get_effective_firewalls(self) @property def mtu(self) -> int: if 'mtu' in self._resource_data: return self._resource_data['mtu'] return DEFAULT_MTU @property def subnetworks(self) -> Dict[str, Subnetwork]: return _batch_get_subnetworks( self._project_id, frozenset(self._resource_data.get('subnetworks', [])), self._context) @property def peerings(self) -> List[Peering]: return [ Peering(peer['name'], peer['network'], peer['state'], peer['exportCustomRoutes'], peer['importCustomRoutes'], peer['autoCreateRoutes']) for peer in self._resource_data.get('peerings', []) ] def _ip_match( # ip1: IPAddrOrNet, ip2_list: List[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]], match_type: str = 'allow') -> bool: """Match IP address or network to a network list (i.e. verify that ip1 is included in any ip of ip2_list). If match_type is 'allow', ip1 will match any ip in ip2_list if it is a subnet. If match_type is 'deny', ip1 will match any ip in ip2_list if they overlap (i.e. even if only part of ip1 is matched, it should still be considered a match).""" for ip2 in ip2_list: if isinstance(ip1, (ipaddress.IPv4Address, ipaddress.IPv6Address)): # ip1: address, ip2: network if ip1 in ip2: return True else: # ip1: network, ip2: network if isinstance(ip1, ipaddress.IPv4Network) and \ isinstance(ip2, ipaddress.IPv4Network): if match_type == 'allow' and ip1.subnet_of(ip2): return True elif match_type == 'deny' and ip1.overlaps(ip2): return True else: logging.debug('network no match %s of %s (%s matching)', ip1, ip2, match_type) elif isinstance(ip1, ipaddress.IPv6Network) and \ isinstance(ip2, ipaddress.IPv6Network): if match_type == 'allow' and ip1.subnet_of(ip2): return True elif match_type == 'deny' and ip1.overlaps(ip2): return True return False def _l4_match(protocol: str, port: int, l4c_list: Iterable[Dict[str, Any]]) -> bool: """Match protocol and port to layer4Configs structure: "layer4Configs": [ { "ipProtocol": string, "ports": [ string ] } """ for l4c in l4c_list: if l4c['ipProtocol'] not in [protocol, 'all']: continue if 'ports' not in l4c: return True for p_range in l4c['ports']: if _port_in_port_range(port, p_range): return True return False def _port_in_port_range(port: int, port_range: str): try: parts = [int(p) for p in port_range.split('-', 1)] except (TypeError, ValueError) as e: raise ValueError( f'invalid port numbers in range syntax: {port_range}') from e if len(parts) == 2: return parts[0] <= port <= parts[1] elif len(parts) == 1: return parts[0] == port def _vpc_allow_deny_match(protocol: str, port: Optional[int], allowed: Iterable[Dict[str, Any]], denied: Iterable[Dict[str, Any]]) -> Optional[str]: """Match protocol and port to allowed denied structure (VPC firewalls): "allowed": [ { "IPProtocol": string, "ports": [ string ] } ], "denied": [ { "IPProtocol": string, "ports": [ string ] } ], """ for action, l4_rules in [('allow', allowed), ('deny', denied)]: for l4_rule in l4_rules: if l4_rule['IPProtocol'] not in [protocol, 'all']: continue if 'ports' not in l4_rule: return action if port is not None: for p_range in l4_rule['ports']: if _port_in_port_range(port, p_range): return action return None @dataclasses.dataclass class FirewallCheckResult: """The result of a firewall connectivity check.""" action: str firewall_policy_name: Optional[str] = None firewall_policy_rule_description: Optional[str] = None vpc_firewall_rule_id: Optional[str] = None vpc_firewall_rule_name: Optional[str] = None def __str__(self): return self.action @property def matched_by_str(self): if self.firewall_policy_name: if self.firewall_policy_rule_description: return f'policy: {self.firewall_policy_name}, rule: {self.firewall_policy_rule_description}' else: return f'policy: {self.firewall_policy_name}' elif self.vpc_firewall_rule_name: return f'vpc firewall rule: {self.vpc_firewall_rule_name}' class FirewallRuleNotFoundError(Exception): rule_name: str def __init__(self, name, disabled=False): # Call the base class constructor with the parameters it needs super().__init__(f'firewall rule not found: {name}') self.rule_name = name self.disabled = disabled class VpcFirewallRule: """Represents firewall rule""" def __init__(self, resource_data): self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def source_ranges(self) -> List[ipaddress.IPv4Network]: return self._resource_data['sourceRanges'] @property def target_tags(self) -> set: return self._resource_data['targetTags'] @property def allowed(self) -> List[dict]: return self._resource_data['allowed'] def is_enabled(self) -> bool: return not self._resource_data['disabled'] class _FirewallPolicy: """Represents a org/folder firewall policy.""" @property def short_name(self): if self._resource_data.get('shortName'): return self._resource_data.get('shortName') else: return self._resource_data.get('name') def __init__(self, resource_data): self._resource_data = resource_data self._rules = { 'INGRESS': [], 'EGRESS': [], } # sort by priority, and then by action (deny before allow) action_priority = {'deny': 1, 'allow': 2, 'goto_next': 3} for rule in sorted( resource_data['rules'], key=lambda r: (int(r.get('priority', 65535)), action_priority.get(r.get('action'), 99)), ): rule_decoded = copy.deepcopy(rule) if 'match' in rule: # decode network ranges if 'srcIpRanges' in rule['match']: rule_decoded['match']['srcIpRanges'] = \ [ipaddress.ip_network(net) for net in rule['match']['srcIpRanges']] if 'destIpRanges' in rule['match']: rule_decoded['match']['destIpRanges'] = \ [ipaddress.ip_network(net) for net in rule['match']['destIpRanges']] self._rules[rule['direction']].append(rule_decoded) def check_connectivity_ingress( self, # *, src_ip: IPAddrOrNet, ip_protocol: str, port: Optional[int], #target_network: Optional[Network] = None, # useless unless targetResources set by API. target_service_account: Optional[str] = None ) -> FirewallCheckResult: for rule in self._rules['INGRESS']: if rule.get('disabled'): continue # To match networks, use 'supernet_of' for deny, because if the network that we # are checking is partially matched by a deny rule, it should still be considered # a match. ip_match_type = 'deny' if rule['action'] == 'deny' else 'allow' # src_ip if not _ip_match(src_ip, rule['match']['srcIpRanges'], ip_match_type): continue # ip_protocol and port if port is not None and not _l4_match(ip_protocol, port, rule['match']['layer4Configs']): continue # targetResources doesn't seem to get set. See also b/209450091. # please also check the check_connectivity_egress for similar issue. # if 'targetResources' in rule: # if not target_network: # continue # if not any( # tn == target_network.self_link for tn in rule['targetResources']): # continue # target_service_account if 'targetServiceAccounts' in rule: if not target_service_account: continue if not any(sa == target_service_account for sa in rule['targetServiceAccounts']): continue logging.debug('policy %s: %s -> %s/%s = %s', self.short_name, src_ip, port, ip_protocol, rule['action']) return FirewallCheckResult( rule['action'], firewall_policy_name=self.short_name, firewall_policy_rule_description=rule['description']) # It should never happen that no rule match, because there should # be a low-priority 'goto_next' rule. logging.warning('unexpected no-match in firewall policy %s', self.short_name) return FirewallCheckResult('goto_next') def check_connectivity_egress( self, # *, src_ip: IPAddrOrNet, ip_protocol: str, port: Optional[int], #target_network: Optional[Network] = None, # useless unless targetResources set by API. target_service_account: Optional[str] = None ) -> FirewallCheckResult: for rule in self._rules['EGRESS']: # Do not evaluate disabled rules or automatically created rules if rule.get('disabled') or not rule.get('match', {}).get('destIpRanges'): continue # To match networks, use 'supernet_of' for deny, because if the network that we # are checking is partially matched by a deny rule, it should still be considered # a match. ip_match_type = 'deny' if rule['action'] == 'deny' else 'allow' # src_ip if not _ip_match(src_ip, rule['match']['destIpRanges'], ip_match_type): continue # ip_protocol and port if port is not None and not _l4_match(ip_protocol, port, rule['match']['layer4Configs']): continue # target_service_account if 'targetServiceAccounts' in rule: if not target_service_account: continue if not any(sa == target_service_account for sa in rule['targetServiceAccounts']): continue logging.debug('policy %s: %s -> %s/%s = %s', self.short_name, src_ip, port, ip_protocol, rule['action']) return FirewallCheckResult( rule['action'], firewall_policy_name=self.short_name, firewall_policy_rule_description=rule['description']) # It should never happen that no rule match, because there should # be a low-priority 'goto_next' rule. logging.debug('unexpected no-match in firewall policy %s', self.short_name) return FirewallCheckResult('goto_next') class _VpcFirewall: """VPC Firewall Rules (internal class)""" _rules: dict def __init__(self, rules_list): self._rules = { 'INGRESS': [], 'EGRESS': [], } # sort by primary key and then by deny action for r in sorted(rules_list, key=lambda r: (int(r['priority']), 1 if r.get('denied') else 2)): r_decoded = copy.deepcopy(r) # decode network ranges if 'sourceRanges' in r: r_decoded['sourceRanges'] = \ [ipaddress.ip_network(net) for net in r['sourceRanges']] if 'destinationRanges' in r: r_decoded['destinationRanges'] = \ [ipaddress.ip_network(net) for net in r['destinationRanges']] # use sets for tags if 'sourceTags' in r: r_decoded['sourceTags'] = set(r['sourceTags']) if 'targetTags' in r: r_decoded['targetTags'] = set(r['targetTags']) self._rules[r['direction']].append(r_decoded) def check_connectivity_ingress( self, *, src_ip: IPAddrOrNet, ip_protocol: str, port: Optional[int], # dest_ip: Optional[IPAddrOrNet] = None, source_service_account: Optional[str] = None, target_service_account: Optional[str] = None, source_tags: Optional[List[str]] = None, target_tags: Optional[List[str]] = None, ) -> FirewallCheckResult: if target_tags is not None and not isinstance(target_tags, list): raise ValueError('Internal error: target_tags must be a list') if source_tags is not None and not isinstance(source_tags, list): raise ValueError('Internal error: source_tags must be a list') for rule in self._rules['INGRESS']: #logging.debug('vpc firewall: %s -> %s/%s ? %s', src_ip, port, ip_protocol, # rule['name']) # disabled? if rule.get('disabled'): continue # ip_protocol and port action = _vpc_allow_deny_match(ip_protocol, port, allowed=rule.get('allowed', []), denied=rule.get('denied', [])) if not action: continue # source if 'sourceRanges' in rule and \ _ip_match(src_ip, rule['sourceRanges'], action): pass elif source_service_account and \ source_service_account in rule.get('sourceServiceAccounts', {}): pass elif source_tags and \ set(source_tags) & rule.get('sourceTags', set()): pass else: continue # target if 'targetServiceAccounts' in rule: if not target_service_account: continue if not target_service_account in rule['targetServiceAccounts']: continue if 'targetTags' in rule: if not target_tags: continue if not set(target_tags) & rule['targetTags']: continue logging.debug('vpc firewall: %s -> %s/%s = %s (%s)', src_ip, port, ip_protocol, action, rule['name']) return FirewallCheckResult(action, vpc_firewall_rule_id=rule['id'], vpc_firewall_rule_name=rule['name']) # implied deny logging.debug('vpc firewall: %s -> %s/%s = %s (implied rule)', src_ip, port, ip_protocol, 'deny') return FirewallCheckResult('deny') def check_connectivity_egress( self, *, src_ip: IPAddrOrNet, ip_protocol: str, port: Optional[int], # dest_ip: Optional[IPAddrOrNet] = None, source_service_account: Optional[str] = None, target_service_account: Optional[str] = None, source_tags: Optional[List[str]] = None, target_tags: Optional[List[str]] = None, ) -> FirewallCheckResult: if target_tags is not None and not isinstance(target_tags, list): raise ValueError('Internal error: target_tags must be a list') if source_tags is not None and not isinstance(source_tags, list): raise ValueError('Internal error: source_tags must be a list') for rule in self._rules['EGRESS']: # disabled? if rule.get('disabled'): continue # ip_protocol and port action = _vpc_allow_deny_match(ip_protocol, port, allowed=rule.get('allowed', []), denied=rule.get('denied', [])) if not action: continue # source if 'destinationRanges' in rule and \ _ip_match(src_ip, rule['destinationRanges'], action): pass elif source_service_account and \ source_service_account in rule.get('sourceServiceAccounts', {}): pass elif source_tags and \ set(source_tags) & rule.get('sourceTags', set()): pass else: continue # target if 'targetServiceAccounts' in rule: if not target_service_account: continue if not target_service_account in rule['targetServiceAccounts']: continue if 'targetTags' in rule: if not target_tags: continue if not set(target_tags) & rule['targetTags']: continue logging.debug('vpc firewall: %s -> %s/%s = %s (%s)', src_ip, port, ip_protocol, action, rule['name']) return FirewallCheckResult(action, vpc_firewall_rule_id=rule['id'], vpc_firewall_rule_name=rule['name']) # implied allow egress logging.debug('vpc firewall: %s -> %s/%s = %s (implied rule)', src_ip, port, ip_protocol, 'allow') return FirewallCheckResult('allow') def verify_ingress_rule_exists(self, name: str): """See documentation for EffectiveFirewalls.verify_ingress_rule_exists().""" return any(r['name'] == name for r in self._rules['INGRESS']) def verify_egress_rule_exists(self, name: str): """See documentation for EffectiveFirewalls.verify_egress_rule_exists().""" return any(r['name'] == name for r in self._rules['EGRESS']) def get_vpc_ingress_rules(self, name: Optional[str] = None, name_pattern: Optional[Optional[re.Pattern]] = None, target_tags: Optional[List[str]] = None): """See documentation for EffectiveFirewalls.get_vpc_ingress_rules().""" if not (name or name_pattern): raise ValueError('Internal error: name or name_pattern must be provided') if target_tags is not None and not isinstance(target_tags, list): raise ValueError('Internal error: target_tags must be a list') rules = [] for rule in self._rules['INGRESS']: if name: if not rule['name'] == name: continue elif name_pattern: m = name_pattern.match(rule['name']) if not m: continue # filter by target_tags if needed if target_tags: if not 'targetTags' in rule: continue if not set(target_tags) & rule['targetTags']: continue rules.append(VpcFirewallRule(rule)) return rules def get_vpc_egress_rules(self, name: Optional[str] = None, name_pattern: Optional[Optional[re.Pattern]] = None, target_tags: Optional[List[str]] = None): """See documentation for EffectiveFirewalls.get_vpc_egress_rules().""" if not (name or name_pattern): raise ValueError('Internal error: name or name_pattern must be provided') if target_tags is not None and not isinstance(target_tags, list): raise ValueError('Internal error: target_tags must be a list') rules = [] for rule in self._rules['EGRESS']: if name: if not rule['name'] == name: continue elif name_pattern: m = name_pattern.match(rule['name']) if not m: continue # filter by target_tags if needed if target_tags: if not 'targetTags' in rule: continue if not set(target_tags) & rule['targetTags']: continue rules.append(VpcFirewallRule(rule)) return rules class EffectiveFirewalls: """Effective firewall rules for a VPC network or Instance. Includes org/folder firewall policies).""" _resource_data: dict _policies: List[_FirewallPolicy] _vpc_firewall: _VpcFirewall def __init__(self, resource_data): self._resource_data = resource_data self._policies = [] if 'firewallPolicys' in resource_data: for policy in resource_data['firewallPolicys']: self._policies.append(_FirewallPolicy(policy)) self._vpc_firewall = _VpcFirewall(resource_data.get('firewalls', {})) def check_connectivity_ingress( self, # *, src_ip: IPAddrOrNet, ip_protocol: str, port: Optional[int] = None, source_service_account: Optional[str] = None, source_tags: Optional[List[str]] = None, target_service_account: Optional[str] = None, target_tags: Optional[List[str]] = None) -> FirewallCheckResult: if ip_protocol != 'ICMP' and port is None: raise ValueError('TCP and UDP must have port numbers') # Firewall policies (organization, folders) for p in self._policies: result = p.check_connectivity_ingress( src_ip=src_ip, ip_protocol=ip_protocol, port=port, #target_network=self._network, target_service_account=target_service_account) if result.action != 'goto_next': return result # VPC firewall rules return self._vpc_firewall.check_connectivity_ingress( src_ip=src_ip, ip_protocol=ip_protocol, port=port, source_service_account=source_service_account, source_tags=source_tags, target_service_account=target_service_account, target_tags=target_tags) def check_connectivity_egress( self, # *, src_ip: IPAddrOrNet, ip_protocol: str, port: Optional[int] = None, source_service_account: Optional[str] = None, source_tags: Optional[List[str]] = None, target_service_account: Optional[str] = None, target_tags: Optional[List[str]] = None) -> FirewallCheckResult: if ip_protocol != 'ICMP' and port is None: raise ValueError('TCP and UDP must have port numbers') # Firewall policies (organization, folders) for p in self._policies: result = p.check_connectivity_egress( src_ip=src_ip, ip_protocol=ip_protocol, port=port, #target_network=self._network, target_service_account=target_service_account) if result.action != 'goto_next': return result # VPC firewall rules return self._vpc_firewall.check_connectivity_egress( src_ip=src_ip, ip_protocol=ip_protocol, port=port, source_service_account=source_service_account, source_tags=source_tags, target_service_account=target_service_account, target_tags=target_tags) def get_vpc_ingress_rules( self, name: Optional[str] = None, name_pattern: Optional[re.Pattern] = None, target_tags: Optional[List[str]] = None) -> List[VpcFirewallRule]: """Retrieve the list of ingress firewall rules matching name or name pattern and target tags. Args: name (Optional[str], optional): firewall rune name. Defaults to None. name_pattern (Optional[re.Pattern], optional): firewall rule name pattern. Defaults to None. target_tags (Optional[List[str]], optional): firewall target tags (if not specified any tag will match). Defaults to None. Returns: List[VpcFirewallRule]: List of ingress firewall rules """ rules = self._vpc_firewall.get_vpc_ingress_rules(name, name_pattern, target_tags) return rules def get_vpc_egress_rules( self, name: Optional[str] = None, name_pattern: Optional[re.Pattern] = None, target_tags: Optional[List[str]] = None) -> List[VpcFirewallRule]: """Retrieve the list of egress firewall rules matching name or name pattern and target tags. Args: name (Optional[str], optional): firewall rune name. Defaults to None. name_pattern (Optional[re.Pattern], optional): firewall rule name pattern. Defaults to None. target_tags (Optional[List[str]], optional): firewall target tags (if not specified any tag will match). Defaults to None. Returns: List[VpcFirewallRule]: List of egress firewall rules """ rules = self._vpc_firewall.get_vpc_egress_rules(name, name_pattern, target_tags) return rules def verify_ingress_rule_exists(self, name: str): """Verify that a certain VPC rule exists. This is useful to verify whether maybe a permission was missing on a shared VPC and an automatic rule couldn't be created.""" return self._vpc_firewall.verify_ingress_rule_exists(name) def verify_egress_rule_exists(self, name: str): """Verify that a certain VPC rule exists. This is useful to verify whether maybe a permission was missing on a shared VPC and an automatic rule couldn't be created.""" return self._vpc_firewall.verify_egress_rule_exists(name) class VPCEffectiveFirewalls(EffectiveFirewalls): """Effective firewall rules for a VPC network. Includes org/folder firewall policies). """ _network: Network def __init__(self, network, resource_data): super().__init__(resource_data) self._network = network @caching.cached_api_call() def _get_effective_firewalls(network: Network): compute = apis.get_api('compute', 'v1', network.project_id) request = compute.networks().getEffectiveFirewalls(project=network.project_id, network=network.name) response = request.execute(num_retries=config.API_RETRIES) return VPCEffectiveFirewalls(network, response) @caching.cached_api_call(in_memory=True) def get_network(project_id: str, network_name: str, context: models.Context) -> Network: logging.debug('fetching network: %s/%s', project_id, network_name) compute = apis.get_api('compute', 'v1', project_id) request = compute.networks().get(project=project_id, network=network_name) response = request.execute(num_retries=config.API_RETRIES) return Network(project_id, response, context) def get_subnetwork_from_url(url: str) -> Subnetwork: """Returns Subnetwork object given subnetwork url""" m = re.match((r'https://www.googleapis.com/compute/v1/projects/' r'([^/]+)/regions/([^/]+)/subnetworks/([^/]+)$'), url) if not m: raise ValueError(f"can't parse network url: {url}") (project_id, region, subnetwork_name) = (m.group(1), m.group(2), m.group(3)) return get_subnetwork(project_id, region, subnetwork_name) def get_network_from_url(url: str) -> Network: m = re.match( r'https://www.googleapis.com/compute/v1/projects/([^/]+)/global/networks/([^/]+)', url) if not m: raise ValueError(f"can't parse network url: {url}") (project_id, network_name) = (m.group(1), m.group(2)) return get_network(project_id, network_name, models.Context(project_id=project_id)) @caching.cached_api_call(in_memory=True) def get_networks(context: models.Context) -> List[Network]: logging.debug('fetching network: %s', context.project_id) compute = apis.get_api('compute', 'v1', context.project_id) request = compute.networks().list(project=context.project_id) response = request.execute(num_retries=config.API_RETRIES) return [ Network(context.project_id, item, context) for item in response.get('items', []) ] @caching.cached_api_call(in_memory=True) def get_subnetwork(project_id: str, region: str, subnetwork_name: str) -> Subnetwork: logging.debug('fetching network: %s/%s', project_id, subnetwork_name) compute = apis.get_api('compute', 'v1', project_id) request = compute.subnetworks().get(project=project_id, region=region, subnetwork=subnetwork_name) response = request.execute(num_retries=config.API_RETRIES) if response is None: raise RuntimeError( f'failed to fetch subnetwork: {project_id}/{region}/{subnetwork_name}') return Subnetwork(project_id, response, context=models.Context(project_id=project_id)) @caching.cached_api_call(in_memory=True) def _batch_get_subnetworks(project_id, subnetworks_urls: FrozenSet[str], context: models.Context) -> Dict[str, Subnetwork]: compute = apis.get_api('compute', 'v1', project_id) requests = [] for subnet_url in subnetworks_urls: m = re.match((r'https://www.googleapis.com/compute/v1/projects/' r'([^/]+)/regions/([^/]+)/subnetworks/([^/]+)$'), subnet_url) if not m: logging.warning("can't parse subnet URL: %s", subnet_url) continue requests.append( # compute.subnetworks().get(project=m.group(1), region=m.group(2), subnetwork=m.group(3))) subnets = {} if not requests: return {} for (_, resp, exception) in apis_utils.execute_concurrently(api=compute, requests=requests, context=context): if exception: logging.warning(exception) continue if resp and isinstance(resp, dict) and 'selfLink' in resp: subnets[resp['selfLink']] = Subnetwork(project_id, resp, context) else: logging.warning('Invalid response item in _batch_get_subnetworks: %s', resp) return subnets @caching.cached_api_call(in_memory=True) def get_routes(project_id: str) -> List[Route]: logging.debug('fetching routes: %s', project_id) compute = apis.get_api('compute', 'v1', project_id) request = compute.routes().list(project=project_id) response = request.execute(num_retries=config.API_RETRIES) return [Route(project_id, item) for item in response.get('items', [])] @caching.cached_api_call(in_memory=True) def get_zones(project_id: str) -> List[ManagedZone]: logging.debug('fetching DNS zones: %s', project_id) dns = apis.get_api('dns', 'v1beta2', project_id) request = dns.managedZones().list(project=project_id) response = request.execute(num_retries=config.API_RETRIES) zones = [] for zone in response.get('managedZones', []): request2 = dns.managedZones().get(project=project_id, managedZone=zone['name']) response2 = request2.execute(num_retries=config.API_RETRIES) zones.append(ManagedZone(project_id, response2)) return zones @caching.cached_api_call(in_memory=True) def get_routers(project_id: str, region: str, network) -> List[Router]: logging.debug('fetching routers: %s/%s', project_id, region) compute = apis.get_api('compute', 'v1', project_id) request = compute.routers().list(project=project_id, region=region, filter=f'network="{network.self_link}"') response = request.execute(num_retries=config.API_RETRIES) return [Router(project_id, item) for item in response.get('items', [])] @caching.cached_api_call(in_memory=True) def get_router(project_id: str, region: str, network) -> Router: logging.debug('fetching routers: %s/%s', project_id, region) compute = apis.get_api('compute', 'v1', project_id) request = compute.routers().list(project=project_id, region=region, filter=f'network="{network.self_link}"') response = request.execute(num_retries=config.API_RETRIES) return Router(project_id, next(iter(response.get('items', [{}])))) @caching.cached_api_call(in_memory=True) def get_router_by_name(project_id: str, region: str, router_name: str) -> Router: logging.debug('fetching router list: %s/%s in region %s', project_id, router_name, region) compute = apis.get_api('compute', 'v1', project_id) request = compute.routers().list(project=project_id, region=region) response = request.execute(num_retries=config.API_RETRIES) return next( Router(project_id, item) for item in response.get('items', []) if item['name'] == router_name) @caching.cached_api_call(in_memory=True) def nat_router_status(project_id: str, router_name: str, region: str) -> RouterStatus: logging.debug('fetching router status: %s/%s in region %s', project_id, router_name, region) compute = apis.get_api('compute', 'v1', project_id) request = compute.routers().getRouterStatus(project=project_id, router=router_name, region=region) response = request.execute(num_retries=config.API_RETRIES) if 'result' in str(response): return RouterStatus(project_id, response) else: logging.debug('unable to fetch router status: %s/%s in region %s', project_id, router_name, region) return RouterStatus(project_id, {}) @caching.cached_api_call(in_memory=True) def get_nat_ip_info(project_id: str, router_name: str, region: str) -> RouterNatIpInfo: logging.debug('fetching NAT IP info for router: %s/%s in region %s', project_id, router_name, region) compute = apis.get_api('compute', 'v1', project_id) request = compute.routers().getNatIpInfo(project=project_id, router=router_name, region=region) response = request.execute(num_retries=config.API_RETRIES) if 'result' in str(response): return RouterNatIpInfo(project_id, response) else: logging.debug('unable to fetch Nat IP Info for router: %s/%s in region %s', project_id, router_name, region) return RouterNatIpInfo(project_id, {}) class VPCSubnetworkIAMPolicy(iam.BaseIAMPolicy): def _is_resource_permission(self, permission): return True @caching.cached_api_call(in_memory=True) def get_subnetwork_iam_policy(context: models.Context, region: str, subnetwork_name: str) -> VPCSubnetworkIAMPolicy: project_id = context.project_id resource_name = (f'projects/{project_id}/regions/{region}/' f'subnetworks/{subnetwork_name}') compute = apis.get_api('compute', 'v1', project_id) request = compute.subnetworks().getIamPolicy(project=project_id, region=region, resource=subnetwork_name) return iam.fetch_iam_policy(request, VPCSubnetworkIAMPolicy, project_id, resource_name, context) class Address(models.Resource): """IP Addresses.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def name(self) -> str: return self._resource_data['name'] @property def self_link(self) -> str: return self._resource_data.get('selfLink', '') @property def subnetwork(self) -> str: return self._resource_data['subnetwork'] @property def status(self) -> str: return self._resource_data['status'] @caching.cached_api_call(in_memory=True) def get_addresses(project_id: str) -> List[Address]: logging.debug('fetching addresses list: %s', project_id) compute = apis.get_api('compute', 'v1', project_id) addresses = [] request = compute.addresses().aggregatedList(project=project_id) response = request.execute(num_retries=config.API_RETRIES) addresses_by_regions = response['items'] for _, data_ in addresses_by_regions.items(): if 'addresses' not in data_: continue addresses.extend( [Address(project_id, address) for address in data_['addresses']]) return addresses ================================================ FILE: gcpdiag/queries/network_stub.py ================================================ # Copyright 2021 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. """Stub API calls used in network.py for testing. Instead of doing real API calls, we return test JSON data. """ import json from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name SUBNETWORKS_REGION = 'europe-west4' class NetworkApiStub: """Mock object to simulate compute engine networking api calls. This object is created by GceApiStub, not used directly in test scripts.""" def __init__(self, mock_state): self.mock_state = mock_state def aggregatedList(self, project): if self.mock_state == 'addresses': return apis_stub.RestCallStub(project, 'compute-addresses') else: raise ValueError(f'cannot call method {self.mock_state} here') def get(self, project, network=None, region=None, subnetwork=None): if not subnetwork: return apis_stub.RestCallStub(project, f'compute-network-{network}') else: self.mock_state = 'get_single_subnetwork' self.subnetwork = subnetwork self.region = region or SUBNETWORKS_REGION self.project_id = project return self def get_network(self, project, network): return apis_stub.RestCallStub(project, f'compute-network-{network}') def get_routers(self, project, region, network): return apis_stub.RestCallStub(project, f'compute-network-{region}') def get_router_by_name(self, project, region, router_name): return apis_stub.RestCallStub(project, f'compute-network-{region}') def nat_router_status(self, project, router_name, region): return apis_stub.RestCallStub( project, f'compute-routers-routerStatus-{router_name}') def get_nat_ip_info(self, project, router_name, region): return apis_stub.RestCallStub(project, f'compute-routers-rnatIpInfo-{router_name}') def getIamPolicy(self, project, region, resource): return apis_stub.RestCallStub(project, 'compute-subnetwork-policy') def getEffectiveFirewalls(self, project, network): return apis_stub.RestCallStub(project, f'compute-effective-firewalls-{network}') # pylint: disable=redefined-builtin def list(self, project, region=None, filter=None, fields=None): if self.mock_state == 'subnetworks': return apis_stub.RestCallStub( project, f'compute-subnetworks-{SUBNETWORKS_REGION}') elif self.mock_state == 'routers': if region: return apis_stub.RestCallStub(project, f'compute-routers-{region}') return apis_stub.RestCallStub(project, f'compute-routers-{SUBNETWORKS_REGION}') elif self.mock_state == 'networks': return apis_stub.RestCallStub(project, 'compute-network-default') elif self.mock_state == 'routes': return apis_stub.RestCallStub(project, 'compute-network-routes') else: raise ValueError(f'cannot call method {self.mock_state} here') def list_next(self, prev_request, prev_response): return None def execute(self, num_retries=0): json_dir = apis_stub.get_json_dir(self.project_id) if self.mock_state == 'get_single_subnetwork': with open(json_dir / 'compute-subnetworks-aggregated.json', encoding='utf-8') as json_file: items = json.load(json_file)['items'] region = 'regions/' + self.region subnets = items[region]['subnetworks'] subnet_resp = None for subnet in subnets: if subnet['name'] == self.subnetwork: subnet_resp = subnet break if subnet_resp: return subnet_resp else: raise ValueError(f'cannot call method {self.mock_state} here') def getRouterStatus(self, project, router, region): if self.mock_state == 'routers': return apis_stub.RestCallStub(project, f'compute-routers-routerStatus-{router}') def getNatIpInfo(self, project, router, region): if self.mock_state == 'routers': return apis_stub.RestCallStub(project, f'compute-routers-natIpInfo-{router}') ================================================ FILE: gcpdiag/queries/network_test.py ================================================ # Copyright 2021 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. """Test code in network.py.""" import ipaddress import re from unittest import mock from boltons.iterutils import get_path from gcpdiag import models from gcpdiag.queries import apis_stub, network DUMMY_PROJECT_ID = 'gcpdiag-fw-policy-aaaa' DUMMY_DEFAULT_NETWORK = 'default' DUMMY_DEFAULT_SUBNET = 'default' DUMMY_GKE_PROJECT_ID = 'gcpdiag-gke1-aaaa' DUMMY_GCE_PROJECT_ID = 'gcpdiag-gce1-aaaa' DUMMY_GKE_REGION = 'europe-west4' DUMMY_GKE_SUBNET = 'gke1-subnet' DUMMY_SERVICE_ACCOUNT = 'gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com' DUMMY_VPC_PROJECT_ID = 'gcpdiag-vpc1-aaaa' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestNetwork: """Test network.Network.""" def test_get_network(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) assert net.name == DUMMY_DEFAULT_NETWORK assert net.full_path == 'projects/gcpdiag-fw-policy-aaaa/global/networks/default' assert net.short_path == f'{DUMMY_PROJECT_ID}/default' assert net.self_link == \ f'https://www.googleapis.com/compute/v1/projects/{DUMMY_PROJECT_ID}/global/networks/default' def test_subnetworks(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) expected_subnet_url = ( f'https://www.googleapis.com/compute/v1/projects/{DUMMY_PROJECT_ID}/' 'regions/europe-west4/subnetworks/default') assert expected_subnet_url in net.subnetworks assert isinstance(net.subnetworks[expected_subnet_url].ip_network, ipaddress.IPv4Network) def test_cluster_subnetwork(self): subnet = network.get_subnetwork(project_id=DUMMY_GKE_PROJECT_ID, region=DUMMY_GKE_REGION, subnetwork_name=DUMMY_GKE_SUBNET) assert subnet.name == DUMMY_GKE_SUBNET assert subnet.ip_network == ipaddress.ip_network('192.168.0.0/24') def test_cluster_subnetwork_iam_policy(self): context = models.Context(project_id=DUMMY_GKE_PROJECT_ID) policy = network.get_subnetwork_iam_policy(context=context, region=DUMMY_GKE_REGION, subnetwork_name=DUMMY_GKE_SUBNET) assert policy.has_role_permissions( f'serviceAccount:{DUMMY_SERVICE_ACCOUNT}', 'roles/compute.networkUser') assert not policy.has_role_permissions( f'serviceAccount:{DUMMY_SERVICE_ACCOUNT}', 'roles/compute.networkAdmin') def test_get_routers(self): net = network.get_network( project_id=DUMMY_GKE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GKE_PROJECT_ID)) sub1 = network.get_subnetwork(project_id=DUMMY_GKE_PROJECT_ID, region=DUMMY_GKE_REGION, subnetwork_name=DUMMY_GKE_SUBNET) sub2 = network.get_subnetwork(project_id=DUMMY_GKE_PROJECT_ID, region=DUMMY_GKE_REGION, subnetwork_name=DUMMY_DEFAULT_SUBNET) router = network.get_router(project_id=DUMMY_GKE_PROJECT_ID, region=DUMMY_GKE_REGION, network=net) assert router.name == 'gke-default-router' assert router.subnet_has_nat(sub1) is False assert router.subnet_has_nat(sub2) is True def test_ingress_deny(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_address('10.0.0.1'), # ip_protocol='tcp', port=21) assert r.action == 'deny' r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.0.0.0/24'), # ip_protocol='tcp', port=21) assert r.action == 'deny' def test_ingress_deny_2(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.100.0.16/29'), # ip_protocol='tcp', port=1001) assert r.action == 'deny' assert r.matched_by_str == 'vpc firewall rule: fw-test-800' def test_ingress_deny_3(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) # a supernet of src_ip for a deny rule should also match # (because we want to catch when a fw rule partially blocks # a connection). r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.0.0.0/8'), # ip_protocol='tcp', port=1001) assert r.action == 'deny' assert r.matched_by_str == 'vpc firewall rule: fw-test-800' def test_ingress_allow_src_ip(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.100.0.16/29'), # ip_protocol='tcp', port=1006) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-900' def test_ingress_allow_src_ip_subnet(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.100.0.16/30'), # ip_protocol='tcp', port=1006) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-900' def test_ingress_allow_source_tags(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.200.0.16/29'), # source_tags=['foo'], ip_protocol='tcp', port=1006) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-900' def test_ingress_allow_target_tags(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_address('192.168.1.1'), # target_tags=['bar'], ip_protocol='tcp', port=1234) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-903' def test_ingress_allow_source_sa(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.200.0.16/29'), # source_service_account= 'service-12340002@compute-system.iam.gserviceaccount.com', ip_protocol='tcp', port=4000) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-901' def test_ingress_allow_target_sa(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.200.0.16/29'), # target_tags=['foo'], ip_protocol='tcp', port=4000) assert r.action == 'allow' def test_ingress_parent_policy_allow(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.101.0.1/32'), # ip_protocol='tcp', port=2001) assert r.action == 'allow' assert r.matched_by_str == 'policy: parent-folder-policy' def test_ingress_sub_policy_allow(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.101.0.1/32'), # ip_protocol='tcp', port=2003) assert r.action == 'allow' assert r.matched_by_str == 'policy: sub-folder-policy' def test_ingress_sub_policy_allow_target_sa(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.102.0.1/32'), # ip_protocol='tcp', port=2000, target_service_account= 'service-12340002@compute-system.iam.gserviceaccount.com') assert r.action == 'allow' assert r.matched_by_str == 'policy: sub-folder-policy' def test_ingress_sub_policy_deny_wrong_target_sa(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.102.0.1/32'), # ip_protocol='tcp', port=2000, target_service_account='foobar@compute-system.iam.gserviceaccount.com') assert r.action == 'deny' def test_get_ingress_rules(self): net = network.get_network( project_id=DUMMY_GKE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GKE_PROJECT_ID)) pattern = re.compile(r'k8s-fw-l7-.*') rules = net.firewall.get_vpc_ingress_rules( name_pattern=pattern, target_tags=['gke-gke4-3520a9df-node']) assert 'gke-gke4-3520a9df-node' in rules[0].target_tags assert ipaddress.IPv4Network('130.211.0.0/22') in rules[0].source_ranges pattern = re.compile(r'default-allow-.*') rules = net.firewall.get_vpc_ingress_rules(name_pattern=pattern) assert 'default-allow-rdp' in [r.name for r in rules] assert 'default-allow-ssh' in [r.name for r in rules] assert 'default-allow-internal' in [r.name for r in rules] assert 'default-allow-icmp' in [r.name for r in rules] rules = net.firewall.get_vpc_ingress_rules(name='gke-gke6-44734575-ssh') assert 'gke-gke6-44734575-ssh' == rules[0].name assert 'tcp' == rules[0].allowed[0]['IPProtocol'] assert '22' in rules[0].allowed[0]['ports'] rules = net.firewall.get_vpc_ingress_rules(name='not-existing-rule') assert 'gke-gke3-b46b134d-ssh' not in [r.name for r in rules] def test_egress_deny(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_address('10.0.0.1'), # ip_protocol='tcp', port=21) assert r.action == 'deny' r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('10.0.0.0/24'), # ip_protocol='tcp', port=21) assert r.action == 'deny' def test_egress_deny_2(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('142.250.125.95/32'), # ip_protocol='tcp', port=1001) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-925' def test_egress_deny_3(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('10.0.0.0/8'), # ip_protocol='tcp', port=1001) assert r.action == 'deny' assert r.matched_by_str == 'vpc firewall rule: fw-test-950' def test_egress_allow_src_ip(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('35.190.247.13/32'), # ip_protocol='tcp', port=1688) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-1000' def test_egress_allow_src_ip_subnet(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('10.100.0.16/30'), # ip_protocol='tcp', port=1006) assert r.action == 'deny' assert r.matched_by_str == 'vpc firewall rule: fw-test-950' def test_egress_allow_source_tags(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('45.100.0.0/24'), # source_tags=['foo'], ip_protocol='tcp', port=2033) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-1050' def test_egress_allow_target_tags(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_address('192.168.1.1'), # target_tags=['bar'], ip_protocol='tcp', port=1234) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-1025' def test_egress_allow_source_sa(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('10.200.0.16/29'), # source_service_account= 'service-12340002@compute-system.iam.gserviceaccount.com', ip_protocol='tcp', port=4000) assert r.action == 'allow' assert r.matched_by_str == 'vpc firewall rule: fw-test-1075' def test_egress_parent_policy_allow(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('10.101.0.1/32'), # ip_protocol='tcp', port=2001) assert r.action == 'allow' assert r.matched_by_str == 'policy: parent-folder-policy' def test_egress_sub_policy_allow(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('10.102.0.1/32'), # ip_protocol='tcp', port=2003) assert r.action == 'allow' assert r.matched_by_str == 'policy: sub-folder-policy' def test_egress_sub_policy_allow_target_sa(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('10.102.0.1/32'), # ip_protocol='tcp', port=2000, target_service_account= 'service-12340002@compute-system.iam.gserviceaccount.com') assert r.action == 'allow' assert r.matched_by_str == 'policy: sub-folder-policy' def test_egress_sub_policy_deny_wrong_target_sa(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) r = net.firewall.check_connectivity_egress( src_ip=ipaddress.ip_network('10.102.0.1/32'), # ip_protocol='tcp', port=2000, target_service_account='foobar@compute-system.iam.gserviceaccount.com') assert r.action == 'deny' def test_get_egress_rules(self): net = network.get_network( project_id=DUMMY_GCE_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_GCE_PROJECT_ID)) pattern = re.compile(r'default-allow-.*') rules = net.firewall.get_vpc_egress_rules(name_pattern=pattern) assert 'default-allow-rdp' in [r.name for r in rules] assert 'default-allow-ssh' in [r.name for r in rules] rules = net.firewall.get_vpc_egress_rules(name='default-allow-ssh') assert 'default-allow-ssh' == rules[0].name assert 'tcp' == rules[0].allowed[0]['IPProtocol'] assert '22' in rules[0].allowed[0]['ports'] rules = net.firewall.get_vpc_egress_rules(name='not-existing-rule') assert 'default-allow-ssh' not in [r.name for r in rules] def test_get_addresses(self): """get addresses by project.""" addresses = network.get_addresses(project_id=DUMMY_VPC_PROJECT_ID) assert len(addresses) > 2 for address in addresses: if address.name == 'address1': assert address.short_path == 'gcpdiag-vpc1-aaaa/address1' if address.name == 'address2': assert address.short_path == 'gcpdiag-vpc1-aaaa/address2' if address.name == 'address3': assert address.short_path == 'gcpdiag-vpc1-aaaa/address3' if address.name == 'address4': assert address.short_path == 'gcpdiag-vpc1-aaaa/address4' def test_get_router_by_name(self): router = network.get_router_by_name(project_id='gcpdiag-gke1-aaaa', region='europe-west4', router_name='gke-default-router') assert router.name == 'gke-default-router' router = network.get_router_by_name(project_id='gcpdiag-gke1-aaaa', region='us-east4', router_name='dummy-router1') assert router.name == 'dummy-router1' router = network.get_router_by_name(project_id='gcpdiag-gke1-aaaa', region='us-east4', router_name='dummy-router2') assert router.name == 'dummy-router2' router = network.get_router_by_name(project_id='gcpdiag-gke1-aaaa', region='us-east4', router_name='dummy-router3') assert router.name == 'dummy-router3' def test_bgp_peer_status(self): vlan_router_status = network.nat_router_status('gcpdiag-interconnect1-aaaa', router_name='dummy-router1', region='us-east4') assert get_path(vlan_router_status.bgp_peer_status[0], ('state'), default=None) == 'Established' assert get_path(vlan_router_status.bgp_peer_status[1], ('state'), default=None) == 'Established' vlan_router_status = network.nat_router_status('gcpdiag-interconnect1-aaaa', router_name='dummy-router2', region='us-east4') assert get_path(vlan_router_status.bgp_peer_status[0], ('state'), default=None) == 'Established' assert get_path(vlan_router_status.bgp_peer_status[1], ('state'), default=None) == 'Idle' def test_firewall_policy_sorting_same_ip(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) # Check that deny rule is matched before allow rule with same priority and # same src ip range r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.104.0.1/32'), ip_protocol='tcp', port=80) assert r.action == 'deny' assert r.matched_by_str == ( 'policy: test-sorting-same-ip-policy, rule: deny rule with priority' ' 1000 and same src ip range') def test_firewall_policy_sorting(self): net = network.get_network( project_id=DUMMY_PROJECT_ID, network_name=DUMMY_DEFAULT_NETWORK, context=models.Context(project_id=DUMMY_PROJECT_ID)) # Check that deny rule is matched before allow rule with same priority r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.104.0.1/32'), ip_protocol='tcp', port=80) assert r.action == 'deny' expected_matched_str = ( 'policy: test-sorting-same-ip-policy, rule: deny rule with priority' ' 1000 and same src ip range') assert r.matched_by_str == expected_matched_str # Check that allow rule with lower priority is matched before deny rule # with higher priority r = net.firewall.check_connectivity_ingress( src_ip=ipaddress.ip_network('10.101.0.1/32'), ip_protocol='tcp', port=2001) assert r.action == 'allow' assert r.matched_by_str == 'policy: parent-folder-policy' ================================================ FILE: gcpdiag/queries/networkmanagement.py ================================================ # Copyright 2021 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. """Queries related networkmanagement API.""" import ipaddress import logging import time import uuid from typing import Union from gcpdiag import caching from gcpdiag.queries import apis #pylint: disable=invalid-name IPv4AddrOrIPv6Addr = Union[ipaddress.IPv4Address, ipaddress.IPv6Address] IPv4NetOrIPv6Net = Union[ipaddress.IPv4Network, ipaddress.IPv6Network] IPAddrOrNet = Union[IPv4AddrOrIPv6Addr, IPv4NetOrIPv6Net] @caching.cached_api_call(in_memory=False) def run_connectivity_test(project_id: str, src_ip: str, dest_ip: str, dest_port: int, protocol: str): """Method to create/run an idempotent connectivity test""" test_id = f'gcpdiag-connectivity-test-{uuid.uuid4()}' # initialize the networkmanagement api networkmanagement = apis.get_api('networkmanagement', 'v1', project_id) # test input test_input = { 'source': { 'ipAddress': src_ip, 'networkType': 'GCP_NETWORK' }, 'destination': { 'ipAddress': dest_ip, 'port': dest_port }, 'protocol': protocol } create_request = (networkmanagement.projects().locations().global_( ).connectivityTests().create(parent=f'projects/{project_id}/locations/global', testId=test_id, body=test_input)).execute() logging.info('Running a new connectivity test..') # Wait a max of 60 seconds to fetch the request_status. count = 0 create_status = networkmanagement.projects().locations().global_().operations( ).get(name=create_request['name']).execute() while not create_status['done'] and count <= 15: time.sleep(4) create_status = networkmanagement.projects().locations().global_( ).operations().get(name=create_request['name']).execute() count += 1 if create_status['done']: # get the result of the connectivity test res = (networkmanagement.projects().locations().global_().connectivityTests( ).get( name= f'projects/{project_id}/locations/global/connectivityTests/{test_id}')) result = res.execute() return result else: logging.warning('Timeout running the connectivity test...') return None ================================================ FILE: gcpdiag/queries/networkmanagement_stub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Stub API calls used in lb.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name class NetworkManagementApiStub: """Mock object to simulate compute engine networking api calls. This object is created by GceApiStub, not used directly in test scripts. """ def __init__(self, mock_state='init'): self.mock_state = mock_state def projects(self): return self def locations(self): return self def global_(self): return self def connectivityTests(self): return self def operations(self): return OperationsStub() def get(self, name): pattern = r'projects/([^/]+)/locations/global/connectivityTests/([^/]+)' match = re.search(pattern, name) if match: project = match.group(1) return apis_stub.RestCallStub(project, 'connectivity-test') else: raise ValueError('cannot call get method here') def create(self, *args, **kwargs): return OperationsStub() def delete(self, name): del name return OperationsStub() # pylint: disable=redefined-builtin def list(self, project, url): pattern = r'projects/([^/]+)/locations/global/connectivityTests/([^/]+)' match = re.search(pattern, url) if match: project = match.group(1) return apis_stub.RestCallStub(project, 'connectivity-tests') else: raise ValueError(f'cannot call method {self.mock_state} here') # override the apis_stub for delete and create method calls. def execute(self, *args): return {'name': 'override', 'done': True} class OperationsStub: """Mock object to simulate networkmanagement operation calls. This object is not used directly in test scripts. """ def __init__(self): pass def get(self, name): del name return self def execute(self) -> dict: return {'name': 'override', 'done': True} ================================================ FILE: gcpdiag/queries/notebooks.py ================================================ # Copyright 2023 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. # Lint as: python3 """Queries related to GCP Vertex AI Workbench Notebooks """ import enum import logging import re from typing import Dict, Mapping, Union import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis HEALTH_STATE_KEY = 'healthState' HEALTH_INFO_KEY = 'healthInfo' INSTANCES_KEY = 'instances' RUNTIMES_KEY = 'runtimes' NAME_KEY = 'name' class HealthStateEnum(enum.Enum): """Vertex AI Workbench user-managed notebooks instance health states https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v1/projects.locations.instances/getInstanceHealth#healthstate """ HEALTH_STATE_UNSPECIFIED = 'HEALTH_STATE_UNSPECIFIED' HEALTHY = 'HEALTHY' UNHEALTHY = 'UNHEALTHY' AGENT_NOT_INSTALLED = 'AGENT_NOT_INSTALLED' AGENT_NOT_RUNNING = 'AGENT_NOT_RUNNING' def __str__(self): return str(self.value) class StateEnum(enum.Enum): """Vertex AI Workbench instance states https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v2/projects.locations.instances#state """ STATE_UNSPECIFIED = 'STATE_UNSPECIFIED' STARTING = 'STARTING' PROVISIONING = 'PROVISIONING' ACTIVE = 'ACTIVE' STOPPING = 'STOPPING' STOPPED = 'STOPPED' DELETED = 'DELETED' UPGRADING = 'UPGRADING' INITIALIZING = 'INITIALIZING' SUSPENDING = 'SUSPENDING' SUSPENDED = 'SUSPENDED' def __str__(self): return str(self.value) class Instance(models.Resource): """Represent a Vertex AI Workbench user-managed notebook instance https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v1/projects.locations.instances#resource:-instance """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: """ The 'name' of the instance is already in the full path form projects/{project}/locations/{location}/instances/{instance}. """ return self._resource_data[NAME_KEY] @property def short_path(self) -> str: path = self.full_path path = re.sub(r'^projects/', '', path) path = re.sub(r'/locations/', '/', path) path = re.sub(r'/instances/', '/', path) return path @property def metadata(self) -> dict: return self._resource_data.get('metadata', {}) @property def name(self) -> str: logging.debug(self._resource_data) return self._resource_data[NAME_KEY] class Runtime(models.Resource): """Represent a Vertex AI Workbench runtime for a managed notebook instance https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v1/projects.locations.runtimes#resource:-runtime """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: """ The 'name' of the runtime is already in the full path form projects/{project}/locations/{location}/runtimes/{instance}. """ return self._resource_data[NAME_KEY] @property def short_path(self) -> str: path = self.full_path path = re.sub(r'^projects/', '', path) path = re.sub(r'/locations/', '/', path) path = re.sub(r'/runtimes/', '/', path) return path @property def metadata(self) -> dict: return self._resource_data.get('metadata', {}) @property def name(self) -> str: logging.debug(self._resource_data) return self._resource_data[NAME_KEY] @property def software_config(self) -> dict: return self._resource_data.get('softwareConfig', {}) @property def idle_shutdown(self) -> bool: return self.software_config.get('idleShutdown', False) @property def is_upgradeable(self) -> bool: return self.software_config.get('upgradeable', False) @property def version(self) -> str: return self.software_config.get('version', '') @property def health_state(self) -> HealthStateEnum: return self._resource_data.get(HEALTH_STATE_KEY, HealthStateEnum.HEALTH_STATE_UNSPECIFIED) class WorkbenchInstance(Instance): """Represent a Vertex AI Workbench Instance https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v2/projects.locations.instances#Instance """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id, resource_data=resource_data) self._resource_data = resource_data @property def state(self) -> StateEnum: return StateEnum[self._resource_data.get('state', 'STATE_UNSPECIFIED')] @property def gce_setup(self) -> dict: return self._resource_data.get('gceSetup', {}) @property def gce_service_account_email(self) -> str: gce_setup_service_accounts = self.gce_setup.get('serviceAccounts', []) return gce_setup_service_accounts[0].get( 'email', '') if len(gce_setup_service_accounts) > 0 else '' @property def network(self) -> str: gce_setup_network_interfaces = self.gce_setup.get('networkInterfaces', []) return gce_setup_network_interfaces[0].get( 'network', '') if len(gce_setup_network_interfaces) > 0 else '' @property def subnet(self) -> str: gce_setup_network_interfaces = self.gce_setup.get('networkInterfaces', []) return gce_setup_network_interfaces[0].get( 'subnet', '') if len(gce_setup_network_interfaces) > 0 else '' @property def disable_public_ip(self) -> bool: return self.gce_setup.get('disablePublicIp', False) @property def metadata(self) -> dict: # https://cloud.google.com/vertex-ai/docs/workbench/instances/manage-metadata#keys return self.gce_setup.get('metadata', {}) @property def environment_version(self) -> int: return int(self.metadata.get('version', '0')) @property def disable_mixer(self) -> bool: return self.metadata.get('disable-mixer', '').lower() == 'true' @property def serial_port_logging_enabled(self) -> bool: return self.metadata.get('serial-port-logging-enable', '').lower() == 'true' @property def report_event_health(self) -> bool: return self.metadata.get('report-event-health', '').lower() == 'true' @property def post_startup_script(self) -> str: return self.metadata.get('post-startup-script', '') @property def startup_script(self) -> str: return self.metadata.get('startup-script', '') @property def startup_script_url(self) -> str: return self.metadata.get('startup-script-url', '') @property def health_state(self) -> HealthStateEnum: return self._resource_data.get(HEALTH_STATE_KEY, HealthStateEnum.HEALTH_STATE_UNSPECIFIED) @property def health_info(self) -> dict: return self._resource_data.get(HEALTH_INFO_KEY, {}) @property def is_jupyterlab_status_healthy(self) -> bool: return self.health_info.get('jupyterlab_status', '') == '1' @property def is_jupyterlab_api_status_healthy(self) -> bool: return self.health_info.get('jupyterlab_api_status', '') == '1' @property def is_notebooks_api_dns_healthy(self) -> bool: return self.health_info.get('notebooks_api_dns', '') == '1' @property def is_proxy_registration_dns_healthy(self) -> bool: return self.health_info.get('proxy_registration_dns', '') == '1' @property def is_system_healthy(self) -> bool: return self.health_info.get('system_health', '') == '1' @property def is_docker_status_healthy(self) -> bool: return self.health_info.get('docker_status', '') == '1' @property def is_docker_proxy_agent_status_healthy(self) -> bool: return self.metadata.get('docker_proxy_agent_status', '') == '1' @caching.cached_api_call def get_instances(context: models.Context) -> Mapping[str, Instance]: instances: Dict[str, Instance] = {} if not apis.is_enabled(context.project_id, 'notebooks'): return instances logging.debug( 'fetching list of Vertex AI Workbench notebook instances in project %s', context.project_id) notebooks_api = apis.get_api('notebooks', 'v1', context.project_id) query = notebooks_api.projects().locations().instances().list( parent=f'projects/{context.project_id}/locations/-' ) #'-' (wildcard) all regions try: resp = query.execute(num_retries=config.API_RETRIES) if INSTANCES_KEY not in resp: return instances for i in resp[INSTANCES_KEY]: # verify that we have some minimal data that we expect if NAME_KEY not in i: raise RuntimeError( 'missing instance name in projects.locations.instances.list response' ) # projects/{projectId}/locations/{location}/instances/{instanceId} result = re.match(r'projects/[^/]+/locations/([^/]+)/instances/([^/]+)', i['name']) if not result: logging.error('invalid notebook instances data: %s', i['name']) continue if not context.match_project_resource(location=result.group(1), resource=result.group(2), labels=i.get('labels', {})): continue instances[i[NAME_KEY]] = Instance(project_id=context.project_id, resource_data=i) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return instances @caching.cached_api_call def _get_instance_health(context: models.Context, name: str) -> dict: logging.debug( 'fetching Vertex AI user-managed notebook instance health state in ' 'project %s', context.project_id) notebooks_api = apis.get_api('notebooks', 'v1', context.project_id) query = notebooks_api.projects().locations().instances().getInstanceHealth( name=name) return query.execute(num_retries=config.API_RETRIES) def get_instance_health_info(context: models.Context, name: str) -> dict: try: return _get_instance_health(context, name).get(HEALTH_INFO_KEY, {}) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err def get_instance_health_state(context: models.Context, name: str) -> HealthStateEnum: instance_health_state = HealthStateEnum('HEALTH_STATE_UNSPECIFIED') try: resp = _get_instance_health(context, name) if HEALTH_STATE_KEY not in resp: raise RuntimeError( 'missing instance health state in projects.locations.instances:getInstanceHealth response' ) instance_health_state = HealthStateEnum(resp[HEALTH_STATE_KEY]) return instance_health_state except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return instance_health_state @caching.cached_api_call def instance_is_upgradeable( context: models.Context, notebook_instance: str) -> Dict[str, Union[str, bool]]: is_upgradeable: Dict[str, Union[str, bool]] = {} if not apis.is_enabled(context.project_id, 'notebooks'): logging.error('Notebooks API is not enabled') return is_upgradeable if not notebook_instance: logging.error('notebookInstance not provided') return is_upgradeable logging.debug( 'fetching Vertex AI user-managed notebook instance is upgradeable in project %s', context.project_id) notebooks_api = apis.get_api('notebooks', 'v1', context.project_id) query = notebooks_api.projects().locations().instances().isUpgradeable( notebookInstance=notebook_instance) try: resp = query.execute(num_retries=config.API_RETRIES) if 'upgradeable' not in resp: raise RuntimeError( 'missing instance upgradeable data in projects.locations.instances:isUpgradeable response' ) is_upgradeable = resp return is_upgradeable except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return is_upgradeable @caching.cached_api_call def get_runtimes(context: models.Context) -> Mapping[str, Runtime]: runtimes: Dict[str, Runtime] = {} if not apis.is_enabled(context.project_id, 'notebooks'): return runtimes logging.debug( 'fetching list of Vertex AI Workbench managed notebook runtimes in project %s', context.project_id) notebooks_api = apis.get_api('notebooks', 'v1', context.project_id) query = notebooks_api.projects().locations().runtimes().list( parent=f'projects/{context.project_id}/locations/-' ) #'-' (wildcard) all regions try: resp = query.execute(num_retries=config.API_RETRIES) if RUNTIMES_KEY not in resp: return runtimes for i in resp[RUNTIMES_KEY]: # verify that we have some minimal data that we expect if NAME_KEY not in i: raise RuntimeError( 'missing runtime name in projects.locations.runtimes.list response') # projects/{projectId}/locations/{location}/runtimes/{runtimeId} result = re.match(r'projects/[^/]+/locations/([^/]+)/runtimes/([^/]+)', i['name']) if not result: logging.error('invalid notebook runtimes data: %s', i['name']) continue if not context.match_project_resource(location=result.group(1), resource=result.group(2), labels=i.get('labels', {})): continue runtimes[i[NAME_KEY]] = Runtime(project_id=context.project_id, resource_data=i) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return runtimes @caching.cached_api_call def get_workbench_instance(project_id: str, zone: str, instance_name: str) -> Instance: """Returns workbench instance object matching instance name and zone https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v2/projects.locations.instances/get """ workbench_instance: WorkbenchInstance = WorkbenchInstance( project_id=project_id, resource_data={}) if not apis.is_enabled(project_id, 'notebooks'): return workbench_instance notebooks_api = apis.get_api('notebooks', 'v2', project_id) name = f'projects/{project_id}/locations/{zone}/instances/{instance_name}' query = notebooks_api.projects().locations().instances().get(name=name) try: response = query.execute(num_retries=config.API_RETRIES) workbench_instance = WorkbenchInstance(project_id=project_id, resource_data=response) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return workbench_instance @caching.cached_api_call def workbench_instance_check_upgradability( project_id: str, workbench_instance_name: str) -> Dict[str, Union[str, bool]]: """Returns if workbench instance is upgradable and upgrade details https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v2/projects.locations.instances/checkUpgradability""" check_upgradability: Dict[str, Union[str, bool]] = {} if not apis.is_enabled(project_id, 'notebooks'): logging.error('Notebooks API is not enabled') return check_upgradability if not workbench_instance_name: logging.error('Workbench Instance name not provided') return check_upgradability logging.debug( 'fetching Vertex AI Workbench Instance is upgradeable in project %s', project_id) notebooks_api = apis.get_api('notebooks', 'v2', project_id) query = notebooks_api.projects().locations().instances().checkUpgradability( notebookInstance=workbench_instance_name) try: response = query.execute(num_retries=config.API_RETRIES) return response except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return check_upgradability ================================================ FILE: gcpdiag/queries/notebooks_stub.py ================================================ # Copyright 2023 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. # Lint as: python3 """Stub API calls used in notebooks.py for testing. Instead of doing real API calls, we return test JSON data. """ import json import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name NO_INSTANCE_NAME_ERROR = \ 'Not able to call {} without setting instance name for API.' NO_RUNTIME_NAME_ERROR = \ 'Not able to call {} without setting runtime name for API.' class NotebooksApiStub: """Mock object to simulate notebooks api calls.""" def __init__(self, mock_state='init'): self.mock_state: str = mock_state self.project_id: str = '' self.instance_name: str = '' self.zone: str = '' def projects(self): return self def locations(self): return self def instances(self): self.mock_state = 'instances' return self def runtimes(self): self.mock_state = 'runtimes' return self def list(self, parent): m = re.match(r'projects/([^/]+)', parent) project_id = m.group(1) if self.mock_state == 'instances': return apis_stub.RestCallStub(project_id, 'instances') if self.mock_state == 'runtimes': return apis_stub.RestCallStub(project_id, 'runtimes') else: raise ValueError('incorrect value received') def get(self, name): m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)', name) project_id = m.group(1) zone = m.group(2) instance_name = m.group(3) if self.mock_state == 'instances': if instance_name: self.mock_state = 'get_single_instance' self.instance_name = instance_name self.name = name self.project_id = project_id self.zone = zone return self raise ValueError(f'incorrect value received: {name}') def getInstanceHealth(self, name): m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)', name) if m: project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'health-state') else: raise ValueError(f'incorrect value received for instance name: {name}') def isUpgradeable(self, notebookInstance): m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)', notebookInstance) if m: project_id = m.group(1) return apis_stub.RestCallStub(project_id, 'is-upgradeable') else: raise ValueError( f'incorrect value received for notebookInstance: {notebookInstance}') def execute(self, num_retries=0): json_dir = apis_stub.get_json_dir(self.project_id) if self.mock_state == 'get_single_instance': with open(json_dir / 'workbench-instances.json', encoding='utf-8') as json_file: instances = json.load(json_file)['instances'] for instance in instances: if instance['name'] == self.name: return instance def checkUpgradability(self, notebookInstance): m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)', notebookInstance) if m: project_id = m.group(1) return apis_stub.RestCallStub( project_id, 'notebooks2instance-ok-check-upgradability') else: raise ValueError( f'incorrect value received for instance name: {notebookInstance}') ================================================ FILE: gcpdiag/queries/notebooks_test.py ================================================ # Copyright 2023 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. # Lint as: python3 """Test code in notebooks.py""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, notebooks DUMMY_PROJECT_NAME = 'gcpdiag-notebooks1-aaaa' DUMMY_PROJECT_NAME2 = 'gcpdiag-notebooks2-aaaa' DUMMY_INSTANCE_NAME = 'gcpdiag-notebooks1instance-aaaa' DUMMY_INSTANCE_OK_NAME = 'notebooks2instance-ok' DUMMY_INSTANCE_PROVISIONING_STUCK_NAME = 'notebooks2instance-provisioning-stuck' DUMMY_ZONE = 'us-west1-a' DUMMY_REGION = 'us-west1' DUMMY_INSTANCE_FULL_PATH_NAME = \ f'projects/{DUMMY_PROJECT_NAME}/locations/{DUMMY_ZONE}/instances/{DUMMY_INSTANCE_NAME}' DUMMY_INSTANCE_OK_FULL_PATH_NAME = \ f'projects/{DUMMY_PROJECT_NAME2}/locations/{DUMMY_ZONE}/instances/{DUMMY_INSTANCE_OK_NAME}' DUMMY_RUNTIME_NAME = 'gcpdiag-notebooks1runtime-aaaa' DUMMY_RUNTIME_FULL_PATH_NAME = \ f'projects/{DUMMY_PROJECT_NAME}/locations/{DUMMY_REGION}/runtimes/{DUMMY_RUNTIME_NAME}' DUMMY_PERM = 'domain:google.com' DUMMY_HEALTH_STATE = notebooks.HealthStateEnum('UNHEALTHY') DUMMY_IS_UPGRADEABLE = True DUMMY_NOT_UPGRADEABLE = False @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestNotebooks: """Test Vertex AI Workbench Notebooks""" def test_get_instances(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instances = notebooks.get_instances(context=context) assert DUMMY_INSTANCE_FULL_PATH_NAME in instances def test_get_runtimes(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) runtimes = notebooks.get_runtimes(context=context) assert DUMMY_RUNTIME_FULL_PATH_NAME in runtimes def test_get_instance_health(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instance_health_state = notebooks.get_instance_health_state( context=context, name=DUMMY_INSTANCE_FULL_PATH_NAME) assert DUMMY_HEALTH_STATE == instance_health_state def test_instance_is_upgradeable(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) instance_is_upgradeable = notebooks.instance_is_upgradeable( context=context, notebook_instance=DUMMY_INSTANCE_FULL_PATH_NAME) assert DUMMY_IS_UPGRADEABLE == instance_is_upgradeable.get('upgradeable') def test_get_instance(self): instance = notebooks.get_workbench_instance( project_id=DUMMY_PROJECT_NAME2, zone=DUMMY_ZONE, instance_name=DUMMY_INSTANCE_OK_NAME) assert DUMMY_INSTANCE_OK_NAME in instance.name def test_instance_check_upgradability(self): instance_upgradability = notebooks.workbench_instance_check_upgradability( project_id=DUMMY_PROJECT_NAME2, workbench_instance_name=DUMMY_INSTANCE_OK_FULL_PATH_NAME) assert DUMMY_NOT_UPGRADEABLE == instance_upgradability.get('upgradeable') ================================================ FILE: gcpdiag/queries/orgpolicy.py ================================================ # Copyright 2021 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. """Queries related to organization policy constraints.""" import logging from typing import Dict, List import googleapiclient.errors from gcpdiag import caching, config, utils from gcpdiag.queries import apis RESOURCE_TYPE_PROJECT = 'projects' RESOURCE_TYPE_ORGANIZATION = 'organizations' class PolicyConstraint: def __init__(self, name, resource_data): self.name = name self._resource_data = resource_data def __str__(self): return self.name + ': ' + self._resource_data.__str__() pass class BooleanPolicyConstraint(PolicyConstraint): def is_enforced(self) -> bool: return self._resource_data.get('enforced', False) class ListPolicyConstraint(PolicyConstraint): def allowed_values(self) -> List[str]: return self._resource_data.get('allowedValues', []) def denied_values(self) -> List[str]: return self._resource_data.get('deniedValues', []) class RestoreDefaultPolicyConstraint(PolicyConstraint): def is_default_restored(self) -> bool: """Indicates that the constraintDefault enforcement behavior is restored.""" return True @caching.cached_api_call def _get_effective_org_policy_all_constraints( project_id: str) -> Dict[str, PolicyConstraint]: # NOTE: this function doesn't get the "effective" org policy, but just # the policies that are directly set on the project. This is a deliberate # choice to improve performance. # # in order to speed up execution, we fetch all constraints that we think # could be useful on the first call to get_effective_org_policy() # note: it would be probably better to use this API, but then this would # require users to enable it :-( : # https://cloud.google.com/resource-manager/docs/reference/orgpolicy/rest/v2/projects.policies/getEffectivePolicy return get_all_project_org_policies(project_id) def get_effective_org_policy(project_id: str, constraint: str): """Get the effective org policy for a project and a given constraint. This function will first try to get the policy from a cached list of all policies that are set on the project. If the policy is not found, it will make a direct API call to get the effective policy for the given constraint. """ all_constraints = _get_effective_org_policy_all_constraints(project_id) if constraint in all_constraints: return all_constraints[constraint] # If the constraint is not in the list of all policies, it means that # the policy is not set on the project. In this case, we need to get the # effective policy directly. crm_api = apis.get_api('cloudresourcemanager', 'v1', project_id) try: req = crm_api.projects().getEffectiveOrgPolicy( resource=f'projects/{project_id}', body={'constraint': constraint}) result = req.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err if 'booleanPolicy' in result: return BooleanPolicyConstraint(result['constraint'], result['booleanPolicy']) elif 'listPolicy' in result: return ListPolicyConstraint(result['constraint'], result['listPolicy']) else: raise ValueError(f'unknown constraint type: {result}') @caching.cached_api_call def get_all_project_org_policies(project_id: str): """list all the org policies set for a particular resource. Args: project_id: The project ID. Returns: A dictionary of PolicyConstraint objects, keyed by constraint name. Raises: utils.GcpApiError: on API errors. """ crm_api = apis.get_api('cloudresourcemanager', 'v1', project_id) resource = f'projects/{project_id}' all_constraints: Dict[str, PolicyConstraint] = {} logging.debug('listing org policies of %s', project_id) request = crm_api.projects().listOrgPolicies(resource=resource) while request: try: response = request.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err policies_list = response.get('policies', []) for policy in policies_list: constraint_name = policy.get('constraint') if 'booleanPolicy' in policy: all_constraints[constraint_name] = BooleanPolicyConstraint( constraint_name, policy['booleanPolicy']) elif 'listPolicy' in policy: all_constraints[constraint_name] = ListPolicyConstraint( constraint_name, policy['listPolicy']) elif 'restoreDefault' in policy: all_constraints[constraint_name] = RestoreDefaultPolicyConstraint( constraint_name, policy['restoreDefault']) else: logging.warning('unknown constraint type: %s', policy) request = crm_api.projects().listOrgPolicies_next(request, response) return all_constraints ================================================ FILE: gcpdiag/queries/orgpolicy_test.py ================================================ # Copyright 2021 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. """Test code in crm.py.""" import unittest from unittest import mock from gcpdiag.queries import apis_stub, orgpolicy DUMMY_PROJECT_ID = 'gcpdiag-fw-policy-aaaa' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class Test(unittest.TestCase): """Test project.py""" def test_get_effective_org_policy(self): p = orgpolicy.get_effective_org_policy( DUMMY_PROJECT_ID, 'constraints/compute.disableSerialPortAccess') assert p.is_enforced() p = orgpolicy.get_effective_org_policy( DUMMY_PROJECT_ID, 'constraints/compute.requireOsLogin') assert not p.is_enforced() def test_get_all_project_org_policies(self): policies = orgpolicy.get_all_project_org_policies(DUMMY_PROJECT_ID) assert len(policies) == 2 assert isinstance( policies['constraints/cloudbuild.allowedWorkerPools'], orgpolicy.ListPolicyConstraint, ) assert isinstance( policies['constraints/compute.skipDefaultNetworkCreation'], orgpolicy.BooleanPolicyConstraint, ) assert policies['constraints/cloudbuild.allowedWorkerPools'].allowed_values( ) == ['projects/12340004/locations/us-central1/workerPools/test-pool'] ================================================ FILE: gcpdiag/queries/osconfig.py ================================================ # Copyright 2024 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. # Lint as: python3 """Queries related to GCP OS Config""" import logging import re from typing import Dict, Mapping, Optional import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, apis_utils class Inventory(models.Resource): """Represents OS Inventory data of a GCE VM instance""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data # e.g: projects/{project_number}/locations/{location}/instances/{instance_id}/inventory @property def full_path(self) -> str: return self._resource_data['name'] # e.g: {project_number}/{location}/{instance_id}/inventory @property def short_path(self) -> str: path = self.full_path path = re.sub(r'^projects/', '', path) path = re.sub(r'/locations/', '/', path) path = re.sub(r'/instances/', '/', path) return path # e.g: '5221437597918447050' @property def instance_id(self) -> str: return self._resource_data['name'].split('/')[-2] # e.g: debian, windows. @property def os_shortname(self) -> str: if 'osInfo' in self._resource_data: return self._resource_data['osInfo'].get('shortName', '') return '' @property def os_version(self) -> str: if 'osInfo' in self._resource_data: return self._resource_data['osInfo'].get('version', '') return '' # @property def installed_packages(self) -> Mapping[str, str]: installed_packages: Dict[str, str] = {} if 'items' in self._resource_data: installed_items = [ i for i in self._resource_data['items'].values() if i.get('type', '') == 'INSTALLED_PACKAGE' ] for item in installed_items: if 'installedPackage' not in item: continue pkg = item['installedPackage'] if 'yumPackage' in pkg: p = pkg['yumPackage'] installed_packages[p.get('packageName', '')] = p.get('version', '') elif 'aptPackage' in pkg: p = pkg['aptPackage'] installed_packages[p.get('packageName', '')] = p.get('version', '') elif 'googetPackage' in pkg: p = pkg['googetPackage'] installed_packages[p.get('packageName', '')] = p.get('version', '') elif 'windowsApplication' in pkg: p = pkg['windowsApplication'] installed_packages[p.get('displayName', '')] = p.get('displayVersion', '') return installed_packages @caching.cached_api_call(in_memory=True) def list_inventories( context: models.Context, location: str, ) -> Mapping[str, Inventory]: inventories: Dict[str, Inventory] = {} if not apis.is_enabled(context.project_id, 'osconfig'): return inventories osconfig_api = apis.get_api('osconfig', 'v1', context.project_id) logging.debug( 'fetching inventory data for all VMs under zone %s in project %s', location, context.project_id, ) query = osconfig_api.projects().locations().instances().inventories() try: resp = apis_utils.list_all( query.list( parent=( f'projects/{context.project_id}/locations/{location}/instances/-' ), view='FULL', ), query.list_next, 'inventories', ) except googleapiclient.errors.HttpError as err: if err.resp.status in [404]: return inventories raise utils.GcpApiError(err) from err for i in resp: inventory = Inventory(context.project_id, resource_data=i) inventories[inventory.instance_id] = inventory return inventories @caching.cached_api_call(in_memory=True) def get_inventory(context: models.Context, location: str, instance_name: str) -> Optional[Inventory]: if not apis.is_enabled(context.project_id, 'osconfig'): return None osconfig_api = apis.get_api('osconfig', 'v1', context.project_id) logging.debug( 'fetching inventory data for VM %s in zone %s in project %s', instance_name, location, context.project_id, ) query = (osconfig_api.projects().locations().instances().inventories().get( name= f'projects/{context.project_id}/locations/{location}/instances/{instance_name}/inventory', view='FULL', )) try: resp = query.execute(num_retries=config.API_RETRIES) except googleapiclient.errors.HttpError as err: if err.resp.status in [404]: return None raise utils.GcpApiError(err) from err return Inventory(context.project_id, resource_data=resp) ================================================ FILE: gcpdiag/queries/osconfig_stub.py ================================================ # Copyright 2024 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. # Lint as: python3 """Stub API calls used in osconfig.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name DUMMY_PROJECT_NAME = 'gcpdiag-osconfig1-aaaa' DUMMY_NON_EXISTENT_INSTANCE_NAME = 'instance-does-not-exist' class OSConfigStub: """Mock object to simulate osconfig api calls.""" def __init__(self, mock_state='init'): self.mock_state = mock_state def projects(self): return self def locations(self): return self def instances(self): return self def inventories(self): self.mock_state = 'inventory' return self def list_next(self, previous_request, previous_response): return None def list(self, parent, **kwargs): if self.mock_state == 'inventory': stub = apis_stub.RestCallStub(DUMMY_PROJECT_NAME, 'inventories') return stub else: raise ValueError('incorrect value received') def get(self, name, **kwargs): m = re.match(r'([\w].+)/instances/([^/]+)', name) instance_name = m.group(2) if self.mock_state == 'inventory': stub = apis_stub.RestCallStub(DUMMY_PROJECT_NAME, 'inventory') if instance_name == DUMMY_NON_EXISTENT_INSTANCE_NAME: stub.fail_next(1, 404) return stub else: raise ValueError('incorrect value received') ================================================ FILE: gcpdiag/queries/osconfig_test.py ================================================ # Copyright 2024 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. # Lint as: python3 """Test code in pubsub.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, osconfig DUMMY_PROJECT_NAME = 'gcpdiag-osconfig1-aaaa' PACKAGE_NAME_LINUX = 'google-fluentd' PACKAGE_VERSION = '1.10.1-1' OS_SHORTNAME = 'debian' OS_VERSION = '10' DUMMY_LOCATION = 'us-central1-a' DUMMY_INSTANCE_NAME = 'instance-1' DUMMY_NON_EXISTENT_INSTANCE_NAME = 'instance-does-not-exist' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestOSConfig: """Test OSConfig""" def test_get_inventory(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) inventory = osconfig.get_inventory( context=context, location=DUMMY_LOCATION, instance_name=DUMMY_INSTANCE_NAME, ) assert OS_SHORTNAME == inventory.os_shortname assert OS_VERSION == inventory.os_version assert PACKAGE_NAME_LINUX in inventory.installed_packages assert PACKAGE_VERSION == inventory.installed_packages[PACKAGE_NAME_LINUX] def test_get_inventory_of_non_existent_instance(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) inventory = osconfig.get_inventory( context=context, location=DUMMY_LOCATION, instance_name=DUMMY_NON_EXISTENT_INSTANCE_NAME, ) assert inventory is None def test_list_inventories(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) inventories = osconfig.list_inventories( context=context, location=DUMMY_LOCATION, ) assert len(inventories) == 4 instance_id = '730128809742038298' project_number = 12340051 assert instance_id in inventories inventory = inventories[instance_id] assert 'windows' == inventory.os_shortname assert '10.0.20348' == inventory.os_version assert 'GooGet - google-cloud-ops-agent' in inventory.installed_packages assert (inventory.short_path == f'{project_number}/us-central1-a/{instance_id}/inventory') ================================================ FILE: gcpdiag/queries/pubsub.py ================================================ # Copyright 2021 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. # Lint as: python3 """Queries related to GCP PubSub """ import logging import re from typing import Dict, Mapping, Union import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis, iam class Topic(models.Resource): """Represent a Topic""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._metadata_dict = None @property def name(self) -> str: m = re.search(r'/topics/([^/]+)$', self._resource_data['name']) if not m: raise RuntimeError('can\'t determine name of topic %s' % (self._resource_data['name'])) return m.group(1) @property def full_path(self) -> str: return self._resource_data['name'] @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def kms_key_name(self) -> str: return self._resource_data['kmsKeyName'] @caching.cached_api_call def get_topics(context: models.Context) -> Mapping[str, Topic]: """Get all topics(Does not include deleted topics).""" topics: Dict[str, Topic] = {} if not apis.is_enabled(context.project_id, 'pubsub'): return topics pubsub_api = apis.get_api('pubsub', 'v1', context.project_id) logging.debug('fetching list of PubSub topics in project %s', context.project_id) query = pubsub_api.projects().topics().list( project=f'projects/{context.project_id}') try: resp = query.execute(num_retries=config.API_RETRIES) if 'topics' not in resp: return topics for t in resp['topics']: # verify that we have some minimal data that we expect if 'name' not in t: raise RuntimeError('missing data in topics response') # projects/{project}/topics/{topic} result = re.match(r'projects/[^/]+/topics/([^/]+)', t['name']) if not result: logging.error('invalid topic data: %s', t['name']) continue if not context.match_project_resource(resource=result.group(1), labels=t.get('labels', {})): continue topics[t['name']] = Topic(project_id=context.project_id, resource_data=t) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return topics class TopicIAMPolicy(iam.BaseIAMPolicy): def _is_resource_permission(self, permission): return True @caching.cached_api_call(in_memory=True) def get_topic_iam_policy(context: models.Context, name: str) -> TopicIAMPolicy: project_id = utils.get_project_by_res_name(name) pubsub_api = apis.get_api('pubsub', 'v1', project_id) request = pubsub_api.projects().topics().getIamPolicy(resource=name) return iam.fetch_iam_policy(request, TopicIAMPolicy, project_id, name, context) class Subscription(models.Resource): """Represent a Subscription.""" _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data self._metadata_dict = None @property def name(self) -> str: m = re.search(r'/subscriptions/([^/]+)$', self._resource_data['name']) if not m: raise RuntimeError('can\'t determine name of subscription %s' % (self._resource_data['name'])) return m.group(1) @property def full_path(self) -> str: return self._resource_data['name'] @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @property def topic(self) -> Union[Topic, str]: """ Return subscription's topic as a Topic object, or String '_deleted-topic_' if topic is deleted. """ if 'topic' not in self._resource_data: raise RuntimeError('topic not set for subscription {self.name}') elif self._resource_data['topic'] == '_deleted-topic_': return '_deleted_topic_' m = re.match(r'projects/([^/]+)/topics/([^/]+)', self._resource_data['topic']) if not m: raise RuntimeError("can't parse topic: %s" % self._resource_data['topic']) (project_id, topic_name) = (m.group(1), self._resource_data['topic']) topics = get_topics(models.Context(project_id)) if topic_name not in topics: raise RuntimeError( f'Topic {topic_name} for Subscription {self.name} not found') return topics[topic_name] @property def push_config(self) -> dict: return self._resource_data.get('pushConfig', {}) @property def push_oidc_service_account_email(self) -> str: """Return the OIDC service account email for a push subscription.""" return self.push_config.get('oidcToken', {}).get('serviceAccountEmail', '') def is_detached(self) -> bool: """Return if subscription is detached.""" if 'detached' in self._resource_data: return bool(self._resource_data['detached']) return False def is_big_query_subscription(self) -> bool: """Return Boolean value if subscription is a big query subscription.""" if 'bigqueryConfig' in self._resource_data: return True return False def is_gcs_subscription(self) -> bool: """Return Boolean value if subscription is a gcs subscription.""" if 'cloudStorageConfig' in self._resource_data: return True return False def is_push_subscription(self) -> bool: """Return Boolean value if subscription is a push subscription.""" if (self._resource_data['pushConfig'] or self.is_big_query_subscription() or self.is_gcs_subscription()): return True return False def is_active(self) -> bool: """Return Boolean value if subscription is active.""" return self._resource_data['state'] == 'ACTIVE' def has_dead_letter_topic(self) -> bool: """Return Truthy value if subscription has a dead-letter topic.""" if 'deadLetterPolicy' in self._resource_data: return bool(self._resource_data['deadLetterPolicy']['deadLetterTopic']) return False def dead_letter_topic(self) -> str: """Return the dead-letter topic.""" if self.has_dead_letter_topic(): return self._resource_data.get('deadLetterPolicy', {}).get('deadLetterTopic', '') return '' def gcs_subscription_bucket(self) -> str: """Return the name of the bucket attached to GCS subscription.""" if self.is_gcs_subscription(): return get_path(self._resource_data, ('cloudStorageConfig', 'bucket')) return '' # acts as a null return that can be evaluated as a false value @caching.cached_api_call def get_subscriptions(context: models.Context) -> Mapping[str, Subscription]: subscriptions: Dict[str, Subscription] = {} if not apis.is_enabled(context.project_id, 'pubsub'): return subscriptions pubsub_api = apis.get_api('pubsub', 'v1', context.project_id) logging.debug('fetching list of PubSub subscriptions in project %s', context.project_id) query = pubsub_api.projects().subscriptions().list( project=f'projects/{context.project_id}') try: resp = query.execute(num_retries=config.API_RETRIES) if 'subscriptions' not in resp: return subscriptions for s in resp['subscriptions']: # verify that we have some minimal data that we expect if 'name' not in s: raise RuntimeError('missing data in topics response') # projects/{project}/subscriptions/{sub} result = re.match(r'projects/[^/]+/subscriptions/([^/]+)', s['name']) if not result: logging.error('invalid subscription data: %s', s['name']) continue if not context.match_project_resource(resource=result.group(1), labels=s.get('labels', {})): continue subscriptions[s['name']] = Subscription(project_id=context.project_id, resource_data=s) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return subscriptions @caching.cached_api_call def get_subscription(project_id: str, subscription_name: str) -> Union[None, Subscription]: if not apis.is_enabled(project_id, 'pubsub'): return None pubsub_api = apis.get_api('pubsub', 'v1', project_id) logging.debug('fetching PubSub subscription in project %s', project_id) query = pubsub_api.projects().subscriptions().get( subscription=f'projects/{project_id}/subscriptions/{subscription_name}') try: resp = query.execute(num_retries=config.API_RETRIES) return Subscription(project_id=project_id, resource_data=resp) except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err class SubscriptionIAMPolicy(iam.BaseIAMPolicy): def _is_resource_permission(self, permission): return True @caching.cached_api_call(in_memory=True) def get_subscription_iam_policy(context: models.Context, name: str) -> SubscriptionIAMPolicy: project_id = utils.get_project_by_res_name(name) pubsub_api = apis.get_api('pubsub', 'v1', project_id) request = pubsub_api.projects().subscriptions().getIamPolicy(resource=name) return iam.fetch_iam_policy(request, SubscriptionIAMPolicy, project_id, name, context) ================================================ FILE: gcpdiag/queries/pubsub_stub.py ================================================ # 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. # Lint as: python3 """Stub API calls used in pubsub.py for testing. Instead of doing real API calls, we return test JSON data. """ import json import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name DUMMY_PROJECT_NAME = 'gcpdiag-pubsub1-aaaa' class PubsubApiStub(apis_stub.ApiStub): """Mock object to simulate pubsub api calls.""" def __init__(self, mock_state='init', project_id=None): self.mock_state = mock_state self.project_id = project_id def projects(self): return self def topics(self): self.mock_state = 'topics' return self def subscriptions(self): self.mock_state = 'subscriptions' return self def get(self, subscription): self.mock_state = 'subscription' self.subscription = subscription return self def list(self, project): m = re.match(r'projects/([^/]+)', project) project_id = m.group(1) if self.mock_state == 'topics': return apis_stub.RestCallStub(project_id, 'topics') if self.mock_state == 'subscriptions': return apis_stub.RestCallStub(project_id, 'subscriptions') else: raise ValueError('incorrect value received') def getIamPolicy(self, resource): if self.mock_state == 'topics': return apis_stub.RestCallStub(DUMMY_PROJECT_NAME, 'topic-iam') if self.mock_state == 'subscriptions': return apis_stub.RestCallStub(DUMMY_PROJECT_NAME, 'subscriptions-iam') else: raise ValueError('incorrect value received') def execute(self, num_retries: int = 0): if self.mock_state == 'subscription': m = re.match(r'projects/([^/]+)/subscriptions/([^/]+)', self.subscription) project_id = '' if m: project_id = m.group(1) json_dir = apis_stub.get_json_dir(project_id) with open(json_dir / 'subscriptions.json', encoding='utf-8') as json_file: data = json.load(json_file) for s in data.get('subscriptions', []): if s['name'] == self.subscription: return s return None ================================================ FILE: gcpdiag/queries/pubsub_test.py ================================================ # 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. # Lint as: python3 """Test code in pubsub.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, pubsub DUMMY_PROJECT_NAME = 'gcpdiag-pubsub1-aaaa' DUMMY_TOPIC_NAME = 'projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1' DUMMY_SUB_NAME = 'projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1' DUMMY_SUB_SHORT_NAME = 'gcpdiag-pubsub1subscription-9pm6hng1' DUMMY_PERM = 'domain:google.com' @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestPubsub: """Test Pubsub""" def test_get_topics(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) topics = pubsub.get_topics(context=context) assert DUMMY_TOPIC_NAME in topics def test_get_subscriptions(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) subscriptions = pubsub.get_subscriptions(context=context) assert DUMMY_SUB_NAME in subscriptions def test_get_subscription(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) subscription = pubsub.get_subscription( project_id=context.project_id, subscription_name=DUMMY_SUB_SHORT_NAME) assert subscription.full_path == DUMMY_SUB_NAME def test_get_topic_iam_policy(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) policy = pubsub.get_topic_iam_policy(context, DUMMY_TOPIC_NAME) assert DUMMY_PERM in policy.get_members() def test_get_subscription_iam_policy(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) policy = pubsub.get_subscription_iam_policy(context, DUMMY_SUB_NAME) assert DUMMY_PERM in policy.get_members() ================================================ FILE: gcpdiag/queries/quotas.py ================================================ # 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. """Queries related to Quota.""" CONSUMER_QUOTA_QUERY_TEMPLATE = """ fetch consumer_quota | filter resource.service == '{service_name}' | {{ metric serviceruntime.googleapis.com/quota/allocation/usage | align next_older(1d) | group_by [resource.project_id, metric.quota_metric, resource.location], max(val()) ; metric serviceruntime.googleapis.com/quota/limit | filter metric.limit_name =~ '{limit_name}' | align next_older(1d) | group_by [resource.project_id, metric.quota_metric, resource.location], min(val()) }} | join | value [val(0), val(1)] | within {within_days}d | group_by 1d, [max(val(0))/min(val(1)), min(val(1))] """ QUOTA_EXCEEDED_QUERY_TEMPLATE = """ fetch consumer_quota | metric 'serviceruntime.googleapis.com/quota/exceeded' | group_by 1d, [value_exceeded_count_true: count_true(value.exceeded)] | within {within_days}d """ QUOTA_EXCEEDED_HOURLY_PER_SERVICE_QUERY_TEMPLATE = """ fetch consumer_quota | metric 'serviceruntime.googleapis.com/quota/exceeded' | filter (resource.service =~ {service_name}) | group_by 1h, [value_exceeded_count_true: count_true(value.exceeded)] | within {within_days}d """ QUOTA_EXCEEDED_QUERY_WINDOW_TEMPLATE = """ fetch consumer_quota | metric 'serviceruntime.googleapis.com/quota/exceeded' | group_by 1h, [value_exceeded_count_true: count_true(value.exceeded)] | within {start_time}, {end_time} """ ================================================ FILE: gcpdiag/queries/recommender_stub.py ================================================ # Copyright 2024 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. # Lint as: python3 """Recommender Stub API Instead of doing real API calls, we return test JSON data. """ from gcpdiag.queries import apis_stub, billing_stub # pylint: disable=unused-argument # pylint: disable=invalid-name class RecommenderApiStub: """Mock object to simulate recommender cost insights""" def billingAccounts(self): return billing_stub.RecommenderBillingApiStub() def projects(self): return self def locations(self): return self def insightTypes(self): return self def insights(self): return self def list(self, parent): parent_split = parent.split('/') project, scope, insight_type = ( parent_split[1], parent_split[3], parent_split[-1], ) if (insight_type == 'google.networkanalyzer.networkservices.loadBalancerInsight'): return apis_stub.RestCallStub(project, f'lb-insights-{scope}') def list_next(self, previous_request, previous_response): return None ================================================ FILE: gcpdiag/queries/vertex.py ================================================ # Copyright 2023 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. # Lint as: python3 """Queries related to GCP Vertex AI """ import enum import logging import re from typing import Dict import googleapiclient.errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis FEATURESTORES_KEY = 'featurestores' NAME_KEY = 'name' STATE_KEY = 'state' REGIONS = { 1: 'asia-east1', 2: 'asia-east2', 3: 'asia-northeast1', 4: 'asia-northeast2', 5: 'asia-northeast3', 6: 'asia-south1', 7: 'asia-south2', 8: 'asia-southeast1', 9: 'asia-southeast2', 10: 'australia-southeast1', 11: 'australia-southeast2', 12: 'europe-central2', 13: 'europe-north1', 14: 'europe-southwest1', 15: 'europe-west1', 16: 'europe-west2', 17: 'europe-west3', 18: 'europe-west4', 19: 'europe-west6', 20: 'europe-west8', 21: 'europe-west9', 22: 'europe-west12', 23: 'me-central1', 24: 'me-west1', 25: 'northamerica-northeast1', 26: 'northamerica-northeast2', 27: 'southamerica-east1', 28: 'southamerica-west1', 29: 'us-central1', 30: 'us-east1', 31: 'us-east4', 32: 'us-east5', 33: 'us-south1', 34: 'us-west1', 35: 'us-west2', 36: 'us-west3', 37: 'us-west4', } # Different Vertex AI features available in different regions FEATURE_REGIONS = { FEATURESTORES_KEY: [ 1, 2, 3, 5, 6, 8, 9, 10, 12, 15, 16, 17, 18, 19, 21, 25, 26, 27, 29, 30, 31, 34, 35, 36, 37 ] } class FeaturestoreStateEnum(enum.Enum): """The possible states a Vertex AI featurestore can have. https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores#state """ STATE_UNSPECIFIED = 'STATE_UNSPECIFIED' STABLE = 'STABLE' UPDATING = 'UPDATING' def __str__(self): return str(self.value) class Featurestore(models.Resource): """Represent a Vertex AI featurestore https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores#resource:-featurestore """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def full_path(self) -> str: """ The 'name' of the featurestore is already in the full path form projects/{project}/locations/{location}/featurestores/{featurestore}. """ return self._resource_data[NAME_KEY] @property def short_path(self) -> str: path = self.full_path path = re.sub(r'^projects/', '', path) path = re.sub(r'/locations/', '/', path) path = re.sub(r'/featurestores/', '/', path) return path @property def name(self) -> str: logging.debug(self._resource_data) return self._resource_data[NAME_KEY] @property def state(self) -> str: logging.debug(self._resource_data) return self._resource_data[STATE_KEY] @caching.cached_api_call def get_featurestores(context: models.Context) -> Dict[str, Featurestore]: featurestores: Dict[str, Featurestore] = {} if not apis.is_enabled(context.project_id, 'aiplatform'): return featurestores for region in FEATURE_REGIONS[FEATURESTORES_KEY]: featurestores_res: Dict[str, Featurestore] = {} region_name = REGIONS[region] logging.debug( 'fetching list of Vertex AI featurestores in project %s for region %s', context.project_id, region_name) vertex_api = apis.get_api('aiplatform', 'v1', context.project_id, region_name) query = vertex_api.projects().locations().featurestores().list( parent=f'projects/{context.project_id}/locations/{region_name}') try: resp = query.execute(num_retries=config.API_RETRIES) if FEATURESTORES_KEY not in resp: continue for resp_i in resp[FEATURESTORES_KEY]: # verify that we have some minimal data that we expect if NAME_KEY not in resp_i: raise RuntimeError( 'missing featurestore name in projects.locations.featurestores.list response' ) i = Featurestore(project_id=context.project_id, resource_data=resp_i) featurestores_res[i.full_path] = i if featurestores: featurestores.update(featurestores_res) else: featurestores = featurestores_res except googleapiclient.errors.HttpError as err: raise utils.GcpApiError(err) from err return featurestores ================================================ FILE: gcpdiag/queries/vertex_stub.py ================================================ # Copyright 2023 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. # Lint as: python3 """Stub API calls used in vertex.py for testing. Instead of doing real API calls, we return test JSON data. """ import re from gcpdiag.queries import apis_stub # pylint: disable=unused-argument # pylint: disable=invalid-name NO_FEATURESTORE_NAME_ERROR = \ 'Not able to call {} without setting featurestore name for API.' class VertexApiStub: """Mock object to simulate aiplatform (vertex) api calls.""" def __init__(self, mock_state='init'): self.mock_state = mock_state def projects(self): return self def locations(self): return self def featurestores(self): self.mock_state = 'featurestores' return self def list(self, parent): m = re.match(r'projects/([^/]+)', parent) project_id = m.group(1) if self.mock_state == 'featurestores': return apis_stub.RestCallStub(project_id, 'featurestores') else: raise ValueError('incorrect value received') ================================================ FILE: gcpdiag/queries/vertex_test.py ================================================ # Copyright 2023 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. # Lint as: python3 """Test code in vertex.py.""" from unittest import mock from gcpdiag import models from gcpdiag.queries import apis_stub, vertex DUMMY_PROJECT_NAME = 'gcpdiag-vertex1-aaaa' DUMMY_PROJECT_NUMBER = '12340015' DUMMY_FEATURESTORE_NAME = 'gcpdiag_vertex1featurestore_aaaa' DUMMY_FEATURESTORE_FULL_PATH_NAME = \ f'projects/{DUMMY_PROJECT_NUMBER}/locations/us-west1/featurestores/{DUMMY_FEATURESTORE_NAME}' DUMMY_PERM = 'domain:google.com' DUMMY_FEATURESTORE_STATE = vertex.FeaturestoreStateEnum('STATE_UNSPECIFIED') @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestVertex: """Test Vertex AI Featurestores""" def test_get_featurestores(self): context = models.Context(project_id=DUMMY_PROJECT_NAME) featurestores = vertex.get_featurestores(context=context) assert DUMMY_FEATURESTORE_FULL_PATH_NAME in featurestores ================================================ FILE: gcpdiag/queries/vpn.py ================================================ # Copyright 2021 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. """Queries related to VPN tunnel.""" import logging import re from typing import List from googleapiclient import errors as googleapiclient_errors from gcpdiag import caching, config, models, utils from gcpdiag.queries import apis class Vpn(models.Resource): """ Represents a Vpn Tunnel. https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels """ _resource_data: dict def __init__(self, project_id, resource_data): super().__init__(project_id=project_id) self._resource_data = resource_data @property def name(self) -> str: return self._resource_data['name'] @property def under_maintenance(self) -> bool: return self._resource_data.get('status') == 'UNDER_MAINTENANCE' @property def peer_ip(self) -> str: return self._resource_data['peerIp'] @property def status(self) -> str: return self._resource_data['status'] @property def router(self) -> str: return self._resource_data['router'] @property def id(self) -> str: return self._resource_data['id'] @property def local_traffic_selector(self) -> List[str]: return self._resource_data.get('localTrafficSelector', []) @property def remote_traffic_selector(self) -> List[str]: return self._resource_data.get('remoteTrafficSelector', []) @property def self_link(self) -> str: return self._resource_data['selfLink'] @property def full_path(self) -> str: result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', self.self_link) if result: return result.group(1) else: return f'>> {self.self_link}' @property def short_path(self) -> str: path = self.project_id + '/' + self.name return path @caching.cached_api_call(in_memory=True) def get_vpn(project_id: str, vpn_name: str, region: str) -> Vpn: logging.debug('fetching VPN: %s', vpn_name) compute = apis.get_api('compute', 'v1', project_id) request = compute.vpnTunnels().get(project=project_id, vpnTunnel=vpn_name, region=region) try: response = request.execute(num_retries=config.API_RETRIES) except googleapiclient_errors.HttpError as err: raise utils.GcpApiError(err) return Vpn(project_id, response) ================================================ FILE: gcpdiag/queries/vpn_stub.py ================================================ # Copyright 2021 Google LLC """Stub API calls used in vpn.py for testing.""" from gcpdiag.queries import apis_stub # pylint: disable=invalid-name # pylint: disable=unused-argument class VpnApiStub: def vpnTunnels(self): return self def get(self, project, region, vpnTunnel): return apis_stub.RestCallStub(project, vpnTunnel) class VpnTunnelApiStub(apis_stub.ApiStub): """Mock object to simulate VPN tunnel api calls.""" def __init__(self, mock_state): self.mock_state = mock_state def get(self, project, region, vpnTunnel): if self.mock_state == 'vpnTunnels': return apis_stub.RestCallStub(project, vpnTunnel) else: raise ValueError(f'cannot call method {self.mock_state} here') ================================================ FILE: gcpdiag/queries/vpn_test.py ================================================ # Copyright 2025 Google LLC # ... (standard license header) ... """Unit tests for vpn.py.""" from unittest import mock import pytest from googleapiclient import errors from gcpdiag import caching, utils from gcpdiag.queries import apis_stub, vpn, vpn_stub DUMMY_PROJECT_ID = 'gcpdiag-vpn1-aaaa' DUMMY_VPN_NAME = 'vpn-tunnel-1' DUMMY_REGION = 'europe-west4' def get_api_stub(service_name, version, project_id=None): if service_name == 'compute': return vpn_stub.VpnApiStub() return apis_stub.get_api_stub(service_name, version, project_id) @mock.patch('gcpdiag.queries.apis.get_api', new=get_api_stub) class Test: def test_get_vpn(self): tunnel = vpn.get_vpn(project_id=DUMMY_PROJECT_ID, vpn_name=DUMMY_VPN_NAME, region=DUMMY_REGION) assert tunnel.name == 'vpn-tunnel-1' assert tunnel.status == 'ESTABLISHED' assert tunnel.id == '123456789' assert tunnel.peer_ip == '1.1.1.1' assert tunnel.project_id == DUMMY_PROJECT_ID assert 'europe-west4' in tunnel.full_path assert tunnel.local_traffic_selector == ['0.0.0.0/0'] assert tunnel.remote_traffic_selector == ['0.0.0.0/0'] def test_short_path(self): tunnel = vpn.get_vpn(DUMMY_PROJECT_ID, DUMMY_VPN_NAME, DUMMY_REGION) assert tunnel.short_path == f'{DUMMY_PROJECT_ID}/{DUMMY_VPN_NAME}' def test_get_vpn_failure(self): mock_request = mock.Mock() mock_request.execute.side_effect = errors.HttpError(mock.Mock(status=404), b'Test Error') mock_service = mock.Mock() mock_service.vpnTunnels.return_value.get.return_value = mock_request # Overlay the class-level patch with a new one for this test with mock.patch('gcpdiag.queries.apis.get_api', return_value=mock_service): with caching.bypass_cache(): with pytest.raises(utils.GcpApiError): vpn.get_vpn(DUMMY_PROJECT_ID, DUMMY_VPN_NAME, DUMMY_REGION) ================================================ FILE: gcpdiag/queries/web.py ================================================ # Copyright 2024 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. """Fetch the html content from the given page url.""" import logging import requests from bs4 import BeautifulSoup def fetch_and_extract_table(page_url: str, tag: str = None, tag_id: str = None, class_name: str = None): """Fetch the table from the given page url and return it.""" table = None response = get(url=page_url, timeout=10) response.raise_for_status( ) # Raise an exception if the response is not successful soup = BeautifulSoup(response.content, 'html.parser') content_fetched = None if tag: if tag_id: content_fetched = soup.find(tag, id=tag_id) elif class_name: content_fetched = soup.find(tag, class_=class_name) else: content_fetched = soup.find(tag) if not content_fetched: logging.error('tag/id/class not found for %s with tag %s', page_url, tag) return table if tag == 'table': return content_fetched table = content_fetched.find_next('table') if not table: logging.error('Table not found for %s with tag %s', page_url, tag) return table return table def get( url, params=None, timeout=10, *, data=None, headers=None, ) -> requests.Response: """A wrapper around requests.get for http calls which can't use the google discovery api""" return requests.get(url=url, params=params, timeout=timeout, data=data, headers=headers) ================================================ FILE: gcpdiag/queries/web_stub.py ================================================ # Copyright 2024 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. """Fetch the html content from the given page url.""" import pathlib import re import requests json_dir = pathlib.Path(__file__).parents[2] / 'test-data/web/static' def _derive_basename_from_url(url): url = re.sub(r'^https?://', '', url) formatted_url = re.sub(r'[._=/]', '-', url) return formatted_url # pylint: disable=unused-argument, protected-access def get(url, params=None, timeout=None, *, data=None, headers=None): json_basename = _derive_basename_from_url(url) try: filename = str(json_dir / json_basename) with open(filename, encoding='utf-8') as file: response = requests.Response() response._content = file.read().encode('utf-8') response.status_code = 200 response.headers['Content-Type'] = 'text/html' return response except FileNotFoundError: response.status_code = 404 return response ================================================ FILE: gcpdiag/queries/web_test.py ================================================ # Copyright 2024 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. # Lint as: python3 """Test code in html.py.""" import unittest from unittest import mock from gcpdiag.queries import web @mock.patch('gcpdiag.queries.web.get', autospec=True) class TestFetchAndExtractHtmlContent(unittest.TestCase): """Test Fetch and Extract html content""" def test_fetch_and_extract_table(self, mock_get): with open( 'test-data/web/static/' 'cloud-google-com-data-fusion-docs-support-version-support-policy', encoding='utf-8') as fh: mock_get.return_value.content = fh.read().encode('utf-8') mock_get.return_value.status_code = 200 test_table = web.fetch_and_extract_table( page_url= 'https://cloud.google.com/data-fusion/docs/support/version-support-policy', tag='h2', tag_id='support_timelines') assert test_table is not None assert len(test_table.find_all('tr')) == 10 assert test_table.find_all('tr')[1].find_all( 'td')[0].text.strip() == '6.9' assert test_table.find_all('tr') def test_fetch_and_extract_table_with_no_tag(self, mock_get): mock_get.return_value.content = """
Column 1Column2
Value1Value2
""" mock_get.return_value.status_code = 200 test_table = web.fetch_and_extract_table( page_url= 'https://cloud.google.com/data-fusion/docs/support/version-support-policy' ) self.assertIsNone(test_table) def test_fetch_and_extract_table_with_no_tag_id_and_class_name( self, mock_get): mock_get.return_value.content = """

This is a header

Column 1Column2
Value1Value2
""" mock_get.return_value.status_code = 200 test_table = web.fetch_and_extract_table( page_url= 'https://cloud.google.com/data-fusion/docs/support/version-support-policy', tag='h1') assert test_table is not None assert len(test_table.find_all('tr')) == 2 def test_fetch_and_extract_table_with_class_name(self, mock_get): mock_get.return_value.content = """

This is a header

Column 1Column2
Value1Value2
Value3Value4
""" mock_get.return_value.status_code = 200 test_table = web.fetch_and_extract_table( page_url= 'https://cloud.google.com/data-fusion/docs/support/version-support-policy', tag='h1', class_name='my-table') assert test_table is not None assert len(test_table.find_all('tr')) == 3 assert test_table.find_all('tr')[1].find_all( 'td')[0].text.strip() == 'Value1' def test_fetch_and_extract_table_with_tag_id(self, mock_get): mock_get.return_value.content = """

This is a header

Column 1Column2
Value1Value2
Value3Value4
""" mock_get.return_value.status_code = 200 test_table = web.fetch_and_extract_table( page_url= 'https://cloud.google.com/data-fusion/docs/support/version-support-policy', tag='h1', tag_id='my-table') assert test_table is not None assert len(test_table.find_all('tr')) == 3 assert test_table.find_all('tr')[2].find_all( 'td')[1].text.strip() == 'Value4' ================================================ FILE: gcpdiag/rule_classes.py ================================================ """ Returns project-wide rule classes list """ from typing import Dict def get_rule_classes() -> Dict: return { 'BP': 'Best practice, opinionated recommendation', 'ERR': 'Something that is very likely to be wrong', 'WARN': 'Something that is possibly wrong', 'SEC': 'Potential security issue', # classes for extended rules 'BP_EXT': '(Extended) Best practice, opinionated recommendation', 'ERR_EXT': '(Extended) Something that is very likely to be wrong', 'WARN_EXT': '(Extended) Something that is possibly wrong', 'SEC_EXT': '(Extended) Potential security issue', } ================================================ FILE: gcpdiag/runbook/__init__.py ================================================ # Copyright 2023 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. """Runbook command: find potential issues in GCP projects.""" import ast import builtins import difflib import inspect import logging import os import re import sys import textwrap import threading import traceback import types from abc import abstractmethod from collections import OrderedDict from datetime import datetime, timedelta, timezone from enum import Enum from functools import cached_property from string import Formatter from typing import (Callable, Deque, Dict, List, Mapping, Optional, Set, Tuple, Type, final) import googleapiclient.errors from jinja2 import TemplateNotFound from gcpdiag import caching, config from gcpdiag import context as gcpdiag_context from gcpdiag import models, utils from gcpdiag.queries import crm from gcpdiag.runbook import constants, exceptions, flags, op, report, util RunbookRegistry: Dict[str, 'DiagnosticTree'] = {} StepRegistry: Dict[str, Type['Step']] = {} registry_lock = threading.Lock() report_lock = threading.Lock() class MetaStep(type): """Metaclass for Steps in runbook""" @property def id(cls): """Class Id of a step""" return '.'.join([cls.__module__, cls.__name__]) def __new__(mcs, name, bases, namespace): """Register all steps into StepRegistry excluding base classes""" new_class = super().__new__(mcs, name, bases, namespace) if name not in ('Step', 'Gateway', 'LintWrapper', 'StartStep', 'EndStep', 'CompositeStep') and bases[0] in (Step, Gateway, CompositeStep): StepRegistry[new_class.id] = new_class return new_class class Step(metaclass=MetaStep): """ Represents a step in a diagnostic or runbook process. """ steps: List['Step'] template: str parameters: dict = {} def __init__(self, parent: 'Step' = None, step_type=constants.StepType.AUTOMATED, uuid=None, **parameters): """ Initializes a new instance of the Step class. """ self.uuid = uuid or util.generate_uuid() self.steps = [] self.type = step_type self.observations: models.Messages = models.Messages() self.product = self.__module__.split('.')[-2] self.doc_file_name = util.pascal_case_to_kebab_case(self.__class__.__name__) # allow developers to set this if parent: parent.add_child(child=self) # set object attributes with parameters # This is used by Bundles and Generalized steps if parameters: for attribute, value in parameters.items(): setattr(self, attribute, value) self.set_observations() @property def id(self): """Class Id of a step""" return self.__class__.id @property def execution_id(self): return '.'.join([self.id, self.uuid]) def __str__(self): return self.execution_id @final def execute_hook(self, operator: op.Operator): """ Executes the step using the given context and interface. Parameters: context: The context in which the step is executed. interface: The interface used for interactions during execution. """ self.load_observations() operator.set_messages(m=self.observations) try: name = self.name except KeyError: name = self.__class__.__name__ operator.interface.info(step_type=self.type.value, message=name) self.execute() def execute(self): """Executes the main diagnostic log for this step.""" pass def set_observations(self, prompt: models.Messages = None): # override existing messages if prompt: self.observations.update(prompt) def load_observations(self): if hasattr(self, 'template'): name = getattr(self, 'template').split('::') else: return if len(name) == 2: file_name, block_name = name[0], name[1] self.observations.update( util.load_template_block(module_name=self.__module__, block_name=block_name, file_name=file_name)) if len(name) == 3: file_name, block_name = name[1], name[2] self.observations.update( util.load_template_block(module_name=name[0], block_name=block_name, file_name=file_name)) def add_child(self, child): """Child steps""" self.steps.append(child) def find_step(self, step: 'Step'): """Find a step by ID""" if self == step: return self for child in self.steps: result = child.find_step(step) if result: return result return None def __hash__(self) -> int: return hash((self.execution_id, self.type)) @property def label(self): label = self.observations.get_msg(constants.STEP_LABEL) if 'NOTICE' in label: label = util.pascal_case_to_title(self.__class__.__name__) return label @cached_property def name(self): # Get the step name template from observations or execute()'s docstring. step_name = self.observations.get( constants.STEP_NAME) or self.execute.__doc__ if not step_name: raise exceptions.InvalidStepOperation( f'Step {self} does not have an step name. ' 'Make sure the execute() method has a docstring on the first line ' f'or a {self.template}_step_name block has been defined in the step template' ) # Clean up the template step_name = ' '.join(step_name.split()) # Extract all field names used in the step_name template. placeholders = { field for _, field, _, _ in Formatter().parse(step_name) if field } # Default variables not found on self. defaults = { 'universe_domain': config.get('universe_domain'), 'start_time': op.get(flags.START_TIME), 'end_time': op.get(flags.END_TIME) } attributes = {} for key in placeholders: if key in constants.RESTRICTED_ATTRIBUTES: continue # Prefer a default value if available, otherwise use the attribute on self. if key in defaults: value = defaults[key] elif hasattr(self, key): value = getattr(self, key) else: # If the placeholder isn't found anywhere, you might either set it to an empty # string or raise an error. Here, we default to an empty string. value = '' # Process the value based on its type. if isinstance(value, Enum): value = value.value elif isinstance(value, datetime): value = value.isoformat() elif isinstance(value, (list, tuple, set)): if isinstance(value, set): value = list(value) # If the list/tuple items are not of a simple type, skip this attribute. if value and not isinstance(value[0], (int, str, bool, float)): continue value = ', '.join(str(item) for item in value) elif isinstance(value, dict): dict_values = list(value.values()) if dict_values and not isinstance(dict_values[0], (int, str, bool, float)): continue value = ', '.join(f'{k}={v}' for k, v in value.items()) elif isinstance( value, (types.FunctionType, types.MethodType, types.BuiltinFunctionType)): continue else: value = str(value) attributes[key] = value return step_name.format(**attributes) @property def long_desc(self): long_desc = None doc_lines = self.__doc__.splitlines() if len(doc_lines) >= 3: if doc_lines[1]: raise ValueError( f'Step {self.__class__.__name__} has a non-empty second line ' 'in the class docstring. Ensure the step\'s class docstring ' 'contains a one-line summary followed by an empty second line.') long_desc = '\n'.join(doc_lines[2:]) return long_desc @property def short_desc(self): return self.__doc__.splitlines()[0] @property def doc_url(self): """Returns the documentation URL for the step.""" return f'https://gcpdiag.dev/runbook/steps/{self.product}/{self.doc_file_name}' class StartStep(Step): """Start Event of a Diagnostic tree""" def __init__(self): super().__init__(step_type=constants.StepType.START) def execute(self): """Executing default start step for runbooks.""" pass class CompositeStep(Step): """Composite Events of a Diagnostic tree""" def __init__(self, **parameters): super().__init__(**parameters, step_type=constants.StepType.COMPOSITE) class EndStep(Step): """End Event of a Diagnostic Tree""" def __init__(self): super().__init__(step_type=constants.StepType.END) def execute(self): """Finalize runbook investigations.""" if not config.get(flags.INTERACTIVE_MODE): response = op.prompt(kind=op.CONFIRMATION, message='Is your issue resolved?') if response == op.NO: op.info(message=constants.END_MESSAGE) class Gateway(Step): """ Represents a decision point in a workflow, determining which path to take based on a condition. """ def __init__(self, **parameters): """ Initializes a new instance of the Gateway step. """ super().__init__(**parameters, step_type=constants.StepType.GATEWAY) class RunbookRule(type): """Metaclass for automatically registering subclasses of DiagnosticTree in a registry for easy lookup and instantiation based on product/rule ID.""" def __new__(mcs, name, bases, namespace): new_class = super().__new__(mcs, name, bases, namespace) if name != 'DiagnosticTree' and bases[0] == DiagnosticTree: rule_id = util.runbook_name_parser(name) mcs.validate_parameter_definitions(class_=mcs, namespace=namespace) product = namespace.get('__module__', '').split('.')[-2].lower() RunbookRegistry[f'{product}/{rule_id}'] = new_class return new_class def validate_parameter_definitions(class_, namespace): """Validate parameters defined for a runbook. for now only check deprecated parameters backward compatibility. """ deprecated_params = { param_name: param_config for param_name, param_config in ( namespace.get('parameters') or {}).items() if param_config.get('deprecated', False) } if deprecated_params: # Ensure the child class implements legacy_parameter_handler if 'legacy_parameter_handler' not in namespace: raise TypeError( f"{namespace.get('__module__')} has deprecated parameters " f"{', '.join(deprecated_params.keys())} but does not implement " 'legacy_parameter_handler(). Implement this method to handle ' 'backward compatibility for deprecated parameters.') for param_name, param_config in deprecated_params.items(): if param_config.get('required', False): raise TypeError( f"deprecated parameter '{param_name}' cannot be marked as required") class DiagnosticTree(metaclass=RunbookRule): """Represents a diagnostic tree for troubleshooting.""" product: str name: str start: StartStep parameters: Dict[str, Dict] steps: List[Step] keywords: List[str] def __init__(self, uuid=None): self.id = f'{self.__module__}.{self.__class__.__name__}' self.uuid = uuid or util.generate_uuid() self.product = self.__module__.rsplit('.')[-2].lower() self.doc_file = util.pascal_case_to_kebab_case(self.__class__.__name__) self.dt_name = util.runbook_name_parser(self.__class__.__name__) self.name = f'{self.product}/{self.dt_name}' self.steps = [] @property def run_id(self): return '.'.join([self.product, self.dt_name, self.uuid]) def add_step(self, parent: Step, child: Step): """Adds an intermediate diagnostic step to the tree.""" if self.start is None: raise ValueError('Start step is empty. Set start step with' ' builder.add_start() or tree.add_start()') if parent is None: raise ValueError('You can\'t add a child to a `NoneType` parent') # to avoid disjoint trees, we first check that the parent is a child of start. parent_step = self.start.find_step(parent) if parent_step: parent_step.add_child(child) setattr(child, '_was_initially_defined', True) else: raise ValueError( f'Parent step with {parent.execution_id} not found. Add parent first') def add_start(self, step: StartStep): """Adds a diagnostic step to the tree.""" if hasattr(self, 'start') and getattr(self, 'start'): raise ValueError('start already exist') self.start = step def add_end(self, step: EndStep): """Adds the default end step of this tree which is invoked iff all child steps are executed.""" if self.start and self.start.steps: if self.start.steps[-1].type == constants.StepType.END: raise ValueError('end already exist') self.start.add_child(child=step) setattr(step, '_was_initially_defined', True) def find_step(self, step_id): return self.start.find_step(step_id) @final def hook_build_tree(self, operator: op.Operator): if hasattr(self, 'legacy_parameter_handler'): self.legacy_parameter_handler(operator.parameters) try: self.build_tree() except exceptions.InvalidDiagnosticTree as err: logging.warning('%s: %s while constructing runbook rule: %s', type(err).__name__, err, self) if not self.start: raise exceptions.InvalidDiagnosticTree( 'The diagnostic tree is invalid because it contains any Start point') if not self.start.steps: raise exceptions.InvalidDiagnosticTree( 'The diagnostic tree is invalid because it contains only ' 'a Start method without any intermediate steps. ' 'Please ensure your tree includes at least one intermediate step ' 'between the Start method and the end point.') # if the tree hasn't be concluded with an endstep. # Add the default step if self.start.steps[-1].type != constants.StepType.END: self.start.add_child(EndStep()) setattr(self.start.steps[-1], '_was_initially_defined', True) @abstractmethod def legacy_parameter_handler(self, parameters): """Handles the translation of deprecated parameters for backward compatibility. This method ensures that runbooks using outdated parameters can still function correctly by mapping old parameters to their new counterparts. It allows systems that do not yet know the updated parameters to continue leveraging the runbook while gradually migrating to the new parameter format. Key Features: 1. Implement this `legacy_parameter_handler` method in your runbook class. 2. Map old parameters to their new equivalents within this method. 3. This function is invoked before the runbook is executed at runtime. 4. The function is always called before the `build_tree()` method. 5. Safely migrate the rest of the runbook logic to utilize the new parameters. Usage Example: class Runbook(DiagnosticTree): parameters = { 'deprecated_parameter': { 'type': bool, 'help': 'A deprecated parameter', 'deprecated': True, 'new_parameter': 'currentParameter' }, 'currentParameter': { 'type': bool, 'help': 'A new parameter', } } def legacy_parameter_handler(self, parameters): # Map deprecated parameters to their new equivalents if 'deprecated_parameter' in parameters: parameters['currentParameter'] = parameters.pop('deprecated_parameter', None) - This method must be implemented if the runbook defines any deprecated parameters in its `parameters` dictionary. - Proper mapping ensures smooth runtime operation while providing backward compatibility for older configurations. """ pass def build_tree(self): """Constructs the diagnostic tree.""" raise NotImplementedError def __hash__(self): return str(self.name).__hash__() def __str__(self): return self.name @property def long_desc(self): long_desc = None doc_lines = self.__class__.__doc__.splitlines() if len(doc_lines) >= 3: if doc_lines[1]: raise ValueError( f'Diagnostic Tree {self.__class__.__name__} has a non-empty second ' 'line in the class docstring') long_desc = '\n'.join(doc_lines[2:]) return long_desc @property def short_desc(self): return self.__doc__.splitlines()[0] @property def doc_url(self) -> str: """Returns the documentation URL for the diagnostic tree.""" return f'https://gcpdiag.dev/runbook/diagnostic-trees/{self.name}' class Bundle: run_id: str steps: List[Type['Step']] parameter: models.Parameter def __init__(self) -> None: self.run_id = util.generate_uuid() self.steps = [] class DiagnosticEngine: """Loads and Executes diagnostic trees. This class is responsible for loading and executing diagnostic trees based on provided rule name. It manages the diagnostic process, from validating required parameters to traversing and executing diagnostic steps. Attributes: _dt: Optional[DiagnosticTree] The current diagnostic tree being executed. """ def __init__(self, context_provider: Optional[ gcpdiag_context.ContextProvider] = None): """Initializes the DiagnosticEngine with required managers.""" self.interface = report.InteractionInterface(kind=config.get('interface')) self.finalize = False # tuple in the format (DiagnosticTree/Bundle, user_provided_parameter) self.task_queue: Deque = Deque() self.context_provider = context_provider def add_task(self, new_task: Tuple): with registry_lock: self.task_queue.appendleft(new_task) def get_similar_trees(self, name: str) -> List[str]: """Returns a list of similar trees to the given name.""" return difflib.get_close_matches(name, RunbookRegistry.keys()) def load_tree(self, name: str) -> DiagnosticTree: """Loads a diagnostic tree by name ex gce/ssh. Attempts to retrieve a diagnostic tree registered under the given name. Exits the program if the tree is not found. Tree are registered onload of the class definition see RunbookRule metaclass Args: name: The name of the diagnostic tree to load. """ # ex: product/gce-runbook with registry_lock: name = util.runbook_name_parser(name) runbook = RunbookRegistry.get(name) if not runbook: message = f"The runbook `{name}` doesn't exist or hasn't been registered." similar_runbooks = self.get_similar_trees(name) if similar_runbooks: message += f' Did you mean: "{similar_runbooks[0]}"?' # If this error occurs during development, it may be because the class # hasn't been registered. # Note: Runbooks use Python metaclasses and might not register # automatically when there are syntax errors. # For more information on metaclasses and registration issues, see: # https://docs.python.org/3/reference/datamodel.html#metaclasses if 'test' in config.VERSION: m = re.search(r'([^/]+)/([^/]+)', name) if m: product = m.group(1) clazz = util.kebab_case_to_pascal_case(m.group(2)) mod_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), product) message += ( '\n\nPlease refer to Adding Support for New GCP Products ' 'instructions at ' 'https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/' 'README.md#adding-support-for-new-gcp-products' '\n\nPlease verify the following:' f"\n1. Ensure that the class `{clazz}` exists in the product's module `{mod_path}`." '\n2. If the class exists, ensure there are no syntax errors ' f'in the file containing the class `{clazz}`.\n') raise exceptions.DiagnosticTreeNotFound(message) return runbook def load_steps(self, parameter: Mapping[str, Mapping], steps_to_run: List) -> Bundle: """Loads individual steps and prepare a bundle. Args: parameter: User provided parameter steps_to_run: List of steps to from a bundle specification. """ with registry_lock: bundle: Bundle = Bundle() bundle.parameter = models.Parameter(parameter) for id_ in steps_to_run: step_def = StepRegistry.get(id_) if not step_def: raise ValueError(f'Step "{id_}" not found in registry') bundle.steps.append(step_def) return bundle def _get_billing_project(self, parameter: models.Parameter): project_id = parameter.get('project_id') if project_id: return project_id # get project number if no project id project_number = parameter.get('project_number') if project_number: project = crm.get_project(project_id=project_number) return project.id if config.get('billing_project'): return config.get('billing_project') return None def _check_required_paramaters(self, parameter_def: Dict, caller_args: models.Parameter): missing_parameters = { key: value.get('help', '') for key, value in parameter_def.items() if value.get('required', False) and key not in caller_args } if missing_parameters: missing_param_str = '\n'.join( f'Parameter Explanation: {value}\n-p {key}=value' for key, value in missing_parameters.items()) error_msg = ( f'Missing {len(missing_parameters)} required ' f"{'parameter' if len(missing_parameters) == 1 else 'parameters'}. " 'Please provide the following:\n\n' f'{missing_param_str}') # Create the exception instance and pass the list of missing parameters raise exceptions.MissingParameterError(error_msg, missing_parameters_list=list( missing_parameters.keys())) def _set_default_parameters(self, parameter_def: Dict): # set default parameters parameter_def.setdefault(flags.START_TIME, { 'type': datetime, 'help': 'Beginning Timeframe to scope investigation.' }) parameter_def.setdefault(flags.END_TIME, { 'type': datetime, 'help': 'End timeframe' }) def _check_deprecated_paramaters(self, parameter_def: Dict, caller_args: models.Parameter): deprecated_parameters = { key: value for key, value in parameter_def.items() if value.get('deprecated', False) and key in caller_args } if deprecated_parameters: res = 'Deprecated parameters:\n' res += '\n'.join( f"{key}. Use: {value.get('new_parameter')}={value.get('type','value')}" for key, value in deprecated_parameters.items() if value.get('new_parameter')) logging.warning( '%s deprecated/unsupported parameter(s) supplied to runbook. %s', len(deprecated_parameters), res) return res return None def process_parameters(self, runbook: DiagnosticTree, caller_args: models.Parameter): self.parse_parameters(parameter_def=runbook.parameters, caller_args=caller_args) runbook.legacy_parameter_handler(caller_args) self._check_required_paramaters(parameter_def=runbook.parameters, caller_args=caller_args) def parse_parameters(self, parameter_def: Dict, caller_args: models.Parameter): """Set to defaults parameters and convert datatypes""" def is_builtin_type(target_type): """Check if the object's type is a built-in type.""" return target_type in vars(builtins).values() def cast_to_type(param_val, target_type): """Attempt to cast the object to the target built-in type if possible. Args: obj: The object to cast. target_type: The target built-in type to cast the object to. Returns: The object cast to the target type if the original object's type and the target type are built-in types and the cast is possible. Otherwise, returns the original object. """ if is_builtin_type(target_type) and target_type != bool: try: return target_type(param_val) except ValueError: print(f'Cannot cast {param_val} to type {target_type}.') elif target_type == bool: try: return constants.BOOL_VALUES[str(param_val).lower()] except KeyError: print(f'Cannot cast {param_val} to type {target_type}.') else: if target_type == datetime: if isinstance(param_val, target_type): return param_val parsed_time = util.parse_time_input(param_val.upper()) if parsed_time.tzinfo is None: # Define the timezone (for example, UTC) if not present tz = timezone.utc # Attach the timezone information parsed_time = parsed_time.replace(tzinfo=tz) return parsed_time try: return target_type(param_val) except ValueError: print(f'Cannot cast {param_val} to type {target_type}.') self._set_default_parameters(parameter_def) # convert data types and set defaults for non exist parameters for k, _ in parameter_def.items(): # Set default if not provided by user dt_param = parameter_def.get(k) user_provided_param = caller_args.get(k) if k not in caller_args and dt_param and dt_param.get('default'): caller_args[k] = dt_param['default'] continue if isinstance(user_provided_param, str): if dt_param and dt_param.get('ignorecase') is True: caller_args[k] = user_provided_param else: caller_args[k] = user_provided_param.lower() if dt_param and dt_param.get('type') == datetime: if k == flags.END_TIME: end_time = caller_args.get(flags.END_TIME, datetime.now(timezone.utc)) caller_args[flags.END_TIME] = cast_to_type(end_time, dt_param['type']) if k == flags.START_TIME: end_time = caller_args.get(flags.END_TIME, datetime.now(timezone.utc)) caller_args[flags.END_TIME] = cast_to_type(end_time, dt_param['type']) parsed_end_time = caller_args[flags.END_TIME] start_time = caller_args.get(flags.START_TIME, parsed_end_time - timedelta(hours=8)) caller_args[flags.START_TIME] = cast_to_type(start_time, dt_param['type']) if k != flags.START_TIME or k == flags.END_TIME: date_string = caller_args.get(k) if date_string: caller_args[k] = cast_to_type(date_string, dt_param['type']) # DT specified a type for the param and it's not a string. # cast the parameter to the type specified by the runbook. if (dt_param and dt_param.get('type') and dt_param['type'] != str and user_provided_param): caller_args[k] = cast_to_type(user_provided_param, dt_param['type']) def run(self): """Execute tasks (runbooks or bundles) present in the engines task queue""" if not self.task_queue: logging.error('No tasks to execute. Did you call add_task()?') return bundles = [ task[0] for task in self.task_queue if isinstance(task[0], Bundle) ] diagnostic_trees = [ task for task in self.task_queue if isinstance(task[0], DiagnosticTree) ] if bundles: self.run_bundles(bundles) for task in diagnostic_trees: self.run_diagnostic_tree(tree=task[0], parameter=task[1]) def run_diagnostic_tree(self, tree: DiagnosticTree, parameter: models.Parameter) -> None: """Executes a diagnostic tree with a given parameter. Args: context: The execution context for the diagnostic tree. """ self.interface.output.display_runbook_description(tree) try: operator = op.Operator(interface=self.interface, context_provider=self.context_provider) operator.set_tree(tree) operator.set_parameters(parameter) operator.set_run_id(tree.run_id) with report_lock: self.interface.rm.reports[tree.run_id] = report.Report( run_id=tree.run_id, parameters=parameter) self.interface.rm.reports[tree.run_id].run_start_time = datetime.now( timezone.utc).isoformat() if operator.tree: self.interface.rm.reports[tree.run_id].runbook_name = operator.tree.name with op.operator_context(operator): self.process_parameters(runbook=tree, caller_args=parameter) tree.hook_build_tree(operator) self.finalize = False self.find_path_dfs( step=tree.start, operator=operator, executed_steps=set(), ) except (RuntimeError, exceptions.InvalidDiagnosticTree) as err: logging.warning('%s: %s while processing runbook rule: %s', type(err).__name__, err, tree) self.interface.rm.reports[tree.run_id].run_end_time = datetime.now( timezone.utc).isoformat() def find_path_dfs(self, step: Step, operator: op.Operator, executed_steps: Set): """Depth-first search to traverse and execute steps in the diagnostic tree. Args: step: The current step to execute. operator: The operator used during execution. executed_steps: A set of executed step IDs to avoid cycles. """ if not self.finalize: operator.set_step(step) with op.operator_context(operator): outcome = self.run_step(step=step, operator=operator) executed_steps.add(step) if outcome == constants.FINALIZE_INVESTIGATION: self.finalize = True return # Prioritize processing of dynamically added, unexecuted children for child in step.steps: if child not in executed_steps and not hasattr(child, '_was_initially_defined'): self.find_path_dfs(step=child, operator=operator, executed_steps=executed_steps) if self.finalize: return # Process initially defined or already encountered children for child in step.steps: if not self.finalize: if (hasattr(child, '_was_initially_defined') and child not in executed_steps): self.find_path_dfs(step=child, operator=operator, executed_steps=executed_steps) if self.finalize: return elif not any(c for c in executed_steps if c == child): self.find_path_dfs(step=child, operator=operator, executed_steps=executed_steps) if self.finalize: return return executed_steps def run_step(self, step: Step, operator: op.Operator): """Executes a single step, handling user decisions for step re-evaluation or termination. Args: step: The diagnostic step to execute. operator: The execution operations object containing the context. """ try: user_input = self._run(step, operator=operator) while True: if user_input is constants.RETEST: operator.interface.info(step_type=constants.RETEST, message='Re-evaluating recent failed step') with caching.bypass_cache(): user_input = self._run(operator.step, operator=operator) elif step.type == constants.StepType.END: return constants.FINALIZE_INVESTIGATION elif user_input is constants.STOP: logging.info('Finalize Investigation\n') return constants.FINALIZE_INVESTIGATION elif step.type == constants.StepType.START and ( self.interface.rm.reports[operator.run_id] .results.get(step.execution_id) is not None and \ self.interface.rm.reports[operator.run_id] .results[step.execution_id].overall_status == 'skipped'): logging.info('Start Step was skipped. Can\'t proceed.\n') return constants.FINALIZE_INVESTIGATION elif user_input is constants.CONTINUE: break elif (user_input is not constants.RETEST and user_input is not constants.CONTINUE and user_input is not constants.STOP): return user_input except Exception as err: # pylint: disable=broad-exception-caught error_msg = str(err) end = datetime.now(timezone.utc).isoformat() with report_lock: self.interface.rm.reports[operator.run_id].results[ step.execution_id].end_time = end if isinstance(err, TemplateNotFound): error_msg = ( f'could not load messages linked to step: {step.id}.' 'ensure step has a valid template eg: filename::block_prefix') logging.error(error_msg) elif isinstance(err, exceptions.InvalidStepOperation): error_msg = f'invalid step operation: %s: {err}' logging.error(error_msg) elif isinstance(err, (ValueError, KeyError)): error_msg = f'`{step.execution_id}`: {err}' logging.error(error_msg) elif isinstance(err, (utils.GcpApiError, googleapiclient.errors.HttpError)): if isinstance(err, googleapiclient.errors.HttpError): err = utils.GcpApiError(err) if err.status == 403: logging.error( ('%s: %s user does not sufficient permissions ' 'to perform operations in step: %s'), type(err).__name__, err, step.execution_id, ) with report_lock: self.interface.rm.reports[operator.run_id].results[ step.execution_id].step_error = err elif err.status == 401: logging.error( '%s: %s request is missing required authentication credential to' ' perform operations in step: %s', type(err).__name__, err, step.execution_id, ) with report_lock: self.interface.rm.reports[operator.run_id].results[ step.execution_id].step_error = err return logging.error( '%s: %s while processing step: %s', type(err).__name__, err, step.execution_id, ) with report_lock: self.interface.rm.reports[operator.run_id].results[ step.execution_id].step_error = err elif isinstance(err, TypeError): trace = traceback.extract_tb(err.__traceback__) if any('google/auth' in frame.filename for frame in trace): logging.exception( 'Google Auth (ADC) TypeError encountered during step execution' ' %s\nProbable cause: ADC metadata server returned an unexpected' ' response format. \nLikely Reasons: \n- ADC not configured' ' properly or metadata server issue. \nAborting further Runbook' ' step execution to avoid redundant error messages.\nOriginal' ' error: %s', step.execution_id, err, ) raise err else: logging.error( '%s: %s while processing step: %s', type(err).__name__, err, step.execution_id, ) with report_lock: self.interface.rm.reports[operator.run_id].results[ step.execution_id].step_error = error_msg def _run(self, step: Step, operator: op.Operator): start = datetime.now(timezone.utc).isoformat() with report_lock: self.interface.rm.reports[operator.run_id].results[ step.execution_id] = report.StepResult(step=step) self.interface.rm.reports[operator.run_id].results[ step.execution_id].start_time = start step.execute_hook(operator) end = datetime.now(timezone.utc).isoformat() with report_lock: self.interface.rm.reports[operator.run_id].results[ step.execution_id].end_time = end return self.interface.rm.reports[operator.run_id].results[ step.execution_id].prompt_response def run_bundles(self, bundles: List[Bundle]) -> None: """Executes a list of bundles under a single report. Args: bundles: list of bundles to be executed """ with registry_lock: # Use a new run_id for the consolidated report run_id = util.generate_uuid() operator = op.Operator(interface=self.interface, context_provider=self.context_provider) operator.set_run_id(run_id) # Collect all parameters from all bundles for the report header. all_parameters: models.Parameter = models.Parameter({}) for i, bundle in enumerate(bundles): all_parameters[f'bundle_{i+1}'] = bundle.parameter with report_lock: self.interface.rm.reports[run_id] = report.Report( run_id=run_id, parameters=all_parameters) self.interface.rm.reports[run_id].run_start_time = datetime.now( timezone.utc).isoformat() with op.operator_context(operator): for bundle in bundles: operator.set_parameters(bundle.parameter) # Create a root step for the bundle execution root_step = StartStep() for step_class in bundle.steps: self.parse_parameters(parameter_def=step_class.parameters, caller_args=bundle.parameter) self._check_required_paramaters(parameter_def=step_class.parameters, caller_args=bundle.parameter) # Instantiate each step with the provided parameters step_obj = step_class(**bundle.parameter) root_step.add_child(step_obj) # Use find_path_dfs to traverse and execute the steps self.find_path_dfs(step=root_step, operator=operator, executed_steps=set()) self.interface.rm.reports[run_id].run_end_time = datetime.now( timezone.utc).isoformat() class ExpandTreeFromAst(ast.NodeVisitor): """Builds a Diagnostic Tree by traversing the Abstract Syntax Tree This is required to be able to get a full flow of all possible steps regardless of conditions required to trigger during runtime execution. """ def __init__(self, tree=None): self.tree = tree() or DiagnosticTree() self.parent = OrderedDict() self.current_class = None # Track instances to map variable names to their classes self.instances = {} # pylint: disable=invalid-name def visit_Assign(self, node): # Track class instances if isinstance(node.value, ast.Call) and hasattr(node.value.func, 'id'): for target in node.targets: if isinstance(target, ast.Name): clazz = find_class_globally(node.value.func.id) if not clazz: continue o = clazz() if isinstance(clazz, type) else clazz self.instances.setdefault(target.id, o) self.instances.setdefault(node.value.func.id, o) # Check for is there are more nesting. like gce_cs.spec.SomeStep() if isinstance(node.value, ast.Call) and hasattr(node.value.func, 'attr'): for target in node.targets: if isinstance(target, ast.Name): clazz = find_class_globally(node.value.func.attr) if not clazz: continue o = clazz() if isinstance(clazz, type) else clazz self.instances.setdefault(target.id, o) self.instances.setdefault(node.value.func.attr, o) self.generic_visit(node) # pylint: disable=invalid-name def visit_Call(self, node): if isinstance(node.func, ast.Attribute) and node.func.attr in ('add_child', 'add_step', 'add_start', 'add_end'): child = None if len(node.args) == 1: node.keywords.append(ast.keyword('step', node.args[0])) if len(node.args) == 2: node.keywords.append(ast.keyword('parent', node.args[0])) node.keywords.append(ast.keyword('child', node.args[1])) if node.keywords: for kw in node.keywords: arg_name = kw.arg step = kw.value if arg_name == 'parent': p = find_class_globally(self.instances[step.id]) p = p() if isinstance(p, type) else p self.parent.setdefault(self.instances[step.id], p) if arg_name in ('child', 'step'): if isinstance(step, ast.Name) and step.id in self.instances: # Map variable name to class instance if possible clazz = self.instances.get(step.id) if not clazz: clazz = find_class_globally(step.id) if not clazz: continue clazz = clazz() if isinstance(clazz, type) else clazz self.instances.setdefault(step.id, clazz) child = clazz # This is a direct class name elif isinstance(step, ast.Call) and hasattr(step.func, 'id'): clazz = self.instances.get(step.func.id) if not clazz: clazz = find_class_globally(step.func.id) if not clazz: continue clazz = clazz() if isinstance(clazz, type) else clazz self.instances.setdefault(step.func.id, clazz) child = clazz # This is a direct class name # if argument of call is instantiated directly and has module attr. elif isinstance(step, ast.Call) and hasattr(step.func, 'attr'): clazz = self.instances.get(step.func.attr) if not clazz: clazz = find_class_globally(step.func.attr) if not clazz: continue clazz = clazz() if isinstance(clazz, type) else clazz self.instances.setdefault(step.func.attr, clazz) child = clazz # This is a direct class name if node.func.attr in ('add_start'): self.tree.add_start(child) self.visit_ast_nodes(child.__class__) if node.func.attr in ('add_end'): self.tree.add_end(child) self.visit_ast_nodes(child.__class__) if node.func.attr in ('add_step'): _, p = self.parent.popitem() self.tree.add_step(parent=p, child=child) self.visit_ast_nodes(child.__class__) if node.func.attr in ('add_child'): o = self.instances.get(self.current_class) self.tree.add_step(parent=o, child=child) self.generic_visit(node) def visit_ClassDef(self, node): # Initialize or clear the list of add_child calls for this class self.current_class = node.name self.generic_visit(node) self.current_class = None def visit_ast_nodes(self, func): source_code = inspect.getsource(func) tree = ast.parse(textwrap.dedent(source_code)) self.generic_visit(tree) return self.tree def find_class_globally(class_name): try: if not isinstance(class_name, str) and isinstance(class_name, object): return class_name except TypeError: pass # First, check the current global namespace cls = globals().get(class_name) if cls: return cls # If not found, check each imported module for _, module in sys.modules.items(): try: cls = getattr(module, class_name, None) if cls and inspect.isclass(cls) and issubclass(cls, Step): return cls except AttributeError: continue return None ================================================ FILE: gcpdiag/runbook/bigquery/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/bigquery/constants.py ================================================ # Copyright 2025 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. """Constants for BigQuery runbooks.""" # pylint: disable=unused-wildcard-import, wildcard-import from typing import Dict, Set, Tuple from gcpdiag.runbook.gcp.constants import * from gcpdiag.runbook.iam.constants import * RUNBOOK_PERMISSION_MAP: Dict[str, Dict[str, Set[str]]] = { 'Failed Query Runbook': { 'mandatory_project': { 'bigquery.jobs.get', 'bigquery.jobs.create', 'serviceusage.services.use', 'serviceusage.services.list', }, 'optional_project': {'bigquery.jobs.listAll',}, }, 'Slow Query First Execution Runbook': { 'mandatory_project': {'bigquery.jobs.get',}, 'optional_project': { 'bigquery.jobs.listAll', 'bigquery.jobs.create', 'bigquery.jobs.list', 'bigquery.reservations.list', 'bigquery.reservationAssignments.list', }, 'optional_org': { 'bigquery.jobs.listAll', 'bigquery.reservations.list', 'bigquery.reservationAssignments.list', }, }, 'Slow vs Fast Query Runbook': { 'mandatory_project': {'bigquery.jobs.get',}, 'optional_project': { 'bigquery.jobs.listAll', 'bigquery.jobs.create', 'bigquery.reservations.list', 'bigquery.reservationAssignments.list', }, 'optional_org': { 'bigquery.jobs.listAll', 'bigquery.reservations.list', 'bigquery.reservationAssignments.list', }, }, } ERROR_MAP: Dict[ Tuple, Dict[str, str], ] = { ( 'Resources exceeded during query execution', 'Too many DML statements outstanding against', ): { 'cause': ('This error occurs when you exceed the limit of 20 DML statements' ' in PENDING status in a queue for a single table. This error' ' usually occurs when you submit DML jobs against a single table' ' faster than what BigQuery can process'), 'remediation': ( 'One possible solution is to group multiple smaller DML operations' ' into larger but fewer jobs—for example, by batching updates and' ' inserts. When you group smaller jobs into larger ones, the cost' ' to run the larger jobs is amortized and the execution is faster.' ' Consolidating DML statements that affect the same data generally' ' improves the efficiency of DML jobs and is less likely to exceed' ' the queue size quota limit. Avoid DML statements that update or' ' insert single rows - batch your updates and inserts. Other' ' solutions to improve your DML efficiency could be to partition or' ' cluster your tables - see' ' https://cloud.google.com/bigquery/docs/data-manipulation-language#best_practices' ' for DML best practices.'), }, ( 'UPDATE or DELETE statement over table', 'would affect rows in the streaming buffer', ): { 'cause': ('BigQuery does not support running mutating Data Manipulation' ' Language (DML) statements (UPDATE, DELETE, or MERGE) against any' ' data recently streamed into BigQuery using the legacy streaming' ' API using `tabledata.insertall` within the last 30 minutes.'), 'remediation': ('Consider switching to use the BigQuery Storage Write API where' ' this limitation has been lifted.'), }, ('No matching signature',): { 'cause': ('This error is returned if at least one of the arguments passed to' ' the function does not match the expected argument type.'), 'remediation': ('Read through the error message details to identify which' ' parameter(s) result in a type mismatch and correct the statement' ' by providing parameters of the correct type.'), }, ('Could not serialize access to table', 'due to concurrent update'): { 'cause': ( 'This error can occur when mutating data manipulation language' ' (DML) statements that are running concurrently on the same table' ' conflict with each other, or when the table is truncated during a' ' mutating DML statement. See' 'https://cloud.google.com/bigquery/docs/data-manipulation-language' '#dml_statement_conflicts' ' for more details.'), 'remediation': ('Run DML operations that affect a single table such that they do' ' not overlap - either space out DML operations or serialize them' ' in such a manner that the next DML operation is triggered after' ' the previous one has completed. Try to group more changes into a' ' single DML statement instead of sending multiple single DML' ' statements. Using partitioned tables can also help - if two' ' parallel running DMLs modify separate partitions this will not' ' lead to a conflict.'), }, ( 'Response', 'too large', 'to return', ): { 'cause': ( 'This error occurs when your query results are larger than the' ' maximum response size. Some queries execute in multiple stages,' ' and this error returns when any stage returns a response size' ' that is too large, even if the final result is smaller than the' ' maximum. This error commonly returns when queries use an ORDER BY' ' clause.'), 'remediation': ( 'Adding a LIMIT clause can sometimes help, or removing the ORDER BY' ' clause. If you want to ensure that large results can return, you' ' can set the allowLargeResults property to True and specify a' ' destination table - this can be done by specifying the' ' `--destination_table` flag when using the bq tool or configuring' ' Query settings in BigQuery Studio.'), }, ('CPU seconds were used', 'query must use less than'): { 'cause': ( 'This error occurs when on-demand queries use too much CPU relative' ' to the amount of data scanned.'), 'remediation': ( 'Optimize your query following the steps outlined in the public' ' documentation -' ' https://cloud.google.com/bigquery/docs/troubleshoot-queries#ts-resources-exceeded.' ' Otherwise, switch to a capacity-based pricing model and use' ' dedicated slots.'), }, ('Concurrent jobs in the same session are not allowed',): { 'cause': ('This error can occur when multiple queries are running' ' concurrently in a session, which is not supported.'), 'remediation': ('No concurrent queries are allowed in the same session - queries' ' need to be launched in a serialized way.'), }, ('Invalid snapshot time',): { 'cause': ('Scenario 1: This error can occur when trying to query historical' ' data that is outside of the time travel window for the' ' dataset.\nScenario 2: One of the tables used in the query is' ' dropped and re-created after the query starts.'), 'remediation': ( 'Scenario 1: Change the query to access historical data within the' ' dataset\'s time travel window.\nScenario 2: Check to see if there' ' is a scheduled query or application that performs this operation' ' that ran at the same time as the failed query. If there is, try' ' moving the process that performs the drop and re-create operation' ' to run at a time that doesn\'t conflict with queries that read' ' that table.'), }, ('The query is too large',): { 'cause': ('You have exceeded the maximum SQL query length. See' ' https://cloud.google.com/bigquery/quotas#query_jobs for actual' ' limits.'), 'remediation': ('To stay within this limit, consider 1) replacing large arrays or' ' lists with query parameters and 2) breaking a long query into' ' multiple queries in the session.'), }, ('Transaction is aborted due to concurrent update against table',): { 'cause': ( 'A transaction with DML statements is attempted against a table' ' with an existing transaction performing DML statements that has' ' not yet been committed or rolled back. There are two possible' ' scenarios: \nScenario 1: A DML operation updated the table after' ' the transaction has already started.\nScenario 2: This error' ' can be encountered if a previous transaction encountered an' ' error, but there was no exception handler. It is important to' ' understand that BigQuery automatically rolls back the transaction' ' 24 hours after the transaction started (e.g.the BEGIN TRANSACTION' ' statement was executed). This is because a transaction creates a' ' session and sessions terminate automatically after 24 hours of' ' inactivity'), 'remediation': ( 'Scenario 1: Make sure that there are no DML operations modifying' ' the table when launching the transaction.Scenario 2: Find the' ' existing session by following' ' https://cloud.google.com/bigquery/docs/sessions-get-ids#list_active_inactive' ' and then terminate it by following' ' https://cloud.google.com/bigquery/docs/sessions-terminating.\n If' ' you confirmed that there were no DML operations modifying the' ' table or existing sessions that were not terminated, please' ' contact Google Cloud Support.'), }, ( 'Correlated subqueries', 'that reference other tables are not supported unless they can be ', 'de-correlated', ): { 'cause': ( 'This error can occur when your query contains a subquery that' ' references a column from outside that subquery, called a' ' correlation column. The correlated subquery is evaluated using an' ' inefficient, nested execution strategy, in which the subquery is' ' evaluated for every row from the outer query that produces the' ' correlation columns. Sometimes, BigQuery can internally rewrite' ' queries with correlated subqueries so that they execute more' ' efficiently. The correlated subqueries error occurs when BigQuery' ' can\'t sufficiently optimize the query.'), 'remediation': ( 'To address this error, try the following:\n1. Remove any ORDER BY,' ' LIMIT, EXISTS, NOT EXISTS, or IN clauses from your subquery. \n2.' ' Use a multi-statement query to create a temporary table to' ' reference in your subquery. \n3. Rewrite your query to use a' ' CROSS JOIN instead.'), }, ( 'Requires raw access permissions', 'on the read columns', 'to execute the DML statements', ): { 'cause': ('This error occurs when you attempt a DML DELETE, UPDATE, or MERGE' ' statement, without having the Fine-Grained Reader permission on' ' the scanned columns that use column-level access control to' ' restrict access at the column level.'), 'remediation': ( 'Grant the Fine-Grained Reader permission to the user running the' ' job. See' ' https://cloud.google.com/bigquery/docs/column-level-security-writes' ' for more details.'), }, ( 'Cannot parse regular expression', 'invalid perl operator', ): { 'cause': ( 'BigQuery uses the re2 library for regular expression handling.' ' Certain operators are not supported by the re2 library. \nUsers' ' might encounter this as a transient problem - it\'s possible that' ' the regular expression matching operation in the WHERE clause was' ' discarded by a previous condition check and was not evaluated at' ' all at runtime.'), 'remediation': ('Study https://github.com/google/re2/wiki/Syntax to identify the' ' unsupported regular expression operator and modify your regular' ' expression accordingly.'), }, ( 'exceeded the maximum disk and memory limit', 'available for shuffle operations', ): { 'cause': ('This error occurs when a query can\'t access sufficient shuffle' ' resources - there is more data that needs to get written to' ' shuffle than there is available shuffle capacity.'), 'remediation': ( 'There are three possible solutions to this issue: provisioning' ' more resources, reducing the amount of data processed by the' ' query or reducing concurrency of queries or materializing' ' intermediate results to reduce dependence on resources.\n1.' ' Provisioning more resources: If you are using' ' on-demand pricing, consider switching to capacity-based analysis' ' pricing by purchasing reservations. Reservations give you' ' dedicated slots and shuffle capacity for your projects\' queries.' ' If you are using BigQuery reservations, slots come with dedicated' ' shuffle capacity. Queries running in parallel will share the same' ' shuffle capacity. You can try:\n a) Adding more slots to that' ' reservation.\n b) Using a different reservation that has more' ' slots.\n c) Spread out shuffle-intensive queries, either over' ' time within a reservation or over different' ' reservations.\n2. Reducing the amount of data processed: Follow' ' the recommendations from ' 'https://cloud.google.com/bigquery/docs/best-practices-performance-compute' '#reduce-data-processed.' ' Certain operations in SQL tend to make more extensive usage of' ' shuffle, particularly JOIN operations and GROUP BY clauses. Where' ' possible, reducing the amount of data in these operations might' ' reduce shuffle usage.\n3. Reduce concurrency of queries or' ' materializing intermediate results to reduce dependence on' ' resources.'), }, ( 'Cannot return an invalid timestamp value', 'relative to the Unix epoch', ): { 'cause': ('You are trying to load invalid Unix epoch timestamp values into a' ' BigQuery table or you are trying to query a table that contains' ' invalid Unix epoch timestamp values.'), 'remediation': ( 'For loading: Make sure you are providing valid Unix epoch' ' timestamp values when loading. \n For querying: For every field' ' which has one or more invalid values update them to NULL or valid' ' Unix epoch timestamp values using a DML UPDATE statement.'), }, ( 'Resource exhausted', 'The model might be too large.', ): { 'cause': ( 'Common causes of this issue include but are not limited to: too' ' many categorical values in columns; too many features; complex' ' architecture of the model (i.e. the number and depth of trees, or' ' hidden units in neural nets).'), 'remediation': ('1. Reduce the complexity of the model. \n2. Please contact ' 'bqml-feedback@google.com if you keep running into this issue and ' 'would like to apply for more quota.'), }, ( 'Not enough resources for query planning', 'too many subqueries', 'query is too complex', ): { 'cause': ('This error occurs when a query is too complex. The primary causes' ' of complexity are:\n - WITH clauses that are deeply nested or' ' used repeatedly.\n - Views that are deeply nested or used' ' repeatedly.\n - Repeated use of the UNION ALL operator.'), 'remediation': ( 'Try the following:\n - Split the query into multiple queries, then' ' use procedural language to run those queries in a sequence with' ' shared state.\n - Use temporary tables instead of WITH clauses.\n' ' - Rewrite your query to reduce the number of referenced objects' ' and comparisons.'), }, ( 'exceeded limit for metric', 'cloudkms.googleapis.com/hsm_symmetric_requests', ): { 'cause': ( 'The HSM symmetric cryptographic requests per region quota is being' ' exceeded.'), 'remediation': ( 'There are two possible remediations: \n1. Reduce the rate at which' ' your ' 'projects are making requests that use Cloud KMS resources. \n2.' ' Request ' 'a quota increase for HSM symmetric cryptographic requests per' ' region by ' 'following ' 'https://cloud.google.com/kms/docs/monitor-adjust-quotas#increase_quotas.' ), }, ( 'Apache Avro', 'failed', 'read', 'Cannot skip stream', ): { 'cause': ('This error can occur when loading multiple Avro files with' ' different schemas, resulting in a schema resolution issue and' ' causing the import job to fail at a random file.'), 'remediation': ('To address this error, ensure that the last alphabetical file in' ' the load job contains the superset (union) of the differing' ' schemas. This is a requirement based on how Avro handles schema' ' resolution. See' ' https://avro.apache.org/docs/1.8.1/spec.html#Schema+Resolution.' ), }, ('Already Exists: Job',): { 'cause': ('You are trying to create a job with a job id that already exists.' ), 'remediation': ('Allow BigQuery to generate a random jobId value instead of' ' specifying one explicitly.'), }, ( 'Dataset', 'was not found in location', ): { 'cause': ('This error returns when you refer to a dataset resource that' ' doesn\'t exist, or when the location in the request does not' ' match the location of the dataset.'), 'remediation': ('To address this issue, specify the location of the dataset in the' ' query or confirm that the dataset exists in the mentioned' ' location and the identifier is correctly specified.'), }, ( 'Operation timed out', 'after 6.0 hours', 'reducing the amount of work', 'limit.', ): { 'cause': ( 'BigQuery query jobs have an execution time limit of 6 hours, which' ' is a system limit that cannot be changed.'), 'remediation': ( 'If this is the first time you are executing the query, look into' ' optimizing query performance by studying the following public' ' documentation section:' ' https://cloud.google.com/bigquery/docs/best-practices-performance-overview.' '\nHowever, if this is a job that previously succeeded much faster, you' ' should look into troubleshooting this as a slow query. Currently' ' there is a troubleshooting article available in the public' ' documentation -' 'https://cloud.google.com/bigquery/docs/troubleshoot-queries#troubleshoot_slow_queries' ' .Also consider investigating if there was a shortage of available' ' slot resources due to a possible increase in the number of' ' concurrent queries. See' 'https://cloud.google.com/bigquery/docs/information-schema-jobs' '#view_average_concurrent_jobs_running_alongside_a_particular_job_in_the_same_project' ' for an example query.'), }, ( 'Resources exceeded during query execution', 'executed in the allotted memory', ('Top memory consumer(s): sort operation used for table update' ' (UPDATE/DELETE/MERGE)'), ): { 'cause': ('This can happen when a table has reasonably wide rows and those' ' rows need to be updated to a much larger value in size, e.g. 20' ' times the original row size. If there is a large number of rows' ' that need to be updated, this can also lead to the encountered' ' error.'), 'remediation': (' - Split the UPDATE/MERGE to update less rows at once.\n - Update' ' row size less aggressively. For example, split one MERGE' ' statement into a few MERGE statements updating a smaller number' ' of columns at once so that row size is increased gradually.'), }, ( 'Resources exceeded during query execution', 'executed in the allotted memory', 'Out of stack space', 'deeply nested query expression', 'query resolution', ): { 'cause': ( 'Query contains too many nested function calls. Sometimes, parts of' ' the query are translated to function calls during parsing. For' ' example, an expression with repeated concatenation operators,' ' such as A || B || C || ..., becomes CONCAT(A, CONCAT(B, CONCAT(C,' ' ...))).'), 'remediation': 'Rewrite your query to reduce the amount of nesting.', }, ( 'Resources exceeded during query execution', 'executed in the allotted memory', 'Top memory consumer(s): query parsing and optimization', ): { 'cause': ( 'The issue is caused by the complexity of the query statement (i.e.' ' number of columns, statements, literals, etc.).'), 'remediation': (' - Split the query into smaller queries containing fewer' ' literals.\n - Materialize inner query results to use them in' ' another SELECT statement.'), }, ( 'Resources exceeded during query execution', 'executed in the allotted memory', 'ORDER BY', ): { 'cause': ( 'An ORDER BY operation is quite expensive and cannot be processed' ' in parallel - sorting will happen on a single compute unit, which' ' can run out of memory if it needs to process too many rows.'), 'remediation': (' - Use a LIMIT clause to reduce the result set.' '\n - Use additional filters to reduce the result set.' '\n - Remove the ORDER BY clause from the query.'), }, ( 'Resources exceeded during query execution', 'executed in the allotted memory', ): { 'cause': ('For SELECT statements, this error occurs when the query uses too' ' many resources.'), 'remediation': ( ' - Try removing an ORDER BY clause.\n - If your query uses JOIN,' ' ensure that the larger table is on the left side of the clause.' ' Also ensure that your data does not contain duplicate join' " keys.\n - If your query uses FLATTEN, determine if it's necessary" ' for your use case. For more information, see' ' https://cloud.google.com/bigquery/docs/data#nested.\n - If your' ' query uses EXACT_COUNT_DISTINCT, consider using COUNT(DISTINCT)' ' ensure that the larger table is on the left side of the clause.' ' Also ensure that your data does not contain duplicate join' " keys.\n - If your query uses FLATTEN, determine if it's necessary" ' for your use case. For more information, see' ' https://cloud.google.com/bigquery/docs/data#nested.\n - If your' ' query uses EXACT_COUNT_DISTINCT, consider using COUNT(DISTINCT)' ' instead.\n - If your query uses COUNT(DISTINCT , ) with' ' a large value, consider using GROUP BY instead. For more' ' information, see' ' https://cloud.google.com/bigquery/query-reference#countdistinct.\n' ' - If your query uses UNIQUE, consider using GROUP BY instead, or' ' a window function inside of a subselect.\n - If your query' ' materializes many rows using a LIMIT clause, consider filtering' ' on another column, for example ROW_NUMBER(), or removing the' ' LIMIT clause altogether to allow write parallelization.\n - If' ' your query uses deeply nested views and a WITH clause, this can' ' cause an exponential growth in complexity, thereby reaching the' ' limits.\n - Use temporary tables to store intermediate results' ' instead of using WITH clauses. WITH clauses might have to be' ' recalculated several times, which can make the query complex and' ' therefore slow.\n - Avoid using UNION ALL queries. \n\nSee' ' https://cloud.google.com/bigquery/docs/troubleshoot-queries#ts-resources-exceeded' ' for more details.'), }, ( 'project', 'region', 'exceeded quota', 'jobs that can be queued per project', ): { 'cause': ( 'You are attempting to queue more interactive or batch queries than' ' the queue limit allows. '), 'remediation': ( 'You can queue up to 1000 interactive and 20000 batch jobs per' ' project. This is a hard limit and cannot be raised. Possible' ' remediations:\n - Pause the job. If you identify a process or' ' pipeline responsible for an increase in queries, then pause that' ' process or pipeline.\n - Use jobs with batch priority. You can' ' queue more batch queries than interactive queries.\n - Distribute' ' queries. Organize and distribute the load across different' ' projects as informed by the nature of your queries and your' ' business needs.\n - Distribute run times. Distribute the load' ' across a larger time frame. If your reporting solution needs to' ' run many queries, try to introduce some randomness for when' ' queries start. For example, don\'t start all reports at the same' ' time.\n - Use BigQuery BI Engine. If you have encountered this' ' error while using a business intelligence (BI) tool to create' ' dashboards that query data in BigQuery,then we recommend that you' ' can use BigQuery BI Engine. Using BigQuery BI Engine is optimal' ' for this use case.\n - Optimize queries and data model.' ' Oftentimes, a query can be rewritten so that it runs more' ' efficiently. For example, if your query contains a Common table' ' expression (CTE)–WITH clause–which is referenced in more than one' ' place in the query, then this computation is done multiple times.' ' It is better to persist calculations done by the CTE in a' ' temporary table, and then reference it in the query.\n - Multiple' ' joins can also be the source of lack of efficiency. In this case,' ' you might want to consider using nested and repeated columns.' ' Using this often improves locality of the data, eliminates the' ' need for some joins, and overall reduces resource consumption and' ' the query run time.\n - Optimizing queries make them cheaper, so' ' when you use capacity-based pricing, you can run more queries' ' with your slots. For more information, see ' 'https://cloud.google.com/bigquery/docs/best-practices-performance-overview.' ' \n - Optimize query model. BigQuery' ' is not a relational database. It is not optimized for an infinite' ' number of small queries. Running a large number of small queries' ' quickly depletes your quotas. Such queries don\'t run as' ' efficiently as they do with the smaller database products.' ' BigQuery is a large data warehouse and this is its primary use' ' case. It performs best with analytical queries over large amounts' ' of data.\n - Persist data (Saved tables). Pre-process the data in' ' BigQuery and store it in additional tables. For example, if you' ' execute many similar, computationally-intensive queries with' ' different WHERE conditions, then their results are not cached.' ' Such queries also consume resources each time they run. You can' ' improve the performance of such queries and decrease their' ' processing time by pre-computing the data and storing it in a' ' table. This pre-computed data in the table can be queried by' ' SELECT queries. It can often be done during ingestion within the' ' ETL process, or by using scheduled queries or materialized' ' views.\n - Use dry run mode. Run queries in dry run mode, which' ' estimates the number of bytes read but does not actually process' ' the query.\n - Preview table data. To experiment with or explore' ' data rather than running queries, preview table data with' ' BigQuery\'s table preview capability.\n - Use cached query' ' results. All query results, including both interactive and batch' ' queries, are cached in temporary tables for approximately 24' ' hours with some exceptions. While running a cached query does' ' still count against your concurrent query limit, queries that use' ' cached results are significantly faster than queries that don\'t' ' use cached results because BigQuery does not need to compute the' ' result set.'), }, ( 'Quota exceeded', 'table exceeded quota', 'Number of partition modifications', 'column partitioned table', ): { 'cause': (' Your column-partitioned table reaches the quota of the' ' number of partition modifications permitted per day.' ' Partition modifications include the total of all load jobs,' ' copy jobs, and query jobs that append or overwrite a' ' destination partition.'), 'remediation': ( ' This quota cannot be increased. To mitigate, do the following:' ' \n - Change the partitioning on the table to have more data in' ' each partition, in order to decrease the total number of' ' partitions. For example, change from' ' partitioning by day to partitioning by month or change how you' ' partition the table.\n - Use clustering instead of partitioning.' ' \n - If you frequently load data from multiple small files stored' ' in Cloud Storage that uses a job per file, then combine multiple' ' load jobs into a single job. You can load from multiple Cloud' ' Storage URIs with a comma-separated list (for example,' ' gs://my_path/file_1,gs://my_path/file_2), or by using wildcards' ' (for example, gs://my_path/*).' ' \n - If you use load, select or copy jobs to append single rows' ' of data to a table, for example, then you should consider' ' batching multiple jobs into one job. BigQuery' ' doesn\'t perform well when used as a relational database.' ' As a best practice, avoid running frequent, single-row append' ' actions.' ' \n - To append data at a high rate, consider using BigQuery' ' Storage Write API. It is a recommended solution for' ' high-performance data ingestion. The BigQuery Storage Write API' ' has robust features, including exactly-once delivery semantics.' ' To monitor the number of modified partitions on a table, use the' ' INFORMATION_SCHEMA view.') }, ( 'Input', 'CSV files are not splittable', 'files is larger', 'maximum allowed size', ): { 'cause': ('If you load a large CSV file using the bq load command with the ' '--allow_quoted_newlines flag, you might encounter this error.'), 'remediation': ('1. Set the --allow_quoted_newlines flag to false. \n2. Split the' ' CSV file into smaller chunks that are each less than 4 GB.') }, ( 'table', 'exceeded', 'imports or query appends per table', ): { 'cause': ' BigQuery returns this error message when your table reaches the' ' limit for table operations per day for Standard tables. Table' ' operations include the combined total of all load jobs, copy' ' jobs, and query jobs that append or overwrite a destination' ' table. The limit can be found here: ' 'https://cloud.google.com/bigquery/quotas#standard_tables .', 'remediation': ' This quota cannot be increased. To remediate, do the following:' ' \n - If you frequently load data from multiple small files stored' ' in Cloud Storage that uses a job per file, then combine multiple' ' load jobs into a single job. You can load from multiple Cloud' ' Storage URIs with a comma-separated list (for example,' ' gs://my_path/file_1,gs://my_path/file_2), or by using wildcards' ' (for example, gs://my_path/*).' ' \n - If you use load, select or copy jobs to append single rows' ' of data to a table, for example, then you should consider' ' batching multiple jobs into one job. BigQuery doesn\'t perform' ' well when used as a relational database. As a best practice,' ' avoid running frequent, single-row append actions.' ' \n - To append data at a high rate, consider using BigQuery' ' Storage Write API. It is a recommended solution for' ' high-performance data ingestion. The BigQuery Storage Write API' ' has robust features, including exactly-once delivery semantics.' ' \n - To monitor the number of modified partitions on a table, use' ' the INFORMATION_SCHEMA view.' }, ( 'Exceeded rate limits', 'too many table update operations', ): { 'cause': ' The table reached the limit for maximum rate of table metadata' ' update operations per table for Standard tables. Table operations' ' include the combined total of all load jobs, copy jobs, and query' ' jobs that append to or overwrite a destination table. API calls' ' like PatchTable, UpdateTable or InsertTable also count as table' ' metadata update operations. To diagnose where the operations are' ' coming from, follow the steps in ' 'https://cloud.google.com/bigquery/docs/troubleshoot-quotas' '#ts-maximum-update-table-metadata-limit-diagnose.', 'remediation': ' - Reduce the update rate for the table metadata.' ' \n - Add a delay between jobs or table operations to make sure' ' that the update rate is within the limit.' ' \n - For data inserts or modification, consider using DML' ' operations. DML operations are not affected by the Maximum rate' ' of table metadata update operations per table rate limit' ' (DML operations have their own limits).' ' \n - If you frequently load data from multiple small files stored' ' in Cloud Storage that uses a job per file, then combine multiple' ' load jobs into a single job. You can load from multiple Cloud' ' Storage URIs with a comma-separated list (for example,' ' gs://my_path/file_1,gs://my_path/file_2), or by using wildcards' ' (for example, gs://my_path/*).' ' \n - If you use load, select or copy jobs to append single rows' ' of data to a table, for example, then you should consider' ' batching multiple jobs into one job. BigQuery doesn\'t perform' ' well when used as a relational database. As a best practice,' ' avoid running frequent, single-row append actions.' ' \n - To append data at a high rate, consider using BigQuery' ' Storage Write API. It is a recommended solution for' ' high-performance data ingestion. The BigQuery Storage Write API' ' has robust features, including exactly-once delivery semantics.' }, ( 'project', 'exceeded quota for free query bytes scanned', ): { 'cause': ( 'BigQuery returns this error when you run a query in the free' ' usage tier and the account reaches the monthly limit of data size' ' that can be queried without a paid Cloud Billing account.'), 'remediation': ('To continue using BigQuery, you need to upgrade the account to a ' 'paid Cloud Billing account.'), }, ('exceeded quota for copies per project',): { 'cause': (' Your project has exceeded the daily limit for table copy jobs.' ' See the limit here:' ' https://cloud.google.com/bigquery/quotas#copy_jobs.'), 'remediation': ('Wait for the daily quota to be replenished. \nIf the goal of the' ' frequent copy operations is to create a snapshot of data,' ' consider using table snapshots instead. Table snapshots are' ' cheaper and faster alternative to copying full tables. \nYou' ' can request a quota increase by contacting support or sales' ' if you need a bigger quota. It might take several days to review' ' and process the request. We recommend stating the priority, use' ' case, and the project ID in the request.'), }, ( 'exceeded quota', 'ExtractBytesPerDay', ): { 'cause': ('The export exceeds the default 50 TiB (Tebibytes) daily limit in' ' a project'), 'remediation': ( ' To export more than 50 TiB(Tebibytes) of data per day, do one of' ' the following: ' ' \n - Create a slot reservation or use an existing reservation and' ' assign your project to the reservation with the PIPELINE job' ' type. You will be billed using capacity-based pricing.' ' \n - Use the EXPORT DATA SQL statement. You will be billed using' ' either on-demand or capacity-based pricing, depending on how the' ' project query pricing is configured.' ' \n - Use the Storage Read API. You will be billed using the price' ' for streaming reads. The expiration time is guaranteed to be at' ' least 6 hours from session creation time.'), }, ('too many concurrent queries with remote functions',): { 'cause': (' The number of concurrent queries that contain remote functions' ' exceeds the limit.'), 'remediation': (' Follow the best practices for using remote functions outlined' ' here: https://cloud.google.com/bigquery/docs/remote-functions' '#best_practices_for_remote_functions .' ' \nYou can request a quota increase by contacting support or' ' sales if you need a bigger quota.'), }, ('exceeded quota for CREATE MODEL queries per project',): { 'cause': ('You have exceeded the quota for CREATE MODEL statements.'), 'remediation': (' If you exceed the quota for CREATE MODEL statements, send an' ' email to bqml-feedback@google.com and request a quota increase' ' through sales or support.'), }, ( 'UPDATE/MERGE', 'match', 'one source row for each target row', ): { 'cause': (' This error will be raised if the table contains duplicated rows.' ' Multiple rows in the source table match a single row in the' ' target table.'), 'remediation': ('Remove duplicate rows from the table.'), }, ('Not found: Table',): { 'cause': (' The query references a table that does not exist or could not be' ' located in the specified region and project.'), 'remediation': ( ' Make sure the table exists in the specified dataset and the table' ' identifier provided is correct.\nAfter that confirm that the' ' query is executed in the correct region (where the dataset is' ' located).'), }, ('Not found: View',): { 'cause': (' The query references a view that does not exist or could not be' ' located in the specified region and project.'), 'remediation': (' Make sure the view exists in the specified dataset and the view' ' identifier provided is correct.\nAfter that confirm that the' ' query is executed in the correct region (where the dataset is' ' located).'), }, ('Syntax Error',): { 'cause': ('This is a user side SQL statement issue.'), 'remediation': (' Check your query for syntax errors for the methods or variables' ' mentioned in the error message at the specified location.'), }, ('User requested cancellation',): { 'cause': ('The job was manually stopped by a user request before it' ' could complete or a user configured the job timeout.'), 'remediation': ( ' The job did not fail - a user sent a cancel request to stop the' ' execution of this job. You can inspect Cloud Logging and look for' ' a jobs.cancel request to understand who initiated the' ' cancellation.'), }, ( 'Job execution was cancelled', 'Job timed out after', ): { 'cause': (' The job timed out before it could complete. This can happen when' ' a job execution reaches an existing BigQuery limit or when a' ' user-defined timeout value is set in the job configuration.'), 'remediation': ( ' Inspect the job configuration to understand if a timeout value' ' was set. If no custom timeout was set, this means that one of the' ' execution limits has been reached. See' ' https://cloud.google.com/bigquery/quotas for more information' ' about execution time limits. Follow' ' https://cloud.google.com/bigquery/docs/best-practices-performance-overview' ' to optimize query performance. Also consider investigating if' ' there was a shortage of available slot resources due to a' ' possible increase in the number of concurrent queries. See' ' https://cloud.google.com/bigquery/docs/information-schema-jobs' '#view_average_concurrent_jobs_running_alongside_a_particular_job_in_the_same_project' ' for an example query to get concurrency information.'), }, ('exceeded rate limits',): { 'cause': (' Too many requests have been made in a short period, triggering a' ' rate limit to protect the service.'), 'remediation': (' Retry the operation after a few seconds. Use exponential backoff' ' between retry attempts. That is, exponentially increase the' ' delay between each retry.'), }, ( 'User does not have', 'permission in project', ): { 'cause': ('User does not have sufficient permissions in the mentioned' ' project.'), 'remediation': ('Read the error message carefully and grant the permission' ' specified in the error message to the user who attempted to run' ' the job'), }, ('User does not have permission to query table or perhaps it does not' ' exist',): { 'cause': (' There are two possible root causes: the user either does not' ' have the necessary permissions to look up tables in the project,' ' or the tables does not exist.'), 'remediation': ( ' Follow the troubleshooting advice documented here: ' 'https://cloud.google.com/bigquery/docs/troubleshoot-queries#user_perm' ), }, ('csv processing encountered too many errors', 'while parsing'): { 'cause': (' There was an issue processing the CSV file(s) submitted by the' ' user in the load job.'), 'remediation': ( ' Carefully read through the error messages above to understand the' ' specific problem(s) with the file(s). Visit ' 'https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv' '#troubleshoot_parsing_errors' ' for guidance on how to resolve parsing errors.'), }, ('csv processing encountered too many errors',): { 'cause': ('There was an issue processing the CSV file(s) submitted by the' ' user in the load job.'), 'remediation': ('There are two possible remediations:\n' ' 1. Use --max_bad_records to instruct BigQuery to skip a defined' ' number of rows that cannot be parsed and let the job complete.\n' ' 2. Fix the file(s) by editing the rows causing the failures and' ' retry the job.\n If there are additional error messages, they' ' will be printed as well to provide the location(s) of the' ' problematic row(s).'), }, ('error while reading data', 'error message', 'unable to parse'): { 'cause': ('There was an issue reading the mentioned file.'), 'remediation': ( ' The error message above specifies the problem that was' ' encountered, mentions the problematic file and the position in' ' the file at which the error occurred. Fix the issue with the file' ' and retry the job. Visit ' 'https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv' '#troubleshoot_parsing_errors' ' for guidance on how to resolve parsing errors.'), }, ( 'error while reading data', 'error message', ): { 'cause': ('There was an issue reading the mentioned file.'), 'remediation': (' The error message above specifies the problem that was' ' encountered, mentions the problematic file and the position in' ' the file at which the error occurred. Fix the' ' issue with the file and retry the job.'), }, ( 'internal error', 'retry', ): { 'cause': (' This error usually means that the job failed due to an' ' intermittent issue on the BigQuery service side. The client has' ' no way to fix or control these errors - it is only possible to' ' mitigate them by retrying the job.'), 'remediation': (' The main recommendation is to retry the job using truncated' ' exponential backoff. For more information about exponential' ' backoff, see ' 'https://en.wikipedia.org/wiki/Exponential_backoff. \nIf the' ' retries are not effective and the issues persist, you can' ' calculate the rate of failing requests by following this article' ' - https://cloud.google.com/bigquery/docs/error-messages' '#calculate-rate-of-failing-requests-and-uptime' ' - and contact support with the rate of failing requests.\nAlso,' ' if you observe a specific job persistently fail with this' ' internal error, even when retried using exponential backoff on' ' multiple workflow restart attempts, you should escalate this to' ' Cloud Support to troubleshoot the issue from the BigQuery side,' ), }, ( 'access denied', 'user does not have', 'permission', ): { 'cause': 'There are three main reasons why this error might occur:' '\n - Running a query without the bigquery.jobs.create permission on the ' 'project from which you are running the query.' '\n - Missing the bigquery.tables.getData permission on all tables and views ' 'that the query references.' '\n - Table does not exist in the queried region', 'remediation': ( '\n1. Make sure the table exists in the queried region. Check if you ' 'are explicitly setting an incorrect region for query processing.\n' '2. Make sure that the service account, user, or group running this query' 'has the bigquery.jobs.create permission on the project where the query ' 'is running.\nAlso make sure that they have the bigquery.tables.getData ' 'permission on all tables and views that are referenced by the query' ), }, ('user does not have permission',): { 'cause': 'There are three main reasons why this error might occur:' '\n - Running a query without the bigquery.jobs.create permission on the ' 'project from which you are running the query.' '\n - Missing the bigquery.tables.getData permission on all tables and views ' 'that the query references.' '\n - Table does not exist in the queried region', 'remediation': ( '\n1. Make sure the table exists in the queried region. Check if you ' 'are explicitly setting an incorrect region for query processing.\n' '2. Make sure that the service account, user, or group running this query' 'has the bigquery.jobs.create permission on the project where the query ' 'is running.\nAlso make sure that they have the bigquery.tables.getData ' 'permission on all tables and views that are referenced by the query' ), }, } ================================================ FILE: gcpdiag/runbook/bigquery/failed_query.py ================================================ # Copyright 2025 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. """Module containing the BigQuery Failed Query diagnostic tree and its steps. This runbook investigates why a specific BigQuery job failed by verifying the job status and analyzing the error message against a set of known issues to provide root cause and remediation steps. """ from google.auth import exceptions from googleapiclient import errors from gcpdiag import runbook, utils from gcpdiag.queries import apis, bigquery, crm from gcpdiag.runbook import op from gcpdiag.runbook.bigquery import constants, flags from gcpdiag.runbook.bigquery import generalized_steps as bigquery_gs class FailedQuery(runbook.DiagnosticTree): """Diagnoses issues with a failed BigQuery query job. This runbook investigates why a specific BigQuery job failed by verifying the job's status and analyzing the error message against a set of known issues to provide targeted remediation steps. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID where the BigQuery job was run.', 'required': True, }, flags.BQ_JOB_REGION: { 'type': str, 'help': 'The region where the BigQuery job was run.', 'required': True, }, flags.BQ_JOB_ID: { 'type': str, 'help': 'The identifier of the failed BigQuery Job.', 'required': True, }, flags.BQ_SKIP_PERMISSION_CHECK: { 'type': bool, 'help': 'Indicates whether to skip the permission check to speed up the investigation.', 'required': False, 'default': False, }, } def build_tree(self): """Constructs the diagnostic tree with a logical sequence of steps.""" start = BigQueryFailedQueryStart() self.add_start(start) permissions_check = bigquery_gs.RunPermissionChecks('Failed Query Runbook') self.add_step(parent=start, child=permissions_check) job_exists = BigQueryJobExists() self.add_step(parent=permissions_check, child=job_exists) self.add_end(BigQueryEnd()) class BigQueryFailedQueryStart(runbook.StartStep): """Validates parameters and prerequisites before starting the diagnosis. This initial step ensures that the provided project exists, valid job identifiers have been provided, the BigQuery API is enabled and also checks whether the user has the necessary permissions to execute the runbook. The runbook will terminate if any of these initial checks fail. """ def execute(self): """Verifying input parameters and the BigQuery API status.""" project_id = op.get(flags.PROJECT_ID) job_region = op.get(flags.BQ_JOB_REGION).lower() job_id = op.get(flags.BQ_JOB_ID) project_placeholder = crm.Project(resource_data={ 'name': 'projects/0000000000000', 'projectId': project_id }) user_email = '' try: user_email = apis.get_user_email() except (RuntimeError, exceptions.DefaultCredentialsError): op.info( 'Unable to fetch user email. Please make sure to authenticate properly before ' 'executing the investigation. Attempting to run the investigation.') except AttributeError as err: if (('has no attribute' in str(err)) and ('with_quota_project' in str(err))): op.info('Running the investigation within the GCA context.') if project_id: if job_region.lower() in bigquery.BIGQUERY_REGIONS: if job_id: op.info('Provided job input parameters have the correct format') else: op.add_skipped( resource=project_placeholder, reason= 'Invalid job identifier provided - a job identifier cannot be an empty string.' ) return else: op.add_skipped( resource=project_placeholder, reason= 'Invalid job region provided. Please provide a valid BigQuery region.' ) return else: op.add_skipped( resource=project_placeholder, reason= 'Invalid project identifier provided - the project identifier cannot be an empty string.' ) return project = project_placeholder try: project = bigquery.get_bigquery_project(project_id) if not project: op.add_skipped( project_placeholder, reason= f'Project "{project_id}" not found or you lack access permissions', ) return except utils.GcpApiError as err: if 'not found or deleted' in err.message.lower(): op.add_skipped( project_placeholder, reason= f'Project "{project_id}" not found or deleted. Provide a valid project identifier', ) return elif 'caller does not have required permission to use project' in err.message.lower( ): op.add_skipped( project_placeholder, reason=( f'You do not have permissions to access project "{project_id}". \ \nEnsure {user_email} has the "serviceusage.services.use" and ' '"serviceusage.services.list" permissions'), ) return elif ('resourcemanager.projects.get' in err.message.lower() and 'denied on resource' in err.message.lower()): op.info( f'User {user_email} does not have access to perform a resourcemanager.projects.get' ' operation to fetch project metadata, or the project might not exist. Runbook ' 'execution success will depend on project existence and the user having the ' 'minimal required permissions.') try: is_bq_api_enabled = apis.is_enabled(project_id, 'bigquery') if not is_bq_api_enabled: op.add_skipped( project, reason= f'BigQuery API is not enabled in project {project_id}. Terminating investigation.', ) return else: op.info('The BigQuery API is enabled.') except utils.GcpApiError as err: if 'access' in err.message.lower( ) or 'permission denied' in err.message.lower(): op.info( f'User {user_email} does not have access to check the API status.\nRunbook execution ' 'success will depend on the BigQuery API being enabled.') class BigQueryJobExists(runbook.Gateway): """Gateway that verifies the BigQuery Job exists. This step calls the BigQuery API to fetch the job. If the job is found, the runbook proceeds to the next step. If it is not found (e.g., due to a typo in the job ID or region), the runbook reports this and terminates this path. """ template = 'generics::job_exists' def execute(self): """Verifies that the BigQuery Job exists and directs the flow.""" project_id = op.get(flags.PROJECT_ID) project = crm.Project(resource_data={ 'name': 'projects/0000000000000', 'projectId': project_id }) try: project = bigquery.get_bigquery_project(project_id) except (utils.GcpApiError, errors.HttpError): pass job = None try: context = op.get_context() job = bigquery.get_bigquery_job(context, op.get(flags.BQ_JOB_REGION), op.get(flags.BQ_JOB_ID), op.get(flags.BQ_SKIP_PERMISSION_CHECK)) except utils.GcpApiError as err: if 'not found' in err.message.lower(): op.add_failed( project, reason=op.prep_msg(op.FAILURE_REASON, job_id=(op.get(flags.PROJECT_ID) + ':' + op.get(flags.BQ_JOB_REGION) + '.' + op.get(flags.BQ_JOB_ID))), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) self.add_child(BigQueryEnd()) return elif 'access denied' in err.message.lower(): user_email = '' try: user_email = apis.get_user_email() except (RuntimeError, exceptions.DefaultCredentialsError): op.info( message= 'Unable to fetch user email. Please make sure to authenticate properly' ' before executing the investigation.') except AttributeError as error: if (('has no attribute' in str(error)) and ('with_quota_project' in str(error))): op.info('Running the investigation within the GCA context.') warning = 'Insufficient permissions to access BigQuery job metadata.\nGrant at least the' warning += (' following permissions to ' + user_email + ':\n') warning += 'bigquery.jobs.get, bigquery.jobs.create, serviceusage.services.use and ' warning += 'serviceusage.services.list .\nTerminating the investigation.' op.add_skipped( project, reason=warning, ) self.add_child(BigQueryEnd()) return if job: op.add_ok(job, reason=op.prep_msg(op.SUCCESS_REASON, job_id=job.id)) self.add_child(ConfirmBQJobIsDone()) else: op.add_failed( project, reason=op.prep_msg(op.FAILURE_REASON, job_id=(op.get(flags.PROJECT_ID) + ':' + op.get(flags.BQ_JOB_REGION) + '.' + op.get(flags.BQ_JOB_ID))), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) self.add_child(BigQueryEnd()) class ConfirmBQJobIsDone(runbook.Gateway): """Gateway to confirm that the BigQuery job has finished execution. This step checks the job's status. If the status is 'DONE', the runbook continues to the next check. If the job is still 'RUNNING' or 'PENDING', the runbook will stop and advise the user to wait for completion. """ template = 'generics::job_is_done' def execute(self): """Confirming job is in a 'DONE' state...""" context = op.get_context() job = bigquery.get_bigquery_job(context, op.get(flags.BQ_JOB_REGION), op.get(flags.BQ_JOB_ID), op.get(flags.BQ_SKIP_PERMISSION_CHECK)) if not job: op.add_skipped(op.get(flags.PROJECT_ID), reason='Cannot retrieve job details.') return if job.job_state == 'DONE': op.add_ok(job, reason=op.prep_msg(op.SUCCESS_REASON, job_id=job.id)) self.add_child(CheckBQJobHasFailed()) else: op.add_failed( job, reason=op.prep_msg(op.FAILURE_REASON, job_id=job.id, job_state=job.job_state), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) self.add_child(BigQueryEnd()) class CheckBQJobHasFailed(runbook.Gateway): """Gateway to verify that a completed job contains an error result. This step inspects the job details to see if an error was reported. If an error is present, the runbook proceeds to the final analysis step. If the job completed successfully, the runbook stops and informs the user. """ template = 'generics::job_has_failed' def execute(self): """Verifies if a completed job contains an error result.""" context = op.get_context() job = bigquery.get_bigquery_job(context, op.get(flags.BQ_JOB_REGION), op.get(flags.BQ_JOB_ID), op.get(flags.BQ_SKIP_PERMISSION_CHECK)) if not job: op.add_skipped(op.get(flags.PROJECT_ID), reason='Cannot retrieve job details.') return if job.job_error_result: op.add_ok( job, reason=op.prep_msg( op.SUCCESS_REASON, job_id=job.id, ), ) self.add_child(BigQueryErrorIdentification()) else: skip_reason = op.prep_msg(op.FAILURE_REASON, job_id=job.id) + '\n' + op.prep_msg( op.FAILURE_REMEDIATION) op.add_skipped(job, reason=skip_reason) self.add_child(BigQueryEnd()) class BigQueryErrorIdentification(runbook.Step): """Analyzes the job's error message to find a known mitigation. This is the final diagnostic step. It collects all error messages from the job and compares them against a dictionary of known issues (the ERROR_MAP). If a match is found, it provides a specific cause and remediation. Otherwise, it reports the full error for manual inspection. """ template = 'generics::error_identification' def execute(self): """Analyzing error message for known root causes and remediation steps.""" context = op.get_context() job = bigquery.get_bigquery_job(context, op.get(flags.BQ_JOB_REGION), op.get(flags.BQ_JOB_ID), op.get(flags.BQ_SKIP_PERMISSION_CHECK)) if not job or not job.job_error_result: op.add_skipped(op.get(flags.PROJECT_ID), reason='Cannot retrieve job error details for analysis.') return unique_errors = set() if job.job_error_result and job.job_error_result.get('message'): unique_errors.add(job.job_error_result['message']) for err in job.job_errors: if err.get('message'): if err.get('message') not in unique_errors: unique_errors.add(err['message']) else: continue if not unique_errors: op.add_uncertain( job, reason='The job failed but returned no error message to analyze.') return has_matched = False for error_text in unique_errors: error_message_searchable = error_text.lower() for error_substrings, details in constants.ERROR_MAP.items(): error_substrings_lower = [ error_substring.lower() for error_substring in error_substrings ] if all(error_substring_lower in error_message_searchable for error_substring_lower in error_substrings_lower): has_matched = True op.add_failed( job, reason=op.prep_msg( op.FAILURE_REASON, error_message=error_text, cause=details['cause'], ), remediation=op.prep_msg(op.FAILURE_REMEDIATION, remediation=details['remediation']), ) break if not has_matched: uncertain_error_text = '\n'.join(sorted(list(unique_errors))) op.add_uncertain( job, reason=op.prep_msg( op.UNCERTAIN_REASON, job_id=job.id, error_message=uncertain_error_text, ), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION), ) class BigQueryEnd(runbook.EndStep): """End of the runbook. No more checks to perform. """ def execute(self): """End step.""" op.info('No more checks to perform.') ================================================ FILE: gcpdiag/runbook/bigquery/failed_query_test.py ================================================ # Copyright 2024 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. """Test class for the bigquery/failed-query runbook.""" import datetime import unittest from unittest import mock from gcpdiag import config, models, utils from gcpdiag.queries import apis_stub from gcpdiag.runbook import bigquery, op, snapshot_test_base from gcpdiag.runbook.bigquery import failed_query, flags class Test(snapshot_test_base.RulesSnapshotTestBase): """Test cases for the BigQuery Failed Query runbook.""" rule_pkg = bigquery runbook_name = 'bigquery/failed-query' runbook_id = 'Failed Query Runbook' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [ # Test Case 1: A failed job with a known error (CSV). { 'project_id': 'gcpdiag-bigquery1-aaaa', 'bigquery_job_id': 'test_csv_error', 'bigquery_job_region': 'us', 'bigquery_skip_permission_check': False, }, # Test Case 2: A failed job with an unknown error. { 'project_id': 'gcpdiag-bigquery1-aaaa', 'bigquery_job_id': 'test_unknown', 'bigquery_job_region': 'us', 'bigquery_skip_permission_check': False, }, # Test Case 3: A job that completed successfully (no error). { 'project_id': 'gcpdiag-bigquery1-aaaa', 'bigquery_job_id': 'test_success', 'bigquery_job_region': 'us', 'bigquery_skip_permission_check': False, }, # Test Case 4: A job that is still running. { 'project_id': 'gcpdiag-bigquery1-aaaa', 'bigquery_job_id': 'test_running', 'bigquery_job_region': 'us', 'bigquery_skip_permission_check': False, }, # Test Case 5: A job ID that does not exist. { 'project_id': 'gcpdiag-bigquery1-aaaa', 'bigquery_job_id': 'test_notfound', 'bigquery_job_region': 'us', 'bigquery_skip_permission_check': False, }, # Test Case 6: An invalid region is provided. { 'project_id': 'gcpdiag-bigquery1-aaaa', 'bigquery_job_id': 'any_id', 'bigquery_job_region': 'invalid-region', 'bigquery_skip_permission_check': False, }, ] DUMMY_PROJECT_ID = 'gcpdiag-bigquery1-aaaa' class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class FailedQueryStepTestBase(unittest.TestCase): """Base class for failed query step tests.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.operator.context = models.Context(project_id=DUMMY_PROJECT_ID) self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.BQ_JOB_REGION: 'us', flags.BQ_JOB_ID: 'test_success', flags.BQ_SKIP_PERMISSION_CHECK: True, 'start_time': datetime.datetime(2025, 10, 27, tzinfo=datetime.timezone.utc), 'end_time': datetime.datetime(2025, 10, 28, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params class BigQueryFailedQueryStartTest(FailedQueryStepTestBase): """Test BigQueryFailedQueryStart step.""" def test_valid_parameters(self): step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_not_called() self.mock_is_enabled.assert_called_once_with(DUMMY_PROJECT_ID, 'bigquery') assert op.get(flags.PROJECT_ID) == DUMMY_PROJECT_ID @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project') def test_get_project_is_none(self, mock_get_project): mock_get_project.return_value = None step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( 'not found or you lack access permissions', self.mock_interface.add_skipped.call_args[1]['reason'], ) @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project') def test_get_project_api_error_not_found(self, mock_get_project): mock_get_project.side_effect = utils.GcpApiError( {'message': 'not found or deleted'}) step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( 'not found or deleted', self.mock_interface.add_skipped.call_args[1]['reason'], ) @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project') def test_get_project_api_error_permission_denied(self, mock_get_project): mock_get_project.side_effect = utils.GcpApiError( {'message': 'caller does not have required permission to use project'}) step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( 'You do not have permissions', self.mock_interface.add_skipped.call_args[1]['reason'], ) @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project') def test_get_project_api_error_rm_permission_denied(self, mock_get_project): mock_get_project.side_effect = utils.GcpApiError( {'message': 'resourcemanager.projects.get denied on resource'}) step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_with(mock.ANY, 'INFO') self.mock_interface.add_skipped.assert_not_called() self.mock_is_enabled.assert_called_once_with(DUMMY_PROJECT_ID, 'bigquery') assert op.get(flags.PROJECT_ID) == DUMMY_PROJECT_ID def test_invalid_project_id(self): self.params[flags.PROJECT_ID] = '' step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( 'Invalid project identifier', self.mock_interface.add_skipped.call_args[1]['reason'], ) def test_invalid_region(self): self.params[flags.BQ_JOB_REGION] = 'invalid-region' step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( 'Invalid job region', self.mock_interface.add_skipped.call_args[1]['reason'], ) def test_invalid_job_id(self): self.params[flags.BQ_JOB_ID] = '' step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( 'Invalid job identifier', self.mock_interface.add_skipped.call_args[1]['reason'], ) def test_bq_api_not_enabled(self): self.mock_is_enabled.return_value = False step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( 'BigQuery API is not enabled', self.mock_interface.add_skipped.call_args[1]['reason'], ) def test_get_user_email_attribute_error(self): self.mock_get_user_email.side_effect = AttributeError( "'ResourceManager' object has no attribute 'with_quota_project'") step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_any_call( 'Running the investigation within the GCA context.', 'INFO') def test_is_enabled_api_error(self): self.mock_is_enabled.side_effect = utils.GcpApiError( {'message': 'access denied'}) step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called() def test_get_user_email_runtime_error(self): self.mock_get_user_email.side_effect = RuntimeError( 'Failed to get credentials') step = failed_query.BigQueryFailedQueryStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_any_call( 'Unable to fetch user email. Please make sure to authenticate properly' ' before executing the investigation. Attempting to run the' ' investigation.', 'INFO', ) class BigQueryJobExistsTest(FailedQueryStepTestBase): """Test BigQueryJobExists step.""" def test_job_exists(self): self.params[flags.BQ_JOB_ID] = 'test_success' step = failed_query.BigQueryJobExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() assert any( isinstance(c, failed_query.ConfirmBQJobIsDone) for c in step.steps) def test_get_job_not_found_gcp_api_error(self): self.params[flags.BQ_JOB_ID] = 'test_notfound_exception' step = failed_query.BigQueryJobExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_job_not_found(self): self.params[flags.BQ_JOB_ID] = 'test_notfound' step = failed_query.BigQueryJobExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_get_project_error(self): self.params[flags.BQ_JOB_ID] = 'test_success' step = failed_query.BigQueryJobExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project') def test_get_project_gcp_api_error_pass(self, mock_get_project): mock_get_project.side_effect = utils.GcpApiError('Failed to get project') self.params[flags.BQ_JOB_ID] = 'test_notfound' step = failed_query.BigQueryJobExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.bigquery.get_bigquery_job') def test_get_job_raises_not_found_gcp_api_error(self, mock_get_job): mock_get_job.side_effect = utils.GcpApiError('not found') self.params[flags.BQ_JOB_ID] = 'job_raises_notfound' step = failed_query.BigQueryJobExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.bigquery.get_bigquery_job') def test_get_job_access_denied_runtime_error(self, mock_get_job): mock_get_job.side_effect = utils.GcpApiError('access denied') self.mock_get_user_email.side_effect = RuntimeError( 'Failed to get credentials') self.params[flags.BQ_JOB_ID] = 'some_job' step = failed_query.BigQueryJobExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() @mock.patch('gcpdiag.queries.bigquery.get_bigquery_job') def test_get_job_access_denied_attribute_error(self, mock_get_job): mock_get_job.side_effect = utils.GcpApiError('access denied') self.mock_get_user_email.side_effect = AttributeError( "'ResourceManager' object has no attribute 'with_quota_project'") self.params[flags.BQ_JOB_ID] = 'some_job' step = failed_query.BigQueryJobExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() class ConfirmBQJobIsDoneTest(FailedQueryStepTestBase): """Test ConfirmBQJobIsDone step.""" def test_job_is_done(self): self.params[flags.BQ_JOB_ID] = 'test_success' step = failed_query.ConfirmBQJobIsDone() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_job_is_not_done(self): self.params[flags.BQ_JOB_ID] = 'test_running' step = failed_query.ConfirmBQJobIsDone() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_job_is_none(self): self.params[flags.BQ_JOB_ID] = 'test_notfound' step = failed_query.ConfirmBQJobIsDone() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() class CheckBQJobHasFailedTest(FailedQueryStepTestBase): """Test CheckBQJobHasFailed step.""" def test_job_has_failed(self): self.params[flags.BQ_JOB_ID] = 'test_with_error' step = failed_query.CheckBQJobHasFailed() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_job_has_not_failed(self): self.params[flags.BQ_JOB_ID] = 'test_success' step = failed_query.CheckBQJobHasFailed() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_job_is_none(self): self.params[flags.BQ_JOB_ID] = 'test_notfound' step = failed_query.CheckBQJobHasFailed() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_known_error_in_job_errors(self): self.params[flags.BQ_JOB_ID] = 'test_job_errors' step = failed_query.BigQueryErrorIdentification() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_no_error_message_in_job(self): self.params[flags.BQ_JOB_ID] = 'test_no_error_message_in_job' step = failed_query.BigQueryErrorIdentification() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() class BigQueryErrorIdentificationTest(FailedQueryStepTestBase): """Test BigQueryErrorIdentification step.""" def test_known_error(self): self.params[flags.BQ_JOB_ID] = 'test_csv_error' step = failed_query.BigQueryErrorIdentification() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_unknown_error(self): self.params[flags.BQ_JOB_ID] = 'test_unknown' step = failed_query.BigQueryErrorIdentification() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_job_is_none(self): self.params[flags.BQ_JOB_ID] = 'test_notfound' step = failed_query.BigQueryErrorIdentification() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_job_error_result_is_none(self): self.params[flags.BQ_JOB_ID] = 'test_success' step = failed_query.BigQueryErrorIdentification() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_duplicate_error_messages(self): self.params[flags.BQ_JOB_ID] = 'test_duplicate' step = failed_query.BigQueryErrorIdentification() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() class BigQueryEndTest(FailedQueryStepTestBase): """Test BigQueryEnd step.""" def test_end_step(self): step = failed_query.BigQueryEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_with('No more checks to perform.', 'INFO') def test_no_error_message_found(self): self.params[flags.BQ_JOB_ID] = 'test_no_error_found' step = failed_query.BigQueryErrorIdentification() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() class FailedQueryTest(unittest.TestCase): def test_build_tree(self): dq = failed_query.FailedQuery() dq.build_tree() self.assertIsInstance(dq.start, failed_query.BigQueryFailedQueryStart) start_step_children = dq.start.steps self.assertEqual(len(start_step_children), 2) permission_check_step = start_step_children[0] self.assertIsInstance( permission_check_step, failed_query.bigquery_gs.RunPermissionChecks, ) permission_check_step_children = permission_check_step.steps self.assertEqual(len(permission_check_step_children), 1) job_exists_step = permission_check_step_children[0] self.assertIsInstance(job_exists_step, failed_query.BigQueryJobExists) end_step = start_step_children[1] self.assertIsInstance(end_step, failed_query.BigQueryEnd) ================================================ FILE: gcpdiag/runbook/bigquery/flags.py ================================================ # Copyright 2025 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. """Flags for BigQuery runbooks.""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.flags import * from gcpdiag.runbook.iam.flags import * BQ_JOB_ID = 'bigquery_job_id' BQ_JOB_REGION = 'bigquery_job_region' BQ_SKIP_PERMISSION_CHECK = 'bigquery_skip_permission_check' BQ_PERMISSION_RESULTS = 'bigquery_permission_results' BQ_JOB_ORGANIZATION_ID = 'bigquery_job_organization_id' BQ_RESERVATION_ADMIN_PROJECT_ID = 'bigquery_reservations_admin_project_id' PROJECT_ID = 'project_id' ================================================ FILE: gcpdiag/runbook/bigquery/generalized_steps.py ================================================ # Copyright 2024 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. """Common steps for BigQuery runbooks.""" import logging from typing import Dict, Set from google.auth import exceptions from gcpdiag import runbook, utils from gcpdiag.queries import apis from gcpdiag.queries import bigquery as bq_queries from gcpdiag.queries import crm from gcpdiag.queries.iam import (DEFAULT_SERVICE_ACCOUNT_DOMAINS, SERVICE_AGENT_DOMAINS) from gcpdiag.runbook import op from gcpdiag.runbook.bigquery import flags from gcpdiag.runbook.bigquery.constants import RUNBOOK_PERMISSION_MAP from gcpdiag.utils import GcpApiError class RunPermissionChecks(runbook.Gateway): """A comprehensive step to check all mandatory and optional permissions. This step is intended to check mandatory and optional permissions for the given BigQuery runbook type. It will terminate runbook execution if mandatory permissions are missing, or add 'SKIP' notifications for missing optional permissions. The step execution will skip altogether if the user is missing the resourcemanager.projects.get permission. Finally, it populates the global PERMISSION_RESULTS dictionary used throughout the runbook. """ template = 'permissions::mandatory' def __init__(self, runbook_id='Failed Query Runbook'): super().__init__() self.runbook_id = runbook_id self.principal_email = '' def execute(self): """Verifying permissions.""" if not self.runbook_id: raise ValueError('runbook_id must be provided to RunPermissionChecks') skip_permission_check = op.get(flags.BQ_SKIP_PERMISSION_CHECK) project_placeholder = crm.Project(resource_data={ 'name': 'projects/0000000000', 'projectId': op.get(flags.PROJECT_ID), }) try: self.principal_email = apis.get_user_email() except (RuntimeError, AttributeError, exceptions.DefaultCredentialsError): op.add_skipped( project_placeholder, reason= 'Permission check is being skipped because it\'s not possible to successfully identify' ' the user executing the investigation.') return project = project_placeholder try: project = bq_queries.get_bigquery_project(op.get(flags.PROJECT_ID)) except utils.GcpApiError as err: if 'not found or deleted' in err.message: op.add_skipped( project_placeholder, reason=(f'Project "{project_placeholder.project_id}" not found or' ' deleted. Provide a valid project identifier'), ) self.add_child(bq_queries.BigQueryEnd()) return elif ('Caller does not have required permission to use project' in err.message): op.add_skipped( project_placeholder, reason=( 'You do not have permissions to access project' f' "{project_placeholder.project_id}". \nEnsure' f' {self.principal_email} has the "serviceusage.services.use"' ' and "serviceusage.services.list" permissions'), ) self.add_child(bq_queries.BigQueryEnd()) return if skip_permission_check: necessary_permission_string = '' for item in RUNBOOK_PERMISSION_MAP[self.runbook_id]['mandatory_project']: necessary_permission_string += (item + ', ') op.add_skipped( project, reason= f'Permission check is being skipped because --skip_permission_check=True was used.\ \nRunbook execution success will depend on the user having the minimal required permissions:\ \n{necessary_permission_string[:-2]}.\n') return organization_id = None if self.runbook_id != 'Failed Query Runbook': try: organization = crm.get_organization(op.get(flags.PROJECT_ID)) if organization: organization_id = organization.id except GcpApiError as err: if 'can\'t access organization for project' in err.message: op.info('You don\'t have access to the Organization resource') principal = self._get_principal() project_policy = bq_queries.get_project_policy(op.get_context()) organization_policy = None if self.runbook_id != 'Failed Query Runbook': if organization_id: try: host_project_context = op.get_context().copy_with( project_id=organization_id) organization_policy = bq_queries.get_organization_policy( host_project_context, organization_id) except GcpApiError as err: if 'doesn\'t have access to' in err.message or 'denied on resource' in err.message: op.info( 'User does not have access to the organization policy. Investigation' ' completeness and accuracy might depend on the presence of' ' organization level permissions.') organization_policy = None else: organization_policy = None reqs = RUNBOOK_PERMISSION_MAP.get(self.runbook_id) if project_policy is None: op.add_skipped( resource=project, reason= f'The permission check step will not be carried out.\nReason: {self.principal_email} ' 'doesn\'t have the resourcemanager.projects.get permission.\nThis is not a blocking ' 'condition - the investigation will continue.\nHowever, successful execution and result ' 'completeness depend on permissions provided.') else: if reqs: mandatory_reqs = reqs.get('mandatory_project', set()) if mandatory_reqs: mandatory_perms = bq_queries.check_permissions_for_principal( project_policy, principal, mandatory_reqs) missing_mandatory = bq_queries.get_missing_permissions( mandatory_reqs, mandatory_perms) if missing_mandatory: op.add_failed( resource=project, reason=op.prep_msg( op.FAILURE_REASON, principal=self.principal_email, permissions=', '.join(sorted(missing_mandatory)), ), remediation=op.prep_msg(op.FAILURE_REMEDIATION, principal=self.principal_email), ) permission_results: Dict[str, bool] = {} optional_project_reqs = reqs.get('optional_project', set()) if optional_project_reqs: project_perms = bq_queries.check_permissions_for_principal( project_policy, principal, optional_project_reqs) for perm in optional_project_reqs: permission_results[perm] = project_perms.get(perm, False) if not project_perms.get(perm): self._add_info( insight_name=f'Project-level analysis requiring: {perm}', missing_permissions={perm}, principal=self.principal_email, ) optional_org_reqs = reqs.get('optional_org', set()) if organization_id and optional_org_reqs: if organization_policy is not None: org_perms = bq_queries.check_permissions_for_principal( organization_policy, principal, optional_org_reqs) for perm in optional_org_reqs: permission_results[perm] = org_perms.get(perm, False) if not org_perms.get(perm): self._add_info( insight_name= f'Organization-level analysis requiring: {perm}', missing_permissions={perm}, principal=self.principal_email, is_org=True, ) else: op.info(message=( f"User {self.principal_email} can't access policies for" f' organization {organization_id}.'),) op.put(flags.BQ_PERMISSION_RESULTS, permission_results) op.add_ok(resource=project, reason='All permission checks are complete.') def _get_principal(self): principal_email_doman = self.principal_email.partition('@')[2] if (principal_email_doman in SERVICE_AGENT_DOMAINS or principal_email_doman.startswith('gcp-sa-') or self.principal_email.endswith(DEFAULT_SERVICE_ACCOUNT_DOMAINS[1])): principal_type = 'service_account' else: principal_type = 'user' return principal_type + ':' + self.principal_email def _add_info( self, insight_name: str, missing_permissions: Set[str], principal: str, is_org: bool = False, ): """Helper to generate a consistent 'skipped' message for optional permissions.""" permissions = ', '.join(sorted(missing_permissions)) logging.debug('permissions = %s', permissions) level = 'organization' if is_org else 'project' message = f'A sub-analysis was skipped: {insight_name}.' message += f'\n\tTo enable this analysis, grant the principal {principal}' message += (f' the IAM permission at the {level} level') op.info(message=message) ================================================ FILE: gcpdiag/runbook/bigquery/generalized_steps_test.py ================================================ # Copyright 2024 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. """Tests for generalized steps in BigQuery runbooks.""" import datetime import unittest from unittest import mock from gcpdiag import models, utils from gcpdiag.queries import apis_stub, crm from gcpdiag.runbook import op from gcpdiag.runbook.bigquery import flags, generalized_steps DUMMY_PROJECT_ID = 'gcpdiag-bigquery1-aaaa' class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class RunPermissionChecksTest(unittest.TestCase): """Test cases for RunPermissionChecks.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_get_bigquery_project = self.enterContext( mock.patch('gcpdiag.queries.bigquery.get_bigquery_project')) self.mock_crm_get_organization = self.enterContext( mock.patch('gcpdiag.queries.crm.get_organization')) self.mock_bq_get_project_policy = self.enterContext( mock.patch('gcpdiag.queries.bigquery.get_project_policy')) self.mock_bq_get_organization_policy = self.enterContext( mock.patch('gcpdiag.queries.bigquery.get_organization_policy')) self.mock_runbook_permission_map = self.enterContext( mock.patch.dict( generalized_steps.RUNBOOK_PERMISSION_MAP, { 'Failed Query Runbook': { 'mandatory_project': {'p1'}, 'optional_project': set(), 'optional_org': set(), }, 'other-runbook': { 'mandatory_project': {'p1'}, 'optional_project': {'p2'}, 'optional_org': {'o1'}, }, }, )) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.operator.context = models.Context(project_id=DUMMY_PROJECT_ID) self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.BQ_SKIP_PERMISSION_CHECK: False, 'start_time': datetime.datetime.now(), 'end_time': datetime.datetime.now(), } self.operator.parameters = self.params self.mock_project = mock.Mock(spec=crm.Project) self.mock_project.id = DUMMY_PROJECT_ID self.mock_project.name = f'projects/{self.mock_project.id}' self.mock_get_bigquery_project.return_value = self.mock_project self.mock_get_user_email.return_value = 'test@example.com' self.mock_project_policy = mock.MagicMock() self.mock_project_policy.has_permission.return_value = True self.mock_bq_get_project_policy.return_value = self.mock_project_policy self.mock_org_policy = mock.MagicMock() self.mock_org_policy.has_permission.return_value = True self.mock_bq_get_organization_policy.return_value = self.mock_org_policy def test_no_runbook_id_raises_value_error(self): with self.assertRaises(ValueError): step = generalized_steps.RunPermissionChecks(runbook_id=None) with op.operator_context(self.operator): self.operator.set_step(step) step.execute() def test_skip_permission_check_true(self): self.params[flags.BQ_SKIP_PERMISSION_CHECK] = True step = generalized_steps.RunPermissionChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( 'Permission check is being skipped', self.mock_interface.add_skipped.call_args[1]['reason'], ) def test_get_user_email_fails(self): self.mock_get_user_email.side_effect = RuntimeError('Can not get email') step = generalized_steps.RunPermissionChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( "it's not possible to successfully identify the user", self.mock_interface.add_skipped.call_args[1]['reason'], ) def test_get_project_policy_is_none(self): self.mock_bq_get_project_policy.return_value = None step = generalized_steps.RunPermissionChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.assertIn( "doesn't have the resourcemanager.projects.get permission", self.mock_interface.add_skipped.call_args[1]['reason'], ) def test_missing_mandatory_permissions(self): self.mock_project_policy.has_permission.return_value = False step = generalized_steps.RunPermissionChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_missing_optional_project_permissions(self): generalized_steps.RUNBOOK_PERMISSION_MAP['Failed Query Runbook'] = { 'mandatory_project': {'p1'}, 'optional_project': {'p2'}, 'optional_org': set(), } self.mock_project_policy.has_permission.side_effect = lambda p, perm: perm == 'p1' step = generalized_steps.RunPermissionChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_with( 'A sub-analysis was skipped: Project-level analysis requiring:' ' p2.\n\tTo enable this analysis, grant the principal' ' test@example.com the IAM permission at the project level', 'INFO', ) self.mock_interface.add_ok.assert_called_once() def test_runbook_id_not_failed_query_missing_org_perm(self): self.mock_crm_get_organization.return_value = mock.Mock(id='org1') self.mock_org_policy.has_permission.return_value = False step = generalized_steps.RunPermissionChecks(runbook_id='other-runbook') with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_with( 'A sub-analysis was skipped: Organization-level analysis requiring:' ' o1.\n\tTo enable this analysis, grant the principal' ' test@example.com the IAM permission at the organization level', 'INFO', ) self.mock_interface.add_ok.assert_called_once() def test_get_org_fails(self): self.mock_crm_get_organization.side_effect = utils.GcpApiError( Exception("can't access organization for project")) step = generalized_steps.RunPermissionChecks(runbook_id='other-runbook') with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_any_call( "You don't have access to the Organization resource", 'INFO') self.mock_interface.add_ok.assert_called_once() def test_get_org_policy_fails(self): self.mock_crm_get_organization.return_value = mock.Mock(id='org1') self.mock_bq_get_organization_policy.side_effect = utils.GcpApiError( Exception('denied on resource')) step = generalized_steps.RunPermissionChecks(runbook_id='other-runbook') with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_has_calls([ mock.call( 'User does not have access to the organization policy.' ' Investigation completeness and accuracy might depend on the' ' presence of organization level permissions.', 'INFO', ), mock.call( "User test@example.com can't access policies for organization" ' org1.', 'INFO', ), ]) self.mock_interface.add_ok.assert_called_once() def test_service_account_principal_gcp_sa(self): self.mock_get_user_email.return_value = ( 'test@gcp-sa-project.iam.gserviceaccount.com') step = generalized_steps.RunPermissionChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_project_policy.has_permission.assert_called_with( 'service_account:test@gcp-sa-project.iam.gserviceaccount.com', 'p1', ) self.mock_interface.add_ok.assert_called_once() def test_service_account_principal_default(self): self.mock_get_user_email.return_value = 'test@developer.gserviceaccount.com' step = generalized_steps.RunPermissionChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_project_policy.has_permission.assert_called_with( 'service_account:test@developer.gserviceaccount.com', 'p1', ) self.mock_interface.add_ok.assert_called_once() ================================================ FILE: gcpdiag/runbook/bigquery/snapshots/failed_query.txt ================================================ bigquery_job_id=test_csv_error,bigquery_job_region=us,bigquery_skip_permission_check=False,project_i d=gcpdiag-bigquery1-aaaa bigquery/failed-query: Diagnoses issues with a failed BigQuery query job. This runbook investigates why a specific BigQuery job failed by verifying the job's status and analyzing the error message against a set of known issues to provide targeted remediation steps. [START]: Verifying input parameters and the BigQuery API status. [INFO]: Provided job input parameters have the correct format [INFO]: The BigQuery API is enabled. [GATEWAY]: Verifying permissions. - gcpdiag-cloudsql1-aaaa [FAIL] [REASON] Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use. [REMEDIATION] Grant the principal fake-user@google.com the missing permission(s) on the project to proceed. [INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll. To enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level - gcpdiag-cloudsql1-aaaa [OK] [REASON] All permission checks are complete. [GATEWAY]: Verify that the BigQuery Job exists [INFO]: WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions. Make sure to grant fake-user@google.com "bigquery.jobs.create" and "bigquery.jobs.listAll". Continuing the investigation with the BigQuery job metadata obtained from the API. - gcpdiag-bigquery1-aaaa:us.test_csv_error [OK] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_csv_error was successfully located. [GATEWAY]: Confirm the BigQuery job has finished execution - gcpdiag-bigquery1-aaaa:us.test_csv_error [OK] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_csv_error has finished execution. [GATEWAY]: Verify the BigQuery job failed - gcpdiag-bigquery1-aaaa:us.test_csv_error [OK] [REASON] Job finished execution with an error. Continuing the investigation. [AUTOMATED STEP]: Analyze BigQuery job errors for known mitigations - gcpdiag-bigquery1-aaaa:us.test_csv_error [FAIL] [REASON] Job failed with error: Not found: table gcpdiag-bigquery1-aaaa:dataset.table Job failure cause: The query references a table that does not exist or could not be located in the specified region and project. [REMEDIATION] Suggested mitigation: Make sure the table exists in the specified dataset and the table identifier provided is correct. After that confirm that the query is executed in the correct region (where the dataset is located). [END]: End step. [INFO]: No more checks to perform. bigquery_job_id=test_unknown,bigquery_job_region=us,bigquery_skip_permission_check=False,project_id= gcpdiag-bigquery1-aaaa bigquery/failed-query: Diagnoses issues with a failed BigQuery query job. This runbook investigates why a specific BigQuery job failed by verifying the job's status and analyzing the error message against a set of known issues to provide targeted remediation steps. [START]: Verifying input parameters and the BigQuery API status. [INFO]: Provided job input parameters have the correct format [INFO]: The BigQuery API is enabled. [GATEWAY]: Verifying permissions. - gcpdiag-cloudsql1-aaaa [FAIL] [REASON] Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use. [REMEDIATION] Grant the principal fake-user@google.com the missing permission(s) on the project to proceed. [INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll. To enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level - gcpdiag-cloudsql1-aaaa [OK] [REASON] All permission checks are complete. [GATEWAY]: Verify that the BigQuery Job exists [INFO]: WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions. Make sure to grant fake-user@google.com "bigquery.jobs.create" and "bigquery.jobs.listAll". Continuing the investigation with the BigQuery job metadata obtained from the API. - gcpdiag-bigquery1-aaaa:us.test_unknown [OK] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_unknown was successfully located. [GATEWAY]: Confirm the BigQuery job has finished execution - gcpdiag-bigquery1-aaaa:us.test_unknown [OK] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_unknown has finished execution. [GATEWAY]: Verify the BigQuery job failed - gcpdiag-bigquery1-aaaa:us.test_unknown [OK] [REASON] Job finished execution with an error. Continuing the investigation. [AUTOMATED STEP]: Analyze BigQuery job errors for known mitigations - gcpdiag-bigquery1-aaaa:us.test_unknown [UNCERTAIN] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_unknown failed with an error that does not have a publicly documented mitigation and root cause. Full error message(s) reported: "An internal error occurred." [REMEDIATION] Please retry the job to confirm whether the error is transient and can be mitigated through a retry with exponential backoff. See . If the issue persists, contact Google Cloud Support at and provide this report with the full BigQuery Job Id. [END]: End step. [INFO]: No more checks to perform. bigquery_job_id=test_success,bigquery_job_region=us,bigquery_skip_permission_check=False,project_id= gcpdiag-bigquery1-aaaa bigquery/failed-query: Diagnoses issues with a failed BigQuery query job. This runbook investigates why a specific BigQuery job failed by verifying the job's status and analyzing the error message against a set of known issues to provide targeted remediation steps. [START]: Verifying input parameters and the BigQuery API status. [INFO]: Provided job input parameters have the correct format [INFO]: The BigQuery API is enabled. [GATEWAY]: Verifying permissions. - gcpdiag-cloudsql1-aaaa [FAIL] [REASON] Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use. [REMEDIATION] Grant the principal fake-user@google.com the missing permission(s) on the project to proceed. [INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll. To enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level - gcpdiag-cloudsql1-aaaa [OK] [REASON] All permission checks are complete. [GATEWAY]: Verify that the BigQuery Job exists [INFO]: WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions. Make sure to grant fake-user@google.com "bigquery.jobs.create" and "bigquery.jobs.listAll". Continuing the investigation with the BigQuery job metadata obtained from the API. - gcpdiag-bigquery1-aaaa:us.test_success [OK] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_success was successfully located. [GATEWAY]: Confirm the BigQuery job has finished execution - gcpdiag-bigquery1-aaaa:us.test_success [OK] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_success has finished execution. [GATEWAY]: Verify the BigQuery job failed - gcpdiag-bigquery1-aaaa:us.test_success [SKIP] [REASON] Job successfully finished execution without any errors. Only failed BigQuery jobs can be analyzed for failure reasons. Restart the investigation and provide a job that failed during execution. [END]: End step. [INFO]: No more checks to perform. bigquery_job_id=test_running,bigquery_job_region=us,bigquery_skip_permission_check=False,project_id= gcpdiag-bigquery1-aaaa bigquery/failed-query: Diagnoses issues with a failed BigQuery query job. This runbook investigates why a specific BigQuery job failed by verifying the job's status and analyzing the error message against a set of known issues to provide targeted remediation steps. [START]: Verifying input parameters and the BigQuery API status. [INFO]: Provided job input parameters have the correct format [INFO]: The BigQuery API is enabled. [GATEWAY]: Verifying permissions. - gcpdiag-cloudsql1-aaaa [FAIL] [REASON] Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use. [REMEDIATION] Grant the principal fake-user@google.com the missing permission(s) on the project to proceed. [INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll. To enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level - gcpdiag-cloudsql1-aaaa [OK] [REASON] All permission checks are complete. [GATEWAY]: Verify that the BigQuery Job exists [INFO]: WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions. Make sure to grant fake-user@google.com "bigquery.jobs.create" and "bigquery.jobs.listAll". Continuing the investigation with the BigQuery job metadata obtained from the API. - gcpdiag-bigquery1-aaaa:us.test_running [OK] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_running was successfully located. [GATEWAY]: Confirm the BigQuery job has finished execution - gcpdiag-bigquery1-aaaa:us.test_running [FAIL] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_running is currently in the RUNNING state and has not yet completed. [REMEDIATION] Wait for the job to finish execution and restart the investigation. [END]: End step. [INFO]: No more checks to perform. bigquery_job_id=test_notfound,bigquery_job_region=us,bigquery_skip_permission_check=False,project_id =gcpdiag-bigquery1-aaaa bigquery/failed-query: Diagnoses issues with a failed BigQuery query job. This runbook investigates why a specific BigQuery job failed by verifying the job's status and analyzing the error message against a set of known issues to provide targeted remediation steps. [START]: Verifying input parameters and the BigQuery API status. [INFO]: Provided job input parameters have the correct format [INFO]: The BigQuery API is enabled. [GATEWAY]: Verifying permissions. - gcpdiag-cloudsql1-aaaa [FAIL] [REASON] Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use. [REMEDIATION] Grant the principal fake-user@google.com the missing permission(s) on the project to proceed. [INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll. To enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level - gcpdiag-cloudsql1-aaaa [OK] [REASON] All permission checks are complete. [GATEWAY]: Verify that the BigQuery Job exists - gcpdiag-cloudsql1-aaaa [FAIL] [REASON] Job gcpdiag-bigquery1-aaaa:us.test_notfound does not exist. [REMEDIATION] Please check the corresponding job Region and make sure to provide the correct Job and Project identifiers. [END]: End step. [INFO]: No more checks to perform. bigquery_job_id=any_id,bigquery_job_region=invalid- region,bigquery_skip_permission_check=False,project_id=gcpdiag-bigquery1-aaaa bigquery/failed-query: Diagnoses issues with a failed BigQuery query job. This runbook investigates why a specific BigQuery job failed by verifying the job's status and analyzing the error message against a set of known issues to provide targeted remediation steps. [START]: Verifying input parameters and the BigQuery API status. - gcpdiag-bigquery1-aaaa [SKIP] [REASON] Invalid job region provided. Please provide a valid BigQuery region. ================================================ FILE: gcpdiag/runbook/bigquery/templates/generics.jinja ================================================ {% block job_exists_step_name %} Verify that the BigQuery Job exists {% endblock job_exists_step_name %} {% block job_exists_success_reason %} Job {job_id} was successfully located. {% endblock job_exists_success_reason %} {% block job_exists_failure_reason %} Job {job_id} does not exist. {% endblock job_exists_failure_reason %} {% block job_exists_failure_remediation %} Please check the corresponding job Region and make sure to provide the correct Job and Project identifiers. {% endblock job_exists_failure_remediation %} {% block job_is_done_step_name %} Confirm the BigQuery job has finished execution {% endblock job_is_done_step_name %} {% block job_is_done_success_reason %} Job {job_id} has finished execution. {% endblock job_is_done_success_reason %} {% block job_is_done_failure_reason %} Job {job_id} is currently in the {job_state} state and has not yet completed. {% endblock job_is_done_failure_reason %} {% block job_is_done_failure_remediation %} Wait for the job to finish execution and restart the investigation. {% endblock job_is_done_failure_remediation %} {% block job_has_failed_step_name %} Verify the BigQuery job failed {% endblock job_has_failed_step_name %} {% block job_has_failed_success_reason %} Job finished execution with an error. Continuing the investigation. {% endblock job_has_failed_success_reason %} {% block job_has_failed_failure_reason %} Job successfully finished execution without any errors. {% endblock job_has_failed_failure_reason %} {% block job_has_failed_failure_remediation %} Only failed BigQuery jobs can be analyzed for failure reasons. Restart the investigation and provide a job that failed during execution. {% endblock job_has_failed_failure_remediation %} {% block error_identification_step_name %} Analyze BigQuery job errors for known mitigations {% endblock error_identification_step_name %} {% block error_identification_failure_reason %} Job failed with error: {error_message} Job failure cause: {cause} {% endblock error_identification_failure_reason %} {% block error_identification_failure_remediation %} Suggested mitigation: {remediation} {% endblock error_identification_failure_remediation %} {% block error_identification_uncertain_reason %} Job {job_id} failed with an error that does not have a publicly documented mitigation and root cause. Full error message(s) reported: "{error_message}" {% endblock error_identification_uncertain_reason %} {% block error_identification_uncertain_remediation %} Please retry the job to confirm whether the error is transient and can be mitigated through a retry with exponential backoff. See . If the issue persists, contact Google Cloud Support at and provide this report with the full BigQuery Job Id. {% endblock error_identification_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/bigquery/templates/permissions.jinja ================================================ {% block mandatory_failure_reason %} Execution halted. The principal {principal} is missing the following mandatory IAM permission(s) required to run this runbook: {permissions}. {% endblock mandatory_failure_reason %} {% block mandatory_failure_remediation %} Grant the principal {principal} the missing permission(s) on the project to proceed. {% endblock mandatory_failure_remediation %} ================================================ FILE: gcpdiag/runbook/cloudrun/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/cloudrun/constants.py ================================================ # Copyright 2024 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. """TODO: String doc""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.constants import * ================================================ FILE: gcpdiag/runbook/cloudrun/flags.py ================================================ # Copyright 2024 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. """Cloud Run runbook flags""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.flags import * SERVICE_NAME = 'service_name' CLOUDRUN_SERVICE_NAME = 'cloudrun_service_name' ================================================ FILE: gcpdiag/runbook/cloudrun/generalized_steps.py ================================================ # Copyright 2024 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. """Contains Reusable Steps for Cloud Run related Diagnostic Trees""" ================================================ FILE: gcpdiag/runbook/cloudrun/generalized_steps_test.py ================================================ # Copyright 2024 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. ================================================ FILE: gcpdiag/runbook/cloudrun/service_deployment.py ================================================ # Copyright 2024 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. """Contains diagnostic tree for Cloud Run failing to deploy.""" import re from datetime import datetime import googleapiclient.errors from gcpdiag import runbook from gcpdiag.queries import cloudrun, crm from gcpdiag.runbook import op from gcpdiag.runbook.cloudrun import flags class ServiceDeployment(runbook.DiagnosticTree): """Investigates the necessary GCP components searching for reasons for deployment errors. This runbook will examine the following key areas: 1. Container and code Checks. - Ensures the Container is in correct state to run in Cloud Run Scope of Investigation: - Note that this runbook does not provide troubleshooting steps for errors caused by the code running in the container. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.REGION: { 'type': str, 'help': 'Region of the service.', 'required': True }, flags.SERVICE_NAME: { 'type': str, 'help': 'Name of the Cloud Run service', 'deprecated': True, 'new_parameter': 'cloudrun_service_name' }, flags.CLOUDRUN_SERVICE_NAME: { 'type': str, 'help': 'Name of the Cloud Run service', 'required': True }, flags.START_TIME: { 'type': datetime, 'help': 'Start time of the issue', }, flags.END_TIME: { 'type': datetime, 'help': 'End time of the issue', }, } def legacy_parameter_handler(self, parameters): """Handle legacy parameters for cloudrun/service-deployment runbook.""" if flags.SERVICE_NAME in parameters: parameters[flags.CLOUDRUN_SERVICE_NAME] = parameters[flags.SERVICE_NAME] def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = ServiceDeploymentStart() self.add_start(start) self.add_step(start, ServiceDeploymentCodeStep()) class ServiceDeploymentStart(runbook.StartStep): """Prepare the parameters for cloudrun/service-deployment runbook. Looks up the cloud run service making sure it exists. """ def execute(self): """Verify context and parameters required for deployment runbook checks.""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: cloudrun.get_service(op.get(flags.PROJECT_ID), op.get(flags.REGION), op.get(flags.CLOUDRUN_SERVICE_NAME)) except googleapiclient.errors.HttpError: op.add_skipped( project, reason= f'Service {op.get(flags.CLOUDRUN_SERVICE_NAME)} does not exist in region ' f'{op.get(flags.REGION)} or project {op.get(flags.PROJECT_ID)}') class ServiceDeploymentCodeStep(runbook.CompositeStep): """Checks for container and code issues.""" def execute(self): """Checking for common container and code issues.""" self.add_child(ContainerFailedToStartStep()) self.add_child(ImageWasNotFoundStep()) self.add_child(NoPermissionForImageStep()) class ContainerFailedToStartStep(runbook.Step): """Checks if the deployment error was caused by container failed to start error. This step will check if the error is present and link to additional troubleshooting steps. """ template = 'service_deployment::starts_correctly' message_re = re.compile( r"Revision '[\w-]+' is not ready and cannot serve traffic. The user-provided container " r'failed to start and listen on the port defined provided by the PORT=(\d+) environment ' r'variable.') def execute(self): """Verify if there is an error that container failed to start.""" service = cloudrun.get_service(op.get(flags.PROJECT_ID), op.get(flags.REGION), op.get(flags.CLOUDRUN_SERVICE_NAME)) match = self.message_re.match(service.conditions['RoutesReady'].message) if match: op.add_failed(service, reason=op.prep_msg(op.FAILURE_REASON, name=service.name), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class ImageWasNotFoundStep(runbook.Step): """Checks if if specified image exists. This step will check if the error is present and link to additional troubleshooting steps. """ template = 'service_deployment::image_exists' message_re = re.compile( r"Revision '[\w-]+' is not ready and cannot serve traffic. Image '([^']+)' not found." ) def execute(self): """Verify if specified image exists.""" service = cloudrun.get_service(op.get(flags.PROJECT_ID), op.get(flags.REGION), op.get(flags.CLOUDRUN_SERVICE_NAME)) match = self.message_re.match(service.conditions['RoutesReady'].message) if match: op.add_failed(service, reason=op.prep_msg(op.FAILURE_REASON, name=service.name, image=match.group(1)), remediation=op.prep_msg(op.FAILURE_REMEDIATION, image=match.group(1))) class NoPermissionForImageStep(runbook.Step): """Checks if Cloud Run service agent can fetch the image. This step will check if the error is present and link to additional troubleshooting steps. """ template = 'service_deployment::has_permission_for_image' message_re = re.compile( r"Revision '[\w-]+' is not ready and cannot serve traffic. Google Cloud " r'Run Service Agent ([^ ]+) must have permission to read the image, ' r'([^ ]+).') def execute(self): """Verify if Cloud Run service agent can fetch the image.""" service = cloudrun.get_service(op.get(flags.PROJECT_ID), op.get(flags.REGION), op.get(flags.CLOUDRUN_SERVICE_NAME)) match = self.message_re.match(service.conditions['RoutesReady'].message) if match: op.add_failed(service, reason=op.prep_msg(op.FAILURE_REASON, name=service.name, sa=match.group(1), image=match.group(2)), remediation=op.prep_msg(op.FAILURE_REMEDIATION, sa=match.group(1), image=match.group(2))) ================================================ FILE: gcpdiag/runbook/cloudrun/service_deployment_test.py ================================================ # Copyright 2024 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. """Test class for cloudrun/Service_deployment""" import datetime import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import cloudrun as cloudrun_rb from gcpdiag.runbook import op, snapshot_test_base from gcpdiag.runbook.cloudrun import flags, service_deployment class TestInvalidContainer(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = cloudrun_rb runbook_name = 'cloudrun/service-deployment' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [ { 'project_id': 'gcpdiag-cloudrun2-aaaa', 'cloudrun_service_name': 'invalid-container', 'region': 'us-central1', }, { 'project_id': 'gcpdiag-cloudrun2-aaaa', 'cloudrun_service_name': 'image-does-not-exist', 'region': 'us-central1', }, { 'project_id': 'gcpdiag-cloudrun2-aaaa', 'cloudrun_service_name': 'no-image-permission', 'region': 'us-central1', }, ] class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class ServiceDeploymentTest(unittest.TestCase): def test_legacy_parameter_handler(self): params = {flags.SERVICE_NAME: 'test-service'} sd = service_deployment.ServiceDeployment() sd.legacy_parameter_handler(params) self.assertEqual(params[flags.CLOUDRUN_SERVICE_NAME], 'test-service') def test_build_tree(self): sd = service_deployment.ServiceDeployment() sd.build_tree() self.assertIsInstance(sd.start, service_deployment.ServiceDeploymentStart) self.assertEqual(len(sd.start.steps), 1) self.assertIsInstance(sd.start.steps[0], service_deployment.ServiceDeploymentCodeStep) class StepTestBase(unittest.TestCase): """Base class for step tests.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.params = { flags.PROJECT_ID: 'gcpdiag-cloudrun2-aaaa', flags.REGION: 'us-central1', flags.CLOUDRUN_SERVICE_NAME: 'invalid-container', 'start_time': datetime.datetime.now(), 'end_time': datetime.datetime.now(), } self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.parameters = self.params self.operator.messages = MockMessage() class ServiceDeploymentStartTest(StepTestBase): def test_execute_success(self): self.params[flags.CLOUDRUN_SERVICE_NAME] = 'invalid-container' step = service_deployment.ServiceDeploymentStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_not_called() def test_execute_service_not_found(self): self.params[flags.CLOUDRUN_SERVICE_NAME] = 'service-does-not-exist' step = service_deployment.ServiceDeploymentStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() class ServiceDeploymentCodeStepTest(StepTestBase): def test_execute(self): step = service_deployment.ServiceDeploymentCodeStep() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(len(step.steps), 3) self.assertIsInstance(step.steps[0], service_deployment.ContainerFailedToStartStep) self.assertIsInstance(step.steps[1], service_deployment.ImageWasNotFoundStep) self.assertIsInstance(step.steps[2], service_deployment.NoPermissionForImageStep) class ContainerFailedToStartStepTest(StepTestBase): def test_container_failed_to_start(self): self.params[flags.CLOUDRUN_SERVICE_NAME] = 'invalid-container' step = service_deployment.ContainerFailedToStartStep() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_container_started(self): self.params[flags.CLOUDRUN_SERVICE_NAME] = 'image-does-not-exist' step = service_deployment.ContainerFailedToStartStep() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() class ImageWasNotFoundStepTest(StepTestBase): def test_image_not_found(self): self.params[flags.CLOUDRUN_SERVICE_NAME] = 'image-does-not-exist' step = service_deployment.ImageWasNotFoundStep() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_image_found(self): self.params[flags.CLOUDRUN_SERVICE_NAME] = 'invalid-container' step = service_deployment.ImageWasNotFoundStep() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() class NoPermissionForImageStepTest(StepTestBase): def test_no_permission(self): self.params[flags.CLOUDRUN_SERVICE_NAME] = 'no-image-permission' step = service_deployment.NoPermissionForImageStep() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_has_permission(self): self.params[flags.CLOUDRUN_SERVICE_NAME] = 'invalid-container' step = service_deployment.NoPermissionForImageStep() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() ================================================ FILE: gcpdiag/runbook/cloudrun/snapshots/service_deployment.txt ================================================ cloudrun_service_name=invalid-container,project_id=gcpdiag-cloudrun2-aaaa,region=us-central1 cloudrun/service-deployment: Investigates the necessary GCP components searching for reasons for deployment errors. This runbook will examine the following key areas: 1. Container and code Checks. - Ensures the Container is in correct state to run in Cloud Run Scope of Investigation: - Note that this runbook does not provide troubleshooting steps for errors caused by the code running in the container. [START]: Verify context and parameters required for deployment runbook checks. [COMPOSITE STEP]: Checking for common container and code issues. [AUTOMATED STEP]: Verify if there is an error that container failed to start. - gcpdiag-cloudrun2-aaaa/4ca2c930-7962-4fce-9470-987642372120 [FAIL] [REASON] Container failed to start in service invalid-container. [REMEDIATION] The container failed to start. Refer to for guidance. [AUTOMATED STEP]: Verify if specified image exists. [AUTOMATED STEP]: Verify if Cloud Run service agent can fetch the image. [END]: Finalize runbook investigations. cloudrun_service_name=image-does-not-exist,project_id=gcpdiag-cloudrun2-aaaa,region=us-central1 cloudrun/service-deployment: Investigates the necessary GCP components searching for reasons for deployment errors. This runbook will examine the following key areas: 1. Container and code Checks. - Ensures the Container is in correct state to run in Cloud Run Scope of Investigation: - Note that this runbook does not provide troubleshooting steps for errors caused by the code running in the container. [START]: Verify context and parameters required for deployment runbook checks. [COMPOSITE STEP]: Checking for common container and code issues. [AUTOMATED STEP]: Verify if there is an error that container failed to start. [AUTOMATED STEP]: Verify if specified image exists. - gcpdiag-cloudrun2-aaaa/37324495-a964-42ce-a080-2995f68c8f35 [FAIL] [REASON] Provided image us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/missing-image does not exist. [REMEDIATION] The provided image does not exist. Verify that the image name is correct. Refer to for guidance on specifying image names. [AUTOMATED STEP]: Verify if Cloud Run service agent can fetch the image. [END]: Finalize runbook investigations. cloudrun_service_name=no-image-permission,project_id=gcpdiag-cloudrun2-aaaa,region=us-central1 cloudrun/service-deployment: Investigates the necessary GCP components searching for reasons for deployment errors. This runbook will examine the following key areas: 1. Container and code Checks. - Ensures the Container is in correct state to run in Cloud Run Scope of Investigation: - Note that this runbook does not provide troubleshooting steps for errors caused by the code running in the container. [START]: Verify context and parameters required for deployment runbook checks. [COMPOSITE STEP]: Checking for common container and code issues. [AUTOMATED STEP]: Verify if there is an error that container failed to start. [AUTOMATED STEP]: Verify if specified image exists. [AUTOMATED STEP]: Verify if Cloud Run service agent can fetch the image. - gcpdiag-cloudrun2-aaaa/7af8a1c8-8758-48d4-9476-024c0f62c4d7 [FAIL] [REASON] Cloud Run Service agent service-123400010@serverless-robot-prod.iam.gserviceaccount.com does not have permissions to read image gcr.io/private-project/image.. [REMEDIATION] Grant service-123400010@serverless-robot-prod.iam.gserviceaccount.com the roles/storage.objectViewer role if the image is stored in Container Registry or the roles/artifactregistry.reader role if in Artifact Registry. Note that the role must be granted in the project where the image is stored. [END]: Finalize runbook investigations. ================================================ FILE: gcpdiag/runbook/cloudrun/templates/service_deployment.jinja ================================================ {% block starts_correctly_failure_remediation %} The container failed to start. Refer to for guidance. {% endblock %} {% block starts_correctly_failure_reason %} Container failed to start in service {name}. {% endblock %} {% block image_exists_failure_remediation %} The provided image does not exist. Verify that the image name is correct. Refer to for guidance on specifying image names. {% endblock %} {% block image_exists_failure_reason %} Provided image {image} does not exist. {% endblock %} {% block has_permission_for_image_failure_remediation %} Grant {sa} the roles/storage.objectViewer role if the image is stored in Container Registry or the roles/artifactregistry.reader role if in Artifact Registry. Note that the role must be granted in the project where the image is stored. {% endblock %} {% block has_permission_for_image_failure_reason %} Cloud Run Service agent {sa} does not have permissions to read image {image}. {% endblock %} ================================================ FILE: gcpdiag/runbook/command.py ================================================ # Copyright 2023 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. """gcpdiag runbook command.""" import argparse import importlib import logging import os import pkgutil import re import sys import traceback from typing import List import yaml from gcpdiag import config, hooks, models, runbook from gcpdiag.queries import apis, kubectl from gcpdiag.runbook.exceptions import DiagnosticTreeNotFound from gcpdiag.runbook.output import api_output, base_output, terminal_output class ParseMappingArg(argparse.Action): """Takes a string argument and parse argument""" def __call__(self, parser, namespace, values, option_string): if values: if values[0] == '{' and values[-1] == '}': values = values[1:-1] if not isinstance(values, list): values = re.split('[ ,]', values) parsed_dict = getattr(namespace, self.dest, models.Parameter()) for value in values: if value: try: k, v = re.split('[=]', value) parsed_dict[k] = v except ValueError: parser.error( f'argument {option_string} expected key:value, received {value}' ) setattr(namespace, self.dest, parsed_dict) class ParseBundleSpec(argparse.Action): """Takes a string argument and parse argument""" def __call__(self, parser, namespace, values, option_string): if values: bundle_list = getattr(namespace, self.dest, List) for file_path in values: try: bundle_list += _load_bundles_spec(file_path.name) except ValueError: parser.error( f'argument {option_string} expected key:value, received {file_path}' ) setattr(namespace, self.dest, bundle_list) def expand_and_validate_path(arg) -> str: # Expand the path and check if it exists expanded_path = os.path.abspath(os.path.expanduser(arg)) home_path = os.path.expanduser('~') # Cloud Shell only allows report downloads from paths in user's home # Check if the home directory is already present in the path if not if bool(os.getenv('CLOUD_SHELL')): # If default path append $HOME if arg == config.get('report_dir'): return os.path.join(home_path, expanded_path) # User supplied path elif home_path not in expanded_path: raise argparse.ArgumentTypeError( f'The {arg} folder must be located in your home directory') if not expanded_path or not os.path.exists(expanded_path): raise argparse.ArgumentTypeError( f"Directory '{arg}' does not exist. Create one mkdir -p {arg} and try again" ) return expanded_path def validate_args(args): if args.runbook is None and not args.bundle_spec: print( 'Error: Provide a runbook id or "--bundle-spec=YAML_FILE_PATH" must be provided.' ) def _init_runbook_args_parser(): parser = argparse.ArgumentParser( description='Run diagnostics in GCP projects.', prog='gcpdiag runbook') parser.add_argument( '--auth-adc', help='Authenticate using Application Default Credentials (default)', action='store_true') parser.add_argument( '--auth-key', help='Authenticate using a service account private key file', metavar='FILE') parser.add_argument( '--billing-project', metavar='P', help='Project used for billing/quota of API calls done by gcpdiag ' '(default is the inspected project, requires ' '\'serviceusage.services.use\' permission)') parser.add_argument('-v', '--verbose', action='count', default=config.get('verbose'), help='Increase log verbosity') parser.add_argument('--logging-ratelimit-requests', metavar='R', type=int, help=('Configure rate limit for logging queries (default:' f" {config.get('logging_ratelimit_requests')})")) parser.add_argument( '--logging-ratelimit-period-seconds', metavar='S', type=int, help=('Configure rate limit period for logging queries (default:' f" {config.get('logging_ratelimit_period_seconds')} seconds)")) parser.add_argument('--logging-page-size', metavar='P', type=int, help=('Configure page size for logging queries (default:' f" {config.get('logging_page_size')})")) parser.add_argument( '--logging-fetch-max-entries', metavar='E', type=int, help=('Configure max entries to fetch by logging queries (default:' f" {config.get('logging_fetch_max_entries')})")) parser.add_argument( '--logging-fetch-max-time-seconds', metavar='S', type=int, help=('Configure timeout for logging queries (default:' f" {config.get('logging_fetch_max_time_seconds')} seconds)")) parser.add_argument( 'runbook', help= 'Runbook to execute in the format product/runbook-name or product/name', nargs='?') parser.add_argument('--bundle-spec', nargs='*', default=[], action=ParseBundleSpec, type=argparse.FileType('r'), help='Path to YAML file containing bundle specifications') parser.add_argument( '-p', '--parameter', action=ParseMappingArg, nargs=1, default=models.Parameter(), dest='parameter', metavar='key:value', help= ('One or more resource parameters as key-value pair(s) to scope inspection ' '(e.g.: -p source_ip=xx:xx:xx:xx -p user:user@company.com)')) parser.add_argument( '-a', '--auto', help=('Execute runbook autonomously. Use this to skip human tasks. ' 'Incomplete tasks are added to the report.'), action='store_true') parser.add_argument( '--report-dir', metavar='FILE', default=config.get('report_dir'), type=expand_and_validate_path, help= ('Specifies the full path to the directory where reports ' 'will be saved (default: /tmp/gcpdiag or in Cloud Shell $HOME/tmp/gcpdiag)' )) parser.add_argument('--interface', metavar='FORMATTER', default=config.get('interface'), type=str, help='What interface as one of [cli, api] (default: cli)') parser.add_argument('--universe-domain', type=str, default=config.get('universe_domain'), help='Domain name of APIs') parser.add_argument('--reason', type=str, default=config.get('reason'), help='The reason for running gcpdiag') return parser def _load_runbook_rules(package: str): """Recursively import all submodules under a package, including subpackages.""" pkg = importlib.import_module(package) for _, name, is_pkg in pkgutil.walk_packages( pkg.__path__, # type: ignore pkg.__name__ + '.'): try: if name.endswith(('_test', 'output')): continue importlib.import_module(name) except ImportError as err: print(f"ERROR: can't import module: {err}", file=sys.stderr) continue if is_pkg: _load_runbook_rules(name) def _load_bundles_spec(file_path): """Load step config from file Example: - bundle: parameter: project_id: "project_detail" zone: "location" ... steps: - gcpdiag.runbook.gce.generalized_steps.VmLifecycleState - gcpdiag.runbook.gce.ops_agent.VmHasAServiceAccount - gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck - bundle: ... """ if not file_path: print('ERROR: no bundle spec file path provided', file=sys.stderr) sys.exit(1) # Read the file contents if os.path.exists(file_path): with open(file_path, encoding='utf-8') as f: content = f.read() else: print(f'ERROR: Bundle Specification file: {file_path} does not exist!', file=sys.stderr) sys.exit(1) # Parse the content of the file as YAML if content: try: parsed_content = yaml.safe_load(content) return parsed_content except yaml.YAMLError as err: print(f"ERROR: can't parse content of the file as YAML: {err}", file=sys.stderr) sys.exit(1) def _initialize_output(interface): if interface == runbook.constants.CLI: kwargs = { 'log_info_for_progress_only': (config.get('verbose') == 0), } return terminal_output.TerminalOutput(**kwargs) elif interface == runbook.constants.API: return api_output.ApiOutput() else: return base_output.BaseOutput() def _init_config(args): if args.interface == runbook.constants.CLI: config.init(vars(args), terminal_output.is_cloud_shell()) elif args.interface == runbook.constants.API: config.init(vars(args)) def setup_logging(logging_handler): logger = logging.getLogger() # Make sure we are only using our own handler logger.handlers = [] logger.addHandler(logging_handler) if config.get('verbose') >= 2: logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) # Disable logging from python-api-client, unless verbose is turned on if config.get('verbose') == 0: gac_http_logger = logging.getLogger('googleapiclient.http') gac_http_logger.setLevel(logging.ERROR) def run_and_get_report(argv=None, credentials: str = None) -> dict: # Initialize argument parser parser = _init_runbook_args_parser() args = parser.parse_args(argv[1:]) if credentials: apis.set_credentials(credentials) # Allow to change defaults using a hook function. hooks.set_runbook_args_hook(args) # Initialize configuration _init_config(args) # Initialize Repository, and Tests. dt_engine = runbook.DiagnosticEngine() _load_runbook_rules(runbook.__name__) # ^^^ If you add gcpdiag/runbook/[NEW-PRODUCT] directory, update also # pyinstaller/hook-gcpdiag.runbook.py and bin/precommit-required-files # Initialize proper output formatter output_ = _initialize_output(args.interface) dt_engine.interface.output = output_ # Logging setup. logging_handler = output_.get_logging_handler() setup_logging(logging_handler) # Run the runbook or step connections. if args.runbook: runbook_name = args.runbook.lower() if args.interface == runbook.constants.CLI: output_.display_header() output_.display_banner() tree = dt_engine.load_tree(runbook_name) if callable(tree): dt_engine.add_task((tree(), args.parameter)) elif args.bundle_spec: for bundle in args.bundle_spec: bundle = dt_engine.load_steps(parameter=bundle['parameter'], steps_to_run=bundle['steps']) dt_engine.add_task((bundle, bundle.parameter)) dt_engine.run() # Only collected for internal googler users report = {} report['version'] = config.VERSION report['reports'] = dt_engine.interface.rm.generate_reports() for r in dt_engine.interface.rm.reports.values(): metrics = dt_engine.interface.rm.generate_report_metrics(report=r) hooks.post_runbook_hook(metrics) if args.interface == runbook.constants.CLI: output_.display_footer(dt_engine.interface.rm) # Clean up the kubeconfig file generated for gcpdiag kubectl.clean_up() # return success if we get to this point and the report.. return report def run(argv) -> None: # Enable Caching try: report = run_and_get_report(argv) except (DiagnosticTreeNotFound, AttributeError, ValueError, KeyError) as e: logging.error(e) logging.debug('%s', ''.join(traceback.format_tb(e.__traceback__))) else: if report: sys.exit(0) ================================================ FILE: gcpdiag/runbook/command_test.py ================================================ # Copyright 2023 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. """Test code in command.py.""" import argparse import os import sys import unittest from unittest import mock from gcpdiag import config, models, runbook from gcpdiag.queries import apis_stub from gcpdiag.runbook import command from gcpdiag.runbook.exceptions import DiagnosticTreeNotFound from gcpdiag.runbook.output import api_output, base_output MUST_HAVE_MODULES = {'gce'} sample_bundle = """ - bundle: parameter: project_id: "test-project" zone: "us-central1-a" name: "test-vm" steps: - gcpdiag.runbook.gce.generalized_steps.VmLifecycleState - gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck - bundle: parameter: project_id: "test-project" zone: "us-central1-a" name: "test-vm" steps: - gcpdiag.runbook.gce.ops_agent.VmHasAServiceAccount """ class Test(unittest.TestCase): """Unit tests for command.""" # pylint: disable=protected-access def test_init_args_parser(self): with mock.patch('os.path.exists', return_value=True): parser = command._init_runbook_args_parser() args = parser.parse_args(['product/runbook']) assert args.runbook == 'product/runbook' assert args.billing_project is None assert args.auth_adc is False assert args.auth_key is None assert args.verbose == 0 assert args.logging_ratelimit_requests is None assert args.logging_ratelimit_period_seconds is None assert args.logging_page_size is None assert args.logging_fetch_max_entries is None assert args.logging_fetch_max_time_seconds is None assert args.auto is False assert args.report_dir == '/tmp' assert args.interface == runbook.constants.CLI # pylint: disable=protected-access def test_provided_init_args_parser(self): with mock.patch('os.path.exists', return_value=True): parser = command._init_runbook_args_parser() args = parser.parse_args(['product/runbook', '--auto']) assert args.auto is True args = parser.parse_args(['product/runbook', '--parameter', 'test=test']) assert args.parameter == {'test': 'test'} args = parser.parse_args(['product/runbook', '--report-dir', '~']) assert args.report_dir == os.path.expanduser('~') # Test user provided path in cloud shell in present in home. with mock.patch('os.getenv', return_value='true'): args = parser.parse_args(['product/runbook', '--report-dir', '/tmp']) assert args.report_dir == os.path.join(os.path.expanduser('~'), config.get('report_dir')) with mock.patch('os.getenv', return_value='false'): args = parser.parse_args(['product/runbook']) assert args.report_dir == os.path.join(os.path.expanduser('~'), config.get('report_dir')) args = parser.parse_args(['product/runbook', '--report-dir', '/tmp']) assert args.report_dir == '/tmp' args = parser.parse_args(['product/runbook', '--report-dir', '~']) assert args.report_dir == os.path.expanduser('~') args = parser.parse_args(['product/runbook', '--report-dir', '/tmp']) assert args.report_dir == '/tmp' args = parser.parse_args(['product/runbook', '--report-dir', '.']) assert args.report_dir == os.getcwd() # pylint: disable=protected-access def test_load_repository_rules(self): repo = runbook.DiagnosticEngine() command._load_runbook_rules(repo.__module__) assert len(runbook.RunbookRegistry) > 0 modules = {r(None).product for r in runbook.RunbookRegistry.values()} assert MUST_HAVE_MODULES.issubset(modules) @mock.patch('builtins.print') def test_no_file_path_provided(self, mock_print): with self.assertRaises(SystemExit) as e: command._load_bundles_spec('') self.assertEqual(1, e.exception.code) # sys.exit(1) mock_print.assert_called_once_with( 'ERROR: no bundle spec file path provided', file=sys.stderr) @mock.patch('os.path.exists', return_value=False) @mock.patch('builtins.print') def test_file_does_not_exist(self, mock_print, mock_exists): with self.assertRaises(SystemExit): command._load_bundles_spec('non_existent_file.yaml') mock_print.assert_called_once_with( 'ERROR: Bundle Specification file: non_existent_file.yaml does not' ' exist!', file=sys.stderr, ) assert mock_exists.called @mock.patch('os.path.exists', return_value=True) @mock.patch('builtins.open', new_callable=mock.mock_open, read_data=sample_bundle) def test_valid_yaml_parsing(self, mock_file, mock_exists): result = command._load_bundles_spec('valid_file.yaml') self.assertIsNotNone(result) self.assertEqual(result[0]['parameter']['project_id'], 'test-project') mock_exists.assert_called_with('valid_file.yaml') assert mock_file.called @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.queries.apis.get_user_email', return_value='test@example.com') def test_run_and_get_report(self, mock_get_user_email): del mock_get_user_email argv = [ 'gcpdiag runbook', 'gce/ssh', '-p', 'project_id=gcpdiag-gce-faultyssh-runbook', '-p', 'zone=europe-west2-a', '-p', 'name=faulty-linux-ssh', '--interface', 'api', '--auto' ] command.run_and_get_report(argv) def test_run_and_get_report_invalid_runbook(self): argv = [ 'gcpdiag runbook', 'gce/unheaklhy', '-p', 'project_id=gcpdiag-gce1-aaaa', ] with self.assertRaises(DiagnosticTreeNotFound): command.run_and_get_report(argv) def test_parse_mapping_arg_with_braces(self): parser = mock.Mock() namespace = argparse.Namespace() namespace.parameter = models.Parameter() action = command.ParseMappingArg(option_strings=['-p'], dest='parameter') values = '{key=value,key2=value2}' action(parser, namespace, values, '-p') self.assertEqual(namespace.parameter['key'], 'value') self.assertEqual(namespace.parameter['key2'], 'value2') def test_parse_mapping_arg_value_error(self): """Ensures ParseMappingArg calls parser.error on invalid key=value format.""" parser = mock.Mock() namespace = mock.Mock() action = command.ParseMappingArg(option_strings=['-p'], dest='parameter') invalid_value = ['invalid_format'] # Missing '=' action(parser, namespace, invalid_value, '-p') parser.error.assert_called_once() self.assertIn('expected key:value', parser.error.call_args[0][0]) @mock.patch('os.path.exists', return_value=True) @mock.patch('os.path.abspath', side_effect=lambda x: x) @mock.patch('os.getenv') def test_expand_path_cloud_shell_outside_home(self, mock_getenv, unused_mock_abspath, unused_mock_exists): """Ensures an error is raised in Cloud Shell if the path is not in HOME.""" mock_getenv.side_effect = lambda k: 'true' if k == 'CLOUD_SHELL' else None user_supplied_path = '/etc/invalid' with self.assertRaises(argparse.ArgumentTypeError) as cm: command.expand_and_validate_path(user_supplied_path) self.assertIn('must be located in your home directory', str(cm.exception)) @mock.patch('builtins.print') def test_validate_args_missing_inputs(self, mock_print): """Ensures validate_args prints an error when no runbook or bundle is provided.""" args = mock.Mock() args.runbook = None args.bundle_spec = [] command.validate_args(args) mock_print.assert_called_once_with( 'Error: Provide a runbook id or "--bundle-spec=YAML_FILE_PATH" must be' ' provided.') @mock.patch('importlib.import_module') @mock.patch('pkgutil.walk_packages') def test_load_runbook_rules_import_error(self, mock_walk, mock_import): """Ensures _load_runbook_rules continues execution on ImportError.""" mock_pkg = mock.Mock() mock_pkg.__path__ = ['/path'] mock_pkg.__name__ = 'pkg' mock_import.side_effect = [mock_pkg, ImportError('Mock error')] mock_walk.return_value = [(None, 'pkg.bad_module', False)] command._load_runbook_rules('pkg') self.assertTrue(mock_import.called) @mock.patch('os.path.exists', return_value=True) @mock.patch('builtins.open', new_callable=mock.mock_open, read_data='!!invalid_yaml') def test_load_bundles_spec_yaml_error(self, unused_mock_file, unused_mock_exists): """Ensures _load_bundles_spec exits on invalid YAML content.""" with self.assertRaises(SystemExit): command._load_bundles_spec('invalid.yaml') @mock.patch('os.path.exists', return_value=True) @mock.patch('os.path.abspath', side_effect=lambda x: x) @mock.patch('os.getenv', return_value='true') # Simulates CLOUD_SHELL=true def test_expand_path_cloud_shell_valid(self, unused_mock_getenv, unused_mock_abspath, unused_mock_exists): """Ensures paths are correctly joined with HOME in Cloud Shell.""" home = os.path.expanduser('~') report_dir = config.get('report_dir') result = command.expand_and_validate_path(report_dir) self.assertEqual(result, os.path.join(home, report_dir)) def test_initialize_output_api(self): """Ensures ApiOutput is initialized when interface is 'api'.""" output = command._initialize_output(runbook.constants.API) self.assertIsInstance(output, api_output.ApiOutput) def test_initialize_output_base(self): """Ensures BaseOutput is used for unknown interfaces.""" output = command._initialize_output('unknown') self.assertIsInstance(output, base_output.BaseOutput) @mock.patch('gcpdiag.runbook.DiagnosticEngine') @mock.patch('gcpdiag.runbook.command._initialize_output') def test_run_and_get_report_bundle_spec(self, mock_init_output, mock_engine_cls): """Exercises the bundle_spec logic path in run_and_get_report.""" mock_init_output.return_value = mock.Mock() mock_engine = mock_engine_cls.return_value mock_engine.interface.rm.generate_reports.return_value = {} mock_run = mock_engine.run mock_load_steps = mock_engine.load_steps mock_bundle = mock.Mock() mock_bundle.parameter = {'p': 'v'} mock_load_steps.return_value = mock_bundle with mock.patch('builtins.open', mock.mock_open(read_data='')): with mock.patch('gcpdiag.runbook.command._load_bundles_spec', return_value=[{ 'parameter': { 'p': 'v' }, 'steps': ['s'] }]): argv = ['gcpdiag runbook', '--bundle-spec', 'test.yaml'] command.run_and_get_report(argv) self.assertTrue(mock_run.called) self.assertTrue(mock_load_steps.called) @mock.patch('gcpdiag.runbook.command.run_and_get_report') @mock.patch('logging.error') def test_run_logs_exceptions(self, mock_log, mock_run_report): """Ensures exceptions in run_and_get_report are logged.""" mock_run_report.side_effect = DiagnosticTreeNotFound('Test Error') command.run(['gcpdiag runbook']) mock_log.assert_called_once() @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.queries.apis.get_user_email', return_value='test@example.com') @mock.patch('gcpdiag.runbook.command._initialize_output') @mock.patch('gcpdiag.queries.apis.set_credentials') @mock.patch('gcpdiag.hooks.post_runbook_hook') @mock.patch('gcpdiag.queries.kubectl.clean_up') def test_run_and_get_report_full_flow(self, mock_kube, mock_hook, mock_creds, mock_out, mock_get_user_email): """ Tests the full flow of run_and_get_report with API stubs. Args: mock_kube: Mock of gcpdiag.queries.kubectl.clean_up. mock_hook: Mock of gcpdiag.hooks.post_runbook_hook. mock_creds: Mock of gcpdiag.queries.apis.set_credentials. mock_out: Mock of gcpdiag.runbook.command._initialize_output. mock_get_user_email: Mock of gcpdiag.queries.apis.get_user_email. """ del mock_get_user_email mock_output_obj = mock.Mock() mock_out.return_value = mock_output_obj mock_handler = mock.Mock() mock_handler.level = 0 mock_output_obj.get_logging_handler.return_value = mock_handler argv = [ 'gcpdiag runbook', 'gce/ssh', '-p', 'project_id=gcpdiag-gce-faultyssh-runbook', '-p', 'zone=europe-west2-a', '-p', 'name=faulty-linux-ssh', '--interface', 'cli', '--auto' ] report = command.run_and_get_report(argv, credentials='creds') mock_creds.assert_called_once_with('creds') mock_output_obj.display_header.assert_called_once() self.assertIn('version', report) self.assertTrue(mock_hook.called) mock_output_obj.display_footer.assert_called_once() mock_kube.assert_called_once() ================================================ FILE: gcpdiag/runbook/constants.py ================================================ # Copyright 2021 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. """Common constants used within runbook""" from enum import Enum # Messaging Scenarios FAILURE_REASON = 'failure_reason' FAILURE_REMEDIATION = 'failure_remediation' SUCCESS_REASON = 'success_reason' UNCERTAIN_REASON = 'uncertain_reason' UNCERTAIN_REMEDIATION = 'uncertain_remediation' SKIPPED_REASON = 'skipped_reason' STEP_NAME = 'step_name' FAILURE_REASON_ALT1 = f'{FAILURE_REASON}_a1' FAILURE_REMEDIATION_ALT1 = f'{FAILURE_REMEDIATION}_a1' SUCCESS_REASON_ALT1 = f'{SUCCESS_REASON}_a1' UNCERTAIN_REASON_ALT1 = f'{UNCERTAIN_REASON}_a1' UNCERTAIN_REMEDIATION_ALT1 = f'{UNCERTAIN_REMEDIATION}_a1' SKIPPED_REASON_ALT1 = f'{SKIPPED_REASON}_a1' STEP_NAME_ALT1 = f'{STEP_NAME}_a1' FAILURE_REASON_ALT2 = f'{FAILURE_REASON}_a2' FAILURE_REMEDIATION_ALT2 = f'{FAILURE_REMEDIATION}_a2' SUCCESS_REASON_ALT2 = f'{SUCCESS_REASON}_a2' UNCERTAIN_REASON_ALT2 = f'{UNCERTAIN_REASON}_a2' UNCERTAIN_REMEDIATION_ALT2 = f'{UNCERTAIN_REMEDIATION}_a2' SKIPPED_REASON_ALT2 = f'{SKIPPED_REASON}_a2' STEP_NAME_ALT2 = f'{STEP_NAME}_a2' FAILURE_REASON_ALT3 = f'{FAILURE_REASON}_a3' FAILURE_REMEDIATION_ALT3 = f'{FAILURE_REMEDIATION}_a3' SUCCESS_REASON_ALT3 = f'{SUCCESS_REASON}_a3' UNCERTAIN_REASON_ALT3 = f'{UNCERTAIN_REASON}_a3' UNCERTAIN_REMEDIATION_ALT3 = f'{UNCERTAIN_REMEDIATION}_a3' SKIPPED_REASON_ALT3 = f'{SKIPPED_REASON}_a3' STEP_NAME_ALT3 = f'{STEP_NAME}_a3' INSTRUCTIONS_MESSAGE = 'instructions_message' STEP_LABEL = 'label' INSTRUCTIONS_CHOICE_OPTIONS = 'instructions_choice_options' DEFAULT_INSTRUCTIONS_OPTIONS = { 'y': 'Yes, Issue is not happening', 'n': 'No, Issue is occuring', 'u': 'Unsure' } RCA = 'rca' StepConstants = { STEP_LABEL: 'The Label used in DT images', STEP_NAME: 'The introduction message displayed to user describing what the step does.', FAILURE_REASON: 'The failure reason for this step.', FAILURE_REMEDIATION: 'How to solve the main failure scenario.', SUCCESS_REASON: 'The reason why this step is consider to be a success.', UNCERTAIN_REASON: 'The reason why this step is uncertain of the outcome.', UNCERTAIN_REMEDIATION: 'How to address uncertainty in the outcome.', SKIPPED_REASON: 'The reason why this step was skipped.', FAILURE_REASON_ALT1: 'The failure reason for Scenario 1 step.', FAILURE_REMEDIATION_ALT1: 'How to solve the main failure scenario in Scenario 1.', SUCCESS_REASON_ALT1: 'The reason why Scenario 1 is considered a success.', UNCERTAIN_REASON_ALT1: 'The reason for uncertainty in the Scenario 1 outcome.', UNCERTAIN_REMEDIATION_ALT1: 'How to address uncertainty in the Scenario 1 outcome.', SKIPPED_REASON_ALT1: 'The reason why Scenario 1 was skipped.', FAILURE_REASON_ALT2: 'The failure reason for Scenario 2 step.', FAILURE_REMEDIATION_ALT2: 'How to solve the main failure scenario in Scenario 2.', SUCCESS_REASON_ALT2: 'The reason why Scenario 2 is considered a success.', UNCERTAIN_REASON_ALT2: 'The reason for uncertainty in the Scenario 2 outcome.', UNCERTAIN_REMEDIATION_ALT2: 'How to address uncertainty in the Scenario 2 outcome.', SKIPPED_REASON_ALT2: 'The reason why Scenario 2 was skipped.', FAILURE_REASON_ALT3: 'The failure reason for Scenario 3 step.', FAILURE_REMEDIATION_ALT3: 'How to solve the main failure scenario in Scenario 3.', SUCCESS_REASON_ALT3: 'The reason why Scenario 3 is considered a success.', UNCERTAIN_REASON_ALT3: 'The reason for uncertainty in the Scenario 3 outcome.', UNCERTAIN_REMEDIATION_ALT3: 'How to address uncertainty in the Scenario 3 outcome.', SKIPPED_REASON_ALT3: 'The reason why Scenario 3 was skipped.', INSTRUCTIONS_MESSAGE: 'Instruction on a manual task.', INSTRUCTIONS_CHOICE_OPTIONS: 'Options available in this manual task.', RCA: 'Root cause analysis.' } class StepType(Enum): """Types of Diagnostic Tree Steps""" START = 'START' END = 'END' AUTOMATED = 'AUTOMATED STEP' COMPOSITE = 'COMPOSITE STEP' MANUAL = 'MANUAL STEP' PARAMETER = 'PARAMETER PREP' GATEWAY = 'GATEWAY' @classmethod def to_list(cls): return list(map(lambda c: c.value, cls)) END_MESSAGE = ( 'Before reaching out to Google Cloud Support: \n' '1. Thoroughly investigate ' 'the issue with the most appropriate team within your organization. Many issues can be ' 'resolved internally and fall within the scope of your operational responsibilities:' 'https://cloud.google.com/architecture/framework/security' '/shared-responsibility-shared-fate\n\n' '2. If your internal investigation suggests that the issue is related to the ' 'Google Cloud Platform and requires intervention by Google engineers, please ' 'contact Google Cloud Support for further assistance.\n\n' '3. View our Google Cloud Service Health Dashboard to know what issues are already know' 'and currently being resolved:\n' 'https://cloud.google.com/support/docs/customer-care-procedures#view_known_issues\n\n' '4. If you still need further assistance contact customer care:\n' 'https://cloud.google.com/support/docs/customer-care-procedures#contact_customer_care\n\n' 'Recommended Action: When submitting a support ticket, please include the generated ' 'report to facilitate a quicker resolution by the Google Cloud support team.' 'For more information on how to get the best out of our support services visit:\n' 'https://cloud.google.com/support/docs/customer-care-procedures\n\n') BOOL_VALUES = { 'y': True, 'yes': True, 'true': True, '1': True, 'n': False, 'no': False, 'false': False, '0': False, 'none': False } RETEST = 'RETEST' YES = 'YES' NO = 'NO' UNCERTAIN = 'UNCERTAIN' CONTINUE = 'CONTINUE' CONFIRMATION = 'CONFIRMATION' STOP = 'STOP' STEP = StepType.to_list() DECISION = 'DECISION' HUMAN_TASK = 'Choose the next action' HUMAN_TASK_OPTIONS = { 'r': 'Retest current step', 'c': 'Continue', 's': 'Stop Runbook' } CONFIRMATION_OPTIONS = {'Yes/Y/y': 'Yes', 'No/N/n': 'No'} GENERATE_REPORT = 'GENERATE_REPORT' STATUS_ORDER = ['failed', 'uncertain', 'ok', 'skipped'] FINALIZE_INVESTIGATION = 'FINALIZE_INVESTIGATION' CLI = 'cli' API = 'api' # Restricted attributes that should never be used in observations and tep naming RESTRICTED_ATTRIBUTES = { 'uuid', 'steps', 'observations', 'product', 'doc_file_name', 'type', 'template' } ================================================ FILE: gcpdiag/runbook/crm/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/crm/constants.py ================================================ ================================================ FILE: gcpdiag/runbook/crm/flags.py ================================================ ================================================ FILE: gcpdiag/runbook/crm/generalized_steps.py ================================================ # Copyright 2024 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. """Contains Generatlized Steps for Cloud Resource Manager""" from gcpdiag import runbook from gcpdiag.queries import crm, orgpolicy from gcpdiag.runbook import op from gcpdiag.runbook.iam import constants, flags class OrgPolicyCheck(runbook.Step): """Checks if an organization policy is effective in a project Supports only boolean constraints and not list constraints. """ template = 'orgpolicy::default' constraint: str is_enforced: bool = True project = None def execute(self): """Checking Organization policy""" project_id = self.project or op.get(flags.PROJECT_ID) project = crm.get_project(project_id) constraint = orgpolicy.get_effective_org_policy(project_id, self.constraint) expected_state = 'enforced' if self.is_enforced else 'not enforced' actual_state = 'enforced' if constraint.is_enforced() else 'not enforced' # Is effected to be enforced and is enforce or vice versa if (self.is_enforced and constraint.is_enforced()) or (not self.is_enforced and not constraint.is_enforced()): op.add_ok(resource=project, reason=op.prep_msg(op.SUCCESS_REASON, constraint=self.constraint, expected_state=expected_state, actual_state=actual_state)) # Is effected to be enforced and is enforce or vice versa elif (self.is_enforced and not constraint.is_enforced()) or (not self.is_enforced and constraint.is_enforced()): op.add_failed(resource=project, reason=op.prep_msg(constants.FAILURE_REASON, constraint=self.constraint, expected_state=expected_state, actual_state=actual_state), remediation=op.prep_msg(constants.FAILURE_REMEDIATION)) ================================================ FILE: gcpdiag/runbook/crm/generalized_steps_test.py ================================================ # Copyright 2026 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. """Test class for crm.generalized_steps.""" import datetime import unittest from unittest import mock from gcpdiag.queries import apis_stub from gcpdiag.runbook import op from gcpdiag.runbook.crm import generalized_steps from gcpdiag.runbook.iam import flags DUMMY_PROJECT_ID = 'gcpdiag-fw-policy-aaaa' class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class GeneralizedStepsTestBase(unittest.TestCase): """Base class for CRM generalized step tests.""" def setUp(self): super().setUp() # 1. Patch get_api with the stub. self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) # 2. Create a mock interface to capture outputs self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() # 3. Instantiate a real Operator self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() # 4. Define standard parameters. self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, 'start_time': datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc), 'end_time': datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params class OrgPolicyCheckTest(GeneralizedStepsTestBase): """Test OrgPolicyCheck step.""" def test_org_policy_enforced_and_expected_enforced(self): step = generalized_steps.OrgPolicyCheck( constraint='constraints/compute.disableSerialPortAccess', is_enforced=True, ) with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() def test_org_policy_not_enforced_and_expected_enforced(self): step = generalized_steps.OrgPolicyCheck( constraint='constraints/iam.disableCrossProjectServiceAccountUsage', is_enforced=True, ) with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_failed.assert_called_once() def test_org_policy_not_enforced_and_expected_not_enforced(self): step = generalized_steps.OrgPolicyCheck( constraint='constraints/iam.disableCrossProjectServiceAccountUsage', is_enforced=False, ) with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() def test_org_policy_enforced_and_expected_not_enforced(self): step = generalized_steps.OrgPolicyCheck( constraint='constraints/compute.disableSerialPortAccess', is_enforced=False, ) with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_failed.assert_called_once() def test_org_policy_enforced_with_project_parameter(self): step = generalized_steps.OrgPolicyCheck( constraint='constraints/compute.disableSerialPortAccess', is_enforced=True, project=DUMMY_PROJECT_ID, ) with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/crm/templates/orgpolicy.jinja ================================================ {% block default_success_reason %} The {constraint} is {actual_state}. {% endblock default_success_reason %} {% block default_failure_reason %} The organization policy {constraint} is set to {actual_state}, but it should be {expected_state}. {% endblock default_failure_reason %} {% block default_failure_remediation %} Follow Guide [1] to correct the constraint. Search for the constraint in [2] to better understand how it works. Note: Consider checking with organization administrators for the recommended approach. [1] [2] {% endblock default_failure_remediation %} {% block serial_logging_enforced_success_reason %} The {constraint} is {enforced_or_not}. {% endblock serial_logging_enforced_success_reason %} {% block serial_logging_enforced_failure_reason %} The organization policy {constraint} is {enforced_or_not}, but the opposite state is expected. {% endblock serial_logging_enforced_failure_reason %} {% block serial_logging_enforced_failure_remediation %} Follow Guide [1] to correct the constraint. Search for the constraint in [2] to better understand how it works. Note: Consider checking with organization administrators for the recommended approach. [1] [2] {% endblock serial_logging_enforced_failure_remediation %} ================================================ FILE: gcpdiag/runbook/dataflow/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/dataflow/constants.py ================================================ # Copyright 2024 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. """TODO: String doc""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.constants import * from gcpdiag.runbook.iam.constants import * DATAFLOW_SERVICE_AGENT_ROLE = 'roles/dataflow.serviceAgent' DATAFLOW_WORKER_ROLE = 'roles/dataflow.worker' DATAFLOW_DEVELOPER_ROLE = 'roles/dataflow.developer' DATAFLOW_IAM_SERVICE_ACCOUNT_USER = 'roles/iam.serviceAccountUser' ================================================ FILE: gcpdiag/runbook/dataflow/failed_streaming_pipeline.py ================================================ # Copyright 2024 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. """Module containing Dataflow diagnostic tree and custom steps.""" from gcpdiag import runbook from gcpdiag.queries import apis, crm, dataflow, logs from gcpdiag.runbook import op from gcpdiag.runbook.dataflow import flags from gcpdiag.runbook.dataflow import generalized_steps as dataflow_gs # from gcpdiag.runbook.iam import generalized_steps as iam_gs class FailedStreamingPipeline(runbook.DiagnosticTree): """Diagnostic checks for failed Dataflow Streaming Pipelines. Provides a DiagnosticTree to check for issues related to failed streaming pipelines. - Examples: - Pipeline failed to launch - Workers not starting """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True, }, flags.JOB_ID: { 'type': str, 'help': 'The Job ID returned when the launch command is submitted', 'deprecated': True, 'new_parameter': 'dataflow_job_id', }, flags.DATAFLOW_JOB_ID: { 'type': str, 'help': 'The Job ID returned when the launch command is submitted', 'required': True, }, flags.JOB_REGION: { 'type': str, 'help': 'The region configured for the job', 'required': True, }, } def legacy_parameter_handler(self, parameters): if flags.JOB_ID in parameters: parameters[flags.DATAFLOW_JOB_ID] = parameters.pop(flags.JOB_ID) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate your step classes start = FailedStreamingPipelineStart() # add them to your tree self.add_start(start) streaming = JobIsStreaming() self.add_step(parent=start, child=streaming) supported_sdk = dataflow_gs.ValidSdk() self.add_step(parent=streaming, child=supported_sdk) job_graph = JobGraphIsConstructed() self.add_step(parent=supported_sdk, child=job_graph) # Ending your runbook self.add_end(FailedStreamingPipelineEnd()) class FailedStreamingPipelineStart(runbook.StartStep): """Start step. Gets the job and confirms it exists. Usually this will be logged in Dataflow Monitoring Interface, but may not be logged if the job graph is not constructed. """ template = 'generics::failed_streaming_pipeline_job_found' def execute(self): """Start Step for failed streaming pipelines runbook.""" project = crm.get_project(op.get(flags.PROJECT_ID)) job_id = op.get(flags.DATAFLOW_JOB_ID) job_region = op.get(flags.JOB_REGION) if project: op.info(f'name: {project.name}: id: {project.id}') product = self.__module__.split('.')[-2] if not apis.is_enabled(op.get(flags.PROJECT_ID), 'dataflow'): op.add_skipped(project, reason='Dataflow API is not enabled') return job = dataflow.get_job(op.get(flags.PROJECT_ID), job_id, job_region) if job is not None: # default=None success_reason = op.prep_msg(op.SUCCESS_REASON, job_id=job_id, region=job_region) op.add_ok(resource=job, reason=success_reason) else: op.add_skipped( resource=project, reason=( 'Could not find job {} or the {} API is disabled in project {}'. format(job_id, product, project.id)), ) class JobIsStreaming(runbook.Step): """Has common step to check if the job is a streaming job.""" def execute(self): """Checks if a Dataflow job is indeed a streaming job by field JobType.""" job = dataflow.get_job( op.get(flags.PROJECT_ID), op.get(flags.DATAFLOW_JOB_ID), op.get(flags.JOB_REGION), ) if job.job_type == 'JOB_TYPE_STREAMING': op.add_ok(resource=job, reason='Job is of type streaming') else: op.add_failed( resource=job, reason='Dataflow job is not a streaming job.', remediation='Please pass a streaming job', ) class JobState(runbook.Step): """Has common step to check job state is not failed. Usually the specific error is logged in the Dataflow Monitoring Interface. """ template = 'generics::failed_streaming_pipeline_check_common_errors' def execute(self): """Checks that the Dataflow job's state.""" job = dataflow.get_job( op.get(flags.PROJECT_ID), op.get(flags.DATAFLOW_JOB_ID), op.get(flags.JOB_REGION), ) if job.state == 'JOB_STATE_FAILED': log_filter = ['severity>=WARNING'] project_id = op.get(flags.PROJECT_ID) log_name = 'log_id("dataflow.googleapis.com/worker")' project_logs = {} project_logs[project_id] = logs.query( project_id=project_id, resource_type='dataflow_step', log_name=log_name, filter_str=' AND '.join(log_filter), ) for log_entry in project_logs[project_id].entries: if log_entry['severity'] >= 'ERROR': op.info(message=('Error logs found in job logs for the project' f' {job.full_path}')) failure_reason = op.prep_msg(op.FAILURE_REASON, job_id=op.get(flags.DATAFLOW_JOB_ID)) failure_remediation = op.prep_msg(op.FAILURE_REMEDIATION) op.add_failed( resource=job, reason=failure_reason, remediation=failure_remediation, ) elif job.state in [ 'JOB_STATE_STOPPED', 'JOB_STATE_PENDING', 'JOB_STATE_QUEUED', ]: op.add_uncertain( resource=job, reason='Job has not yet started to run', remediation=( 'Wait for the job to start running & job graph is constructed to' ' retry'), ) elif job.state in ['JOB_STATE_CANCELLED', 'JOB_STATE_DRAINED']: op.add_ok(resource=job, reason='Job has been terminated successfully') elif job.state == 'JOB_STATE_RUNNING': op.add_ok(resource=job, reason='Job is running successfully') class JobGraphIsConstructed(runbook.Gateway): """Has common step to check if the job has an error in graph construction. If a job fails during graph construction, it's error is not logged in the Dataflow Monitoring Interface as it never launched. The error appears in the console or terminal window where job is ran and may be language-specific. Manual check if there's any error using the 3 supported languages: Java, Python, Go. """ def execute(self): """Checks if a Dataflow job graph is successfully constructed.""" job = dataflow.get_job( op.get(flags.PROJECT_ID), op.get(flags.DATAFLOW_JOB_ID), op.get(flags.JOB_REGION), ) message = ( 'Does the job experience any graph or pipeline construction errors' ' e.g.wording like %s') example_wording = '' if 'java' in job.sdk_language.lower(): example_wording = ( 'Exception in thread "main" java.lang.IllegalStateException') elif 'python' in job.sdk_language.lower(): example_wording = ( 'TypeCheckError: Input type hint violation at group: expected Tuple ,' ' got str') elif 'go' in job.sdk_language.lower(): example_wording = ( 'panic: Method ProcessElement in DoFn main.extractFn is missing all' ' inputs') response = op.prompt(message=message % example_wording, kind=op.CONFIRMATION) if response == op.YES: op.add_failed( resource=job, reason='Job was not launched', remediation='Correct job launch errors and retry.', ) self.add_child(child=FailedStreamingPipelineEnd()) else: self.add_child(child=JobLogsVisible()) class JobLogsVisible(runbook.Step): """Has step to check if the project has logs exclusion filter for dataflow logs. This affects visibility of the error causing job failure. If there are no logs on the Dataflow Monitoring Interface or the launching console/platform, this is a good check to make sure Dataflow logs are visible. """ def execute(self): """Checks if a Dataflow job has visible logs.""" excluded = dataflow.logs_excluded(op.get(flags.PROJECT_ID)) if excluded is False: op.add_ok( resource=crm.get_project(op.get(flags.PROJECT_ID)), reason='Dataflow Logs are not excluded', ) elif excluded is None: op.add_failed( resource=None, reason='logging API is disabled', remediation='Enable Logging API', ) else: op.add_failed( resource=crm.get_project(op.get(flags.PROJECT_ID)), reason='Dataflow Logs are excluded', remediation=( 'Please include Dataflow logs to allow troubleshooting job' ' failures, or route them to a visible sink'), ) class FailedStreamingPipelineEnd(runbook.EndStep): """End of the runbook. No more checks to perform. """ def execute(self): """End step.""" op.info('No more checks to perform.') ================================================ FILE: gcpdiag/runbook/dataflow/failed_streaming_pipeline_test.py ================================================ # Copyright 2024 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. """Test class for dataflow/Failed_streaming_pipeline.""" import datetime import unittest from unittest import mock from absl.testing import parameterized from gcpdiag import config from gcpdiag.queries import apis_stub, dataflow from gcpdiag.runbook import dataflow as dataflow_rb from gcpdiag.runbook import op, snapshot_test_base from gcpdiag.runbook.dataflow import failed_streaming_pipeline, flags DUMMY_PROJECT_ID = 'gcpdiag-dataflow1-aaaa' DUMMY_JOB_ID = '2024-06-19_09_43_07-14927685200167458422' DUMMY_REGION = 'us-central1' class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = dataflow_rb runbook_name = 'dataflow/failed-streaming-pipeline' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': DUMMY_PROJECT_ID, 'dataflow_job_id': DUMMY_JOB_ID, 'job_region': DUMMY_REGION, }] class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class FailedStreamingPipelineTest(unittest.TestCase): def test_legacy_parameter_handler(self): runbook = failed_streaming_pipeline.FailedStreamingPipeline() parameters = { 'job_id': 'test-job-id', 'project_id': 'test-project', 'job_region': 'us-central1', } runbook.legacy_parameter_handler(parameters) self.assertNotIn('job_id', parameters) self.assertIn('dataflow_job_id', parameters) self.assertEqual(parameters['dataflow_job_id'], 'test-job-id') class FailedStreamingPipelineBuildTreeTest(unittest.TestCase): @mock.patch( 'gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipeline.add_step' ) @mock.patch( 'gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipeline.add_start' ) @mock.patch( 'gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipeline.add_end' ) @mock.patch('gcpdiag.runbook.op.get') def test_build_tree(self, mock_op_get, mock_add_end, mock_add_start, mock_add_step): mock_op_get.return_value = 'test_value' runbook = failed_streaming_pipeline.FailedStreamingPipeline() runbook.build_tree() mock_add_start.assert_called_once() self.assertIsInstance( mock_add_start.call_args[0][0], failed_streaming_pipeline.FailedStreamingPipelineStart, ) steps_added = [call[1]['child'] for call in mock_add_step.call_args_list] self.assertTrue( any( isinstance(s, failed_streaming_pipeline.JobIsStreaming) for s in steps_added)) self.assertTrue( any( isinstance(s, dataflow_rb.generalized_steps.ValidSdk) for s in steps_added)) self.assertTrue( any( isinstance(s, failed_streaming_pipeline.JobGraphIsConstructed) for s in steps_added)) mock_add_end.assert_called_once() self.assertIsInstance( mock_add_end.call_args[0][0], failed_streaming_pipeline.FailedStreamingPipelineEnd, ) class FailedStreamingPipelineStepTestBase(unittest.TestCase): """Base class for Failed Streaming Pipeline step tests.""" def setUp(self): super().setUp() # 1. Patch get_api with the stub. self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) # 2. Create a mock interface to capture outputs self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() # 3. Instantiate a real Operator self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() # 4. Define standard parameters. self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.DATAFLOW_JOB_ID: DUMMY_JOB_ID, flags.JOB_REGION: DUMMY_REGION, 'start_time': datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc), 'end_time': datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params self.mock_op_prompt = self.enterContext( mock.patch('gcpdiag.runbook.op.prompt')) class FailedStreamingPipelineStartTest(FailedStreamingPipelineStepTestBase): """Test FailedStreamingPipelineStart step.""" @mock.patch('gcpdiag.queries.dataflow.get_job') def test_start_step_ok(self, mock_get_job): mock_get_job.return_value = mock.Mock(spec=dataflow.Job) step = failed_streaming_pipeline.FailedStreamingPipelineStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_skipped.assert_not_called() @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=False) def test_start_step_api_disabled(self, mock_is_enabled): step = failed_streaming_pipeline.FailedStreamingPipelineStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_is_enabled.call_count, 1) mock_is_enabled.assert_called_with(DUMMY_PROJECT_ID, 'dataflow') self.assertEqual(self.mock_interface.add_skipped.call_count, 1) @mock.patch('gcpdiag.queries.dataflow.get_job', return_value=None) def test_start_step_job_not_found(self, mock_get_job): del mock_get_job self.params[flags.DATAFLOW_JOB_ID] = 'non-existent-job' step = failed_streaming_pipeline.FailedStreamingPipelineStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.mock_interface.add_ok.assert_not_called() class JobIsStreamingTest(FailedStreamingPipelineStepTestBase): """Test JobIsStreaming step.""" @mock.patch('gcpdiag.queries.dataflow.get_job') def test_job_is_streaming(self, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job) mock_job.job_type = 'JOB_TYPE_STREAMING' mock_get_job.return_value = mock_job step = failed_streaming_pipeline.JobIsStreaming() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() @mock.patch('gcpdiag.queries.dataflow.get_job') def test_job_is_not_streaming(self, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job) mock_job.job_type = 'JOB_TYPE_BATCH' mock_get_job.return_value = mock_job step = failed_streaming_pipeline.JobIsStreaming() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.mock_interface.add_ok.assert_not_called() class JobStateTest(FailedStreamingPipelineStepTestBase, parameterized.TestCase): """Test JobState step.""" @mock.patch('gcpdiag.queries.logs.query') @mock.patch('gcpdiag.queries.dataflow.get_job') def test_job_state_failed_no_error_logs(self, mock_get_job, mock_logs_query): mock_job = mock.Mock(spec=dataflow.Job, state='JOB_STATE_FAILED') mock_get_job.return_value = mock_job mock_logs_query.return_value = mock.Mock(entries=[]) step = failed_streaming_pipeline.JobState() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_logs_query.assert_called_once() self.mock_interface.info.assert_not_called() self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.logs.query') @mock.patch('gcpdiag.queries.dataflow.get_job') def test_job_state_failed_with_error_logs(self, mock_get_job, mock_logs_query): mock_job = mock.Mock(spec=dataflow.Job, state='JOB_STATE_FAILED') mock_get_job.return_value = mock_job mock_logs_query.return_value = mock.Mock(entries=[{ 'severity': 'ERROR', 'message': 'error log' }]) step = failed_streaming_pipeline.JobState() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_logs_query.assert_called_once() self.mock_interface.info.assert_called_once() self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.dataflow.get_job') def test_job_state_stopped(self, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job, state='JOB_STATE_STOPPED') mock_get_job.return_value = mock_job step = failed_streaming_pipeline.JobState() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() @parameterized.parameters('JOB_STATE_CANCELLED', 'JOB_STATE_RUNNING') @mock.patch('gcpdiag.queries.dataflow.get_job') def test_job_state_ok(self, job_state, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job, state=job_state) mock_get_job.return_value = mock_job step = failed_streaming_pipeline.JobState() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_uncertain.assert_not_called() class JobGraphIsConstructedTest(FailedStreamingPipelineStepTestBase): """Test JobGraphIsConstructed step.""" def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobGraphIsConstructed.add_child' )) @mock.patch('gcpdiag.queries.dataflow.get_job') def test_graph_construction_error_yes(self, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job) mock_job.sdk_language = 'java' mock_get_job.return_value = mock_job self.mock_op_prompt.return_value = op.YES step = failed_streaming_pipeline.JobGraphIsConstructed() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_prompt.assert_called_once() self.mock_interface.add_failed.assert_called_once() self.add_child_patch.assert_called_once() self.assertIsInstance( self.add_child_patch.call_args[1]['child'], failed_streaming_pipeline.FailedStreamingPipelineEnd, ) @mock.patch('gcpdiag.queries.dataflow.get_job') def test_graph_construction_error_no(self, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job) mock_job.sdk_language = 'java' mock_get_job.return_value = mock_job self.mock_op_prompt.return_value = op.NO step = failed_streaming_pipeline.JobGraphIsConstructed() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_prompt.assert_called_once() self.mock_interface.add_failed.assert_not_called() self.add_child_patch.assert_called_once() self.assertIsInstance( self.add_child_patch.call_args[1]['child'], failed_streaming_pipeline.JobLogsVisible, ) @mock.patch('gcpdiag.queries.dataflow.get_job') def test_graph_construction_error_python_sdk(self, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job) mock_job.sdk_language = 'python' mock_get_job.return_value = mock_job self.mock_op_prompt.return_value = op.NO step = failed_streaming_pipeline.JobGraphIsConstructed() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_prompt.assert_called_once() self.assertIn('TypeCheckError', self.mock_op_prompt.call_args[1]['message']) self.mock_interface.add_failed.assert_not_called() self.add_child_patch.assert_called_once() self.assertIsInstance( self.add_child_patch.call_args[1]['child'], failed_streaming_pipeline.JobLogsVisible, ) @mock.patch('gcpdiag.queries.dataflow.get_job') def test_graph_construction_error_go_sdk(self, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job) mock_job.sdk_language = 'go' mock_get_job.return_value = mock_job self.mock_op_prompt.return_value = op.NO step = failed_streaming_pipeline.JobGraphIsConstructed() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_prompt.assert_called_once() self.assertIn('panic: Method', self.mock_op_prompt.call_args[1]['message']) self.mock_interface.add_failed.assert_not_called() self.add_child_patch.assert_called_once() self.assertIsInstance( self.add_child_patch.call_args[1]['child'], failed_streaming_pipeline.JobLogsVisible, ) class JobLogsVisibleTest(FailedStreamingPipelineStepTestBase): """Test JobLogsVisible step.""" @mock.patch('gcpdiag.queries.dataflow.logs_excluded', return_value=False) def test_logs_not_excluded(self, mock_logs_excluded): step = failed_streaming_pipeline.JobLogsVisible() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_logs_excluded.assert_called_once_with(DUMMY_PROJECT_ID) self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() @mock.patch('gcpdiag.queries.dataflow.logs_excluded', return_value=None) def test_logs_api_disabled(self, mock_logs_excluded): step = failed_streaming_pipeline.JobLogsVisible() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_logs_excluded.assert_called_once_with(DUMMY_PROJECT_ID) self.mock_interface.add_ok.assert_not_called() self.assertEqual(self.mock_interface.add_failed.call_args[1]['resource'], None) self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.dataflow.logs_excluded', side_effect=[True, None]) def test_logs_excluded_is_none_on_second_call(self, mock_logs_excluded): step = failed_streaming_pipeline.JobLogsVisible() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_logs_excluded.call_count, 1) self.mock_interface.add_failed.assert_called_once() self.mock_interface.add_ok.assert_not_called() @mock.patch('gcpdiag.queries.dataflow.logs_excluded', return_value=True) def test_logs_excluded(self, mock_logs_excluded): step = failed_streaming_pipeline.JobLogsVisible() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_logs_excluded.assert_called_with(DUMMY_PROJECT_ID) self.mock_interface.add_failed.assert_called_once() self.mock_interface.add_ok.assert_not_called() class FailedStreamingPipelineEndTest(FailedStreamingPipelineStepTestBase): """Test FailedStreamingPipelineEnd step.""" def test_end_step(self): step = failed_streaming_pipeline.FailedStreamingPipelineEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_once() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/dataflow/flags.py ================================================ # Copyright 2024 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. """Flags for Dataflow runbooks.""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.flags import * from gcpdiag.runbook.iam.flags import * JOB_ID = 'job_id' JOB_REGION = 'job_region' WORKER_SERVICE_ACCOUNT = 'worker_service_account' PRINCIPAL = 'principal' CROSS_PROJECT_ID = 'cross_project_id' DATAFLOW_JOB_ID = 'dataflow_job_id' ================================================ FILE: gcpdiag/runbook/dataflow/generalized_steps.py ================================================ # Copyright 2024 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. """Common steps for Dataflow runbooks.""" from gcpdiag import runbook from gcpdiag.queries import dataflow from gcpdiag.runbook import op from gcpdiag.runbook.dataflow import flags class ValidSdk(runbook.Step): """Has common step to check if the job is running a valid SDK. Contains SDK check Step that are likely to be reused for most Dataflow Runbooks. """ def execute(self): """Checks SDK is not in the list that might trigger known SDK issues.""" job = dataflow.get_job( op.get(flags.PROJECT_ID), op.get(flags.DATAFLOW_JOB_ID), op.get(flags.JOB_REGION), ) if job is None: op.add_skipped(resource=None, reason='Job not found.') return if job.sdk_support_status != 'SUPPORTED': op.add_failed( resource=None, reason=('Dataflow job Beam SDK is not supported. The pipeline may be' ' rejected.'), remediation='Please use a supported Beam SDK version', ) else: op.add_ok(resource=job, reason='Dataflow job Beam SDK is supported.') ================================================ FILE: gcpdiag/runbook/dataflow/generalized_steps_test.py ================================================ # Copyright 2024 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. """Test class for dataflow.generalized_steps.""" import datetime import unittest from unittest import mock from gcpdiag.queries import apis_stub, dataflow from gcpdiag.runbook import op from gcpdiag.runbook.dataflow import flags, generalized_steps DUMMY_PROJECT_ID = 'gcpdiag-dataflow1-aaaa' DUMMY_JOB_ID = '2024-06-19_09_43_07-14927685200167458422' DUMMY_REGION = 'us-central1' class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class GeneralizedStepsTestBase(unittest.TestCase): """Base class for Dataflow generalized step tests.""" def setUp(self): super().setUp() # 1. Patch get_api with the stub. self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) # 2. Create a mock interface to capture outputs self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() # 3. Instantiate a real Operator self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() # 4. Define standard parameters. self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.DATAFLOW_JOB_ID: DUMMY_JOB_ID, flags.JOB_REGION: DUMMY_REGION, 'start_time': datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc), 'end_time': datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params class ValidSdkTest(GeneralizedStepsTestBase): """Test ValidSdk step.""" def test_valid_sdk(self): step = generalized_steps.ValidSdk() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() @mock.patch('gcpdiag.queries.dataflow.get_job') def test_invalid_sdk(self, mock_get_job): mock_job = mock.Mock(spec=dataflow.Job) mock_job.sdk_support_status = 'DEPRECATED' mock_get_job.return_value = mock_job step = generalized_steps.ValidSdk() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_failed.assert_called_once() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/dataflow/job_permissions.py ================================================ # Copyright 2024 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. """Module containing Dataflow Jobs permissions check diagnostic tree and custom steps.""" from gcpdiag import runbook from gcpdiag.queries import crm, iam, logs from gcpdiag.runbook import StartStep, op from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.dataflow import constants as dataflow_constants from gcpdiag.runbook.dataflow import flags from gcpdiag.runbook.iam import generalized_steps as iam_gs PRODUCT_FLAG = 'dataflow' def local_realtime_query(filter_str): result = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), filter_str=filter_str, ) return result class JobPermissions(runbook.DiagnosticTree): """Analysis and Resolution of Dataflow Jobs Permissions issues. This runbook investigates Dataflow permissions and recommends remediation steps. Areas Examined: - Dataflow User Account Permissions: Verify that individual Dataflow users have the necessary permissions to access and manage Dataflow jobs (e.g., create,update,cancel). - Dataflow Service Account Permissions: Verify that the Dataflow Service Account has the required permissions to execute and manage the Dataflow jobs - Dataflow Worker Service Account: Verify that the Dataflow Worker Service Account has the necessary permissions for worker instances within a Dataflow job to access input and output resources during job execution. - Dataflow Resource Permissions: Verify that Dataflow resources (e.g., Cloud Storage buckets, BigQuery datasets) have the necessary permissions to be accessed and used by Dataflow jobs. By ensuring that Dataflow resources have the necessary permissions, you can prevent errors and ensure that your jobs run smoothly. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True, }, flags.PRINCIPAL: { 'type': str, 'help': ('The authenticated user account email. This is the ' 'user account that is used to authenticate the user to the ' 'console or the gcloud CLI.'), 'required': True, }, flags.WORKER_SERVICE_ACCOUNT: { 'type': str, 'help': ('Dataflow Worker Service Account used for Dataflow Job Creation' 'and execution'), 'required': True, }, flags.CROSS_PROJECT_ID: { 'type': str, 'help': ('Cross Project ID, where service account is located if it is not' ' in the same project as the Dataflow Job'), }, } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate your step classes start = StartStep() user_account_permissions_check = DataflowUserAccountPermissions() worker_service_account_check = DataflowWorkerServiceAccountPermissions() dataflow_resource_permissions_check = DataflowResourcePermissions() self.add_start(start) self.add_step(parent=start, child=user_account_permissions_check) project = crm.get_project(op.get(flags.PROJECT_ID)) service_agent_check = iam_gs.IamPolicyCheck() service_agent_check.project = op.get(flags.PROJECT_ID) service_agent_check.roles = [dataflow_constants.DATAFLOW_SERVICE_AGENT_ROLE] service_agent_check.principal = f'serviceAccount:service-{project.number}@dataflow-service-producer-prod.iam.gserviceaccount.com' # pylint: disable=line-too-long service_agent_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_service_account' # pylint: disable=line-too-long service_agent_check.require_all = False self.add_step(parent=start, child=service_agent_check) self.add_step(parent=start, child=worker_service_account_check) self.add_step(parent=start, child=dataflow_resource_permissions_check) self.add_end(DataflowPermissionsEnd()) class DataflowUserAccountPermissions(runbook.Step): """Check the User account permissions. "Dataflow Viewer" role allows the user to view/list the Dataflow jobs. But, cannot submit, update, drain, stop, or cancel the jobs. "Dataflow Developer" role does allows the user to create and modify (view, update, cancel etc) the dataflow jobs, but does not provide machine type, storage bucket configuration access. "Dataflow Admin" role provides complete access for creating and modifying the jobs along with the machine type and storage bucket configuration access. """ def execute(self): """Check the Authenticated User account permissions.""" dataflow_developer_role_check = iam_gs.IamPolicyCheck() dataflow_developer_role_check.project = op.get(flags.PROJECT_ID) dataflow_developer_role_check.roles = [ dataflow_constants.DATAFLOW_DEVELOPER_ROLE, dataflow_constants.DATAFLOW_IAM_SERVICE_ACCOUNT_USER, ] dataflow_developer_role_check.principal = f'user:{op.get(flags.PRINCIPAL)}' dataflow_developer_role_check.require_all = True self.add_child(dataflow_developer_role_check) class DataflowWorkerServiceAccountPermissions(runbook.Gateway): """Check the Dataflow Worker account permissions. Worker instances use the worker service account to access input and output resources after you submit your job. For the worker service account to be able to run a job, it must have the roles/dataflow.worker role. """ template = 'permissions::projectcheck' def execute(self): """Checking dataflow worker service account permissions.""" sa_email = op.get(flags.WORKER_SERVICE_ACCOUNT) project = crm.get_project(op.get(flags.PROJECT_ID)) op.info(op.get(flags.WORKER_SERVICE_ACCOUNT)) sa_exists = iam.is_service_account_existing(email=sa_email, context=op.get_context()) cross_project_id = op.get(flags.CROSS_PROJECT_ID) sa_exists_cross_project = False if cross_project_id: cross_project_context = op.get_context().copy_with( project_id=cross_project_id) sa_exists_cross_project = iam.is_service_account_existing( email=sa_email, context=cross_project_context) if sa_exists and op.get(flags.CROSS_PROJECT_ID) is None: op.info('Service Account associated with Dataflow Job was found in the' ' same project') op.info('Checking permissions.') # Check for Service Account permissions sa_permission_check = iam_gs.IamPolicyCheck() sa_permission_check.project = op.get(flags.PROJECT_ID) sa_permission_check.principal = ( f'serviceAccount:{op.get(flags.WORKER_SERVICE_ACCOUNT)}') sa_permission_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_worker_service_account' # pylint: disable=line-too-long sa_permission_check.require_all = True sa_permission_check.roles = [dataflow_constants.DATAFLOW_WORKER_ROLE] self.add_child(child=sa_permission_check) elif sa_exists_cross_project: op.info('Service Account associated with Dataflow Job was found in cross ' 'project') # Check if constraint is enforced op.info('Checking constraints on service account project.') orgpolicy_constraint_check = crm_gs.OrgPolicyCheck() orgpolicy_constraint_check.project = op.get(flags.CROSS_PROJECT_ID) orgpolicy_constraint_check.constraint = ( 'constraints/iam.disableCrossProjectServiceAccountUsage') orgpolicy_constraint_check.is_enforced = False self.add_child(orgpolicy_constraint_check) # Check Service Account roles op.info('Checking roles in service account project.') sa_permission_check = iam_gs.IamPolicyCheck() sa_permission_check.project = op.get(flags.CROSS_PROJECT_ID) sa_permission_check.principal = ( f'serviceAccount:{op.get(flags.WORKER_SERVICE_ACCOUNT)}') sa_permission_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_cross_project_worker_service_account' # pylint: disable=line-too-long sa_permission_check.require_all = True sa_permission_check.roles = [dataflow_constants.DATAFLOW_WORKER_ROLE] self.add_child(child=sa_permission_check) # Check Service Agent Service Account roles op.info('Checking service agent service account roles on service account ' 'project.') service_agent_sa = ( f'service-{project.number}@dataflow-service-producer-prod.iam.gserviceaccount.com' ) service_agent_permission_check = iam_gs.IamPolicyCheck() service_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID) service_agent_permission_check.principal = ( f'serviceAccount:{service_agent_sa}') service_agent_permission_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_cross_project_worker_service_account' # pylint: disable=line-too-long service_agent_permission_check.require_all = True service_agent_permission_check.roles = [ dataflow_constants.DATAFLOW_IAM_SERVICE_ACCOUNT_USER, 'roles/iam.serviceAccountTokenCreator' ] self.add_child(child=service_agent_permission_check) # Check Compute Agent Service Account op.info('Checking compute agent service account roles on service account ' 'project.') compute_agent_sa = ( f'service-{project.number}@compute-system.iam.gserviceaccount.com') compute_agent_permission_check = iam_gs.IamPolicyCheck() compute_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID) compute_agent_permission_check.principal = ( f'serviceAccount:{compute_agent_sa}') compute_agent_permission_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_cross_project_worker_service_account' # pylint: disable=line-too-long compute_agent_permission_check.require_all = True compute_agent_permission_check.roles = [ dataflow_constants.DATAFLOW_IAM_SERVICE_ACCOUNT_USER, 'roles/iam.serviceAccountTokenCreator' ] self.add_child(child=compute_agent_permission_check) else: op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON, service_account=op.get( flags.WORKER_SERVICE_ACCOUNT), project_id=op.get(flags.PROJECT_ID)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class DataflowResourcePermissions(runbook.Step): """Check the Dataflow Resource permissions. Verify that Dataflow resources have the necessary permissions to be accessed and used by Dataflow jobs. Ensure that the your Dataflow project Worker Service Account have the required permissions to access and modify these resources. """ def execute(self): """Check the Dataflow Resource permissions.""" filter_str = [ 'log_id("dataflow.googleapis.com/job-message")', 'resource.type="dataflow_step"', ('textPayload=~("Failed to write a file to temp location" OR "Unable' ' to rename output files" OR "Unable to delete temp files")'), ] filter_str = '\n'.join(filter_str) log_entries = local_realtime_query(filter_str) if log_entries: op.info('Cloud Storage buckets related errors found in the logs..') op.info('Checking worker service account storage object admin role.') dataflow_storage_role_check = iam_gs.IamPolicyCheck() if op.get(flags.CROSS_PROJECT_ID): dataflow_storage_role_check.project = op.get(flags.CROSS_PROJECT_ID) dataflow_storage_role_check.roles = ['roles/storage.objectAdmin'] dataflow_storage_role_check.principal = ( f'serviceAccount:{op.get(flags.WORKER_SERVICE_ACCOUNT)}') dataflow_storage_role_check.require_all = True self.add_child(dataflow_storage_role_check) else: op.info('No Cloud Storage buckets related errors found in the logs') class DataflowPermissionsEnd(runbook.EndStep): """RUNBOOK COMPLETED.""" def execute(self): """Permissions checks completed.""" op.info('Dataflow Resources Permissions Checks Completed') ================================================ FILE: gcpdiag/runbook/dataflow/job_permissions_test.py ================================================ # Copyright 2024 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. """Test class for dataflow/JobPermissions""" import datetime import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import dataflow, op, snapshot_test_base from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.dataflow import flags, job_permissions from gcpdiag.runbook.iam import generalized_steps as iam_gs DUMMY_PROJECT_ID = 'gcpdiag-dataflow1-aaaa' DUMMY_GKE_PROJECT_ID = 'gcpdiag-gke1-aaaa' class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = dataflow runbook_name = 'dataflow/job-permissions' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': DUMMY_PROJECT_ID, 'custom_flag': 'dataflow', 'worker_service_account': ('dataflow-worker@gcpdiag-dataflow1-aaaa.iam.gserviceaccount.com'), 'principal': 'user@xyz.com', }] class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class JobPermissionsStepTestBase(unittest.TestCase): """Base class for Job Permissions step tests.""" def setUp(self): super().setUp() # 1. Patch get_api with the stub. self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) # 2. Create a mock interface to capture outputs self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() # 3. Instantiate a real Operator self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() # 4. Define standard parameters. self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.PRINCIPAL: 'test-user@example.com', flags.WORKER_SERVICE_ACCOUNT: (f'dataflow-worker@{DUMMY_PROJECT_ID}.iam.gserviceaccount.com'), flags.CROSS_PROJECT_ID: None, flags.START_TIME: datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc), flags.END_TIME: datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params self.mock_logs_realtime_query = self.enterContext( mock.patch('gcpdiag.queries.logs.realtime_query')) class JobPermissionsBuildTreeTest(unittest.TestCase): @mock.patch( 'gcpdiag.runbook.dataflow.job_permissions.JobPermissions.add_step') @mock.patch( 'gcpdiag.runbook.dataflow.job_permissions.JobPermissions.add_start') @mock.patch('gcpdiag.runbook.dataflow.job_permissions.JobPermissions.add_end') @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.runbook.op.get') def test_build_tree( self, mock_op_get, mock_add_end, mock_add_start, mock_add_step, ): mock_op_get.return_value = DUMMY_GKE_PROJECT_ID runbook = job_permissions.JobPermissions() runbook.build_tree() mock_add_start.assert_called_once() self.assertIsInstance(mock_add_start.call_args[0][0], job_permissions.StartStep) self.assertEqual(mock_add_step.call_count, 4) steps_added = [call[1]['child'] for call in mock_add_step.call_args_list] self.assertTrue( any( isinstance(s, job_permissions.DataflowUserAccountPermissions) for s in steps_added)) self.assertTrue( any(isinstance(s, iam_gs.IamPolicyCheck) for s in steps_added)) self.assertTrue( any( isinstance(s, job_permissions.DataflowWorkerServiceAccountPermissions) for s in steps_added)) self.assertTrue( any( isinstance(s, job_permissions.DataflowResourcePermissions) for s in steps_added)) mock_add_end.assert_called_once() self.assertIsInstance(mock_add_end.call_args[0][0], job_permissions.DataflowPermissionsEnd) class DataflowUserAccountPermissionsTest(JobPermissionsStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataflow.job_permissions.DataflowUserAccountPermissions.add_child' )) def test_add_child_called(self): step = job_permissions.DataflowUserAccountPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_called_once() self.assertIsInstance(self.add_child_patch.call_args[0][0], iam_gs.IamPolicyCheck) class DataflowWorkerServiceAccountPermissionsTest(JobPermissionsStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch('gcpdiag.runbook.dataflow.job_permissions.' 'DataflowWorkerServiceAccountPermissions.add_child')) @mock.patch('gcpdiag.queries.iam.is_service_account_existing', return_value=True) def test_sa_exists_same_project(self, unused_mock_is_service_account_existing): step = job_permissions.DataflowWorkerServiceAccountPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_called_once() self.assertIsInstance(self.add_child_patch.call_args[1]['child'], iam_gs.IamPolicyCheck) @mock.patch('gcpdiag.queries.iam.is_service_account_existing', return_value=False) def test_sa_does_not_exist(self, unused_mock_is_service_account_existing): self.params[flags.WORKER_SERVICE_ACCOUNT] = ( f'non-existent@{DUMMY_PROJECT_ID}.iam.gserviceaccount.com') step = job_permissions.DataflowWorkerServiceAccountPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_not_called() self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.iam.is_service_account_existing') def test_sa_exists_cross_project(self, mock_is_service_account_existing): self.params[flags.CROSS_PROJECT_ID] = 'gcpdiag-iam1-aaaa' self.params[flags.WORKER_SERVICE_ACCOUNT] = ( 'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') mock_is_service_account_existing.side_effect = [False, True] step = job_permissions.DataflowWorkerServiceAccountPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() # 1 org policy check + 1 sa perm check + 2 service agent perm checks self.assertEqual(self.add_child_patch.call_count, 4) self.assertIsInstance(self.add_child_patch.call_args_list[0][0][0], crm_gs.OrgPolicyCheck) self.assertIsInstance( self.add_child_patch.call_args_list[1][1]['child'], iam_gs.IamPolicyCheck, ) self.assertIsInstance( self.add_child_patch.call_args_list[2][1]['child'], iam_gs.IamPolicyCheck, ) self.assertIsInstance( self.add_child_patch.call_args_list[3][1]['child'], iam_gs.IamPolicyCheck, ) class DataflowResourcePermissionsTest(JobPermissionsStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataflow.job_permissions.DataflowResourcePermissions.add_child' )) def test_logs_found_same_project(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = job_permissions.DataflowResourcePermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_logs_realtime_query.assert_called_once() self.add_child_patch.assert_called_once() self.assertIsInstance(self.add_child_patch.call_args[0][0], iam_gs.IamPolicyCheck) def test_logs_found_cross_project(self): self.params[flags.CROSS_PROJECT_ID] = 'cross-project' self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = job_permissions.DataflowResourcePermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_logs_realtime_query.assert_called_once() self.add_child_patch.assert_called_once() added_step = self.add_child_patch.call_args[0][0] self.assertIsInstance(added_step, iam_gs.IamPolicyCheck) self.assertEqual(added_step.project, 'cross-project') def test_no_logs_found(self): self.mock_logs_realtime_query.return_value = [] step = job_permissions.DataflowResourcePermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_logs_realtime_query.assert_called_once() self.add_child_patch.assert_not_called() self.mock_interface.info.assert_called_with( 'No Cloud Storage buckets related errors found in the logs', step_type='INFO', ) class DataflowPermissionsEndTest(JobPermissionsStepTestBase): def test_end_step(self): step = job_permissions.DataflowPermissionsEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_once_with( 'Dataflow Resources Permissions Checks Completed', step_type='INFO') if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/dataflow/snapshots/failed_streaming_pipeline.txt ================================================ dataflow_job_id=2024-06-19_09_43_07-14927685200167458422,job_region=us-central1,project_id=gcpdiag- dataflow1-aaaa dataflow/failed-streaming-pipeline: Diagnostic checks for failed Dataflow Streaming Pipelines. Provides a DiagnosticTree to check for issues related to failed streaming pipelines. - Examples: - Pipeline failed to launch - Workers not starting [START]: Start Step for failed streaming pipelines runbook. [INFO]: name: gcpdiag test - datafusion1: id: gcpdiag-datafusion1-aaaa - gcs_to_pubsub [OK] [REASON] Successfully found job 2024-06-19_09_43_07-14927685200167458422 in region us-central1 [AUTOMATED STEP]: Checks if a Dataflow job is indeed a streaming job by field JobType. - gcs_to_pubsub [OK] [REASON] Job is of type streaming [AUTOMATED STEP]: Checks SDK is not in the list that might trigger known SDK issues. - gcs_to_pubsub [OK] [REASON] Dataflow job Beam SDK is supported. [GATEWAY]: Checks if a Dataflow job graph is successfully constructed. [AUTOMATED STEP]: Checks if a Dataflow job has visible logs. - gcpdiag-datafusion1-aaaa [OK] [REASON] Dataflow Logs are not excluded [END]: End step. [INFO]: No more checks to perform. ================================================ FILE: gcpdiag/runbook/dataflow/snapshots/job_permissions.txt ================================================ custom_flag=dataflow,principal=user@xyz.com,project_id=gcpdiag- dataflow1-aaaa,worker_service_account=dataflow-worker@gcpdiag-dataflow1-aaaa.iam.gserviceaccount.com dataflow/job-permissions: Analysis and Resolution of Dataflow Jobs Permissions issues. This runbook investigates Dataflow permissions and recommends remediation steps. Areas Examined: - Dataflow User Account Permissions: Verify that individual Dataflow users have the necessary permissions to access and manage Dataflow jobs (e.g., create,update,cancel). - Dataflow Service Account Permissions: Verify that the Dataflow Service Account has the required permissions to execute and manage the Dataflow jobs - Dataflow Worker Service Account: Verify that the Dataflow Worker Service Account has the necessary permissions for worker instances within a Dataflow job to access input and output resources during job execution. - Dataflow Resource Permissions: Verify that Dataflow resources (e.g., Cloud Storage buckets, BigQuery datasets) have the necessary permissions to be accessed and used by Dataflow jobs. By ensuring that Dataflow resources have the necessary permissions, you can prevent errors and ensure that your jobs run smoothly. [START]: Executing default start step for runbooks. [AUTOMATED STEP]: Check the Authenticated User account permissions. [AUTOMATED STEP]: Verify that user:user@xyz.com has required permissions/roles in project/gcpdiag-dataflow1-aaaa. - projects/gcpdiag-dataflow1-aaaa [FAIL] [REASON] user:user@xyz.com does not have at least one of the expected roles: roles/dataflow.developer, roles/iam.serviceAccountUser. [REMEDIATION] Grant a role containing the missing permissions by following the instructions in [1]. Refer to [2] for a list of Google Cloud predefined roles. Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant. [1] [2] [AUTOMATED STEP]: Verify that serviceAccount:service-12340010@dataflow-service-producer-prod.iam.gserviceaccount.com has required permissions/roles in project/gcpdiag-dataflow1-aaaa. - projects/gcpdiag-dataflow1-aaaa [FAIL] [REASON] The principal `serviceAccount:service-12340010@dataflow-service-producer-prod.iam.gserviceaccount.com` is missing at least one of the expected roles in the IAM policy: Missing roles: roles/dataflow.serviceAgent. [REMEDIATION] Grant a role that contains the required permissions. Refer to the guide [1] for details. [1] [GATEWAY]: Checking dataflow worker service account permissions. [INFO]: dataflow-worker@gcpdiag-dataflow1-aaaa.iam.gserviceaccount.com - gcpdiag-datafusion1-aaaa [FAIL] [REASON] Service Account `dataflow-worker@gcpdiag-dataflow1-aaaa.iam.gserviceaccount.com` associated with the Dataflow job was not found in project `gcpdiag-dataflow1-aaaa` or the specified cross-project. [REMEDIATION] Specify the project where the service account resides using the `cross_project_project` parameter. [AUTOMATED STEP]: Check the Dataflow Resource permissions. [INFO]: No Cloud Storage buckets related errors found in the logs [END]: Permissions checks completed. [INFO]: Dataflow Resources Permissions Checks Completed ================================================ FILE: gcpdiag/runbook/dataflow/templates/generics.jinja ================================================ {% block failed_streaming_pipeline_job_found_success_reason %} Successfully found job {job_id} in region {region} {% endblock failed_streaming_pipeline_job_found_success_reason %} {% block failed_streaming_pipeline_job_found_failure_reason %} Failed to find job {job_id} in region {region} {% endblock failed_streaming_pipeline_job_found_failure_reason %} {% block failed_streaming_pipeline_check_common_errors_success_reason %} The Dataflow job state is {state}. {% endblock failed_streaming_pipeline_check_common_errors_success_reason %} {% block failed_streaming_pipeline_check_common_errors_failure_reason %} Job state for job {job_id} is Failed. {% endblock failed_streaming_pipeline_check_common_errors_failure_reason %} {% block failed_streaming_pipeline_check_common_errors_failure_remediation %} Refer to the Dataflow Monitoring Interface for the specific error. Refer to the common errors documentation [1] to resolve the job errors. [1] {% endblock failed_streaming_pipeline_check_common_errors_failure_remediation %} ================================================ FILE: gcpdiag/runbook/dataflow/templates/permissions.jinja ================================================ {% block dataflow_service_account_success_reason %} The principal `{principal}` has the expected {permissions_or_roles} in the IAM policy. Present {permissions_or_roles}: {present_permissions_or_roles}. {% endblock dataflow_service_account_success_reason %} {% block dataflow_service_account_failure_reason %} The principal `{principal}` is missing at least one of the expected {permissions_or_roles} in the IAM policy: Missing {permissions_or_roles}: {missing_permissions_or_roles}. {% endblock dataflow_service_account_failure_reason %} {% block dataflow_service_account_failure_remediation %} Grant a role that contains the required permissions. Refer to the guide [1] for details. [1] {% endblock dataflow_service_account_failure_remediation %} {% block dataflow_worker_service_account_success_reason %} The principal `{principal}` has the expected {permissions_or_roles} in the IAM policy. Present {permissions_or_roles}: {present_permissions_or_roles}. {% endblock dataflow_worker_service_account_success_reason %} {% block dataflow_worker_service_account_failure_reason %} The principal `{principal}` is missing at least one of the expected {permissions_or_roles} in the IAM policy: Missing {permissions_or_roles}: {missing_permissions_or_roles}. {% endblock dataflow_worker_service_account_failure_reason %} {% block dataflow_worker_service_account_failure_remediation %} Grant a role that contains the required permissions. Refer to the guide [1] for details. [1] {% endblock dataflow_worker_service_account_failure_remediation %} {% block dataflow_cross_project_worker_service_account_success_reason %} The principal `{principal}` has the expected {permissions_or_roles} in the IAM policy. Present {permissions_or_roles}: {present_permissions_or_roles}. {% endblock dataflow_cross_project_worker_service_account_success_reason %} {% block dataflow_cross_project_worker_service_account_failure_reason %} The principal `{principal}` is missing at least one of the expected {permissions_or_roles} in the IAM policy: Missing {permissions_or_roles}: {missing_permissions_or_roles}. {% endblock dataflow_cross_project_worker_service_account_failure_reason %} {% block dataflow_cross_project_worker_service_account_failure_remediation %} Grant a role that contains the required permissions. Refer to the guide [1] for details. [1] {% endblock dataflow_cross_project_worker_service_account_failure_remediation %} {% block projectcheck_failure_reason %} Service Account `{service_account}` associated with the Dataflow job was not found in project `{project_id}` or the specified cross-project. {% endblock projectcheck_failure_reason %} {% block projectcheck_failure_remediation %} Specify the project where the service account resides using the `cross_project_project` parameter. {% endblock projectcheck_failure_remediation %} ================================================ FILE: gcpdiag/runbook/dataproc/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/dataproc/cluster_creation.py ================================================ # Copyright 2024 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. """Module containing Dataproc cluster creation diagnostic tree and custom steps.""" import json from datetime import datetime from gcpdiag import runbook, utils from gcpdiag.queries import (crm, dataproc, gce, iam, logs, network, networkmanagement) from gcpdiag.runbook import op from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.dataproc import flags from gcpdiag.runbook.iam import generalized_steps as iam_gs from gcpdiag.runbook.logs import generalized_steps as logs_gs class ClusterCreation(runbook.DiagnosticTree): """Provides a comprehensive analysis of common issues which affect Dataproc cluster creation. This runbook focuses on a range of potential problems for Dataproc clusters on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of cluster creation difficulties. The following areas are examined: - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the region/zone. - Quota availability: Checks for the quota availability in Dataproc cluster project. - Network configuration: Performs GCE Network Connectivity Tests, checks necessary firewall rules, external/internal IP configuration. - Cross-project configuration: Checks if the service account is not in the same project and reviews additional roles and organization policies enforcement. - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC network and evaluates if right service account roles are added. - Init actions script failures: Evaluates Logs Explorer logs regarding init actions script failures or timeouts. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID where the Dataproc cluster is located', 'required': True, }, flags.CLUSTER_NAME: { 'type': str, 'help': ('Dataproc cluster Name of an existing/active resource'), 'deprecated': True, 'new_parameter': 'dataproc_cluster_name', }, flags.DATAPROC_CLUSTER_NAME: { 'type': str, 'help': ('Dataproc cluster Name of an existing/active resource'), 'required': True, }, flags.REGION: { 'type': str, 'help': 'Dataproc cluster Region', 'required': True, }, flags.CLUSTER_UUID: { 'type': str, 'help': 'Dataproc cluster UUID', # 'required': True, cannot be required due # to limitations on Dataproc API side }, flags.PROJECT_NUMBER: { 'type': str, 'help': 'The Project Number where the Dataproc cluster is located', }, flags.SERVICE_ACCOUNT: { 'type': str, 'help': ('Dataproc cluster Service Account used to create the resource'), }, flags.CONSTRAINT: { 'type': bool, 'help': ('Checks if the Dataproc cluster has an enforced organization' ' policy constraint'), }, flags.STACKDRIVER: { 'type': str, 'help': ('Checks if stackdriver logging is enabled for further' ' troubleshooting'), 'default': True, }, flags.ZONE: { 'type': str, 'help': 'Dataproc cluster Zone', }, flags.NETWORK: { 'type': str, 'help': 'Dataproc cluster Network', 'deprecated': True, 'new_parameter': 'dataproc_network', }, flags.DATAPROC_NETWORK: { 'type': str, 'help': 'Dataproc cluster Network', }, flags.SUBNETWORK: { 'type': str, 'help': 'Dataproc cluster Subnetwork', }, flags.INTERNAL_IP_ONLY: { 'type': bool, 'help': ('Checks if the Dataproc cluster has been created with only' ' Internal IP'), }, flags.START_TIME: { 'type': datetime, 'help': 'Start time of the issue', }, flags.END_TIME: { 'type': datetime, 'help': 'End time of the issue', }, flags.CROSS_PROJECT_ID: { 'type': str, 'help': ('Cross Project ID, where service account is located if it is not' ' in the same project as the Dataproc cluster'), }, flags.HOST_VPC_PROJECT_ID: { 'type': str, 'help': 'Project ID of the Shared VPC network', }, } def legacy_parameter_handler(self, parameters): """Handles legacy parameters.""" if flags.CLUSTER_NAME in parameters: parameters[flags.DATAPROC_CLUSTER_NAME] = parameters.pop( flags.CLUSTER_NAME) if flags.NETWORK in parameters: parameters[flags.DATAPROC_NETWORK] = parameters.pop(flags.NETWORK) def build_tree(self): """Describes step relationships.""" start = ClusterCreationStart() self.add_start(start) cluster_details_gateway = ClusterDetailsDependencyGateway() self.add_step(parent=start, child=cluster_details_gateway) self.add_end(ClusterCreationEnd()) class ClusterCreationStart(runbook.StartStep): """Initiates diagnostics for SSH Cluster Creation issues. This step interacts with the Dataproc API to get the cluster for investigation. When the cluster is found and it is in `ERROR` state, the cluster details are then used to set variables to be used by the subsequent child steps. """ def execute(self): """ Initiating diagnostics for Cluster Creation issues. """ project = crm.get_project(op.get(flags.PROJECT_ID)) op.put('cluster_exists', False) try: cluster = dataproc.get_cluster(project=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME)) except utils.GcpApiError as err: op.add_skipped( project, reason= (f'Could not get cluster {op.get(flags.DATAPROC_CLUSTER_NAME)}' f'in region {op.get(flags.REGION)} and project {op.get(flags.PROJECT_ID)}' f'due to {err}')) else: if cluster: op.put('cluster_exists', True) if cluster.status == 'ERROR': op.info(f'Cluster {op.get(flags.DATAPROC_CLUSTER_NAME)} in project' \ f'{op.get(flags.PROJECT_ID)} is in error state') # set parameters required for the next stepsruinvestigates that require cluster details if not cluster.is_stackdriver_logging_enabled: op.put(flags.STACKDRIVER, cluster.is_stackdriver_logging_enabled) if not op.get(flags.SERVICE_ACCOUNT): if cluster.vm_service_account_email: op.put(flags.SERVICE_ACCOUNT, cluster.vm_service_account_email) op.info(f'Service Account:{cluster.vm_service_account_email}') if not op.get(flags.DATAPROC_NETWORK): if cluster.gce_network_uri: op.put(flags.DATAPROC_NETWORK, cluster.gce_network_uri) op.info(f'Network: {cluster.gce_network_uri}') if network.get_network_from_url(op.get(flags.DATAPROC_NETWORK)): op.put( flags.HOST_VPC_PROJECT_ID, network.get_network_from_url(op.get( flags.DATAPROC_NETWORK)).project_id, ) else: op.add_skipped( project, reason= (f'Cluster {op.get(flags.DATAPROC_CLUSTER_NAME)} in project ' f'{op.get(flags.PROJECT_ID)} is not in error state due to cluster ' f'creation issues, please choose another issue category to investigate.' )) class ClusterCreationStockout(runbook.Step): """Check for cluster creation due to stockout""" def execute(self): """Check for stockout entries in Cloud logging""" stockout_error_logs = [ 'ZONE_RESOURCE_POOL_EXHAUSTED', 'does not have enough resources available to fulfill the request', 'resource pool exhausted', 'does not exist in zone', ] message_filter = '"' + '" OR "'.join(stockout_error_logs) + '"' check_stockout_issue = logs_gs.CheckIssueLogEntry() check_stockout_issue.project_id = op.get(flags.PROJECT_ID) check_stockout_issue.filter_str = get_log_filter( cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME), message_filter=f'protoPayload.status.message=~({message_filter})', log_id='cloudaudit.googleapis.com/activity', ) check_stockout_issue.template = 'logging::dataproc_cluster_stockout' check_stockout_issue.resource_name = op.get(flags.DATAPROC_CLUSTER_NAME) check_stockout_issue.issue_pattern = stockout_error_logs self.add_child(child=check_stockout_issue) class ClusterCreationQuota(runbook.Step): """Check for cluster creation errors due to insufficient quota""" def execute(self): """Check for quota entries in Cloud logging""" quota_log_match_str = 'Insufficient .* quota' check_quota_issues = logs_gs.CheckIssueLogEntry() check_quota_issues.project_id = op.get(flags.PROJECT_ID) check_quota_issues.filter_str = get_log_filter( cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME), message_filter=f'protoPayload.status.message=~"{quota_log_match_str}"', log_id='cloudaudit.googleapis.com/activity', ) check_quota_issues.template = 'logging::dataproc_cluster_quota' check_quota_issues.resource_name = op.get(flags.DATAPROC_CLUSTER_NAME) check_quota_issues.issue_pattern = [quota_log_match_str] self.add_child(child=check_quota_issues) class ClusterDetailsDependencyGateway(runbook.Gateway): """Decision point for child steps that require cluster details and those that dont. Uses cluster details from the Dataproc API set in the start step to reduce scope of errors from invalid input """ def execute(self): """Execute child steps depending on if they require details from existing cluster or not""" cluster_exists = op.get('cluster_exists', False) if cluster_exists: # add child steps that depend on cluster details from the API self.add_child(CheckInitScriptFailure()) self.add_child(CheckClusterNetwork()) self.add_child(InternalIpGateway()) self.add_child(ServiceAccountExists()) self.add_child(CheckSharedVPCRoles()) else: # add child steps that do not depend on cluster details from the API self.add_child(ClusterCreationQuota()) self.add_child(ClusterCreationStockout()) class CheckClusterNetwork(runbook.Step): """Verify that the nodes in the cluster can communicate with each other. The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must be able to communicate with each other using ICMP, TCP (all ports), and UDP (all ports) protocols. """ template = 'network::cluster_network' def execute(self): """Verify network connectivity among nodes in the cluster.""" # Gathering cluster details. cluster = dataproc.get_cluster(project=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME)) # Skip this step if the cluster does not exist if cluster is None: op.add_uncertain( cluster, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION), ) else: # Add the zone of the cluster if not op.get(flags.ZONE): if cluster.zone: op.put(flags.ZONE, cluster.zone) op.info(f'Zone: {cluster.zone}') # retrieve the zone from the cluster cluster_zone = op.get(flags.ZONE) if cluster_zone is None: op.add_skipped( cluster, reason=('Zone cannot be retrieved from the cluster. Zone:' f' {cluster_zone}'), ) return # Skip DPGKE clusters if not cluster.is_gce_cluster: op.add_skipped( cluster, reason='This is a Dataproc on GKE cluster, skipping this step.', ) # Skip single node clusters if cluster.is_single_node_cluster: op.add_skipped( cluster, reason='This is a single node cluster, skipping this step.') # target (master node or master node 0) if cluster.is_ha_cluster: target = gce.get_instance( project_id=op.get(flags.PROJECT_ID), zone=cluster_zone, instance_name=f'{cluster.name}-m-0', ) else: target = gce.get_instance( project_id=op.get(flags.PROJECT_ID), zone=cluster_zone, instance_name=f'{cluster.name}-m', ) target_ip = target.get_network_ip_for_instance_interface( cluster.gce_network_uri) # source (worker node 0) source = gce.get_instance( project_id=op.get(flags.PROJECT_ID), zone=cluster_zone, instance_name=f'{cluster.name}-w-0', ) source_ip = source.get_network_ip_for_instance_interface( cluster.gce_network_uri) is_connectivity_fine = True # run connectivity tests between master and worker op.info('Running connectivity tests.') # ICMP op.info('ICMP test.') connectivity_test_result = networkmanagement.run_connectivity_test( project_id=op.get(flags.PROJECT_ID), src_ip=str(source_ip)[:-3], dest_ip=str(target_ip)[:-3], dest_port=None, protocol='ICMP', ) op.info('Connectivity test result: ' + connectivity_test_result['reachabilityDetails']['result']) if (connectivity_test_result['reachabilityDetails']['result'] != 'REACHABLE'): is_connectivity_fine = False for trace in connectivity_test_result['reachabilityDetails']['traces']: op.info('Endpoint details: ' + json.dumps(trace['endpointInfo'], indent=2)) last_step = None for step in trace['steps']: last_step = step op.info('Last step: ' + json.dumps(last_step, indent=2)) op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2)) op.info('ICMP traffic must be allowed. Check the result of the' ' connectivity ' + 'test to verify what is blocking the traffic, ' + 'in particular Last step and Full list of steps.') # TCP op.info('TCP test.') connectivity_test_result = networkmanagement.run_connectivity_test( project_id=op.get(flags.PROJECT_ID), src_ip=str(source_ip)[:-3], dest_ip=str(target_ip)[:-3], dest_port=8088, protocol='TCP', ) op.info('Connectivity test result: ' + connectivity_test_result['reachabilityDetails']['result']) if (connectivity_test_result['reachabilityDetails']['result'] != 'REACHABLE'): is_connectivity_fine = False for trace in connectivity_test_result['reachabilityDetails']['traces']: op.info('Endpoint details: ' + json.dumps(trace['endpointInfo'], indent=2)) last_step = None for step in trace['steps']: last_step = step op.info('Last step: ' + json.dumps(last_step, indent=2)) op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2)) op.info( 'TCP traffic must be allowed. Check the result of the connectivity' ' test' + 'to verify what is blocking the traffic, ' + 'in particular Last step and Full list of steps.') # UCP op.info('UDP test.') connectivity_test_result = networkmanagement.run_connectivity_test( project_id=op.get(flags.PROJECT_ID), src_ip=str(source_ip)[:-3], dest_ip=str(target_ip)[:-3], dest_port=8088, protocol='UDP', ) op.info('Connectivity test result: ' + connectivity_test_result['reachabilityDetails']['result']) if (connectivity_test_result['reachabilityDetails']['result'] != 'REACHABLE'): is_connectivity_fine = False for trace in connectivity_test_result['reachabilityDetails']['traces']: op.info('Endpoint details: ' + json.dumps(trace['endpointInfo'], indent=2)) last_step = None for step in trace['steps']: last_step = step op.info('Last step: ' + json.dumps(last_step, indent=2)) op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2)) op.info( 'UDP traffic must be allowed. Check the result of the connectivity' ' test ' + 'to verify what is blocking the traffic, ' + 'in particular Last step and Full list of steps.') if is_connectivity_fine: op.add_ok(cluster, op.prep_msg(op.SUCCESS_REASON, cluster_name=cluster.name)) else: op.add_failed( cluster, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=cluster.name), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) class InternalIpGateway(runbook.Gateway): """Check if the cluster is using internal IP only. Check if the Dataproc cluster that is isolated from the public internet whose VM instances communicate over a private IP subnetwork (cluster VMs are not assigned public IP addresses). """ def execute(self): """Checking if the cluster is using internal IP only.""" # Gathering cluster details. cluster = dataproc.get_cluster(project=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME)) is_internal_ip_only = None # If cluster cannot be found, gather details from flags if cluster is None: is_internal_ip_only = op.get(flags.INTERNAL_IP_ONLY) if is_internal_ip_only is None: op.add_skipped( cluster, 'The cluster and the internalIpOnly config cannot be found,' ' skipping this step. ' + 'Please provide internal_ip_only as input parameter ' + 'if the cluster is deleted or keep the cluster in error state.', ) return subnetwork_uri = op.get(flags.SUBNETWORK) if subnetwork_uri is None: op.add_skipped( cluster, 'The cluster and the subnetworkUri config cannot be found, skipping' ' this step. ' 'Please provide subnetwork_uri as input parameter ' 'if the cluster is deleted or keep the cluster in error state.', ) return else: is_internal_ip_only = cluster.is_internal_ip_only subnetwork_uri = cluster.gce_subnetwork_uri # Add the related configs of the cluster if is_internal_ip_only is not None and subnetwork_uri is not None: # Add the internal IP config of the cluster if not op.get(flags.INTERNAL_IP_ONLY): if cluster.is_internal_ip_only is not None: op.put(flags.INTERNAL_IP_ONLY, cluster.is_internal_ip_only) op.info(f'Internal IP only: {cluster.is_internal_ip_only}') # Add the subnetwork of the cluster if not op.get(flags.SUBNETWORK): op.put(flags.SUBNETWORK, subnetwork_uri) op.add_ok(cluster, reason=f'Subnetwork: {subnetwork_uri}') # If the cluster is in private subnet, check that PGA is enabled # otherwise end this step if is_internal_ip_only: self.add_child(child=CheckPrivateGoogleAccess()) else: op.add_ok(cluster, reason='The cluster is in a public subnet.') class CheckPrivateGoogleAccess(runbook.Step): """Check if the subnetwork of the cluster has private google access enabled. Checking if the subnetwork of the cluster has private google access enabled. """ template = 'network::private_google_access' def execute(self): """Checking if the subnetwork of the cluster has private google access enabled.""" # taking cluster details cluster = dataproc.get_cluster(project=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME)) subnetwork_uri = op.get(flags.SUBNETWORK) subnetwork_obj = network.get_subnetwork_from_url(subnetwork_uri) if subnetwork_obj.is_private_ip_google_access(): op.add_ok( cluster, reason=op.prep_msg(op.SUCCESS_REASON, subnetwork_uri=subnetwork_uri), ) else: op.add_failed( cluster, reason=op.prep_msg(op.FAILURE_REASON, subnetwork_uri=subnetwork_uri), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) class ServiceAccountExists(runbook.Gateway): """Verify service account and permissions in Dataproc cluster project or another project. Decides whether to check for service account roles - in CROSS_PROJECT_ID, if specified by customer - in PROJECT_ID """ template = 'permissions::projectcheck' def execute(self): """Checking service account project.""" sa_email = op.get(flags.SERVICE_ACCOUNT) project = crm.get_project(op.get(flags.PROJECT_ID)) op.info(op.get(flags.SERVICE_ACCOUNT)) if sa_email is None: op.add_skipped( project, reason='Service account not provided as input parameter', ) return sa_exists = iam.is_service_account_existing(email=sa_email, context=op.get_context()) cross_project_id = op.get(flags.CROSS_PROJECT_ID) # Only check in cross project when the flag is provided sa_exists_cross_project = False if cross_project_id: cross_project_context = op.get_context().copy_with( project_id=cross_project_id) sa_exists_cross_project = iam.is_service_account_existing( email=sa_email, context=cross_project_context) if sa_exists: op.info( 'VM Service Account associated with Dataproc cluster was found in the' ' same project') op.info('Checking permissions.') # Check for Service Account permissions sa_permission_check = iam_gs.IamPolicyCheck() sa_permission_check.project = op.get(flags.PROJECT_ID) sa_permission_check.principal = ( f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}') sa_permission_check.require_all = True sa_permission_check.roles = ['roles/dataproc.worker'] self.add_child(child=sa_permission_check) elif sa_exists_cross_project: op.info('VM Service Account associated with Dataproc cluster was found in' ' cross project') # Check if constraint is enforced op.info('Checking constraints on service account project.') orgpolicy_constraint_check = crm_gs.OrgPolicyCheck() orgpolicy_constraint_check.project = op.get(flags.CROSS_PROJECT_ID) orgpolicy_constraint_check.constraint = ( 'constraints/iam.disableCrossProjectServiceAccountUsage') orgpolicy_constraint_check.is_enforced = False self.add_child(orgpolicy_constraint_check) # Check Service Account roles op.info('Checking roles in service account project.') sa_permission_check = iam_gs.IamPolicyCheck() sa_permission_check.project = op.get(flags.CROSS_PROJECT_ID) sa_permission_check.principal = ( f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}') sa_permission_check.require_all = True sa_permission_check.roles = [ 'roles/iam.serviceAccountUser', 'roles/dataproc.worker', ] self.add_child(child=sa_permission_check) # Check Service Agent Service Account roles op.info('Checking service agent service account roles on service account' ' project.') # project = crm.get_project(op.get(flags.PROJECT_ID)) service_agent_sa = ( f'service-{project.number}@dataproc-accounts.iam.gserviceaccount.com') service_agent_permission_check = iam_gs.IamPolicyCheck() service_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID) service_agent_permission_check.principal = ( f'serviceAccount:{service_agent_sa}') service_agent_permission_check.require_all = True service_agent_permission_check.roles = [ 'roles/iam.serviceAccountUser', 'roles/iam.serviceAccountTokenCreator', ] self.add_child(child=service_agent_permission_check) # Check Compute Agent Service Account op.info('Checking compute agent service account roles on service account' ' project.') compute_agent_sa = ( f'service-{project.number}@compute-system.iam.gserviceaccount.com') compute_agent_permission_check = iam_gs.IamPolicyCheck() compute_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID) compute_agent_permission_check.principal = ( f'serviceAccount:{compute_agent_sa}') compute_agent_permission_check.require_all = True compute_agent_permission_check.roles = [ 'roles/iam.serviceAccountTokenCreator' ] self.add_child(child=compute_agent_permission_check) elif cross_project_id and not sa_exists_cross_project: op.add_failed( project, reason=op.prep_msg( op.FAILURE_REASON, service_account=op.get(flags.SERVICE_ACCOUNT), project_id=op.get(flags.PROJECT_ID), cross_project_id=cross_project_id, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_uncertain( project, reason=op.prep_msg( op.UNCERTAIN_REASON, service_account=op.get(flags.SERVICE_ACCOUNT), project_id=op.get(flags.PROJECT_ID), ), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION), ) class CheckSharedVPCRoles(runbook.Step): """Verify if dataproc cluster is using Shared VPC. Checks for missing roles. """ def execute(self): """Verify service account roles based on Shared VPC.""" project = crm.get_project(op.get(flags.PROJECT_ID)) if op.get(flags.HOST_VPC_PROJECT_ID) and (op.get(flags.HOST_VPC_PROJECT_ID) != op.get(flags.PROJECT_ID)): # Check Service Agent Service Account role: service_agent_sa = ( f'service-{project.number}@dataproc-accounts.iam.gserviceaccount.com') service_agent_vpc_permission_check = iam_gs.IamPolicyCheck() service_agent_vpc_permission_check.project = op.get( flags.HOST_VPC_PROJECT_ID) service_agent_vpc_permission_check.principal = ( f'serviceAccount:{service_agent_sa}') service_agent_vpc_permission_check.require_all = True service_agent_vpc_permission_check.roles = ['roles/compute.networkUser'] self.add_child(child=service_agent_vpc_permission_check) # Check Google APIs Service Account op.info('Checking Google APIs service account roles on host VPC project.') api_sa = f'{project.number}@cloudservices.gserviceaccount.com' api_vpc_permission_check = iam_gs.IamPolicyCheck() api_vpc_permission_check.project = op.get(flags.HOST_VPC_PROJECT_ID) api_vpc_permission_check.principal = f'serviceAccount:{api_sa}' api_vpc_permission_check.require_all = True api_vpc_permission_check.roles = ['roles/compute.networkUser'] self.add_child(child=api_vpc_permission_check) else: op.add_skipped(project, reason='Cluster is not using a Shared VPC network') class CheckInitScriptFailure(runbook.Step): """Verify if dataproc cluster init script failed. The initialization action provided during cluster creation failed to install. """ template = 'logs_related::cluster_init' def execute(self): """Verify Cluster init script failure.""" init_script_log_match = 'Initialization action failed' cluster_name = op.get(flags.DATAPROC_CLUSTER_NAME) project = crm.get_project(op.get(flags.PROJECT_ID)) log_search_filter = f"""resource.type="cloud_dataproc_cluster" jsonPayload.message=~"{init_script_log_match}" resource.labels.cluster_name="{cluster_name}" severity=ERROR log_id("google.dataproc.agent")""" log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=log_search_filter, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), ) if log_entries: op.add_failed( project, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_ok( project, reason=op.prep_msg( op.SUCCESS_REASON, cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME), project_id=op.get(flags.PROJECT_ID), ), ) class ClusterCreationEnd(runbook.EndStep): """The end step of the runbook. It points out all the failed steps to the user. """ def execute(self): """This is the end step of the runbook.""" if op.get('cluster_exists', False): op.info( """Please visit all the FAIL steps and address the suggested remediations. If the cluster is still not able to be provisioned successfully, run the runbook again and open a Support case. If you are missing Service Account permissions, but are not able to see the Service Agent Service Account go to the IAM page and check 'Include Google-provided role grants' """) else: op.info( f"""Some steps were skipped because cluster {op.get(flags.DATAPROC_CLUSTER_NAME)} could not be found in project {op.get(flags.PROJECT_ID)}. Most steps in this runbook require that the cluster is in `ERROR` state and has not been deleted. If the cluster was in `ERROR` and has been deleted, please create the cluster again and rerun this runbook before deleting the cluster to rule out any cluster creation issues.""" ) def get_log_filter( cluster_name, message_filter, log_id, ): """Returns log filter string for given parameters. Args: cluster_name: message_filter: log_id: """ log_search_filter = f""" resource.type="cloud_dataproc_cluster" {message_filter} resource.labels.cluster_name="{cluster_name}" severity=ERROR log_id("{log_id}") """ return log_search_filter ================================================ FILE: gcpdiag/runbook/dataproc/cluster_creation_test.py ================================================ # Copyright 2024 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. """Test class for dataproc/cluster-creation.""" import datetime import unittest from unittest import mock from gcpdiag import config, utils from gcpdiag.queries import apis_stub, crm, dataproc, gce from gcpdiag.runbook import dataproc as dataproc_rb from gcpdiag.runbook import op, snapshot_test_base from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.dataproc import cluster_creation, flags from gcpdiag.runbook.iam import generalized_steps as iam_gs from gcpdiag.runbook.logs import generalized_steps as logs_gs DUMMY_PROJECT_ID = 'gcpdiag-dataproc1-aaaa' class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = dataproc_rb runbook_name = 'dataproc/cluster-creation' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [ { 'project_id': DUMMY_PROJECT_ID, 'service_account': (f'saworker@{DUMMY_PROJECT_ID}.iam.gserviceaccount.com'), 'region': 'us-central1', 'dataproc_cluster_name': 'good', 'start_time': '2024-06-18T01:00:00Z', 'end_time': '2024-06-22T01:00:00Z', }, { 'project_id': DUMMY_PROJECT_ID, 'service_account': (f'saworker@{DUMMY_PROJECT_ID}.iam.gserviceaccount.com'), 'region': 'us-central1', 'dataproc_cluster_name': 'good', 'start_time': '2024-06-23T01:00:00Z', 'end_time': '2024-06-24T01:00:00Z', }, { 'project_id': DUMMY_PROJECT_ID, 'dataproc_cluster_name': 'test-deny-icmp', 'region': 'us-central1', 'start_time': '2024-06-18T01:00:00Z', 'end_time': '2024-06-22T01:00:00Z', }, { 'project_id': 'gcpdiag-dataproc2-aaaa', 'dataproc_cluster_name': 'cluster-quota-issues', 'region': 'us-central1', 'start_time': '2025-06-13T16:00:55Z', 'end_time': '2025-06-13T17:00:55Z', }, { 'project_id': 'gcpdiag-dataproc3-aaaa', 'dataproc_cluster_name': 'cluster-stockout-issues', 'region': 'us-central1', 'start_time': '2025-06-13T16:00:55Z', 'end_time': '2025-06-13T17:00:55Z', }, ] class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class ClusterCreationTest(unittest.TestCase): def test_legacy_parameter_handler(self): runbook = cluster_creation.ClusterCreation() parameters = { 'cluster_name': 'test-cluster', 'network': 'test-network', 'project_id': 'test-project', 'region': 'us-central1', } runbook.legacy_parameter_handler(parameters) self.assertNotIn('cluster_name', parameters) self.assertNotIn('network', parameters) self.assertIn('dataproc_cluster_name', parameters) self.assertIn('dataproc_network', parameters) self.assertEqual(parameters['dataproc_cluster_name'], 'test-cluster') self.assertEqual(parameters['dataproc_network'], 'test-network') class ClusterCreationBuildTreeTest(unittest.TestCase): @mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreation.add_step') @mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreation.add_start') @mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreation.add_end') @mock.patch('gcpdiag.runbook.op.get') def test_build_tree(self, mock_op_get, mock_add_end, mock_add_start, mock_add_step): mock_op_get.return_value = 'test_value' runbook = cluster_creation.ClusterCreation() runbook.build_tree() mock_add_start.assert_called_once() self.assertIsInstance(mock_add_start.call_args[0][0], cluster_creation.ClusterCreationStart) mock_add_step.assert_called_once() self.assertIsInstance( mock_add_step.call_args[1]['child'], cluster_creation.ClusterDetailsDependencyGateway, ) mock_add_end.assert_called_once() self.assertIsInstance(mock_add_end.call_args[0][0], cluster_creation.ClusterCreationEnd) class ClusterCreationStepTestBase(unittest.TestCase): """Base class for Cluster Creation step tests.""" def setUp(self): super().setUp() # 1. Patch get_api with the stub. self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) # 2. Create a mock interface to capture outputs self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() # 3. Instantiate a real Operator self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() # 4. Define standard parameters. self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.REGION: 'us-central1', flags.DATAPROC_CLUSTER_NAME: 'test-cluster', flags.SERVICE_ACCOUNT: None, flags.DATAPROC_NETWORK: None, flags.ZONE: None, flags.INTERNAL_IP_ONLY: None, flags.SUBNETWORK: None, flags.START_TIME: datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc), flags.END_TIME: datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc), flags.CROSS_PROJECT_ID: None, flags.HOST_VPC_PROJECT_ID: None, } self.operator.parameters = self.params self.mock_op_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put')) self.mock_op_put.side_effect = self.params.__setitem__ self.mock_dataproc_get_cluster = self.enterContext( mock.patch('gcpdiag.queries.dataproc.get_cluster', wraps=dataproc.get_cluster)) self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project', wraps=crm.get_project)) self.mock_gce_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance')) self.mock_iam_is_service_account_existing = self.enterContext( mock.patch('gcpdiag.queries.iam.is_service_account_existing')) self.mock_logs_realtime_query = self.enterContext( mock.patch('gcpdiag.queries.logs.realtime_query')) self.mock_network_get_network_from_url = self.enterContext( mock.patch('gcpdiag.queries.network.get_network_from_url')) self.mock_network_get_subnetwork_from_url = self.enterContext( mock.patch('gcpdiag.queries.network.get_subnetwork_from_url')) self.mock_networkmanagement_run_connectivity_test = self.enterContext( mock.patch('gcpdiag.queries.networkmanagement.run_connectivity_test')) self.mock_cluster = mock.Mock(spec=dataproc.Cluster) self.mock_cluster.name = 'test-cluster' self.mock_cluster.status = 'ERROR' self.mock_cluster.is_stackdriver_logging_enabled = True self.mock_cluster.vm_service_account_email = 'test-sa@domain.com' self.mock_cluster.gce_network_uri = 'test-network' self.mock_cluster.zone = 'us-central1-a' self.mock_cluster.is_gce_cluster = True self.mock_cluster.is_single_node_cluster = False self.mock_cluster.is_ha_cluster = False self.mock_cluster.is_internal_ip_only = False self.mock_cluster.gce_subnetwork_uri = 'test-subnetwork' class ClusterCreationStartTest(ClusterCreationStepTestBase): def test_cluster_in_error_state(self): self.params[flags.DATAPROC_CLUSTER_NAME] = 'test-deny-icmp' step = cluster_creation.ClusterCreationStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_put.assert_any_call('cluster_exists', True) self.mock_dataproc_get_cluster.assert_called_once() self.mock_interface.add_skipped.assert_not_called() def test_cluster_not_in_error_state(self): self.params[flags.DATAPROC_CLUSTER_NAME] = 'good' step = cluster_creation.ClusterCreationStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_put.assert_any_call('cluster_exists', True) self.mock_interface.add_skipped.assert_called_once() def test_cluster_api_error(self): self.mock_dataproc_get_cluster.side_effect = utils.GcpApiError('api error') step = cluster_creation.ClusterCreationStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_cluster_not_found(self): self.params[flags.DATAPROC_CLUSTER_NAME] = 'non-existent' self.mock_dataproc_get_cluster.return_value = None step = cluster_creation.ClusterCreationStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_put.assert_any_call('cluster_exists', False) def test_cluster_in_error_state_stackdriver_disabled(self): self.mock_cluster.status = 'ERROR' self.mock_cluster.is_stackdriver_logging_enabled = False self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.ClusterCreationStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_put.assert_any_call('cluster_exists', True) self.mock_op_put.assert_any_call(flags.STACKDRIVER, False) self.mock_dataproc_get_cluster.assert_called_once() self.mock_interface.add_skipped.assert_not_called() class ClusterCreationStockoutTest(ClusterCreationStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationStockout.add_child' )) def test_add_child_called(self): step = cluster_creation.ClusterCreationStockout() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_called_once() self.assertIsInstance(self.add_child_patch.call_args[1]['child'], logs_gs.CheckIssueLogEntry) class ClusterCreationQuotaTest(ClusterCreationStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationQuota.add_child' )) def test_add_child_called(self): step = cluster_creation.ClusterCreationQuota() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_called_once() self.assertIsInstance(self.add_child_patch.call_args[1]['child'], logs_gs.CheckIssueLogEntry) class ClusterDetailsDependencyGatewayTest(ClusterCreationStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.ClusterDetailsDependencyGateway.add_child' )) def test_cluster_exists(self): self.params['cluster_exists'] = True step = cluster_creation.ClusterDetailsDependencyGateway() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() steps_added = [call[0][0] for call in self.add_child_patch.call_args_list] self.assertTrue( any( isinstance(s, cluster_creation.CheckInitScriptFailure) for s in steps_added)) self.assertTrue( any( isinstance(s, cluster_creation.CheckClusterNetwork) for s in steps_added)) self.assertTrue( any( isinstance(s, cluster_creation.InternalIpGateway) for s in steps_added)) self.assertTrue( any( isinstance(s, cluster_creation.ServiceAccountExists) for s in steps_added)) self.assertTrue( any( isinstance(s, cluster_creation.CheckSharedVPCRoles) for s in steps_added)) def test_cluster_does_not_exist(self): self.params['cluster_exists'] = False step = cluster_creation.ClusterDetailsDependencyGateway() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() steps_added = [call[0][0] for call in self.add_child_patch.call_args_list] self.assertTrue( any( isinstance(s, cluster_creation.ClusterCreationQuota) for s in steps_added)) self.assertTrue( any( isinstance(s, cluster_creation.ClusterCreationStockout) for s in steps_added)) class CheckClusterNetworkTest(ClusterCreationStepTestBase): def setUp(self): super().setUp() self.mock_instance = mock.Mock(spec=gce.Instance) self.mock_instance.get_network_ip_for_instance_interface.return_value = ( '10.0.0.1/32') self.mock_gce_get_instance.return_value = self.mock_instance self.mock_networkmanagement_run_connectivity_test.return_value = { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } } def test_cluster_none(self): self.mock_dataproc_get_cluster.return_value = None step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_no_zone(self): self.mock_cluster.zone = None self.params[flags.ZONE] = None self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_dpgke_cluster(self): self.mock_cluster.is_gce_cluster = False self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_single_node_cluster(self): self.mock_cluster.is_single_node_cluster = True self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_connectivity_ok(self): self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual( self.mock_networkmanagement_run_connectivity_test.call_count, 3) self.mock_interface.add_ok.assert_called_once() def test_connectivity_failed_icmp(self): self.mock_networkmanagement_run_connectivity_test.side_effect = [ { 'reachabilityDetails': { 'result': 'UNREACHABLE', 'traces': [{ 'steps': [{ 'foo': 'bar' }], 'endpointInfo': {} }], } }, { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, ] self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_connectivity_failed_tcp(self): self.mock_networkmanagement_run_connectivity_test.side_effect = [ { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, { 'reachabilityDetails': { 'result': 'UNREACHABLE', 'traces': [{ 'steps': [{ 'foo': 'bar' }], 'endpointInfo': {} }], } }, { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, ] self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_connectivity_failed_udp(self): self.mock_networkmanagement_run_connectivity_test.side_effect = [ { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, { 'reachabilityDetails': { 'result': 'UNREACHABLE', 'traces': [{ 'steps': [{ 'foo': 'bar' }], 'endpointInfo': {} }], } }, ] self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_ha_cluster_connectivity_ok(self): self.mock_cluster.is_ha_cluster = True self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.CheckClusterNetwork() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_gce_get_instance.assert_any_call( project_id=DUMMY_PROJECT_ID, zone='us-central1-a', instance_name='test-cluster-m-0', ) self.assertEqual( self.mock_networkmanagement_run_connectivity_test.call_count, 3) self.mock_interface.add_ok.assert_called_once() class InternalIpGatewayTest(ClusterCreationStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.InternalIpGateway.add_child' )) def test_cluster_none_no_flag(self): self.mock_dataproc_get_cluster.return_value = None self.params[flags.INTERNAL_IP_ONLY] = None step = cluster_creation.InternalIpGateway() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_cluster_none_no_subnet(self): self.mock_dataproc_get_cluster.return_value = None self.params[flags.INTERNAL_IP_ONLY] = True self.params[flags.SUBNETWORK] = None step = cluster_creation.InternalIpGateway() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_internal_ip_only_true(self): self.mock_cluster.is_internal_ip_only = True self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.InternalIpGateway() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_called_once() self.assertIsInstance( self.add_child_patch.call_args[1]['child'], cluster_creation.CheckPrivateGoogleAccess, ) def test_internal_ip_only_false(self): self.mock_cluster.is_internal_ip_only = False self.mock_dataproc_get_cluster.return_value = self.mock_cluster step = cluster_creation.InternalIpGateway() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_not_called() self.assertEqual(self.mock_interface.add_ok.call_count, 2) class CheckPrivateGoogleAccessTest(ClusterCreationStepTestBase): def test_pga_enabled(self): self.mock_dataproc_get_cluster.return_value = self.mock_cluster mock_subnet = mock.Mock() mock_subnet.is_private_ip_google_access.return_value = True self.mock_network_get_subnetwork_from_url.return_value = mock_subnet step = cluster_creation.CheckPrivateGoogleAccess() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_pga_disabled(self): self.mock_dataproc_get_cluster.return_value = self.mock_cluster mock_subnet = mock.Mock() mock_subnet.is_private_ip_google_access.return_value = False self.mock_network_get_subnetwork_from_url.return_value = mock_subnet step = cluster_creation.CheckPrivateGoogleAccess() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() class ServiceAccountExistsTest(ClusterCreationStepTestBase): def setUp(self): super().setUp() self.params[flags.SERVICE_ACCOUNT] = 'test-sa@example.com' self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.ServiceAccountExists.add_child' )) def test_no_sa_email(self): self.params[flags.SERVICE_ACCOUNT] = None step = cluster_creation.ServiceAccountExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_sa_exists_same_project(self): self.params[flags.PROJECT_ID] = 'gcpdiag-iam1-aaaa' self.params[flags.SERVICE_ACCOUNT] = ( 'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') self.mock_iam_is_service_account_existing.return_value = True step = cluster_creation.ServiceAccountExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_called_once() self.assertIsInstance(self.add_child_patch.call_args[1]['child'], iam_gs.IamPolicyCheck) def test_sa_exists_cross_project(self): self.params[flags.PROJECT_ID] = 'gcpdiag-dataproc1-aaaa' self.params[flags.CROSS_PROJECT_ID] = 'gcpdiag-iam1-aaaa' self.params[flags.SERVICE_ACCOUNT] = ( 'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') self.mock_iam_is_service_account_existing.side_effect = [False, True] step = cluster_creation.ServiceAccountExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() steps_added = [] for call in self.add_child_patch.call_args_list: if call[0]: steps_added.append(call[0][0]) elif call[1] and 'child' in call[1]: steps_added.append(call[1]['child']) self.assertTrue( any(isinstance(s, crm_gs.OrgPolicyCheck) for s in steps_added)) self.assertEqual( sum(1 for s in steps_added if isinstance(s, iam_gs.IamPolicyCheck)), 3) def test_sa_not_exists_cross_project(self): self.params[flags.CROSS_PROJECT_ID] = 'gcpdiag-iam1-aaaa' self.params[flags.SERVICE_ACCOUNT] = ( 'non-existent@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') self.mock_iam_is_service_account_existing.return_value = False step = cluster_creation.ServiceAccountExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_sa_not_exists_no_cross_project(self): self.params[flags.SERVICE_ACCOUNT] = ( 'non-existent@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') self.mock_iam_is_service_account_existing.return_value = False step = cluster_creation.ServiceAccountExists() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() class CheckSharedVPCRolesTest(ClusterCreationStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.cluster_creation.CheckSharedVPCRoles.add_child' )) def test_shared_vpc(self): self.params[flags.HOST_VPC_PROJECT_ID] = 'host-project' self.params[flags.PROJECT_ID] = 'service-project' self.mock_crm_get_project.return_value = mock.Mock(number=123) step = cluster_creation.CheckSharedVPCRoles() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() steps_added = [ call[1]['child'] for call in self.add_child_patch.call_args_list ] self.assertEqual( sum(1 for s in steps_added if isinstance(s, iam_gs.IamPolicyCheck)), 2) def test_no_shared_vpc(self): self.params[flags.HOST_VPC_PROJECT_ID] = DUMMY_PROJECT_ID self.params[flags.PROJECT_ID] = DUMMY_PROJECT_ID step = cluster_creation.CheckSharedVPCRoles() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() class CheckInitScriptFailureTest(ClusterCreationStepTestBase): def test_failure_logs_found(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_creation.CheckInitScriptFailure() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_no_failure_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_creation.CheckInitScriptFailure() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() class ClusterCreationEndTest(ClusterCreationStepTestBase): def test_cluster_exists(self): self.params['cluster_exists'] = True step = cluster_creation.ClusterCreationEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_once() self.assertIn( 'Please visit all the FAIL steps', self.mock_interface.info.call_args[0][0], ) def test_cluster_does_not_exist(self): self.params['cluster_exists'] = False step = cluster_creation.ClusterCreationEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_once() self.assertIn('Some steps were skipped', self.mock_interface.info.call_args[0][0]) if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/dataproc/constants.py ================================================ # Copyright 2024 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. """Constants applicable relevant to only dataproc implementation.""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.constants import * PORT_EXHAUSTION_LOG = ( "Address already in use: Service 'sparkDriver' failed after 1000 retries") SW_PREEMPTION_LOG = ( '(requesting driver to remove executor | lost executor | Container' ' released on a lost node)') WORKER_DISK_USAGE_LOG = ( 'Most of the disks failed. 1/1 local-dirs usable space is below' ' utilization percentage/no more usable space') GC_PAUSE_LOG = 'Detected pause in JVM or host machine (eg GC)' KILL_ORPHANED_APP_LOG = 'Killing orphaned yarn application' PYTHON_IMPORT_LOG = 'ImportError: cannot import name' SHUFFLE_KILL_LOG = 'Executor is not registered' TOO_MANY_JOBS_LOG = 'Too many running jobs' NOT_ENOUGH_MEMORY_LOG = 'Not enough free memory' SYSTEM_MEMORY_LOG = 'High system memory usage' RATE_LIMIT_LOG = 'Rate limit' NOT_INITIALIZED_LOG = 'Master agent not initialized' NOT_ENOUGH_DISK_LOG = 'Disk space too low on Master' YARN_RUNTIME_LOG = ('YarnRuntimeException: Could not load history file .*' ' /mapreduce-job-history/intermediate-done/root') ERROR_403_LOG = ('com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.' 'googleapis.json.GoogleJsonResponseException: 403 Forbidden') ERROR_429_GCE_LOG = ( 'com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.http.' 'HttpResponseException: 429 Too Many Requests') ERROR_429_DRIVER_LOG = ( 'com.google.cloud.hadoop.services.repackaged.com.google.api.client.' 'googleapis.json.GoogleJsonResponseException: 429 Too Many Requests') ERROR_412_LOG = ( 'com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.' 'googleapis.json.GoogleJsonResponseException: 412 Precondition Failed') BQ_RESOURCE_LOG = ('com.google.cloud.spark.bigquery.repackaged.io.grpc.' 'StatusRuntimeException: RESOURCE_EXHAUSTED') ================================================ FILE: gcpdiag/runbook/dataproc/flags.py ================================================ # Copyright 2024 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. """Parameters applicable to Dataproc runbooks.""" # pylint: disable=wildcard-import, unused-wildcard-import from gcpdiag.runbook.gcp.flags import * from gcpdiag.runbook.iam.flags import * CLUSTER_UUID = 'cluster_uuid' CLUSTER_NAME = 'cluster_name' DATAPROC_CLUSTER_NAME = 'dataproc_cluster_name' DATAPROC_JOB_ID = 'dataproc_job_id' NETWORK = 'network' DATAPROC_NETWORK = 'dataproc_network' SUBNETWORK = 'subnetwork' REGION = 'region' STATUS = 'status' STACKDRIVER = 'stackdriver' CROSS_PROJECT_ID = 'cross_project' INTERNAL_IP_ONLY = 'internal_ip_only' CONSTRAINT = 'constraint' HOST_VPC_PROJECT_ID = 'host_vpc_project' IMAGE_VERSION = 'image_version' JOB_ID = 'job_id' JOB_EXIST = 'job_exist' JOB_OLDER_THAN_30_DAYS = 'job_older_than_30_days' ================================================ FILE: gcpdiag/runbook/dataproc/generalized_steps.py ================================================ # Copyright 2024 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. """Contains Generatlized Steps for Dataproc.""" import json from gcpdiag import runbook from gcpdiag.queries import crm, dataproc, gce, logs, networkmanagement from gcpdiag.runbook import op from gcpdiag.runbook.dataproc import flags class CheckLogsExist(runbook.Step): """Checks if specified logs messages exist in the Dataproc cluster. This step supports checking for the presence of a concrete log message. Attributes: log_message (str): log message that is being looked for. """ template = 'logs_related::default' log_message: str = '' cluster_name: str = '' cluster_uuid: str = '' project_id: str = '' def execute(self): """Check if investigated logs messages exist in the Dataproc cluster.""" if not self.project_id: project = crm.get_project(op.get(flags.PROJECT_ID)) else: project = crm.get_project(self.project_id) if op.get(flags.JOB_EXIST) == 'false': op.add_skipped(project, reason="Job doesn't exist, skipping this step.") return if op.get(flags.JOB_OLDER_THAN_30_DAYS): op.add_skipped( project, reason=('Job is older than 30 days, skipping this step. ' 'Please create a new job and run the runbook again.'), ) return if not (self.cluster_name and self.cluster_uuid): job = dataproc.get_job_by_jobid(op.get(flags.PROJECT_ID), op.get(flags.REGION), op.get(flags.DATAPROC_JOB_ID)) cluster_name = job.cluster_name cluster_uuid = job.cluster_uuid else: cluster_name = self.cluster_name cluster_uuid = self.cluster_uuid job_id = op.get(flags.JOB_ID) log_message = self.log_message log_search_filter = f"""resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="{cluster_name}" resource.labels.cluster_uuid="{cluster_uuid}" "{job_id}" jsonPayload.message=~"{log_message}" """ start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=log_search_filter, start_time=start_time, end_time=end_time, ) if log_entries: op.add_failed( project, reason=op.prep_msg(op.FAILURE_REASON, log=log_message, cluster_name=cluster_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_ok( project, reason=op.prep_msg( op.SUCCESS_REASON, log=log_message, cluster_name=cluster_name, ), ) class CheckClusterNetworkConnectivity(runbook.Step): """Verify that the nodes in the cluster can communicate with each other. The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must be able to communicate with each other using ICMP, TCP (all ports), and UDP (all ports) protocols. """ template = 'network::cluster_network' cluster_name: str = '' project_id: str = '' def execute(self): """Verify network connectivity among nodes in the cluster.""" # Gathering cluster details. if not self.project_id: project_id = op.get(flags.PROJECT_ID) else: project_id = self.project_id if not self.cluster_name: cluster_name = op.get(flags.DATAPROC_CLUSTER_NAME) else: cluster_name = self.cluster_name cluster = dataproc.get_cluster(cluster_name=cluster_name, region=op.get(flags.REGION), project=project_id) # Skip this step if the cluster does not exist if cluster is None: op.add_uncertain(cluster, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: # Add the zone of the cluster if not op.get(flags.ZONE): if cluster.zone: op.put(flags.ZONE, cluster.zone) # retrieve the zone from the cluster cluster_zone = op.get(flags.ZONE) if cluster_zone is None: op.add_skipped( cluster, reason=( 'Zone cannot be retrieved from the cluster.Please provide the' ' ZONE parameter in the runbook query'), ) return # Skip DPGKE clusters if not cluster.is_gce_cluster: op.add_skipped( cluster, reason='This is a Dataproc on GKE cluster, skipping this step.', ) # Skip single node clusters if cluster.is_single_node_cluster: op.add_skipped( cluster, reason='This is a single node cluster, skipping this step.') # target (master node or master node 0) if cluster.is_ha_cluster: target = gce.get_instance( project_id=op.get(flags.PROJECT_ID), zone=cluster_zone, instance_name=f'{cluster.name}-m-0', ) else: target = gce.get_instance( project_id=op.get(flags.PROJECT_ID), zone=cluster_zone, instance_name=f'{cluster.name}-m', ) target_ip = target.get_network_ip_for_instance_interface( cluster.gce_network_uri) # source (worker node 0) source = gce.get_instance( project_id=op.get(flags.PROJECT_ID), zone=cluster_zone, instance_name=f'{cluster.name}-w-0', ) source_ip = source.get_network_ip_for_instance_interface( cluster.gce_network_uri) is_connectivity_fine = True # run connectivity tests between master and worker op.info('Running connectivity tests.') # ICMP op.info('ICMP test.') connectivity_test_result = networkmanagement.run_connectivity_test( project_id=op.get(flags.PROJECT_ID), src_ip=str(source_ip)[:-3], dest_ip=str(target_ip)[:-3], dest_port=None, protocol='ICMP') op.info('Connectivity test result: ' + connectivity_test_result['reachabilityDetails']['result']) if connectivity_test_result['reachabilityDetails'][ 'result'] != 'REACHABLE': is_connectivity_fine = False for trace in connectivity_test_result['reachabilityDetails']['traces']: op.info('Endpoint details: ' + json.dumps(trace['endpointInfo'], indent=2)) last_step = None for step in trace['steps']: last_step = step op.info('Last step: ' + json.dumps(last_step, indent=2)) op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2)) op.info( 'ICMP traffic must be allowed. Check the result of the connectivity ' + 'test to verify what is blocking the traffic, ' + 'in particular Last step and Full list of steps.') # TCP op.info('TCP test.') connectivity_test_result = networkmanagement.run_connectivity_test( project_id=op.get(flags.PROJECT_ID), src_ip=str(source_ip)[:-3], dest_ip=str(target_ip)[:-3], dest_port=8088, protocol='TCP') op.info('Connectivity test result: ' + connectivity_test_result['reachabilityDetails']['result']) if connectivity_test_result['reachabilityDetails'][ 'result'] != 'REACHABLE': is_connectivity_fine = False for trace in connectivity_test_result['reachabilityDetails']['traces']: op.info('Endpoint details: ' + json.dumps(trace['endpointInfo'], indent=2)) last_step = None for step in trace['steps']: last_step = step op.info('Last step: ' + json.dumps(last_step, indent=2)) op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2)) op.info( 'TCP traffic must be allowed. Check the result of the connectivity test' + 'to verify what is blocking the traffic, ' + 'in particular Last step and Full list of steps.') # UCP op.info('UDP test.') connectivity_test_result = networkmanagement.run_connectivity_test( project_id=op.get(flags.PROJECT_ID), src_ip=str(source_ip)[:-3], dest_ip=str(target_ip)[:-3], dest_port=8088, protocol='UDP') op.info('Connectivity test result: ' + connectivity_test_result['reachabilityDetails']['result']) if connectivity_test_result['reachabilityDetails'][ 'result'] != 'REACHABLE': is_connectivity_fine = False for trace in connectivity_test_result['reachabilityDetails']['traces']: op.info('Endpoint details: ' + json.dumps(trace['endpointInfo'], indent=2)) last_step = None for step in trace['steps']: last_step = step op.info('Last step: ' + json.dumps(last_step, indent=2)) op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2)) op.info( 'UDP traffic must be allowed. Check the result of the connectivity test ' + 'to verify what is blocking the traffic, ' + 'in particular Last step and Full list of steps.') if is_connectivity_fine: op.add_ok(cluster, op.prep_msg(op.SUCCESS_REASON, cluster_name=cluster.name)) else: op.add_failed( cluster, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=cluster.name), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) ================================================ FILE: gcpdiag/runbook/dataproc/generalized_steps_test.py ================================================ # Copyright 2024 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. """Test class for dataproc.generalized_steps.""" import datetime import unittest from unittest import mock from gcpdiag.queries import apis_stub, crm, dataproc, gce from gcpdiag.runbook import op from gcpdiag.runbook.dataproc import flags, generalized_steps DUMMY_PROJECT_ID = 'gcpdiag-dataproc1-aaaa' class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class GeneralizedStepsTestBase(unittest.TestCase): """Base class for Dataproc generalized step tests.""" def setUp(self): super().setUp() # 1. Patch get_api with the stub. self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) # 2. Create a mock interface to capture outputs self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() # 3. Instantiate a real Operator self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() # 4. Define standard parameters. self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.REGION: 'us-central1', flags.DATAPROC_CLUSTER_NAME: 'test-cluster', flags.JOB_ID: 'test-job', flags.DATAPROC_JOB_ID: 'test-dataproc-job', flags.JOB_EXIST: 'true', flags.JOB_OLDER_THAN_30_DAYS: False, flags.START_TIME: datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc), flags.END_TIME: datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc), flags.ZONE: None, } self.operator.parameters = self.params self.mock_op_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put')) self.mock_op_put.side_effect = self.params.__setitem__ self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_dataproc_get_job_by_jobid = self.enterContext( mock.patch('gcpdiag.queries.dataproc.get_job_by_jobid')) self.mock_logs_realtime_query = self.enterContext( mock.patch('gcpdiag.queries.logs.realtime_query')) self.mock_dataproc_get_cluster = self.enterContext( mock.patch('gcpdiag.queries.dataproc.get_cluster')) self.mock_gce_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance')) self.mock_networkmanagement_run_connectivity_test = self.enterContext( mock.patch('gcpdiag.queries.networkmanagement.run_connectivity_test')) self.mock_project = mock.Mock(spec=crm.Project) self.mock_project.id = 'test-project' self.mock_crm_get_project.return_value = self.mock_project self.mock_job = mock.Mock(spec=dataproc.Job) self.mock_job.cluster_name = 'test-cluster' self.mock_job.cluster_uuid = 'test-uuid' self.mock_dataproc_get_job_by_jobid.return_value = self.mock_job self.mock_cluster = mock.Mock(spec=dataproc.Cluster) self.mock_cluster.name = 'test-cluster' self.mock_cluster.zone = 'us-central1-a' self.mock_cluster.is_gce_cluster = True self.mock_cluster.is_single_node_cluster = False self.mock_cluster.is_ha_cluster = False self.mock_cluster.gce_network_uri = 'test-network' self.mock_dataproc_get_cluster.return_value = self.mock_cluster class CheckLogsExistTest(GeneralizedStepsTestBase): def test_job_does_not_exist(self): self.params[flags.JOB_EXIST] = 'false' step = generalized_steps.CheckLogsExist(log_message='test message') with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_job_too_old(self): self.params[flags.JOB_OLDER_THAN_30_DAYS] = True step = generalized_steps.CheckLogsExist(log_message='test message') with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_logs_found_no_cluster_details(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = generalized_steps.CheckLogsExist(log_message='test message') with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_dataproc_get_job_by_jobid.assert_called_once() self.mock_logs_realtime_query.assert_called_once() self.mock_interface.add_failed.assert_called_once() def test_logs_not_found_no_cluster_details(self): self.mock_logs_realtime_query.return_value = [] step = generalized_steps.CheckLogsExist(log_message='test message') with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_dataproc_get_job_by_jobid.assert_called_once() self.mock_logs_realtime_query.assert_called_once() self.mock_interface.add_ok.assert_called_once() def test_logs_found_with_cluster_details(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = generalized_steps.CheckLogsExist( log_message='test message', cluster_name='test-cluster', cluster_uuid='test-uuid', ) with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_dataproc_get_job_by_jobid.assert_not_called() self.mock_logs_realtime_query.assert_called_once() self.mock_interface.add_failed.assert_called_once() def test_logs_found_with_project_id(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = generalized_steps.CheckLogsExist( log_message='test message', cluster_name='test-cluster', cluster_uuid='test-uuid', project_id='step-project', ) with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_crm_get_project.assert_called_with('step-project') self.mock_logs_realtime_query.assert_called_once() self.mock_interface.add_failed.assert_called_once() class CheckClusterNetworkConnectivityTest(GeneralizedStepsTestBase): def setUp(self): super().setUp() self.mock_instance = mock.Mock(spec=gce.Instance) self.mock_instance.get_network_ip_for_instance_interface.return_value = ( '10.0.0.1/32') self.mock_gce_get_instance.return_value = self.mock_instance self.mock_networkmanagement_run_connectivity_test.return_value = { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } } def test_cluster_none(self): self.mock_dataproc_get_cluster.return_value = None step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_no_zone(self): self.mock_cluster.zone = None step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_dpgke_cluster(self): self.mock_cluster.is_gce_cluster = False step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_single_node_cluster(self): self.mock_cluster.is_single_node_cluster = True step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_connectivity_ok(self): step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual( self.mock_networkmanagement_run_connectivity_test.call_count, 3) self.mock_interface.add_ok.assert_called_once() def test_connectivity_failed_icmp(self): self.mock_networkmanagement_run_connectivity_test.side_effect = [ { 'reachabilityDetails': { 'result': 'UNREACHABLE', 'traces': [{ 'steps': [{ 'foo': 'bar' }], 'endpointInfo': {} }], } }, { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, ] step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_connectivity_failed_tcp(self): self.mock_networkmanagement_run_connectivity_test.side_effect = [ { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, { 'reachabilityDetails': { 'result': 'UNREACHABLE', 'traces': [{ 'steps': [{ 'foo': 'bar' }], 'endpointInfo': {} }], } }, { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, ] step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_connectivity_failed_udp(self): self.mock_networkmanagement_run_connectivity_test.side_effect = [ { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, { 'reachabilityDetails': { 'result': 'REACHABLE', 'traces': [] } }, { 'reachabilityDetails': { 'result': 'UNREACHABLE', 'traces': [{ 'steps': [{ 'foo': 'bar' }], 'endpointInfo': {} }], } }, ] step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_ha_cluster_connectivity_ok(self): self.mock_cluster.is_ha_cluster = True step = generalized_steps.CheckClusterNetworkConnectivity() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_gce_get_instance.assert_any_call( project_id=DUMMY_PROJECT_ID, zone='us-central1-a', instance_name='test-cluster-m-0', ) self.assertEqual( self.mock_networkmanagement_run_connectivity_test.call_count, 3) self.mock_interface.add_ok.assert_called_once() def test_step_with_cluster_name_and_project_id(self): step = generalized_steps.CheckClusterNetworkConnectivity( cluster_name='step-cluster', project_id='step-project') with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_dataproc_get_cluster.assert_called_with( cluster_name='step-cluster', region='us-central1', project='step-project', ) self.assertEqual( self.mock_networkmanagement_run_connectivity_test.call_count, 3) self.mock_interface.add_ok.assert_called_once() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/dataproc/snapshots/cluster_creation.txt ================================================ dataproc_cluster_name=good,end_time=2024-06-22T01:00:00Z,project_id=gcpdiag- dataproc1-aaaa,region=us-central1,service_account=saworker@gcpdiag- dataproc1-aaaa.iam.gserviceaccount.com,start_time=2024-06-18T01:00:00Z dataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation. This runbook focuses on a range of potential problems for Dataproc clusters on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of cluster creation difficulties. The following areas are examined: - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the region/zone. - Quota availability: Checks for the quota availability in Dataproc cluster project. - Network configuration: Performs GCE Network Connectivity Tests, checks necessary firewall rules, external/internal IP configuration. - Cross-project configuration: Checks if the service account is not in the same project and reviews additional roles and organization policies enforcement. - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC network and evaluates if right service account roles are added. - Init actions script failures: Evaluates Logs Explorer logs regarding init actions script failures or timeouts. [START]: Initiating diagnostics for Cluster Creation issues. - gcpdiag-dataproc1-aaaa [SKIP] [REASON] Cluster good in project gcpdiag-dataproc1-aaaa is not in error state due to cluster creation issues, please choose another issue category to investigate. dataproc_cluster_name=good,end_time=2024-06-24T01:00:00Z,project_id=gcpdiag- dataproc1-aaaa,region=us-central1,service_account=saworker@gcpdiag- dataproc1-aaaa.iam.gserviceaccount.com,start_time=2024-06-23T01:00:00Z dataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation. This runbook focuses on a range of potential problems for Dataproc clusters on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of cluster creation difficulties. The following areas are examined: - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the region/zone. - Quota availability: Checks for the quota availability in Dataproc cluster project. - Network configuration: Performs GCE Network Connectivity Tests, checks necessary firewall rules, external/internal IP configuration. - Cross-project configuration: Checks if the service account is not in the same project and reviews additional roles and organization policies enforcement. - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC network and evaluates if right service account roles are added. - Init actions script failures: Evaluates Logs Explorer logs regarding init actions script failures or timeouts. [START]: Initiating diagnostics for Cluster Creation issues. - gcpdiag-dataproc1-aaaa [SKIP] [REASON] Cluster good in project gcpdiag-dataproc1-aaaa is not in error state due to cluster creation issues, please choose another issue category to investigate. dataproc_cluster_name=test-deny-icmp,end_time=2024-06-22T01:00:00Z,project_id=gcpdiag- dataproc1-aaaa,region=us-central1,start_time=2024-06-18T01:00:00Z dataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation. This runbook focuses on a range of potential problems for Dataproc clusters on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of cluster creation difficulties. The following areas are examined: - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the region/zone. - Quota availability: Checks for the quota availability in Dataproc cluster project. - Network configuration: Performs GCE Network Connectivity Tests, checks necessary firewall rules, external/internal IP configuration. - Cross-project configuration: Checks if the service account is not in the same project and reviews additional roles and organization policies enforcement. - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC network and evaluates if right service account roles are added. - Init actions script failures: Evaluates Logs Explorer logs regarding init actions script failures or timeouts. [START]: Initiating diagnostics for Cluster Creation issues. [INFO]: Cluster test-deny-icmp in projectgcpdiag-dataproc1-aaaa is in error state [INFO]: Service Account:12340005-compute@developer.gserviceaccount.com [INFO]: Network: https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network [GATEWAY]: Execute child steps depending on if they require details from existing cluster or not [AUTOMATED STEP]: Verify Cluster init script failure. - gcpdiag-dataproc1-aaaa [OK] [REASON] The initialization actions for cluster test-deny-icmp in project gcpdiag-dataproc1-aaaa completed successfully without errors. [AUTOMATED STEP]: Verify network connectivity among nodes in the cluster. [INFO]: Zone: us-central1-a [INFO]: Running connectivity tests. [INFO]: ICMP test. [INFO]: Connectivity test result: REACHABLE [INFO]: TCP test. [INFO]: Connectivity test result: REACHABLE [INFO]: UDP test. [INFO]: Connectivity test result: REACHABLE - gcpdiag-dataproc1-aaaa/us-central1/test-deny-icmp [OK] [REASON] The network communication among nodes in cluster test-deny-icmp is working. [GATEWAY]: Checking if the cluster is using internal IP only. [INFO]: Internal IP only: False - gcpdiag-dataproc1-aaaa/us-central1/test-deny-icmp [OK] [REASON] Subnetwork: https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet - gcpdiag-dataproc1-aaaa/us-central1/test-deny-icmp [OK] [REASON] The cluster is in a public subnet. [GATEWAY]: Checking service account project. [INFO]: 12340005-compute@developer.gserviceaccount.com [INFO]: VM Service Account associated with Dataproc cluster was found in the same project [INFO]: Checking permissions. [AUTOMATED STEP]: Verify that serviceAccount:12340005-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-dataproc1-aaaa. - projects/gcpdiag-dataproc1-aaaa [FAIL] [REASON] serviceAccount:12340005-compute@developer.gserviceaccount.com does not have at least one of the expected roles: roles/dataproc.worker. [REMEDIATION] Grant a role containing the missing permissions by following the instructions in [1]. Refer to [2] for a list of Google Cloud predefined roles. Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant. [1] [2] [AUTOMATED STEP]: Verify service account roles based on Shared VPC. - gcpdiag-dataproc1-aaaa [SKIP] [REASON] Cluster is not using a Shared VPC network [END]: This is the end step of the runbook. [INFO]: Please visit all the FAIL steps and address the suggested remediations. If the cluster is still not able to be provisioned successfully, run the runbook again and open a Support case. If you are missing Service Account permissions, but are not able to see the Service Agent Service Account go to the IAM page and check 'Include Google-provided role grants' dataproc_cluster_name=cluster-quota-issues,end_time=2025-06-13T17:00:55Z,project_id=gcpdiag- dataproc2-aaaa,region=us-central1,start_time=2025-06-13T16:00:55Z dataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation. This runbook focuses on a range of potential problems for Dataproc clusters on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of cluster creation difficulties. The following areas are examined: - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the region/zone. - Quota availability: Checks for the quota availability in Dataproc cluster project. - Network configuration: Performs GCE Network Connectivity Tests, checks necessary firewall rules, external/internal IP configuration. - Cross-project configuration: Checks if the service account is not in the same project and reviews additional roles and organization policies enforcement. - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC network and evaluates if right service account roles are added. - Init actions script failures: Evaluates Logs Explorer logs regarding init actions script failures or timeouts. [START]: Initiating diagnostics for Cluster Creation issues. [GATEWAY]: Execute child steps depending on if they require details from existing cluster or not [AUTOMATED STEP]: Check for quota entries in Cloud logging [AUTOMATED STEP]: Check for log entries matching problematic filter string - gcpdiag-dataproc2-aaaa [FAIL] [REASON] The cluster cluster-quota-issues in project gcpdiag-dataproc2-aaaa could not be created due to insufficient quota identified using query: resource.type="cloud_dataproc_cluster" protoPayload.status.message=~"Insufficient .* quota" resource.labels.cluster_name="cluster-quota-issues" severity=ERROR log_id("cloudaudit.googleapis.com/activity") timestamp >= "2025-06-13 16:00:55+00:00" AND timestamp <= "2025-06-13 17:00:55+00:00" [REMEDIATION] This issue occurs when the requested Dataproc cluster exceeds the project's available quota for resources such as CPU, disk space, or IP addresses. To resolve this issue: - Request additional quota [1] via the Google Cloud console. - Create the cluster in a different project. [1] [AUTOMATED STEP]: Check for stockout entries in Cloud logging [AUTOMATED STEP]: Check for log entries matching problematic filter string - gcpdiag-dataproc2-aaaa [UNCERTAIN] [REASON] No issues with stockouts identified for cluster cluster-quota-issues in project gcpdiag-dataproc2-aaaa using query: resource.type="cloud_dataproc_cluster" protoPayload.status.message=~("ZONE_RESOURCE_POOL_EXHAUSTED" OR "does not have enough resources available to fulfill the request" OR "resource pool exhausted" OR "does not exist in zone") resource.labels.cluster_name="cluster-quota-issues" severity=ERROR log_id("cloudaudit.googleapis.com/activity") timestamp >= "2025-06-13 16:00:55+00:00" AND timestamp <= "2025-06-13 17:00:55+00:00" . [REMEDIATION] 1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly. Query: resource.type="cloud_dataproc_cluster" protoPayload.status.message=~("ZONE_RESOURCE_POOL_EXHAUSTED" OR "does not have enough resources available to fulfill the request" OR "resource pool exhausted" OR "does not exist in zone") resource.labels.cluster_name="cluster-quota-issues" severity=ERROR log_id("cloudaudit.googleapis.com/activity") timestamp >= "2025-06-13 16:00:55+00:00" AND timestamp <= "2025-06-13 17:00:55+00:00" 2. Verify that the property `dataproc.logging.stackdriver.enable` has not been set to false for cluster cluster-quota-issues in project gcpdiag-dataproc2-aaaa: 3. Verify that logging for the cluster cluster-quota-issues has not been disabled due to cost management: [END]: This is the end step of the runbook. [INFO]: Some steps were skipped because cluster cluster-quota-issues could not be found in project gcpdiag-dataproc2-aaaa. Most steps in this runbook require that the cluster is in `ERROR` state and has not been deleted. If the cluster was in `ERROR` and has been deleted, please create the cluster again and rerun this runbook before deleting the cluster to rule out any cluster creation issues. dataproc_cluster_name=cluster-stockout-issues,end_time=2025-06-13T17:00:55Z,project_id=gcpdiag- dataproc3-aaaa,region=us-central1,start_time=2025-06-13T16:00:55Z dataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation. This runbook focuses on a range of potential problems for Dataproc clusters on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of cluster creation difficulties. The following areas are examined: - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the region/zone. - Quota availability: Checks for the quota availability in Dataproc cluster project. - Network configuration: Performs GCE Network Connectivity Tests, checks necessary firewall rules, external/internal IP configuration. - Cross-project configuration: Checks if the service account is not in the same project and reviews additional roles and organization policies enforcement. - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC network and evaluates if right service account roles are added. - Init actions script failures: Evaluates Logs Explorer logs regarding init actions script failures or timeouts. [START]: Initiating diagnostics for Cluster Creation issues. [GATEWAY]: Execute child steps depending on if they require details from existing cluster or not [AUTOMATED STEP]: Check for quota entries in Cloud logging [AUTOMATED STEP]: Check for log entries matching problematic filter string - gcpdiag-dataproc3-aaaa [UNCERTAIN] [REASON] No issues with insufficient quota identified for cluster cluster-stockout-issues in project gcpdiag-dataproc3-aaaa using query: resource.type="cloud_dataproc_cluster" protoPayload.status.message=~"Insufficient .* quota" resource.labels.cluster_name="cluster-stockout-issues" severity=ERROR log_id("cloudaudit.googleapis.com/activity") timestamp >= "2025-06-13 16:00:55+00:00" AND timestamp <= "2025-06-13 17:00:55+00:00" . [REMEDIATION] 1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly. Query: resource.type="cloud_dataproc_cluster" protoPayload.status.message=~"Insufficient .* quota" resource.labels.cluster_name="cluster-stockout-issues" severity=ERROR log_id("cloudaudit.googleapis.com/activity") timestamp >= "2025-06-13 16:00:55+00:00" AND timestamp <= "2025-06-13 17:00:55+00:00" 2. Verify that the property `dataproc.logging.stackdriver.enable` has not been set to false for cluster cluster-stockout-issues in project gcpdiag-dataproc3-aaaa: 3. Verify that logging for the cluster cluster-stockout-issues has not been disabled due to cost management: [AUTOMATED STEP]: Check for stockout entries in Cloud logging [AUTOMATED STEP]: Check for log entries matching problematic filter string - gcpdiag-dataproc3-aaaa [FAIL] [REASON] The cluster cluster-stockout-issues creation in project gcpdiag-dataproc3-aaaa failed due to insufficient resources in the selected zone/region. [REMEDIATION] A Dataproc cluster creation stockout occurs when the requested resources for cluster creation are currently not available within a specified Google Cloud zone or region. Resolution Steps: 1. Utilize Dataproc Auto Zone Placement: When creating your Dataproc cluster, avoid explicitly specifying a zone. Instead, leverage Dataproc's Auto Zone placement feature, which automatically selects an available zone with sufficient resources. 2. Review Capacity and Quota Management: If you are already employing Auto Zone placement and still encountering stockouts, it may indicate broader capacity or quota limitations. Consult the following resource for comprehensive strategies on managing capacity, quotas, and stockouts in Google Cloud. [END]: This is the end step of the runbook. [INFO]: Some steps were skipped because cluster cluster-stockout-issues could not be found in project gcpdiag-dataproc3-aaaa. Most steps in this runbook require that the cluster is in `ERROR` state and has not been deleted. If the cluster was in `ERROR` and has been deleted, please create the cluster again and rerun this runbook before deleting the cluster to rule out any cluster creation issues. ================================================ FILE: gcpdiag/runbook/dataproc/snapshots/spark_job_failures.txt ================================================ dataproc_cluster_name=job_failed,job_id=1234567891,project_id=gcpdiag-dataproc1-aaaa,region=us- central1 dataproc/spark-job-failures: Provides a comprehensive analysis of common issues which affects Dataproc Spark job failures. This runbook focuses on a range of potential problems for Dataproc Spark jobs on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of Spark job failures. The following areas are examined: - Cluster version supportability: Evaluates if the job was run on a supported cluster image version. - Permissions: Checks for permission related issues on the cluster and GCS bucket level. - OOM: Checks Out-Of-Memory issues for the Spark job on master or worker nodes. - Logs: Check other logs related to shuffle failures, broken pipe, YARN runtime exception, import failures. - Throttling: Checks if the job was throttled and provides the exact reason for it. - GCS Connector: Evaluates possible issues with the GCS Connector. - BigQuery Connector: Evaluates possible issues with BigQuery Connector, such as dependency version conflicts. [START]: Verify job exists in customer's project. [INFO]: Start time utc:2024-11-01 03:12:35.635169+00:00 [INFO]: End time utc:2024-11-08 03:12:35.635169+00:00 [GATEWAY]: Execute child steps depending on if the required details exist or not [COMPOSITE STEP]: Verify if job didn't failed with 'task not found' error. - gcpdiag-dataproc1-aaaa/1234567891/us-central1 [OK] [REASON] Job `1234567891` did not fail due to a 'task not found' error. Unable to find the cluster deletion log between 2024-11-01 03:12:35.635169+00:00 and 2024-11-08 03:12:35.635169+00:00. It could be some other issue.Please raise a support case to investigate further. [AUTOMATED STEP]: Verify if OOM has happened on master . - gcpdiag-dataproc1-aaaa [OK] [REASON] Didn't find logs messages related to Master OOM on the cluster: job-failed. [AUTOMATED STEP]: Verify if OOM has happened on worker nodes. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] Didn't find logs messages related to Worker OOM on the cluster: job-failed. [COMPOSITE STEP]: Check if secondary worker preemption has happened. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] Didn't find logs messages related to secondary worker preemption on the cluster: job-failed. [COMPOSITE STEP]: Check if secondary worker preemption has happened. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] NOTICE: No message available to parse for this step [COMPOSITE STEP]: Verify if the port exhaustion has happened. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "Address already in use: Service 'sparkDriver' failed after 1000 retries" were found on the cluster: job-failed. [COMPOSITE STEP]: Verify if the killing of Orphaned applications has happened. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "Killing orphaned yarn application" were found on the cluster: job-failed. [COMPOSITE STEP]: Check Python import failure. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "ImportError: cannot import name" were found on the cluster: job-failed. [COMPOSITE STEP]: Check Shuffle Service Kill logs and autoscaling & preemptibility. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No shuffle service failure detected in cluster job-failed [AUTOMATED STEP]: Checking autoscaling policies and graceful decommission timeouts. [COMPOSITE STEP]: Check if STW GC Pause has happened on the cluster. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "Detected pause in JVM or host machine (eg GC)" were found on the cluster: job-failed. [COMPOSITE STEP]: Check for CheckYarnRuntimeException logs. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "YarnRuntimeException: Could not load history file .* /mapreduce-job-history/intermediate-done/root" were found on the cluster: job-failed. [COMPOSITE STEP]: Check for Job Throttling messages in the logs. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "Too many running jobs" were found on the cluster: job-failed. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "Not enough free memory" were found on the cluster: job-failed. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "High system memory usage" were found on the cluster: job-failed. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "Rate limit" were found on the cluster: job-failed. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "Master agent not initialized" were found on the cluster: job-failed. [AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster. - gcpdiag-dataproc1-aaaa [OK] [REASON] No log messages related to "Disk space too low on Master" were found on the cluster: job-failed. [COMPOSITE STEP]: Check for non-default GCS connector. [AUTOMATED STEP]: Check for logs indicating shuffle failures. - gcpdiag-dataproc1-aaaa [OK] [REASON] No shuffle failure logs found for cluster job-failed [END]: This is the end step of the runbook. [INFO]: Please visit all the FAIL steps and address the suggested remediations. If the REMEDIATION suggestions were not able to solve your issue please open a Support case with failed job details: 1. Driver output 2. YARN application logs 3. (optional) Event logs, if you are facing a performance issue 4. (optional) If there was a successful run in the past, provide job id and logs of that run dataproc_cluster_name=job-not-failed,job_id=1234567890,project_id=gcpdiag-dataproc1-aaaa,region=us- central1 dataproc/spark-job-failures: Provides a comprehensive analysis of common issues which affects Dataproc Spark job failures. This runbook focuses on a range of potential problems for Dataproc Spark jobs on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of Spark job failures. The following areas are examined: - Cluster version supportability: Evaluates if the job was run on a supported cluster image version. - Permissions: Checks for permission related issues on the cluster and GCS bucket level. - OOM: Checks Out-Of-Memory issues for the Spark job on master or worker nodes. - Logs: Check other logs related to shuffle failures, broken pipe, YARN runtime exception, import failures. - Throttling: Checks if the job was throttled and provides the exact reason for it. - GCS Connector: Evaluates possible issues with the GCS Connector. - BigQuery Connector: Evaluates possible issues with BigQuery Connector, such as dependency version conflicts. [START]: Verify job exists in customer's project. - gcpdiag-dataproc1-aaaa [SKIP] [REASON] Job 1234567890 completed successfully.If the job experienced slow performance, potential causesinclude data skew, changes in data volume, or network latency.If performance issues persist, open a support case and share theSpark event log for both the fast and slow job runs. ================================================ FILE: gcpdiag/runbook/dataproc/spark_job_failures.py ================================================ # Copyright 2024 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. """Module containing Dataproc Spark job failures diagnostic tree and custom steps.""" from datetime import datetime, timedelta, timezone from packaging import version from gcpdiag import runbook from gcpdiag.queries import crm, dataproc, iam, logs from gcpdiag.runbook import op from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.dataproc import constants as dp_const from gcpdiag.runbook.dataproc import flags from gcpdiag.runbook.dataproc import generalized_steps as dp_gs from gcpdiag.runbook.iam import generalized_steps as iam_gs from gcpdiag.utils import GcpApiError class SparkJobFailures(runbook.DiagnosticTree): """Provides a comprehensive analysis of common issues which affects Dataproc Spark job failures. This runbook focuses on a range of potential problems for Dataproc Spark jobs on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of Spark job failures. The following areas are examined: - Cluster version supportability: Evaluates if the job was run on a supported cluster image version. - Permissions: Checks for permission related issues on the cluster and GCS bucket level. - OOM: Checks Out-Of-Memory issues for the Spark job on master or worker nodes. - Logs: Check other logs related to shuffle failures, broken pipe, YARN runtime exception, import failures. - Throttling: Checks if the job was throttled and provides the exact reason for it. - GCS Connector: Evaluates possible issues with the GCS Connector. - BigQuery Connector: Evaluates possible issues with BigQuery Connector, such as dependency version conflicts. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True, }, flags.JOB_ID: { 'type': str, 'help': 'The Job ID of the resource under investigation', 'deprecated': True, 'new_parameter': 'dataproc_job_id' }, flags.DATAPROC_JOB_ID: { 'type': str, 'help': 'The Job ID of the resource under investigation', 'required': True, }, flags.REGION: { 'type': str, 'help': 'Dataproc job/cluster Region', 'required': True, }, flags.ZONE: { 'type': str, 'help': 'Dataproc cluster Zone', }, flags.SERVICE_ACCOUNT: { 'type': str, 'help': ('Dataproc cluster Service Account used to create the resource'), }, flags.CROSS_PROJECT_ID: { 'type': str, 'help': ('Cross Project ID, where service account is located if it is not' ' in the same project as the Dataproc cluster'), }, flags.STACKDRIVER: { 'type': str, 'help': ('Checks if stackdriver logging is enabled for further' ' troubleshooting'), 'default': False, }, } def legacy_parameter_handler(self, parameters): if flags.JOB_ID in parameters: parameters[flags.DATAPROC_JOB_ID] = parameters.pop(flags.JOB_ID) def build_tree(self): """Dataproc Spark Job Failures debug tree.""" # Instantiate your step classes job_exist = JobStart() self.add_start(job_exist) job_details_gateway = JobDetailsDependencyGateway() self.add_step(parent=job_exist, child=job_details_gateway) self.add_end(SparkJobEnd()) class JobStart(runbook.StartStep): """Prepares the parameters required for the dataproc/spark_job_failures runbook. Ensures both project_id, region and job_id parameters are available. """ template = 'job::job_id_exists' def execute(self): """Verify job exists in customer's project.""" project = crm.get_project(op.get(flags.PROJECT_ID)) # uses the API to get the cluster information from the job id try: job = dataproc.get_job_by_jobid(project_id=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), job_id=op.get(flags.DATAPROC_JOB_ID)) except (AttributeError, GcpApiError, IndexError, TypeError, ValueError): op.add_skipped( project, reason=op.prep_msg( op.SKIPPED_REASON, project_id=project, job_id=op.get(flags.DATAPROC_JOB_ID), cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME), ), ) return if job.state == 'DONE': op.add_skipped( project, reason=( 'Job {} completed successfully.' 'If the job experienced slow performance, potential causes' 'include data skew, changes in data volume, or network latency.' 'If performance issues persist, open a support case and share the' 'Spark event log for both the fast and slow job runs.'.format( op.get(flags.DATAPROC_JOB_ID)))) return # Start date is the date for when the job was running start_time = datetime.strptime( job.status_history['RUNNING'], '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=timezone.utc) # End date is the start date + 7 days end_time = start_time + timedelta(days=7) # Saving cluster parameters op.put(flags.START_TIME, start_time) op.info(f'Start time utc:{start_time}') op.put(flags.END_TIME, end_time) op.info(f'End time utc:{end_time}') op.put(flags.CLUSTER_UUID, job.cluster_uuid) op.put(flags.DATAPROC_CLUSTER_NAME, job.cluster_name) if check_datetime_gap(op.get(flags.START_TIME), op.get(flags.END_TIME), 30): op.put(flags.JOB_OLDER_THAN_30_DAYS, True) else: op.put(flags.JOB_OLDER_THAN_30_DAYS, False) cluster = dataproc.get_cluster(cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID)) if cluster: op.put('cluster_exists', True) if not op.get(flags.SERVICE_ACCOUNT): #Saving Service Account parameter if cluster.vm_service_account_email: op.put(flags.SERVICE_ACCOUNT, cluster.vm_service_account_email) op.add_ok( project, reason=op.prep_msg( op.SUCCESS_REASON, project_id=project, job_id=op.get(flags.DATAPROC_JOB_ID), cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME), ), ) return class JobDetailsDependencyGateway(runbook.Gateway): """Decision point for child steps that require cluster details and those that dont. Uses cluster details from the Dataproc API set in the start step to reduce scope of errors from invalid input """ def execute(self): """Execute child steps depending on if the required details exist or not""" # add child steps that depend on job details from the API self.add_child(CheckTaskNotFound()) self.add_child(CheckMasterOOM()) self.add_child(CheckWorkerOOM()) self.add_child(CheckSWPreemption()) self.add_child(CheckWorkerDiskUsageIssue()) self.add_child(CheckPortExhaustion()) self.add_child(CheckKillingOrphanedApplication()) self.add_child(CheckPythonImportFailure()) self.add_child(CheckShuffleServiceKill()) self.add_child(CheckGCPause()) self.add_child(CheckYarnRuntimeException()) self.add_child(CheckJobThrottling()) self.add_child(CheckGCSConnector()) self.add_child(CheckShuffleFailures()) cluster_exists = op.get('cluster_exists', False) if cluster_exists: # add child steps that depend on cluster details from the API self.add_child(CheckStackdriverSetting()) self.add_child(CheckClusterVersion()) self.add_child(CheckPermissions()) self.add_child(dp_gs.CheckClusterNetworkConnectivity()) self.add_child(CheckBQConnector()) class CheckStackdriverSetting(runbook.Step): """Check if Stackdriver is enabled for the cluster. If the property is provided manually, It will be used if the cluster does not exist. """ template = 'dataproc_attributes::stackdriver' def execute(self): """Checking Stackdriver setting.""" # taking cluster details cluster = dataproc.get_cluster(cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID)) if cluster is not None: op.put(flags.STACKDRIVER, cluster.is_stackdriver_logging_enabled) if op.get(flags.STACKDRIVER): op.add_ok(cluster, reason=op.prep_msg(op.SUCCESS_REASON)) else: op.add_uncertain( cluster, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION), ) class CheckClusterVersion(runbook.Step): """Verify if the cluster version is supported. """ template = 'dataproc_attributes::unspported_image_version' def execute(self): """Verify cluster version.""" supported_versions = dataproc.extract_dataproc_supported_version() cluster = dataproc.get_cluster(cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID)) image_version = '.'.join(cluster.image_version.split('.')[:2]) op.put(flags.IMAGE_VERSION, image_version) if image_version in supported_versions: op.add_ok( cluster, reason=op.prep_msg(op.SUCCESS_REASON, cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME)), ) else: op.add_failed( cluster, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) class CheckTaskNotFound(runbook.CompositeStep): """Verify if dataproc job failed due to task not found.""" template = 'job::task_not_found' def execute(self): """Verify if job didn't failed with 'task not found' error.""" project = crm.get_project(op.get(flags.PROJECT_ID)) if op.get(flags.JOB_OLDER_THAN_30_DAYS): op.add_skipped( project, reason=('Job is older than 30 days'), ) return job = dataproc.get_job_by_jobid(op.get(flags.PROJECT_ID), op.get(flags.REGION), op.get(flags.DATAPROC_JOB_ID)) cluster_uuid = job.cluster_uuid start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) additional_message = ( f'Unable to find the cluster deletion log between' f' {start_time} and {end_time}. It could be some other issue.' f'Please raise a support case to investigate further.') log_search_filter = f"""resource.type="cloud_dataproc_cluster" resource.labels.cluster_uuid="{cluster_uuid}" protoPayload.methodName="google.cloud.dataproc.v1.ClusterController.DeleteCluster" """ log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=log_search_filter, start_time=start_time, end_time=end_time, ) if log_entries: last_log = log_entries.pop() user = last_log['protoPayload']['authenticationInfo']['principalEmail'] additional_message = f'User {user} deleted the cluster.' if job.details != 'Task not found': op.add_ok( job, reason=op.prep_msg( op.SUCCESS_REASON, job_id=op.get(flags.DATAPROC_JOB_ID), additional_message=additional_message, ), ) else: op.add_failed( job, reason=op.prep_msg( op.FAILURE_REASON, job_id=op.get(flags.DATAPROC_JOB_ID), additional_message=additional_message, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) class CheckPermissions(runbook.CompositeStep): """Check if the permissions are set correctly. """ template = 'permissions::permission_check' def execute(self): """Verify permissions .""" sa_email = op.get(flags.SERVICE_ACCOUNT) project = crm.get_project(op.get(flags.PROJECT_ID)) op.info(('Service Account:{}').format(sa_email)) if sa_email: sa_exists = iam.is_service_account_existing(email=sa_email, context=op.get_context()) cross_project_id = op.get(flags.CROSS_PROJECT_ID) sa_exists_cross_project = False if cross_project_id: cross_project_context = op.get_context().copy_with( project_id=cross_project_id) sa_exists_cross_project = iam.is_service_account_existing( email=sa_email, context=cross_project_context) else: sa_exists = False sa_exists_cross_project = False if sa_exists: op.info( 'VM Service Account associated with Dataproc cluster was found in the' ' same project') op.info('Checking permissions.') # Check for Service Account permissions sa_permission_check = iam_gs.IamPolicyCheck() sa_permission_check.project = op.get(flags.PROJECT_ID) sa_permission_check.principal = ( f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}') sa_permission_check.require_all = True sa_permission_check.roles = ['roles/dataproc.worker'] self.add_child(child=sa_permission_check) elif sa_exists_cross_project: op.info('VM Service Account associated with Dataproc cluster was found in' ' cross project') # Check if constraint is enforced op.info('Checking constraints on service account project.') orgpolicy_constraint_check = crm_gs.OrgPolicyCheck() orgpolicy_constraint_check.project = op.get(flags.CROSS_PROJECT_ID) orgpolicy_constraint_check.constraint = ( 'constraints/iam.disableCrossProjectServiceAccountUsage') orgpolicy_constraint_check.is_enforced = False self.add_child(orgpolicy_constraint_check) # Check Service Account roles op.info('Checking roles in service account project.') sa_permission_check = iam_gs.IamPolicyCheck() sa_permission_check.project = op.get(flags.CROSS_PROJECT_ID) sa_permission_check.principal = ( f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}') sa_permission_check.require_all = True sa_permission_check.roles = [ 'roles/iam.serviceAccountUser', 'roles/dataproc.worker', ] self.add_child(child=sa_permission_check) # Check Service Agent Service Account roles op.info('Checking service agent service account roles on service account' ' project.') # project = crm.get_project(op.get(flags.PROJECT_ID)) service_agent_sa = ( f'service-{project.number}@dataproc-accounts.iam.gserviceaccount.com') service_agent_permission_check = iam_gs.IamPolicyCheck() service_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID) service_agent_permission_check.principal = ( f'serviceAccount:{service_agent_sa}') service_agent_permission_check.require_all = True service_agent_permission_check.roles = [ 'roles/iam.serviceAccountUser', 'roles/iam.serviceAccountTokenCreator', ] self.add_child(child=service_agent_permission_check) # Check Compute Agent Service Account op.info('Checking compute agent service account roles on service account' ' project.') compute_agent_sa = ( f'service-{project.number}@compute-system.iam.gserviceaccount.com') compute_agent_permission_check = iam_gs.IamPolicyCheck() compute_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID) compute_agent_permission_check.principal = ( f'serviceAccount:{compute_agent_sa}') compute_agent_permission_check.require_all = True compute_agent_permission_check.roles = [ 'roles/iam.serviceAccountTokenCreator' ] self.add_child(child=compute_agent_permission_check) else: op.add_uncertain(project, reason=op.prep_msg(op.UNCERTAIN_REASON, service_account=op.get( flags.SERVICE_ACCOUNT), project_id=op.get(flags.PROJECT_ID)), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) class CheckMasterOOM(runbook.Step): """Check if OOM has happened on master. """ template = 'logs_related::master_oom' def execute(self): """Verify if OOM has happened on master .""" project = crm.get_project(op.get(flags.PROJECT_ID)) cluster_name = op.get(flags.DATAPROC_CLUSTER_NAME) cluster_uuid = op.get(flags.CLUSTER_UUID) job_id = op.get(flags.DATAPROC_JOB_ID) log_message = 'Task Not Acquired' log_search_filter = f"""resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="{cluster_name}" resource.labels.cluster_uuid="{cluster_uuid}" "{job_id}" jsonPayload.message=~"{log_message}" """ start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=log_search_filter, start_time=start_time, end_time=end_time, ) if log_entries: log_message_check_sigterm = ( 'Driver received SIGTERM/SIGKILL signal and exited with') log_search_filter_check_sigterm = f"""resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="{cluster_name}" resource.labels.cluster_uuid="{cluster_uuid}" "{job_id}" jsonPayload.message=~"{log_message_check_sigterm}" """ log_entries_check_sigterm = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=log_search_filter_check_sigterm, start_time=start_time, end_time=end_time, ) if log_entries_check_sigterm: op.add_failed( project, reason=op.prep_msg( op.FAILURE_REASON, log=log_message, cluster_name=cluster_name, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) return else: log_message_check_yarn_metrics = ( 'Exception calling Future.get() on YARN metrics rpc') log_search_filter_check_yarn_metrics = f"""resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="{cluster_name}" resource.labels.cluster_uuid="{cluster_uuid}" jsonPayload.message=~"{log_message_check_yarn_metrics}" """ log_entries_check_yarn_metrics = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=log_search_filter_check_yarn_metrics, start_time=start_time, end_time=end_time, ) if log_entries_check_yarn_metrics: op.add_failed( project, reason=op.prep_msg( op.FAILURE_REASON, cluster_name=cluster_name, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) return op.add_ok( project, reason=op.prep_msg( op.SUCCESS_REASON, cluster_name=cluster_name, ), ) class CheckWorkerOOM(runbook.Step): """Verify if OOM has happened on worker nodes.""" template = 'logs_related::worker_oom' def execute(self): """Verify if OOM has happened on worker nodes.""" check_worker_oom = dp_gs.CheckLogsExist() check_worker_oom.template = self.template check_worker_oom.log_message = ( '(Container exited with a non-zero exit code 143| Container exited with' ' a non-zero exit code 137|java.lang.OutOfMemoryError)') self.add_child(child=check_worker_oom) class CheckSWPreemption(runbook.CompositeStep): """Verify if secondary worker preemption has happened.""" template = 'logs_related::sw_preemption' def execute(self): """Check if secondary worker preemption has happened.""" check_sw_preemption_log = dp_gs.CheckLogsExist() check_sw_preemption_log.template = self.template check_sw_preemption_log.log_message = dp_const.SW_PREEMPTION_LOG self.add_child(child=check_sw_preemption_log) class CheckWorkerDiskUsageIssue(runbook.CompositeStep): """Verify if worker disk usage issue has happened.""" template = 'logs_related::woker_disk_usage' def execute(self): """Check if secondary worker preemption has happened.""" check_worker_disk_usage_log = dp_gs.CheckLogsExist() check_worker_disk_usage_log.template = self.template check_worker_disk_usage_log.log_message = dp_const.WORKER_DISK_USAGE_LOG self.add_child(child=check_worker_disk_usage_log) class CheckPortExhaustion(runbook.CompositeStep): """Verify if the port exhaustion has happened.""" template = 'logs_related::port_exhaustion' def execute(self): """Verify if the port exhaustion has happened.""" check_port_exhaustion_log = dp_gs.CheckLogsExist() check_port_exhaustion_log.template = 'logs_related::port_exhaustion' check_port_exhaustion_log.log_message = dp_const.PORT_EXHAUSTION_LOG self.add_child(child=check_port_exhaustion_log) class CheckKillingOrphanedApplication(runbook.CompositeStep): """Verify if the killing of Orphaned applications has happened.""" template = 'logs_related::kill_orphaned_application' def execute(self): """Verify if the killing of Orphaned applications has happened.""" check_kill_orphaned_application = dp_gs.CheckLogsExist() check_kill_orphaned_application.template = ( 'logs_related::kill_orphaned_application') check_kill_orphaned_application.log_message = dp_const.KILL_ORPHANED_APP_LOG self.add_child(child=check_kill_orphaned_application) class CheckPythonImportFailure(runbook.CompositeStep): """Check if the python import failure has happened.""" def execute(self): """Check Python import failure.""" check_python_import = dp_gs.CheckLogsExist() check_python_import.template = 'logs_related::check_python_import_failure' check_python_import.log_message = dp_const.PYTHON_IMPORT_LOG self.add_child(child=check_python_import) cluster = dataproc.get_cluster(cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID)) if cluster: if cluster.initialization_actions: op.info( 'The cluster has initialization actions. Please open a support case' ' and share more information of packages and versions of libraries' ' being fetched in your custom initialization actions scripts.') class CheckShuffleFailures(runbook.Step): """Check for logs indicating shuffle failures.""" template = 'logs_related::shuffle_failures' def execute(self): """Check for logs indicating shuffle failures.""" project = crm.get_project(op.get(flags.PROJECT_ID)) cluster_name = op.get(flags.DATAPROC_CLUSTER_NAME) cluster_uuid = op.get(flags.CLUSTER_UUID) log_search_filter = f"""resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="{cluster_name}" resource.labels.cluster_uuid="{cluster_uuid}" "{op.get(flags.DATAPROC_JOB_ID)}" ( ("ExecutorLostFailure" AND "Unable to create executor" AND "Unable to register with external shuffle server") OR ("java.io.IOException" AND "Exception while uploading shuffle data") OR ("Requesting driver to remove executor" AND "Container from a bad node") ) """ if op.get(flags.JOB_OLDER_THAN_30_DAYS): op.add_skipped( project, reason=('Job is older than 30 days'), ) return start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) log_entries = logs.realtime_query( project_id=project.id, filter_str=log_search_filter, start_time=start_time, end_time=end_time, ) if log_entries: cluster = dataproc.get_cluster(cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID)) root_causes = [] remediation = [] # Check for insufficient primary workers in EFM if (cluster.config.software_config.properties.get( 'dataproc:dataproc.enable.enhanced.flexibility.mode', 'false') == 'true'): if (cluster.number_of_primary_workers / cluster.number_of_secondary_workers < 1): root_causes.append('Insufficient primary workers in EFM.') remediation.append( 'Consider increasing the primary to secondary worker ratio.') # Check for older image and suggest EFM HCFS mode if (cluster.config.software_config.image_version.startswith('1.5') and cluster.config.software_config.properties.get( 'dataproc:efm.spark.shuffle') != 'hcfs'): remediation.append( 'Consider using EFM HCFS mode with GCS for older images.') # Check for small disk size disk_size_gb = cluster.config.worker_config.disk_config.boot_disk_size_gb if disk_size_gb < 500: root_causes.append( f'Small disk size ({disk_size_gb} GB) on cluster nodes.') remediation.append( 'Consider increasing disk size for better I/O performance.') # Check for low IO connection timeout spark_shuffle_io_timeout = cluster.config.software_config.properties.get( 'spark:spark.shuffle.io.connectionTimeout', 120) if spark_shuffle_io_timeout < 600: root_causes.append('Low IO connection timeout in Spark shuffle.') remediation.append( "Consider increasing 'spark:spark.shuffle.io.connectionTimeout' to" ' 600.') # Check for data skew and large partitions with PVM secondary workers if cluster.is_preemptible_secondary_workers: root_causes.append( 'Data skew and large partitions might be an issue with PVM' ' secondary workers.') remediation.append( 'Consider using smaller batches, increasing partition count, or' ' using a better partitioning key.') op.add_failed( crm.get_project(project.id), reason=op.prep_msg( op.FAILURE_REASON, cluster_name=cluster_name, root_causes=', '.join(root_causes), ), remediation=op.prep_msg(op.FAILURE_REMEDIATION, remediation=', '.join(remediation)), ) else: op.add_ok( crm.get_project(project.id), reason=op.prep_msg( op.SUCCESS_REASON, cluster_name=cluster_name, ), ) class CheckShuffleServiceKill(runbook.CompositeStep): """Verify the presence of shuffle service kill related logs. """ def execute(self): """Check Shuffle Service Kill logs and autoscaling & preemptibility.""" check_shuffle_kill = dp_gs.CheckLogsExist() check_shuffle_kill.template = 'logs_related::shuffle_service_kill' check_shuffle_kill.log_message = dp_const.SHUFFLE_KILL_LOG self.add_child(child=check_shuffle_kill) self.add_child(child=CheckAutoscalingPolicy()) class CheckAutoscalingPolicy(runbook.Step): """Verify autoscaling policies.""" template = 'logs_related::shuffle_service_kill_graceful_decommision_timeout' def execute(self): """Checking autoscaling policies and graceful decommission timeouts.""" project = crm.get_project(op.get(flags.PROJECT_ID)) cluster = dataproc.get_cluster( cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID), ) if cluster: autoscaling_policy_id = cluster.autoscaling_policy_id if autoscaling_policy_id: policy = dataproc.get_auto_scaling_policy( project.id, op.get(flags.REGION), cluster.autoscaling_policy_id, ) if not policy.has_graceful_decommission_timeout: op.add_failed( project, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_ok( project, reason=op.prep_msg( op.SUCCESS_REASON, cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME), ), ) class CheckPreemptible(runbook.Step): """Verify preemptibility.""" template = 'logs_related::shuffle_service_kill_preemptible_workers' def execute(self): """Checking worker count.""" project = crm.get_project(op.get(flags.PROJECT_ID)) cluster = dataproc.get_cluster(cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID)) total_worker_count = (cluster.number_of_primary_workers + cluster.number_of_secondary_workers) preemptible_worker_count = (cluster.number_of_primary_workers if cluster.is_preemptible_primary_workers else 0) preemptible_worker_count += (cluster.number_of_secondary_workers if cluster.is_preemptible_secondary_workers else 0) if preemptible_worker_count > 0: if preemptible_worker_count / total_worker_count >= 0.5: op.add_failed( project, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_ok( project, reason=op.prep_msg(op.SUCCESS_REASON, cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME)), ) class CheckGCPause(runbook.CompositeStep): """Verify if STW GC Pause has happened.""" template = 'logs_related::gc_pause' def execute(self): """Check if STW GC Pause has happened on the cluster.""" check_gc_pause = dp_gs.CheckLogsExist() check_gc_pause.template = 'logs_related::gc_pause' check_gc_pause.log_message = dp_const.GC_PAUSE_LOG self.add_child(child=check_gc_pause) class CheckJobThrottling(runbook.CompositeStep): """Verify the presence of Job Throttling logs.""" def execute(self): """Check for Job Throttling messages in the logs.""" # Check "Too many running jobs" too_many_jobs = dp_gs.CheckLogsExist() too_many_jobs.template = 'logs_related::too_many_jobs' too_many_jobs.log_message = dp_const.TOO_MANY_JOBS_LOG self.add_child(child=too_many_jobs) # Check "Not enough free memory" not_enough_memory = dp_gs.CheckLogsExist() not_enough_memory.template = 'logs_related::not_enough_memory' not_enough_memory.log_message = dp_const.NOT_ENOUGH_MEMORY_LOG self.add_child(child=not_enough_memory) # Check "High system memory usage" system_memory = dp_gs.CheckLogsExist() system_memory.template = 'logs_related::system_memory' system_memory.log_message = dp_const.SYSTEM_MEMORY_LOG self.add_child(child=system_memory) # Check "Rate limit" rate_limit = dp_gs.CheckLogsExist() rate_limit.template = 'logs_related::rate_limit' rate_limit.log_message = dp_const.RATE_LIMIT_LOG self.add_child(child=rate_limit) # Check "Master agent not initialized" not_initialized = dp_gs.CheckLogsExist() # not_initialized.template = 'logs_related::not_initialized' not_initialized.log_message = dp_const.NOT_INITIALIZED_LOG self.add_child(child=not_initialized) # Check "Disk space too low on Master" not_enough_disk = dp_gs.CheckLogsExist() not_enough_disk.template = 'logs_related::not_enough_disk' not_enough_disk.log_message = dp_const.NOT_ENOUGH_DISK_LOG self.add_child(child=not_enough_disk) class CheckYarnRuntimeException(runbook.CompositeStep): """Verify presence of CheckYarnRuntimeException logs.""" def execute(self): """Check for CheckYarnRuntimeException logs.""" yarn_runtime = dp_gs.CheckLogsExist() yarn_runtime.template = 'logs_related::yarn_runtime' yarn_runtime.log_message = dp_const.YARN_RUNTIME_LOG self.add_child(child=yarn_runtime) # Check if cx is using a non-default GCS connector: class CheckGCSConnector(runbook.CompositeStep): """Check for non-default GCS connector and for errors in logs connected to Cloud Storage.""" template = 'dataproc_attributes::gcs_connector' def execute(self): """Check for non-default GCS connector.""" cluster = dataproc.get_cluster(cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID)) # Checks if a cx provided value for GCS connector exists if cluster is not None: if cluster.is_custom_gcs_connector: op.add_uncertain( cluster, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION), ) else: op.add_ok(cluster, reason=op.prep_msg(op.SUCCESS_REASON)) # Check 403 error check_gcs_forbidden = dp_gs.CheckLogsExist() check_gcs_forbidden.template = 'logs_related::gcs_access_deny' check_gcs_forbidden.log_message = dp_const.ERROR_403_LOG self.add_child(child=check_gcs_forbidden) # Check 429 error due to GCE check_429_gce = dp_gs.CheckLogsExist() check_429_gce.template = 'logs_related::gcs_429_gce' check_429_gce.log_message = dp_const.ERROR_429_GCE_LOG self.add_child(child=check_429_gce) # Check 429 error connected to driver output check_429_driveroutput = dp_gs.CheckLogsExist() check_429_driveroutput.template = 'logs_related::gcs_429_driveroutput' check_429_driveroutput.log_message = dp_const.ERROR_429_DRIVER_LOG self.add_child(child=check_429_driveroutput) # Check 412 error check_412 = dp_gs.CheckLogsExist() check_412.template = 'logs_related::gcs_412' check_412.log_message = dp_const.ERROR_412_LOG self.add_child(child=check_412) class CheckBQConnector(runbook.CompositeStep): """Check for issues related to BigQuery connector such as version dependency conflicts.""" template = 'dataproc_attributes::bq_connector' def execute(self): """Check if non-default BigQuery connector version exists.""" cluster = dataproc.get_cluster(cluster_name=op.get( flags.DATAPROC_CLUSTER_NAME), region=op.get(flags.REGION), project=op.get(flags.PROJECT_ID)) job = dataproc.get_job_by_jobid(project_id=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), job_id=op.get(flags.DATAPROC_JOB_ID)) if cluster is not None: if version.parse(op.get(flags.IMAGE_VERSION)) > version.parse('2.0'): # op.info('Cluster higher than 2.0') # Extract BQ version from Dataproc Version page: bq_version = dataproc.extract_dataproc_bigquery_version( op.get(flags.IMAGE_VERSION)) if (not cluster.cluster_provided_bq_connector and not job.job_provided_bq_connector): op.add_ok( cluster, reason=op.prep_msg(op.SUCCESS_REASON, image_version=op.get(flags.IMAGE_VERSION)), ) elif ((cluster.cluster_provided_bq_connector or job.job_provided_bq_connector) != bq_version) or ( cluster.cluster_provided_bq_connector or job.job_provided_bq_connector == 'spark-bigquery-latest'): op.add_uncertain( cluster, reason=op.prep_msg(op.FAILURE_REASON, image_version=op.get(flags.IMAGE_VERSION)), remediation=op.prep_msg( op.FAILURE_REMEDIATION, image_version=op.get(flags.IMAGE_VERSION), bq_version=bq_version, ), ) # If image version <= 2.0 else: if (cluster.cluster_provided_bq_connector or job.job_provided_bq_connector): op.add_ok( cluster, reason=op.prep_msg(op.SUCCESS_REASON, image_version=op.get(flags.IMAGE_VERSION)), ) elif not (cluster.cluster_provided_bq_connector or job.job_provided_bq_connector): op.add_skipped(cluster, reason='The BigQuery connector is not used.') else: op.add_skipped(cluster, reason='Cluster does not exist, skipping this step.') check_bq_resource = dp_gs.CheckLogsExist() check_bq_resource.template = 'logs_related::bq_resource' check_bq_resource.log_message = dp_const.BQ_RESOURCE_LOG self.add_child(child=check_bq_resource) class SparkJobEnd(runbook.EndStep): """The end step of the runbook. Points out all the failed steps to the user. """ def execute(self): """This is the end step of the runbook.""" op.info( """Please visit all the FAIL steps and address the suggested remediations. If the REMEDIATION suggestions were not able to solve your issue please open a Support case with failed job details: 1. Driver output 2. YARN application logs 3. (optional) Event logs, if you are facing a performance issue 4. (optional) If there was a successful run in the past, provide job id and logs of that run""") def check_datetime_gap(date1, date2, gap_in_days): """Checks if two datetime objects are within a certain gap in days.""" return (date2 - date1).days > gap_in_days ================================================ FILE: gcpdiag/runbook/dataproc/spark_job_failures_test.py ================================================ # Copyright 2024 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. """Test class for dataproc/SparkJob.""" import datetime import unittest from unittest import mock from gcpdiag import config, utils from gcpdiag.queries import apis_stub, crm, dataproc from gcpdiag.runbook import dataproc as dataproc_rb from gcpdiag.runbook import op, snapshot_test_base from gcpdiag.runbook.dataproc import flags from gcpdiag.runbook.dataproc import generalized_steps as dp_gs from gcpdiag.runbook.dataproc import spark_job_failures from gcpdiag.runbook.iam import generalized_steps as iam_gs DUMMY_PROJECT_ID = 'gcpdiag-dataproc1-aaaa' class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = dataproc_rb runbook_name = 'dataproc/spark-job-failures' project_id = 'gcpdiag-dataproc1-aaaa' success_job_id = '1234567890' failed_job_id = '1234567891' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [ { 'project_id': DUMMY_PROJECT_ID, 'dataproc_cluster_name': 'job_failed', 'region': 'us-central1', 'job_id': failed_job_id, }, { 'project_id': DUMMY_PROJECT_ID, 'dataproc_cluster_name': 'job-not-failed', 'region': 'us-central1', 'job_id': success_job_id, }, ] class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): return f'{key}: {kwargs}' class SparkJobFailuresTest(unittest.TestCase): def test_legacy_parameter_handler(self): runbook = spark_job_failures.SparkJobFailures() parameters = {'job_id': 'test-job', 'project_id': 'test-project'} runbook.legacy_parameter_handler(parameters) self.assertNotIn('job_id', parameters) self.assertIn('dataproc_job_id', parameters) self.assertEqual(parameters['dataproc_job_id'], 'test-job') class SparkJobFailuresBuildTreeTest(unittest.TestCase): @mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.SparkJobFailures.add_step') @mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.SparkJobFailures.add_start') @mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.SparkJobFailures.add_end') @mock.patch('gcpdiag.runbook.op.get') def test_build_tree(self, mock_op_get, mock_add_end, mock_add_start, mock_add_step): mock_op_get.return_value = 'test_value' runbook = spark_job_failures.SparkJobFailures() runbook.build_tree() mock_add_start.assert_called_once() self.assertIsInstance(mock_add_start.call_args[0][0], spark_job_failures.JobStart) mock_add_step.assert_called_once() self.assertIsInstance( mock_add_step.call_args[1]['child'], spark_job_failures.JobDetailsDependencyGateway, ) mock_add_end.assert_called_once() self.assertIsInstance(mock_add_end.call_args[0][0], spark_job_failures.SparkJobEnd) class SparkJobFailuresStepTestBase(unittest.TestCase): """Base class for Spark Job Failures step tests.""" def setUp(self): super().setUp() # 1. Patch get_api with the stub. self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) # 2. Create a mock interface to capture outputs self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() # 3. Instantiate a real Operator self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() # 4. Define standard parameters. self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.REGION: 'us-central1', flags.DATAPROC_JOB_ID: '1234567891', 'cluster_exists': False, flags.JOB_OLDER_THAN_30_DAYS: False, flags.SERVICE_ACCOUNT: None, flags.CROSS_PROJECT_ID: None, flags.STACKDRIVER: False, 'start_time': datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc), 'end_time': datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params self.mock_op_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put')) self.mock_op_put.side_effect = self.params.__setitem__ self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_dataproc_get_job_by_jobid = self.enterContext( mock.patch('gcpdiag.queries.dataproc.get_job_by_jobid')) self.mock_dataproc_get_cluster = self.enterContext( mock.patch('gcpdiag.queries.dataproc.get_cluster')) self.mock_iam_is_service_account_existing = self.enterContext( mock.patch('gcpdiag.queries.iam.is_service_account_existing')) self.mock_logs_realtime_query = self.enterContext( mock.patch('gcpdiag.queries.logs.realtime_query')) self.mock_dp_extract_supported_version = self.enterContext( mock.patch( 'gcpdiag.queries.dataproc.extract_dataproc_supported_version')) self.mock_dp_get_autoscaling_policy = self.enterContext( mock.patch('gcpdiag.queries.dataproc.get_auto_scaling_policy')) self.mock_dp_extract_bq_version = self.enterContext( mock.patch( 'gcpdiag.queries.dataproc.extract_dataproc_bigquery_version')) self.mock_project = mock.Mock(spec=crm.Project) self.mock_project.id = 'test-project' self.mock_crm_get_project.return_value = self.mock_project self.mock_job = mock.Mock(spec=dataproc.Job) self.mock_job.state = 'ERROR' self.mock_job.status_history = {'RUNNING': '2025-01-01T10:00:00.000Z'} self.mock_job.cluster_uuid = 'test-uuid' self.mock_job.cluster_name = 'test-cluster' self.mock_job.details = '' self.mock_job.job_provided_bq_connector = None self.mock_dataproc_get_job_by_jobid.return_value = self.mock_job self.mock_cluster = mock.Mock(spec=dataproc.Cluster) self.mock_cluster.vm_service_account_email = 'test-sa@example.com' self.mock_cluster.is_stackdriver_logging_enabled = True self.mock_cluster.image_version = '2.0.0-debian10' self.mock_cluster.autoscaling_policy_id = None self.mock_cluster.number_of_primary_workers = 2 self.mock_cluster.number_of_secondary_workers = 0 self.mock_cluster.is_preemptible_primary_workers = False self.mock_cluster.is_preemptible_secondary_workers = False self.mock_cluster.is_custom_gcs_connector = False self.mock_cluster.cluster_provided_bq_connector = None self.mock_cluster.config = mock.Mock() self.mock_cluster.config.software_config.properties = {} self.mock_cluster.config.worker_config.disk_config.boot_disk_size_gb = 500 self.mock_cluster.config.software_config.image_version = '2.0.0-debian10' self.mock_dataproc_get_cluster.return_value = self.mock_cluster class JobStartTest(SparkJobFailuresStepTestBase): def test_job_start_ok(self): step = spark_job_failures.JobStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_dataproc_get_job_by_jobid.assert_called_once() self.mock_dataproc_get_cluster.assert_called_once() self.assertTrue(self.params['cluster_exists']) self.assertEqual(self.params[flags.SERVICE_ACCOUNT], 'test-sa@example.com') self.mock_interface.add_ok.assert_called_once() def test_job_start_done(self): self.mock_job.state = 'DONE' step = spark_job_failures.JobStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_job_start_api_error(self): self.mock_dataproc_get_job_by_jobid.side_effect = utils.GcpApiError( 'api error') step = spark_job_failures.JobStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_job_older_than_30_days(self): self.mock_job.status_history = {'RUNNING': '2024-01-01T10:00:00.000Z'} with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.check_datetime_gap', return_value=True, ): step = spark_job_failures.JobStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertTrue(self.params[flags.JOB_OLDER_THAN_30_DAYS]) class JobDetailsDependencyGatewayTest(SparkJobFailuresStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.JobDetailsDependencyGateway.add_child' )) def test_cluster_exists(self): self.params['cluster_exists'] = True step = spark_job_failures.JobDetailsDependencyGateway() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.add_child_patch.call_count, 19) def test_cluster_does_not_exist(self): self.params['cluster_exists'] = False step = spark_job_failures.JobDetailsDependencyGateway() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.add_child_patch.call_count, 14) class CheckStackdriverSettingTest(SparkJobFailuresStepTestBase): def test_stackdriver_enabled(self): self.mock_cluster.is_stackdriver_logging_enabled = True step = spark_job_failures.CheckStackdriverSetting() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertTrue(self.params[flags.STACKDRIVER]) self.mock_interface.add_ok.assert_called_once() def test_stackdriver_disabled(self): self.mock_cluster.is_stackdriver_logging_enabled = False step = spark_job_failures.CheckStackdriverSetting() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertFalse(self.params[flags.STACKDRIVER]) self.mock_interface.add_uncertain.assert_called_once() def test_cluster_none(self): self.mock_dataproc_get_cluster.return_value = None step = spark_job_failures.CheckStackdriverSetting() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() class CheckClusterVersionTest(SparkJobFailuresStepTestBase): def test_version_supported(self): self.mock_dp_extract_supported_version.return_value = ['2.0'] self.mock_cluster.image_version = '2.0.1-debian10' step = spark_job_failures.CheckClusterVersion() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_version_not_supported(self): self.mock_dp_extract_supported_version.return_value = ['1.5'] self.mock_cluster.image_version = '2.0.1-debian10' step = spark_job_failures.CheckClusterVersion() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() class CheckTaskNotFoundTest(SparkJobFailuresStepTestBase): def test_job_older_than_30_days(self): self.params[flags.JOB_OLDER_THAN_30_DAYS] = True step = spark_job_failures.CheckTaskNotFound() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_job_not_task_not_found(self): self.mock_job.details = 'some other error' self.mock_logs_realtime_query.return_value = [] step = spark_job_failures.CheckTaskNotFound() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_job_task_not_found_logs_found(self): self.mock_job.details = 'Task not found' self.mock_logs_realtime_query.return_value = [{ 'protoPayload': { 'authenticationInfo': { 'principalEmail': 'user@example.com' } } }] step = spark_job_failures.CheckTaskNotFound() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertIn( 'User user@example.com deleted the cluster', self.mock_interface.add_failed.call_args[1]['reason'], ) def test_job_task_not_found_logs_not_found(self): self.mock_job.details = 'Task not found' self.mock_logs_realtime_query.return_value = [] step = spark_job_failures.CheckTaskNotFound() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertIn( 'Unable to find the cluster deletion log', self.mock_interface.add_failed.call_args[1]['reason'], ) class CheckPermissionsTest(SparkJobFailuresStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckPermissions.add_child' )) def test_no_sa(self): self.params[flags.SERVICE_ACCOUNT] = None step = spark_job_failures.CheckPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_sa_exists_same_project(self): self.params[flags.PROJECT_ID] = 'gcpdiag-iam1-aaaa' self.params[flags.SERVICE_ACCOUNT] = ( 'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') self.mock_iam_is_service_account_existing.side_effect = [True] step = spark_job_failures.CheckPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.add_child_patch.assert_called_once() self.assertIsInstance(self.add_child_patch.call_args[1]['child'], iam_gs.IamPolicyCheck) def test_sa_exists_cross_project(self): self.params[flags.PROJECT_ID] = 'gcpdiag-dataproc1-aaaa' self.params[flags.CROSS_PROJECT_ID] = 'gcpdiag-iam1-aaaa' self.params[flags.SERVICE_ACCOUNT] = ( 'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com') self.mock_iam_is_service_account_existing.side_effect = [False, True] step = spark_job_failures.CheckPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.add_child_patch.call_count, 4) class CheckMasterOOMTest(SparkJobFailuresStepTestBase): def test_no_task_not_acquired(self): self.mock_logs_realtime_query.return_value = [] step = spark_job_failures.CheckMasterOOM() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_task_not_acquired_sigterm(self): self.mock_logs_realtime_query.side_effect = [ [{ 'log': 'task not acquired' }], [{ 'log': 'sigterm' }], ] step = spark_job_failures.CheckMasterOOM() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_task_not_acquired_yarn_metrics(self): self.mock_logs_realtime_query.side_effect = [ [{ 'log': 'task not acquired' }], [], [{ 'log': 'yarn metrics' }], ] step = spark_job_failures.CheckMasterOOM() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() class CheckCompositeStepTest(SparkJobFailuresStepTestBase): def test_check_worker_oom(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckWorkerOOM.add_child' ) as mock_add_child: step = spark_job_failures.CheckWorkerOOM() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_add_child.assert_called_once() self.assertIsInstance(mock_add_child.call_args[1]['child'], dp_gs.CheckLogsExist) def test_check_sw_preemption(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckSWPreemption.add_child' ) as mock_add_child: step = spark_job_failures.CheckSWPreemption() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_add_child.assert_called_once() self.assertIsInstance(mock_add_child.call_args[1]['child'], dp_gs.CheckLogsExist) def test_check_worker_disk_usage_issue(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckWorkerDiskUsageIssue.add_child' ) as mock_add_child: step = spark_job_failures.CheckWorkerDiskUsageIssue() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_add_child.assert_called_once() self.assertIsInstance(mock_add_child.call_args[1]['child'], dp_gs.CheckLogsExist) def test_check_port_exhaustion(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckPortExhaustion.add_child' ) as mock_add_child: step = spark_job_failures.CheckPortExhaustion() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_add_child.assert_called_once() self.assertIsInstance(mock_add_child.call_args[1]['child'], dp_gs.CheckLogsExist) def test_check_killing_orphaned_application(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckKillingOrphanedApplication.add_child' ) as mock_add_child: step = spark_job_failures.CheckKillingOrphanedApplication() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_add_child.assert_called_once() self.assertIsInstance(mock_add_child.call_args[1]['child'], dp_gs.CheckLogsExist) def test_check_python_import_failure(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckPythonImportFailure.add_child' ) as mock_add_child: self.mock_cluster.initialization_actions = True step = spark_job_failures.CheckPythonImportFailure() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_add_child.assert_called_once() self.assertIsInstance(mock_add_child.call_args[1]['child'], dp_gs.CheckLogsExist) self.mock_interface.info.assert_called_once() def test_check_gc_pause(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckGCPause.add_child' ) as mock_add_child: step = spark_job_failures.CheckGCPause() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_add_child.assert_called_once() self.assertIsInstance(mock_add_child.call_args[1]['child'], dp_gs.CheckLogsExist) def test_check_job_throttling(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckJobThrottling.add_child' ) as mock_add_child: step = spark_job_failures.CheckJobThrottling() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_add_child.call_count, 6) def test_check_yarn_runtime_exception(self): with mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckYarnRuntimeException.add_child' ) as mock_add_child: step = spark_job_failures.CheckYarnRuntimeException() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() mock_add_child.assert_called_once() self.assertIsInstance(mock_add_child.call_args[1]['child'], dp_gs.CheckLogsExist) class CheckShuffleFailuresTest(SparkJobFailuresStepTestBase): def test_job_older_than_30_days(self): self.params[flags.JOB_OLDER_THAN_30_DAYS] = True step = spark_job_failures.CheckShuffleFailures() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_no_logs(self): self.mock_logs_realtime_query.return_value = [] step = spark_job_failures.CheckShuffleFailures() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_logs_found_efm_workers(self): self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}] self.mock_cluster.config.software_config.properties = { 'dataproc:dataproc.enable.enhanced.flexibility.mode': 'true' } self.mock_cluster.number_of_primary_workers = 1 self.mock_cluster.number_of_secondary_workers = 2 step = spark_job_failures.CheckShuffleFailures() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertIn( 'Insufficient primary workers', self.mock_interface.add_failed.call_args[1]['reason'], ) def test_logs_found_old_image(self): self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}] self.mock_cluster.config.software_config.image_version = '1.5.0' step = spark_job_failures.CheckShuffleFailures() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertIn( 'Consider using EFM HCFS mode', self.mock_interface.add_failed.call_args[1]['remediation'], ) def test_logs_found_small_disk(self): self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}] self.mock_cluster.config.worker_config.disk_config.boot_disk_size_gb = 100 step = spark_job_failures.CheckShuffleFailures() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertIn('Small disk size', self.mock_interface.add_failed.call_args[1]['reason']) def test_logs_found_low_timeout(self): self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}] self.mock_cluster.config.software_config.properties = { 'spark:spark.shuffle.io.connectionTimeout': 50 } step = spark_job_failures.CheckShuffleFailures() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertIn( 'Low IO connection timeout', self.mock_interface.add_failed.call_args[1]['reason'], ) def test_logs_found_pvm(self): self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}] self.mock_cluster.is_preemptible_secondary_workers = True step = spark_job_failures.CheckShuffleFailures() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertIn( 'Data skew and large partitions', self.mock_interface.add_failed.call_args[1]['reason'], ) class CheckShuffleServiceKillTest(SparkJobFailuresStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckShuffleServiceKill.add_child' )) def test_add_child_called(self): step = spark_job_failures.CheckShuffleServiceKill() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.add_child_patch.call_count, 2) self.assertIsInstance(self.add_child_patch.call_args_list[0][1]['child'], dp_gs.CheckLogsExist) self.assertIsInstance( self.add_child_patch.call_args_list[1][1]['child'], spark_job_failures.CheckAutoscalingPolicy, ) class CheckAutoscalingPolicyTest(SparkJobFailuresStepTestBase): def test_no_policy(self): self.mock_cluster.autoscaling_policy_id = None step = spark_job_failures.CheckAutoscalingPolicy() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_dp_get_autoscaling_policy.assert_not_called() def test_policy_no_graceful_timeout(self): self.mock_cluster.autoscaling_policy_id = 'test-policy' mock_policy = mock.Mock() mock_policy.has_graceful_decommission_timeout = False self.mock_dp_get_autoscaling_policy.return_value = mock_policy step = spark_job_failures.CheckAutoscalingPolicy() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_policy_with_graceful_timeout(self): self.mock_cluster.autoscaling_policy_id = 'test-policy' mock_policy = mock.Mock() mock_policy.has_graceful_decommission_timeout = True self.mock_dp_get_autoscaling_policy.return_value = mock_policy step = spark_job_failures.CheckAutoscalingPolicy() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() class CheckPreemptibleTest(SparkJobFailuresStepTestBase): def test_preemptible_workers_high_ratio(self): self.mock_cluster.is_preemptible_secondary_workers = True self.mock_cluster.number_of_secondary_workers = 5 self.mock_cluster.number_of_primary_workers = 5 step = spark_job_failures.CheckPreemptible() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_preemptible_workers_low_ratio(self): self.mock_cluster.is_preemptible_secondary_workers = True self.mock_cluster.number_of_secondary_workers = 1 self.mock_cluster.number_of_primary_workers = 5 step = spark_job_failures.CheckPreemptible() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_no_preemptible_workers(self): step = spark_job_failures.CheckPreemptible() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_failed.assert_not_called() class CheckGCSConnectorTest(SparkJobFailuresStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckGCSConnector.add_child' )) def test_custom_connector(self): self.mock_cluster.is_custom_gcs_connector = True step = spark_job_failures.CheckGCSConnector() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() self.assertEqual(self.add_child_patch.call_count, 4) def test_default_connector(self): self.mock_cluster.is_custom_gcs_connector = False step = spark_job_failures.CheckGCSConnector() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.assertEqual(self.add_child_patch.call_count, 4) class CheckBQConnectorTest(SparkJobFailuresStepTestBase): def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.dataproc.spark_job_failures.CheckBQConnector.add_child' )) self.params['image_version'] = '2.1.0' self.mock_dp_extract_bq_version.return_value = '0.28.0' def test_cluster_none(self): self.mock_dataproc_get_cluster.return_value = None step = spark_job_failures.CheckBQConnector() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.add_child_patch.assert_called_once() def test_version_ok_no_connector(self): self.params['image_version'] = '2.1.0' self.mock_cluster.cluster_provided_bq_connector = None self.mock_job.job_provided_bq_connector = None step = spark_job_failures.CheckBQConnector() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_version_uncertain_job_connector_mismatch(self): self.params['image_version'] = '2.1.0' self.mock_cluster.cluster_provided_bq_connector = None self.mock_job.job_provided_bq_connector = '0.27.0' step = spark_job_failures.CheckBQConnector() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_version_uncertain_cluster_connector_mismatch(self): self.params['image_version'] = '2.1.0' self.mock_cluster.cluster_provided_bq_connector = '0.27.0' self.mock_job.job_provided_bq_connector = None step = spark_job_failures.CheckBQConnector() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_version_ok_old_image_with_connector(self): self.params['image_version'] = '1.5.0' self.mock_cluster.image_version = '1.5.0' type(self.mock_cluster).cluster_provided_bq_connector = mock.PropertyMock( return_value='some-connector') step = spark_job_failures.CheckBQConnector() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_version_skipped_old_image_no_connector(self): self.params['image_version'] = '1.5.0' self.mock_cluster.image_version = '1.5.0' self.mock_cluster.cluster_provided_bq_connector = None self.mock_job.job_provided_bq_connector = None step = spark_job_failures.CheckBQConnector() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() class SparkJobEndTest(SparkJobFailuresStepTestBase): def test_end_step(self): step = spark_job_failures.SparkJobEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_once() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/dataproc/templates/dataproc_attributes.jinja ================================================ {% block stackdriver_success_reason %} Stackdriver: Enabled {% endblock stackdriver_success_reason %} {% block stackdriver_uncertain_reason %} Could not determine if the `dataproc:dataproc.logging.stackdriver.enable` property is enabled for cluster, possibly because the cluster was deleted. Subsequent checks requiring Cloud logging might be affected. {% endblock stackdriver_uncertain_reason %} {% block stackdriver_uncertain_remediation %} Enable Cloud logging by creating a cluster with property dataproc:dataproc.logging.stackdriver.enable = true. Refer to the guide for more details: {% endblock stackdriver_uncertain_remediation %} {% block unspported_image_version_success_reason %} The cluster {cluster_name} is using a supported Dataproc image version. {% endblock unspported_image_version_success_reason %} {% block unspported_image_version_failure_reason %} The cluster {cluster_name} is using an unsupported Dataproc image version. Run the job on a supported image version. {% endblock unspported_image_version_failure_reason %} {% block unspported_image_version_failure_remediation %} Find supported Dataproc image versions in this document[1]. [1] {% endblock unspported_image_version_failure_remediation %} {% block gcs_connector_success_reason %} No user-specified Cloud Storage connector version was identified. The cluster is using the default version. {% endblock gcs_connector_success_reason %} {% block gcs_connector_uncertain_reason %} A user-specified Cloud Storage connector version was identified for cluster. Using a non-default connector version can lead to issues if not required by the application, as Dataproc clusters include a default pre-installed GCS connector. {% endblock gcs_connector_uncertain_reason %} {% block gcs_connector_uncertain_remediation %} Verify the setup is correct if using a non-default Cloud Storage connector by following: {% endblock gcs_connector_uncertain_remediation %} {% block bq_connector_success_reason %} The cluster uses image version {image_version} which preinstalls the BigQuery connector, and no conflicting BigQuery JARs were provided. Dependency version conflicts on the BigQuery side are not expected. Refer to the Dataproc Version page to find out each component version preinstalled on your cluster: {% endblock bq_connector_success_reason %} {% block bq_connector_uncertain_reason %} The cluster uses image version {image_version} which preinstalls the BigQuery connector, and a different version of the BigQuery connector is being installed at the cluster or job level. This might cause dependency version conflicts and lead to job failures. {% endblock bq_connector_uncertain_reason %} {% block bq_connector_uncertain_remediation %} Resolve potential BigQuery connector version conflicts using one of the following approaches: - If providing the BigQuery JAR at the cluster level: Create the Dataproc cluster without specifying any BigQuery JAR. - If providing the BigQuery JAR at the job level: Run the job without specifying any BigQuery JAR. - If installing a BigQuery JAR is necessary: Match the version of the BigQuery JAR to the version preinstalled on the cluster (version {bq_version} for image {image_version}). Refer to the Dataproc Version page to find out each component version preinstalled on your cluster: {% endblock bq_connector_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/dataproc/templates/job.jinja ================================================ {% block job_id_exists_success_reason %} The job `{job_id}` exists in project `{project_id}`. {% endblock job_id_exists_success_reason %} {% block job_id_exists_skipped_reason %} The job `{job_id}` not found in project `{project_id}`. {% endblock job_id_exists_skipped_reason %} {% block task_not_found_success_reason %} Job `{job_id}` did not fail due to a 'task not found' error. {additional_message} {% endblock task_not_found_success_reason %} {% block task_not_found_failure_reason %} Job `{job_id}` failed due to a 'task not found' error. {additional_message} {% endblock task_not_found_failure_reason %} {% block task_not_found_failure_remediation %} This error typically indicates the associated cluster was terminated before job completion. Review automation workflows to ensure clusters remain active until all jobs are finalized. {% endblock task_not_found_failure_remediation %} ================================================ FILE: gcpdiag/runbook/dataproc/templates/logs_related.jinja ================================================ {% block cluster_init_success_reason %} The initialization actions for cluster {cluster_name} in project {project_id} completed successfully without errors. {% endblock cluster_init_success_reason %} {% block cluster_init_failure_reason %} The cluster {cluster_name} creation failed because the initialization script encountered an error. {% endblock cluster_init_failure_reason %} {% block cluster_init_failure_remediation %} A Dataproc cluster initialization script failure means that a script intended to run during the cluster's setup did not complete successfully. To resolve this issue: - Review initialization actions considerations and guidelines [1]. - Examine the output logs. The error message should provide a link to the logs in Cloud Storage. [1] {% endblock cluster_init_failure_remediation %} {% block port_exhaustion_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock port_exhaustion_success_reason %} {% block port_exhaustion_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock port_exhaustion_failure_reason %} {% block port_exhaustion_failure_remediation %} This issue occurs when Spark jobs cannot find an available port after 1000 retries. CLOSE_WAIT connections are a possible cause. To identify CLOSE_WAIT connections, analyze the netstat output: 1. Run `netstat -plant >> open_connections.txt`. 2. Run `cat open_connections.txt | grep "CLOSE_WAIT"`. If blocked connections are due to a specific application, restart that application. Alternatively, restart the master node to release the affected connections. {% endblock port_exhaustion_failure_remediation %} {% block kill_orphaned_application_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock kill_orphaned_application_success_reason %} {% block kill_orphaned_application_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock kill_orphaned_application_failure_reason %} {% block kill_orphaned_application_failure_remediation %} To prevent orphaned YARN applications from being killed, set the cluster property `dataproc:dataproc.yarn.orphaned-app-termination.enable` to `false`. More details are available in the documentation [1]. [1] {% endblock kill_orphaned_application_failure_remediation %} {% block gcs_access_deny_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock gcs_access_deny_success_reason %} {% block gcs_access_deny_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock gcs_access_deny_failure_reason %} {% block gcs_access_deny_failure_remediation %} GCS access denied errors were found in Cloud Logging. Verify that the service account has the necessary permissions to get objects from the GCS bucket. Search Cloud Logging for "com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden" for more details. {% endblock gcs_access_deny_failure_remediation %} {% block master_oom_success_reason %} Didn't find logs messages related to Master OOM on the cluster: {cluster_name}. {% endblock master_oom_success_reason %} {% block master_oom_failure_reason %} Found logs messages related to Master OOM on the cluster: {cluster_name}. {% endblock master_oom_failure_reason %} {% block master_oom_failure_remediation %} Follow the troubleshooting guide [1] to adjust the driver memory used for the job. [1] {% endblock master_oom_failure_remediation %} {% block worker_oom_success_reason %} Didn't find logs messages related to Worker OOM on the cluster: {cluster_name}. {% endblock worker_oom_success_reason %} {% block worker_oom_failure_reason %} Found logs messages related to Worker OOM on the cluster: {cluster_name}. {% endblock worker_oom_failure_reason %} {% block worker_oom_failure_remediation %} The logs indicate that worker OOM (out-of-memory) errors may have occurred on the cluster. To resolve this issue: - Use a high-memory machine type for the worker nodes. - Repartition the data to avoid data skew. Refer to the troubleshooting guide [1] for more details. If the issue persists, contact Google Cloud Support. [1] {% endblock worker_oom_failure_remediation %} {% block sw_preemption_success_reason %} Didn't find logs messages related to secondary worker preemption on the cluster: {cluster_name}. {% endblock sw_preemption_success_reason %} {% block sw_preemption_failure_reason %} Found logs messages related to secondary worker preemption on the cluster: {cluster_name}. {% endblock sw_preemption_failure_reason %} {% block sw_preemption_failure_remediation %} This error occurs when secondary worker nodes are preempted. By default, Dataproc secondary workers are preemptible VMs. To resolve this issue: - Verify if the cluster uses secondary workers with preemptible instances. - Recreate the cluster configured with non-preemptible secondary workers to ensure secondary workers are not preempted [1]. [1] {% endblock sw_preemption_failure_remediation %} {% block worker_disk_usage_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock worker_disk_usage_success_reason %} {% block worker_disk_usage_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock worker_disk_usage_failure_reason %} {% block worker_disk_usage_failure_remediation %} To recover the existing node manager: - Free up related local disk space in the node to reduce disk utilization below 90%. Find the relevant folder name by querying Cloud Logging for "{log}". For a long-term fix: - Recreate the cluster using a larger worker disk size. {% endblock worker_disk_usage_failure_remediation %} {% block gc_pause_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock gc_pause_success_reason %} {% block gc_pause_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock gc_pause_failure_reason %} {% block gc_pause_failure_remediation %} To address potential GC pause issues: - Increase the `spark.executor.memory` configuration to allocate additional memory if allocated memory appears insufficient [1]. - If memory allocation seems adequate, investigate potential garbage collection optimization. Refer to the Apache Spark documentation for a comprehensive guide on Garbage Collection Tuning [2]. - Additionally, tuning the `spark.memory.fraction` property can be effective, particularly for workloads that rely heavily on RDD caching. Refer to the Memory Management Overview [3] for a detailed discussion of this configuration property. [1] [2] [3] {% endblock gc_pause_failure_remediation %} {% block default_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock default_success_reason %} {% block default_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock default_failure_reason %} {% block default_failure_remediation %} Investigate the job logs further, focusing on eliminating the observed message. {% endblock default_failure_remediation %} {% block too_many_jobs_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock too_many_jobs_success_reason %} {% block too_many_jobs_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. If the Dataproc agent is already running more jobs than allowed, it will reject the new job. {% endblock too_many_jobs_failure_reason %} {% block too_many_jobs_failure_remediation %} The maximum number of concurrent jobs can be set at cluster creation time using the property `dataproc:dataproc.scheduler.max-concurrent-jobs`. Alternatively, set the property `dataproc:dataproc.scheduler.driver-size-mb`. If neither property is set manually, Dataproc calculates `max-concurrent-jobs` as: `(Physical memory of master (in MB) - 3584) / dataproc:dataproc.scheduler.driver-size-mb`. The Dataproc cluster size might be too small to run the desired number of concurrent jobs. Note: The job has a default retry mechanism (4 times) and might succeed on a subsequent attempt. {% endblock too_many_jobs_failure_remediation %} {% block not_enough_memory_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock not_enough_memory_success_reason %} {% block not_enough_memory_failure_reason %} The cluster "{cluster_name}" reported log messages concerning "{log}". These messages indicate the job was rejected because the master VM did not have enough available memory. {% endblock not_enough_memory_failure_reason %} {% block not_enough_memory_failure_remediation %} Investigate memory usage on the master and worker nodes: - Access the Dataproc UI Monitoring view and examine the "YARN Memory" and "YARN Pending Memory" charts. - Access the master VM through the GCE UI and navigate to "Observability" for detailed monitoring of that specific VM. As a mitigation step, increase the machine type. {% endblock not_enough_memory_failure_remediation %} {% block system_memory_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock system_memory_success_reason %} {% block system_memory_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. The Dataproc agent checked if the master's memory usage is above a certain threshold (default value is 0.9), if it is it will reject the job, as the master is overloaded. {% endblock system_memory_failure_reason %} {% block system_memory_failure_remediation %} Investigate memory usage on the master and worker nodes: - Access the Dataproc UI Monitoring view and examine the "YARN Memory" and "YARN Pending Memory" charts. - Access the master VM through the GCE UI and navigate to "Observability" for detailed monitoring of that specific VM. As a mitigation step, increase the machine type. {% endblock system_memory_failure_remediation %} {% block rate_limit_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock rate_limit_success_reason %} {% block rate_limit_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. Job submission rate has been reached with QPS as the unit (default is 1.0). Job has been rejected by the Dataproc agent. {% endblock rate_limit_failure_reason %} {% block rate_limit_failure_remediation %} Submit jobs at longer intervals. Note: The job has a default retry mechanism (4 times) and might succeed on a subsequent attempt. {% endblock rate_limit_failure_remediation %} {% block not_enough_disk_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock not_enough_disk_success_reason %} {% block not_enough_disk_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. Job has been rejected due to low disk capacity. {% endblock not_enough_disk_failure_reason %} {% block not_enough_disk_failure_remediation %} Increase the disk size for the master and worker nodes. A minimum disk size of 250GB is recommended for low workloads, and 1TB for high workloads. Note: The job has a default retry mechanism (4 times) and might succeed on a subsequent attempt. {% endblock not_enough_disk_failure_remediation %} {% block yarn_runtime_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock yarn_runtime_success_reason %} {% block yarn_runtime_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock yarn_runtime_failure_reason %} {% block yarn_runtime_failure_remediation %} This issue might occur if multiple Dataproc clusters use the same `mapreduce.jobhistory.intermediate-done-dir` value. This configuration is not recommended, as each Job History Server scans the intermediate-done-dir periodically. If multiple clusters use the same directory, each Job History Server will attempt to move files from the same intermediate-done-dir to the done-dir. To resolve this: - Configure separate `mapreduce.jobhistory.intermediate-done-dir` locations for each running cluster. {% endblock yarn_runtime_failure_remediation %} {% block check_python_import_failure_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock check_python_import_failure_success_reason %} {% block check_python_import_failure_failure_reason %} Log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock check_python_import_failure_failure_reason %} {% block check_python_import_failure_failure_remediation %} The job failed due to a Python import failure. {additional_message} Ensure the necessary Python packages are installed on the cluster nodes or included in the job dependencies. {% endblock check_python_import_failure_failure_remediation %} {% block shuffle_service_kill_preemptible_workers_failure_reason %} Cluster {cluster.name} uses preemptible workers and their count exceeds 50% of the total worker count leading to shuffle fetch failures. {% endblock shuffle_service_kill_preemptible_workers_failure_reason %} {% block shuffle_service_kill_preemptible_workers_failure_remediation %} To improve stability: - Reduce the number of preemptible workers. - Use non-preemptible workers. - Explore Enhanced Flexibility Mode (EFM) for better control over preemptible instances. {% endblock shuffle_service_kill_preemptible_workers_failure_remediation %} {% block shuffle_service_kill_preemptible_workers_success_reason %} Cluster {cluster.name} uses preemptible workers. While within the recommended limit, preemptions might still lead to FetchFailedExceptions. {% endblock shuffle_service_kill_preemptible_workers_success_reason %} {% block shuffle_service_kill_preemptible_workers_success_reason_a1 %} Cluster {cluster.name} does not use preemptible workers. {% endblock shuffle_service_kill_preemptible_workers_success_reason_a1 %} {% block shuffle_service_kill_graceful_decommision_timeout_failure_reason %} Autoscaling is enabled without graceful decommission timeout on cluster {cluster_name} {% endblock shuffle_service_kill_graceful_decommision_timeout_failure_reason %} {% block shuffle_service_kill_graceful_decommision_timeout_failure_remediation %} Enable graceful decommission timeout in the autoscaling policy to allow executors to fetch shuffle data before nodes are removed. {% endblock shuffle_service_kill_graceful_decommision_timeout_failure_remediation %} {% block shuffle_service_kill_success_reason %} No shuffle service failure detected in cluster {cluster_name} {% endblock shuffle_service_kill_success_reason %} {% block shuffle_failures_success_reason %} No shuffle failure logs found for cluster {cluster_name} {% endblock shuffle_failures_success_reason %} {% block shuffle_failures_failure_reason %} Cluster {cluster_name} experienced shuffle failures. Potential root causes: {root_causes} {% endblock shuffle_failures_failure_reason %} {% block shuffle_failures_remediation %} Refer to the Dataproc documentation for troubleshooting shuffle failures. Potential remediations include: {remediation} {% endblock shuffle_failures_remediation %} {% block gcs_429_gce_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock gcs_429_gce_success_reason %} {% block gcs_429_gce_failure_reason %} Found logs messages related to "{log}" on cluster {cluster_name}. This indicates that the limit for requests per second from Compute Engine to the metadata server (10 requests/s) was exceeded. This limit applies across projects. {% endblock gcs_429_gce_failure_reason %} {% block gcs_429_gce_failure_remediation %} Recommended actions to address the issue: 1. If this is a Spark job with a high number of shuffle partitions, adjust the offset value in the offset file and restart the application. 2. Run applications in Spark cluster mode to avoid stressing the driver node. 3. If possible, modify the workload to reduce frequent authentication requests. If modification is not feasible, move to a file-based authentication mechanism [1]. [1] {% endblock gcs_429_gce_failure_remediation %} {% block gcs_429_driveroutput_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock gcs_429_driveroutput_success_reason %} {% block gcs_429_driveroutput_failure_reason %} Found logs messages related to "{log}" on cluster {cluster_name}. This indicates that the limit for requests from Dataproc to write to the driveroutput file in Cloud Storage was exceeded. Too many writes to the driver output file occurred, preventing logs from being written and causing the job to fail. {% endblock gcs_429_driveroutput_failure_reason %} {% block gcs_429_driveroutput_failure_remediation %} Use the `core:fs.gs.outputstream.sync.min.interval` property to control the sync time (in minutes) [1][2]. [1] [2] {% endblock gcs_429_driveroutput_failure_remediation %} {% block gcs_412_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock gcs_412_success_reason %} {% block gcs_412_failure_reason %} Found logs messages related to "{log}" on cluster {cluster_name}. This error occurs when multiple applications/jobs attempt to write to the same output directory simultaneously. The GCS Hadoop File Committer does not support concurrent writes to a GCS bucket. {% endblock gcs_412_failure_reason %} {% block gcs_412_failure_remediation %} Use the DataprocFileOutputCommitter, which allows concurrent writes from Spark jobs [1]. [1] {% endblock gcs_412_failure_remediation %} {% block bq_resource_success_reason %} No log messages related to "{log}" were found on the cluster: {cluster_name}. {% endblock bq_resource_success_reason %} {% block bq_resource_failure_reason %} Found logs messages related to "{log}" on cluster {cluster_name}. A RESOURCE_EXHAUSTED error occurred while streaming writes to BigQuery, indicating a quota was hit. Potential error types include: - Concurrent stream usage exceeded - Exceeds 'AppendRows throughput' quota - CreateWriteStream requests quota This can happen due to the implementation of the direct write mode in the connector, which leverages the BigQuery Storage Write API. {% endblock bq_resource_failure_reason %} {% block bq_resource_failure_remediation %} Consider the following options: - Permanent solution: Use the INDIRECT write method, which does not leverage the BigQuery Storage Write API and avoids quota issues [1]. - For "CreateWriteStream" errors: Enable the `writeAtLeastOnce` property [2]. Note: This introduces at-least-once behavior, meaning records might be duplicated. - Contact Google Cloud Support to request a quota increase for the project. Provide the BigQuery connector jar version and the driver output of the failed job. [1] [2] {% endblock bq_resource_failure_remediation %} ================================================ FILE: gcpdiag/runbook/dataproc/templates/network.jinja ================================================ {% block cluster_network_success_reason %} The network communication among nodes in cluster {cluster_name} is working. {% endblock cluster_network_success_reason %} {% block cluster_network_failure_reason %} The network communication among nodes in cluster {cluster_name} is blocked. {% endblock cluster_network_failure_reason %} {% block cluster_network_failure_remediation %} Create a firewall rule that meets Dataproc connectivity requirements[1] and apply it to the cluster's VPC network. Review the documentation[2] for more details. References: [1] [2] {% endblock cluster_network_failure_remediation %} {% block cluster_network_uncertain_reason %} The cluster has not been found, it may have been deleted. Skipping the connectivity test. {% endblock cluster_network_uncertain_reason %} {% block cluster_network_uncertain_remediation %} Verify that Dataproc connectivity requirements[1] are satisfied. References: [1] {% endblock cluster_network_uncertain_remediation %} {% block private_google_access_success_reason %} Google Private Access in subnet: {subnetwork_uri} is enabled. {% endblock private_google_access_success_reason %} {% block private_google_access_failure_reason %} Google Private Access in subnet: {subnetwork_uri} is disabled. {% endblock private_google_access_failure_reason %} {% block private_google_access_failure_remediation %} Dataproc clusters isolated from the public internet require Private Google Access enabled on their subnetwork ({subnetwork_uri}) to allow cluster nodes to access Google APIs and services (e.g., Cloud Storage) using internal IPs [cluster VMs are not assigned public IP addresses](1). Enable Private Google Access for the subnetwork[2]. References: [1] [2] {% endblock private_google_access_failure_remediation %} ================================================ FILE: gcpdiag/runbook/dataproc/templates/permissions.jinja ================================================ {% block projectcheck_failure_reason %} Service Account {service_account} associated with Dataproc cluster was not found in project {project_id} or cross project {cross_project_id}. {% endblock projectcheck_failure_reason %} {% block projectcheck_failure_remediation %} Provide the project where the service account resides using the `cross_project` parameter. {% endblock projectcheck_failure_remediation %} {% block projectcheck_uncertain_reason %} Service Account {service_account} associated with Dataproc cluster was not found in project {project_id}. It is possible that the service account is in a different project. {% endblock projectcheck_uncertain_reason %} {% block projectcheck_uncertain_remediation %} Provide the project where the service account resides using the `cross_project` parameter. {% endblock projectcheck_uncertain_remediation %} {% block permission_check_uncertain_reason %} Service Account {service_account} associated with Dataproc cluster was not found in project {project_id} or cross project (if specified). {% endblock permission_check_uncertain_reason %} {% block permission_check_uncertain_remediation %} Provide the project where the service account resides using the `cross_project` parameter. {% endblock permission_check_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/exceptions.py ================================================ # Copyright 2021 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. """Custom exception classes for handling specific errors in the diagnostic process.""" class InvalidDiagnosticTree(Exception): """Exception raised for invalid diagnostic tree definition""" def __init__(self, message: str): super().__init__(message) class InvalidStepOperation(Exception): """Exception raised for invalid operations on a diagnostic step.""" def __init__(self, message: str): super().__init__(message) class DiagnosticTreeNotFound(Exception): """Exception raised when a diagnostic tree cannot be found.""" class DiagnosticTreeConstructionError(Exception): """Exception raised for errors during the construction of a diagnostic tree.""" def __init__(self, message: str): super().__init__(message) class MissingParameterError(ValueError): """Raised when a required runbook parameter is missing.""" def __init__(self, message: str, missing_parameters_list: list[str] | None = None): super().__init__(message) self.missing_parameters_list = (missing_parameters_list if missing_parameters_list is not None else []) class InvalidParameterError(ValueError): """Raised when a runbook parameter is provided but has an invalid value.""" class FailedStepError(Exception): """Exception raised for a failed step.""" pass ================================================ FILE: gcpdiag/runbook/flags.py ================================================ # Copyright 2023 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. """Common flags applicable to any runbook""" # Runbook command specific flags INTERACTIVE_MODE = 'auto' START_TIME = 'start_time' END_TIME = 'end_time' TIMEZONE = 'timezone' ================================================ FILE: gcpdiag/runbook/gce/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/gce/constants.py ================================================ # Copyright 2021 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. """Constants applicable relevant to only gce implementation""" import ipaddress # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.constants import * from gcpdiag.runbook.iam.constants import * # Os login Permissions OSLOGIN_ROLE = 'roles/compute.osLogin' OSLOGIN_ADMIN_ROLE = 'roles/compute.osAdminLogin' # Users from a different organization than the VM they're connecting to OSLOGIN_EXTERNAL_USER_ROLE = 'roles/compute.osLoginExternalUser' OS_LOGIN_ROLES = [ OSLOGIN_ROLE, OSLOGIN_ADMIN_ROLE, 'roles/iam.serviceAccountUser', OSLOGIN_EXTERNAL_USER_ROLE ] ENABLE_OSLOGIN = 'enable-oslogin' ENABLE_OSLOGIN_2FA = 'enable-oslogin-2fa' # INSTANCE ADMIN INSTANCE_ADMIN_ROLE = 'roles/compute.instanceAdmin.v1' # Networking IAP_FW_VIP = ipaddress.ip_network('35.235.240.0/20') UNSPECIFIED_ADDRESS = ipaddress.ip_network('0.0.0.0/0') DEFAULT_SSHD_PORT = 22 NEXT_HOP = 'default-internet-gateway' # Guest OS logs KERNEL_PANIC_LOGS = [ 'Security Violation', # GRUB not being able to find image. 'Failed to load image', # OS emergency mode (emergency.target in systemd). 'You are now being dropped into an emergency shell', r'You are in (rescue|emergency) mode', r'Started \x1b?\[?.*Emergency Shell', r'Reached target \x1b?\[?.*Emergency Mode', # GRUB emergency shell. 'Minimal BASH-like line editing is supported', # Grub/EFI corruption check r'grub2 error: symbol \'grub_calloc\' not found', r'error: symbol \'grub_verify_string\' not found', # Typical Kernel logs 'Kernel panic', 'Give root password for maintenance', r'\(or press Control-D to continue\):', 'Boot failed: not a bootable disk', 'Dependency failed for /' ] SERIAL_LOG_START_POINT = [ r'Command line: BOOT_IMAGE=\([^()]+\)/boot/vmlinuz-\S+', r'Command line: BOOT_IMAGE=/boot/vmlinuz-\S+', # SUSE ] FS_CORRUPTION_MSG = [ 'Corruption of in-memory data detected. Shutting down filesystem', 'Corruption of in-memory data detected', 'warning: mounting fs with errors', 'Failed to mount /', r'A stop job is running for Security \.\.\..* Service ', 'I/O Error Detected. Shutting down filesystem', 'metadata I/O error in' ] OOM_PATTERNS = [ r'Out of memory: Kill(ed)? process', r'Kill(ed)? process', 'Memory cgroup out of memory', 'invoked oom-killer', ] NETWORK_ERRORS = [ 'dial tcp 169.254.169.254:80: connect: network is unreachable', 'dial tcp 169.254.169.254:80: i/o timeout', 'dial tcp metadata.goog:80: connect: network is unreachable', 'dial tcp metadata.google.internal:80: connect: network is unreachable' ] TIME_SYNC_ERROR = [ # NTP related error message: 'time may be out of sync', 'System clock is unsynchronized', 'Time drift detected', 'no servers can be used, system clock unsynchronized', 'time reset', # sudden jump in time # Chrony-Related error message: 'System clock unsynchronized', 'Time offset too large', r'Can\'t synchronise: no selectable sources', # General Errors: 'Clock skew detected', # make, ssh 'Clock skew too great', # Kerberos 'Could not receive latest log timestamp from server', # PostgreSQL replication ] # Typical logs of a fully booted windows VM GOOD_WINDOWS_BOOT_LOGS_READY = [ 'BdsDxe: starting', 'UEFI: Attempting to start image', 'Description: Windows Boot Manager', 'GCEGuestAgent: GCE Agent Started', 'OSConfigAgent Info: OSConfig Agent', 'GCEMetadataScripts: Starting startup scripts', ] DISK_EXHAUSTION_ERRORS = [ 'No space left on device', 'No usable temporary directory found', r'A stop job is running for Security \.\.\..* Service ', # windows 'disk is at or near capacity' ] SLOW_DISK_READS = [ # Linux slow read: r'\d+:\d+:\d+:\d+: timing out command, waited \d+s', r'end_request: I/O error, dev [a-z0-9-]+, sector \d+', r'Buffer I/O error on device [a-z0-9-]+, logical block \d+', r'blocked for more than \d+ seconds', # Linux SCSI commands abort/reset (when operation to PD times out) r'\d+:\d+:\d+:\d+:\s+\[([a-z0-9-]+)\]\s+(abort|device reset)$', r'\d+:\d+:\d+:\d+:\s+(device reset)$', # Linux Local SSD physical failure on console: r'kernel: blk_update_request: I/O error, dev [a-z0-9-]+, sector \d+', # Windows r'The IO operation at logical block address 0x[0-9a-fA-F.]+ for Disk \d+ ' ] GOOD_SSHD_PATTERNS = [ 'Started OpenBSD Secure Shell server', 'Started OpenSSH server daemon', 'Started OpenSSH Daemon', 'Started ssh.service - OpenBSD Secure Shell server' ] BAD_SSHD_PATTERNS = [ 'Failed to start OpenBSD Secure Shell server', 'Failed to start OpenSSH server', 'Failed to start OpenSSH Daemon' ] # SSHD Guard blocking logs SSHGUARD_PATTERNS = [r'sshguard\[\d+\]: Blocking (\d+\.\d+\.\d+\.\d+)'] GCE_CLUSTER_MANAGER_EMAIL = 'cloud-cluster-manager@prod.google.com' GUEST_AGENT_STATUS_MSG = [ 'Started Google Compute Engine Guest Agent', r'google_guest_agent\[\d+\]: GCE Agent Started' ] GUEST_AGENT_FAILED_MSG = [ 'Failed to start Google Compute Engine Guest Agent', r'google_guest_agent\[(\d+)\]: CRITICAL (.*\.go):(\d+) error registering service' ] SSHD_AUTH_FAILURE = [ 'Authentication refused: bad ownership or modes for directory', r'Error updating SSH keys for (\w+): mkdir (.*): no such file or directory' ] # Cloud init checks CLOUD_INIT_POSITIVE_PATTERN = [r'ci-info: [|].*[|]\sTrue\s[|]'] CLOUD_INIT_NEGATIVE_PATTERN = [r'ci-info: [|].*[|]\sFalse\s[|]'] CLOUD_INIT_STARTUP_PATTERN = [ r"cloud-init\[(\d+)\]: Cloud-init v\. (.*?) running '(.*)'" ] # OS Config ENABLE_OSCONFIG = 'enable-osconfig' # GCE Operation types IG_INSTANCE_REPAIR_METHOD = 'compute.instances.repair.recreateInstance' INSTANCE_PREMPTION_METHOD = 'compute.instances.preempted' HOST_ERROR_METHOD = 'compute.instances.hostError' STOP_METHOD = 'compute.instances.stop' TERMINATE_ON_HOST_MAINTENANCE_METHOD = 'compute.instances.terminateOnHostMaintenance' GUEST_TERMINATE_METHOD = 'compute.instances.guestTerminate' GCE_ACTIVITY_LOG_FILTER = ('logName:"cloudaudit.googleapis.com%2Factivity" ' 'protoPayload.serviceName:"compute.googleapis.com"') # MIG AUTOSCALING_MODE_ON = 'ON' AUTOSCALING_MODE_OFF = 'OFF' MIG_LIMIT_EXCEEDED_LOGS = ["Exceeded limit 'MAX_INSTANCES_IN_INSTANCE_GROUP'"] MIG_NOT_FOUND_LOGS = ['instanceGroupManagers.*was not found'] MIG_IN_USE_LOGS = ['is already being used by'] MIG_MANAGER_RESOURCE_TYPE_FILTER = 'resource.type="gce_instance_group_manager"' MIG_RESOURCE_TYPE_FILTER = 'resource.type="gce_instance_group_manager"' # OS Checks RHEL_PATTERN = 'rhel' ROCKY_PATTERN = 'rocky' SLES_PATTERN = 'sles' WINDOWS_FEATURE = 'WINDOWS' BYOS_PATTERN = 'byos' PROP_BOOT_DISK_LICENSES = 'boot_disk_licenses' PROP_GUEST_OS_FEATURES = 'guest_os_features' PROP_NETWORK_INTERFACE_COUNT = 'network_interface_count' PROP_IS_PREEMPTIBLE_VM = 'is_preemptible_vm' PROP_CREATED_BY_MIG = 'created_by_mig' # Reservation errors RESERVATION_RESIZE_COUNT_TOO_LOW = [ 'The resize instance count cannot be lower than the in use count for a specific reservation.' ] RESERVATION_POLICY_IN_USE = [ r'The resource_policy resource \'projects/.+/regions/.+/resourcePolicies/.+\' ' r'is already being used by \'projects/.+/zones/.+/reservations/.+\'.' ] RESERVATION_MACHINE_TYPE_DISALLOWED = [ r'The machine type .+ provided in instance properties is disallowed for ' 'reservations with ANY reservation affinity' ] RESERVATION_SHARED_NO_ORG = [ 'Cannot create Shared Reservations in a project that does not belong to an organization.' ] RESERVATION_INVALID_DISK_SIZE = [ r'Disk .+ provided in the instance template has invalid size: 0 GB.' ] RESERVATION_OUTSIDE_ZONE_REGION = [ 'Reservation cannot be created outside the zone/region of source resource.' ] RESERVATION_INVALID_SOURCE_RESOURCE = [ 'Source resource reference provided invalid.' ] RESERVATION_ALREADY_EXISTS = [ r'The resource \'projects/.+/zones/.+/.+/.+\' already exists' ] RESERVATION_NOT_FOUND = ['notFound', 'does not exist in zone'] RESERVATION_CANNOT_OVERRIDE_PROPERTIES = [ 'Reservation cannot override properties populated by source resource.' ] RESERVATION_CROSS_PROJECT_REFERENCE_NOT_ALLOWED = [ 'Cross project referencing is not allowed for this resource.' ] RESERVATION_SHARED_LIMIT_EXCEEDED = [ 'Cannot support more than 100 shared reservations of the same shape under an organization.' ] RESERVATION_INVALID_SPECIFIC_RESERVATION_COUNT = [ 'Invalid value for field \'resource.specificReservation.count\'' ] RESERVATION_SHARED_OWNER_PROJECTS_CONSTRAINT = [ 'Constraint constraints/compute.sharedReservationsOwnerProjects violated for ' 'project' ] RESERVATION_PROJECT_NOT_FOUND_OR_ORG = [ r'Project .+ doesn\'t exist or doesn\'t belong to the same organization of ' 'the current project.' ] # Reservation filters RESERVATION_CREATE_SUCCESS_FILTER = ( 'protoPayload.methodName=\'compute.reservations.create\' AND ' 'protoPayload.status.code=200') RESERVATION_UPDATE_SUCCESS_FILTER = ( 'protoPayload.methodName=\'compute.reservations.update\' AND ' 'protoPayload.status.code=200') ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/a-family.json ================================================ { "A2 Standard VMs": { "pd-balanced": [ { "Machine type": "a2-highgpu-1g", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "a2-highgpu-2g", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-highgpu-4g", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-highgpu-8g", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-megagpu-16g", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "Machine type": "a2-highgpu-1g", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "a2-highgpu-2g", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-highgpu-4g", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-highgpu-8g", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-megagpu-16g", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "Machine type": "a2-highgpu-1g", "Maximum write IOPS": 15000, "Maximum read IOPS": 5000, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "a2-highgpu-2g", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-highgpu-4g", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-highgpu-8g", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-megagpu-16g", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ] }, "A2 Ultra VMs": { "pd-balanced": [ { "Machine type": "a2-ultragpu-1g", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "a2-ultragpu-2g", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-ultragpu-4g", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-ultragpu-8g", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "Machine type": "a2-ultragpu-1g", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "a2-ultragpu-2g", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-ultragpu-4g", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-ultragpu-8g", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "Machine type": "a2-ultragpu-1g", "Maximum write IOPS": 15000, "Maximum read IOPS": 5000, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "a2-ultragpu-2g", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-ultragpu-4g", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "a2-ultragpu-8g", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1 } ] }, "A3 VMs": { "pd-balanced": [ { "Machine type": "a3-megagpu-8g", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MB/s)": 1200, "Maximum read throughput (MB/s)": 1200 }, { "Machine type": "a3-highgpu-8g", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MB/s)": 1200, "Maximum read throughput (MB/s)": 1200 } ], "pd-ssd": [ { "Machine type": "a3-megagpu-8g", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MB/s)": 1200, "Maximum read throughput (MB/s)": 1200 }, { "Machine type": "a3-highgpu-8g", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MB/s)": 1200, "Maximum read throughput (MB/s)": 1200 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/c-family.json ================================================ { "C2 VMs": { "pd-balanced": [ { "VM vCPU count": "4", "Maximum write IOPS": 4000, "Maximum read IOPS": 4000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8", "Maximum write IOPS": 4000, "Maximum read IOPS": 4000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "16", "Maximum write IOPS": 4000, "Maximum read IOPS": 8000, "Maximum write throughput (MiBps)": 480, "Maximum read throughput (MiBps)": 600 }, { "VM vCPU count": "30", "Maximum write IOPS": 8000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 480, "Maximum read throughput (MiBps)": 600 }, { "VM vCPU count": "60", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "VM vCPU count": "4", "Maximum write IOPS": 4000, "Maximum read IOPS": 4000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8", "Maximum write IOPS": 4000, "Maximum read IOPS": 4000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "16", "Maximum write IOPS": 4000, "Maximum read IOPS": 8000, "Maximum write throughput (MiBps)": 480, "Maximum read throughput (MiBps)": 600 }, { "VM vCPU count": "30", "Maximum write IOPS": 8000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 480, "Maximum read throughput (MiBps)": 600 }, { "VM vCPU count": "60", "Maximum write IOPS": 15000, "Maximum read IOPS": 30000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "VM vCPU count": "4", "Maximum write IOPS": 4000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8", "Maximum write IOPS": 4000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "16", "Maximum write IOPS": 4000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "30", "Maximum write IOPS": 8000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "60", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 } ] }, "C2D VMs": { "pd-balanced": [ { "VM vCPU count": "2", "Maximum write IOPS": 4590, "Maximum read IOPS": 4080, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "4", "Maximum write IOPS": 4590, "Maximum read IOPS": 4080, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "8", "Maximum write IOPS": 4590, "Maximum read IOPS": 4080, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "16", "Maximum write IOPS": 4590, "Maximum read IOPS": 8160, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 326 }, { "VM vCPU count": "32", "Maximum write IOPS": 8160, "Maximum read IOPS": 15300, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 612 }, { "VM vCPU count": "56", "Maximum write IOPS": 8160, "Maximum read IOPS": 15300, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 612 }, { "VM vCPU count": "112", "Maximum write IOPS": 15300, "Maximum read IOPS": 30600, "Maximum write throughput (MiBps)": 408, "Maximum read throughput (MiBps)": 1224 } ], "pd-ssd": [ { "VM vCPU count": "2", "Maximum write IOPS": 4590, "Maximum read IOPS": 4080, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "4", "Maximum write IOPS": 4590, "Maximum read IOPS": 4080, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "8", "Maximum write IOPS": 4590, "Maximum read IOPS": 4080, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "16", "Maximum write IOPS": 4590, "Maximum read IOPS": 8160, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 326 }, { "VM vCPU count": "32", "Maximum write IOPS": 8160, "Maximum read IOPS": 15300, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 612 }, { "VM vCPU count": "56", "Maximum write IOPS": 8160, "Maximum read IOPS": 15300, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 612 }, { "VM vCPU count": "112", "Maximum write IOPS": 15300, "Maximum read IOPS": 30600, "Maximum write throughput (MiBps)": 408, "Maximum read throughput (MiBps)": 1224 } ], "pd-standard": [ { "VM vCPU count": "2", "Maximum write IOPS": 4590, "Maximum read IOPS": 3060, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "4", "Maximum write IOPS": 4590, "Maximum read IOPS": 3060, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "8", "Maximum write IOPS": 4590, "Maximum read IOPS": 3060, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "16", "Maximum write IOPS": 4590, "Maximum read IOPS": 3060, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "32", "Maximum write IOPS": 8160, "Maximum read IOPS": 3060, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "56", "Maximum write IOPS": 8160, "Maximum read IOPS": 3060, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 }, { "VM vCPU count": "112", "Maximum write IOPS": 15300, "Maximum read IOPS": 3060, "Maximum write throughput (MiBps)": 245, "Maximum read throughput (MiBps)": 245 } ] }, "C3D VMs": { "pd-balanced": [ { "VM vCPU count": "4", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "30", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "60", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "90", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "180", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 2200, "Maximum read throughput (MiBps)": 2200 }, { "VM vCPU count": "360", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 2200, "Maximum read throughput (MiBps)": 2200 } ], "pd-ssd": [ { "VM vCPU count": "4", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "30", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "60", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "90", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "180", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 2200, "Maximum read throughput (MiBps)": 2200 }, { "VM vCPU count": "360", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 2200, "Maximum read throughput (MiBps)": 2200 } ] }, "C3 VMs": { "pd-balanced": [ { "VM vCPU count": "4", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "22", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "44", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "88", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "176", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "VM vCPU count": "4", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "22", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "44", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "88", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "176", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/e-family.json ================================================ { "E2 VMs": { "pd-balanced": [ { "VM vCPU count": "e2-medium*", "Maximum write IOPS": 10000, "Maximum read IOPS": 12000, "Maximum write throughput (MiBps)": 200, "Maximum read throughput (MiBps)": 200 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1000, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32 or more", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1000, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "VM vCPU count": "e2-medium*", "Maximum write IOPS": 10000, "Maximum read IOPS": 12000, "Maximum write throughput (MiBps)": 200, "Maximum read throughput (MiBps)": 200 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1000, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32 or more", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1000, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "VM vCPU count": "e2-medium*", "Maximum write IOPS": 10000, "Maximum read IOPS": 1000, "Maximum write throughput (MiBps)": 200, "Maximum read throughput (MiBps)": 200 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 5000, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32 or more", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/f-family.json ================================================ { "F1 VMs": { "pd-balanced": [ { "Machine type": "f1-micro", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 } ], "pd-ssd": [ { "Machine type": "f1-micro", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 } ], "pd-standard": [ { "Machine type": "f1-micro", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 } ], "pd-extreme": [ { "Machine type": "f1-micro", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/g-family.json ================================================ { "G1 VMs": { "pd-balanced": [ { "Machine type": "g1-small", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 } ], "pd-ssd": [ { "Machine type": "g1-small", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 } ], "pd-standard": [ { "Machine type": "g1-small", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 } ], "pd-extreme": [ { "Machine type": "g1-small", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 } ] }, "G2 VMs": { "pd-balanced": [ { "Machine type": "g2-standard-4", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "Machine type": "g2-standard-8", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "g2-standard-12", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "g2-standard-16", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "g2-standard-24", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "g2-standard-32", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "g2-standard-48", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "g2-standard-96", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "Machine type": "g2-standard-4", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "Machine type": "g2-standard-8", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "g2-standard-12", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "Machine type": "g2-standard-16", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "g2-standard-24", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "g2-standard-32", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "g2-standard-48", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "g2-standard-96", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/h-family.json ================================================ { "H3 VMs": { "pd-balanced": [ { "VM vCPU count": "88", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/limits_per_gb.json ================================================ { "iops": { "pd-standard": { "Read IOPS per GiB": 0.75, "Write IOPS per GiB": 1.5 }, "pd-balanced": { "Read IOPS per GiB": 6, "Write IOPS per GiB": 6 }, "pd-ssd": { "Read IOPS per GiB": 30, "Write IOPS per GiB": 30 }, "pd-extreme": { "Read IOPS per GiB": 3.6, "Write IOPS per GiB": 3.6 } }, "throughput": { "pd-standard": { "Throughput per GiB (MiBps)": 0.12 }, "pd-balanced": { "Throughput per GiB (MiBps)": 0.28 }, "pd-ssd": { "Throughput per GiB (MiBps)": 0.48 }, "pd-extreme": { "Throughput per GiB (MiBps)": 0.168 } }, "baseline": { "pd-balanced": { "Baseline IOPS per VM": 3000, "Baseline Throughput (MiBps) per VM": 140 }, "pd-ssd": { "Baseline IOPS per VM": 6000, "Baseline Throughput (MiBps) per VM": 240 }, "pd-standard": { "Baseline IOPS per VM": 0, "Baseline Throughput (MiBps) per VM": 0 }, "pd-extreme": { "Baseline IOPS per VM": 0, "Baseline Throughput (MiBps) per VM": 0 } } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/m-family.json ================================================ { "M1 VMs": { "pd-balanced": [ { "Machine type": "m1-megamem-96", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-40", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-80", "Maximum write IOPS": 70000, "Maximum read IOPS": 70000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-160", "Maximum write IOPS": 70000, "Maximum read IOPS": 70000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "Machine type": "m1-megamem-96", "Maximum write IOPS": 90000, "Maximum read IOPS": 90000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-40", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-80", "Maximum write IOPS": 70000, "Maximum read IOPS": 70000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-160", "Maximum write IOPS": 70000, "Maximum read IOPS": 70000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "Machine type": "m1-megamem-96", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-40", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-80", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m1-ultramem-160", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ], "pd-extreme": [ { "Machine type": "m1-megamem-96", "Maximum write IOPS": 90000, "Maximum read IOPS": 90000, "Maximum write throughput (MiBps)": 2200, "Maximum read throughput (MiBps)": 2200 } ] }, "M2 VMs": { "pd-balanced": [ { "Machine type": "m2-megamem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-ultramem-208", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-ultramem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-hypermem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "Machine type": "m2-megamem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-ultramem-208", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-ultramem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-hypermem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "Machine type": "m2-megamem-416", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-ultramem-208", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-ultramem-416", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m2-hypermem-416", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ], "pd-extreme": [ { "Machine type": "m2-megamem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 2200 }, { "Machine type": "m2-ultramem-208", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 2200 }, { "Machine type": "m2-ultramem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 2200 }, { "Machine type": "m2-hypermem-416", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 2200 } ] }, "M3 VMs": { "pd-balanced": [ { "Machine type": "m3-megamem-64", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m3-megamem-128", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m3-ultramem-32", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m3-ultramem-64", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m3-ultramem-128", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "Machine type": "m3-megamem-64", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m3-megamem-128", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m3-ultramem-32", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m3-ultramem-64", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "Machine type": "m3-ultramem-128", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-extreme": [ { "Machine type": "m3-megamem-64", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 2200 }, { "Machine type": "m3-megamem-128", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1700, "Maximum read throughput (MiBps)": 2200 }, { "Machine type": "m3-ultramem-32", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 2200 }, { "Machine type": "m3-ultramem-64", "Maximum write IOPS": 40000, "Maximum read IOPS": 40000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 2200 }, { "Machine type": "m3-ultramem-128", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1700, "Maximum read throughput (MiBps)": 2200 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/n-family.json ================================================ { "N1 VMs": { "pd-balanced": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-63", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "64 or more", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-63", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "64 or more", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 5000, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16 or more", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ] }, "N2 VMs": { "pd-balanced": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-63", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "64 or more", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-63", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "64 or more", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 5000, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16 or more", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ], "pd-extreme": [ { "Machine type": "n2-standard-64", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-standard-80", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-standard-96", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-standard-128", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-highmem-64", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-highmem-80", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-highmem-96", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-highmem-128", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-highcpu-64", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-highcpu-80", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 }, { "Machine type": "n2-highcpu-96", "Maximum write IOPS": 120000, "Maximum read IOPS": 120000, "Maximum write throughput (MiBps)": 3000, "Maximum read throughput (MiBps)": 4000 } ] }, "N2D VMs": { "pd-balanced": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-63", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "64 or more", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-63", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "64 or more", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 5000, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16 or more", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/t-family.json ================================================ { "T2D VMs": { "pd-balanced": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-60", "Maximum write IOPS": 50000, "Maximum read IOPS": 50000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 15000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-60", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-standard": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 5000, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16 or more", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ] }, "T2A VMs": { "pd-balanced": [ { "VM vCPU count": "1", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-47", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "48", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1800, "Maximum read throughput (MiBps)": 1800 } ], "pd-ssd": [ { "VM vCPU count": "1", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-7", "Maximum write IOPS": 20000, "Maximum read IOPS": 20000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 800, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16-31", "Maximum write IOPS": 25000, "Maximum read IOPS": 25000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "32-47", "Maximum write IOPS": 60000, "Maximum read IOPS": 60000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "48", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1800, "Maximum read throughput (MiBps)": 1800 } ], "pd-standard": [ { "VM vCPU count": "1", "Maximum write IOPS": 15000, "Maximum read IOPS": 1000, "Maximum write throughput (MiBps)": 204, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "2-3", "Maximum write IOPS": 15000, "Maximum read IOPS": 2400, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "4-7", "Maximum write IOPS": 15000, "Maximum read IOPS": 3000, "Maximum write throughput (MiBps)": 240, "Maximum read throughput (MiBps)": 240 }, { "VM vCPU count": "8-15", "Maximum write IOPS": 15000, "Maximum read IOPS": 5000, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 800 }, { "VM vCPU count": "16 or more", "Maximum write IOPS": 15000, "Maximum read IOPS": 7500, "Maximum write throughput (MiBps)": 400, "Maximum read throughput (MiBps)": 1200 } ] } } ================================================ FILE: gcpdiag/runbook/gce/disk_performance_benchmark/z-family.json ================================================ { "Z3 VMs": { "pd-balanced": [ { "VM vCPU count": "88", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "176", "Maximum write IOPS": 80000, "Maximum read IOPS": 80000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ], "pd-ssd": [ { "VM vCPU count": "88", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 }, { "VM vCPU count": "176", "Maximum write IOPS": 100000, "Maximum read IOPS": 100000, "Maximum write throughput (MiBps)": 1200, "Maximum read throughput (MiBps)": 1200 } ] } } ================================================ FILE: gcpdiag/runbook/gce/flags.py ================================================ # Copyright 2021 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. """Parameters applicable to GCE runbooks.""" # pylint: disable=wildcard-import, unused-wildcard-import from gcpdiag.runbook.gcp.flags import * from gcpdiag.runbook.iam.flags import * LOCAL_USER = 'local_user' TUNNEL_THROUGH_IAP = 'tunnel_through_iap' CHECK_OS_LOGIN = 'check_os_login' POSIX_USER = 'posix_user' ACCESS_METHOD = 'access_method' INSTANCE_CREATED = 'instance_created' CHECK_ZONE_SEPARATION_POLICY = 'check_zone_separation_policy' OPERATION_TYPE = 'operation_type' ================================================ FILE: gcpdiag/runbook/gce/generalized_steps.py ================================================ # Copyright 2021 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. """Contains Reusable Steps for GCE related Diagnostic Trees""" import logging import math import operator as operator_mod import re from datetime import datetime from typing import Any, List, Optional, Set import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import runbook, utils from gcpdiag.queries import crm, gce, logs, monitoring from gcpdiag.runbook import exceptions as runbook_exceptions from gcpdiag.runbook import op from gcpdiag.runbook import util as runbook_util from gcpdiag.runbook.gce import constants, util from gcpdiag.runbook.gcp import flags from gcpdiag.runbook.iam import flags as iam_flags from gcpdiag.runbook.iam import generalized_steps as iam_gs from gcpdiag.runbook.logs import generalized_steps as logs_gs UTILIZATION_THRESHOLD = 0.95 def _get_operator_fn(op_str: str): """Maps an operator string to a function from the operator module.""" operators = { 'eq': operator_mod.eq, 'ne': operator_mod.ne, 'lt': operator_mod.lt, 'le': operator_mod.le, 'gt': operator_mod.gt, 'ge': operator_mod.ge, } if op_str not in operators: raise ValueError( f"Unsupported operator: '{op_str}'. Supported operators are: " f"{list(operators.keys()) + ['contains', 'matches']}") return operators[op_str] def _resolve_expected_value(value_str: str) -> Any: """Resolves expected value, handling 'ref:' prefix.""" if value_str.startswith('ref:'): const_name = value_str[4:] resolved_value = getattr(constants, const_name, None) if resolved_value is None: raise ValueError(f"Could not resolve constant reference: '{value_str}'. " f"Ensure '{const_name}' is defined in gce/constants.py.") return resolved_value return value_str def _check_condition(actual_value: Any, expected_value: Any, op_str: str) -> bool: """Compares actual and expected values using the specified operator.""" # Handle collection/regex operators first if op_str == 'contains': if hasattr(actual_value, '__contains__'): return expected_value in actual_value else: return False if op_str == 'matches': try: if isinstance(actual_value, (list, set, tuple)): return any( re.search(str(expected_value), str(item)) for item in actual_value) else: return bool(re.search(str(expected_value), str(actual_value))) except re.error as e: raise ValueError( f"Invalid regex pattern provided in expected_value: '{expected_value}'" ) from e op_fn = _get_operator_fn(op_str) try: # Attempt to convert to bool if expected is bool if isinstance(expected_value, bool): actual_value = op.BOOL_VALUES.get(str(actual_value).lower()) # Attempt to convert to numeric if expected is numeric elif isinstance(expected_value, (int, float)): try: actual_value = type(expected_value)(actual_value) except (ValueError, TypeError): pass # If conversion fails, compare as is return op_fn(actual_value, expected_value) except TypeError: # If types are incompatible for comparison, consider it a mismatch return False class HighVmMemoryUtilization(runbook.Step): """Diagnoses high memory utilization issues in a Compute Engine VM. This step evaluates memory usage through available monitoring data or, as a fallback, scans serial logs for Out of Memory (OOM) indicators. It distinguishes between VMs which has exported metrics and those without, and employs a different strategy for 'e2' machine types to accurately assess memory utilization. """ template = 'vm_performance::high_memory_utilization' project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None vm: Optional[gce.Instance] = None serial_console_file = None # Typical Memory exhaustion logs in serial console. def execute(self): """Verify VM memory utilization is within optimal levels.""" if self.vm: vm = self.vm self.project_id = vm.project_id self.zone = vm.zone self.instance_name = vm.name else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) vm = gce.get_instance( project_id=self.project_id, zone=self.zone, instance_name=self.instance_name, ) if not vm: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return start_formatted_string = op.get( flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S') end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S') within_str = f'within d\'{start_formatted_string}\', d\'{end_formatted_string}\'' mark_no_ops_agent = False mem_usage_metrics = None if util.ops_agent_installed(self.project_id, vm.id): mem_usage_metrics = monitoring.query( self.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/memory/percent_used' | filter (resource.instance_id == '{}') | group_by [resource.instance_id], 3m, [percent_used: mean(value.percent_used)] | filter (cast_units(percent_used,"")/100) >= {} | {} """.format(vm.id, UTILIZATION_THRESHOLD, within_str)) elif 'e2' in vm.machine_type(): mem_usage_metrics = monitoring.query( self.project_id, """ fetch gce_instance | {{ metric 'compute.googleapis.com/instance/memory/balloon/ram_used' ; metric 'compute.googleapis.com/instance/memory/balloon/ram_size' }} | outer_join 0 | div | filter (resource.instance_id == '{}') | group_by [resource.instance_id], 3m, [ram_left: mean(val())] | filter ram_left >= {} | {} """.format(vm.id, UTILIZATION_THRESHOLD, within_str)) else: mark_no_ops_agent = True op.info( f'VM instance {vm.id} not export memory metrics. Falling back on serial logs' ) if mem_usage_metrics: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) elif mark_no_ops_agent: op.add_skipped(vm, reason=op.prep_msg(op.SKIPPED_REASON, full_resource_path=vm.full_path)) else: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=vm.full_path)) # Checking for OOM related errors oom_errors = VmSerialLogsCheck() oom_errors.vm = vm oom_errors.serial_console_file = self.serial_console_file oom_errors.template = 'vm_performance::high_memory_usage_logs' oom_errors.negative_pattern = constants.OOM_PATTERNS self.add_child(oom_errors) class HighVmDiskUtilization(runbook.Step): """Assesses disk utilization on a VM, aiming to identify high usage that could impact performance. This step leverages monitoring data if the Ops Agent is exporting disk usage metrics. Alternatively, it scans the VM's serial port output for common disk space error messages. This approach ensures comprehensive coverage across different scenarios, including VMs without metrics data. """ template = 'vm_performance::high_disk_utilization' project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None vm: Optional[gce.Instance] = None serial_console_file: str = '' def execute(self): """Verify VM's Boot disk space utilization is within optimal levels.""" if self.vm: vm = self.vm self.project_id = vm.project_id self.zone = vm.zone self.instance_name = vm.name else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) vm = gce.get_instance( project_id=self.project_id, zone=self.zone, instance_name=self.instance_name, ) if not vm: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return start_formatted_string = op.get( flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S') end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S') within_str = ( f"within d'{start_formatted_string}', d'{end_formatted_string}'") mark_no_ops_agent = False disk_usage_metrics = None if util.ops_agent_installed(self.project_id, vm.id): disk_usage_metrics = monitoring.query( self.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/disk/percent_used' | filter (resource.instance_id == '{}' && metric.device !~ '/dev/loop.*' && metric.state == 'used') | group_by [resource.instance_id], 3m, [percent_used: mean(value.percent_used)] | filter (cast_units(percent_used,"")/100) >= {} | {} """.format(vm.id, UTILIZATION_THRESHOLD, within_str)) op.add_metadata('Disk Utilization Threshold (fraction of 1)', UTILIZATION_THRESHOLD) else: mark_no_ops_agent = True if disk_usage_metrics: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path)) elif mark_no_ops_agent: op.add_skipped(vm, reason=op.prep_msg(op.SKIPPED_REASON, full_resource_path=vm.full_path)) # Fallback to check for filesystem utilization related messages in Serial logs fs_util = VmSerialLogsCheck() fs_util.vm = vm fs_util.serial_console_file = self.serial_console_file fs_util.template = 'vm_performance::high_disk_utilization_error' fs_util.negative_pattern = constants.DISK_EXHAUSTION_ERRORS self.add_child(fs_util) else: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=vm.full_path)) class HighVmCpuUtilization(runbook.Step): """Evaluates the CPU of a VM for high utilization that might indicate performance issues. This step determines whether the CPU utilization of the VM exceeds a predefined threshold, indicating potential performance degradation. It utilizes metrics from the Ops Agent if installed, or hypervisor-visible metrics as a fallback, to accurately assess CPU performance and identify any issues requiring attention. """ template = 'vm_performance::high_cpu_utilization' project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None vm: Optional[gce.Instance] = None def execute(self): """Verify VM CPU utilization is within optimal levels""" if self.vm: vm = self.vm self.project_id = vm.project_id self.zone = vm.zone self.instance_name = vm.name else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) vm = gce.get_instance( project_id=self.project_id, zone=self.zone, instance_name=self.instance_name, ) if not vm: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return start_formatted_string = op.get( flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S') end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S') within_str = ( f"within d'{start_formatted_string}', d'{end_formatted_string}'") cpu_usage_metrics = None if util.ops_agent_installed(self.project_id, vm.id): cpu_usage_metrics = monitoring.query( self.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/cpu/utilization' | filter (resource.instance_id == '{}') | group_by [resource.instance_id], 3m, [value_utilization_mean: mean(value.utilization)] | filter (cast_units(value_utilization_mean,"")/100) >= {} | {} """.format(vm.id, UTILIZATION_THRESHOLD, within_str)) else: # use CPU utilization visible to the hypervisor cpu_usage_metrics = monitoring.query( self.project_id, """ fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | filter (resource.instance_id == '{}') | group_by [resource.instance_id], 3m, [value_utilization_max: max(value.utilization)] | filter value_utilization_max >= {} | {} """.format(vm.id, UTILIZATION_THRESHOLD, within_str)) # Get Performance issues corrected. if cpu_usage_metrics: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path)) else: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=vm.full_path)) class VmLifecycleState(runbook.Step): """Validates that a specified VM is in the 'RUNNING' state. This step is crucial for confirming the VM's availability and operational readiness. It checks the VM's lifecycle state and reports success if the VM is running or fails the check if the VM is in any other state, providing detailed status information for troubleshooting. """ template = 'vm_attributes::running' project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None vm: Optional[gce.Instance] = None expected_lifecycle_status: str def execute(self): """Verify GCE Instance is in the {expected_lifecycle_status} state.""" if self.vm: vm = self.vm else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) vm = gce.get_instance(project_id=self.project_id, zone=self.zone, instance_name=self.instance_name) if not vm: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return if vm.status == self.expected_lifecycle_status: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=vm.full_path, status=vm.status)) else: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status=vm.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, status=vm.status)) class VmSerialLogsCheck(runbook.Step): """Searches for predefined good or bad patterns in the serial logs of a GCE Instance. This diagnostic step checks the VM's serial logs for patterns that are indicative of successful operations ('GOOD_PATTERN') or potential issues ('BAD_PATTERN'). Based on the presence of these patterns, the step categorizes the VM's status as 'OK', 'Failed', or 'Uncertain'. """ project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None vm: Optional[gce.Instance] = None serial_console_file = None template = 'vm_serial_log::default' # Typical logs of a fully booted windows VM positive_pattern: List positive_pattern_operator = 'OR' negative_pattern: List negative_pattern_operator = 'OR' def execute(self): """Analyzing serial logs for predefined patterns.""" # check for parameter overrides for patterns and template if op.get('template'): self.template = op.get('template') if op.get('positive_patterns'): self.positive_pattern = runbook_util.resolve_patterns( op.get('positive_patterns'), constants) if op.get('negative_patterns'): self.negative_pattern = runbook_util.resolve_patterns( op.get('negative_patterns'), constants) if self.vm: vm = self.vm self.project_id = vm.project_id self.zone = vm.zone self.instance_name = vm.name else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) vm = gce.get_instance( project_id=self.project_id, zone=self.zone, instance_name=self.instance_name, ) if not vm: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return # All kernel failures. good_pattern_detected = False bad_pattern_detected = False serial_log_file_content = [] instance_serial_logs = None if self.serial_console_file: for files in self.serial_console_file.split(','): with open(files, encoding='utf-8') as file: serial_log_file_content = file.readlines() serial_log_file_content = serial_log_file_content + serial_log_file_content else: instance_serial_logs = gce.get_instance_serial_port_output( project_id=self.project_id, zone=self.zone, instance_name=self.instance_name) if instance_serial_logs or serial_log_file_content: instance_serial_log = instance_serial_logs.contents if \ instance_serial_logs else serial_log_file_content if hasattr(self, 'positive_pattern'): good_pattern_detected = util.search_pattern_in_serial_logs( patterns=self.positive_pattern, contents=instance_serial_log, operator=self.positive_pattern_operator) op.add_metadata('Positive patterns searched in serial logs', self.positive_pattern) if good_pattern_detected: op.add_ok(vm, reason=op.prep_msg( op.SUCCESS_REASON, full_resource_path=vm.full_path, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), )) if hasattr(self, 'negative_pattern'): # Check for bad patterns bad_pattern_detected = util.search_pattern_in_serial_logs( patterns=self.negative_pattern, contents=instance_serial_log, operator=self.negative_pattern_operator) op.add_metadata('Negative patterns searched in serial logs', self.negative_pattern) if bad_pattern_detected: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), full_resource_path=vm.full_path, instance_name=vm.name), remediation=op.prep_msg( op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) if hasattr(self, 'positive_pattern') and not hasattr( self, 'negative_pattern') and good_pattern_detected is False: op.add_uncertain( vm, reason=op.prep_msg(op.UNCERTAIN_REASON, full_resource_path=vm.full_path, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)), # uncertain uses the same remediation steps as failed remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) elif hasattr(self, 'negative_pattern') and not hasattr( self, 'positive_pattern') and bad_pattern_detected is False: op.add_uncertain( vm, reason=op.prep_msg(op.UNCERTAIN_REASON, full_resource_path=vm.full_path), # uncertain uses the same remediation steps as failed remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) elif (hasattr(self, 'positive_pattern') and good_pattern_detected is False) and (hasattr( self, 'negative_pattern') and bad_pattern_detected is False): op.add_uncertain( vm, reason=op.prep_msg(op.UNCERTAIN_REASON, full_resource_path=vm.full_path, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)), # uncertain uses the same remediation steps as failed remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) else: op.add_skipped(None, reason=op.prep_msg(op.SKIPPED_REASON)) class VmMetadataCheck(runbook.Step): """Validates a specific boolean metadata key-value pair on a GCE Instance instance. This step checks if the VM's metadata contains a specified key with the expected boolean value, facilitating configuration verification and compliance checks.""" template: str = 'vm_metadata::default' project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None vm: Optional[gce.Instance] = None # key to inspect metadata_key: str # desired value. expected_value: Any # the expected_metadata_value type # default is bool expected_value_type: type = bool def is_expected_md_value(self, actual_value): """ Compare a VM's metadata value with an expected value, converting types as necessary. Parameters: - vm: The VM object containing metadata. - actual_value: The actual value present on resource. Returns: - True if the actual metadata value matches the expected value, False otherwise. """ # Determine the type of the expected value if isinstance(self.expected_value, bool): # Convert the string metadata value to a bool for comparison return op.BOOL_VALUES.get(str(actual_value).lower(), False) == self.expected_value elif isinstance(self.expected_value, str): # Directly compare string values return actual_value == self.expected_value elif isinstance(self.expected_value, (int, float)): # use isclose math to compare int and float return math.isclose(actual_value, self.expected_value) # Note: Implement other datatype checks if required. else: # Handle other types or raise an error logging.error( 'Error while processing %s: Unsupported expected value type: %s', self.__class__.__name__, type(self.expected_value)) raise ValueError('Unsupported Type') def execute(self): """Verify VM metadata value.""" metadata_key_str = op.get('metadata_key') or getattr( self, 'metadata_key', None) expected_value_str = op.get('expected_value') or getattr( self, 'expected_value', None) if not metadata_key_str: raise runbook_exceptions.MissingParameterError( "'metadata_key' is required for this step.") if expected_value_str is None: raise runbook_exceptions.MissingParameterError( "'expected_value' is required for this step.") if metadata_key_str.startswith('ref:'): self.metadata_key = getattr(constants, metadata_key_str[4:]) else: self.metadata_key = metadata_key_str try: resolved_expected_value = _resolve_expected_value(str(expected_value_str)) # convert to bool if it looks like one. if str(resolved_expected_value).lower() in op.BOOL_VALUES: self.expected_value = op.BOOL_VALUES[str( resolved_expected_value).lower()] else: self.expected_value = resolved_expected_value self.expected_value_type = type(self.expected_value) except ValueError as e: raise runbook_exceptions.InvalidParameterError(str(e)) from e if self.vm: vm = self.vm self.project_id = vm.project_id self.zone = vm.zone self.instance_name = vm.name else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) try: vm = gce.get_instance(project_id=self.project_id, zone=self.zone, instance_name=self.instance_name) except googleapiclient.errors.HttpError as err: if err.resp.status == 404: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return else: raise utils.GcpApiError(err) from err if not vm: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return if self.is_expected_md_value(vm.get_metadata(self.metadata_key)): op.add_ok( vm, op.prep_msg(op.SUCCESS_REASON, metadata_key=self.metadata_key, expected_value=self.expected_value, expected_value_type=self.expected_value_type)) else: op.add_failed( vm, reason=op.prep_msg(op.FAILURE_REASON, metadata_key=self.metadata_key, expected_value=self.expected_value, expected_value_type=self.expected_value_type), remediation=op.prep_msg(op.FAILURE_REMEDIATION, metadata_key=self.metadata_key, expected_value=self.expected_value, expected_value_type=self.expected_value_type)) class GceVpcConnectivityCheck(runbook.Step): """Checks if ingress or egress traffic is allowed to a GCE Instance from a specified source IP. Evaluates VPC firewall rules to verify if a GCE Instance permits ingress or egress traffic from a designated source IP through a specified port and protocol. """ project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None vm: Optional[gce.Instance] = None src_ip: str protocol_type: str port: int traffic = None def execute(self): """Evaluating VPC network traffic rules.""" if self.vm: vm = self.vm else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) vm = gce.get_instance( project_id=self.project_id, zone=self.zone, instance_name=self.instance_name, ) if not vm: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return result = None if self.traffic == 'ingress': result = vm.network.firewall.check_connectivity_ingress( src_ip=self.src_ip, ip_protocol=self.protocol_type, port=self.port, target_service_account=vm.service_account, target_tags=vm.tags) if self.traffic == 'egress': result = vm.network.firewall.check_connectivity_egress( src_ip=vm.network_ips, ip_protocol=self.protocol_type, port=self.port, target_service_account=vm.service_account, target_tags=vm.tags) if result.action == 'deny': op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, address=self.src_ip, protocol=self.protocol_type, port=self.port, name=vm.name, result=result.matched_by_str), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) elif result.action == 'allow': op.add_ok( vm, op.prep_msg(op.SUCCESS_REASON, address=self.src_ip, protocol=self.protocol_type, port=self.port, name=vm.name, result=result.matched_by_str)) class VmScope(runbook.Step): """Verifies that a GCE Instance has at least one of a list of required access scopes Confirms that the VM has the necessary OAuth scope https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam Attributes - Use `access_scopes` to specify eligible access scopes - Set `require_all` to True if the VM should have all the required access. False (default) means to check if it has at least one of the required access scopes """ template = 'vm_attributes::access_scope' access_scopes: Set = set() require_all = False project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None vm: Optional[gce.Instance] = None def execute(self): """Verify GCE Instance access scope""" if self.vm: instance = self.vm else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) instance = gce.get_instance( project_id=self.project_id, zone=self.zone, instance_name=self.instance_name, ) if not instance: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return present_access_scopes = set() missing_access_scopes = set() has_item = False for scope in self.access_scopes: if scope in instance.access_scopes: has_item = True if has_item: present_access_scopes.add(scope) else: missing_access_scopes.add(scope) # Reset to false after tracking has_item = False all_present = not missing_access_scopes any_present = bool(present_access_scopes) outcome = all_present if self.require_all else any_present if outcome: op.add_ok(resource=instance, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=instance.full_path, present_access_scopes=', '.join( sorted(present_access_scopes)))) else: op.add_failed( resource=instance, reason=op.prep_msg( op.FAILURE_REASON, full_resource_path=instance.full_path, required_access_scope=', '.join(sorted(self.access_scopes)), missing_access_scopes=', '.join(sorted(missing_access_scopes))), remediation=op.prep_msg( op.FAILURE_REMEDIATION, full_resource_path=instance.full_path, required_access_scope=', '.join(sorted(self.access_scopes)), present_access_scopes=', '.join(sorted(present_access_scopes)), missing_access_scopes=', '.join(sorted(missing_access_scopes)))) class VmHasOpsAgent(runbook.Step): """Verifies that a GCE Instance has at ops agent installed and You can check for sub agents for logging and metrics Attributes - Set `check_logging` to check for logging sub agent. Defaults is True - Set `check_metrics` to check for metrics sub agent. Default is True """ template = 'vm_ops::opsagent_installed' check_logging: bool = True check_metrics: bool = True project_id: Optional[str] = None zone: Optional[str] = None instance_name: Optional[str] = None instance_id: Optional[str] = None vm: Optional[gce.Instance] = None start_time: datetime end_time: datetime def _has_ops_agent_subagent(self, metric_data): """Checks if ops agent logging agent and metric agent is installed""" subagents = { 'metrics_subagent_installed': False, 'logging_subagent_installed': False } if not metric_data: return { 'metrics_subagent_installed': False, 'logging_subagent_installed': False } for entry in metric_data.values(): version = get_path(entry, ('labels', 'metric.version'), '') if 'google-cloud-ops-agent-metrics' in version: subagents['metrics_subagent_installed'] = True if 'google-cloud-ops-agent-logging' in version: subagents['logging_subagent_installed'] = True return subagents def execute(self): """Verify GCE Instance's has ops agent installed and currently active""" if self.vm: instance = self.vm self.project_id = instance.project_id self.zone = instance.zone self.instance_name = instance.name self.instance_id = instance.id else: try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) self.zone = op.get(flags.ZONE) self.instance_name = op.get(flags.INSTANCE_NAME) or op.get( flags.INSTANCE_ID) instance = gce.get_instance( project_id=self.project_id, zone=self.zone, instance_name=self.instance_name or self.instance_id, ) if not instance: op.add_skipped( None, reason=( f'VM instance {self.instance_name or self.instance_id} not found' f' in project {self.project_id} zone {self.zone}'), ) return self.end_time = getattr(self, 'end_time', None) or op.get(flags.END_TIME) self.start_time = getattr(self, 'start_time', None) or op.get( flags.START_TIME) if self.check_logging: serial_log_entries = logs.realtime_query( project_id=self.project_id, filter_str='''resource.type="gce_instance" log_name="projects/{}/logs/ops-agent-health" resource.labels.instance_id="{}" "LogPingOpsAgent"'''.format(self.project_id, instance.id), start_time=self.start_time, end_time=self.end_time) if serial_log_entries: op.add_ok(resource=instance, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=instance.full_path, subagent='logging')) else: op.add_failed(resource=instance, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=instance.full_path, subagent='logging'), remediation=op.prep_msg( op.FAILURE_REMEDIATION, full_resource_path=instance.full_path, subagent='logging')) if self.check_metrics: ops_agent_uptime = monitoring.query( self.project_id, """ fetch gce_instance | metric 'agent.googleapis.com/agent/uptime' | filter (resource.instance_id == '{}') | align rate(1m) | every 1m | group_by [resource.instance_id, metric.version], [value_uptime_aggregate: aggregate(value.uptime)] """.format(instance.id)) subagents = self._has_ops_agent_subagent(ops_agent_uptime) if subagents['metrics_subagent_installed']: op.add_ok(resource=instance, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=instance.full_path, subagent='metrics')) else: op.add_failed(resource=instance, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=instance.full_path, subagent='metrics'), remediation=op.prep_msg( op.FAILURE_REMEDIATION, full_resource_path=instance.full_path, subagent='metrics')) class MigAutoscalingPolicyCheck(runbook.Step): """Checks MIG autoscaling policy attributes. This step performs checks on attributes within a Managed Instance Group (MIG)'s autoscaling policy. It requires both 'property_path' and 'expected_value' to be specified. The MIG can be identified either by providing 'instance_name' and 'zone' (the step will find the MIG associated with the instance) or by providing 'mig_name' and 'location' (zone or region). Parameters: - property_path: The nested path of the property to check within the MIG or autoscaler resource (e.g., 'autoscalingPolicy.mode'). If the path starts with 'autoscalingPolicy', the autoscaler resource is queried. - expected_value: The value to compare against. Supports 'ref:' prefix to resolve constants from gce/constants.py (e.g., 'ref:AUTOSCALING_MODE_ON'). - operator: The comparison operator to use. Supported: 'eq' (default), 'ne', 'lt', 'le', 'gt', 'ge'. """ template = 'mig_autoscaling::policy_check' project_id: Optional[str] = None location: Optional[str] = None # zone or region mig_name: Optional[str] = None instance_name: Optional[str] = None zone: Optional[str] = None def execute(self): """Check MIG Autoscaling Policy.""" # Get parameters self.project_id = op.get(flags.PROJECT_ID) or self.project_id self.location = op.get(flags.LOCATION) or self.location self.mig_name = op.get(flags.MIG_NAME) or self.mig_name self.instance_name = op.get(flags.INSTANCE_NAME) or self.instance_name self.zone = op.get(flags.ZONE) or self.zone property_path: Optional[str] = op.get('property_path') expected_value_str: Optional[str] = op.get('expected_value') operator: str = op.get('operator', 'eq') try: # If instance details are provided, find MIG from instance if self.instance_name and self.zone: instance = gce.get_instance(self.project_id, self.zone, self.instance_name) if instance.created_by_mig: mig = instance.mig self.location = mig.zone or mig.region if not self.location: op.add_skipped( instance, reason= f'Could not determine location for MIG of instance {self.instance_name}.', ) return else: op.add_skipped( instance, reason= f'Instance {self.instance_name} is not part of any Managed Instance Group.', ) return # If MIG details are provided, fetch MIG directly elif self.mig_name and self.location: if self.location.count('-') == 2: # zone mig = gce.get_instance_group_manager(self.project_id, self.location, self.mig_name) elif self.location.count('-') == 1: # region mig = gce.get_region_instance_group_manager(self.project_id, self.location, self.mig_name) else: raise runbook_exceptions.InvalidParameterError( f"Cannot determine if location '{self.location}' is a zone or region." ) else: raise runbook_exceptions.MissingParameterError( 'Either instance_name and zone, or mig_name and location must be provided.' ) except googleapiclient.errors.HttpError as err: if err.resp.status == 404: resource = self.instance_name or self.mig_name op.add_skipped( None, reason= f'Resource {resource} not found in project {self.project_id}.', ) return else: raise utils.GcpApiError(err) from err except AttributeError: op.add_skipped( None, reason=f'Could not determine MIG for instance {self.instance_name}.', ) return if not mig: op.add_skipped(None, reason='Could not find MIG to analyze.') return # Generic check if property_path is provided if not property_path: raise runbook_exceptions.MissingParameterError( "'property_path' is required for this step.") if expected_value_str is None: raise runbook_exceptions.MissingParameterError( "'expected_value' is required for this step.") try: expected_value = _resolve_expected_value(expected_value_str) except ValueError as e: raise runbook_exceptions.InvalidParameterError(str(e)) from e if property_path and property_path.startswith('autoscalingPolicy'): try: if mig.zone: # zonal autoscaler = gce.get_autoscaler(self.project_id, mig.zone, mig.name) actual_value = autoscaler.get(property_path, default=None) else: # regional autoscaler = gce.get_region_autoscaler(self.project_id, mig.region, mig.name) actual_value = autoscaler.get(property_path, default=None) except googleapiclient.errors.HttpError as err: if err.resp.status == 404: # No autoscaler linked, policy doesn't exist. actual_value = None else: raise utils.GcpApiError(err) from err else: actual_value = mig.get(property_path, default=None) op.add_metadata('mig_name', mig.name) op.add_metadata('property_path', property_path) op.add_metadata('expected_value', str(expected_value)) op.add_metadata('operator', operator) op.add_metadata('actual_value', str(actual_value)) if _check_condition(actual_value, expected_value, operator): op.add_ok( mig, reason=op.prep_msg( op.SUCCESS_REASON, mig_name=mig.name, property_path=property_path, expected_value=expected_value, operator=operator, actual_value=actual_value, ), ) else: op.add_failed( mig, reason=op.prep_msg( op.FAILURE_REASON, mig_name=mig.name, property_path=property_path, expected_value=expected_value, operator=operator, actual_value=actual_value, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION, mig_name=mig.name), ) class InstancePropertyCheck(runbook.Step): """Checks that a Instance property meets a given condition. This step fetches a VM instance and checks if a specified property meets the condition defined by an expected value and an operator. It supports nested properties via getattr and various operators including 'eq', 'ne', 'lt', 'le', 'gt', 'ge', 'contains', and 'matches'. Parameters: - property_path: The path of the property to check on the Instance object (e.g., 'status', 'boot_disk_licenses'). - expected_value: The value to compare against. Supports 'ref:' prefix to resolve constants from gce/constants.py (e.g., 'ref:RHEL_PATTERN'). - operator: The comparison operator to use. Supported: 'eq', 'ne', 'lt', 'le', 'gt', 'ge', 'contains', 'matches'. Default is 'eq'. Operator Notes: - `contains`: Checks for exact membership in lists (e.g., 'item' in ['item']) or substring in strings. - `matches`: Treats `expected_value` as a regex and checks if the pattern is found in the string or in *any* element of a list. Useful for partial matches (e.g., pattern 'sles' matching license 'sles-12-sap'). """ template = 'instance_property::default' project_id: Optional[str] = None instance_name: Optional[str] = None zone: Optional[str] = None def execute(self): """Check VM property.""" try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_skipped(project, reason=str(e)) return self.project_id = op.get(flags.PROJECT_ID) or self.project_id self.instance_name = op.get(flags.INSTANCE_NAME) or self.instance_name self.zone = op.get(flags.ZONE) or self.zone property_path: Optional[str] = op.get('property_path') expected_value_str: Optional[str] = op.get('expected_value') operator: str = op.get('operator', 'eq') if not self.instance_name or not self.zone: raise runbook_exceptions.MissingParameterError( 'instance_name and zone must be provided.') if not property_path: raise runbook_exceptions.MissingParameterError( "'property_path' is required for this step.") if property_path.startswith('ref:'): property_path = getattr(constants, property_path[4:]) if expected_value_str is None: raise runbook_exceptions.MissingParameterError( "'expected_value' is required for this step.") try: vm = gce.get_instance(self.project_id, self.zone, self.instance_name) except googleapiclient.errors.HttpError as err: if err.resp.status == 404: op.add_skipped( None, reason=(f'VM instance {self.instance_name} not found in project' f' {self.project_id} zone {self.zone}'), ) return else: raise utils.GcpApiError(err) from err try: resolved_expected_value = _resolve_expected_value(expected_value_str) if str(resolved_expected_value).lower() in op.BOOL_VALUES: expected_value = op.BOOL_VALUES[str(resolved_expected_value).lower()] else: expected_value = resolved_expected_value except ValueError as e: raise ValueError(str(e)) from e try: actual_value = getattr(vm, property_path) except (AttributeError, KeyError) as e: raise ValueError( f"Could not access property_path '{property_path}' on VM instance {self.instance_name}" ) from e op.add_metadata('instance_name', vm.name) op.add_metadata('property_path', property_path) op.add_metadata('expected_value', str(expected_value)) op.add_metadata('operator', operator) op.add_metadata('actual_value', str(actual_value)) if _check_condition(actual_value, expected_value, operator): op.add_ok( vm, reason=op.prep_msg( op.SUCCESS_REASON, instance_name=vm.name, property_path=property_path, expected_value=expected_value, operator=operator, actual_value=actual_value, ), ) else: op.add_failed( vm, reason=op.prep_msg( op.FAILURE_REASON, instance_name=vm.name, property_path=property_path, expected_value=expected_value, operator=operator, actual_value=actual_value, ), remediation=op.prep_msg( op.FAILURE_REMEDIATION, instance_name=vm.name, property_path=property_path, expected_value=expected_value, operator=operator, ), ) class GceLogCheck(runbook.Step): """Executes a Cloud Logging query and checks results against optional patterns. This step queries Cloud Logging using the provided filter string by calling logs.generalized_steps.CheckIssueLogEntry. See CheckIssueLogEntry for logic on FAILED/UNCERTAIN status. Parameters retrieved via `op.get()`: project_id(str): Project ID to search for filter. filter_str(str): Filter in Cloud Logging query language: https://cloud.google.com/logging/docs/view/query-library. issue_pattern(Optional[str]): Semicolon-separated ';;' list of regex patterns to search for in `protoPayload.status.message`. If prefixed with 'ref:', it resolves to a list in `gce/constants.py`. If provided, logs matching pattern will result in FAILED status. resource_name(Optional[str]): Resource identifier for template messages. template(Optional[str]): Template name, defaults to 'logging::gce_log'. """ def execute(self): """Check for log entries by calling CheckIssueLogEntry.""" project_id = op.get(flags.PROJECT_ID) filter_str = op.get('filter_str') issue_pattern_str = op.get('issue_pattern') resource_name = op.get('resource_name', 'resource NA') template = op.get('template') or 'logging::gce_log' if not project_id: raise runbook_exceptions.MissingParameterError( "'project_id' is required for this step.") if not filter_str: raise runbook_exceptions.MissingParameterError( "'filter_str' is required for this step.") # Resolve filter_str if it is a reference if filter_str.startswith('ref:'): const_name = filter_str[4:] resolved_filter = getattr(constants, const_name, None) if resolved_filter is None: raise runbook_exceptions.InvalidParameterError( f"Could not resolve constant reference: '{filter_str}'. " f"Ensure '{const_name}' is defined in gce/constants.py.") filter_str = resolved_filter issue_patterns = [] if issue_pattern_str: issue_patterns = runbook_util.resolve_patterns(issue_pattern_str, constants) log_check_step = logs_gs.CheckIssueLogEntry(project_id=project_id, filter_str=filter_str, issue_pattern=issue_patterns, template=template, resource_name=resource_name) self.add_child(log_check_step) class GceIamPolicyCheck(runbook.Step): """Checks IAM policies by calling IamPolicyCheck with support for gce/constants.py. This step is a wrapper around iam.generalized_steps.IamPolicyCheck that adds support for resolving 'roles' or 'permissions' parameters from gce/constants.py if they are prefixed with 'ref:'. It also supports ';;' delimited strings for roles or permissions lists. Parameters retrieved via `op.get()`: project_id(str): Project ID to check policy against. principal(str): The principal to check (e.g., user:x@y.com, serviceAccount:a@b.com). roles(Optional[str]): ';;' separated list of roles or 'ref:CONSTANT' to check. permissions(Optional[str]): ';;' separated list of permissions or 'ref:CONSTANT' to check. require_all(bool): If True, all roles/permissions must be present. If False (default), at least one must be present. """ def execute(self): """Check IAM policies by calling IamPolicyCheck.""" project_id = op.get(flags.PROJECT_ID) principal = op.get(iam_flags.PRINCIPAL) roles_str = op.get('roles') permissions_str = op.get('permissions') require_all = op.BOOL_VALUES.get( str(op.get('require_all', False)).lower(), False) if not project_id: raise runbook_exceptions.MissingParameterError( "'project_id' is required for this step.") if not principal: raise runbook_exceptions.MissingParameterError( "'principal' is required for this step.") if not roles_str and not permissions_str: raise runbook_exceptions.MissingParameterError( "Either 'roles' or 'permissions' must be provided.") roles_set = None if roles_str: roles_set = set(runbook_util.resolve_patterns(roles_str, constants)) permissions_set = None if permissions_str: permissions_set = set( runbook_util.resolve_patterns(permissions_str, constants)) iam_check_step = iam_gs.IamPolicyCheck(project=project_id, principal=principal, roles=roles_set, permissions=permissions_set, require_all=require_all) self.add_child(iam_check_step) ================================================ FILE: gcpdiag/runbook/gce/generalized_steps_test.py ================================================ # Copyright 2025 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. """Tests for generalized_steps.py.""" import datetime import re import tempfile import unittest from unittest import mock import apiclient.errors from gcpdiag import utils from gcpdiag.queries import apis_stub, gce from gcpdiag.runbook import exceptions as runbook_exceptions from gcpdiag.runbook import op from gcpdiag.runbook.gce import constants, generalized_steps from gcpdiag.runbook.gcp import flags from gcpdiag.runbook.iam import flags as iam_flags from gcpdiag.runbook.iam import generalized_steps as iam_gs from gcpdiag.runbook.logs import generalized_steps as logs_gs DUMMY_PROJECT_ID = 'gcpdiag-gce1-aaaa' class RegexMatcher: """A matcher that checks if a string matches a regex.""" def __init__(self, pattern): self.pattern = re.compile(pattern) def __eq__(self, other): return isinstance(other, str) and bool(self.pattern.search(other)) def __repr__(self): return f'' class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class GceStepTestBase(unittest.TestCase): """Base class for GCE generalized step tests using a real Operator context.""" def setUp(self): super().setUp() self.mock_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'test-instance', flags.INSTANCE_ID: '12345', flags.START_TIME: datetime.datetime(2025, 10, 27, tzinfo=datetime.timezone.utc), flags.END_TIME: datetime.datetime(2025, 10, 28, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params self.mock_instance = mock.Mock(spec=gce.Instance) self.mock_instance.project_id = DUMMY_PROJECT_ID self.mock_instance.zone = 'us-central1-a' self.mock_instance.name = 'test-instance' self.mock_instance.id = '12345' self.mock_instance.full_path = ( f'projects/{DUMMY_PROJECT_ID}/zones/us-central1-a/' 'instances/test-instance') self.mock_instance.machine_type = mock.Mock(return_value='n1-standard-1') self.mock_gce_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance', return_value=self.mock_instance)) class GeneralizedStepsUtilsTest(unittest.TestCase): """Tests for private utility functions and edge cases.""" def test_get_operator_fn_error(self): with self.assertRaises(ValueError): # pylint: disable=protected-access generalized_steps._get_operator_fn('invalid') def test_resolve_expected_value_ref_fail(self): with self.assertRaises(ValueError): # pylint: disable=protected-access generalized_steps._resolve_expected_value('ref:MISSING_CONST') def test_check_condition_contains_non_collection(self): # pylint: disable=protected-access assert not generalized_steps._check_condition(123, '1', 'contains') def test_check_condition_matches_invalid_regex(self): with self.assertRaises(ValueError): # pylint: disable=protected-access generalized_steps._check_condition('text', '[', 'matches') def test_check_condition_type_mismatch(self): # pylint: disable=protected-access assert not generalized_steps._check_condition({}, 1, 'lt') class HighVmMemoryUtilizationTest(GceStepTestBase): """Test HighVmMemoryUtilization step.""" def test_init_with_vm_object(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=True), mock.patch('gcpdiag.queries.monitoring.query', return_value=[]), ): step = generalized_steps.HighVmMemoryUtilization() step.vm = self.mock_instance self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_ops_agent_installed_memory_usage_found(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=True), mock.patch( 'gcpdiag.queries.monitoring.query', return_value=[{ 'metric': 'data' }], ), ): step = generalized_steps.HighVmMemoryUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once_with( run_id='test-run', resource=self.mock_instance, reason='failure_reason', remediation='failure_remediation', step_execution_id=mock.ANY, ) def test_ops_agent_not_installed_not_e2_skipped(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=False): step = generalized_steps.HighVmMemoryUtilization() self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_with( message=RegexMatcher('.*not export memory metrics.*'), step_type='INFO') self.mock_interface.add_skipped.assert_called_once() def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch( 'gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err'), ): step = generalized_steps.HighVmMemoryUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_vm_not_found(self): self.mock_gce_get_instance.return_value = None with op.operator_context(self.operator): step = generalized_steps.HighVmMemoryUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_cpu_usage_not_found(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=False), mock.patch('gcpdiag.queries.monitoring.query', return_value=[]), ): step = generalized_steps.HighVmCpuUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_e2_machine_memory_usage_found(self): self.mock_instance.machine_type.return_value = 'e2-medium' with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=False), mock.patch( 'gcpdiag.queries.monitoring.query', return_value=[{ 'metric': 'data' }], ), ): step = generalized_steps.HighVmMemoryUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() class HighVmDiskUtilizationTest(GceStepTestBase): """Test HighVmDiskUtilization step.""" def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.HighVmDiskUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_vm_not_found(self): self.mock_gce_get_instance.return_value = None with op.operator_context(self.operator): step = generalized_steps.HighVmDiskUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_init_with_vm_object(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=True), mock.patch('gcpdiag.queries.monitoring.query', return_value=[]), ): step = generalized_steps.HighVmDiskUtilization() step.vm = self.mock_instance self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_ops_agent_installed_disk_usage_not_found(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=True), mock.patch('gcpdiag.queries.monitoring.query', return_value=[]), ): step = generalized_steps.HighVmDiskUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once_with( run_id='test-run', resource=self.mock_instance, reason='success_reason', step_execution_id=mock.ANY, ) def test_ops_agent_installed_disk_usage_found(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=True), mock.patch( 'gcpdiag.queries.monitoring.query', return_value=[{ 'metric': 'data' }], ), ): step = generalized_steps.HighVmDiskUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once_with( run_id='test-run', resource=self.mock_instance, reason='failure_reason', remediation='failure_remediation', step_execution_id=mock.ANY, ) def test_no_ops_agent_skipped_with_child_step(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=False), mock.patch('gcpdiag.queries.monitoring.query', return_value=[]), ): step = generalized_steps.HighVmDiskUtilization() step.vm = self.mock_instance self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() assert any( isinstance(c, generalized_steps.VmSerialLogsCheck) for c in step.steps) class HighVmCpuUtilizationTest(GceStepTestBase): """Test HighVmCpuUtilization step.""" def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.HighVmCpuUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_init_with_vm_object(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=True), \ mock.patch('gcpdiag.queries.monitoring.query', return_value=[]): step = generalized_steps.HighVmCpuUtilization() step.vm = self.mock_instance self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_cpu_usage_found(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=False), mock.patch( 'gcpdiag.queries.monitoring.query', return_value=[{ 'metric': 'data' }], ), ): step = generalized_steps.HighVmCpuUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_ops_agent_installed_cpu_usage_found(self): with op.operator_context(self.operator): with ( mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=True), mock.patch( 'gcpdiag.queries.monitoring.query', return_value=[{ 'metric': 'data' }], ), ): step = generalized_steps.HighVmCpuUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_vm_not_found(self): self.mock_gce_get_instance.return_value = None with op.operator_context(self.operator): step = generalized_steps.HighVmCpuUtilization() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() class GceVpcConnectivityCheckTest(GceStepTestBase): """Test GceVpcConnectivityCheck step.""" def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.GceVpcConnectivityCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_vm_not_found(self): self.mock_gce_get_instance.return_value = None with op.operator_context(self.operator): step = generalized_steps.GceVpcConnectivityCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_init_with_vm_object(self): self.mock_instance.network.firewall.check_connectivity_ingress.return_value = mock.Mock( action='allow', matched_by_str='firewall-rule-1') with op.operator_context(self.operator): step = generalized_steps.GceVpcConnectivityCheck() step.vm = self.mock_instance step.traffic = 'ingress' step.src_ip = '1.2.3.4' step.protocol_type = 'tcp' step.port = 443 self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_ingress_deny(self): self.mock_instance.network.firewall.check_connectivity_ingress.return_value = mock.Mock( action='deny', matched_by_str='firewall-rule-2') with op.operator_context(self.operator): step = generalized_steps.GceVpcConnectivityCheck() step.traffic = 'ingress' step.src_ip = '1.2.3.4' step.protocol_type = 'tcp' step.port = 443 self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_egress_allow(self): self.mock_instance.network_ips = ['10.0.0.1'] self.mock_instance.network.firewall.check_connectivity_egress.return_value = mock.Mock( action='allow', matched_by_str='firewall-rule-1') with op.operator_context(self.operator): step = generalized_steps.GceVpcConnectivityCheck() step.traffic = 'egress' step.src_ip = '10.0.0.1' step.protocol_type = 'tcp' step.port = 80 self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() class VmScopeTest(GceStepTestBase): """Test VmScope step.""" def test_require_all_false_fail(self): self.mock_instance.access_scopes = {'scope3'} with op.operator_context(self.operator): step = generalized_steps.VmScope() step.access_scopes = {'scope1', 'scope2'} step.require_all = False self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_require_all_true_fail(self): self.mock_instance.access_scopes = {'scope1'} with op.operator_context(self.operator): step = generalized_steps.VmScope() step.access_scopes = {'scope1', 'scope2'} step.require_all = True self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.VmScope() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_vm_not_found(self): self.mock_gce_get_instance.return_value = None with op.operator_context(self.operator): step = generalized_steps.VmScope() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_init_with_vm_object(self): self.mock_instance.access_scopes = {'scope1'} with op.operator_context(self.operator): step = generalized_steps.VmScope() step.vm = self.mock_instance step.access_scopes = {'scope1'} step.require_all = False self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_require_all_ok(self): self.mock_instance.access_scopes = {'scope1', 'scope2'} with op.operator_context(self.operator): step = generalized_steps.VmScope() step.access_scopes = {'scope1', 'scope2'} step.require_all = True self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() class GceLogCheckTest(GceStepTestBase): """Test GceLogCheck step.""" def test_missing_project_id(self): self.params.pop(flags.PROJECT_ID, None) self.params['filter_str'] = 'test-filter' with op.operator_context(self.operator): step = generalized_steps.GceLogCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.MissingParameterError): step.execute() def test_gce_log_check_adds_child(self): self.params['filter_str'] = 'test-filter' with op.operator_context(self.operator): step = generalized_steps.GceLogCheck() self.operator.set_step(step) step.execute() assert any(isinstance(c, logs_gs.CheckIssueLogEntry) for c in step.steps) def test_gce_log_check_ref_resolution(self): constants.TEST_FILTER = 'filter-from-ref' self.params['filter_str'] = 'ref:TEST_FILTER' with op.operator_context(self.operator): step = generalized_steps.GceLogCheck() self.operator.set_step(step) step.execute() child = next( c for c in step.steps if isinstance(c, logs_gs.CheckIssueLogEntry)) self.assertEqual(child.filter_str, 'filter-from-ref') del constants.TEST_FILTER def test_gce_log_check_invalid_ref(self): self.params['filter_str'] = 'ref:INVALID_FILTER_REF' with op.operator_context(self.operator): step = generalized_steps.GceLogCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.InvalidParameterError): step.execute() def test_parameter_missing(self): self.params.pop('filter_str', None) with op.operator_context(self.operator): step = generalized_steps.GceLogCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.MissingParameterError): step.execute() def test_gce_log_check_issue_pattern_ref_resolution(self): constants.TEST_PATTERN = ['pattern1', 'pattern2'] self.params['filter_str'] = 'some-filter' self.params['issue_pattern'] = 'ref:TEST_PATTERN' with op.operator_context(self.operator): step = generalized_steps.GceLogCheck() self.operator.set_step(step) step.execute() child = next( c for c in step.steps if isinstance(c, logs_gs.CheckIssueLogEntry)) self.assertEqual(child.issue_pattern, ['pattern1', 'pattern2']) del constants.TEST_PATTERN def test_no_issue_pattern(self): self.params['filter_str'] = 'some-filter' self.params.pop('issue_pattern', None) with op.operator_context(self.operator): step = generalized_steps.GceLogCheck() self.operator.set_step(step) step.execute() child = next( c for c in step.steps if isinstance(c, logs_gs.CheckIssueLogEntry)) self.assertEqual(child.issue_pattern, []) class VmHasOpsAgentTest(GceStepTestBase): """Test VmHasOpsAgent step.""" def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.VmHasOpsAgent() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_subagent_check_with_metrics(self): step = generalized_steps.VmHasOpsAgent() metric_data = { 'a': { 'labels': { 'metric.version': 'google-cloud-ops-agent-metrics-1' } }, 'b': { 'labels': { 'metric.version': 'google-cloud-ops-agent-logging-1' } } } # pylint: disable=protected-access self.assertEqual(step._has_ops_agent_subagent(metric_data), { 'metrics_subagent_installed': True, 'logging_subagent_installed': True }) def test_logging_agent_fail(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.logs.realtime_query', return_value=[]): step = generalized_steps.VmHasOpsAgent() step.check_metrics = False self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_metrics_agent_fail(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.monitoring.query', return_value={}): step = generalized_steps.VmHasOpsAgent() step.check_logging = False self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_subagent_check_no_metrics(self): step = generalized_steps.VmHasOpsAgent() # pylint: disable=protected-access self.assertEqual(step._has_ops_agent_subagent(None), { 'metrics_subagent_installed': False, 'logging_subagent_installed': False }) def test_init_with_vm_object(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.logs.realtime_query', return_value=[{ 'log': 'data' }]): step = generalized_steps.VmHasOpsAgent() step.vm = self.mock_instance step.check_metrics = False self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_logging_agent_ok(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.logs.realtime_query', return_value=[{ 'log': 'data' }]): step = generalized_steps.VmHasOpsAgent() step.check_metrics = False self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() class VmLifecycleStateTest(GceStepTestBase): """Test VmLifecycleState step.""" def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.VmLifecycleState() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_vm_not_found(self): self.mock_gce_get_instance.return_value = None with op.operator_context(self.operator): step = generalized_steps.VmLifecycleState() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_init_with_vm_object(self): self.mock_instance.status = 'RUNNING' with op.operator_context(self.operator): step = generalized_steps.VmLifecycleState() step.vm = self.mock_instance step.expected_lifecycle_status = 'RUNNING' self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_running_state_ok(self): self.mock_instance.status = 'RUNNING' with op.operator_context(self.operator): step = generalized_steps.VmLifecycleState() step.expected_lifecycle_status = 'RUNNING' self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_non_running_state_failed(self): self.mock_instance.status = 'TERMINATED' with op.operator_context(self.operator): step = generalized_steps.VmLifecycleState() step.expected_lifecycle_status = 'RUNNING' self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() class GceIamPolicyCheckTest(GceStepTestBase): """Test GceIamPolicyCheck step.""" def test_gce_iam_policy_check_adds_child(self): self.params[iam_flags.PRINCIPAL] = 'user:test@example.com' self.params['roles'] = 'roles/viewer' with op.operator_context(self.operator): step = generalized_steps.GceIamPolicyCheck() self.operator.set_step(step) step.execute() assert any(isinstance(c, iam_gs.IamPolicyCheck) for c in step.steps) def test_iam_role_ref_resolution(self): # Coverage for ref: in IAM roles constants.TEST_ROLE = 'roles/owner' self.params.update({ iam_flags.PRINCIPAL: 'u@g.com', 'roles': 'ref:TEST_ROLE' }) with op.operator_context(self.operator): step = generalized_steps.GceIamPolicyCheck() self.operator.set_step(step) step.execute() child = next(c for c in step.steps if isinstance(c, iam_gs.IamPolicyCheck)) assert 'roles/owner' in child.roles del constants.TEST_ROLE def test_iam_permission_ref_resolution(self): constants.TEST_PERMS = ['p1', 'p2'] self.params.update({ iam_flags.PRINCIPAL: 'u@g.com', 'permissions': 'ref:TEST_PERMS' }) with op.operator_context(self.operator): step = generalized_steps.GceIamPolicyCheck() self.operator.set_step(step) step.execute() child = next(c for c in step.steps if isinstance(c, iam_gs.IamPolicyCheck)) self.assertEqual(child.permissions, {'p1', 'p2'}) del constants.TEST_PERMS def test_gce_iam_policy_check_only_roles(self): self.params[iam_flags.PRINCIPAL] = 'user:test@example.com' self.params['roles'] = 'roles/viewer' self.params.pop('permissions', None) with op.operator_context(self.operator): step = generalized_steps.GceIamPolicyCheck() self.operator.set_step(step) step.execute() child = next(c for c in step.steps if isinstance(c, iam_gs.IamPolicyCheck)) self.assertEqual(child.roles, {'roles/viewer'}) self.assertIsNone(child.permissions) class MigAutoscalingPolicyCheckTest(GceStepTestBase): """Test MigAutoscalingPolicyCheck step.""" def test_get_instance_api_error_non_404(self): err = apiclient.errors.HttpError(mock.Mock(status=500), b'server error') with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_instance', side_effect=err): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) with self.assertRaises(utils.GcpApiError): step.execute() def test_missing_property_path(self): self.mock_instance.created_by_mig = False with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.params['property_path'] = None self.params['expected_value'] = 'v' mock_mig = mock.Mock() mock_mig.name = 'test-mig' mock_mig.get.return_value = 'some_value' self.mock_instance.created_by_mig = True self.mock_instance.mig = mock_mig with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.MissingParameterError): step.execute() def test_missing_expected_value(self): self.params['property_path'] = 'p' self.params['expected_value'] = None mock_mig = mock.Mock() mock_mig.name = 'test-mig' mock_mig.get.return_value = 'some_value' self.mock_instance.created_by_mig = True self.mock_instance.mig = mock_mig with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.MissingParameterError): step.execute() def test_bad_ref_expected_value(self): self.params['property_path'] = 'p' self.params['expected_value'] = 'ref:MISSING' mock_mig = mock.Mock() mock_mig.name = 'test-mig' mock_mig.get.return_value = 'some_value' self.mock_instance.created_by_mig = True self.mock_instance.mig = mock_mig with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.InvalidParameterError): step.execute() def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_instance', return_value=None): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_check_autoscaler_policy_ok(self): self.params.update({ 'property_path': 'autoscalingPolicy.mode', 'expected_value': 'ON', }) mock_mig = mock.Mock() mock_mig.name = 'test-mig' mock_mig.zone = 'us-central1-a' self.mock_instance.created_by_mig = True self.mock_instance.mig = mock_mig mock_autoscaler = mock.Mock() mock_autoscaler.get.return_value = 'ON' with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_autoscaler', return_value=mock_autoscaler): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() mock_autoscaler.get.assert_called_with('autoscalingPolicy.mode', default=None) def test_check_autoscaler_policy_404_fail(self): self.params.update({ 'property_path': 'autoscalingPolicy.mode', 'expected_value': 'ON', }) mock_mig = mock.Mock() mock_mig.name = 'test-mig' mock_mig.zone = 'us-central1-a' self.mock_instance.created_by_mig = True self.mock_instance.mig = mock_mig err = apiclient.errors.HttpError(mock.Mock(status=404), b'not found') with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_autoscaler', side_effect=err): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_check_policy_by_instance_ok(self): self.params.update({ 'property_path': 'some_property', 'expected_value': 'some_value', }) mock_mig = mock.Mock() mock_mig.name = 'test-mig' mock_mig.get.return_value = 'some_value' self.mock_instance.created_by_mig = True self.mock_instance.mig = mock_mig with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_check_policy_by_instance_fail(self): self.params.update({ 'property_path': 'some_property', 'expected_value': 'other_value', }) mock_mig = mock.Mock() mock_mig.name = 'test-mig' mock_mig.get.return_value = 'some_value' self.mock_instance.created_by_mig = True self.mock_instance.mig = mock_mig with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_instance_not_in_mig(self): self.mock_instance.created_by_mig = False with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called() def test_regional_mig_policy_ok(self): self.params.update({ flags.INSTANCE_NAME: None, flags.ZONE: None, 'mig_name': 'm', 'location': 'us-central1', 'property_path': 'p', 'expected_value': 'v' }) mock_mig = mock.Mock() mock_mig.region = 'us-central1' mock_mig.zone = None mock_mig.name = 'm' mock_mig.get.return_value = 'v' with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_region_instance_group_manager', return_value=mock_mig): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_check_regional_autoscaler_policy_ok(self): self.params.update({ flags.INSTANCE_NAME: None, flags.ZONE: None, 'mig_name': 'regional-mig', 'location': 'us-central1', 'property_path': 'autoscalingPolicy.mode', 'expected_value': 'ON', }) mock_mig = mock.Mock() mock_mig.name = 'regional-mig' mock_mig.region = 'us-central1' mock_mig.zone = None mock_autoscaler = mock.Mock() mock_autoscaler.get.return_value = 'ON' with op.operator_context(self.operator): with ( mock.patch( 'gcpdiag.queries.gce.get_region_instance_group_manager', return_value=mock_mig, ), mock.patch( 'gcpdiag.queries.gce.get_region_autoscaler', return_value=mock_autoscaler, ), ): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_check_zonal_autoscaler_policy_ok(self): self.params.update({ flags.INSTANCE_NAME: None, flags.ZONE: None, 'mig_name': 'zonal-mig', 'location': 'us-central1-a', 'property_path': 'p', 'expected_value': 'v' }) mock_mig = mock.Mock() mock_mig.name = 'zonal-mig' mock_mig.zone = 'us-central1-a' mock_mig.get.return_value = 'v' with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_instance_group_manager', return_value=mock_mig): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_mig_location_missing_skipped(self): self.params.update({ 'property_path': 'some_property', 'expected_value': 'some_value', }) mock_mig = mock.Mock() mock_mig.name = 'test-mig' mock_mig.zone = None mock_mig.region = None mock_mig.get.return_value = 'some_value' self.mock_instance.created_by_mig = True self.mock_instance.mig = mock_mig with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_mig_invalid_location_raises_error(self): self.params.update({ flags.INSTANCE_NAME: None, flags.ZONE: None, 'mig_name': 'm', 'location': 'invalid-location-format', 'property_path': 'p', 'expected_value': 'v' }) with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) with self.assertRaises(FileNotFoundError): step.execute() class VmSerialLogsCheckTest(GceStepTestBase): """Test VmSerialLogsCheck step.""" def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.VmSerialLogsCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_vm_not_found(self): self.mock_gce_get_instance.return_value = None with op.operator_context(self.operator): step = generalized_steps.VmSerialLogsCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_pattern_overrides(self): self.params['template'] = 't' self.params['positive_patterns'] = 'p1' self.params['negative_patterns'] = 'n1' with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='n1 line')), \ mock.patch('gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', side_effect=[False, True]): step = generalized_steps.VmSerialLogsCheck() self.operator.set_step(step) step.execute() self.assertEqual(step.template, 't') self.assertEqual(step.positive_pattern, ['p1']) self.assertEqual(step.negative_pattern, ['n1']) self.mock_interface.add_failed.assert_called_once() def test_pattern_overrides_with_ref(self): constants.TEST_P_PATTERNS = ['p1', 'p2'] constants.TEST_N_PATTERNS = ['n1'] self.params['positive_patterns'] = 'ref:TEST_P_PATTERNS' self.params['negative_patterns'] = 'ref:TEST_N_PATTERNS' with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='n1 line')), \ mock.patch('gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', side_effect=[False, True]): step = generalized_steps.VmSerialLogsCheck() self.operator.set_step(step) step.execute() self.assertEqual(step.positive_pattern, ['p1', 'p2']) self.assertEqual(step.negative_pattern, ['n1']) self.mock_interface.add_failed.assert_called_once() del constants.TEST_P_PATTERNS del constants.TEST_N_PATTERNS def test_init_with_vm_object(self): with op.operator_context(self.operator): with ( mock.patch( 'gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='some serial log'), ), mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=True, ), ): step = generalized_steps.VmSerialLogsCheck() step.vm = self.mock_instance step.positive_pattern = ['success'] self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_positive_pattern_ok(self): with op.operator_context(self.operator): with ( mock.patch( 'gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='some serial log'), ), mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=True, ), ): step = generalized_steps.VmSerialLogsCheck() step.positive_pattern = ['success'] self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_negative_pattern_fail(self): with op.operator_context(self.operator): with ( mock.patch( 'gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='error log'), ), mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', side_effect=[False, True], ), ): step = generalized_steps.VmSerialLogsCheck() step.positive_pattern = ['success'] step.negative_pattern = ['error'] self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_no_pattern_uncertain(self): with op.operator_context(self.operator): with ( mock.patch( 'gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='some log'), ), mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=False, ), ): step = generalized_steps.VmSerialLogsCheck() step.positive_pattern = ['success'] step.negative_pattern = ['error'] self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_positive_only_no_match_uncertain(self): with op.operator_context(self.operator): with ( mock.patch( 'gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='some log'), ), mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=False, ), ): step = generalized_steps.VmSerialLogsCheck() step.positive_pattern = ['success'] self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_negative_only_no_match_uncertain(self): with op.operator_context(self.operator): with ( mock.patch( 'gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='some log'), ), mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=False, ), ): step = generalized_steps.VmSerialLogsCheck() step.negative_pattern = ['error'] self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_no_logs_skipped(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_instance_serial_port_output', return_value=None): step = generalized_steps.VmSerialLogsCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_serial_console_file_read_ok(self): # Create a dummy file to read with tempfile.NamedTemporaryFile(mode='w', encoding='utf-8') as f: f.write('success line') f.flush() with op.operator_context(self.operator): with mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=True, ): step = generalized_steps.VmSerialLogsCheck() step.positive_pattern = ['success'] step.serial_console_file = f.name self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_serial_console_multiple_files(self): with tempfile.NamedTemporaryFile( mode='w', encoding='utf-8') as f1, tempfile.NamedTemporaryFile( mode='w', encoding='utf-8') as f2: f1.write('success line 1') f1.flush() f2.write('success line 2') f2.flush() with op.operator_context(self.operator): with mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=True, ): step = generalized_steps.VmSerialLogsCheck() step.positive_pattern = ['success'] step.serial_console_file = f'{f1.name},{f2.name}' self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_positive_pattern_and_operator_ok(self): with op.operator_context(self.operator): with ( mock.patch( 'gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='success1 success2'), ), mock.patch( 'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=True, ), ): step = generalized_steps.VmSerialLogsCheck() step.positive_pattern = ['success1', 'success2'] step.positive_pattern_operator = 'AND' self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_parameter_overrides_only_template(self): self.params['template'] = 't' with op.operator_context(self.operator): with mock.patch('gcpdiag.queries.gce.get_instance_serial_port_output', return_value=mock.Mock(contents='some log')), \ mock.patch('gcpdiag.runbook.gce.util.search_pattern_in_serial_logs', return_value=False): step = generalized_steps.VmSerialLogsCheck() self.operator.set_step(step) step.execute() self.assertEqual(step.template, 't') class VmMetadataCheckTest(GceStepTestBase): """Test VmMetadataCheck step.""" def test_instance_resolution_failure(self): self.params.update({ 'metadata_key': 'k', 'expected_value': 'v', }) with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_expected_value_ref_resolution_fail(self): self.params.update({ 'metadata_key': 'k', 'expected_value': 'ref:MISSING_VALUE', }) with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.InvalidParameterError): step.execute() def test_init_with_vm_object(self): self.params.update({ 'metadata_key': 'enable-oslogin', 'expected_value': 'true', }) self.mock_instance.get_metadata.return_value = 'true' with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() step.vm = self.mock_instance self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_metadata_bool_true_ok(self): self.params.update({ 'metadata_key': 'enable-oslogin', 'expected_value': 'true', }) self.mock_instance.get_metadata.return_value = 'true' with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_metadata_bool_fail(self): self.params.update({ 'metadata_key': 'enable-oslogin', 'expected_value': 'true', }) self.mock_instance.get_metadata.return_value = 'false' with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_bool_expected_false_ok(self): self.params.update({ 'metadata_key': 'enable-oslogin', 'expected_value': 'false', }) self.mock_instance.get_metadata.return_value = 'false' with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_metadata_string_ok(self): self.params.update({ 'metadata_key': 'startup-script', 'expected_value': 'echo hello', }) self.mock_instance.get_metadata.return_value = 'echo hello' with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_metadata_numeric_comparison(self): constants.TEST_NUM = 10.5 self.params.update({'metadata_key': 'k', 'expected_value': 'ref:TEST_NUM'}) self.mock_instance.get_metadata.return_value = 10.50000001 with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() del constants.TEST_NUM def test_metadata_api_error_404(self): self.params.update({'metadata_key': 'k', 'expected_value': 'v'}) err = apiclient.errors.HttpError(mock.Mock(status=404), b'not found') self.mock_gce_get_instance.side_effect = err with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_metadata_key_ref_resolution(self): constants.TEST_KEY = 'startup-script' self.params.update({ 'metadata_key': 'ref:TEST_KEY', 'expected_value': 'echo hello', }) self.mock_instance.get_metadata.return_value = 'echo hello' with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_instance.get_metadata.assert_called_with('startup-script') del constants.TEST_KEY def test_metadata_key_ref_resolution_fail(self): self.params.update({ 'metadata_key': 'ref:MISSING_KEY', 'expected_value': 'echo hello', }) self.mock_instance.get_metadata.return_value = 'echo hello' with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) with self.assertRaises(AttributeError): step.execute() def test_metadata_api_error_non_404(self): self.params.update({'metadata_key': 'k', 'expected_value': 'v'}) err = apiclient.errors.HttpError(mock.Mock(status=500), b'server error') self.mock_gce_get_instance.side_effect = err with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) with self.assertRaises(utils.GcpApiError): step.execute() def test_missing_metadata_key_raises_error(self): self.params.update({'expected_value': 'v'}) with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.MissingParameterError): step.execute() def test_missing_expected_value_raises_error(self): self.params.update({'metadata_key': 'k'}) with op.operator_context(self.operator): step = generalized_steps.VmMetadataCheck() self.operator.set_step(step) with self.assertRaises(runbook_exceptions.MissingParameterError): step.execute() class InstancePropertyCheckTest(GceStepTestBase): """Test InstancePropertyCheck step.""" def test_invalid_property_path(self): self.params.update({ 'property_path': 'invalid_property', 'expected_value': 'RUNNING', }) self.mock_instance.status = 'RUNNING' with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) with self.assertRaises(ValueError): step.execute() def test_instance_resolution_failure(self): with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.FailedStepError('err')): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_vm_not_found(self): self.params['property_path'] = 'status' self.params['expected_value'] = 'RUNNING' err = apiclient.errors.HttpError(mock.Mock(status=404), b'not found') self.mock_gce_get_instance.side_effect = err with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.params.pop('property_path', None) self.params.pop('expected_value', None) def test_init_with_vm_object(self): self.params.update({ 'property_path': 'status', 'expected_value': 'RUNNING', }) self.mock_instance.status = 'RUNNING' with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() step.vm = self.mock_instance self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_property_eq_ok(self): self.params.update({ 'property_path': 'status', 'expected_value': 'RUNNING', }) self.mock_instance.status = 'RUNNING' with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_property_ne_fail(self): self.params.update({ 'property_path': 'status', 'expected_value': 'TERMINATED', 'operator': 'ne' }) self.mock_instance.status = 'TERMINATED' with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_property_path_ref_resolution(self): constants.STATUS_PROP = 'status' self.params.update({ 'property_path': 'ref:STATUS_PROP', 'expected_value': 'RUNNING', }) self.mock_instance.status = 'RUNNING' with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() del constants.STATUS_PROP def test_property_matches_ok(self): self.params.update({ 'property_path': 'name', 'expected_value': r'test-.+', 'operator': 'matches', }) self.mock_instance.name = 'test-instance' with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_property_matches_list_ok(self): self.params.update({ 'property_path': 'boot_disk_licenses', 'expected_value': r'rhel-8', 'operator': 'matches', }) self.mock_instance.boot_disk_licenses = ['rhel-8-sap', 'other-license'] with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_property_contains_list_ok(self): self.params.update({ 'property_path': 'boot_disk_licenses', 'expected_value': 'rhel-8-sap', 'operator': 'contains', }) self.mock_instance.boot_disk_licenses = ['rhel-8-sap', 'other-license'] with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_get_instance_api_error_non_404(self): self.params.update({'property_path': 'status', 'expected_value': 'RUNNING'}) err = apiclient.errors.HttpError(mock.Mock(status=500), b'server error') self.mock_gce_get_instance.side_effect = err with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) with self.assertRaises(utils.GcpApiError): step.execute() def test_missing_property_path_raises_error(self): self.params.pop('property_path', None) self.params.update({'expected_value': 'v'}) with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() step.property_path = None self.operator.set_step(step) with self.assertRaises(runbook_exceptions.MissingParameterError): step.execute() def test_missing_expected_value_raises_error(self): self.params.pop('expected_value', None) self.params.update({'property_path': 'status'}) with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() step.expected_value = None self.operator.set_step(step) with self.assertRaises(runbook_exceptions.MissingParameterError): step.execute() class StepParameterResolutionTest(GceStepTestBase): """Tests focusing on parameter resolution and 'vm not found' paths.""" def test_step_parameter_override(self): self.params['property_path'] = 'status' self.params['expected_value'] = 'RUNNING' self.mock_instance.status = 'RUNNING' with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.params.pop('property_path', None) self.params.pop('expected_value', None) def test_step_parameter_ref_resolution_override(self): constants.TEST_VALUE = 'RUNNING' self.params['property_path'] = 'status' self.params['expected_value'] = 'ref:TEST_VALUE' self.mock_instance.status = 'RUNNING' with op.operator_context(self.operator): step = generalized_steps.InstancePropertyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.params.pop('property_path', None) self.params.pop('expected_value', None) del constants.TEST_VALUE def test_vm_not_found_skips(self): # INSTANCE_ID in self.params prevents AttributeError in resolution logic. self.mock_gce_get_instance.return_value = None with op.operator_context(self.operator): step = generalized_steps.VmLifecycleState() step.expected_lifecycle_status = 'RUNNING' self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() _, kwargs = self.mock_interface.add_skipped.call_args self.assertIn('not found in project', kwargs['reason']) class ExtendedEdgeCaseTest(GceStepTestBase): """Tests for specific edge cases in logic flow.""" def test_mig_autoscaling_policy_missing_mig(self): self.mock_instance.created_by_mig = True self.mock_instance.mig = None # Trigger AttributeError branch self.params.update({'property_path': 'foo', 'expected_value': 'bar'}) with op.operator_context(self.operator): step = generalized_steps.MigAutoscalingPolicyCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called() ================================================ FILE: gcpdiag/runbook/gce/guestos_bootup.py ================================================ # Copyright 2025 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. """Guest OS boot-up runbook.""" import mimetypes import googleapiclient.errors from gcpdiag import runbook from gcpdiag.queries import crm, gce from gcpdiag.runbook import op from gcpdiag.runbook.gce import constants as gce_const from gcpdiag.runbook.gce import flags from gcpdiag.runbook.gce import generalized_steps as gce_gs class GuestosBootup(runbook.DiagnosticTree): """ Google Compute Engine VM Guest OS boot-up runbook. This runbook is designed to investigate the various boot-up stages of a Linux or Windows Guest OS running on Google Compute Engine. It is intended to help you identify and troubleshoot issues that may arise during the boot process. The runbook provides a structured approach to resolve issues. Key Investigation Areas: Boot Issues: - Check for Boot issues happening due to Kernel panics - Check for GRUB related issues. - Check if system failed to find boot disk. - Check if Filesystem corruption is causing issues with system boot. - Check if "/" Filesystem consumption is causing issues with system boot. Cloud-init checks: - Check if cloud-init has initialised or started. - Check if NIC has received the IP. Network related issues: - Check if metadata server became unreachable since last boot. - Check if there are any time sync related errors. Google Guest Agent checks: - Check if there are logs related to successful startup of Google Guest Agent. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID associated with the VM', 'required': True }, flags.INSTANCE_NAME: { 'type': str, 'help': 'The name of the VM', 'required': True }, flags.INSTANCE_ID: { 'type': str, 'help': 'The instance-id of the VM' }, flags.ZONE: { 'type': str, 'help': 'The Google Cloud zone where the VM is located.', 'required': True }, flags.SERIAL_CONSOLE_FILE: { 'type': str, 'ignorecase': True, 'help': 'Absolute path of files contailing the Serial console logs,' ' in case if gcpdiag is not able to reach the VM Serial logs.' ' i.e -p serial_console_file="filepath1,filepath2" ', } } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = GuestosBootupStart() self.add_start(start) # consider leverage LLM to perform anomaly detection # or other advanced analysis on serial logs within the VM # Check for Boot related issues kernel_panic = gce_gs.VmSerialLogsCheck() kernel_panic.project_id = op.get(flags.PROJECT_ID) kernel_panic.zone = op.get(flags.ZONE) kernel_panic.instance_name = op.get(flags.INSTANCE_NAME) kernel_panic.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) kernel_panic.template = 'vm_serial_log::kernel_panic' kernel_panic.negative_pattern = gce_const.KERNEL_PANIC_LOGS self.add_step(parent=start, child=kernel_panic) # Checking for Filesystem corruption related errors fs_corruption = gce_gs.VmSerialLogsCheck() fs_corruption.project_id = op.get(flags.PROJECT_ID) fs_corruption.zone = op.get(flags.ZONE) fs_corruption.instance_name = op.get(flags.INSTANCE_NAME) fs_corruption.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) fs_corruption.template = 'vm_serial_log::linux_fs_corruption' fs_corruption.negative_pattern = gce_const.FS_CORRUPTION_MSG self.add_step(parent=start, child=fs_corruption) #Checking for Cloud-init related issues cloudinit_issues = CloudInitChecks() self.add_step(parent=start, child=cloudinit_issues) # Checking for network related errors network_issue = gce_gs.VmSerialLogsCheck() network_issue.project_id = op.get(flags.PROJECT_ID) network_issue.zone = op.get(flags.ZONE) network_issue.instance_name = op.get(flags.INSTANCE_NAME) network_issue.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) network_issue.template = 'vm_serial_log::network_errors' network_issue.negative_pattern = gce_const.NETWORK_ERRORS self.add_step(parent=start, child=network_issue) # Check for Guest Agent status guest_agent_check = gce_gs.VmSerialLogsCheck() guest_agent_check.project_id = op.get(flags.PROJECT_ID) guest_agent_check.zone = op.get(flags.ZONE) guest_agent_check.instance_name = op.get(flags.INSTANCE_NAME) guest_agent_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) guest_agent_check.template = 'vm_serial_log::guest_agent' guest_agent_check.positive_pattern = gce_const.GUEST_AGENT_STATUS_MSG guest_agent_check.negative_pattern = gce_const.GUEST_AGENT_FAILED_MSG self.add_step(parent=start, child=guest_agent_check) self.add_end(runbook.EndStep()) class GuestosBootupStart(runbook.StartStep): """Fetches VM details and validates the instance state. This step retrieves the VM instance details based on the provided project ID, zone, and instance name. It checks if the VM is running and updates the instance ID or name if missing. Additionally, it performs sanity checks on the provided serial console log files to ensure they are valid plain text files. """ template = 'vm_attributes::running' def execute(self): """Fetching VM details""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) except googleapiclient.errors.HttpError: op.add_skipped( project, reason=('Instance {} does not exist in zone {} or project {}').format( op.get(flags.INSTANCE_NAME), op.get(flags.ZONE), op.get(flags.PROJECT_ID))) else: if vm and vm.is_running: # Check for instance id and instance name if not op.get(flags.INSTANCE_ID): op.put(flags.INSTANCE_ID, vm.id) if not op.get(flags.INSTANCE_NAME): op.put(flags.INSTANCE_NAME, vm.name) else: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status=vm.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, status=vm.status)) # file sanity checks if op.get(flags.SERIAL_CONSOLE_FILE): for file in op.get(flags.SERIAL_CONSOLE_FILE).split(','): try: with open(file, 'rb') as f: results = mimetypes.guess_type(file)[0] if results and not results.startswith('text/'): # Peek at content for further clues content_start = f.read(1024) # Read a small chunk # Check for gzip and xz magic number (first two bytes) if content_start.startswith( b'\x1f\x8b') or content_start.startswith(b'\xfd'): op.add_skipped( vm, reason=('File {} appears to be compressed, not plain text.' ).format(file)) else: # If not gzip or tar, try simple text encoding detection (UTF-8, etc.) try: content_start.decode() except UnicodeDecodeError: op.add_skipped( vm, reason=('File {} does not appear to be plain text.' ).format(file)) except FileNotFoundError: op.add_skipped( vm, reason=('The file {} does not exists. Please verify if ' 'you have provided the correct absolute file path' ).format(file)) class CloudInitChecks(runbook.CompositeStep): """Cloud init related checks""" def execute(self): """Cloud init related checks""" ubuntu_licenses = gce.get_gce_public_licences('ubuntu-os-cloud') ubuntu_pro_licenses = gce.get_gce_public_licences('ubuntu-os-pro-cloud') licenses = ubuntu_licenses + ubuntu_pro_licenses vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) if vm.check_license(licenses): # Checking for Cloud init startup log cloud_init_startup_check = gce_gs.VmSerialLogsCheck() cloud_init_startup_check.project_id = op.get(flags.PROJECT_ID) cloud_init_startup_check.zone = op.get(flags.ZONE) cloud_init_startup_check.instance_name = op.get(flags.INSTANCE_NAME) cloud_init_startup_check.serial_console_file = op.get( flags.SERIAL_CONSOLE_FILE) cloud_init_startup_check.template = 'vm_serial_log::cloud_init_startup_check' cloud_init_startup_check.positive_pattern = gce_const.CLOUD_INIT_STARTUP_PATTERN self.add_child(cloud_init_startup_check) # Checking if NIC has received IP cloud_init_check = gce_gs.VmSerialLogsCheck() cloud_init_check.template = 'vm_serial_log::cloud_init' cloud_init_check.project_id = op.get(flags.PROJECT_ID) cloud_init_check.zone = op.get(flags.ZONE) cloud_init_check.instance_name = op.get(flags.INSTANCE_NAME) cloud_init_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) cloud_init_check.negative_pattern = gce_const.CLOUD_INIT_NEGATIVE_PATTERN cloud_init_check.positive_pattern = gce_const.CLOUD_INIT_POSITIVE_PATTERN self.add_child(cloud_init_check) else: op.add_skipped( vm, reason='This VM is not Ubuntu or it does not uses cloud-init') ================================================ FILE: gcpdiag/runbook/gce/guestos_bootup_test.py ================================================ # Copyright 2025 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. """Test class for gce/GuestosBootup.""" import datetime import unittest from unittest import mock import googleapiclient.errors from gcpdiag import config, runbook from gcpdiag.queries import gce as gce_queries from gcpdiag.runbook import gce, op, snapshot_test_base from gcpdiag.runbook.gce import flags, guestos_bootup class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class BootupStepTestBase(unittest.TestCase): """Base class for bootup tests.""" def setUp(self): super().setUp() self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.mock_op_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put')) self.mock_op_add_ok = self.enterContext( mock.patch('gcpdiag.runbook.op.add_ok')) self.mock_op_add_failed = self.enterContext( mock.patch('gcpdiag.runbook.op.add_failed')) self.mock_op_add_skipped = self.enterContext( mock.patch('gcpdiag.runbook.op.add_skipped')) self.mock_gce_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance')) self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project', return_value=mock.Mock())) self.mock_instance = mock.Mock(spec=gce_queries.Instance) self.mock_instance.project_id = 'test-project' self.mock_instance.zone = 'us-central1-a' self.mock_instance.name = 'test-instance' self.mock_instance.id = '12345' self.mock_instance.is_running = True self.mock_gce_get_instance.return_value = self.mock_instance self.params = { flags.PROJECT_ID: 'test-project', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'test-instance', flags.INSTANCE_ID: None, flags.SERIAL_CONSOLE_FILE: None, flags.START_TIME: datetime.datetime(2025, 10, 27), flags.END_TIME: datetime.datetime(2025, 10, 28), } self.mock_op_get.side_effect = lambda key, default=None: self.params.get( key, default) # Setup operator context mock_interface = mock.Mock() operator = op.Operator(mock_interface) operator.messages = MockMessage() operator.parameters = self.params operator.run_id = 'test-run-id' mock_step = mock.Mock() mock_step.execution_id = 'test-step-id' self.enterContext( mock.patch.object(op.Operator, 'step', new_callable=mock.PropertyMock, return_value=mock_step)) self.enterContext(op.operator_context(operator)) class GuestosBootupStartTest(BootupStepTestBase): def test_instance_id_missing(self): self.mock_instance.is_running = True self.params[flags.INSTANCE_ID] = None step = guestos_bootup.GuestosBootupStart() step.execute() self.mock_op_put.assert_any_call(flags.INSTANCE_ID, '12345') def test_instance_name_missing(self): self.mock_instance.is_running = True self.params[flags.INSTANCE_NAME] = None # Must provide ID if name is missing for realistic resolution self.params[flags.INSTANCE_ID] = '12345' step = guestos_bootup.GuestosBootupStart() step.execute() self.mock_op_put.assert_any_call(flags.INSTANCE_NAME, 'test-instance') def test_instance_not_found(self): self.mock_gce_get_instance.side_effect = googleapiclient.errors.HttpError( mock.Mock(status=404), b'not found') step = guestos_bootup.GuestosBootupStart() step.execute() self.mock_op_add_skipped.assert_called_once() def test_instance_not_running(self): self.mock_instance.is_running = False self.mock_instance.status = 'TERMINATED' step = guestos_bootup.GuestosBootupStart() step.execute() self.mock_op_add_failed.assert_called_once() def test_serial_file_not_found(self): self.params[flags.SERIAL_CONSOLE_FILE] = 'nonexistent.log' with mock.patch('builtins.open', side_effect=FileNotFoundError): step = guestos_bootup.GuestosBootupStart() step.execute() self.mock_op_add_skipped.assert_called_once() self.assertIn('does not exists', self.mock_op_add_skipped.call_args[1]['reason']) def test_serial_file_compressed(self): self.params[flags.SERIAL_CONSOLE_FILE] = 'compressed.log.gz' m = mock.mock_open(read_data=b'\x1f\x8b' + b' compressed data') with ( mock.patch('builtins.open', m), mock.patch('mimetypes.guess_type', return_value=('application/gzip', 'gzip')), ): step = guestos_bootup.GuestosBootupStart() step.execute() self.mock_op_add_skipped.assert_called_once() self.assertIn( 'appears to be compressed', self.mock_op_add_skipped.call_args[1]['reason'], ) def test_serial_file_not_plain_text(self): self.params[flags.SERIAL_CONSOLE_FILE] = 'binary.log' # 0xff is invalid in utf-8 m = mock.mock_open(read_data=b'\x01\x02\xff\xfe') with ( mock.patch('builtins.open', m), mock.patch( 'mimetypes.guess_type', return_value=('application/octet-stream', None), ), ): step = guestos_bootup.GuestosBootupStart() step.execute() self.mock_op_add_skipped.assert_called_once() self.assertIn( 'does not appear to be plain text', self.mock_op_add_skipped.call_args[1]['reason'], ) def test_serial_valid_file(self): self.params[flags.SERIAL_CONSOLE_FILE] = 'valid.log' m = mock.mock_open(read_data=b'plain text log') with ( mock.patch('builtins.open', m), mock.patch('mimetypes.guess_type', return_value=('text/plain', None)), ): step = guestos_bootup.GuestosBootupStart() step.execute() self.mock_op_add_skipped.assert_not_called() class CloudInitChecksTest(BootupStepTestBase): def setUp(self): super().setUp() self.mock_gce_get_gce_public_licences = self.enterContext( mock.patch('gcpdiag.queries.gce.get_gce_public_licences', return_value=['license1'])) self.mock_vm_serial_logs_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.generalized_steps.VmSerialLogsCheck')) self.mock_add_child = self.enterContext( mock.patch( 'gcpdiag.runbook.gce.guestos_bootup.CloudInitChecks.add_child')) def test_ubuntu_license_present(self): self.mock_instance.check_license.return_value = True step = guestos_bootup.CloudInitChecks() step.execute() self.mock_instance.check_license.assert_called_once() self.assertEqual(self.mock_add_child.call_count, 2) self.mock_op_add_skipped.assert_not_called() def test_ubuntu_license_not_present(self): self.mock_instance.check_license.return_value = False step = guestos_bootup.CloudInitChecks() step.execute() self.mock_instance.check_license.assert_called_once() self.mock_add_child.assert_not_called() self.mock_op_add_skipped.assert_called_once() class GuestosBootupBuildTreeTest(unittest.TestCase): def test_build_tree(self): self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.params = { flags.PROJECT_ID: 'test-project', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'test-instance', } self.mock_op_get.side_effect = lambda key, default=None: self.params.get( key, default) tree = guestos_bootup.GuestosBootup() tree.build_tree() self.assertIsInstance(tree.start, guestos_bootup.GuestosBootupStart) children = tree.start.steps self.assertEqual(len(children), 6) self.assertEqual(children[0].template, 'vm_serial_log::kernel_panic') self.assertEqual(children[1].template, 'vm_serial_log::linux_fs_corruption') self.assertIsInstance(children[2], guestos_bootup.CloudInitChecks) self.assertEqual(children[3].template, 'vm_serial_log::network_errors') self.assertEqual(children[4].template, 'vm_serial_log::guest_agent') self.assertIsInstance(children[5], runbook.EndStep) class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gce runbook_name = 'gce/guestos-bootup' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gce-vm-performance', 'instance_name': 'faulty-linux-ssh', 'zone': 'europe-west2-a' }, { 'project_id': 'gcpdiag-gce-vm-performance', 'instance_name': 'valid-linux-ssh', 'zone': 'europe-west2-a' }] ================================================ FILE: gcpdiag/runbook/gce/ops_agent.py ================================================ # Copyright 2024 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. """Contains diagnostic tree for ops agent onboarding and investigation as well as custom steps.""" from datetime import datetime import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import runbook # Interact with GCP APIs using gcpdiag queries from gcpdiag.queries import crm, gce, iam, logs, monitoring from gcpdiag.runbook import op # Reuse generalized steps from other products within this runbook from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.gce import constants, flags from gcpdiag.runbook.gce import generalized_steps as gce_gs from gcpdiag.runbook.gcp import generalized_steps as gcp_gs from gcpdiag.runbook.iam import generalized_steps as iam_gs GAC_SERVICE_ACCOUNT = 'gac_service_account' CHECK_LOGGING = 'check_logging' CHECK_MONITORING = 'check_monitoring' CHECK_SERIAL_PORT_LOGGING = 'check_serial_port_logging' class OpsAgent(runbook.DiagnosticTree): """Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM This runbook will examine the following key areas: 1. API Service Checks: - Ensures that Cloud APIs for Logging and/or Monitoring are accessible. 2. Permission Checks: - Verifies that the necessary permissions are in place for exporting logs and/or metrics. 3. Workload Authentication: - Confirms that the Ops Agent has a service account for authentication. - If using Google Application Credentials, provide the service account with the `gac_service_account` parameter. 4. Scope of Investigation: - Note that this runbook does not include internal VM checks, such as guest OS investigations. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID containing the VM', 'required': True }, flags.INSTANCE_NAME: { 'type': str, 'help': 'Name of the GCE instance running the Ops Agent', 'required': True }, flags.INSTANCE_ID: { 'type': str, 'help': 'ID of the GCE instance running the Ops Agent', }, flags.ZONE: { 'type': str, 'help': 'Zone of the GCE instance running the Ops Agent', 'required': True }, flags.START_TIME: { 'type': datetime, 'help': 'Start time of the issue', }, flags.END_TIME: { 'type': datetime, 'help': 'End time of the issue', }, GAC_SERVICE_ACCOUNT: { 'type': str, 'help': 'GOOGLE_APPLICATION_CREDENTIALS used by ops agent, if applicable' }, CHECK_LOGGING: { 'type': bool, 'help': 'Investigate logging issues', 'default': True }, CHECK_MONITORING: { 'type': bool, 'help': 'Investigate monitoring issues', 'default': True }, CHECK_SERIAL_PORT_LOGGING: { 'type': bool, 'help': 'Check if VM Serial logging is enabled', 'default': True } } def build_tree(self): """Describes step relationships""" # Instantiate your start class start = OpsAgentStart() # add it to your tree self.add_start(start) sa_check = VmHasAServiceAccount() self.add_step(parent=start, child=sa_check) self.add_step(parent=sa_check, child=iam_gs.VmHasAnActiveServiceAccount()) self.add_step(parent=sa_check, child=InvestigateLoggingMonitoring()) self.add_end(OpsAgentEnd()) class OpsAgentStart(runbook.StartStep): """Prepares the parameters required for the gce/ops-agent runbook. Looks up the GCE resource running the ops agent binary Ensures both instance_id and instance_name parameters are available. """ def execute(self): """Verify context and parameters required for Ops Agent runbook checks""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: instance = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) except googleapiclient.errors.HttpError: op.add_skipped( project, reason=('Instance {} does not exist in zone {} or project {}').format( op.get(flags.INSTANCE_NAME), op.get(flags.ZONE), op.get(flags.PROJECT_ID))) else: # Prepare extra parameters. if instance and op.get(flags.INSTANCE_NAME): op.put(flags.INSTANCE_ID, instance.id) if instance and op.get(flags.INSTANCE_ID): op.put(flags.INSTANCE_NAME, instance.name) class VmHasAServiceAccount(runbook.Step): """Verifies the existence of a service account for the Ops Agent to use. This investigation only happens from the perspective googleapis and user provided input. We don't look inside the VM for cases like GOOGLE_APPLICATION_CREDENTIALS. User will have to know and specify that if They are using the application """ template = 'vm_attributes::service_account_exists' def execute(self): """Verify Ops Agent has a service account.""" instance = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) if not op.get(GAC_SERVICE_ACCOUNT): if instance.service_account: op.put(flags.SERVICE_ACCOUNT, instance.service_account) op.add_ok(instance, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=instance.full_path, sa=instance.service_account)) else: op.add_failed(instance, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=instance.full_path), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return if op.get(GAC_SERVICE_ACCOUNT): sa_list = iam.get_service_account_list(op.get(flags.PROJECT_ID)) for sa in sa_list: if sa.email == op.get(GAC_SERVICE_ACCOUNT): op.put(flags.SERVICE_ACCOUNT, sa.email) op.add_ok(instance, reason=op.prep_msg(op.SUCCESS_REASON, full_resource_path=instance.full_path, sa=sa.email)) break elif not op.get(GAC_SERVICE_ACCOUNT) and not instance.service_account: op.add_failed(instance, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=instance.full_path), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class InvestigateLoggingMonitoring(runbook.Gateway): """A Decision Point for to check Logging and/or Monitoring related issues Decides whether to check for ops agent - logging related issues if CHECK_LOGGING is set to true - monitoring related issues if CHECK_MONITORING is set to true """ def execute(self): """Decision point to investigate Logging and/or Monitoring related issues.""" if op.get(CHECK_LOGGING): logging_api = gcp_gs.ServiceApiStatusCheck() logging_api.api_name = 'logging' logging_api.project_id = op.get(flags.PROJECT_ID) logging_api.expected_state = constants.APIState.ENABLED self.add_child(logging_api) log_permission_check = iam_gs.IamPolicyCheck() log_permission_check.project = op.get(flags.PROJECT_ID) log_permission_check.principal = ( f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}') log_permission_check.roles = [ 'roles/owner', 'roles/editor', 'roles/logging.logWriter', 'roles/logging.admin', ] logging_api.add_child(log_permission_check) logging_access_scope = gce_gs.VmScope() logging_access_scope.project_id = op.get(flags.PROJECT_ID) logging_access_scope.zone = op.get(flags.ZONE) logging_access_scope.instance_name = op.get(flags.INSTANCE_NAME) logging_access_scope.access_scopes = { 'https://www.googleapis.com/auth/logging.write', 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/logging.admin', } logging_api.add_child(logging_access_scope) logging_subagent_check = gce_gs.VmHasOpsAgent() logging_subagent_check.project_id = op.get(flags.PROJECT_ID) logging_subagent_check.zone = op.get(flags.ZONE) logging_subagent_check.instance_name = op.get(flags.INSTANCE_NAME) logging_subagent_check.instance_id = op.get(flags.INSTANCE_ID) logging_subagent_check.start_time = op.get(flags.START_TIME) logging_subagent_check.end_time = op.get(flags.END_TIME) logging_subagent_check.check_logging = True logging_subagent_check.check_metrics = False logging_access_scope.add_child(logging_subagent_check) if op.get(CHECK_SERIAL_PORT_LOGGING): logging_api.add_child(child=CheckSerialPortLogging()) if op.get(CHECK_MONITORING): monitoring_api = gcp_gs.ServiceApiStatusCheck() monitoring_api.project_id = op.get(flags.PROJECT_ID) monitoring_api.api_name = 'monitoring' monitoring_api.expected_state = constants.APIState.ENABLED self.add_child(monitoring_api) monitoring_permission_check = iam_gs.IamPolicyCheck() monitoring_permission_check.project = op.get(flags.PROJECT_ID) monitoring_permission_check.principal = f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}' monitoring_permission_check.roles = [ 'roles/monitoring.metricWriter', 'roles/monitoring.admin', 'roles/monitoring.editor', 'roles/owner', 'roles/editor' ] monitoring_api.add_child(child=monitoring_permission_check) monitoring_access_scope = gce_gs.VmScope() monitoring_access_scope.project_id = op.get(flags.PROJECT_ID) monitoring_access_scope.zone = op.get(flags.ZONE) monitoring_access_scope.instance_name = op.get(flags.INSTANCE_NAME) monitoring_access_scope.access_scopes = { 'https://www.googleapis.com/auth/monitoring.write', 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/monitoring' } monitoring_api.add_child(monitoring_access_scope) # Check if ops agent metric subagent is installed. metric_subagent_check = gce_gs.VmHasOpsAgent() metric_subagent_check.project_id = op.get(flags.PROJECT_ID) metric_subagent_check.zone = op.get(flags.ZONE) metric_subagent_check.instance_name = op.get(flags.INSTANCE_NAME) metric_subagent_check.instance_id = op.get(flags.INSTANCE_ID) metric_subagent_check.start_time = op.get(flags.START_TIME) metric_subagent_check.end_time = op.get(flags.END_TIME) metric_subagent_check.check_logging = False metric_subagent_check.check_metrics = True monitoring_access_scope.add_child(metric_subagent_check) class CheckSerialPortLogging(runbook.CompositeStep): """Checks if ops agent serial port logging Verifies Organization policy and VM configuration to issue serial port logging to Stackdriver from Compute Engine VMs is feasible. """ def execute(self): """Verify GCP config required for serial port logging with ops agent""" serial_logging_orgpolicy_check = crm_gs.OrgPolicyCheck() serial_logging_orgpolicy_check.constraint = 'constraints/compute.disableSerialPortLogging' serial_logging_orgpolicy_check.is_enforced = False self.add_child(serial_logging_orgpolicy_check) serial_logging_md_check = gce_gs.VmMetadataCheck() serial_logging_md_check.project_id = op.get(flags.PROJECT_ID) serial_logging_md_check.zone = op.get(flags.ZONE) serial_logging_md_check.instance_name = op.get(flags.INSTANCE_NAME) serial_logging_md_check.metadata_key = 'serial-port-logging-enable' serial_logging_md_check.expected_value = True self.add_child(serial_logging_md_check) class OpsAgentEnd(runbook.EndStep): """Finalizes the OpsAgent checks. Checks if logs or metrics are currently present after diagnosing the issue. """ def _has_ops_agent_metric_logging_agent(self, metric_data): """Checks if ops agent logging agent and metric agent is installed""" pass def execute(self): """Finalize Ops agent checks""" serial_log_entries = None has_expected_opsagent_logs = False ops_agent_uptime = None has_opsagent = False if op.get(CHECK_SERIAL_PORT_LOGGING): serial_log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str='''resource.type="gce_instance" log_name="projects/{}/logs/ops-agent-health" resource.labels.instance_id="{}" AND "LogPingOpsAgent"'''.format(op.get(flags.PROJECT_ID), op.get(flags.INSTANCE_ID)), start_time=op.get(flags.END_TIME), end_time=datetime.now()) if serial_log_entries: has_expected_opsagent_logs = True op.info( 'There are new logs indicating ops agent is exporting serial logs') if op.get(CHECK_MONITORING): ops_agent_uptime = monitoring.query( op.get(flags.PROJECT_ID), """ fetch gce_instance | metric 'agent.googleapis.com/agent/uptime' | filter (resource.instance_id == '{}') | align rate(1m) | every 1m | group_by [resource.instance_id, metric.version], [value_uptime_aggregate: aggregate(value.uptime)] """.format(op.get(flags.INSTANCE_ID))) for entry in ops_agent_uptime.values(): version = get_path(entry, ('labels', 'metric.version'), '') if 'google-cloud-ops-agent-metrics' in version: has_opsagent = True op.info( 'There is metrics data indicating ops agent is exporting metrics correctly!' ) if not has_expected_opsagent_logs and not has_opsagent: response = op.prompt( kind=op.CONFIRMATION, message= f'Is your ops agent issues resolved for "{op.get(flags.INSTANCE_NAME)}?"' ) if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gce/ops_agent_test.py ================================================ # Copyright 2024 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. """Test class for gce/OpsAgent.""" import datetime import unittest from unittest import mock import googleapiclient import httplib2 from gcpdiag import config from gcpdiag.queries import apis_stub, crm from gcpdiag.queries import gce as queries_gce from gcpdiag.runbook import gce, op, snapshot_test_base from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.gce import flags from gcpdiag.runbook.gce import generalized_steps as gce_gs from gcpdiag.runbook.gce import ops_agent from gcpdiag.runbook.gcp import generalized_steps as gcp_gs from gcpdiag.runbook.iam import generalized_steps as iam_gs class MockMessage: """Mock messages for testing. Simply returns the key to verify template usage. """ def get_msg(self, key, **kwargs): return f'{key}: {kwargs}' class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gce runbook_name = 'gce/ops-agent' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gce3-aaaa', 'instance_name': 'faulty-opsagent', 'zone': 'europe-west2-a' }, { 'project_id': 'gcpdiag-gce3-aaaa', 'instance_name': 'faulty-opsagent-no-sa', 'zone': 'europe-west2-a' }, { 'project_id': 'gcpdiag-gce3-aaaa', 'instance_name': 'working-opsagent', 'zone': 'europe-west2-a' }] class OpsAgentUnitTest(unittest.TestCase): def setUp(self): super().setUp() config.init({'auto': False, 'interface': 'cli'}) self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.operator.parameters = { flags.PROJECT_ID: 'gcpdiag-gce3-aaaa', flags.ZONE: 'europe-west2-a', flags.INSTANCE_NAME: 'test-instance', flags.INSTANCE_ID: '1234', ops_agent.GAC_SERVICE_ACCOUNT: None, ops_agent.CHECK_LOGGING: True, ops_agent.CHECK_MONITORING: True, ops_agent.CHECK_SERIAL_PORT_LOGGING: True, flags.SERVICE_ACCOUNT: 'test@system.gserviceaccount.com', flags.START_TIME: datetime.datetime(2024, 1, 1), flags.END_TIME: datetime.datetime(2024, 1, 2), } self.op_context = self.enterContext(op.operator_context(self.operator)) self.mock_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance')) self.mock_iam_get_sa_list = self.enterContext( mock.patch('gcpdiag.queries.iam.get_service_account_list')) self.mock_logs_query = self.enterContext( mock.patch('gcpdiag.queries.logs.realtime_query')) self.mock_monitoring_query = self.enterContext( mock.patch('gcpdiag.queries.monitoring.query')) self.project = mock.Mock(spec=crm.Project) self.project.id = 'gcpdiag-gce3-aaaa' self.instance = mock.Mock(spec=queries_gce.Instance) self.instance.name = 'test-instance' self.instance.id = '1234' self.instance.service_account = 'test@system.gserviceaccount.com' self.instance.full_path = ( 'projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/test-instance' ) self.mock_get_project.return_value = self.project self.mock_get_instance.return_value = self.instance def test_start_step_instance_not_found(self): self.mock_get_instance.side_effect = googleapiclient.errors.HttpError( httplib2.Response({'status': 404}), b'not found') step = ops_agent.OpsAgentStart() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_start_step_instance_found(self): self.operator.parameters[flags.INSTANCE_ID] = None step = ops_agent.OpsAgentStart() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_not_called() self.assertEqual(self.operator.parameters[flags.INSTANCE_ID], '1234') self.assertEqual(self.operator.parameters[flags.INSTANCE_NAME], 'test-instance') def test_vm_has_sa_no_gac_no_instance_sa(self): self.instance.service_account = None step = ops_agent.VmHasAServiceAccount() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_vm_has_sa_no_gac_with_instance_sa(self): self.instance.service_account = 'test@iam.gserviceaccount.com' step = ops_agent.VmHasAServiceAccount() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.assertEqual(self.operator.parameters[flags.SERVICE_ACCOUNT], 'test@iam.gserviceaccount.com') def test_vm_has_sa_gac_found(self): self.operator.parameters[ ops_agent. GAC_SERVICE_ACCOUNT] = 'gac-sa@project.iam.gserviceaccount.com' sa = mock.Mock() sa.email = 'gac-sa@project.iam.gserviceaccount.com' self.mock_iam_get_sa_list.return_value = [sa] step = ops_agent.VmHasAServiceAccount() self.operator.set_step(step) step.execute() self.mock_iam_get_sa_list.assert_called_with('gcpdiag-gce3-aaaa') self.mock_interface.add_ok.assert_called_once() self.assertEqual(self.operator.parameters[flags.SERVICE_ACCOUNT], 'gac-sa@project.iam.gserviceaccount.com') def test_vm_has_sa_gac_not_found(self): self.operator.parameters[ ops_agent. GAC_SERVICE_ACCOUNT] = 'gac-sa@project.iam.gserviceaccount.com' self.mock_iam_get_sa_list.return_value = [] step = ops_agent.VmHasAServiceAccount() self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_failed.assert_not_called() def test_investigate_logging_monitoring_all_enabled(self): step = ops_agent.InvestigateLoggingMonitoring() self.operator.set_step(step) step.execute() self.assertEqual(len(step.steps), 2) self.assertIsInstance(step.steps[0], gcp_gs.ServiceApiStatusCheck) self.assertEqual(step.steps[0].api_name, 'logging') self.assertIsInstance(step.steps[1], gcp_gs.ServiceApiStatusCheck) self.assertEqual(step.steps[1].api_name, 'monitoring') logging_api_step = step.steps[0] self.assertEqual(len(logging_api_step.steps), 3) self.assertIsInstance(logging_api_step.steps[0], iam_gs.IamPolicyCheck) self.assertIsInstance(logging_api_step.steps[1], gce_gs.VmScope) self.assertIsInstance(logging_api_step.steps[2], ops_agent.CheckSerialPortLogging) self.assertIsInstance(logging_api_step.steps[1].steps[0], gce_gs.VmHasOpsAgent) monitoring_api_step = step.steps[1] self.assertEqual(len(monitoring_api_step.steps), 2) self.assertIsInstance(monitoring_api_step.steps[0], iam_gs.IamPolicyCheck) self.assertIsInstance(monitoring_api_step.steps[1], gce_gs.VmScope) self.assertIsInstance(monitoring_api_step.steps[1].steps[0], gce_gs.VmHasOpsAgent) def test_investigate_logging_disabled(self): self.operator.parameters[ops_agent.CHECK_LOGGING] = False step = ops_agent.InvestigateLoggingMonitoring() self.operator.set_step(step) step.execute() self.assertEqual(len(step.steps), 1) self.assertEqual(step.steps[0].api_name, 'monitoring') def test_investigate_monitoring_disabled(self): self.operator.parameters[ops_agent.CHECK_MONITORING] = False step = ops_agent.InvestigateLoggingMonitoring() self.operator.set_step(step) step.execute() self.assertEqual(len(step.steps), 1) self.assertEqual(step.steps[0].api_name, 'logging') def test_investigate_no_serial_port_logging(self): self.operator.parameters[ops_agent.CHECK_SERIAL_PORT_LOGGING] = False step = ops_agent.InvestigateLoggingMonitoring() self.operator.set_step(step) step.execute() self.assertEqual(len(step.steps), 2) logging_api_step = step.steps[0] self.assertEqual(len(logging_api_step.steps), 2) self.assertIsInstance(logging_api_step.steps[0], iam_gs.IamPolicyCheck) self.assertIsInstance(logging_api_step.steps[1], gce_gs.VmScope) def test_check_serial_port_logging(self): step = ops_agent.CheckSerialPortLogging() self.operator.set_step(step) step.execute() self.assertEqual(len(step.steps), 2) self.assertIsInstance(step.steps[0], crm_gs.OrgPolicyCheck) self.assertIsInstance(step.steps[1], gce_gs.VmMetadataCheck) def test_end_step_serial_logs_found(self): self.mock_logs_query.return_value = [{'some': 'log'}] self.mock_monitoring_query.return_value = {} step = ops_agent.OpsAgentEnd() self.operator.set_step(step) step.execute() self.mock_logs_query.assert_called_once() self.mock_interface.info.assert_called_with( 'There are new logs indicating ops agent is exporting serial logs', step_type='INFO') def test_end_step_metrics_found(self): self.mock_logs_query.return_value = [] self.mock_monitoring_query.return_value = { 'entry1': { 'labels': { 'metric.version': 'google-cloud-ops-agent-metrics-1' } } } step = ops_agent.OpsAgentEnd() self.operator.set_step(step) step.execute() self.mock_monitoring_query.assert_called_once() self.mock_interface.info.assert_called_with( 'There is metrics data indicating ops agent is exporting metrics' ' correctly!', step_type='INFO') def test_end_step_no_logs_metrics_prompt_no(self): self.mock_logs_query.return_value = [] self.mock_monitoring_query.return_value = {} with mock.patch('gcpdiag.runbook.op.prompt', return_value=op.NO) as mock_prompt: step = ops_agent.OpsAgentEnd() self.operator.set_step(step) step.execute() mock_prompt.assert_called_once() self.mock_interface.info.assert_called_with(message=op.END_MESSAGE, step_type='INFO') def test_end_step_no_logs_metrics_prompt_yes(self): self.mock_logs_query.return_value = [] self.mock_monitoring_query.return_value = {} with mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES): step = ops_agent.OpsAgentEnd() self.operator.set_step(step) step.execute() self.mock_interface.info.assert_not_called() def test_end_step_no_serial_check(self): self.operator.parameters[ops_agent.CHECK_SERIAL_PORT_LOGGING] = False self.mock_monitoring_query.return_value = {} step = ops_agent.OpsAgentEnd() self.operator.set_step(step) step.execute() self.mock_logs_query.assert_not_called() def test_ops_agent_tree_structure(self): """Tests that the diagnostic tree is built with correct step relationships.""" tree = ops_agent.OpsAgent() tree.add_start = mock.Mock() tree.add_step = mock.Mock() tree.add_end = mock.Mock() with op.operator_context(self.operator): tree.build_tree() tree.add_start.assert_called_once() start_arg = tree.add_start.call_args[0][0] self.assertIsInstance(start_arg, ops_agent.OpsAgentStart) tree.add_end.assert_called_once() end_arg = tree.add_end.call_args[0][0] self.assertIsInstance(end_arg, ops_agent.OpsAgentEnd) self.assertEqual(tree.add_step.call_count, 3) calls = tree.add_step.call_args_list def assert_relationship(parent_type, child_type): found = False for call in calls: args, kwargs = call p = kwargs.get('parent') if 'parent' in kwargs else args[0] c = kwargs.get('child') if 'child' in kwargs else args[1] if isinstance(p, parent_type) and isinstance(c, child_type): found = True break self.assertTrue( found, f'Relationship {parent_type.__name__} -> {child_type.__name__} not' ' found', ) with op.operator_context(self.operator): assert_relationship(ops_agent.OpsAgentStart, ops_agent.VmHasAServiceAccount) assert_relationship(ops_agent.VmHasAServiceAccount, iam_gs.VmHasAnActiveServiceAccount) assert_relationship(ops_agent.VmHasAServiceAccount, ops_agent.InvestigateLoggingMonitoring) def test_vm_has_sa_failure_condition_no_gac_no_sa(self): """Tests the failure path when no GAC and no Instance SA are present.""" self.instance.service_account = None step = ops_agent.VmHasAServiceAccount() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() kwargs = self.mock_interface.add_failed.call_args[1] self.assertEqual(kwargs['resource'], self.instance) self.assertIn('reason', kwargs) self.assertIn('remediation', kwargs) self.assertIn(self.instance.full_path, kwargs['reason']) ================================================ FILE: gcpdiag/runbook/gce/serial_log_analyzer.py ================================================ # Copyright 2024 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. """Module containing steps to analyze known issues logged to Serial Console logs""" import mimetypes import googleapiclient.errors from gcpdiag import config, runbook from gcpdiag.queries import crm, gce from gcpdiag.runbook import op from gcpdiag.runbook.gce import constants as gce_const from gcpdiag.runbook.gce import flags from gcpdiag.runbook.gce import generalized_steps as gce_gs class SerialLogAnalyzer(runbook.DiagnosticTree): """ Google Compute Engine VM Serial log analyzer This runbook is designed to assist you in investigating the serial console logs of a vm. Key Investigation Areas: Boot Issues: - Check for Boot issues happening due to Kernel panics - Check for GRUB related issues. - Check if system failed to find boot disk. - Check if Filesystem corruption is causing issues with system boot. - Check if "/" Filesystem consumption is causing issues with system boot. Memory crunch issues: - Check if OOM kills happened on the VM or any other memory related issues. Cloud-init checks: - Check if cloud-init has initialised or started. - Check if NIC has received the IP. Network related issues: - Check if metadata server became unreachable since last boot. - Check if there are any time sync related errors. SSHD checks: - Check if there are logs related to successful startup of SSHD service. SSHD Auth Failures checks: - Check for SSH issues due to bad permissions of files or directories Google Guest Agent checks: - Check if there are logs related to successful startup of Google Guest Agent. SSH guard check: - Check if SSHGuard is active and may be blocking IP addresses """ # Specify parameters common to all steps in the diagnostic tree class. parameters = { flags.PROJECT_ID: { 'type': str, 'help': ('The Project ID associated with the VM for which you want to \ analyse the Serial logs.'), 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the VM, for which you want to analyse the Serial logs.' ' Or provide the id i.e -p name=', 'deprecated': True, 'new_parameter': 'instance_name' }, flags.INSTANCE_NAME: { 'type': str, 'help': 'The name of the VM, for which you want to analyse the Serial logs.' ' Or provide the id i.e -p name=', 'required': True }, flags.ID: { 'type': str, 'help': 'The instance-id of the VM, for which you want to analyse the Serial logs.' ' Or provide the id i.e -p id=' }, flags.ZONE: { 'type': str, 'help': 'The Google Cloud zone where the VM is located.', 'required': True }, flags.SERIAL_CONSOLE_FILE: { 'type': str, 'ignorecase': True, 'help': 'Absolute path of files contailing the Serial console logs,' ' in case if gcpdiag is not able to reach the VM Serial logs.' ' i.e -p serial_console_file="filepath1,filepath2" ', } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.INSTANCE_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Building Decision Tree""" start = SerialLogAnalyzerStart() self.add_start(step=start) # Checking if all logs available since last boot of the instance log_start_point = gce_gs.VmSerialLogsCheck() log_start_point.project_id = op.get(flags.PROJECT_ID) log_start_point.zone = op.get(flags.ZONE) log_start_point.instance_name = op.get(flags.INSTANCE_NAME) log_start_point.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) log_start_point.template = 'vm_serial_log::serial_log_start_point' log_start_point.positive_pattern = gce_const.SERIAL_LOG_START_POINT self.add_step(parent=start, child=log_start_point) # Check for Boot related issues kernel_panic = gce_gs.VmSerialLogsCheck() kernel_panic.project_id = op.get(flags.PROJECT_ID) kernel_panic.zone = op.get(flags.ZONE) kernel_panic.instance_name = op.get(flags.INSTANCE_NAME) kernel_panic.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) kernel_panic.template = 'vm_serial_log::kernel_panic' kernel_panic.negative_pattern = gce_const.KERNEL_PANIC_LOGS self.add_step(parent=log_start_point, child=kernel_panic) # Checking for Filesystem corruption related errors fs_corruption = gce_gs.VmSerialLogsCheck() fs_corruption.project_id = op.get(flags.PROJECT_ID) fs_corruption.zone = op.get(flags.ZONE) fs_corruption.instance_name = op.get(flags.INSTANCE_NAME) fs_corruption.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) fs_corruption.template = 'vm_serial_log::linux_fs_corruption' fs_corruption.negative_pattern = gce_const.FS_CORRUPTION_MSG self.add_step(parent=log_start_point, child=fs_corruption) # Checking for Filesystem utilization related messages fs_util = gce_gs.VmSerialLogsCheck() fs_util.project_id = op.get(flags.PROJECT_ID) fs_util.zone = op.get(flags.ZONE) fs_util.instance_name = op.get(flags.INSTANCE_NAME) fs_util.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) fs_util.template = 'vm_performance::high_disk_utilization_error' fs_util.negative_pattern = gce_const.DISK_EXHAUSTION_ERRORS self.add_step(parent=log_start_point, child=fs_util) # The PD may be experiencing slow read times slow_disk_io = gce_gs.VmSerialLogsCheck() slow_disk_io.project_id = op.get(flags.PROJECT_ID) slow_disk_io.zone = op.get(flags.ZONE) slow_disk_io.instance_name = op.get(flags.INSTANCE_NAME) slow_disk_io.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) slow_disk_io.template = 'vm_performance::slow_disk_io' slow_disk_io.negative_pattern = gce_const.SLOW_DISK_READS self.add_step(parent=log_start_point, child=slow_disk_io) # Checking for OOM related errors oom_errors = gce_gs.VmSerialLogsCheck() oom_errors.project_id = op.get(flags.PROJECT_ID) oom_errors.zone = op.get(flags.ZONE) oom_errors.instance_name = op.get(flags.INSTANCE_NAME) oom_errors.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) oom_errors.template = 'vm_performance::high_memory_usage_logs' oom_errors.negative_pattern = gce_const.OOM_PATTERNS self.add_step(parent=log_start_point, child=oom_errors) #Checking for Cloud-init related issues cloudinit_issues = CloudInitChecks() self.add_step(parent=log_start_point, child=cloudinit_issues) # Checking for network related errors network_issue = gce_gs.VmSerialLogsCheck() network_issue.project_id = op.get(flags.PROJECT_ID) network_issue.zone = op.get(flags.ZONE) network_issue.instance_name = op.get(flags.INSTANCE_NAME) network_issue.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) network_issue.template = 'vm_serial_log::network_errors' network_issue.negative_pattern = gce_const.NETWORK_ERRORS self.add_step(parent=log_start_point, child=network_issue) # Checking for Time Sync related errors timesync_issue = gce_gs.VmSerialLogsCheck() timesync_issue.project_id = op.get(flags.PROJECT_ID) timesync_issue.zone = op.get(flags.ZONE) timesync_issue.instance_name = op.get(flags.INSTANCE_NAME) timesync_issue.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) timesync_issue.template = 'vm_serial_log::time_sync_issue' timesync_issue.negative_pattern = gce_const.TIME_SYNC_ERROR self.add_step(parent=log_start_point, child=timesync_issue) # Check for issues in SSHD configuration or behavior. sshd_check = gce_gs.VmSerialLogsCheck() sshd_check.project_id = op.get(flags.PROJECT_ID) sshd_check.zone = op.get(flags.ZONE) sshd_check.instance_name = op.get(flags.INSTANCE_NAME) sshd_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) sshd_check.template = 'vm_serial_log::sshd' sshd_check.positive_pattern = gce_const.GOOD_SSHD_PATTERNS sshd_check.negative_pattern = gce_const.BAD_SSHD_PATTERNS self.add_step(parent=log_start_point, child=sshd_check) # Check for SSH issues due to bad permissions sshd_auth_failure = gce_gs.VmSerialLogsCheck() sshd_auth_failure.project_id = op.get(flags.PROJECT_ID) sshd_auth_failure.zone = op.get(flags.ZONE) sshd_auth_failure.instance_name = op.get(flags.INSTANCE_NAME) sshd_auth_failure.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) sshd_auth_failure.template = 'vm_serial_log::sshd_auth_failure' sshd_auth_failure.negative_pattern = gce_const.SSHD_AUTH_FAILURE self.add_step(parent=log_start_point, child=sshd_auth_failure) # Check for Guest Agent status guest_agent_check = gce_gs.VmSerialLogsCheck() guest_agent_check.project_id = op.get(flags.PROJECT_ID) guest_agent_check.zone = op.get(flags.ZONE) guest_agent_check.instance_name = op.get(flags.INSTANCE_NAME) guest_agent_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) guest_agent_check.template = 'vm_serial_log::guest_agent' guest_agent_check.positive_pattern = gce_const.GUEST_AGENT_STATUS_MSG guest_agent_check.negative_pattern = gce_const.GUEST_AGENT_FAILED_MSG self.add_step(parent=log_start_point, child=guest_agent_check) # Check for SSH Guard blocks that might be preventing SSH access. sshd_guard = gce_gs.VmSerialLogsCheck() sshd_guard.project_id = op.get(flags.PROJECT_ID) sshd_guard.zone = op.get(flags.ZONE) sshd_guard.instance_name = op.get(flags.INSTANCE_NAME) sshd_guard.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) sshd_guard.template = 'vm_serial_log::sshguard' sshd_guard.negative_pattern = gce_const.SSHGUARD_PATTERNS self.add_step(parent=log_start_point, child=sshd_guard) self.add_end(AnalysingSerialLogsEnd()) class SerialLogAnalyzerStart(runbook.StartStep): """Fetching VM details.""" template = 'vm_attributes::running' def execute(self): """Fetching VM details""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) except googleapiclient.errors.HttpError: op.add_skipped( project, reason=('Instance {} does not exist in zone {} or project {}').format( op.get(flags.INSTANCE_NAME), op.get(flags.ZONE), op.get(flags.PROJECT_ID))) else: if vm and vm.is_running: # Check for instance id and instance name if not op.get(flags.ID): op.put(flags.ID, vm.id) elif not op.get(flags.INSTANCE_NAME): op.put(flags.INSTANCE_NAME, vm.name) else: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status=vm.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, status=vm.status)) # file sanity checks if op.get(flags.SERIAL_CONSOLE_FILE): for file in op.get(flags.SERIAL_CONSOLE_FILE).split(','): try: with open(file, 'rb') as f: results = mimetypes.guess_type(file)[0] if results and not results.startswith('text/'): # Peek at content for further clues content_start = f.read(1024) # Read a small chunk # Check for gzip and xz magic number (first two bytes) if content_start.startswith( b'\x1f\x8b') or content_start.startswith(b'\xfd'): op.add_skipped( vm, reason=('File {} appears to be compressed, not plain text.' ).format(file)) else: # If not gzip or tar, try simple text encoding detection (UTF-8, etc.) try: content_start.decode() except UnicodeDecodeError: op.add_skipped( vm, reason=('File {} does not appear to be plain text.' ).format(file)) except FileNotFoundError: op.add_skipped( vm, reason=('The file {} does not exists. Please verify if ' 'you have provided the correct absolute file path' ).format(file)) class CloudInitChecks(runbook.CompositeStep): """Cloud init related checks""" def execute(self): """Cloud init related checks""" ubuntu_licenses = gce.get_gce_public_licences('ubuntu-os-cloud') ubuntu_pro_licenses = gce.get_gce_public_licences('ubuntu-os-pro-cloud') licenses = ubuntu_licenses + ubuntu_pro_licenses vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) if vm.check_license(licenses): # Checking for Cloud init startup log cloud_init_startup_check = gce_gs.VmSerialLogsCheck() cloud_init_startup_check.project_id = op.get(flags.PROJECT_ID) cloud_init_startup_check.zone = op.get(flags.ZONE) cloud_init_startup_check.instance_name = op.get(flags.INSTANCE_NAME) cloud_init_startup_check.serial_console_file = op.get( flags.SERIAL_CONSOLE_FILE) cloud_init_startup_check.template = 'vm_serial_log::cloud_init_startup_check' cloud_init_startup_check.positive_pattern = gce_const.CLOUD_INIT_STARTUP_PATTERN self.add_child(cloud_init_startup_check) # Checking if NIC has received IP cloud_init_check = gce_gs.VmSerialLogsCheck() cloud_init_check.template = 'vm_serial_log::cloud_init' cloud_init_check.project_id = op.get(flags.PROJECT_ID) cloud_init_check.zone = op.get(flags.ZONE) cloud_init_check.instance_name = op.get(flags.INSTANCE_NAME) cloud_init_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE) cloud_init_check.negative_pattern = gce_const.CLOUD_INIT_NEGATIVE_PATTERN cloud_init_check.positive_pattern = gce_const.CLOUD_INIT_POSITIVE_PATTERN self.add_child(cloud_init_check) else: op.add_skipped( vm, reason='This VM is not Ubuntu or it does not uses cloud-init') class AnalysingSerialLogsEnd(runbook.EndStep): """Finalize Serial console Log Analysis.""" def execute(self): """Finalize Serial console Log Analysis.""" if not config.get(flags.INTERACTIVE_MODE): response = op.prompt( kind=op.CONFIRMATION, message= f'Are you able to find issues related to {op.get(flags.INSTANCE_NAME)}?', choice_msg='Enter an option: ') if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gce/serial_log_analyzer_test.py ================================================ # 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. """Test class for gce/serial-log-analyzer.""" from unittest import mock import apiclient.errors from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gce, op, snapshot_test_base from gcpdiag.runbook.gce import flags, serial_log_analyzer from gcpdiag.runbook.gce.generalized_steps_test import GceStepTestBase class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gce runbook_name = 'gce/serial-log-analyzer' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gce-vm-performance', 'instance_name': 'faulty-linux-ssh', 'zone': 'europe-west2-a' }, { 'project_id': 'gcpdiag-gce-vm-performance', 'name': 'valid-linux-ssh', 'zone': 'europe-west2-a' }] class SerialLogAnalyzerTreeTest(GceStepTestBase): """Test SerialLogAnalyzer tree building and parameter handling.""" def test_build_tree(self): """Ensure the diagnostic tree is built by providing operator context.""" tree = serial_log_analyzer.SerialLogAnalyzer() operator = op.Operator(interface=mock.Mock(), context_provider=mock.Mock()) operator.set_parameters(self.params) with op.operator_context(operator): tree.build_tree() self.assertIsNotNone(tree.start) self.assertIsInstance(tree.start, serial_log_analyzer.SerialLogAnalyzerStart) diagnostic_steps = tree.start.steps[0].steps step_types = [type(step) for step in diagnostic_steps] self.assertIn(serial_log_analyzer.CloudInitChecks, step_types) def test_legacy_parameter_handler(self): """Test mapping of deprecated 'name' to 'instance_name'.""" tree = serial_log_analyzer.SerialLogAnalyzer() params = {flags.NAME: 'legacy-vm-name'} tree.legacy_parameter_handler(params) self.assertEqual(params[flags.INSTANCE_NAME], 'legacy-vm-name') self.assertNotIn(flags.NAME, params) class SerialLogAnalyzerStartTest(GceStepTestBase): """Test SerialLogAnalyzerStart execution.""" def setUp(self): super().setUp() self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_gce_get_instance.return_value = self.mock_instance self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) def test_start_success(self): """Test successful VM detail fetching and ID assignment (Lines 255-270).""" self.mock_instance.is_running = True self.mock_instance.id = '12345' with op.operator_context(self.operator): step = serial_log_analyzer.SerialLogAnalyzerStart() self.operator.set_step(step) step.execute() self.assertEqual(self.operator.parameters[flags.ID], '12345') def test_start_updates_missing_instance_name(self): """Test updating missing instance name from VM metadata.""" self.mock_instance.is_running = True self.mock_instance.name = 'metadata-name' # Simulate ID present but instance_name missing in op context self.params[flags.ID] = '123' self.params[flags.PROJECT_ID] = 'test-project' self.params[flags.INSTANCE_NAME] = None self.operator.parameters = self.params with op.operator_context(self.operator): step = serial_log_analyzer.SerialLogAnalyzerStart() self.operator.set_step(step) step.execute() self.assertEqual(self.operator.parameters[flags.INSTANCE_NAME], 'metadata-name') def test_instance_not_found_error_handling(self): """Test handling of API errors.""" self.mock_gce_get_instance.side_effect = apiclient.errors.HttpError( mock.Mock(status=404), b'not found') with op.operator_context(self.operator): step = serial_log_analyzer.SerialLogAnalyzerStart() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() @mock.patch('builtins.open', new_callable=mock.mock_open, read_data=b'plain text') @mock.patch('mimetypes.guess_type') def test_serial_console_file_checks(self, mock_guess, mock_open): """Test sanity checks for local log files.""" self.mock_instance.is_running = True self.params[flags.SERIAL_CONSOLE_FILE] = 'test_logs.txt' mock_guess.return_value = ('text/plain', None) with op.operator_context(self.operator): step = serial_log_analyzer.SerialLogAnalyzerStart() self.operator.set_step(step) step.execute() mock_open.assert_called_with('test_logs.txt', 'rb') @mock.patch('builtins.open', new_callable=mock.mock_open, read_data=b'\x1f\x8b\x08') @mock.patch('mimetypes.guess_type') def test_serial_console_file_compressed(self, mock_guess, unused_mock_open): """Test detection of compressed files via magic number.""" self.mock_instance.is_running = True self.params[flags.SERIAL_CONSOLE_FILE] = 'logs.gz' mock_guess.return_value = ('application/gzip', None) with op.operator_context(self.operator): step = serial_log_analyzer.SerialLogAnalyzerStart() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_with( run_id='test-run', resource=mock.ANY, reason='File logs.gz appears to be compressed, not plain text.', step_execution_id=mock.ANY) @mock.patch('builtins.open', new_callable=mock.mock_open, read_data=b'\xff\xfe\xfd') @mock.patch('mimetypes.guess_type') def test_serial_console_file_binary_error(self, mock_guess, unused_mock_open): """Test handling of non-UTF8 binary files.""" self.mock_instance.is_running = True self.params[flags.SERIAL_CONSOLE_FILE] = 'binary.bin' mock_guess.return_value = ('application/octet-stream', None) with op.operator_context(self.operator): step = serial_log_analyzer.SerialLogAnalyzerStart() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_with( run_id='test-run', resource=mock.ANY, reason='File binary.bin does not appear to be plain text.', step_execution_id=mock.ANY) class CloudInitChecksTest(GceStepTestBase): """Test CloudInitChecks logic.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_add_child = self.enterContext( mock.patch.object(serial_log_analyzer.CloudInitChecks, 'add_child')) def test_ubuntu_triggers_child_steps(self): """Test child steps are added for Ubuntu instances.""" self.mock_instance.check_license.return_value = True with op.operator_context(self.operator): step = serial_log_analyzer.CloudInitChecks() self.operator.set_step(step) step.execute() self.assertEqual(len(self.mock_add_child.call_args_list), 2) added_steps = [args[0][0] for args in self.mock_add_child.call_args_list] self.assertIsInstance(added_steps[0], serial_log_analyzer.gce_gs.VmSerialLogsCheck) self.assertIsInstance(added_steps[1], serial_log_analyzer.gce_gs.VmSerialLogsCheck) def test_non_ubuntu_skips_checks(self): """Test skipping checks for non-Ubuntu OS.""" self.mock_instance.check_license.return_value = False with op.operator_context(self.operator): step = serial_log_analyzer.CloudInitChecks() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() class AnalysingSerialLogsEndTest(GceStepTestBase): """Test AnalysingSerialLogsEnd termination.""" def test_end_step_output_non_interactive(self): """Test that the end message is displayed correctly in non-interactive mode.""" with ( mock.patch.object(serial_log_analyzer.config, 'get', return_value=False), mock.patch.object(serial_log_analyzer.op, 'prompt', return_value=op.NO), mock.patch.object(serial_log_analyzer.op, 'info') as mock_info, ): with op.operator_context(self.operator): step = serial_log_analyzer.AnalysingSerialLogsEnd() self.operator.set_step(step) step.execute() mock_info.assert_called_with(message=op.END_MESSAGE) def test_end_step_output_interactive_mode(self): """Test that the end message is skipped in interactive mode.""" with ( mock.patch.object(serial_log_analyzer.config, 'get', return_value=True), mock.patch.object(serial_log_analyzer.op, 'prompt') as mock_prompt, mock.patch.object(serial_log_analyzer.op, 'info') as mock_info, ): with op.operator_context(self.operator): step = serial_log_analyzer.AnalysingSerialLogsEnd() self.operator.set_step(step) step.execute() mock_prompt.assert_not_called() mock_info.assert_not_called() ================================================ FILE: gcpdiag/runbook/gce/snapshots/guestos_bootup.txt ================================================ instance_name=faulty-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a gce/guestos-bootup: Google Compute Engine VM Guest OS boot-up runbook. This runbook is designed to investigate the various boot-up stages of a Linux or Windows Guest OS running on Google Compute Engine. It is intended to help you identify and troubleshoot issues that may arise during the boot process. The runbook provides a structured approach to resolve issues. Key Investigation Areas: Boot Issues: - Check for Boot issues happening due to Kernel panics - Check for GRUB related issues. - Check if system failed to find boot disk. - Check if Filesystem corruption is causing issues with system boot. - Check if "/" Filesystem consumption is causing issues with system boot. Cloud-init checks: - Check if cloud-init has initialised or started. - Check if NIC has received the IP. Network related issues: - Check if metadata server became unreachable since last boot. - Check if there are any time sync related errors. Google Guest Agent checks: - Check if there are logs related to successful startup of Google Guest Agent. [START]: Verify GCE Instance is in a "RUNNING" state. [AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic. - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Detected kernel panic logs in projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh serial logs, which is likely preventing the VM from booting up correctly. [REMEDIATION] Kernel panics can be caused by different issues within the guest. Address underlying issues causing boot problems to solve the kernel panic: **General Kernel panic Troubleshooting** 1. Consult the Troubleshooting Guide for Kernel Panic Errors: - Kernel panic is commonly caused by file system errors in Linux Guest OS. - Check `/etc/fstab` for incorrect entries that could halt the boot process. - Refer to this guide for resolving [kernel panic issues caused by /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors). 2. Resources for Kernel panic - [Troubleshooting GCE Instance experiencing Kernel Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error) - [Common Red Hat Kernel Panic Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant) - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false) 3. Rescue an instance experiencing kernel panic - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to recover faulty VMs. - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw) 4 Google Cloud Platform Support Scope: [Understand GCP support for kernel-related issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope). [AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Possible filesystem corruption detected. The patterns used: ``` 'Corruption of in-memory data detected. Shutting down filesystem', 'Corruption of in-memory data detected', 'warning: mounting fs with errors', 'Failed to mount /', 'A stop job is running for Security \.\.\..* Service ', 'I/O Error Detected. Shutting down filesystem', 'metadata I/O error in' ``` [REMEDIATION] To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue), available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem. Additional resources for reference: - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923) - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw) These resources provide detailed steps for diagnosing and resolving filesystem issues. [COMPOSITE STEP]: Cloud init related checks - gcpdiag-gce-vm-performance/faulty-linux-ssh [SKIP] [REASON] This VM is not Ubuntu or it does not uses cloud-init [AUTOMATED STEP]: Check for metadata network connectivity errors - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] The metadata server(169.254.169.254) is unreachable from the GCE Instance. The instance might not have IP assigned to its primary NIC. [REMEDIATION] Attempt to log in to the instance via the serial console using a password and check the status of the network stack. If login via the serial console is unsuccessful, consider restarting the instance. If the issue persists after a reboot, follow the [rescue VM guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting. Additionally, refer to the [troubleshooting metadata server guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues with the Compute Engine metadata server. [AUTOMATED STEP]: Checking for Guest Agent startup logs - gcpdiag-gce-vm-performance/faulty-linux-ssh [OK] [REASON] Detected that Google Guest Agent is running within the VM [END]: Finalize runbook investigations. instance_name=valid-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a gce/guestos-bootup: Google Compute Engine VM Guest OS boot-up runbook. This runbook is designed to investigate the various boot-up stages of a Linux or Windows Guest OS running on Google Compute Engine. It is intended to help you identify and troubleshoot issues that may arise during the boot process. The runbook provides a structured approach to resolve issues. Key Investigation Areas: Boot Issues: - Check for Boot issues happening due to Kernel panics - Check for GRUB related issues. - Check if system failed to find boot disk. - Check if Filesystem corruption is causing issues with system boot. - Check if "/" Filesystem consumption is causing issues with system boot. Cloud-init checks: - Check if cloud-init has initialised or started. - Check if NIC has received the IP. Network related issues: - Check if metadata server became unreachable since last boot. - Check if there are any time sync related errors. Google Guest Agent checks: - Check if there are logs related to successful startup of Google Guest Agent. [START]: Verify GCE Instance is in a "RUNNING" state. [AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic. - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No serial logs were found for the VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh. However, this does not rule out the possibility of a kernel panic. [REMEDIATION] Kernel panics can be caused by different issues within the guest. Address underlying issues causing boot problems to solve the kernel panic: **General Kernel panic Troubleshooting** 1. Consult the Troubleshooting Guide for Kernel Panic Errors: - Kernel panic is commonly caused by file system errors in Linux Guest OS. - Check `/etc/fstab` for incorrect entries that could halt the boot process. - Refer to this guide for resolving [kernel panic issues caused by /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors). 2. Resources for Kernel panic - [Troubleshooting GCE Instance experiencing Kernel Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error) - [Common Red Hat Kernel Panic Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant) - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false) 3. Rescue an instance experiencing kernel panic - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to recover faulty VMs. - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw) 4 Google Cloud Platform Support Scope: [Understand GCP support for kernel-related issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope). [AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No evidence Filesystem corruption errors present in the serial logs. [REMEDIATION] To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue), available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem. Additional resources for reference: - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923) - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw) These resources provide detailed steps for diagnosing and resolving filesystem issues. [COMPOSITE STEP]: Cloud init related checks - gcpdiag-gce-vm-performance/valid-linux-ssh [SKIP] [REASON] This VM is not Ubuntu or it does not uses cloud-init [AUTOMATED STEP]: Check for metadata network connectivity errors - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No success or failed logs to help deduce a conlusion on certainty of Network issues on the instance. [REMEDIATION] Attempt to log in to the instance via the serial console using a password and check the status of the network stack. If login via the serial console is unsuccessful, consider restarting the instance. If the issue persists after a reboot, follow the [rescue VM guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting. Additionally, refer to the [troubleshooting metadata server guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues with the Compute Engine metadata server. [AUTOMATED STEP]: Checking for Guest Agent startup logs - gcpdiag-gce-vm-performance/valid-linux-ssh [OK] [REASON] Detected that Google Guest Agent is running within the VM [END]: Finalize runbook investigations. ================================================ FILE: gcpdiag/runbook/gce/snapshots/ops_agent.txt ================================================ instance_name=faulty-opsagent,project_id=gcpdiag-gce3-aaaa,zone=europe-west2-a gce/ops-agent: Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM This runbook will examine the following key areas: 1. API Service Checks: - Ensures that Cloud APIs for Logging and/or Monitoring are accessible. 2. Permission Checks: - Verifies that the necessary permissions are in place for exporting logs and/or metrics. 3. Workload Authentication: - Confirms that the Ops Agent has a service account for authentication. - If using Google Application Credentials, provide the service account with the `gac_service_account` parameter. 4. Scope of Investigation: - Note that this runbook does not include internal VM checks, such as guest OS investigations. [START]: Verify context and parameters required for Ops Agent runbook checks [AUTOMATED STEP]: Verify Service Account exists - gcpdiag-gce3-aaaa/faulty-opsagent [OK] [REASON] The Ops Agent on instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent is configured with service account no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com for exporting logs and metrics. [AUTOMATED STEP]: Verify if the specified service account is active. - gcpdiag-gce3-aaaa/no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com [OK] [REASON] Service account projects/gcpdiag-gce3-aaaa/serviceAccounts/no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com is active. [GATEWAY]: Decision point to investigate Logging and/or Monitoring related issues. [AUTOMATED STEP]: Verify logging.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa. - gcpdiag-gce3-aaaa [FAIL] [REASON] The `logging.googleapis.com` service is not in the expected state `ENABLED` [REMEDIATION] This service is expected to be enabled. Execute the command below to enable logging.googleapis.com in gcpdiag-gce3-aaaa gcloud services enable logging.googleapis.com --project=gcpdiag-gce3-aaaa Resources [AUTOMATED STEP]: Verify that serviceAccount:no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa. - projects/gcpdiag-gce3-aaaa [FAIL] [REASON] serviceAccount:no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com does not have at least one of the expected roles: roles/editor, roles/logging.admin, roles/logging.logWriter, roles/owner. [REMEDIATION] Grant a role containing the missing permissions by following the instructions in [1]. Refer to [2] for a list of Google Cloud predefined roles. Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant. [1] [2] [AUTOMATED STEP]: Verify GCE Instance has sufficient access scope - gcpdiag-gce3-aaaa/faulty-opsagent [FAIL] [REASON] GCE Instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent doesn't have any of the required access scopes: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/logging.admin, https://www.googleapis.com/auth/logging.write [REMEDIATION] Access scopes are the legacy method of specifying authorization for your VM instance. They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries. Access scopes don't apply for calls made using gRPC. Update `projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent` to enable at least one of the following access scopes: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/logging.admin, https://www.googleapis.com/auth/logging.write Consult the following documentation for guidance on changing the service account and scopes: [AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active - gcpdiag-gce3-aaaa/faulty-opsagent [OK] [REASON] GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent" has logging agent installed and is exporting data. [COMPOSITE STEP]: Verify GCP config required for serial port logging with ops agent [AUTOMATED STEP]: Checking Organization policy [AUTOMATED STEP]: Verify VM metadata value. - gcpdiag-gce3-aaaa/faulty-opsagent [FAIL] [REASON] GCE Instance metadata `serial-port-logging-enable` doesn't have the expected value: True of type [REMEDIATION] Update the metadata `serial-port-logging-enable` to have the expected value True Follow guide [1] one to update the a metadata value. [1] [AUTOMATED STEP]: Verify monitoring.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa. - gcpdiag-gce3-aaaa [FAIL] [REASON] The `monitoring.googleapis.com` service is not in the expected state `ENABLED` [REMEDIATION] This service is expected to be enabled. Execute the command below to enable monitoring.googleapis.com in gcpdiag-gce3-aaaa gcloud services enable monitoring.googleapis.com --project=gcpdiag-gce3-aaaa Resources [AUTOMATED STEP]: Verify that serviceAccount:no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa. - projects/gcpdiag-gce3-aaaa [FAIL] [REASON] serviceAccount:no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com does not have at least one of the expected roles: roles/editor, roles/monitoring.admin, roles/monitoring.editor, roles/monitoring.metricWriter, roles/owner. [REMEDIATION] Grant a role containing the missing permissions by following the instructions in [1]. Refer to [2] for a list of Google Cloud predefined roles. Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant. [1] [2] [AUTOMATED STEP]: Verify GCE Instance has sufficient access scope - gcpdiag-gce3-aaaa/faulty-opsagent [FAIL] [REASON] GCE Instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent doesn't have any of the required access scopes: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write [REMEDIATION] Access scopes are the legacy method of specifying authorization for your VM instance. They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries. Access scopes don't apply for calls made using gRPC. Update `projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent` to enable at least one of the following access scopes: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write Consult the following documentation for guidance on changing the service account and scopes: [AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active - gcpdiag-gce3-aaaa/faulty-opsagent [FAIL] [REASON] GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent" does not have metrics agent installed and is not exporting data. [REMEDIATION] Install the metrics agent on GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent". Consult the following documentation for troubleshooting assistance: [END]: Finalize Ops agent checks [INFO]: There are new logs indicating ops agent is exporting serial logs instance_name=faulty-opsagent-no-sa,project_id=gcpdiag-gce3-aaaa,zone=europe-west2-a gce/ops-agent: Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM This runbook will examine the following key areas: 1. API Service Checks: - Ensures that Cloud APIs for Logging and/or Monitoring are accessible. 2. Permission Checks: - Verifies that the necessary permissions are in place for exporting logs and/or metrics. 3. Workload Authentication: - Confirms that the Ops Agent has a service account for authentication. - If using Google Application Credentials, provide the service account with the `gac_service_account` parameter. 4. Scope of Investigation: - Note that this runbook does not include internal VM checks, such as guest OS investigations. [START]: Verify context and parameters required for Ops Agent runbook checks [AUTOMATED STEP]: Verify Service Account exists - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa [OK] [REASON] The Ops Agent on instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa is configured with service account 12345001-compute@developer.gserviceaccount.com for exporting logs and metrics. [AUTOMATED STEP]: Verify if the specified service account is active. - gcpdiag-gce3-aaaa/12345001-compute@developer.gserviceaccount.com [OK] [REASON] Service account projects/gcpdiag-gce3-aaaa/serviceAccounts/12345001-compute@developer.gserviceaccount.com is active. [GATEWAY]: Decision point to investigate Logging and/or Monitoring related issues. [AUTOMATED STEP]: Verify logging.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa. - gcpdiag-gce3-aaaa [FAIL] [REASON] The `logging.googleapis.com` service is not in the expected state `ENABLED` [REMEDIATION] This service is expected to be enabled. Execute the command below to enable logging.googleapis.com in gcpdiag-gce3-aaaa gcloud services enable logging.googleapis.com --project=gcpdiag-gce3-aaaa Resources [AUTOMATED STEP]: Verify that serviceAccount:12345001-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa. - projects/gcpdiag-gce3-aaaa [OK] [REASON] serviceAccount:12345001-compute@developer.gserviceaccount.com has expected roles. roles/editor, roles/logging.admin, roles/logging.logWriter, roles/owner. [AUTOMATED STEP]: Verify GCE Instance has sufficient access scope - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa [FAIL] [REASON] GCE Instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa doesn't have any of the required access scopes: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/logging.admin, https://www.googleapis.com/auth/logging.write [REMEDIATION] Access scopes are the legacy method of specifying authorization for your VM instance. They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries. Access scopes don't apply for calls made using gRPC. Update `projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa` to enable at least one of the following access scopes: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/logging.admin, https://www.googleapis.com/auth/logging.write Consult the following documentation for guidance on changing the service account and scopes: [AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa [OK] [REASON] GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa" has logging agent installed and is exporting data. [COMPOSITE STEP]: Verify GCP config required for serial port logging with ops agent [AUTOMATED STEP]: Checking Organization policy [AUTOMATED STEP]: Verify VM metadata value. - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa [FAIL] [REASON] GCE Instance metadata `serial-port-logging-enable` doesn't have the expected value: True of type [REMEDIATION] Update the metadata `serial-port-logging-enable` to have the expected value True Follow guide [1] one to update the a metadata value. [1] [AUTOMATED STEP]: Verify monitoring.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa. - gcpdiag-gce3-aaaa [FAIL] [REASON] The `monitoring.googleapis.com` service is not in the expected state `ENABLED` [REMEDIATION] This service is expected to be enabled. Execute the command below to enable monitoring.googleapis.com in gcpdiag-gce3-aaaa gcloud services enable monitoring.googleapis.com --project=gcpdiag-gce3-aaaa Resources [AUTOMATED STEP]: Verify that serviceAccount:12345001-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa. - projects/gcpdiag-gce3-aaaa [OK] [REASON] serviceAccount:12345001-compute@developer.gserviceaccount.com has expected roles. roles/editor, roles/monitoring.admin, roles/monitoring.editor, roles/monitoring.metricWriter, roles/owner. [AUTOMATED STEP]: Verify GCE Instance has sufficient access scope - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa [FAIL] [REASON] GCE Instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa doesn't have any of the required access scopes: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write [REMEDIATION] Access scopes are the legacy method of specifying authorization for your VM instance. They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries. Access scopes don't apply for calls made using gRPC. Update `projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa` to enable at least one of the following access scopes: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write Consult the following documentation for guidance on changing the service account and scopes: [AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa [FAIL] [REASON] GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa" does not have metrics agent installed and is not exporting data. [REMEDIATION] Install the metrics agent on GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa". Consult the following documentation for troubleshooting assistance: [END]: Finalize Ops agent checks [INFO]: There are new logs indicating ops agent is exporting serial logs instance_name=working-opsagent,project_id=gcpdiag-gce3-aaaa,zone=europe-west2-a gce/ops-agent: Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM This runbook will examine the following key areas: 1. API Service Checks: - Ensures that Cloud APIs for Logging and/or Monitoring are accessible. 2. Permission Checks: - Verifies that the necessary permissions are in place for exporting logs and/or metrics. 3. Workload Authentication: - Confirms that the Ops Agent has a service account for authentication. - If using Google Application Credentials, provide the service account with the `gac_service_account` parameter. 4. Scope of Investigation: - Note that this runbook does not include internal VM checks, such as guest OS investigations. [START]: Verify context and parameters required for Ops Agent runbook checks [AUTOMATED STEP]: Verify Service Account exists - gcpdiag-gce3-aaaa/working-opsagent [OK] [REASON] The Ops Agent on instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent is configured with service account 12345001-compute@developer.gserviceaccount.com for exporting logs and metrics. [AUTOMATED STEP]: Verify if the specified service account is active. - gcpdiag-gce3-aaaa/12345001-compute@developer.gserviceaccount.com [OK] [REASON] Service account projects/gcpdiag-gce3-aaaa/serviceAccounts/12345001-compute@developer.gserviceaccount.com is active. [GATEWAY]: Decision point to investigate Logging and/or Monitoring related issues. [AUTOMATED STEP]: Verify logging.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa. - gcpdiag-gce3-aaaa [FAIL] [REASON] The `logging.googleapis.com` service is not in the expected state `ENABLED` [REMEDIATION] This service is expected to be enabled. Execute the command below to enable logging.googleapis.com in gcpdiag-gce3-aaaa gcloud services enable logging.googleapis.com --project=gcpdiag-gce3-aaaa Resources [AUTOMATED STEP]: Verify that serviceAccount:12345001-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa. - projects/gcpdiag-gce3-aaaa [OK] [REASON] serviceAccount:12345001-compute@developer.gserviceaccount.com has expected roles. roles/editor, roles/logging.admin, roles/logging.logWriter, roles/owner. [AUTOMATED STEP]: Verify GCE Instance has sufficient access scope - gcpdiag-gce3-aaaa/working-opsagent [OK] [REASON] GCE instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent has at least one of the required scope: https://www.googleapis.com/auth/logging.write [AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active - gcpdiag-gce3-aaaa/working-opsagent [OK] [REASON] GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent" has logging agent installed and is exporting data. [COMPOSITE STEP]: Verify GCP config required for serial port logging with ops agent [AUTOMATED STEP]: Checking Organization policy [AUTOMATED STEP]: Verify VM metadata value. - gcpdiag-gce3-aaaa/working-opsagent [OK] [REASON] GCE Instance metadata `serial-port-logging-enable` has the expected value: True of type [AUTOMATED STEP]: Verify monitoring.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa. - gcpdiag-gce3-aaaa [FAIL] [REASON] The `monitoring.googleapis.com` service is not in the expected state `ENABLED` [REMEDIATION] This service is expected to be enabled. Execute the command below to enable monitoring.googleapis.com in gcpdiag-gce3-aaaa gcloud services enable monitoring.googleapis.com --project=gcpdiag-gce3-aaaa Resources [AUTOMATED STEP]: Verify that serviceAccount:12345001-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa. - projects/gcpdiag-gce3-aaaa [OK] [REASON] serviceAccount:12345001-compute@developer.gserviceaccount.com has expected roles. roles/editor, roles/monitoring.admin, roles/monitoring.editor, roles/monitoring.metricWriter, roles/owner. [AUTOMATED STEP]: Verify GCE Instance has sufficient access scope - gcpdiag-gce3-aaaa/working-opsagent [OK] [REASON] GCE instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent has at least one of the required scope: https://www.googleapis.com/auth/monitoring.write [AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active - gcpdiag-gce3-aaaa/working-opsagent [FAIL] [REASON] GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent" does not have metrics agent installed and is not exporting data. [REMEDIATION] Install the metrics agent on GCE Instance "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent". Consult the following documentation for troubleshooting assistance: [END]: Finalize Ops agent checks [INFO]: There are new logs indicating ops agent is exporting serial logs ================================================ FILE: gcpdiag/runbook/gce/snapshots/serial_log_analyzer.txt ================================================ instance_name=faulty-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a gce/serial-log-analyzer: Google Compute Engine VM Serial log analyzer This runbook is designed to assist you in investigating the serial console logs of a vm. Key Investigation Areas: Boot Issues: - Check for Boot issues happening due to Kernel panics - Check for GRUB related issues. - Check if system failed to find boot disk. - Check if Filesystem corruption is causing issues with system boot. - Check if "/" Filesystem consumption is causing issues with system boot. Memory crunch issues: - Check if OOM kills happened on the VM or any other memory related issues. Cloud-init checks: - Check if cloud-init has initialised or started. - Check if NIC has received the IP. Network related issues: - Check if metadata server became unreachable since last boot. - Check if there are any time sync related errors. SSHD checks: - Check if there are logs related to successful startup of SSHD service. SSHD Auth Failures checks: - Check for SSH issues due to bad permissions of files or directories Google Guest Agent checks: - Check if there are logs related to successful startup of Google Guest Agent. SSH guard check: - Check if SSHGuard is active and may be blocking IP addresses [START]: Verify GCE Instance is in a "RUNNING" state. [AUTOMATED STEP]: Verify all logs available since last boot of the instance - gcpdiag-gce-vm-performance/faulty-linux-ssh [OK] [REASON] Found all logs since last boot of the VM. [AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic. - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Detected kernel panic logs in projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh serial logs, which is likely preventing the VM from booting up correctly. [REMEDIATION] Kernel panics can be caused by different issues within the guest. Address underlying issues causing boot problems to solve the kernel panic: **General Kernel panic Troubleshooting** 1. Consult the Troubleshooting Guide for Kernel Panic Errors: - Kernel panic is commonly caused by file system errors in Linux Guest OS. - Check `/etc/fstab` for incorrect entries that could halt the boot process. - Refer to this guide for resolving [kernel panic issues caused by /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors). 2. Resources for Kernel panic - [Troubleshooting GCE Instance experiencing Kernel Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error) - [Common Red Hat Kernel Panic Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant) - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false) 3. Rescue an instance experiencing kernel panic - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to recover faulty VMs. - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw) 4 Google Cloud Platform Support Scope: [Understand GCP support for kernel-related issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope). [AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Possible filesystem corruption detected. The patterns used: ``` 'Corruption of in-memory data detected. Shutting down filesystem', 'Corruption of in-memory data detected', 'warning: mounting fs with errors', 'Failed to mount /', 'A stop job is running for Security \.\.\..* Service ', 'I/O Error Detected. Shutting down filesystem', 'metadata I/O error in' ``` [REMEDIATION] To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue), available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem. Additional resources for reference: - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923) - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw) These resources provide detailed steps for diagnosing and resolving filesystem issues. [AUTOMATED STEP]: Verify high disk utilization related logs in serial console logs - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Found high disk utilisation errors in Serial console logs. The patterns used: ``` 'No space left on device', 'No usable temporary directory found', 'A stop job is running for Security \.\.\..* Service ', 'disk is at or near capacity' ``` [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure accessibility of the VM. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify any slow Disk operations related errors in Serial console logs - gcpdiag-gce-vm-performance/faulty-linux-ssh [UNCERTAIN] [REASON] No error messages related to disk latency were found in the serial console logs. This does not rule out disk performance issues. [REMEDIATION] There can be multiple reasons which can cause Slow Disk IOs: - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight. - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations. - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads, this can also cause CPU or Disk IOPS/throughput Starvation. - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels. To fix this issue: - Please optimize your application workloads. - If needed, please add more resources(CPU, Memory) to the VM. - Please optimize your Disk performance - - If needed, please change your disk type to get better Disk IOPS/throughput limits - [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-gce-vm-performance/faulty-linux-ssh [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [COMPOSITE STEP]: Cloud init related checks - gcpdiag-gce-vm-performance/faulty-linux-ssh [SKIP] [REASON] This VM is not Ubuntu or it does not uses cloud-init [AUTOMATED STEP]: Check for metadata network connectivity errors - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] The metadata server(169.254.169.254) is unreachable from the GCE Instance. The instance might not have IP assigned to its primary NIC. [REMEDIATION] Attempt to log in to the instance via the serial console using a password and check the status of the network stack. If login via the serial console is unsuccessful, consider restarting the instance. If the issue persists after a reboot, follow the [rescue VM guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting. Additionally, refer to the [troubleshooting metadata server guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues with the Compute Engine metadata server. [AUTOMATED STEP]: Check for Time Sync related errors from GCE serial logs. - gcpdiag-gce-vm-performance/faulty-linux-ssh [UNCERTAIN] [REASON] No Time sync related errors in Serial console logs. [REMEDIATION] Connect to the GCE Instance and verify that the NTP server configuration adheres to Google Cloud Platform standards. Refer to the [Google Cloud NTP configuration guide](https://cloud.google.com/compute/docs/instances/configure-ntp). [AUTOMATED STEP]: Verify OpenSSH daemon (sshd) has started from most recent serial logs. - gcpdiag-gce-vm-performance/faulty-linux-ssh [OK] [REASON] The latest OpenSSH daemon (sshd) logs indicate that the daemon has started. [AUTOMATED STEP]: Examining SSHD authentication failures via serial logs. - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Detected SSHD authentication issues in the GCE Instance, which is affecting SSH access. Found the error "Authentication refused: bad ownership or modes for directory" [REMEDIATION] To mitigate "bad ownership or modes for directory" errors: 1. Follow either of the below steps to check the permissions: - these steps to rescue the vm: - these steps login through serial console: 2. Refer to the standard permissions required for ssh connection: [AUTOMATED STEP]: Checking for Guest Agent startup logs - gcpdiag-gce-vm-performance/faulty-linux-ssh [OK] [REASON] Detected that Google Guest Agent is running within the VM [AUTOMATED STEP]: Verify if SSHGuard is installed and blocking SSH connectivity - gcpdiag-gce-vm-performance/faulty-linux-ssh [UNCERTAIN] [REASON] The retrieved logs do not contain definitive entries, either positive or negative, to make a conclusive assessment. Review the GCE serial logs to determine if SSHGuard is a likely cause. [REMEDIATION] Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform. Consult the most appropriate team within your organisation to assist with resolution. For guest OS issues and SSHGuard configurations, refer to: - Support Scope: - Out of Scope Support: [END]: Finalize Serial console Log Analysis. name=valid-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a gce/serial-log-analyzer: Google Compute Engine VM Serial log analyzer This runbook is designed to assist you in investigating the serial console logs of a vm. Key Investigation Areas: Boot Issues: - Check for Boot issues happening due to Kernel panics - Check for GRUB related issues. - Check if system failed to find boot disk. - Check if Filesystem corruption is causing issues with system boot. - Check if "/" Filesystem consumption is causing issues with system boot. Memory crunch issues: - Check if OOM kills happened on the VM or any other memory related issues. Cloud-init checks: - Check if cloud-init has initialised or started. - Check if NIC has received the IP. Network related issues: - Check if metadata server became unreachable since last boot. - Check if there are any time sync related errors. SSHD checks: - Check if there are logs related to successful startup of SSHD service. SSHD Auth Failures checks: - Check for SSH issues due to bad permissions of files or directories Google Guest Agent checks: - Check if there are logs related to successful startup of Google Guest Agent. SSH guard check: - Check if SSHGuard is active and may be blocking IP addresses [START]: Verify GCE Instance is in a "RUNNING" state. [AUTOMATED STEP]: Verify all logs available since last boot of the instance - gcpdiag-gce-vm-performance/valid-linux-ssh [OK] [REASON] Found all logs since last boot of the VM. [AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic. - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No serial logs were found for the VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh. However, this does not rule out the possibility of a kernel panic. [REMEDIATION] Kernel panics can be caused by different issues within the guest. Address underlying issues causing boot problems to solve the kernel panic: **General Kernel panic Troubleshooting** 1. Consult the Troubleshooting Guide for Kernel Panic Errors: - Kernel panic is commonly caused by file system errors in Linux Guest OS. - Check `/etc/fstab` for incorrect entries that could halt the boot process. - Refer to this guide for resolving [kernel panic issues caused by /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors). 2. Resources for Kernel panic - [Troubleshooting GCE Instance experiencing Kernel Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error) - [Common Red Hat Kernel Panic Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant) - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false) 3. Rescue an instance experiencing kernel panic - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to recover faulty VMs. - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw) 4 Google Cloud Platform Support Scope: [Understand GCP support for kernel-related issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope). [AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No evidence Filesystem corruption errors present in the serial logs. [REMEDIATION] To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue), available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem. Additional resources for reference: - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923) - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw) These resources provide detailed steps for diagnosing and resolving filesystem issues. [AUTOMATED STEP]: Verify high disk utilization related logs in serial console logs - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] Serial console logs were not available for examination. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure accessibility of the VM. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify any slow Disk operations related errors in Serial console logs - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No error messages related to disk latency were found in the serial console logs. This does not rule out disk performance issues. [REMEDIATION] There can be multiple reasons which can cause Slow Disk IOs: - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight. - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations. - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads, this can also cause CPU or Disk IOPS/throughput Starvation. - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels. To fix this issue: - Please optimize your application workloads. - If needed, please add more resources(CPU, Memory) to the VM. - Please optimize your Disk performance - - If needed, please change your disk type to get better Disk IOPS/throughput limits - [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [COMPOSITE STEP]: Cloud init related checks - gcpdiag-gce-vm-performance/valid-linux-ssh [SKIP] [REASON] This VM is not Ubuntu or it does not uses cloud-init [AUTOMATED STEP]: Check for metadata network connectivity errors - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No success or failed logs to help deduce a conlusion on certainty of Network issues on the instance. [REMEDIATION] Attempt to log in to the instance via the serial console using a password and check the status of the network stack. If login via the serial console is unsuccessful, consider restarting the instance. If the issue persists after a reboot, follow the [rescue VM guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting. Additionally, refer to the [troubleshooting metadata server guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues with the Compute Engine metadata server. [AUTOMATED STEP]: Check for Time Sync related errors from GCE serial logs. - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No Time sync related errors in Serial console logs. [REMEDIATION] Connect to the GCE Instance and verify that the NTP server configuration adheres to Google Cloud Platform standards. Refer to the [Google Cloud NTP configuration guide](https://cloud.google.com/compute/docs/instances/configure-ntp). [AUTOMATED STEP]: Verify OpenSSH daemon (sshd) has started from most recent serial logs. - gcpdiag-gce-vm-performance/valid-linux-ssh [OK] [REASON] The latest OpenSSH daemon (sshd) logs indicate that the daemon has started. [AUTOMATED STEP]: Examining SSHD authentication failures via serial logs. - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] No evidence of successful or failed SSHD authentication attempts is present in the serial logs. [REMEDIATION] To mitigate "bad ownership or modes for directory" errors: 1. Follow either of the below steps to check the permissions: - these steps to rescue the vm: - these steps login through serial console: 2. Refer to the standard permissions required for ssh connection: [AUTOMATED STEP]: Checking for Guest Agent startup logs - gcpdiag-gce-vm-performance/valid-linux-ssh [OK] [REASON] Detected that Google Guest Agent is running within the VM [AUTOMATED STEP]: Verify if SSHGuard is installed and blocking SSH connectivity - gcpdiag-gce-vm-performance/valid-linux-ssh [UNCERTAIN] [REASON] The retrieved logs do not contain definitive entries, either positive or negative, to make a conclusive assessment. Review the GCE serial logs to determine if SSHGuard is a likely cause. [REMEDIATION] Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform. Consult the most appropriate team within your organisation to assist with resolution. For guest OS issues and SSHGuard configurations, refer to: - Support Scope: - Out of Scope Support: [END]: Finalize Serial console Log Analysis. ================================================ FILE: gcpdiag/runbook/gce/snapshots/ssh.txt ================================================ access_method=oslogin,end_time=2025-01-23 13:30:39.144959+00:00,instance_name=faulty-linux- ssh,principal=user:cannotssh@example.com,project_id=gcpdiag-gce-faultyssh- runbook,proxy=iap,start_time=2025-01-23 23:30:39.144959+00:00,zone=europe-west2-a gce/ssh: A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs. Investigates components required for ssh on either Windows and Linux VMs hosted on Google Cloud Platform and pinpoint misconfigurations. Areas Examined: - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt normal SSH operations. - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to leverage OS Login features and to use metadata-based SSH keys for authentication. - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys, flags and other essential configuration details that facilitate SSH access. - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no network barriers preventing SSH access to the VM. - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any misconfigurations or service disruptions that could be obstructing SSH functionality. - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and the organization policies permits SSH in Browser. [START]: Starting SSH diagnostics [INFO]: Source IP to be used for SSH connectivity test: 35.235.240.0/20 [INFO]: Port 22 and ip 35.235.240.0/20 as the source IP [INFO]: Access method to investigate: OS login https://cloud.google.com/compute/docs/oslogin [AUTOMATED STEP]: Verify GCE Instance is in a "RUNNING" state. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [OK] [REASON] The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh is in RUNNING state. [COMPOSITE STEP]: Evaluating VM memory, CPU, and disk performance. [AUTOMATED STEP]: Verify VM memory utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [FAIL] [REASON] Memory utilization on this VM has reached levels that may compromise its VM application performance. [REMEDIATION] Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [FAIL] [REASON] Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [FAIL] [REASON] CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. [REMEDIATION] Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: [GATEWAY]: Identify Guest OS type. [INFO]: Linux Guest OS detected. Proceeding with diagnostics specific to Linux systems. [COMPOSITE STEP]: Analyzing serial logs for common linux guest os and application issues. [AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [OK] [REASON] A review of the serial console logs for the GCE instance `projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh` from `2025-01-23 23:30:39.144959+00:00` to `2025-01-23 13:30:39.144959+00:00` shows no evidence of kernel panic or GRUB issues. The `systemd` application is confirmed to be running. [AUTOMATED STEP]: Verify OpenSSH daemon (sshd) has started from most recent serial logs. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [OK] [REASON] The latest OpenSSH daemon (sshd) logs indicate that the daemon has started. [AUTOMATED STEP]: Verify if SSHGuard is installed and blocking SSH connectivity - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [UNCERTAIN] [REASON] The retrieved logs do not contain definitive entries, either positive or negative, to make a conclusive assessment. Review the GCE serial logs to determine if SSHGuard is a likely cause. [REMEDIATION] Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform. Consult the most appropriate team within your organisation to assist with resolution. For guest OS issues and SSHGuard configurations, refer to: - Support Scope: - Out of Scope Support: [COMPOSITE STEP]: Verify overall user permissions for SSH access. Note: Only roles granted at the project level are checked. Permissions inherited from ancestor resources such as folder(s) or organization and groups are not checked. [AUTOMATED STEP]: Verify that the user:cannotssh@example.com has "compute.instance.get" permission. - projects/gcpdiag-gce-faultyssh-runbook [FAIL] [REASON] user:cannotssh@example.com does not have the permissions needed to manage instances. The following permissions are required: permissions. [REMEDIATION] Ensure user:cannotssh@example.com is granted a role encompassing the necessary permissions: - Permissions needed: compute.instances.get For guidance on assigning instance admin roles, consult: [GATEWAY]: Identify OS Login Setup. [AUTOMATED STEP]: Verify that OS Login is set to `True` for the VM. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [FAIL] [REASON] OS Login is disabled [REMEDIATION] To utilize OS Login, enable it by setting the `enable-oslogin` flag in the VM's metadata to `TRUE`.For detailed instructions on enabling OS Login, refer to: [AUTOMATED STEP]: Verify whether user:cannotssh@example.com has at least one valid OS login role. - projects/gcpdiag-gce-faultyssh-runbook [FAIL] [REASON] "user:cannotssh@example.com" is missing at least one of the required OS Login roles: roles/compute.osAdminLogin, roles/compute.osLogin, roles/owner. [REMEDIATION] Assign the principal one of the roles required for OS Login privileges. Consult the following resources for more information: [AUTOMATED STEP]: Verify that the user:cannotssh@example.com has "roles/iam.serviceAccountUser" role. - projects/gcpdiag-gce-faultyssh-runbook [FAIL] [REASON] "user:cannotssh@example.com" lacks the "roles/iam.serviceAccountUser" role or a custom role with the necessary permissions to impersonate the attached service account. [REMEDIATION] Assign the "roles/iam.serviceAccountUser" role to "user:cannotssh@example.com". Consult the following guidelines: [AUTOMATED STEP]: Verify that the user:cannotssh@example.com has "roles/iap.tunnelResourceAccessor" role. - projects/gcpdiag-gce-faultyssh-runbook [FAIL] [REASON] user:cannotssh@example.com does not have the "roles/iap.tunnelResourceAccessor" role necessary to Tunnel through IAP for access. [REMEDIATION] Ensure that "user:cannotssh@example.com" is assigned the "roles/iap.tunnelResourceAccessor" role to enable the required access. For detailed guidance, refer to the following resources: - [Setting up OS Login](https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users) - [Managing access to service accounts](https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role) [GATEWAY]: Evaluating VPC network firewall rules for SSH access. [AUTOMATED STEP]: Evaluating VPC network traffic rules. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [FAIL] [REASON] Allow ingress traffic from the VIP range 35.235.240.0/20 ' [REMEDIATION] If connecting to a non-public VM and do not wish to allow external access, choose one of the following connection options for VMs Alternatively, create/update a firewall rule to allow access [AUTOMATED STEP]: Checking for Guest Agent startup logs - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [OK] [REASON] Detected that Google Guest Agent is running within the VM [AUTOMATED STEP]: Examining SSHD authentication failures via serial logs. - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh [UNCERTAIN] [REASON] No evidence of successful or failed SSHD authentication attempts is present in the serial logs. [REMEDIATION] To mitigate "bad ownership or modes for directory" errors: 1. Follow either of the below steps to check the permissions: - these steps to rescue the vm: - these steps login through serial console: 2. Refer to the standard permissions required for ssh connection: [END]: Finalize SSH diagnostics. access_method=oslogin,end_time=2025-01-23 13:30:39.144959+00:00,instance_name=valid-linux- ssh,principal=serviceAccount:canssh@gcpdiag-gce-faultyssh- runbook.iam.gserviceaccount.com,project_id=gcpdiag-gce-faultyssh- runbook,proxy=iap,start_time=2025-01-23 23:30:39.144959+00:00,zone=europe-west2-a gce/ssh: A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs. Investigates components required for ssh on either Windows and Linux VMs hosted on Google Cloud Platform and pinpoint misconfigurations. Areas Examined: - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt normal SSH operations. - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to leverage OS Login features and to use metadata-based SSH keys for authentication. - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys, flags and other essential configuration details that facilitate SSH access. - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no network barriers preventing SSH access to the VM. - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any misconfigurations or service disruptions that could be obstructing SSH functionality. - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and the organization policies permits SSH in Browser. [START]: Starting SSH diagnostics [INFO]: Source IP to be used for SSH connectivity test: 35.235.240.0/20 [INFO]: Port 22 and ip 35.235.240.0/20 as the source IP [INFO]: Access method to investigate: OS login https://cloud.google.com/compute/docs/oslogin [AUTOMATED STEP]: Verify GCE Instance is in a "RUNNING" state. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [OK] [REASON] The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh is in RUNNING state. [COMPOSITE STEP]: Evaluating VM memory, CPU, and disk performance. [AUTOMATED STEP]: Verify VM memory utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [FAIL] [REASON] Memory utilization on this VM has reached levels that may compromise its VM application performance. [REMEDIATION] Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [FAIL] [REASON] Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [FAIL] [REASON] CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. [REMEDIATION] Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: [GATEWAY]: Identify Guest OS type. [INFO]: Linux Guest OS detected. Proceeding with diagnostics specific to Linux systems. [COMPOSITE STEP]: Analyzing serial logs for common linux guest os and application issues. [AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [OK] [REASON] A review of the serial console logs for the GCE instance `projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh` from `2025-01-23 23:30:39.144959+00:00` to `2025-01-23 13:30:39.144959+00:00` shows no evidence of kernel panic or GRUB issues. The `systemd` application is confirmed to be running. [AUTOMATED STEP]: Verify OpenSSH daemon (sshd) has started from most recent serial logs. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [OK] [REASON] The latest OpenSSH daemon (sshd) logs indicate that the daemon has started. [AUTOMATED STEP]: Verify if SSHGuard is installed and blocking SSH connectivity - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [UNCERTAIN] [REASON] The retrieved logs do not contain definitive entries, either positive or negative, to make a conclusive assessment. Review the GCE serial logs to determine if SSHGuard is a likely cause. [REMEDIATION] Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform. Consult the most appropriate team within your organisation to assist with resolution. For guest OS issues and SSHGuard configurations, refer to: - Support Scope: - Out of Scope Support: [COMPOSITE STEP]: Verify overall user permissions for SSH access. Note: Only roles granted at the project level are checked. Permissions inherited from ancestor resources such as folder(s) or organization and groups are not checked. [AUTOMATED STEP]: Verify that the serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com has "compute.instance.get" permission. - projects/gcpdiag-gce-faultyssh-runbook [OK] [REASON] serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com possesses the appropriate permissions to fetch instance details. [GATEWAY]: Identify OS Login Setup. [AUTOMATED STEP]: Verify that OS Login is set to `True` for the VM. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [OK] [REASON] OS Login is enabled on this VM. [AUTOMATED STEP]: Verify whether serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com has at least one valid OS login role. - projects/gcpdiag-gce-faultyssh-runbook [OK] [REASON] "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com" possesses at least one of the required OS Login roles: roles/compute.osAdminLogin, roles/compute.osLogin, roles/owner. [AUTOMATED STEP]: Verify that the serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com has "roles/iam.serviceAccountUser" role. - projects/gcpdiag-gce-faultyssh-runbook [OK] [REASON] "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com" has the "roles/iam.serviceAccountUser" required to impersonate the attached service account. [AUTOMATED STEP]: Verify that the serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com has "roles/iap.tunnelResourceAccessor" role. - projects/gcpdiag-gce-faultyssh-runbook [OK] [REASON] "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com" has the requisite "roles/iap.tunnelResourceAccessor" role to tunnel through IAP. [GATEWAY]: Evaluating VPC network firewall rules for SSH access. [AUTOMATED STEP]: Evaluating VPC network traffic rules. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [OK] [REASON] Ingress Traffic from source IP/CIDR 35.235.240.0/20, tcp:22 to the GCE instance valid-linux-ssh is allowed by: vpc firewall rule: default-allow-ssh [AUTOMATED STEP]: Checking for Guest Agent startup logs - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [OK] [REASON] Detected that Google Guest Agent is running within the VM [AUTOMATED STEP]: Examining SSHD authentication failures via serial logs. - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh [UNCERTAIN] [REASON] No evidence of successful or failed SSHD authentication attempts is present in the serial logs. [REMEDIATION] To mitigate "bad ownership or modes for directory" errors: 1. Follow either of the below steps to check the permissions: - these steps to rescue the vm: - these steps login through serial console: 2. Refer to the standard permissions required for ssh connection: [END]: Finalize SSH diagnostics. access_method=oslogin,end_time=2025-01-23 13:30:39.144959+00:00,instance_name=faulty-windows- ssh,posix_user=no_user,principal=user:cannot@example.com,project_id=gcpdiag-gce-faultyssh- runbook,proxy=iap,src_ip=0.0.0.0,start_time=2025-01-23 23:30:39.144959+00:00,zone=europe-west2-a gce/ssh: A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs. Investigates components required for ssh on either Windows and Linux VMs hosted on Google Cloud Platform and pinpoint misconfigurations. Areas Examined: - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt normal SSH operations. - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to leverage OS Login features and to use metadata-based SSH keys for authentication. - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys, flags and other essential configuration details that facilitate SSH access. - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no network barriers preventing SSH access to the VM. - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any misconfigurations or service disruptions that could be obstructing SSH functionality. - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and the organization policies permits SSH in Browser. [START]: Starting SSH diagnostics [INFO]: Source IP to be used for SSH connectivity test: 35.235.240.0/20 [INFO]: Port 22 and ip 35.235.240.0/20 as the source IP [INFO]: Access method to investigate: OS login https://cloud.google.com/compute/docs/oslogin [INFO]: Guest OS Posix User to be investigated: no_user [AUTOMATED STEP]: Verify GCE Instance is in a "RUNNING" state. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [FAIL] [REASON] The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh is in TERMINATED state. [REMEDIATION] Restart VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh and ensure VM lifecycle transitions from TERMINATED to RUNNING. Consult the following documentation: - Restarting a compute instance: - Troubleshooting VM startup issues: [COMPOSITE STEP]: Evaluating VM memory, CPU, and disk performance. [AUTOMATED STEP]: Verify VM memory utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [FAIL] [REASON] Memory utilization on this VM has reached levels that may compromise its VM application performance. [REMEDIATION] Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [FAIL] [REASON] Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [FAIL] [REASON] CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. [REMEDIATION] Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: [GATEWAY]: Identify Guest OS type. [INFO]: Windows Guest OS detected. Proceeding with diagnostics specific to Windows systems. [COMPOSITE STEP]: Analyzing Windows Guest OS boot-up and SSH agent status. [AUTOMATED STEP]: Verify VM metadata value. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [FAIL] [REASON] SSH metadata `enable-windows-ssh` is not configured for this Windows VM, preventing SSH access. [REMEDIATION] To enable SSH access for your Windows VM, you must configure SSH metadata settings appropriately. Please consult our guide on enabling SSH for Windows instances for step-by-step instructions: [AUTOMATED STEP]: Verify Windows boot up process have successfully completed. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [UNCERTAIN] [REASON] Lack of serial log data prevented a thorough assessment of the VM's operational state. Result is inconclusive [REMEDIATION] Fix boot issues preventing a successful startup. If the Google Compute Engine (GCE) guest agents are installed, the startup process should include the expected guest agent logs. Resources 1. [Troubleshooting Windows instances](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows) 2. [Connecting to the Windows Special Administrative Console (SAC)](https://cloud.google.com/compute/docs/instances/connecting-to-sac) 3. [Installing the Windows GCE guest environment](https://cloud.google.com/compute/docs/images/install-guest-environment#windows:~:text=Engine%20Shutdown%20Scripts-,Windows,-GCEGuestAgent%3A%20GCE%20Agent) 4. [Connecting to Windows instances](https://cloud.google.com/compute/docs/instances/connecting-to-windows) 5. [Connecting to Windows using SSH](https://cloud.google.com/compute/docs/connect/windows-ssh) 6. [Using PowerShell to connect to Windows instances](https://cloud.google.com/compute/docs/instances/windows/connecting-powershell) [MANUAL STEP]: Verify if the necessary Google guest agents, especially `google-compute-engine-ssh`, are operational on the VM. [COMPOSITE STEP]: Verify overall user permissions for SSH access. Note: Only roles granted at the project level are checked. Permissions inherited from ancestor resources such as folder(s) or organization and groups are not checked. [AUTOMATED STEP]: Verify that the user:cannot@example.com has "compute.instance.get" permission. - projects/gcpdiag-gce-faultyssh-runbook [FAIL] [REASON] user:cannot@example.com does not have the permissions needed to manage instances. The following permissions are required: permissions. [REMEDIATION] Ensure user:cannot@example.com is granted a role encompassing the necessary permissions: - Permissions needed: compute.instances.get For guidance on assigning instance admin roles, consult: [GATEWAY]: Identify OS Login Setup. [AUTOMATED STEP]: Verify that OS Login is set to `True` for the VM. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [OK] [REASON] OS Login is enabled on this VM. [AUTOMATED STEP]: Verify whether user:cannot@example.com has at least one valid OS login role. - projects/gcpdiag-gce-faultyssh-runbook [FAIL] [REASON] "user:cannot@example.com" is missing at least one of the required OS Login roles: roles/compute.osAdminLogin, roles/compute.osLogin, roles/owner. [REMEDIATION] Assign the principal one of the roles required for OS Login privileges. Consult the following resources for more information: [AUTOMATED STEP]: Verify that the user:cannot@example.com has "roles/iam.serviceAccountUser" role. - projects/gcpdiag-gce-faultyssh-runbook [FAIL] [REASON] "user:cannot@example.com" lacks the "roles/iam.serviceAccountUser" role or a custom role with the necessary permissions to impersonate the attached service account. [REMEDIATION] Assign the "roles/iam.serviceAccountUser" role to "user:cannot@example.com". Consult the following guidelines: [AUTOMATED STEP]: Verify that the user:cannot@example.com has "roles/iap.tunnelResourceAccessor" role. - projects/gcpdiag-gce-faultyssh-runbook [FAIL] [REASON] user:cannot@example.com does not have the "roles/iap.tunnelResourceAccessor" role necessary to Tunnel through IAP for access. [REMEDIATION] Ensure that "user:cannot@example.com" is assigned the "roles/iap.tunnelResourceAccessor" role to enable the required access. For detailed guidance, refer to the following resources: - [Setting up OS Login](https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users) - [Managing access to service accounts](https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role) [GATEWAY]: Evaluating VPC network firewall rules for SSH access. [AUTOMATED STEP]: Evaluating VPC network traffic rules. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [FAIL] [REASON] Allow ingress traffic from the VIP range 35.235.240.0/20 ' [REMEDIATION] If connecting to a non-public VM and do not wish to allow external access, choose one of the following connection options for VMs Alternatively, create/update a firewall rule to allow access [AUTOMATED STEP]: Checking for Guest Agent startup logs - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [UNCERTAIN] [REASON] No success or failed logs found for Google Guest Agent startup. [REMEDIATION] The google-guest-agent contains the guest agent and metadata script executables which runs on the guest OS to support the Compute Engine features. These features include account management, OS Login integration, clock skew, network interface management, and instance setup. In case Guest Agent is not started during instance startup, users might face login issues. The `google-guest-agent.service` service should be in running state. If the service is disabled, enable and start the service, by running the following commands: ``` systemctl enable google-guest-agent.service systemctl start google-guest-agent.service ``` Verify that the Linux Google Agent scripts are installed and running. If the Linux Google Agent is not installed, re-install it. [AUTOMATED STEP]: Examining SSHD authentication failures via serial logs. - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh [UNCERTAIN] [REASON] No evidence of successful or failed SSHD authentication attempts is present in the serial logs. [REMEDIATION] To mitigate "bad ownership or modes for directory" errors: 1. Follow either of the below steps to check the permissions: - these steps to rescue the vm: - these steps login through serial console: 2. Refer to the standard permissions required for ssh connection: [END]: Finalize SSH diagnostics. ================================================ FILE: gcpdiag/runbook/gce/snapshots/vm_creation.txt ================================================ instance_name=existing-instance,project_id=gcpdiag-gce6-aaaa,zone=us-central1-c gce/vm-creation: Runbook for diagnosing VM creation issues. This runbook helps identify and resolve issues related to VM creation in Google Cloud. - Checks for quota-related issues. - Checks for permission-related issues. - Checks for conflicts such as resource already existing. [START]: Executing default start step for runbooks. [GATEWAY]: Query logs to determine the cause of VM creation failure. - gcpdiag-gce6-aaaa [FAIL] [REASON] Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance' [REMEDIATION] Grant the user or service account attempting the VM creation the required permissions to create a VM instance. Consult the following guide for details on required permissions: [END]: Finalize runbook investigations. instance_name=non-existing-gpu-instance,project_id=gcpdiag-gce6-aaaa,zone=us-central1-c gce/vm-creation: Runbook for diagnosing VM creation issues. This runbook helps identify and resolve issues related to VM creation in Google Cloud. - Checks for quota-related issues. - Checks for permission-related issues. - Checks for conflicts such as resource already existing. [START]: Executing default start step for runbooks. [GATEWAY]: Query logs to determine the cause of VM creation failure. - gcpdiag-gce6-aaaa [FAIL] [REASON] Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance' [REMEDIATION] Grant the user or service account attempting the VM creation the required permissions to create a VM instance. Consult the following guide for details on required permissions: [END]: Finalize runbook investigations. ================================================ FILE: gcpdiag/runbook/gce/snapshots/vm_performance.txt ================================================ instance_name=faulty-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a gce/vm-performance: Google Compute Engine VM performance checks This runbook is designed to assist you in investigating and understanding the underlying reasons behind the performance issues of your Google Compute Engine VMs within Google Cloud Platform. Key Investigation Areas: - High CPU utilisation - CPU Over-commitment for E2 or Sole-Tenant VMs - High Memory utilisation - Disk space high utilisation - High Disk IOPS utilisation - High Disk Throughput utilisation - Disk Health check - Disk IO latency check - Disk Slowness check - Check for Live Migrations - Usual Error checks in Serial console logs [START]: Verify GCE Instance is in a "RUNNING" state. [AUTOMATED STEP]: Verify GCE Instance is in a "RUNNING" state. - gcpdiag-gce-vm-performance/faulty-linux-ssh [OK] [REASON] The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh is in RUNNING state. [AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels. - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. [REMEDIATION] Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: [AUTOMATED STEP]: Checking if CPU is overcommited [INFO]: vm.min_cpu_platform: None - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] CPU for the VM faulty-linux-ssh is over committed beyond acceptable limits: 0 ms/s [AUTOMATED STEP]: Verify VM memory utilization is within optimal levels. - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Memory utilization on this VM has reached levels that may compromise its VM application performance. [REMEDIATION] Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-gce-vm-performance/faulty-linux-ssh [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [AUTOMATED STEP]: Verify instance disks are healthy. - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] You might experience slower/poor performance with your disk 'persistent-disk-0' due to an ongoing issue with our Compute Engine or Persistent Disk infrastructure. We're working to resolve this as quickly as possible. [REMEDIATION] To better understand the situation with your Compute Engine or Persistent Disks, could you please take a look at the Google Cloud Status page: This page provides real-time updates on the health of Google Cloud services. Additionally, it may be helpful to check the Service Health dashboard in your Google Cloud Console for any reported incidents: If you don't find any information about an ongoing issue related to your concern, please don't hesitate to reach out to Google Cloud Support by creating a support case. They'll be happy to investigate further and assist you. [AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels. - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify any slow Disk operations related errors in Serial console logs - gcpdiag-gce-vm-performance/faulty-linux-ssh [UNCERTAIN] [REASON] No error messages related to disk latency were found in the serial console logs. This does not rule out disk performance issues. [REMEDIATION] There can be multiple reasons which can cause Slow Disk IOs: - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight. - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations. - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads, this can also cause CPU or Disk IOPS/throughput Starvation. - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels. To fix this issue: - Please optimize your application workloads. - If needed, please add more resources(CPU, Memory) to the VM. - Please optimize your Disk performance - - If needed, please change your disk type to get better Disk IOPS/throughput limits - [AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] Possible filesystem corruption detected. The patterns used: ``` 'Corruption of in-memory data detected. Shutting down filesystem', 'Corruption of in-memory data detected', 'warning: mounting fs with errors', 'Failed to mount /', 'A stop job is running for Security \.\.\..* Service ', 'I/O Error Detected. Shutting down filesystem', 'metadata I/O error in' ``` [REMEDIATION] To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue), available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem. Additional resources for reference: - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923) - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw) These resources provide detailed steps for diagnosing and resolving filesystem issues. [AUTOMATED STEP]: Verify Instance's Disk Avg IO Latency is within optimal limits. - gcpdiag-gce-vm-performance/faulty-linux-ssh [FAIL] [REASON] The performance of the disk 'faulty-linux-ssh' is currently degraded due to high IO latency exceeding optimal thresholds. This may result in slower read/write speeds and overall reduced performance. [REMEDIATION] Disk I/O latency is the time it takes for a read or write operation to complete on a disk. High disk I/O latency can significantly impact the performance of your applications and workloads running on the instance, leading to slow response times, increased processing time, and overall sluggishness. **Potential Bottlenecks** - Disk Type: To optimize disk performance, ensure your disk type is appropriate for your workload and provides acceptable latency for your system architecture. Choosing the right disk type can significantly impact performance. - Workload: The nature of your workload also influences latency. Workloads with many small, random I/O operations will generally have higher latency than those with sequential I/O **Optimize Disk Usage** - Reduce I/O Operations: Optimize your applications and database queries to minimize the number of disk I/O operations. - Increase I/O Request Size: Larger I/O requests can be more efficient than many small ones. Consider adjusting your application or database settings to increase the I/O request size. - Caching: Implement caching mechanisms to reduce the need to access the disk for frequently used data. Choose the Right Disk Type with lesser IO Latency - You may also look into Optimizing persistent disk performance - Please don't hesitate to reach out to Google Cloud Support if issue is not resolved. [AUTOMATED STEP]: Verify live migrations for the instance [INFO]: Live Migration Detected at 2021/11/24 16:29:21, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:34:35, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:34:37, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:34:38, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:35:08, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:35:10, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:35:22, Checking further [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [END]: Finalize VM performance diagnostics. instance_name=faulty-windows-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a gce/vm-performance: Google Compute Engine VM performance checks This runbook is designed to assist you in investigating and understanding the underlying reasons behind the performance issues of your Google Compute Engine VMs within Google Cloud Platform. Key Investigation Areas: - High CPU utilisation - CPU Over-commitment for E2 or Sole-Tenant VMs - High Memory utilisation - Disk space high utilisation - High Disk IOPS utilisation - High Disk Throughput utilisation - Disk Health check - Disk IO latency check - Disk Slowness check - Check for Live Migrations - Usual Error checks in Serial console logs [START]: Verify GCE Instance is in a "RUNNING" state. - gcpdiag-gce-vm-performance/faulty-windows-ssh [FAIL] [REASON] The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh is in TERMINATED state. [REMEDIATION] Restart VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh and ensure VM lifecycle transitions from TERMINATED to RUNNING. Consult the following documentation: - Restarting a compute instance: - Troubleshooting VM startup issues: [AUTOMATED STEP]: Verify GCE Instance is in a "RUNNING" state. - gcpdiag-gce-vm-performance/faulty-windows-ssh [FAIL] [REASON] The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh is in TERMINATED state. [REMEDIATION] Restart VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh and ensure VM lifecycle transitions from TERMINATED to RUNNING. Consult the following documentation: - Restarting a compute instance: - Troubleshooting VM startup issues: [AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels. - gcpdiag-gce-vm-performance/faulty-windows-ssh [FAIL] [REASON] CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. [REMEDIATION] Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: [AUTOMATED STEP]: Checking if CPU is overcommited [INFO]: vm.min_cpu_platform: None - gcpdiag-gce-vm-performance/faulty-windows-ssh [FAIL] [REASON] CPU for the VM faulty-windows-ssh is over committed beyond acceptable limits: 0 ms/s [AUTOMATED STEP]: Verify VM memory utilization is within optimal levels. - gcpdiag-gce-vm-performance/faulty-windows-ssh [FAIL] [REASON] Memory utilization on this VM has reached levels that may compromise its VM application performance. [REMEDIATION] Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-gce-vm-performance/faulty-windows-ssh [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [AUTOMATED STEP]: Verify instance disks are healthy. - gcpdiag-gce-vm-performance/faulty-windows-ssh [FAIL] [REASON] You might experience slower/poor performance with your disk 'persistent-disk-0' due to an ongoing issue with our Compute Engine or Persistent Disk infrastructure. We're working to resolve this as quickly as possible. [REMEDIATION] To better understand the situation with your Compute Engine or Persistent Disks, could you please take a look at the Google Cloud Status page: This page provides real-time updates on the health of Google Cloud services. Additionally, it may be helpful to check the Service Health dashboard in your Google Cloud Console for any reported incidents: If you don't find any information about an ongoing issue related to your concern, please don't hesitate to reach out to Google Cloud Support by creating a support case. They'll be happy to investigate further and assist you. [AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels. - gcpdiag-gce-vm-performance/faulty-windows-ssh [FAIL] [REASON] Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify any slow Disk operations related errors in Serial console logs - gcpdiag-gce-vm-performance/faulty-windows-ssh [UNCERTAIN] [REASON] No error messages related to disk latency were found in the serial console logs. This does not rule out disk performance issues. [REMEDIATION] There can be multiple reasons which can cause Slow Disk IOs: - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight. - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations. - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads, this can also cause CPU or Disk IOPS/throughput Starvation. - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels. To fix this issue: - Please optimize your application workloads. - If needed, please add more resources(CPU, Memory) to the VM. - Please optimize your Disk performance - - If needed, please change your disk type to get better Disk IOPS/throughput limits - [AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs - gcpdiag-gce-vm-performance/faulty-windows-ssh [UNCERTAIN] [REASON] No evidence Filesystem corruption errors present in the serial logs. [REMEDIATION] To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue), available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem. Additional resources for reference: - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923) - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw) These resources provide detailed steps for diagnosing and resolving filesystem issues. [AUTOMATED STEP]: Verify Instance's Disk Avg IO Latency is within optimal limits. - gcpdiag-gce-vm-performance/faulty-windows-ssh [FAIL] [REASON] The performance of the disk 'faulty-windows-ssh' is currently degraded due to high IO latency exceeding optimal thresholds. This may result in slower read/write speeds and overall reduced performance. [REMEDIATION] Disk I/O latency is the time it takes for a read or write operation to complete on a disk. High disk I/O latency can significantly impact the performance of your applications and workloads running on the instance, leading to slow response times, increased processing time, and overall sluggishness. **Potential Bottlenecks** - Disk Type: To optimize disk performance, ensure your disk type is appropriate for your workload and provides acceptable latency for your system architecture. Choosing the right disk type can significantly impact performance. - Workload: The nature of your workload also influences latency. Workloads with many small, random I/O operations will generally have higher latency than those with sequential I/O **Optimize Disk Usage** - Reduce I/O Operations: Optimize your applications and database queries to minimize the number of disk I/O operations. - Increase I/O Request Size: Larger I/O requests can be more efficient than many small ones. Consider adjusting your application or database settings to increase the I/O request size. - Caching: Implement caching mechanisms to reduce the need to access the disk for frequently used data. Choose the Right Disk Type with lesser IO Latency - You may also look into Optimizing persistent disk performance - Please don't hesitate to reach out to Google Cloud Support if issue is not resolved. [AUTOMATED STEP]: Verify live migrations for the instance [INFO]: Live Migration Detected at 2021/11/24 16:29:21, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:34:35, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:34:37, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:34:38, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:35:08, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:35:10, Checking further [INFO]: Live Migration Detected at 2021/11/24 16:35:22, Checking further [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits [END]: Finalize VM performance diagnostics. ================================================ FILE: gcpdiag/runbook/gce/snapshots/vm_termination.txt ================================================ end_time=2025-03-19T00:00:00+00:00,instance_name=start-and-stop-vm,project_id=gcpdiag- gce5-aaaa,start_time=2025-03-17T00:00:00+00:00,zone=us-central1-c gce/vm-termination: GCE Instance unexpected shutdowns and reboots diagnostics This runbook assists in investigating and understanding the reasons behind unexpected terminations or reboots of GCE Virtual Machines (VMs). Areas investigated: - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud systems due to maintenance events, hardware failures, or resource constraints. - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions, such as API calls made by users or service accounts, including manual shutdowns, restarts, or automated processes impacting VM states. [START]: Validate the provided parameters to investigate VM terminations. [GATEWAY]: Investigate VM termination reason. [END]: Finalize VM terminations diagnostics. end_time=2025-03-19T00:00:00+00:00,instance_name=spot-vm-termination,project_id=gcpdiag- gce5-aaaa,start_time=2025-03-17T00:00:00+00:00,zone=us-central1-c gce/vm-termination: GCE Instance unexpected shutdowns and reboots diagnostics This runbook assists in investigating and understanding the reasons behind unexpected terminations or reboots of GCE Virtual Machines (VMs). Areas investigated: - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud systems due to maintenance events, hardware failures, or resource constraints. - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions, such as API calls made by users or service accounts, including manual shutdowns, restarts, or automated processes impacting VM states. [START]: Validate the provided parameters to investigate VM terminations. [GATEWAY]: Investigate VM termination reason. [END]: Finalize VM terminations diagnostics. end_time=2025-03-19T00:00:00+00:00,instance_name=shielded-vm-integrity-failure,project_id=gcpdiag- gce5-aaaa,start_time=2025-03-17T00:00:00+00:00,zone=us-central1-c gce/vm-termination: GCE Instance unexpected shutdowns and reboots diagnostics This runbook assists in investigating and understanding the reasons behind unexpected terminations or reboots of GCE Virtual Machines (VMs). Areas investigated: - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud systems due to maintenance events, hardware failures, or resource constraints. - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions, such as API calls made by users or service accounts, including manual shutdowns, restarts, or automated processes impacting VM states. [START]: Validate the provided parameters to investigate VM terminations. [GATEWAY]: Investigate VM termination reason. [GATEWAY]: Decision point to investigate various stop operation types [AUTOMATED STEP]: Investigate the scheduled stop policy - gcpdiag-gce5-aaaa/shielded-vm-integrity-failure [FAIL] [REASON] Instance projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure was terminated by account service-123456012345@compute-system.iam.gserviceaccount.com due to a scheduled stop policy. [REMEDIATION] No action required. VM is currently running. [END]: Finalize VM terminations diagnostics. ================================================ FILE: gcpdiag/runbook/gce/ssh.py ================================================ # # Copyright 2023 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. """Module containing SSH diagnostic tree and custom steps.""" from ipaddress import IPv4Address from gcpdiag import config, runbook from gcpdiag.queries import crm, gce, iam from gcpdiag.runbook import exceptions as runbook_exceptions from gcpdiag.runbook import op from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.gce import constants as gce_const from gcpdiag.runbook.gce import flags from gcpdiag.runbook.gce import generalized_steps as gce_gs from gcpdiag.runbook.gce import util from gcpdiag.runbook.gcp import generalized_steps as gcp_gs from gcpdiag.runbook.iam import generalized_steps as iam_gs CHECK_SSH_IN_BROWSER = 'check_ssh_in_browser' CLIENT = 'client' ACCESS_METHOD = 'access_method' MFA = 'mfa' IAP = 'iap' OSLOGIN = 'oslogin' SSH_KEY_IN_METADATA = 'ssh-key-in-metadata' SSH_IN_BROWSER = 'ssh-in-browser' OSLOGIN_2FA = 'oslogin-2fa' SECURITY_KEY = 'security-key' OPENSSH = 'openssh' GCLOUD = 'gcloud' PUTTY = 'putty' IAP_DESKTOP = 'iap-desktop' JUMPHOST = 'jumphost' class Ssh(runbook.DiagnosticTree): """A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs. Investigates components required for ssh on either Windows and Linux VMs hosted on Google Cloud Platform and pinpoint misconfigurations. Areas Examined: - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt normal SSH operations. - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to leverage OS Login features and to use metadata-based SSH keys for authentication. - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys, flags and other essential configuration details that facilitate SSH access. - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no network barriers preventing SSH access to the VM. - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any misconfigurations or service disruptions that could be obstructing SSH functionality. - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and the organization policies permits SSH in Browser. """ # Specify parameters common to all steps in the diagnostic tree class. parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The ID of the project hosting the GCE Instance', 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the target GCE Instance', 'deprecated': True, 'new_parameter': 'instance_name', 'group': 'instance' }, flags.INSTANCE_NAME: { 'type': str, 'help': 'The name of the target GCE Instance', 'group': 'instance' }, flags.INSTANCE_ID: { 'type': int, 'help': 'The instance ID of the target GCE Instance', 'group': 'instance' }, flags.ID: { 'type': int, 'help': 'The instance ID of the target GCE Instance', 'group': 'instance' }, flags.ZONE: { 'type': str, 'help': 'The zone of the target GCE Instance', 'required': True }, flags.PRINCIPAL: { 'type': str, 'help': ( 'The user or service account initiating ' 'the SSH connection. This user should be authenticated in ' 'gcloud/cloud console when sshing into to a GCE instance. ' 'For service account impersonation, it should be the ' 'service account\'s email. (format: user:user@example.com or ' 'serviceAccount:service-account-name@project-id.iam.gserviceaccount.com)' ), 'ignorecase': True }, flags.LOCAL_USER: { 'type': str, 'help': 'Posix User on the VM', 'deprecated': True, 'new_parameter': 'posix_user' }, flags.POSIX_USER: { 'type': str, 'help': 'Posix User on the VM', }, flags.TUNNEL_THROUGH_IAP: { 'type': bool, 'help': ('A boolean parameter (true or false) indicating whether ', 'Identity-Aware Proxy should be used for establishing the SSH ' 'connection.'), 'default': True, 'deprecated': True, 'new_parameter': 'proxy' }, flags.PROXY: { 'type': str, 'help': ( 'A string that specifies the method used to establish the SSH connection, ', 'and indicating whether Identity-Aware Proxy (IAP) or a jumphost is utilized.' ), 'enum': ['iap', 'jumphost'] }, flags.CHECK_OS_LOGIN: { 'type': bool, 'help': ('A boolean value (true or false) indicating whether OS ' 'Login should be used for SSH authentication'), 'default': True, 'deprecated': True, 'new_parameter': 'access_method' }, flags.CLIENT: { 'type': str, 'help': 'The SSH client application used to establish SSH connection', 'enum': [ 'ssh-in-browser', 'gcloud', 'openssh', 'putty', 'iap-desktop' ] }, flags.SRC_IP: { 'type': IPv4Address, 'help': ( 'The IPv4 address of the workstation connecting to the network, ' 'or the IP of the bastion/jumphost if currently logged in through one.' ) }, flags.PROTOCOL_TYPE: { 'type': str, 'help': 'Protocol used to connect to SSH', 'default': 'tcp', 'deprecated': True }, flags.PORT: { 'type': int, 'help': 'The port used to connect to on the remote host (default: 22)', 'default': gce_const.DEFAULT_SSHD_PORT }, CHECK_SSH_IN_BROWSER: { 'type': bool, 'help': 'Check that SSH in Browser is feasible', 'default': False, 'deprecated': True, 'new_parameter': 'client' }, ACCESS_METHOD: { 'type': str, 'help': 'The method used to share or restrict access to the instance', 'enum': ['oslogin', 'ssh-key-in-metadata'] }, MFA: { 'type': str, 'help': 'Multifactor authentication required to access to the instance', 'enum': ['oslogin-2fa', 'security-key'] } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.INSTANCE_NAME] = parameters.pop(flags.NAME) if flags.ID in parameters: parameters[flags.INSTANCE_ID] = parameters.pop(flags.ID) if flags.LOCAL_USER in parameters: parameters[flags.POSIX_USER] = parameters.pop(flags.LOCAL_USER) if flags.TUNNEL_THROUGH_IAP in parameters: parameters[flags.PROXY] = IAP del parameters[flags.TUNNEL_THROUGH_IAP] if flags.CHECK_OS_LOGIN in parameters: parameters[flags.ACCESS_METHOD] = OSLOGIN del parameters[flags.CHECK_OS_LOGIN] if CHECK_SSH_IN_BROWSER in parameters: if parameters.pop(CHECK_SSH_IN_BROWSER): parameters[flags.CLIENT] = SSH_IN_BROWSER if flags.PROTOCOL_TYPE in parameters: del parameters[flags.PROTOCOL_TYPE] # Deprecated with no replacement def build_tree(self): start = SshStart() lifecycle_check = gce_gs.VmLifecycleState() lifecycle_check.project_id = op.get(flags.PROJECT_ID) lifecycle_check.zone = op.get(flags.ZONE) lifecycle_check.instance_name = op.get(flags.INSTANCE_NAME) lifecycle_check.expected_lifecycle_status = 'RUNNING' performance_check = VmPerformanceChecks() gce_firewall_check = GceFirewallAllowsSsh() # Prepare parameters given by the user # Inform the user values that will be used. self.add_start(step=start) # First check VM is running self.add_step(parent=start, child=lifecycle_check) # Only check performance if VM is up and running. self.add_step(parent=lifecycle_check, child=performance_check) # Check the state of the guest os after performance checks self.add_step(parent=lifecycle_check, child=VmGuestOsType()) # gce_* checks are not depend on the lifecycle, performnce or guest of the VM # assign add as a child of start if op.get(flags.PRINCIPAL): gce_permission_check = GcpSshPermissions() self.add_step(parent=start, child=gce_permission_check) self.add_step(parent=start, child=gce_firewall_check) # Check for Guest Agent status guest_agent_check = gce_gs.VmSerialLogsCheck() guest_agent_check.project_id = op.get(flags.PROJECT_ID) guest_agent_check.zone = op.get(flags.ZONE) guest_agent_check.instance_name = op.get(flags.INSTANCE_NAME) guest_agent_check.template = 'vm_serial_log::guest_agent' guest_agent_check.positive_pattern = gce_const.GUEST_AGENT_STATUS_MSG guest_agent_check.negative_pattern = gce_const.GUEST_AGENT_FAILED_MSG self.add_step(parent=start, child=guest_agent_check) # Check for SSH issues due to bad permissions sshd_auth_failure = gce_gs.VmSerialLogsCheck() sshd_auth_failure.project_id = op.get(flags.PROJECT_ID) sshd_auth_failure.zone = op.get(flags.ZONE) sshd_auth_failure.instance_name = op.get(flags.INSTANCE_NAME) sshd_auth_failure.template = 'vm_serial_log::sshd_auth_failure' sshd_auth_failure.negative_pattern = gce_const.SSHD_AUTH_FAILURE self.add_step(parent=start, child=sshd_auth_failure) # users wants to use SSH in Browser if op.get(CLIENT) == SSH_IN_BROWSER: self.add_step(parent=start, child=SshInBrowserCheck()) self.add_end(step=SshEnd()) class SshStart(runbook.StartStep): """Initiates diagnostics for SSH connectivity issues. This step prepares the environment for SSH diagnostics by gathering necessary information about the target VM. It verifies the existence of the VM, checks user-supplied parameters for validity, and sets up initial conditions for further diagnostic steps. """ def execute(self): """Starting SSH diagnostics""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: util.ensure_instance_resolved() except (runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError) as e: op.add_skipped(project, reason=str(e)) return vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) if vm: # Align with the user on parameters to be investigated # prep authenticated principal if op.get(flags.PRINCIPAL): email_only = len(op.get(flags.PRINCIPAL).split(':')) == 1 if email_only: # Get the type p_policy = iam.get_project_policy(op.get_context()) p_type = p_policy.get_member_type(op.get(flags.PRINCIPAL)) op.put(flags.PRINCIPAL, f'{p_type}:{op.get(flags.PRINCIPAL)}') if p_type: op.info( f'GCP permissions related to SSH will be verified for: {op.get(flags.PRINCIPAL)}' ) if not op.get(flags.SRC_IP) and not op.get( flags.PROXY) and vm.is_public_machine(): op.put(flags.SRC_IP, gce_const.UNSPECIFIED_ADDRESS) op.info( f'No proxy specified. Setting source IP range to: {gce_const.UNSPECIFIED_ADDRESS}' ) if op.get(flags.PROXY) == IAP: # set IAP VIP as the source to the VM op.put(flags.SRC_IP, gce_const.IAP_FW_VIP) op.info( f'Source IP to be used for SSH connectivity test: {op.get(flags.SRC_IP)}' ) elif op.get(flags.PROXY) == JUMPHOST: op.info( f'Source IP to be used for SSH connectivity test: {op.get(flags.SRC_IP)}' ) op.info( f'Port {op.get(flags.PORT)} and ip {op.get(flags.SRC_IP)} as the source IP' ) if not op.get(flags.PORT): op.info(f'SSH port to investigate: {op.get(flags.PORT)}') if op.get(flags.ACCESS_METHOD) == OSLOGIN: op.info( 'Access method to investigate: OS login https://cloud.google.com/compute/docs/oslogin' ) elif op.get(flags.ACCESS_METHOD) == SSH_KEY_IN_METADATA: op.info( 'Access method to investigate: SSH keys in metadata ' 'https://cloud.google.com/compute/docs/instances/access-overview#ssh-access' ) if op.get(flags.POSIX_USER): op.info( f'Guest OS Posix User to be investigated: {op.get(flags.POSIX_USER)}' ) if op.get(CLIENT) == SSH_IN_BROWSER: op.info('SSH Client to be investigated: SSH in Browser') if op.get(CLIENT) == GCLOUD: op.info('Investigating components required to use gcloud compute ssh') if op.get(CLIENT) in (IAP_DESKTOP, PUTTY, OPENSSH): op.info( 'IAP Desktop, Putty and vanilla openssh investigations are not supported yet' ) if op.get(MFA) == OSLOGIN_2FA: op.info( 'Multifactor authentication to investigate: OS Login 2FA ' 'https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#byb') if op.get(MFA) == SECURITY_KEY: op.info( 'Multifactor authentication to investigate: Security keys with OS Login ' 'https://cloud.google.com/compute/docs/oslogin/security-keys') class VmGuestOsType(runbook.Gateway): """Distinguishes between Windows and Linux operating systems on a VM to guide further diagnostics. Based on the OS type, it directs the diagnostic process towards OS-specific checks, ensuring relevancy and efficiency in troubleshooting efforts. """ def execute(self): """Identify Guest OS type.""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: util.ensure_instance_resolved() except ( runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError, ) as e: op.add_skipped(project, reason=str(e)) return vm = gce.get_instance( project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME), ) if not vm.is_windows_machine(): op.info('Linux Guest OS detected. Proceeding with diagnostics specific to' ' Linux systems.') self.add_child(LinuxGuestOsChecks()) else: op.info( 'Windows Guest OS detected. Proceeding with diagnostics specific to' ' Windows systems.') self.add_child(WindowsGuestOsChecks()) class SshEnd(runbook.EndStep): """Concludes the SSH diagnostics process, offering guidance based on the user's feedback. If SSH issues persist, it directs the user to helpful resources and suggests contacting support with a detailed report """ def execute(self): """Finalize SSH diagnostics.""" if not config.get(flags.INTERACTIVE_MODE): response = op.prompt( kind=op.CONFIRMATION, message=f'Are you able to SSH into VM {op.get(flags.INSTANCE_NAME)}?', choice_msg='Enter an option: ') if response == op.NO: op.info(message=op.END_MESSAGE) class SshInBrowserCheck(runbook.CompositeStep): """Investigate SSH in Browser components SSH can be done via SSH in Browser feature, if desired by user, check components required for SSH in browser to work correctly """ def execute(self): """SSH in browser required?""" ssh_in_browser_orgpolicy_check = crm_gs.OrgPolicyCheck() ssh_in_browser_orgpolicy_check.constraint = 'constraints/compute.disableSshInBrowser' ssh_in_browser_orgpolicy_check.is_enforced = False self.add_child(ssh_in_browser_orgpolicy_check) # add check constraints/compute.vmExternalIpAccess when list org policies are allowed. class GcpSshPermissions(runbook.CompositeStep): """Evaluates the user's GCP permissions against the requirements for accessing a VM via SSH. This step checks if the user has the necessary project-level roles for both traditional SSH access and OS Login methods. It does not consider permissions inherited from higher-level resources such as folders, organizations, or groups. """ def execute(self): """Verify overall user permissions for SSH access. Note: Only roles granted at the project level are checked. Permissions inherited from ancestor resources such as folder(s) or organization and groups are not checked.""" # Check user has permission to access the VM in the first place if op.get(CLIENT) == SSH_IN_BROWSER: console_permission = iam_gs.IamPolicyCheck() console_permission.project = op.get(flags.PROJECT_ID) console_permission.template = 'gcpdiag.runbook.gce::permissions::console_view_permission' console_permission.permissions = ['compute.projects.get'] console_permission.principal = op.get(flags.PRINCIPAL) console_permission.require_all = False self.add_child(console_permission) # Both OS login and gcloud key based require this. instance_fetch_perm_check = iam_gs.IamPolicyCheck() instance_fetch_perm_check.project = op.get(flags.PROJECT_ID) instance_fetch_perm_check.principal = op.get(flags.PRINCIPAL) instance_fetch_perm_check.template = 'gcpdiag.runbook.gce::permissions::instances_get' instance_fetch_perm_check.permissions = ['compute.instances.get'] instance_fetch_perm_check.require_all = False self.add_child(instance_fetch_perm_check) # Check OS login or Key based auth preference. self.add_child(OsLoginStatusCheck()) if op.get(flags.PROXY) == IAP: iap_role_check = iam_gs.IamPolicyCheck() iap_role_check.project = op.get(flags.PROJECT_ID) iap_role_check.principal = op.get(flags.PRINCIPAL) iap_role_check.template = 'gcpdiag.runbook.gce::permissions::iap_role' iap_role_check.roles = [gce_const.IAP_ROLE] iap_role_check.require_all = False self.add_child(iap_role_check) class OsLoginStatusCheck(runbook.Gateway): """Checks for OS Login setup and and non OS login setup on a VM to guide further diagnostics. If using OS Login investigates OS Login related configuration and permission and if not Checks Keybased Configuration. """ def execute(self): """Identify OS Login Setup.""" # User intends to use OS login if op.get(flags.ACCESS_METHOD) == OSLOGIN: os_login_check = gce_gs.VmMetadataCheck() os_login_check.project_id = op.get(flags.PROJECT_ID) os_login_check.zone = op.get(flags.ZONE) os_login_check.instance_name = op.get(flags.INSTANCE_NAME) os_login_check.template = 'vm_metadata::os_login_enabled' os_login_check.metadata_key = 'enable-oslogin' os_login_check.expected_value = True self.add_child(os_login_check) os_login_role_check = iam_gs.IamPolicyCheck() os_login_role_check.project = op.get(flags.PROJECT_ID) os_login_role_check.principal = op.get(flags.PRINCIPAL) os_login_role_check.template = 'gcpdiag.runbook.gce::permissions::has_os_login' os_login_role_check.roles = [ gce_const.OSLOGIN_ROLE, gce_const.OSLOGIN_ADMIN_ROLE, gce_const.OWNER_ROLE ] os_login_role_check.require_all = False self.add_child(os_login_role_check) sa_user_role_check = iam_gs.IamPolicyCheck() sa_user_role_check.project = op.get(flags.PROJECT_ID) sa_user_role_check.principal = op.get(flags.PRINCIPAL) sa_user_role_check.template = 'gcpdiag.runbook.gce::permissions::sa_user_role' sa_user_role_check.roles = [gce_const.SA_USER_ROLE] sa_user_role_check.require_all = False self.add_child(sa_user_role_check) elif op.get(flags.ACCESS_METHOD) == SSH_KEY_IN_METADATA: metadata_perm_check = iam_gs.IamPolicyCheck() metadata_perm_check.project = op.get(flags.PROJECT_ID) metadata_perm_check.principal = op.get(flags.PRINCIPAL) metadata_perm_check.template = 'gcpdiag.runbook.gce::permissions::can_set_metadata' metadata_perm_check.permissions = [ 'compute.instances.setMetadata', 'compute.projects.setCommonInstanceMetadata' ] metadata_perm_check.require_all = False self.add_child(metadata_perm_check) os_login_check = gce_gs.VmMetadataCheck() os_login_check.project_id = op.get(flags.PROJECT_ID) os_login_check.zone = op.get(flags.ZONE) os_login_check.instance_name = op.get(flags.INSTANCE_NAME) os_login_check.template = 'vm_metadata::no_os_login' os_login_check.metadata_key = 'enable_oslogin' os_login_check.expected_value = False self.add_child(os_login_check) self.add_child(PosixUserHasValidSshKeyCheck()) self.add_child(VmDuplicateSshKeysCheck()) class PosixUserHasValidSshKeyCheck(runbook.Step): """Verifies the existence of a valid SSH key for the specified local Proxy user on a (VM). Ensures that the local user has at least one valid SSH key configured in the VM's metadata, which is essential for secure SSH access. The check is performed against the SSH keys stored within the VM's metadata. A successful verification indicates that the user is likely able to SSH into the VM using their key. """ template = 'vm_metadata::valid_ssh_key' def execute(self): """Verify SSH key for local user.""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) # Check if the local_user has a valid key in the VM's metadata. ssh_keys = vm.get_metadata('ssh-keys').split('\n') if vm.get_metadata( 'ssh-keys') else [] has_valid_key = util.user_has_valid_ssh_key(op.get(flags.POSIX_USER), ssh_keys) if has_valid_key: op.add_ok(resource=vm, reason=op.prep_msg(op.SUCCESS_REASON, local_user=op.get(flags.POSIX_USER), full_resource_path=vm.full_path)) else: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, local_user=op.get(flags.POSIX_USER), full_resource_path=vm.full_path), remediation=op.prep_msg(op.FAILURE_REMEDIATION, local_user=op.get( flags.POSIX_USER))) class VmDuplicateSshKeysCheck(runbook.Step): """Check if there are duplicate ssh keys in VM metadata.""" template = 'vm_metadata::duplicate_ssh_keys' def execute(self): """Check for duplicate SSH keys.""" vm = gce.get_instance( project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME), ) ssh_keys_str = vm.get_metadata('ssh-keys') if not ssh_keys_str: op.add_ok(vm, reason='No SSH keys found in metadata.') return key_blobs = [] for line in ssh_keys_str.splitlines(): line = line.strip() if not line: continue # remove username prefix if present line_parts = line.split(':', 1) if len(line_parts) == 2 and ' ' not in line_parts[0]: line_without_user = line_parts[1] else: line_without_user = line parts = line_without_user.strip().split() if len(parts) >= 2: # parts[0] is key type, parts[1] is key blob key_blobs.append(parts[1]) seen = set() duplicates = [] for blob in key_blobs: if blob in seen and blob not in duplicates: duplicates.append(blob) else: seen.add(blob) if duplicates: op.add_failed( vm, reason=op.prep_msg(op.FAILURE_REASON, instance_name=vm.name, count=len(duplicates), keys=','.join(duplicates)), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=vm.name)) class GceFirewallAllowsSsh(runbook.Gateway): """Assesses the VPC network configuration to ensure it allows SSH traffic to the target VM. This diagnostic step checks for ingress firewall rules that permit SSH traffic based on the operational context, such as the use of IAP for SSH or direct access from a specified source IP. It helps identify network configurations that might block SSH connections.""" def execute(self): """Evaluating VPC network firewall rules for SSH access.""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) if op.get(flags.PROXY) == IAP: tti_ingress_check = gce_gs.GceVpcConnectivityCheck() tti_ingress_check.project_id = op.get(flags.PROJECT_ID) tti_ingress_check.zone = op.get(flags.ZONE) tti_ingress_check.instance_name = op.get(flags.INSTANCE_NAME) tti_ingress_check.src_ip = op.get(flags.SRC_IP) tti_ingress_check.protocol_type = 'tcp' tti_ingress_check.port = op.get(flags.PORT) tti_ingress_check.traffic = 'ingress' # Check IAP Firewall rule if specified tti_ingress_check.template = 'vpc_connectivity::tti_ingress' self.add_child(tti_ingress_check) if (not op.get(flags.SRC_IP) and not op.get(flags.PROXY) and vm.is_public_machine()): default_ingress_check = gce_gs.GceVpcConnectivityCheck() default_ingress_check.project_id = op.get(flags.PROJECT_ID) default_ingress_check.zone = op.get(flags.ZONE) default_ingress_check.instance_name = op.get(flags.INSTANCE_NAME) default_ingress_check.src_ip = op.get(flags.SRC_IP) default_ingress_check.protocol_type = 'tcp' default_ingress_check.port = op.get(flags.PORT) default_ingress_check.traffic = 'ingress' default_ingress_check.template = 'vpc_connectivity::default_ingress' self.add_child(default_ingress_check) # Check provided source IP has access if op.get(flags.SRC_IP) and not op.get(flags.PROXY): custom_ip_ingress_check = gce_gs.GceVpcConnectivityCheck() custom_ip_ingress_check.project_id = op.get(flags.PROJECT_ID) custom_ip_ingress_check.zone = op.get(flags.ZONE) custom_ip_ingress_check.instance_name = op.get(flags.INSTANCE_NAME) custom_ip_ingress_check.src_ip = op.get(flags.SRC_IP) custom_ip_ingress_check.protocol_type = 'tcp' custom_ip_ingress_check.port = op.get(flags.PORT) custom_ip_ingress_check.traffic = 'ingress' custom_ip_ingress_check.template = 'vpc_connectivity::default_ingress' self.add_child(custom_ip_ingress_check) class VmPerformanceChecks(runbook.CompositeStep): """Assesses the overall performance of a VM by evaluating its memory, CPU, and disk utilization. This composite diagnostic step sequentially checks for high memory utilization, high disk utilization, and CPU performance issues. It adds specific child steps designed to identify and report potential performance bottlenecks that could impact the VM's operation and efficiency. """ def execute(self): """Evaluating VM memory, CPU, and disk performance.""" vm_memory_check = gce_gs.HighVmMemoryUtilization() vm_memory_check.project_id = op.get(flags.PROJECT_ID) vm_memory_check.zone = op.get(flags.ZONE) vm_memory_check.instance_name = op.get(flags.INSTANCE_NAME) vm_disk_check = gce_gs.HighVmDiskUtilization() vm_disk_check.project_id = op.get(flags.PROJECT_ID) vm_disk_check.zone = op.get(flags.ZONE) vm_disk_check.instance_name = op.get(flags.INSTANCE_NAME) vm_cpu_check = gce_gs.HighVmCpuUtilization() vm_cpu_check.project_id = op.get(flags.PROJECT_ID) vm_cpu_check.zone = op.get(flags.ZONE) vm_cpu_check.instance_name = op.get(flags.INSTANCE_NAME) self.add_child(child=vm_memory_check) self.add_child(child=vm_disk_check) self.add_child(child=vm_cpu_check) class LinuxGuestOsChecks(runbook.CompositeStep): """Examines Linux-based guest OS's serial log entries for guest os level issues. This composite step scrutinizes the VM's serial logs for patterns indicative of kernel panics, problems with the SSH daemon, and blocks by SSH Guard - each of which could signify underlying issues affecting the VM's stability and accessibility. By identifying these specific patterns, the step aims to isolate common Linux OS and application issues, facilitating targeted troubleshooting. """ def execute(self): """Analyzing serial logs for common linux guest os and application issues.""" # Check for kernel panic patterns in serial logs. kernel_panic = gce_gs.VmSerialLogsCheck() kernel_panic.project_id = op.get(flags.PROJECT_ID) kernel_panic.zone = op.get(flags.ZONE) kernel_panic.instance_name = op.get(flags.INSTANCE_NAME) kernel_panic.template = 'vm_serial_log::kernel_panic' kernel_panic.negative_pattern = gce_const.KERNEL_PANIC_LOGS kernel_panic.positive_pattern = ['systemd', 'OSConfigAgent'] self.add_child(kernel_panic) # Check for issues in SSHD configuration or behavior. sshd_check = gce_gs.VmSerialLogsCheck() sshd_check.project_id = op.get(flags.PROJECT_ID) sshd_check.zone = op.get(flags.ZONE) sshd_check.instance_name = op.get(flags.INSTANCE_NAME) sshd_check.template = 'vm_serial_log::sshd' sshd_check.negative_pattern = gce_const.BAD_SSHD_PATTERNS sshd_check.positive_pattern = gce_const.GOOD_SSHD_PATTERNS self.add_child(sshd_check) # Check for SSH Guard blocks that might be preventing SSH access. sshd_guard = gce_gs.VmSerialLogsCheck() sshd_guard.project_id = op.get(flags.PROJECT_ID) sshd_guard.zone = op.get(flags.ZONE) sshd_guard.instance_name = op.get(flags.INSTANCE_NAME) sshd_guard.template = 'vm_serial_log::sshguard' sshd_guard.negative_pattern = gce_const.SSHGUARD_PATTERNS self.add_child(sshd_guard) class WindowsGuestOsChecks(runbook.CompositeStep): """Diagnoses common issues related to Windows Guest OS, focusing on boot-up processes and SSHD. This composite diagnostic step evaluates the VM's metadata to ensure SSH is enabled for Windows, checks serial logs for successful boot-up patterns, and involves a manual check on the Windows SSH agent status. It aims to identify and help troubleshoot potential issues that could impact the VM's accessibility via SSHD. """ def execute(self): """Analyzing Windows Guest OS boot-up and SSH agent status.""" # Check Windows Metadata enabling ssh is set as this is required for windows windows_ssh_md = gce_gs.VmMetadataCheck() windows_ssh_md.project_id = op.get(flags.PROJECT_ID) windows_ssh_md.zone = op.get(flags.ZONE) windows_ssh_md.instance_name = op.get(flags.INSTANCE_NAME) windows_ssh_md.template = 'vm_metadata::windows_ssh_md' windows_ssh_md.metadata_key = 'enable-windows-ssh' windows_ssh_md.expected_value = True self.add_child(windows_ssh_md) windows_good_bootup = gce_gs.VmSerialLogsCheck() windows_good_bootup.project_id = op.get(flags.PROJECT_ID) windows_good_bootup.zone = op.get(flags.ZONE) windows_good_bootup.instance_name = op.get(flags.INSTANCE_NAME) windows_good_bootup.template = 'vm_serial_log::windows_bootup' windows_good_bootup.positive_pattern = gce_const.GOOD_WINDOWS_BOOT_LOGS_READY self.add_child(windows_good_bootup) check_windows_ssh_agent = gcp_gs.HumanTask() check_windows_ssh_agent.project_id = op.get(flags.PROJECT_ID) check_windows_ssh_agent.zone = op.get(flags.ZONE) check_windows_ssh_agent.instance_name = op.get(flags.INSTANCE_NAME) check_windows_ssh_agent.template = ( 'gcpdiag.runbook.gce::vm_serial_log::windows_gce_ssh_agent') vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) check_windows_ssh_agent.resource = vm check_windows_ssh_agent.template = 'gcpdiag.runbook.gce::vm_serial_log::windows_gce_ssh_agent' self.add_child(check_windows_ssh_agent) ================================================ FILE: gcpdiag/runbook/gce/ssh_test.py ================================================ # 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. """Generalize rule snapshot testing.""" import unittest from unittest import mock from dateutil import parser from gcpdiag import config from gcpdiag.queries import apis_stub, crm, gce from gcpdiag.runbook import exceptions as runbook_exceptions from gcpdiag.runbook import gce as gce_runbook from gcpdiag.runbook import op, snapshot_test_base from gcpdiag.runbook.gce import flags, ssh class MockMessage: """Mock messages for testing. Simply returns the key to verify template usage. """ def get_msg(self, key, **kwargs): return f'{key}: {kwargs}' class SshStepTestBase(unittest.TestCase): """Base class for SSH runbook tests.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.params = { flags.PROJECT_ID: 'gcpdiag-gce-faultyssh-runbook', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'test-instance', flags.START_TIME: parser.parse('2025-01-23 23:30:39.144959+00:00'), flags.END_TIME: parser.parse('2025-01-23 13:30:39.144959+00:00') } self.operator.parameters = self.params self.mock_instance = mock.Mock(spec=gce.Instance) self.mock_instance.is_public_machine.return_value = False self.mock_instance.is_windows_machine.return_value = False self.mock_instance.get_metadata.return_value = '' self.mock_gce_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance', return_value=self.mock_instance)) self.mock_ensure_instance_resolved = self.enterContext( mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved')) self.mock_project = mock.Mock(spec=crm.Project) self.mock_project.id = self.params[flags.PROJECT_ID] self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project', return_value=self.mock_project)) class SshTreeTest(SshStepTestBase): """Test Ssh DiagnosticTree methods.""" def test_legacy_parameter_handler(self): """Verify deprecated parameter mapping.""" params = { flags.NAME: 'legacy-name', flags.ID: 12345, flags.LOCAL_USER: 'legacy-user', flags.TUNNEL_THROUGH_IAP: True, flags.CHECK_OS_LOGIN: True, ssh.CHECK_SSH_IN_BROWSER: True, flags.PROTOCOL_TYPE: 'tcp' } tree = ssh.Ssh() tree.legacy_parameter_handler(params) self.assertEqual(params[flags.INSTANCE_NAME], 'legacy-name') self.assertEqual(params[flags.INSTANCE_ID], 12345) self.assertEqual(params[flags.POSIX_USER], 'legacy-user') self.assertEqual(params[flags.PROXY], ssh.IAP) self.assertEqual(params[flags.ACCESS_METHOD], ssh.OSLOGIN) self.assertEqual(params[flags.CLIENT], ssh.SSH_IN_BROWSER) self.assertNotIn(flags.PROTOCOL_TYPE, params) def test_build_tree(self): """Verify tree structure assembly.""" self.operator.parameters[flags.PRINCIPAL] = 'user:test@example.com' self.operator.parameters[ssh.CLIENT] = ssh.SSH_IN_BROWSER tree = ssh.Ssh() with op.operator_context(self.operator): tree.build_tree() self.assertIsInstance(tree.start, ssh.SshStart) child_names = [c.__class__.__name__ for c in tree.start.steps] self.assertIn('VmLifecycleState', child_names) self.assertIn('GcpSshPermissions', child_names) self.assertIn('GceFirewallAllowsSsh', child_names) self.assertIn('SshInBrowserCheck', child_names) class SshStartTest(SshStepTestBase): """Test SshStart.""" def setUp(self): super().setUp() self.mock_iam_get_project_policy = self.enterContext( mock.patch('gcpdiag.queries.iam.get_project_policy')) def test_ssh_start_runs(self): step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_crm_get_project.assert_called_once() self.mock_ensure_instance_resolved.assert_called_once() self.mock_gce_get_instance.assert_called_once() def test_ssh_start_principal_handling(self): self.operator.parameters[flags.PRINCIPAL] = 'test@example.com' self.mock_instance.is_public_machine.return_value = False mock_policy = mock.Mock() mock_policy.get_member_type.return_value = 'user' self.mock_iam_get_project_policy.return_value = mock_policy step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.operator.parameters[flags.PRINCIPAL], 'user:test@example.com') self.mock_interface.info.assert_any_call( 'GCP permissions related to SSH will be verified for:' ' user:test@example.com', step_type='INFO') def test_ssh_start_iap_proxy(self): self.operator.parameters[flags.PROXY] = ssh.IAP step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.operator.parameters[flags.SRC_IP], gce_runbook.constants.IAP_FW_VIP) self.mock_interface.info.assert_any_call( 'Source IP to be used for SSH connectivity test: ' '35.235.240.0/20', step_type='INFO') def test_ssh_start_instance_not_found(self): self.mock_ensure_instance_resolved.side_effect = ( runbook_exceptions.FailedStepError('instance not found')) step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_ssh_start_public_vm_no_proxy(self): self.mock_instance.is_public_machine.return_value = True step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual( self.operator.parameters[flags.SRC_IP], gce_runbook.constants.UNSPECIFIED_ADDRESS, ) self.mock_interface.info.assert_any_call( 'No proxy specified. Setting source IP range to: 0.0.0.0/0', step_type='INFO', ) def test_ssh_start_jumphost_proxy(self): self.operator.parameters[flags.PROXY] = ssh.JUMPHOST self.operator.parameters[flags.SRC_IP] = '10.0.0.1' step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_any_call( 'Source IP to be used for SSH connectivity test: 10.0.0.1', step_type='INFO', ) def test_ssh_start_oslogin_message(self): self.operator.parameters[ssh.ACCESS_METHOD] = ssh.OSLOGIN step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_any_call( 'Access method to investigate: OS login' ' https://cloud.google.com/compute/docs/oslogin', step_type='INFO') def test_ssh_start_ssh_key_in_metadata_message(self): self.operator.parameters[ssh.ACCESS_METHOD] = ssh.SSH_KEY_IN_METADATA step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_any_call( 'Access method to investigate: SSH keys in metadata ' 'https://cloud.google.com/compute/docs/instances/access-overview#ssh-access', step_type='INFO') def test_ssh_start_gcloud_client_message(self): self.operator.parameters[ssh.CLIENT] = ssh.GCLOUD step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_any_call( 'Investigating components required to use gcloud compute ssh', step_type='INFO', ) def test_ssh_start_oslogin_2fa_message(self): self.operator.parameters[ssh.MFA] = ssh.OSLOGIN_2FA step = ssh.SshStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_any_call( 'Multifactor authentication to investigate: OS Login 2FA ' 'https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#byb', step_type='INFO', ) class VmGuestOsTypeTest(SshStepTestBase): """Test VmGuestOsType.""" def setUp(self): super().setUp() self.mock_linux_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.ssh.LinuxGuestOsChecks', autospec=True)) self.mock_windows_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.ssh.WindowsGuestOsChecks', autospec=True)) self.mock_add_child = self.enterContext( mock.patch.object(ssh.VmGuestOsType, 'add_child')) def test_linux_os(self): self.mock_instance.is_windows_machine.return_value = False step = ssh.VmGuestOsType() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_add_child.assert_called_once() self.assertEqual( self.mock_add_child.call_args[0][0].__class__.__name__, 'LinuxGuestOsChecks', ) def test_windows_os(self): self.mock_instance.is_windows_machine.return_value = True step = ssh.VmGuestOsType() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_add_child.assert_called_once() self.assertEqual( self.mock_add_child.call_args[0][0].__class__.__name__, 'WindowsGuestOsChecks', ) def test_instance_not_found(self): self.mock_ensure_instance_resolved.side_effect = ( runbook_exceptions.FailedStepError('instance not found')) step = ssh.VmGuestOsType() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() self.mock_add_child.assert_not_called() class SshEndTest(SshStepTestBase): """Test SshEnd.""" def setUp(self): super().setUp() self.mock_op_prompt = self.enterContext( mock.patch('gcpdiag.runbook.op.prompt')) self.enterContext(mock.patch('gcpdiag.config.get', return_value=True)) # INTERACTIVE_MODE def test_ssh_end_no_interactive(self): self.enterContext(mock.patch('gcpdiag.config.get', return_value=False)) self.mock_op_prompt.return_value = op.NO step = ssh.SshEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_prompt.assert_called_once() self.mock_interface.info.assert_called_once_with(message=op.END_MESSAGE, step_type='INFO') def test_ssh_end_yes_interactive(self): self.mock_op_prompt.return_value = op.YES step = ssh.SshEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.info.assert_not_called() class SshInBrowserCheckTest(SshStepTestBase): """Test SshInBrowserCheck.""" def setUp(self): super().setUp() self.mock_org_policy_check = self.enterContext( mock.patch('gcpdiag.runbook.crm.generalized_steps.OrgPolicyCheck', autospec=True)) self.mock_add_child = self.enterContext( mock.patch.object(ssh.SshInBrowserCheck, 'add_child')) def test_ssh_in_browser_check(self): step = ssh.SshInBrowserCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_add_child.assert_called_once() self.assertEqual(self.mock_add_child.call_args[0][0].__class__.__name__, 'OrgPolicyCheck') self.assertEqual(self.mock_add_child.call_args[0][0].constraint, 'constraints/compute.disableSshInBrowser') class GcpSshPermissionsTest(SshStepTestBase): """Test GcpSshPermissions.""" def setUp(self): super().setUp() self.mock_iam_policy_check = self.enterContext( mock.patch('gcpdiag.runbook.iam.generalized_steps.IamPolicyCheck')) self.mock_iam_policy_check.side_effect = mock.MagicMock self.mock_os_login_status_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.ssh.OsLoginStatusCheck', autospec=True)) self.mock_add_child = self.enterContext( mock.patch.object(ssh.GcpSshPermissions, 'add_child')) def test_base_permissions_checked(self): step = ssh.GcpSshPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_add_child.call_args_list[0][0][0].template, 'gcpdiag.runbook.gce::permissions::instances_get') self.assertEqual( self.mock_add_child.call_args_list[1][0][0].__class__.__name__, 'OsLoginStatusCheck') def test_iap_permissions_checked(self): self.operator.parameters[flags.PROXY] = ssh.IAP step = ssh.GcpSshPermissions() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_add_child.call_args_list[-1][0][0].template, 'gcpdiag.runbook.gce::permissions::iap_role') def test_permissions_ssh_in_browser(self): """Cover line 353: Console view permission for browser client.""" self.operator.parameters[ssh.CLIENT] = ssh.SSH_IN_BROWSER with op.operator_context(self.operator): step = ssh.GcpSshPermissions() self.operator.set_step(step) step.execute() self.assertEqual( self.mock_add_child.call_args_list[0][0][0].template, 'gcpdiag.runbook.gce::permissions::console_view_permission') class OsLoginStatusCheckTest(SshStepTestBase): """Test OsLoginStatusCheck.""" def setUp(self): super().setUp() self.mock_vm_metadata_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.generalized_steps.VmMetadataCheck')) self.mock_vm_metadata_check.side_effect = mock.MagicMock self.mock_iam_policy_check = self.enterContext( mock.patch('gcpdiag.runbook.iam.generalized_steps.IamPolicyCheck')) self.mock_iam_policy_check.side_effect = mock.MagicMock self.mock_posix_user_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck', autospec=True)) self.mock_duplicate_keys_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.ssh.VmDuplicateSshKeysCheck', autospec=True)) self.mock_add_child = self.enterContext( mock.patch.object(ssh.OsLoginStatusCheck, 'add_child')) def test_os_login_path(self): self.operator.parameters[ssh.ACCESS_METHOD] = ssh.OSLOGIN step = ssh.OsLoginStatusCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_add_child.call_count, 3) templates = [ getattr(call[0][0], 'template', '') for call in self.mock_add_child.call_args_list ] self.assertIn('vm_metadata::os_login_enabled', templates) self.assertIn('gcpdiag.runbook.gce::permissions::has_os_login', templates) self.assertIn('gcpdiag.runbook.gce::permissions::sa_user_role', templates) def test_ssh_key_in_metadata_path(self): """Verify metadata based SSH path.""" self.operator.parameters[ssh.ACCESS_METHOD] = ssh.SSH_KEY_IN_METADATA step = ssh.OsLoginStatusCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_add_child.call_count, 4) self.assertEqual(self.mock_add_child.call_args_list[0][0][0].template, 'gcpdiag.runbook.gce::permissions::can_set_metadata') self.assertEqual(self.mock_add_child.call_args_list[1][0][0].template, 'vm_metadata::no_os_login') self.assertEqual( self.mock_add_child.call_args_list[2][0][0].__class__.__name__, 'PosixUserHasValidSshKeyCheck') self.assertEqual( self.mock_add_child.call_args_list[3][0][0].__class__.__name__, 'VmDuplicateSshKeysCheck') class PosixUserHasValidSshKeyCheckTest(SshStepTestBase): """Test PosixUserHasValidSshKeyCheck.""" def setUp(self): super().setUp() self.mock_user_has_valid_ssh_key = self.enterContext( mock.patch('gcpdiag.runbook.gce.util.user_has_valid_ssh_key')) self.operator.parameters[flags.POSIX_USER] = 'testuser' def test_valid_key_present(self): self.mock_instance.get_metadata.return_value = ( 'testuser:ssh-rsa AAA... testuser@host') self.mock_user_has_valid_ssh_key.return_value = True step = ssh.PosixUserHasValidSshKeyCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_no_valid_key(self): self.mock_instance.get_metadata.return_value = ( 'otheruser:ssh-rsa BBB... otheruser@host') self.mock_user_has_valid_ssh_key.return_value = False step = ssh.PosixUserHasValidSshKeyCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() class VmDuplicateSshKeysCheckTest(SshStepTestBase): """Test VmDuplicateSshKeysCheck.""" def test_no_ssh_keys(self): self.mock_instance.get_metadata.return_value = '' step = ssh.VmDuplicateSshKeysCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_duplicate_keys(self): ssh_keys = ('user1:ssh-rsa SAMEKEY... user1@host\n' 'user2:ssh-rsa BBB... user2@host\n' 'user3:ssh-rsa SAMEKEY... user3@host') self.mock_instance.get_metadata.return_value = ssh_keys step = ssh.VmDuplicateSshKeysCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_no_duplicate_keys(self): ssh_keys = ('user1:ssh-rsa KEY1... user1@host\n' 'ssh-rsa KEY2... user2@host\n\n' 'user3:ssh-rsa KEY3... user3@host') self.mock_instance.get_metadata.return_value = ssh_keys step = ssh.VmDuplicateSshKeysCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() def test_duplicate_keys_detection(self): """Cover duplicate blobs even with different prefixes/spacing.""" ssh_keys = ( 'user1:ssh-rsa AAA... user1@host\n' 'ssh-rsa AAA... user2@host\n' # Duplicate blob ' \n' # Empty line 'user3: ssh-rsa BBB... user3@host\n' # Space after colon ) self.mock_instance.get_metadata.return_value = ssh_keys with op.operator_context(self.operator): step = ssh.VmDuplicateSshKeysCheck() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertIn('AAA...', self.mock_interface.add_failed.call_args[1]['reason']) class GceFirewallAllowsSshTest(SshStepTestBase): """Test GceFirewallAllowsSsh.""" def setUp(self): super().setUp() self.mock_vpc_connectivity_check = self.enterContext( mock.patch( 'gcpdiag.runbook.gce.generalized_steps.GceVpcConnectivityCheck', autospec=True)) self.mock_add_child = self.enterContext( mock.patch.object(ssh.GceFirewallAllowsSsh, 'add_child')) def test_iap_firewall_check(self): self.operator.parameters[flags.PROXY] = ssh.IAP self.operator.parameters[flags.SRC_IP] = gce_runbook.constants.IAP_FW_VIP step = ssh.GceFirewallAllowsSsh() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_add_child.assert_called_once() self.assertEqual( self.mock_add_child.call_args[0][0].template, 'vpc_connectivity::tti_ingress', ) def test_public_vm_firewall_check(self): self.mock_instance.is_public_machine.return_value = True self.operator.parameters[flags.SRC_IP] = ( gce_runbook.constants.UNSPECIFIED_ADDRESS) step = ssh.GceFirewallAllowsSsh() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_add_child.assert_called_once() self.assertEqual( self.mock_add_child.call_args[0][0].template, 'vpc_connectivity::default_ingress', ) def test_custom_ip_firewall_check(self): """Verify custom source IP branch.""" self.operator.parameters[flags.SRC_IP] = '10.0.0.1' self.operator.parameters[flags.PROXY] = None step = ssh.GceFirewallAllowsSsh() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_add_child.assert_called_once() self.assertEqual(self.mock_add_child.call_args[0][0].template, 'vpc_connectivity::default_ingress') class VmPerformanceChecksTest(SshStepTestBase): """Test VmPerformanceChecks.""" def setUp(self): super().setUp() self.mock_hum = self.enterContext( mock.patch( 'gcpdiag.runbook.gce.generalized_steps.HighVmMemoryUtilization')) self.mock_hud = self.enterContext( mock.patch( 'gcpdiag.runbook.gce.generalized_steps.HighVmDiskUtilization')) self.mock_huc = self.enterContext( mock.patch( 'gcpdiag.runbook.gce.generalized_steps.HighVmCpuUtilization')) self.mock_add_child = self.enterContext( mock.patch.object(ssh.VmPerformanceChecks, 'add_child')) def test_performance_checks_added(self): mem = self.mock_hum.return_value disk = self.mock_hud.return_value cpu = self.mock_huc.return_value step = ssh.VmPerformanceChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_add_child.assert_has_calls( [mock.call(child=mem), mock.call(child=disk), mock.call(child=cpu)]) class LinuxGuestOsChecksTest(SshStepTestBase): """Test LinuxGuestOsChecks.""" def setUp(self): super().setUp() self.mock_vm_serial_logs_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.generalized_steps.VmSerialLogsCheck')) self.mock_vm_serial_logs_check.side_effect = mock.MagicMock self.mock_add_child = self.enterContext( mock.patch.object(ssh.LinuxGuestOsChecks, 'add_child')) def test_linux_checks_added(self): self.mock_vm_serial_logs_check.side_effect = [ mock.MagicMock(), mock.MagicMock(), mock.MagicMock() ] step = ssh.LinuxGuestOsChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_add_child.call_count, 3) self.assertEqual(self.mock_add_child.call_args_list[0].args[0].template, 'vm_serial_log::kernel_panic') self.assertEqual(self.mock_add_child.call_args_list[1].args[0].template, 'vm_serial_log::sshd') self.assertEqual(self.mock_add_child.call_args_list[2].args[0].template, 'vm_serial_log::sshguard') class WindowsGuestOsChecksTest(SshStepTestBase): """Test WindowsGuestOsChecks.""" def setUp(self): super().setUp() self.mock_vm_metadata_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.generalized_steps.VmMetadataCheck', autospec=True)) self.mock_vm_serial_logs_check = self.enterContext( mock.patch('gcpdiag.runbook.gce.generalized_steps.VmSerialLogsCheck', autospec=True)) self.mock_human_task = self.enterContext( mock.patch('gcpdiag.runbook.gcp.generalized_steps.HumanTask', autospec=True)) self.mock_add_child = self.enterContext( mock.patch.object(ssh.WindowsGuestOsChecks, 'add_child')) def test_windows_checks_added(self): step = ssh.WindowsGuestOsChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_add_child.call_count, 3) self.assertEqual(self.mock_add_child.call_args_list[0].args[0].template, 'vm_metadata::windows_ssh_md') self.assertEqual(self.mock_add_child.call_args_list[1].args[0].template, 'vm_serial_log::windows_bootup') self.assertEqual( self.mock_add_child.call_args_list[2].args[0].__class__.__name__, 'HumanTask') def test_windows_human_task_added(self): self.mock_add_child = self.enterContext( mock.patch.object(ssh.WindowsGuestOsChecks, 'add_child')) with op.operator_context(self.operator): step = ssh.WindowsGuestOsChecks() self.operator.set_step(step) step.execute() self.assertEqual( self.mock_add_child.call_args_list[2].args[0].__class__.__name__, 'HumanTask') class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gce_runbook runbook_name = 'gce/ssh' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gce-faultyssh-runbook', 'instance_name': 'faulty-linux-ssh', 'zone': 'europe-west2-a', 'principal': 'user:cannotssh@example.com', 'proxy': 'iap', 'access_method': 'oslogin', 'start_time': '2025-01-23 23:30:39.144959+00:00', 'end_time': '2025-01-23 13:30:39.144959+00:00' }, { 'project_id': 'gcpdiag-gce-faultyssh-runbook', 'instance_name': 'valid-linux-ssh', 'zone': 'europe-west2-a', 'principal': 'serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com', 'proxy': 'iap', 'access_method': 'oslogin', 'start_time': '2025-01-23 23:30:39.144959+00:00', 'end_time': '2025-01-23 13:30:39.144959+00:00' }, { 'project_id': 'gcpdiag-gce-faultyssh-runbook', 'instance_name': 'faulty-windows-ssh', 'zone': 'europe-west2-a', 'principal': 'user:cannot@example.com', 'src_ip': '0.0.0.0', 'proxy': 'iap', 'access_method': 'oslogin', 'posix_user': 'no_user', 'start_time': '2025-01-23 23:30:39.144959+00:00', 'end_time': '2025-01-23 13:30:39.144959+00:00' }] ================================================ FILE: gcpdiag/runbook/gce/templates/generics.jinja ================================================ {% block gce_serial_logs_check_failure_reason %} Detected anomalies in serial logs for GCE Instance indicative of issues affecting the guest or application functionality. {% endblock gce_serial_logs_check_failure_reason %} {% block gce_serial_logs_check_failure_remediation %} Consult the following guides to connect to the VM and diagnose the issue: Linux: Windows: {% endblock gce_serial_logs_check_failure_remediation %} {% block gce_serial_logs_check_success_reason %} Serial logs for GCE Instance confirm the VM is operating within normal parameters, with no anomalies detected. {% endblock gce_serial_logs_check_success_reason %} {% block gce_serial_logs_check_uncertain_reason %} Unable to find sufficient serial log data for GCE Instance for a conclusive analysis. This may limit the ability to detect specific issues. {% endblock gce_serial_logs_check_uncertain_reason %} {% block gce_serial_logs_check_uncertain_remediation %} Enable more detailed logging if it is disabled, or start the VM if it is shut down. Review the following troubleshooting documentation for guidance on common issues with serial logs: {% endblock gce_serial_logs_check_uncertain_remediation %} {% block gce_serial_logs_check_skipped_reason %} Skipped serial log analysis for GCE Instance due to the absence of logs. This may occur if the VM has not generated any logs, logging is disabled, or the VM is shut down. {% endblock gce_serial_logs_check_skipped_reason%} ================================================ FILE: gcpdiag/runbook/gce/templates/instance_property.jinja ================================================ {% block default_success_reason %} Instance {{instance_name}} property '{property_path}' with value '{actual_value}' meets condition: {operator} '{expected_value}'. {% endblock %} {% block default_failure_reason %} Instance {instance_name} property '{property_path}' with value '{actual_value}' does not meet condition: {operator} '{expected_value}'. {% endblock %} {% block default_failure_remediation %} Ensure that property '{property_path}' for instance {instance_name} is configured to meet the condition: {operator} '{expected_value}'. {% endblock %} ================================================ FILE: gcpdiag/runbook/gce/templates/mig_autoscaling.jinja ================================================ {% block policy_check_skipped_reason %} MIG could not be determined or found. {% endblock %} {% block policy_check_success_reason %} MIG {mig_name} property '{property_path}' with value '{actual_value}' meets condition: {operator} '{expected_value}'. {% endblock %} {% block policy_check_failure_reason %} MIG {mig_name} property '{property_path}' with value '{actual_value}' does not meet condition: {operator} '{expected_value}'. {% endblock %} {% block policy_check_failure_remediation %} Review the autoscaling policy for MIG {mig_name} and ensure it meets the required configuration. See: {% endblock %} ================================================ FILE: gcpdiag/runbook/gce/templates/permissions.jinja ================================================ {% block instances_get_step_name %} Verify that the {principal} has "compute.instance.get" permission. {% endblock instances_get_step_name %} {% block instances_get_failure_reason %} {principal} does not have the permissions needed to manage instances. The following permissions are required: {permissions_or_roles}. {% endblock instances_get_failure_reason %} {% block instances_get_failure_remediation %} Ensure {principal} is granted a role encompassing the necessary permissions: - Permissions needed: {missing_permissions_or_roles} For guidance on assigning instance admin roles, consult: {% endblock instances_get_failure_remediation %} {% block instances_get_success_reason %} {principal} possesses the appropriate {permissions_or_roles} to fetch instance details. {% endblock instances_get_success_reason %} {% block has_os_login_step_name %} Verify whether {principal} has at least one valid OS login role. {% endblock has_os_login_step_name %} {% block has_os_login_success_reason %} "{principal}" possesses at least one of the required OS Login roles: {present_permissions_or_roles}. {% endblock has_os_login_success_reason %} {% block has_os_login_failure_reason %} "{principal}" is missing at least one of the required OS Login roles: {missing_permissions_or_roles}. {% endblock has_os_login_failure_reason %} {% block has_os_login_failure_remediation %} Assign the principal one of the roles required for OS Login privileges. Consult the following resources for more information: {% endblock has_os_login_failure_remediation %} {% block sa_user_role_step_name %} Verify that the {principal} has "roles/iam.serviceAccountUser" role. {% endblock sa_user_role_step_name %} {% block sa_user_role_failure_reason %} "{principal}" lacks the "{missing_permissions_or_roles}" role or a custom role with the necessary permissions to impersonate the attached service account. {% endblock sa_user_role_failure_reason %} {% block sa_user_role_failure_remediation %} Assign the "roles/iam.serviceAccountUser" role to "{principal}". Consult the following guidelines: {% endblock sa_user_role_failure_remediation %} {% block sa_user_role_success_reason %} "{principal}" has the "{present_permissions_or_roles}" required to impersonate the attached service account. {% endblock sa_user_role_success_reason %} {% block iap_role_step_name %} Verify that the {principal} has "roles/iap.tunnelResourceAccessor" role. {% endblock iap_role_step_name %} {% block iap_role_failure_reason %} {principal} does not have the "{missing_permissions_or_roles}" role necessary to Tunnel through IAP for access. {% endblock iap_role_failure_reason %} {% block iap_role_failure_remediation %} Ensure that "{principal}" is assigned the "roles/iap.tunnelResourceAccessor" role to enable the required access. For detailed guidance, refer to the following resources: - [Setting up OS Login](https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users) - [Managing access to service accounts](https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role) {% endblock iap_role_failure_remediation %} {% block iap_role_success_reason %} "{principal}" has the requisite "{present_permissions_or_roles}" role to tunnel through IAP. {% endblock iap_role_success_reason %} {% block console_view_permission_step_name %} Verify whether the {principal} has the "compute.projects.get" permission required to view the console. {% endblock console_view_permission_step_name %} {% block console_view_permission_failure_reason %} The "compute.projects.get" permission is required to access GCE Instances via the Google Cloud console, including SSH-in-browser functionality. {% endblock console_view_permission_failure_reason %} {% block console_view_permission_failure_remediation %} Refer to the [permissions guide](https://cloud.google.com/compute/docs/access/iam#console_permission) for detailed steps on granting the necessary permissions to enable access to Compute Engine resources. {% endblock console_view_permission_failure_remediation %} {% block console_view_permission_success_reason %} {principal} has the necessary {present_permissions_or_roles}, including the "compute.projects.get" permission, required to access and use the Google Cloud. {% endblock console_view_permission_success_reason %} {% block can_set_metadata_step_name %} Verify that the {principal} has permission to set instance metadata or common project metadata. {% endblock can_set_metadata_step_name %} {% block can_set_metadata_success_reason %} {principal} is authorized to update instance or project metadata, including SSH keys. This enables gcloud and cloud console to update temporary SSH access to the VM or configure personal SSH keys if needed. {% endblock can_set_metadata_success_reason %} {% block can_set_metadata_failure_reason %} {principal} lacks the necessary permissions to modify metadata, essential for managing SSH keys. Missing permissions include one of the following: {{" or ".join(metadata_permissions)}}. {% endblock can_set_metadata_failure_reason %} {% block can_set_metadata_failure_remediation %} Grant the required permissions for managing SSH keys within the VM's metadata by following these guides: - For project-level SSH key management, assign roles that include the 'compute.projects.setCommonInstanceMetadata' permission. Consult the following documentation for details: - For instance-level SSH key management, ensure roles include the 'compute.instances.setMetadata' permission. Consult the following documentation for step-by-step instructions: Granting these permissions enables proper management of SSH keys, which is necessary for SSH access to the VM, especially when using gcloud or the Cloud Console. {% endblock can_set_metadata_failure_remediation %} ================================================ FILE: gcpdiag/runbook/gce/templates/vm_attributes.jinja ================================================ {% block service_account_exists_success_reason %} The Ops Agent on instance {full_resource_path} is configured with service account {sa} for exporting logs and metrics. {% endblock service_account_exists_success_reason %} {% block service_account_exists_failure_reason %} The Ops Agent on instance {full_resource_path} is not configured with a service account for exporting logs and metrics. {% endblock service_account_exists_failure_reason %} {% block service_account_exists_failure_remediation %} Attach an active service account to the GCE Instance {full_resource_path}. Consult the following documentation for guidance: - Attaching or changing a service account: - Authorizing the Ops Agent: {% endblock service_account_exists_failure_remediation %} {% block service_account_exists_step_name %} Verify Service Account exists {% endblock service_account_exists_step_name %} {% block access_scope_step_name %} Verify GCE Instance has sufficient access scope {% endblock access_scope_step_name %} {% block access_scope_success_reason %} GCE instance {full_resource_path} has at least one of the required scope: {present_access_scopes} {% endblock access_scope_success_reason %} {% block access_scope_failure_reason %} GCE Instance {full_resource_path} doesn't have any of the required access scopes: {required_access_scope} {% endblock access_scope_failure_reason %} {% block access_scope_failure_remediation %} Access scopes are the legacy method of specifying authorization for your VM instance. They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries. Access scopes don't apply for calls made using gRPC. Update `{full_resource_path}` to enable at least one of the following access scopes: {required_access_scope} Consult the following documentation for guidance on changing the service account and scopes: {% endblock access_scope_failure_remediation %} {% block running_step_name %} Verify GCE Instance is in a "RUNNING" state. {% endblock running_step_name %} {% block running_success_reason %} The GCE Instance {full_resource_path} is in {status} state. {% endblock running_success_reason %} {% block running_skipped_reason %} Could not validate VM lifecycle for GCE Instance {full_resource_path}. {% endblock running_skipped_reason %} {% block running_failure_reason %} The GCE Instance {full_resource_path} is in {status} state. {% endblock running_failure_reason %} {% block running_failure_remediation %} Restart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING. Consult the following documentation: - Restarting a compute instance: - Troubleshooting VM startup issues: {% endblock running_failure_remediation %} {% block terminated_vm_running_step_name %} Verify that the terminated VM is currently running {% endblock terminated_vm_running_step_name %} {% block terminated_vm_running_success_reason %} The GCE Instance {full_resource_path} is currently running. {% endblock terminated_vm_running_success_reason %} {% block terminated_vm_running_failure_reason %} The GCE Instance {full_resource_path} is in the {status} state, not RUNNING. Start the instance if required. {% endblock terminated_vm_running_failure_reason %} {% block terminated_vm_running_failure_remediation %} Start the GCE Instance {full_resource_path} to transition it from the {status} state to the RUNNING state. Consult the following documentation for assistance: - Restarting a compute instance: - Troubleshooting VM startup issues: {% endblock terminated_vm_running_failure_remediation %} ================================================ FILE: gcpdiag/runbook/gce/templates/vm_creation.jinja ================================================ {% block logs_failure_reason %} {error_message} {% endblock logs_failure_reason %} {% block logs_failure_remediation %} The VM creation process failed because the VM `{instance_name}` already exists in zone `{zone}` within project `{project_id}`. Delete the existing VM or choose a different name for the new VM. {% endblock logs_failure_remediation %} {% block logs_failure_reason_a1 %} {error_message} {% endblock logs_failure_reason_a1 %} {% block logs_failure_remediation_a1 %} The VM creation process failed because the {metric_name} quota limit was exceeded. The current {limit_name} limit is {limit}. Increase the relevant quota by following the guidance provided in the documentation: Alternatively, use these steps: - Navigate to the 'Quotas & System Limits' page in the Google Cloud Console: - Locate the quota metric ({metric_name}) and region associated with the failure. - Request a quota increase for the identified metric and region. {% endblock logs_failure_remediation_a1 %} {% block logs_failure_reason_a2 %} {error_message} {% endblock logs_failure_reason_a2 %} {% block logs_failure_remediation_a2 %} Grant the user or service account attempting the VM creation the required permissions to create a VM instance. Consult the following guide for details on required permissions: {% endblock logs_failure_remediation_a2 %} ================================================ FILE: gcpdiag/runbook/gce/templates/vm_metadata.jinja ================================================ {% block default_failure_reason %} GCE Instance metadata `{metadata_key}` doesn't have the expected value: {expected_value} of type {expected_value_type} {% endblock default_failure_reason %} {% block default_failure_remediation %} Update the metadata `{metadata_key}` to have the expected value {expected_value} Follow guide [1] one to update the a metadata value. [1] {% endblock default_failure_remediation %} {% block default_success_reason %} GCE Instance metadata `{metadata_key}` has the expected value: {expected_value} of type {expected_value_type} {% endblock default_success_reason %} {% block windows_ssh_md_failure_reason %} SSH metadata `enable-windows-ssh` is not configured for this Windows VM, preventing SSH access. {% endblock windows_ssh_md_failure_reason %} {% block windows_ssh_md_failure_remediation %} To enable SSH access for your Windows VM, you must configure SSH metadata settings appropriately. Please consult our guide on enabling SSH for Windows instances for step-by-step instructions: {% endblock windows_ssh_md_failure_remediation %} {% block windows_ssh_md_success_reason %} SSH metadata `enable-windows-ssh` is correctly set for this Windows VM, indicating readiness for SSH connections if other factors permit. {% endblock windows_ssh_md_success_reason %} {% block no_os_login_step_name %} Verify if OS Login is not activated for the VM {% endblock no_os_login_step_name %} {% block no_os_login_failure_reason %} OS Login is currently enabled on this VM, conflicting with the intended metadata-based SSH Key configuration. {% endblock no_os_login_failure_reason %} {% block no_os_login_failure_remediation %} Activating OS Login alters the VM's SSH access settings, removing the `authorized_keys` file and ceasing to accept SSH keys stored in project or instance metadata. To maintain the ability to use metadata-based SSH keys, you must deactivate OS Login by setting `enable-oslogin` to `False` in your VM's metadata. Decide between utilizing OS Login or metadata-based SSH keys based on your access requirements. For more information on managing OS Login settings, visit: Note: The activation of OS Login disables google managed metadata-based SSH key authentication. However, if you have a custom SSH configuration which doesn't depend on metadata keys. Should be unaffected by this configuration. {% endblock no_os_login_failure_remediation %} {% block no_os_login_success_reason %} OS Login is correctly disabled, aligning with the preference for metadata-based SSH Key authentication. The VM's `enable-oslogin` flag is not set, ensuring compatibility with metadata-based SSH access. {% endblock no_os_login_success_reason %} {% block os_login_enabled_step_name %} Verify that OS Login is set to `True` for the VM. {% endblock os_login_enabled_step_name %} {% block os_login_enabled_failure_reason %} OS Login is disabled {% endblock os_login_enabled_failure_reason %} {% block os_login_enabled_failure_remediation %} To utilize OS Login, enable it by setting the `enable-oslogin` flag in the VM's metadata to `TRUE`.For detailed instructions on enabling OS Login, refer to: {% endblock os_login_enabled_failure_remediation %} {% block os_login_enabled_success_reason %} OS Login is enabled on this VM. {% endblock os_login_enabled_success_reason %} {% block can_set_metadata_success_reason %} {auth_user} is authorized to update instance or project metadata, including SSH keys. This enables gcloud and cloud console to update temporary SSH access to the VM or configure personal SSH keys if needed. {% endblock can_set_metadata_success_reason %} {% block can_set_metadata_failure_reason %} The current user does not have the necessary permissions to modify metadata, essential for managing SSH keys. Missing permissions include one of the following: {" or ".join(metadata_permissions)}. {% endblock can_set_metadata_failure_reason %} {% block can_set_metadata_failure_remediation %} To grant the required permissions for managing SSH keys within the VM's metadata, follow these guides: - For project-level SSH key management, assign roles that include the 'compute.projects.setCommonInstanceMetadata' permission. More details can be found here: - For instance-level SSH key management, ensure roles include 'compute.instances.setMetadata' permission. Step-by-step instructions are available here: Adjusting these permissions will allow for the proper management of SSH keys and, by extension, SSH access to the VM especially if using gcloud / cloud console. {% endblock can_set_metadata_failure_remediation %} {% block valid_ssh_key_success_reason %} The local user "{local_user}" is confirmed to have at least one valid SSH key configured on the GCE Instance: "{full_resource_path}". {% endblock valid_ssh_key_success_reason %} {% block valid_ssh_key_failure_reason %} The local user "{local_user}" lacks at least one valid SSH key for VM: "{full_resource_path}". {% endblock valid_ssh_key_failure_reason %} {% block valid_ssh_key_failure_remediation %} Ensure "{local_user}" has a valid SSH key by following the guide: {% endblock valid_ssh_key_failure_remediation %} {% block duplicate_ssh_keys_failure_reason %} VM {instance_name} has {count} duplicate SSH key(s) in its metadata: {keys} {% endblock duplicate_ssh_keys_failure_reason %} {% block duplicate_ssh_keys_failure_remediation %} Remove duplicate SSH keys from the instance or project metadata to avoid potential SSH issues and improve security hygiene. {% endblock duplicate_ssh_keys_failure_remediation %} {% block duplicate_ssh_keys_success_reason %} No duplicate SSH keys were found in metadata for VM {instance_name}. {% endblock duplicate_ssh_keys_success_reason %} ================================================ FILE: gcpdiag/runbook/gce/templates/vm_ops.jinja ================================================ {% block opsagent_installed_success_reason %} GCE Instance "{full_resource_path}" has {subagent} agent installed and is exporting data. {% endblock opsagent_installed_success_reason %} {% block opsagent_installed_failure_reason %} GCE Instance "{full_resource_path}" does not have {subagent} agent installed and is not exporting data. {% endblock opsagent_installed_failure_reason %} {% block opsagent_installed_failure_remediation %} Install the {subagent} agent on GCE Instance "{full_resource_path}". Consult the following documentation for troubleshooting assistance: {% endblock opsagent_installed_failure_remediation %} ================================================ FILE: gcpdiag/runbook/gce/templates/vm_performance.jinja ================================================ {% block high_cpu_utilization_step_name %} Verify VM CPU utilization is within optimal levels. {% endblock high_cpu_utilization_step_name %} {% block high_cpu_utilization_failure_reason %} CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. {% endblock high_cpu_utilization_failure_reason %} {% block high_cpu_utilization_failure_remediation %} Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: {% endblock high_cpu_utilization_failure_remediation %} {% block high_cpu_utilization_success_reason %} The Compute Engine VM {full_resource_path}, has CPU utilization within the optimal range. {% endblock high_cpu_utilization_success_reason %} {% block high_disk_utilization_failure_reason %} Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. {% endblock high_disk_utilization_failure_reason %} {% block high_disk_utilization_skipped_reason %} No Google Cloud Ops Agent installed on the VM, making it difficult to retrieve disk utilization data via metrics. Falling back to checking for filesystem utilization-related messages in the serial logs. {% endblock high_disk_utilization_skipped_reason %} {% block high_disk_utilization_failure_remediation %} To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: {% endblock high_disk_utilization_failure_remediation %} {% block high_disk_utilization_step_name %} Verify VM's boot disk space utilization is within optimal levels. {% endblock high_disk_utilization_step_name %} {% block high_disk_utilization_success_reason %} The boot disk space usage for the Compute Engine VM {full_resource_path}, is within optimal levels. {% endblock high_disk_utilization_success_reason %} {% block high_memory_utilization_skipped_reason %} Serial logs are not available for examination. {% endblock high_memory_utilization_skipped_reason %} {% block high_memory_utilization_failure_reason %} Memory utilization on this VM has reached levels that may compromise its VM application performance. {% endblock high_memory_utilization_failure_reason %} {% block high_memory_utilization_failure_remediation %} Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: {% endblock high_memory_utilization_failure_remediation %} {% block high_memory_utilization_success_reason %} Memory utilization on this VM is within optimal range. {% endblock high_memory_utilization_success_reason %} {% block high_memory_usage_logs_skipped_reason %} Serial logs are not available for investigating possible memory issues. {% endblock high_memory_usage_logs_skipped_reason %} {% block high_memory_usage_logs_step_name %} Verify memory related errors in VM serial logs. {% endblock high_memory_usage_logs_step_name %} {% block high_memory_usage_logs_success_reason %} No memory-related errors found in Serial console logs. {% endblock high_memory_usage_logs_success_reason %} {% block high_memory_usage_logs_failure_reason %} High memory utilization error logs have been detected on your VM instance within {start_time} - {end_time}. This can lead to performance issues and instability. {% endblock high_memory_usage_logs_failure_reason %} {% block high_memory_usage_logs_failure_remediation %} 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: {% endblock high_memory_usage_logs_failure_remediation %} {% block high_memory_usage_logs_uncertain_reason %} Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. {% endblock high_memory_usage_logs_uncertain_reason %} {% block high_disk_utilization_error_failure_reason %} Found high disk utilisation errors in Serial console logs. The patterns used: ``` 'No space left on device', 'No usable temporary directory found', 'A stop job is running for Security \.\.\..* Service ', 'disk is at or near capacity' ``` {% endblock high_disk_utilization_error_failure_reason %} {% block high_disk_utilization_error_failure_remediation %} To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure accessibility of the VM. Consult the following guide to increase disk size: {% endblock high_disk_utilization_error_failure_remediation %} {% block high_disk_utilization_error_step_name %} Verify high disk utilization related logs in serial console logs {% endblock high_disk_utilization_error_step_name %} {% block high_disk_utilization_error_success_reason %} No high disk utilisation related errors found in Serial console logs. {% endblock high_disk_utilization_error_success_reason %} {% block high_disk_utilization_error_skipped_reason %} Serial logs are not available for examination. {% endblock high_disk_utilization_error_skipped_reason %} {% block high_disk_utilization_error_uncertain_reason %} Serial console logs were not available for examination. {% endblock high_disk_utilization_error_uncertain_reason %} {% block live_migrations_failure_reason %} Live migrations detected for the VM during mentioned period. {% endblock live_migrations_failure_reason %} {% block live_migrations_failure_remediation %} Simulate the migration (move the VM to another host) using the guidance provided here: Verify if the issue persists after simulation. If it does, contact Google Cloud Platform Support by creating a support case. Note: During live migration, VMs might experience a temporary decrease in performance (disk, CPU, memory, network). See the documentation for details: {% endblock live_migrations_failure_remediation %} {% block live_migrations_step_name %} Verify live migrations for the instance {% endblock live_migrations_step_name %} {% block live_migrations_success_reason %} No live migrations detected for the VM during mentioned period {% endblock live_migrations_success_reason %} {% block live_migrations_skipped_reason %} There are no logs to examine ! {% endblock live_migrations_skipped_reason %} {% block slow_disk_io_step_name %} Verify any slow Disk operations related errors in Serial console logs {% endblock slow_disk_io_step_name %} {% block slow_disk_io_failure_reason %} Possible Disk IO slowness detected. The patterns used: **Linux slow read** ``` r'\d+:\d+:\d+:\d+: timing out command, waited \d+s', r'end_request: I/O error, dev [a-z0-9-]+, sector \d+', r'Buffer I/O error on device [a-z0-9-]+, logical block \d+', r'blocked for more than \d+ seconds', ``` **Linux SCSI commands abort/reset (when operation to PD times out)** ``` r'\d+:\d+:\d+:\d+:\s+\[([a-z0-9-]+)\]\s+(abort|device reset)$', r'\d+:\d+:\d+:\d+:\s+(device reset)$', ``` **Linux Local SSD physical failure on console:** ``` r'kernel: blk_update_request: I/O error, dev [a-z0-9-]+, sector \d+', ``` **Windows** ``` r'The IO operation at logical block address 0x[0-9a-fA-F.]+ for Disk \d+ \(PDO name: \\Device\\.*\) was retried' ``` {% endblock slow_disk_io_failure_reason %} {% block slow_disk_io_failure_remediation %} There can be multiple reasons which can cause Slow Disk IOs: - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight. - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations. - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads, this can also cause CPU or Disk IOPS/throughput Starvation. - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels. To fix this issue: - Please optimize your application workloads. - If needed, please add more resources(CPU, Memory) to the VM. - Please optimize your Disk performance - - If needed, please change your disk type to get better Disk IOPS/throughput limits - {% endblock slow_disk_io_failure_remediation %} {% block slow_disk_io_skipped_reason %} There are no logs to examine ! {% endblock slow_disk_io_skipped_reason %} {% block slow_disk_io_uncertain_reason %} No error messages related to disk latency were found in the serial console logs. This does not rule out disk performance issues. {% endblock slow_disk_io_uncertain_reason %} {% block slow_disk_io_uncertain_remediation %} Check for high disk utilization using the command iostat to further troubleshoot. {% endblock slow_disk_io_uncertain_remediation %} {% block disk_io_usage_check_step_name %} Verify Disk IOPS/Throughput usage is within optimal limits {% endblock disk_io_usage_check_step_name %} {% block disk_io_usage_check_failure_reason %} Disk IOPS/Throughput usage is NOT within optimal limits {% endblock disk_io_usage_check_failure_reason %} {% block disk_io_usage_check_failure_remediation %} There can be multiple reasons which can cause Disk IOPS/Throughput usage to increase: - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs to the disk and cause IO operations to be queued, causing throttling at disk levels. - CPU Starvation - Small instances(with lesser CPUs) may not have enough CPU to serve all I/Os inflight. - Network Throttling - High sent/received network traffic can cause network throttling, that can also impacts disk operations. - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads, this can also cause CPU or Disk IOPS/throughput Starvation. To fix this issue: - Please optimize your application workloads. - If needed, please add more resources(CPU, Memory) to the VM. - Please optimize your Disk performance - - If needed, please change your disk type to get better Disk IOPS/throughput limits - {% endblock disk_io_usage_check_failure_remediation %} {% block disk_health_check_step_name %} Verify instance disks are healthy. {% endblock disk_health_check_step_name %} {% block disk_health_check_success_reason %} Instance disk "{disk_name}" is healthy. {% endblock disk_health_check_success_reason %} {% block disk_health_check_failure_reason %} You might experience slower/poor performance with your disk '{disk_name}' due to an ongoing issue with our Compute Engine or Persistent Disk infrastructure. We're working to resolve this as quickly as possible. {% endblock disk_health_check_failure_reason %} {% block disk_health_check_failure_remediation %} To better understand the situation with your Compute Engine or Persistent Disks, could you please take a look at the Google Cloud Status page: This page provides real-time updates on the health of Google Cloud services. Additionally, it may be helpful to check the Service Health dashboard in your Google Cloud Console for any reported incidents: If you don't find any information about an ongoing issue related to your concern, please don't hesitate to reach out to Google Cloud Support by creating a support case. They'll be happy to investigate further and assist you. {% endblock disk_health_check_failure_remediation %} {% block disk_io_latency_check_step_name %} Verify Instance's Disk Avg IO Latency is within optimal limits. {% endblock disk_io_latency_check_step_name %} {% block disk_io_latency_check_success_reason %} Instance disk "{disk_name}"'s IO latency is within the optimal limits. {% endblock disk_io_latency_check_success_reason %} {% block disk_io_latency_check_failure_reason %} The performance of the disk '{disk_name}' is currently degraded due to high IO latency exceeding optimal thresholds. This may result in slower read/write speeds and overall reduced performance. {% endblock disk_io_latency_check_failure_reason %} {% block disk_io_latency_check_failure_remediation %} Disk I/O latency is the time it takes for a read or write operation to complete on a disk. High disk I/O latency can significantly impact the performance of your applications and workloads running on the instance, leading to slow response times, increased processing time, and overall sluggishness. **Potential Bottlenecks** - Disk Type: To optimize disk performance, ensure your disk type is appropriate for your workload and provides acceptable latency for your system architecture. Choosing the right disk type can significantly impact performance. - Workload: The nature of your workload also influences latency. Workloads with many small, random I/O operations will generally have higher latency than those with sequential I/O **Optimize Disk Usage** - Reduce I/O Operations: Optimize your applications and database queries to minimize the number of disk I/O operations. - Increase I/O Request Size: Larger I/O requests can be more efficient than many small ones. Consider adjusting your application or database settings to increase the I/O request size. - Caching: Implement caching mechanisms to reduce the need to access the disk for frequently used data. Choose the Right Disk Type with lesser IO Latency - You may also look into Optimizing persistent disk performance - Please don't hesitate to reach out to Google Cloud Support if issue is not resolved. {% endblock disk_io_latency_check_failure_remediation %} ================================================ FILE: gcpdiag/runbook/gce/templates/vm_serial_log.jinja ================================================ {% block default_failure_reason %} Anomalies detected in the serial logs which align with the investigated bad patterns {% endblock default_failure_reason %} {% block default_skipped_reason %} There are no logs to examine. {% endblock default_skipped_reason %} {% block default_failure_remediation %} Investigate potential issues via the serial console. If GRUB_TIMEOUT is greater than 0, access the interactive session for more insights. Explore rescue options for inaccessible VMs or review possible guest OS issues. - Interactive Serial Console: - Rescuing VMs: If escalating Guest OS related issues to Google Cloud Support, verify that the issue is in line with Google Cloud Platform's Guest OS support policy - Google Cloud Platform Support Scope: {% endblock default_failure_remediation %} {% block default_success_reason %} The VM's Linux OS shows no signs of anomalies, indicating a *likely* stable operational state. {% endblock default_success_reason %} {% block default_uncertain_reason %} Lack of serial log data prevented a thorough assessment of the VM's operational state. Result is inconclusive {% endblock default_uncertain_reason %} {% block default_uncertain_remediation %} Verify the VM's operational status by reviewing available serial logs. Address any detected guest OS issues using the provided documentation, keeping in mind certain guest OS faults may be beyond Google Cloud Platform's support scope. - Viewing Serial Port Output: - Resolving Kernel Panic: - Google Cloud Platform Support Scope: {% endblock default_uncertain_remediation %} {% block kernel_panic_step_name %} Examine Guest OS if there are any indications of kernel panic. {% endblock kernel_panic_step_name %} {% block kernel_panic_success_reason %} A review of the serial console logs for the GCE instance `{full_resource_path}` from `{start_time}` to `{end_time}` shows no evidence of kernel panic or GRUB issues. The `systemd` application is confirmed to be running. {% endblock kernel_panic_success_reason %} {% block kernel_panic_failure_reason %} Detected kernel panic logs in {full_resource_path} serial logs, which is likely preventing the VM from booting up correctly. {% endblock kernel_panic_failure_reason %} {% block kernel_panic_failure_remediation %} Kernel panics can be caused by different issues within the guest. Address underlying issues causing boot problems to solve the kernel panic: **General Kernel panic Troubleshooting** 1. Consult the Troubleshooting Guide for Kernel Panic Errors: - Kernel panic is commonly caused by file system errors in Linux Guest OS. - Check `/etc/fstab` for incorrect entries that could halt the boot process. - Refer to this guide for resolving [kernel panic issues caused by /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors). 2. Resources for Kernel panic - [Troubleshooting GCE Instance experiencing Kernel Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error) - [Common Red Hat Kernel Panic Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant) - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false) 3. Rescue an instance experiencing kernel panic - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to recover faulty VMs. - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw) 4 Google Cloud Platform Support Scope: [Understand GCP support for kernel-related issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope). {% endblock kernel_panic_failure_remediation %} {% block kernel_panic_uncertain_reason %} No serial logs were found for the VM {full_resource_path}. However, this does not rule out the possibility of a kernel panic. {% endblock kernel_panic_uncertain_reason %} {% block kernel_panic_uncertain_remediation %} Manually [view the most recent serial logs](https://cloud.google.com/compute/docs/troubleshooting/viewing-serial-port-output) to investigate issues with the Guest OS applications. Kernel panics can be caused by different issues within the guest. Address underlying issues causing boot problems to solve the kernel panic: **General Kernel panic Troubleshooting** 1. Consult the Troubleshooting Guide for Kernel Panic Errors: - Kernel panic is commonly caused by file system errors in Linux Guest OS. - Check `/etc/fstab` for incorrect entries that could halt the boot process. - Refer to this guide for resolving [kernel panic issues caused by /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors). 2. Resources for Kernel panic - [Troubleshooting GCE Instance experiencing Kernel Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error) - [Common Red Hat Kernel Panic Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant) - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false) 3. Rescue an instance experiencing kernel panic - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to recover faulty VMs. - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw) 4 Google Cloud Platform Support Scope: [Understand GCP support for kernel-related issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope). {% endblock kernel_panic_uncertain_remediation %} {% block kernel_panic_skipped_reason %} No logs are available to examine. {% endblock kernel_panic_skipped_reason %} {% block sshguard_step_name %} Verify if SSHGuard is installed and blocking SSH connectivity {% endblock sshguard_step_name %} {% block sshguard_failure_reason %} SSHGuard is active and may be blocking IP addresses. Verify if your IP is blocked by SSHGuard on the VM. {% endblock sshguard_failure_reason %} {% block sshguard_failure_remediation %} Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform. Consult the most appropriate team within your organisation to assist with resolution. For guest OS issues and SSHGuard configurations, refer to: - Support Scope: - Out of Scope Support: {% endblock sshguard_failure_remediation %} {% block sshguard_success_reason %} SSHGuard does not appear to be blocking IPs on the VM (if installed on the VM) {% endblock sshguard_success_reason %} {% block sshguard_uncertain_reason %} The retrieved logs do not contain definitive entries, either positive or negative, to make a conclusive assessment. Review the GCE serial logs to determine if SSHGuard is a likely cause. {% endblock sshguard_uncertain_reason %} {% block sshguard_uncertain_remediation %} If SSHGuard or similar application is a concern, Inspect its configuration via the interactive serial console: {% endblock sshguard_uncertain_remediation %} {% block sshguard_skipped_reason %} No logs are available to examine {% endblock sshguard_skipped_reason %} {% block windows_gce_ssh_agent_instructions_message %} Verify if the `google-compute-engine-ssh` agent is installed on the Windows VM. {% endblock windows_gce_ssh_agent_instructions_message %} {% block windows_gce_ssh_agent_step_name %} Verify if the necessary Google guest agents, especially `google-compute-engine-ssh`, are operational on the VM. {% endblock windows_gce_ssh_agent_step_name %} {% block windows_gce_ssh_agent_uncertain_reason %} Uncertain if the `google-compute-engine-ssh` agent is installed on the VM. {% endblock windows_gce_ssh_agent_uncertain_reason %} {% block windows_gce_ssh_agent_uncertain_remediation %} Utilize RDP or a startup script to verify the presence and functionality of the `google-compute-engine-ssh` agent. For instructions on implementing startup scripts, refer to: {% endblock windows_gce_ssh_agent_uncertain_remediation %} {% block windows_gce_ssh_agent_success_reason %} Successfully confirmed the installation of the `google-compute-engine-ssh` agent on the Windows VM. {% endblock windows_gce_ssh_agent_success_reason %} {% block windows_gce_ssh_agent_failure_reason %} Unable to confirm the installation of the `google-compute-engine-ssh` agent on the VM. {% endblock windows_gce_ssh_agent_failure_reason %} {% block windows_gce_ssh_agent_failure_remediation %} Ensure the `google-compute-engine-ssh` agent is correctly installed and configured. Consult the following guide for assistance with agent installation and configuration: {% endblock windows_gce_ssh_agent_failure_remediation %} {% block sshd_step_name %} Verify OpenSSH daemon (sshd) has started from most recent serial logs. {% endblock sshd_step_name %} {% block sshd_failure_reason %} The latest OpenSSH daemon (sshd) logs indicate that the daemon has either failed to start or is misconfigured. This issue is preventing proper SSH connectivity to the VM. {% endblock sshd_failure_reason %} {% block sshd_failure_remediation %} Google Cloud Compute Engine provides regional serial console gateways for troubleshooting Guest OS when SSHD is unavailable. Connect to the VM using the [interactive serial console gateways](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console#connectserialconsole). - Troubleshooting Common Linux `sshd.service` Errors: [Guide for resolving common SSH errors](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#linux_errors) - Knowledge Base for SSHD Service Failures: [Diagnosing SSH service issues](https://cloud.google.com/knowledge/kb/ssh-in-cloud-serial-console-fails-with-warning-message-000004554) Note: Guest OS issues are outside the scope of Google Cloud Platform support: and {% endblock sshd_failure_remediation %} {% block sshd_success_reason %} The latest OpenSSH daemon (sshd) logs indicate that the daemon has started. {% endblock sshd_success_reason %} {% block sshd_uncertain_reason %} The serial logs for Compute Engine VM {full_resource_path} do not contain positive or negative entries to conclusively assess if sshd.service is up and running correctly. {% endblock sshd_uncertain_reason %} {% block sshd_skipped_reason %} No logs are available to examine {% endblock sshd_skipped_reason %} {% block windows_bootup_step_name %} Verify Windows boot up process have successfully completed. {% endblock windows_bootup_step_name %} {% block windows_bootup_success_reason %} Confirmed the presence of the expected guest agent logs in the serial console output in GCE instance {full_resource_path} {% endblock windows_bootup_success_reason %} {% block windows_bootup_failure_reason %} The expected guest agent logs are not present in the serial console output. {% endblock windows_bootup_failure_reason %} {% block windows_bootup_failure_remediation %} Fix boot issues preventing a successful startup. If the Google Compute Engine (GCE) guest agents are installed, the startup process should include the expected guest agent logs. Resources 1. [Troubleshooting Windows instances](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows) 2. [Connecting to the Windows Special Administrative Console (SAC)](https://cloud.google.com/compute/docs/instances/connecting-to-sac) 3. [Installing the Windows GCE guest environment](https://cloud.google.com/compute/docs/images/install-guest-environment#windows:~:text=Engine%20Shutdown%20Scripts-,Windows,-GCEGuestAgent%3A%20GCE%20Agent) 4. [Connecting to Windows instances](https://cloud.google.com/compute/docs/instances/connecting-to-windows) 5. [Connecting to Windows using SSH](https://cloud.google.com/compute/docs/connect/windows-ssh) 6. [Using PowerShell to connect to Windows instances](https://cloud.google.com/compute/docs/instances/windows/connecting-powershell) {% endblock windows_bootup_failure_remediation %} {% block windows_bootup_uncertain_reason %} Lack of serial log data prevented a thorough assessment of the VM's operational state. Result is inconclusive {% endblock windows_bootup_uncertain_reason %} {% block windows_bootup_uncertain_remediation %} Consult the troubleshooting guide to investigate windows boot up issues: [1], [2] Resources: [1] [2] Connecting to the Windows Special Administrative Console (SAC) to troubleshoot boot up issues: Google Cloud Platform Support Scope: {% endblock windows_bootup_uncertain_remediation %} {% block serial_log_start_point_step_name %} Verify all logs available since last boot of the instance {% endblock serial_log_start_point_step_name %} {% block serial_log_start_point_success_reason %} Found all logs since last boot of the VM. {% endblock serial_log_start_point_success_reason %} {% block serial_log_start_point_failure_reason %} No serial console logs available since the instance's startup due to auto purge, hence the check might not have correct results. {% endblock serial_log_start_point_failure_reason %} {% block serial_log_start_point_failure_remediation %} Consider restarting the instance and then using gcpdiag to analyze the serial console logs for further insights. {% endblock serial_log_start_point_failure_remediation %} {% block serial_log_start_point_skipped_reason %} No logs are available to examine. {% endblock serial_log_start_point_skipped_reason %} {% block time_sync_issue_step_name %} Check for Time Sync related errors from GCE serial logs. {% endblock time_sync_issue_step_name %} {% block time_sync_issue_failure_reason %} Found time sync error messages in Serial console logs. The VM's time is out of sync. {% endblock time_sync_issue_failure_reason %} {% block time_sync_issue_failure_remediation %} Connect to the GCE Instance and verify that the NTP server configuration adheres to Google Cloud Platform standards. Refer to the [Google Cloud NTP configuration guide](https://cloud.google.com/compute/docs/instances/configure-ntp). {% endblock time_sync_issue_failure_remediation %} {% block time_sync_issue_skipped_reason %} No logs are available to examine. {% endblock time_sync_issue_skipped_reason %} {% block time_sync_issue_uncertain_reason %} No Time sync related errors in Serial console logs. {% endblock time_sync_issue_uncertain_reason %} {% block time_sync_issue_uncertain_remediation %} To verify, please check your system Logs for below patterns: ``` 'time may be out of sync', 'System clock is unsynchronized', 'Time drift detected', 'no servers can be used, system clock unsynchronized' ``` {% endblock time_sync_issue_uncertain_remediation %} {% block guest_agent_step_name %} Checking for Guest Agent startup logs {% endblock guest_agent_step_name %} {% block guest_agent_failure_reason %} Could not find the Google Guest Agent startup log in Serial console logs. {% endblock guest_agent_failure_reason %} {% block guest_agent_failure_remediation %} The google-guest-agent contains the guest agent and metadata script executables which runs on the guest OS to support the Compute Engine features. These features include account management, OS Login integration, clock skew, network interface management, and instance setup. In case Guest Agent is not started during instance startup, users might face login issues. The `google-guest-agent.service` service should be in running state. If the service is disabled, enable and start the service, by running the following commands: ``` systemctl enable google-guest-agent.service systemctl start google-guest-agent.service ``` Verify that the Linux Google Agent scripts are installed and running. If the Linux Google Agent is not installed, re-install it. {% endblock guest_agent_failure_remediation %} {% block guest_agent_success_reason %} Detected that Google Guest Agent is running within the VM {% endblock guest_agent_success_reason %} {% block guest_agent_skipped_reason %} No logs are available to examine. {% endblock guest_agent_skipped_reason %} {% block guest_agent_uncertain_reason %} No success or failed logs found for Google Guest Agent startup. {% endblock guest_agent_uncertain_reason %} {% block guest_agent_uncertain_remediation %} Each supported operating system on Compute Engine requires specific guest environment packages. To determine the presence of a guest environment: - Inspect system logs emitted to the console during instance startup. - List the installed packages while connected to the instance. For validation of the Guest Agent, refer to [Installing and configuring the guest environment](https://cloud.google.com/compute/docs/images/install-guest-environment#wgei). {% endblock guest_agent_uncertain_remediation %} {% block network_errors_step_name %} Check for metadata network connectivity errors {% endblock network_errors_step_name %} {% block network_errors_failure_reason %} The metadata server(169.254.169.254) is unreachable from the GCE Instance. The instance might not have IP assigned to its primary NIC. {% endblock network_errors_failure_reason %} {% block network_errors_failure_remediation %} Attempt to log in to the instance via the serial console using a password and check the status of the network stack. If login via the serial console is unsuccessful, consider restarting the instance. If the issue persists after a reboot, follow the [rescue VM guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting. Additionally, refer to the [troubleshooting metadata server guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues with the Compute Engine metadata server. {% endblock network_errors_failure_remediation %} {% block network_errors_skipped_reason %} No logs are available to examine. {% endblock network_errors_skipped_reason %} {% block network_errors_uncertain_reason %} No success or failed logs to help deduce a conlusion on certainty of Network issues on the instance. {% endblock network_errors_uncertain_reason %} {% block linux_fs_corruption_step_name %} Verify any Filesystem corruption related errors in Serial console logs {% endblock linux_fs_corruption_step_name %} {% block linux_fs_corruption_failure_reason %} Possible filesystem corruption detected. The patterns used: ``` 'Corruption of in-memory data detected. Shutting down filesystem', 'Corruption of in-memory data detected', 'warning: mounting fs with errors', 'Failed to mount /', 'A stop job is running for Security \.\.\..* Service ', 'I/O Error Detected. Shutting down filesystem', 'metadata I/O error in' ``` {% endblock linux_fs_corruption_failure_reason %} {% block linux_fs_corruption_failure_remediation %} To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue), available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem. Additional resources for reference: - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923) - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw) These resources provide detailed steps for diagnosing and resolving filesystem issues. {% endblock linux_fs_corruption_failure_remediation %} {% block linux_fs_corruption_skipped_reason %} No logs are available to examine. {% endblock linux_fs_corruption_skipped_reason %} {% block sshd_auth_failure_step_name %} Examining SSHD authentication failures via serial logs. {% endblock sshd_auth_failure_step_name %} {% block sshd_auth_failure_failure_reason %} Detected SSHD authentication issues in the GCE Instance, which is affecting SSH access. Found the error "Authentication refused: bad ownership or modes for directory" {% endblock sshd_auth_failure_failure_reason %} {% block sshd_auth_failure_failure_remediation %} To mitigate "bad ownership or modes for directory" errors: 1. Follow either of the below steps to check the permissions: - these steps to rescue the vm: - these steps login through serial console: 2. Refer to the standard permissions required for ssh connection: {% endblock sshd_auth_failure_failure_remediation %} {% block sshd_auth_failure_success_reason %} No errors detected for sshd auth failure due to bad permissions {% endblock sshd_auth_failure_success_reason %} {% block sshd_auth_failure_skipped_reason %} No logs are available to examine. {% endblock sshd_auth_failure_skipped_reason %} {% block sshd_auth_failure_uncertain_reason %} No evidence of successful or failed SSHD authentication attempts is present in the serial logs. {% endblock sshd_auth_failure_uncertain_reason %} {% block sshd_auth_failure_uncertain_remediation %} To check if sshd_auth_failures are happening due to wrong directory permissions: 1. Follow either of the below steps to check the permissions: - these steps to rescue the vm: - these steps login through serial console: 2. Check the system logs for following error messages: ``` 'Authentication refused: bad ownership or modes for directory' 'Error updating SSH keys for user1: mkdir /home/USER/.ssh: no such file or directory' ``` {% endblock sshd_auth_failure_uncertain_remediation %} {% block linux_fs_corruption_uncertain_reason %} No evidence Filesystem corruption errors present in the serial logs. {% endblock linux_fs_corruption_uncertain_reason %} {% block linux_fs_corruption_uncertain_remediation %} {% endblock linux_fs_corruption_uncertain_remediation %} {% block cloud_init_startup_check_step_name %} Checking for Cloud-init startup logs {% endblock cloud_init_startup_check_step_name %} {% block cloud_init_startup_check_failure_reason %} Could not find the Cloud-init startup log in Serial console logs. {% endblock cloud_init_startup_check_failure_reason %} {% block cloud_init_startup_check_failure_remediation %} Cloud-init is the standard method for initializing cloud instance when it boots up. It is installed in official Ubuntu and Container-Optimized OS images. Cloud-init failures can be caused by internal issues, problems with other system components, or user configuration errors. Check if Cloud-init process is in running state. ``` systemctl status cloud-init ``` Verify if the cloud init package is installed. Otherwise reinstall cloud-init and enable it ``` dpkg -l | grep -i cloud-init apt-get install -f cloud-init -y systemctl enable cloud-init ``` {% endblock cloud_init_startup_check_failure_remediation %} {% block cloud_init_startup_check_success_reason %} Detected that Cloud-init is running within {full_resource_path} {% endblock cloud_init_startup_check_success_reason %} {% block cloud_init_startup_check_skipped_reason %} No logs are available to examine. {% endblock cloud_init_startup_check_skipped_reason %} {% block cloud_init_startup_check_uncertain_reason %} No evidence of successful or failed cloud-init startup attempts in the {full_resource_path} serial logs. {% endblock cloud_init_startup_check_uncertain_reason %} {% block cloud_init_startup_check_uncertain_remediation %} Check if cloud-init package is installed in VM ``` dpkg -l | grep -i cloud-init systemctl enable cloud-init ``` {% endblock cloud_init_startup_check_uncertain_remediation %} {% block cloud_init_step_name %} Verify Network interface received IP through cloud-init {% endblock cloud_init_step_name %} {% block cloud_init_failure_reason %} NIC did not received any IP through cloud-init {% endblock cloud_init_failure_reason %} {% block cloud_init_failure_remediation %} Cloud-init is the standard method for initializing cloud instance when it boots up. It is installed in official Ubuntu and Container-Optimized OS images. Cloud-init failures can be caused by internal issues, problems with other system components, or user configuration errors. Check if Cloud-init process is in running state. ``` systemctl status cloud-init ``` Verify if the cloud init package is installed. Otherwise reinstall cloud-init and enable it ``` dpkg -l | grep -i cloud-init apt-get install -f cloud-init -y systemctl enable cloud-init ``` {% endblock cloud_init_failure_remediation %} {% block cloud_init_success_reason %} Detected that NIC has received IP through cloud-init {% endblock cloud_init_success_reason %} {% block cloud_init_skipped_reason %} No logs are available to examine. {% endblock cloud_init_skipped_reason %} {% block cloud_init_uncertain_reason %} Cloud-init startup logs (both success and failure) for the resource {full_resource_path} were not found. This may indicate missing log files, incorrect logging configuration, or an issue with the initialization process during {start_time} - {end_time}. {% endblock cloud_init_uncertain_reason %} {% block cloud_init_uncertain_remediation %} The Cloud-init package may not be installed or active on the VM {full_resource_path}. To verify, check if the package is installed by running: ``` dpkg -l | grep -i cloud-init. ``` If the package is not installed, install it using the appropriate package manager. Additionally, ensure that the service is enabled by running: ``` systemctl enable cloud-init. ``` {% endblock cloud_init_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/gce/templates/vm_termination.jinja ================================================ {% block vm_termination_success_reason %} No GCE Instance was terminated between {start_time} and {end_time} {% endblock vm_termination_success_reason %} {% block mig_instance_recreation_failure_reason %} {status_message} {% endblock mig_instance_recreation_failure_reason %} {% block mig_instance_recreation_failure_remediation %} Instance "{full_resource_path}" was terminated as part of a normal Managed Instance Group recreation process and a replacement instance has been created after this termination. No action required. [1] [2] {% endblock mig_instance_recreation_failure_remediation %} {% block mig_instance_recreation_failure_remediation_a1 %} Instance "{full_resource_path}" was terminated as part of a normal Managed Instance Group recreation process and a replacement instance has not been created after this termination. Please investigate the MIG to understand the root cause of the issue and take necessary actions to recreate the instance. [1] [2] {% endblock mig_instance_recreation_failure_remediation_a1 %} {% block preemptible_instance_failure_reason %} {status_message} {% endblock preemptible_instance_failure_reason %} {% block preemptible_instance_failure_remediation %} Instance {full_resource_path} were preempted as part of a spot VM normal process. Spot VMs have significant discounts, but Compute Engine might preemptively stop or delete (preempt) Spot VMs to reclaim capacity at any time. Read more on here the preemption process occurs here [1][2] This is a normal process and no action is required. [1] [2] {% endblock preemptible_instance_failure_remediation %} {% block preemptible_instance_failure_remediation_a1 %} Instance {full_resource_path} were preempted as part of a spot VM normal process however is currently shutdown. Follow our guide to restart the VM [1] Read more on here the preemption process occurs here [2][3] This is a normal process and no action is required. [1] [2] [3] {% endblock preemptible_instance_failure_remediation_a1 %} {% block host_error_failure_reason %} {status_message} {% endblock host_error_failure_reason %} {% block host_error_failure_remediation %} A host error (compute.instances.hostError) means that there was a hardware or software issue on the physical machine hosting your VM that caused your VM to crash. A host error which involves total hardware/software failure might prevent a live migration of your VM. If your VM is set to automatically restart, which is the default setting, Google restarts your VM, typically within three minutes from the time the error was detected. Depending on the issue, the restart might take up to 5.5 minutes. Note that this is a known behavior that cannot be completely eliminated and should be planned for while designing your systems on GCE. Mitigation Strategies The following mitigation strategies are implemented by Google to prevent & minimize occurrence of such events: Live Migrations. Live migration lets Google Cloud perform maintenance without interrupting a workload, rebooting a VM, or modifying any of the VM's properties, such as IP addresses, metadata, block storage data, application state, and network settings. Additionally our systems proactively monitor for hardware or software failure symptoms on hosts. If a potential failure is detected, we initiate live migration to seamlessly relocate the VM and prevent termination. A 'hostError' will only occur in the rare instance where the failures prevent successful live migration. Google reliability engineering. We are continuously monitoring the health of GCP hosts and taking steps to prevent errors from occurring, while using a variety of HA techniques to detect and mitigate hardware failures, such as using redundant components and monitoring for signs of failure. Software Patching: We are continuously implementing a rigorous software patching schedule to ensure the timely application of security updates and bug fixes. This proactive approach is mitigating the risk of software defects, and bugs that could lead to operational instability. RCA Kindly note: RCA by Google for Host errors is not common practice. Host errors can happen occasionally and typically do not undergo individual RCA. Should you request an RCA for a host error, you must provide a compelling business justification for why further details are necessary. Any root cause provided will be limited to if the issue was hardware or software related and if it was related to a single host or a rack. Review Logs and Create Log-Based Metrics: For tracking HostErrors: To proactively track host errors within your projects, create a log-based metric dashboard. This will provide a visual representation of error trends. For customer-facing evidence: If you need root cause information as evidence for your own customers, utilize Cloud Logging to query and export relevant logs. These logs provide granular error messages and timestamps. For timely response to errors: To ensure prompt reaction to critical host errors, configure a log-based alert. Alerting (2) Follow the Instructions here using the below query to build a log based alert on your project to get notified in case of a hostError. Make sure to include labels with the information you need exposed on the notification. resource.type="gce_instance" protoPayload.serviceName="compute.googleapis.com" (protoPayload.methodName:"compute.instances.hostError" OR operation.producer:"compute.instances.hostError") log_id("cloudaudit.googleapis.com/system_event") Resources: [1] {% endblock host_error_failure_remediation %} {% block guest_os_issued_shutdown_failure_reason %} {status_message} {% endblock guest_os_issued_shutdown_failure_reason %} {% block guest_os_issued_shutdown_failure_remediation %} Instance {full_resource_path} shutdown was initiated from the operating system. This is usually caused by a sudoer posix user issuing a shutdown or reboot command Review guest shell history to determine who or what application triggered the shutdown. {% endblock guest_os_issued_shutdown_failure_remediation %} {% block terminate_on_host_maintenance_failure_reason %} {status_message} {% endblock terminate_on_host_maintenance_failure_reason %} {% block terminate_on_host_maintenance_failure_remediation %} Instance {full_resource_path} maintenance policy is set to TERMINATE, Compute Engine stops your VM when there is a maintenance event where Google must move your VM to another host. If you want to change your VM's onHostMaintenance policy to restart automatically or live migrate [1]. Read more about Host Events [2] and how to set your termination policies[3]. [1] [2] [3] {% endblock terminate_on_host_maintenance_failure_remediation %} {% block user_stop_failure_reason %} Account {stop_account} stopped the VM. {% endblock user_stop_failure_reason %} {% block user_stop_failure_remediation %} Instance {full_resource_path} was intentionally stopped by account {stop_account}. Simply restart the VM when safe to do so by following [1] [1] {% endblock user_stop_failure_remediation %} {% block user_stop_failure_remediation_a1 %} Instance {full_resource_path} was intentionally stopped by account {stop_account}. No action required. VM is currently running. {% endblock user_stop_failure_remediation_a1 %} {% block compute_cluster_manager_termination_failure_reason %} Instance {full_resource_path} was terminated by account {stop_account}. {% endblock compute_cluster_manager_termination_failure_reason %} {% block compute_cluster_manager_termination_failure_remediation_a1 %} Billing has been disabled for project/{shared_vpc_project} caused the Instance {full_resource_path} to be stopped by account {stop_account}. This is because instance {full_resource_path} uses network {network_name} on project/{shared_vpc_project}. Re-enable billing for project/{shared_vpc_project} to start the Instance {full_resource_path}. Manually run this log query below in projects/{shared_vpc_project} cloud logging explorer for details. ``` protoPayload.methodName="DisableResourceBilling" resource.type="project" protoPayload.resourceName="projects/{shared_vpc_project}" ``` Investigate to ensure this was not a malicious action. [1] [2] [3] {% endblock compute_cluster_manager_termination_failure_remediation_a1 %} {% block scheduled_stop_policy_failure_reason %} Instance {full_resource_path} was terminated by account {stop_account} due to a scheduled stop policy. {% endblock scheduled_stop_policy_failure_reason %} {% block scheduled_stop_policy_failure_remediation %} No action required. VM is currently running. {% endblock scheduled_stop_policy_failure_remediation %} {% block scheduled_stop_policy_failure_remediation_a1 %} Instance {full_resource_path} is currently shutdown. Restart the VM when safe to do so by following [1] [1] {% endblock scheduled_stop_policy_failure_remediation_a1 %} ================================================ FILE: gcpdiag/runbook/gce/templates/vpc_connectivity.jinja ================================================ {% block default_ingress_failure_reason %} Consider using recommended methods for connecting Compute Engine virtual machine (VM) instance through its internal IP address: {% endblock default_ingress_failure_reason %} {% block default_ingress_failure_remediation %} If connecting to a non-public VM and do not wish to allow external access, choose one of the following connection options for VMs Alternatively, create/update a firewall rule to allow access {% endblock default_ingress_failure_remediation %} {% block default_ingress_success_reason %} Ingress Traffic from source IP/CIDR {address}, {protocol}:{port} to the GCE instance {name} is allowed by: {result} {% endblock default_ingress_success_reason %} {% block tti_ingress_failure_reason %} Allow ingress traffic from the VIP range 35.235.240.0/20 ' {% endblock tti_ingress_failure_reason %} {% block tti_ingress_failure_remediation %} If connecting to a non-public VM and do not wish to allow external access, choose one of the following connection options for VMs Alternatively, create/update a firewall rule to allow access {% endblock tti_ingress_failure_remediation %} {% block tti_ingress_success_reason %} Ingress Traffic from source IP/CIDR {address}, {protocol}:{port} to the GCE instance {name} is allowed by: {result} {% endblock tti_ingress_success_reason %} {% block ingress_traffic_failure_reason %} Ingress Traffic from source IP "{address}", for protocol:{protocol} port:{port} to instance {name} is not allowed by: {result} {% endblock ingress_traffic_failure_reason %} {% block ingress_traffic_failure_remediation %} If connecting to a non-public VM and do not wish to allow external access, choose one of the following connection options for VMs Alternatively, create/update a firewall rule to allow access {% endblock ingress_traffic_failure_remediation %} {% block ingress_traffic_success_reason %} Ingress Traffic from source IP/CIDR {}, {}:{} to the GCE instance {} is allowed by: {} {% endblock ingress_traffic_success_reason %} ================================================ FILE: gcpdiag/runbook/gce/util/__init__.py ================================================ # Copyright 2021 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. # Lint as: python3 """Runbook utility.""" import logging import re from typing import List import googleapiclient from gcpdiag import utils from gcpdiag.queries import gce, monitoring from gcpdiag.runbook import exceptions as runbook_exceptions from gcpdiag.runbook import op from gcpdiag.runbook.gce import flags def ensure_instance_resolved(): """Check if instance id and name are in context, try to resolve if not.""" instance_id = op.get(flags.INSTANCE_ID) instance_name = op.get(flags.INSTANCE_NAME) if instance_id and instance_name: return project_id = op.get(flags.PROJECT_ID) zone = op.get(flags.ZONE) name_or_id = instance_name or instance_id # Try to resolve zone from Instance ID if zone is missing if not zone and instance_id: try: instance = gce.get_instance_by_id(project_id, instance_id) if instance: op.put(flags.ZONE, instance.zone) op.put(flags.INSTANCE_NAME, instance.name) return except utils.GcpApiError as e: logging.debug('Failed to resolve instance by ID: %s', e) # Fallback to standard flow if resolution fails or API errors occur pass if not name_or_id: raise runbook_exceptions.MissingParameterError( 'instance not resolved and instance_name or instance_id not in context') try: instance = gce.get_instance(project_id=project_id, zone=zone, instance_name=str(name_or_id)) op.put(flags.INSTANCE_NAME, instance.name) op.put(flags.INSTANCE_ID, instance.id) except googleapiclient.errors.HttpError as err: if err.resp.status == 404: raise runbook_exceptions.FailedStepError( f'Instance {name_or_id} not found in project {project_id} ' f'zone {zone}.') from err else: raise utils.GcpApiError(err) from err def search_pattern_in_serial_logs(patterns: List, contents: List[str], operator='OR'): # logs are by default sorted from oldest to newest. revert to get the newest first reversed_contents = reversed(contents) pattern = '' if operator == 'OR': pattern = '|'.join(patterns) regex = re.compile(pattern, re.IGNORECASE) for log in reversed_contents: result = regex.search(log) if result: return True elif operator == 'AND': contents_str = ' '.join(reversed_contents) pattern_arr = [re.compile(string) for string in patterns] if all(p.search(contents_str) for p in pattern_arr): return True return False def user_has_valid_ssh_key(local_user, keys: List[str], key_type=None) -> bool: """Given a list of keys, check if it has *at least one* valid SSH key for the local_user. A key is valid if: - the local_user matches the key username - a the key type matches if specified. return: True if at least one valid key or False if none is valid """ pattern = r'(?P\w+):(?P[\w-]+) \S+(?: \S+|)(?: google-ssh {"userName":"\S+","expireOn":"(?P[^"]+)"}|$)' # pylint:disable=line-too-long # pattern the input string into key_value and if formatted the ssh info for key in keys: key = key.strip() m = re.search(pattern, key) # Check if 'testuser' is in the user_info and 'google-ssh' is in the ssh_info # TODO: Check later if keyname and username can be different in an SSH key. if m: valid = local_user == m.group('user') # Check expected key_type is the same as what's in the keyvalue if key_type: valid = key_type == m.group('type') if valid: return valid return False def ops_agent_installed(project_id, vm_id) -> bool: within_hours = 8 within_str = 'within %dh, d\'%s\'' % (within_hours, monitoring.period_aligned_now(5)) ops_agent_q = monitoring.query( project_id, """ fetch gce_instance | metric 'agent.googleapis.com/agent/uptime' | filter (resource.instance_id == '{}') | align rate(1m) | every 1m | group_by [], [value_uptime_max: max(value.uptime)] | {} """.format(vm_id, within_str)) if ops_agent_q: return True return False ================================================ FILE: gcpdiag/runbook/gce/util/util_test.py ================================================ # Copyright 2023 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. """ Test Class for GCE runbook util""" import unittest from unittest import mock import googleapiclient from gcpdiag.queries import gce from gcpdiag.runbook import exceptions as runbook_exceptions from gcpdiag.runbook.gce import flags, util class TestEnsureInstanceResolved(unittest.TestCase): """Test class for ensure_instance_resolved""" def setUp(self): super().setUp() self.mock_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.mock_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put')) self.mock_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance')) def test_instance_already_resolved(self): self.mock_get.side_effect = { flags.INSTANCE_ID: '123', flags.INSTANCE_NAME: 'test-instance' }.get util.ensure_instance_resolved() self.mock_get_instance.assert_not_called() def test_instance_resolved_by_name(self): instance = mock.MagicMock(spec=gce.Instance) instance.name = 'test-instance' instance.id = '123' self.mock_get_instance.return_value = instance self.mock_get.side_effect = { flags.PROJECT_ID: 'test-project', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'test-instance', flags.INSTANCE_ID: None }.get util.ensure_instance_resolved() self.mock_get_instance.assert_called_with(project_id='test-project', zone='us-central1-a', instance_name='test-instance') self.mock_put.assert_any_call(flags.INSTANCE_NAME, 'test-instance') self.mock_put.assert_any_call(flags.INSTANCE_ID, '123') def test_instance_resolved_by_id(self): instance = mock.MagicMock(spec=gce.Instance) instance.name = 'test-instance' instance.id = '123' self.mock_get_instance.return_value = instance self.mock_get.side_effect = { flags.PROJECT_ID: 'test-project', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: None, flags.INSTANCE_ID: '123' }.get util.ensure_instance_resolved() self.mock_get_instance.assert_called_with(project_id='test-project', zone='us-central1-a', instance_name='123') self.mock_put.assert_any_call(flags.INSTANCE_NAME, 'test-instance') self.mock_put.assert_any_call(flags.INSTANCE_ID, '123') def test_missing_parameters(self): self.mock_get.side_effect = { flags.PROJECT_ID: 'test-project', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: None, flags.INSTANCE_ID: None }.get with self.assertRaises(runbook_exceptions.MissingParameterError): util.ensure_instance_resolved() def test_instance_not_found(self): self.mock_get.side_effect = { flags.PROJECT_ID: 'test-project', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'test-instance', flags.INSTANCE_ID: None }.get mock_resp = mock.MagicMock(status=404) self.mock_get_instance.side_effect = googleapiclient.errors.HttpError( resp=mock_resp, content=b'') with self.assertRaises(runbook_exceptions.FailedStepError): util.ensure_instance_resolved() class TestUtil(): """Test Class for GCE runbook util """ keys = [ 'test:ecdsa-sha2-nistp256 AA/NR0=', ('testuser:ssh-rsa AAA/HlFH+LC/+yt/yt/yt/yt+yt/yt+YT ' 'google-ssh {"userName":"testuser@company.com","expireOn":"2023-11-16T18:23:23+0000"}' ) ] def test_has_at_least_one_valid_key(self): local_user = 'test' assert util.user_has_valid_ssh_key(local_user=local_user, keys=self.keys) def test_has_google_ssh_comment(self): # We don't check for gcloud/in browser ssh added keys local_user = 'testuser' assert util.user_has_valid_ssh_key(local_user=local_user, keys=self.keys) def test_has_no_valid_key(self): local_user = 'notvalid' assert not util.user_has_valid_ssh_key(local_user=local_user, keys=self.keys) def test_no_keys_present(self): local_user = 'notvalid' assert not util.user_has_valid_ssh_key(local_user=local_user, keys=[]) def test_has_at_least_one_valid_key_and_type(self): local_user = 'test' key_type = 'ssh-rsa' assert util.user_has_valid_ssh_key(local_user=local_user, keys=self.keys, key_type=key_type) def test_has_at_least_one_valid_key_and_mismatched_type(self): local_user = 'test' key_type = 'ssh-dss' assert not util.user_has_valid_ssh_key( local_user=local_user, keys=self.keys, key_type=key_type) def test_regex_pattern_exist_in_logs(self): serial_log = ['one line of log', 'daemon [123]: started'] pattern = [r'daemon \[\d+\]:'] assert util.search_pattern_in_serial_logs(pattern, serial_log) pattern = [r'daemon \[\d+\]:', r'line (of|x)'] assert util.search_pattern_in_serial_logs(pattern, serial_log, 'AND') def test_one_pattern_exist_in_logs(self): serial_log = ['one line of log', 'second string test'] pattern = ['line', 'long'] assert util.search_pattern_in_serial_logs(pattern, serial_log) pattern = ['line', r'log \w+'] assert util.search_pattern_in_serial_logs(pattern, serial_log) pattern = ['line', r'log \w+'] assert not util.search_pattern_in_serial_logs(pattern, []) def test_all_pattern_exist_logs(self): serial_log = ['one line of log', 'second 20 string', 'third'] pattern = ['line', r'second \d+'] assert util.search_pattern_in_serial_logs(pattern, serial_log, 'AND') pattern = [r'second \d+ \w+', 'third'] assert util.search_pattern_in_serial_logs(pattern, serial_log, 'AND') pattern = [r'second \d+ \w+', 'third', 'invalid'] assert not util.search_pattern_in_serial_logs(pattern, [], 'AND') ================================================ FILE: gcpdiag/runbook/gce/vm_creation.py ================================================ # Copyright 2025 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. """Runbook for diagnosing VM creation issues.""" from datetime import datetime from boltons.iterutils import get_path from gcpdiag import runbook from gcpdiag.queries import crm, logs from gcpdiag.runbook import op from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.gce import flags VM_CREATION_FAILURE_FILTER = ''' resource.type="gce_instance" log_id("cloudaudit.googleapis.com/activity") protoPayload.resourceName="projects/{PROJECT_ID}/zones/{ZONE}/instances/{INSTANCE_NAME}" protoPayload.methodName=~"compute.instances.insert" severity=ERROR AND (protoPayload.status.message="QUOTA_EXCEEDED" OR protoPayload.response.error.errors.reason="alreadyExists" OR protoPayload.response.error.message=~"Required '.*' permission for '.*'") ''' class VmCreation(runbook.DiagnosticTree): """Runbook for diagnosing VM creation issues. This runbook helps identify and resolve issues related to VM creation in Google Cloud. - Checks for quota-related issues. - Checks for permission-related issues. - Checks for conflicts such as resource already existing. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID which will host the VM to be created.', 'required': True }, flags.INSTANCE_NAME: { 'type': str, 'help': 'The name of the VM to be created.', 'required': True }, flags.ZONE: { 'type': str, 'help': 'The Google Cloud zone of the VM to be created.', 'required': True }, flags.PRINCIPAL: { 'type': str, 'help': 'The authenticated principal that initiated the VM creation.' }, flags.START_TIME: { 'type': datetime, 'help': 'The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.END_TIME: { 'type': datetime, 'help': 'The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.CHECK_ZONE_SEPARATION_POLICY: { 'type': bool, 'default': False, 'help': 'Check if the zone separation policy is enforced.' } } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = runbook.StartStep() # add them to your tree self.add_start(start) self.add_step(parent=start, child=InvestigateVmCreationLogFailure()) if op.get(flags.CHECK_ZONE_SEPARATION_POLICY): self.add_step( parent=start, child=crm_gs.OrgPolicyCheck( constraint='constraints/gcp.requiresPhysicalZoneSeparation', is_enforced=True, ), ) # Ending the vm creation runbook. self.add_end(runbook.EndStep()) class InvestigateVmCreationLogFailure(runbook.Gateway): """Investigate VM creation failure logs. This step queries logs to identify the root cause of VM creation failures, such as quota issues, permission errors, or resource conflicts. """ template = 'vm_creation::logs' def execute(self): """Query logs to determine the cause of VM creation failure.""" project = crm.get_project(op.get(flags.PROJECT_ID)) res = logs.realtime_query(project_id=op.get(flags.PROJECT_ID), filter_str=VM_CREATION_FAILURE_FILTER.format( PROJECT_ID=op.get(flags.PROJECT_ID), ZONE=op.get(flags.ZONE), INSTANCE_NAME=op.get(flags.INSTANCE_NAME)), start_time=datetime.now(), end_time=op.get(flags.END_TIME)) if res: entry = res[0] error_message = get_path( entry, ('protoPayload', 'response', 'error', 'errors', 0, 'message')) error_reason = get_path( entry, ('protoPayload', 'response', 'error', 'errors', 0, 'reason')) status_message = get_path(entry, ('protoPayload', 'status', 'message')) if status_message and status_message == 'QUOTA_EXCEEDED': error_message = status_message metric_name = get_path(entry, ('protoPayload', 'status', 'details', 'quotaExceeded', 'metricName')) limit = get_path( entry, ('protoPayload', 'status', 'details', 'quotaExceeded', 'limit')) limit_name = get_path( entry, ('protoPayload', 'status', 'details', 'quotaExceeded', 'limitName')) op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON_ALT1, error_message=error_message), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1, metric_name=metric_name, limit=limit, limit_name=limit_name)) elif error_reason and error_reason == 'alreadyExists': op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON, error_message=error_message), remediation=op.prep_msg( op.FAILURE_REMEDIATION, zone=op.get(flags.ZONE), project_id=op.get(flags.PROJECT_ID), instance_name=op.get(flags.INSTANCE_NAME))) elif error_reason and error_reason == 'forbidden': op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON_ALT2, error_message=error_message), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT2)) ================================================ FILE: gcpdiag/runbook/gce/vm_creation_test.py ================================================ # Copyright 2025 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. """Test class for gce/VmCreation""" import datetime import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gce, models, op, snapshot_test_base from gcpdiag.runbook.crm import generalized_steps as crm_gs from gcpdiag.runbook.gce import flags, vm_creation class Test(snapshot_test_base.RulesSnapshotTestBase): """Snapshot tests for VM creation runbook.""" rule_pkg = gce runbook_name = 'gce/vm-creation' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gce6-aaaa', 'instance_name': 'existing-instance', 'zone': 'us-central1-c' }, { 'project_id': 'gcpdiag-gce6-aaaa', 'instance_name': 'non-existing-gpu-instance', 'zone': 'us-central1-c' }] class VmCreationUnitTests(unittest.TestCase): """Unit tests for VmCreation to cover lines not reached by snapshots.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(interface=self.mock_interface) self.operator.run_id = 'test-run' self.params = { flags.PROJECT_ID: 'gcpdiag-gce6-aaaa', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'test-instance', flags.END_TIME: datetime.datetime(2025, 1, 1), 'start_time': datetime.datetime(2025, 1, 1), } self.operator.parameters = self.params self.operator.messages = models.Messages() self.operator.messages.update({ 'FAILURE_REASON': 'Reason {error_message}', 'FAILURE_REMEDIATION': 'Remedy', 'FAILURE_REASON_ALT1': 'Quota Reason {error_message}', 'FAILURE_REMEDIATION_ALT1': 'Quota Remedy', 'FAILURE_REASON_ALT2': 'Forbidden Reason {error_message}', 'FAILURE_REMEDIATION_ALT2': 'Forbidden Remedy', }) self.op_context = self.enterContext(op.operator_context(self.operator)) def _get_base_entry(self): """Returns a baseline log entry structure to satisfy initial get_path calls.""" return { 'protoPayload': { 'status': { 'message': '' }, 'response': { 'error': { 'errors': [{ 'message': '', 'reason': '' }] } } } } def test_build_tree_logic_zone_separation_true(self): self.params[flags.CHECK_ZONE_SEPARATION_POLICY] = True runbook_instance = vm_creation.VmCreation() runbook_instance.build_tree() step_types = [type(s) for s in runbook_instance.start.steps] self.assertIn(crm_gs.OrgPolicyCheck, step_types) def test_build_tree_logic_zone_separation_false(self): self.params[flags.CHECK_ZONE_SEPARATION_POLICY] = False runbook_instance = vm_creation.VmCreation() runbook_instance.build_tree() step_types = [type(s) for s in runbook_instance.start.steps] self.assertNotIn(crm_gs.OrgPolicyCheck, step_types) @mock.patch('gcpdiag.queries.logs.realtime_query') def test_execute_quota_exceeded(self, mock_query): entry = self._get_base_entry() entry['protoPayload']['status'] = { 'message': 'QUOTA_EXCEEDED', 'details': { 'quotaExceeded': { 'metricName': 'CPUS', 'limit': 10, 'limitName': 'CPUS-limit' } } } mock_query.return_value = [entry] step = vm_creation.InvestigateVmCreationLogFailure() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.logs.realtime_query') def test_execute_already_exists(self, mock_query): entry = self._get_base_entry() entry['protoPayload']['response']['error']['errors'][0] = { 'reason': 'alreadyExists', 'message': 'Instance exists' } mock_query.return_value = [entry] step = vm_creation.InvestigateVmCreationLogFailure() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.logs.realtime_query') def test_execute_forbidden(self, mock_query): entry = self._get_base_entry() entry['protoPayload']['response']['error']['errors'][0] = { 'reason': 'forbidden', 'message': 'Permission denied' } mock_query.return_value = [entry] step = vm_creation.InvestigateVmCreationLogFailure() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() @mock.patch('gcpdiag.queries.logs.realtime_query') def test_execute_no_logs(self, mock_query): mock_query.return_value = [] step = vm_creation.InvestigateVmCreationLogFailure() self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() ================================================ FILE: gcpdiag/runbook/gce/vm_performance.py ================================================ # Copyright 2024 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. """Module containing VM performance diagnostic tree and custom steps""" import json from datetime import datetime, timedelta, timezone from os.path import dirname import googleapiclient.errors from gcpdiag import config, runbook from gcpdiag.queries import crm, gce, logs, monitoring from gcpdiag.runbook import op from gcpdiag.runbook.gce import constants as gce_const from gcpdiag.runbook.gce import flags from gcpdiag.runbook.gce import generalized_steps as gce_gs IO_LATENCY_THRESHOLD = 1500 class VmPerformance(runbook.DiagnosticTree): """ Google Compute Engine VM performance checks This runbook is designed to assist you in investigating and understanding the underlying reasons behind the performance issues of your Google Compute Engine VMs within Google Cloud Platform. Key Investigation Areas: - High CPU utilisation - CPU Over-commitment for E2 or Sole-Tenant VMs - High Memory utilisation - Disk space high utilisation - High Disk IOPS utilisation - High Disk Throughput utilisation - Disk Health check - Disk IO latency check - Disk Slowness check - Check for Live Migrations - Usual Error checks in Serial console logs """ # Specify parameters common to all steps in the diagnostic tree class. parameters = { flags.PROJECT_ID: { 'type': str, 'help': ( 'The Project ID associated with the VM having performance issues.' ), 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the VM having performance issues. Or provide the id i.e -p name=', 'deprecated': True, 'new_parameter': 'instance_name', }, flags.INSTANCE_NAME: { 'type': str, 'help': 'The name of the VM having performance issues. Or provide the id i.e -p name=', 'required': True }, flags.ZONE: { 'type': str, 'help': 'The Google Cloud zone where the VM having performance issues, is located.', 'required': True }, flags.START_TIME: { 'type': datetime, 'help': 'The start window(in UTC) to investigate vm performance issues.' 'Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.END_TIME: { 'type': datetime, 'help': 'The end window(in UTC) for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ' } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.INSTANCE_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = VmPerformanceStart() cpu_check = gce_gs.HighVmCpuUtilization() cpu_check.project_id = op.get(flags.PROJECT_ID) cpu_check.zone = op.get(flags.ZONE) cpu_check.instance_name = op.get(flags.INSTANCE_NAME) mem_check = gce_gs.HighVmMemoryUtilization() mem_check.project_id = op.get(flags.PROJECT_ID) mem_check.zone = op.get(flags.ZONE) mem_check.instance_name = op.get(flags.INSTANCE_NAME) disk_util_check = gce_gs.HighVmDiskUtilization() disk_util_check.project_id = op.get(flags.PROJECT_ID) disk_util_check.zone = op.get(flags.ZONE) disk_util_check.instance_name = op.get(flags.INSTANCE_NAME) vm_lifecycle_check = gce_gs.VmLifecycleState() vm_lifecycle_check.expected_lifecycle_status = 'RUNNING' vm_lifecycle_check.project_id = op.get(flags.PROJECT_ID) vm_lifecycle_check.zone = op.get(flags.ZONE) vm_lifecycle_check.instance_name = op.get(flags.INSTANCE_NAME) self.add_start(step=start) self.add_step(parent=start, child=vm_lifecycle_check) self.add_step(parent=start, child=cpu_check) self.add_step(parent=start, child=mem_check) self.add_step(parent=cpu_check, child=CpuOvercommitmentCheck()) self.add_step(parent=start, child=DiskHealthCheck()) self.add_step(parent=start, child=disk_util_check) self.add_step(parent=start, child=DiskAvgIOLatencyCheck()) # Check for PD slow Reads/Writes slow_disk_io = gce_gs.VmSerialLogsCheck() slow_disk_io.project_id = op.get(flags.PROJECT_ID) slow_disk_io.zone = op.get(flags.ZONE) slow_disk_io.instance_name = op.get(flags.INSTANCE_NAME) slow_disk_io.template = 'vm_performance::slow_disk_io' slow_disk_io.negative_pattern = gce_const.SLOW_DISK_READS self.add_step(parent=disk_util_check, child=slow_disk_io) # Checking for Filesystem corruption related errors fs_corruption = gce_gs.VmSerialLogsCheck() fs_corruption.project_id = op.get(flags.PROJECT_ID) fs_corruption.zone = op.get(flags.ZONE) fs_corruption.instance_name = op.get(flags.INSTANCE_NAME) fs_corruption.template = 'vm_serial_log::linux_fs_corruption' fs_corruption.negative_pattern = gce_const.FS_CORRUPTION_MSG self.add_step(parent=disk_util_check, child=fs_corruption) self.add_step(parent=start, child=CheckLiveMigrations()) self.add_end(step=VmPerformanceEnd()) class VmPerformanceStart(runbook.StartStep): """Fetching VM details.""" template = 'vm_attributes::running' def execute(self): """Fetching VM details""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) except googleapiclient.errors.HttpError: op.add_skipped( project, reason=('Instance {} does not exist in zone {} or project {}').format( op.get(flags.INSTANCE_NAME), op.get(flags.ZONE), op.get(flags.PROJECT_ID))) else: if vm and vm.is_running: # Check for instance id and instance name if not op.get(flags.ID): op.put(flags.ID, vm.id) elif not op.get(flags.INSTANCE_NAME): op.put(flags.INSTANCE_NAME, vm.name) else: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status=vm.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, status=vm.status)) class CheckLiveMigrations(runbook.Step): """Checking if live migrations happened for the instance""" template = 'vm_performance::live_migrations' def execute(self): """Checking if live migrations happened for the instance""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) logging_filter = '''protoPayload.methodName=~"compute.instances.migrateOnHostMaintenance"''' log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=f'{logging_filter}\nresource.labels.instance_id="{vm.id}"', start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)) time_frame_list = [op.get(flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')] if log_entries: for log in log_entries: start_time_val = datetime.strptime( log['timestamp'], '%Y-%m-%dT%H:%M:%S.%fZ').strftime('%Y/%m/%d %H:%M:%S') time_frame_list.append(start_time_val) op.info(('\n\nLive Migration Detected at {}, Checking further\n\n' ).format(start_time_val)) end_time = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S') time_frame_list.append(end_time) i = 0 for times in time_frame_list: if i < (len(time_frame_list) - 1): io_util = DiskIopsThroughputUtilisationChecks() i += 1 io_util.start_time = times io_util.end_time = time_frame_list[i] self.add_child(io_util) #if op.step_failed(io_util.run_id): # op.add_failed(vm, # reason=op.prep_msg(op.FAILURE_REASON), # remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON)) self.add_child(DiskIopsThroughputUtilisationChecks()) class DiskHealthCheck(runbook.Step): """Disk Health check""" template = 'vm_performance::disk_health_check' def execute(self): """Checking if instance disks are healthy""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) start_formatted_string = op.get( flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S') end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S') within_str = f'within d\'{start_formatted_string}\', d\'{end_formatted_string}\'' for disk in vm.disks: pd_health_metrics = monitoring.query( op.get(flags.PROJECT_ID), """ fetch gce_instance | metric 'compute.googleapis.com/instance/disk/performance_status' | filter (metric.performance_status != 'Healthy') | filter (resource.instance_id == '{}') && (metric.device_name == '{}') | group_by 3m, [value_performance_status_fraction_true: fraction_true(value.performance_status)] | every 3m | filter value_performance_status_fraction_true > 0 | {} """.format(vm.id, disk['deviceName'], within_str)) if pd_health_metrics: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, disk_name=disk['deviceName']), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON, disk_name=disk['deviceName'])) class CpuOvercommitmentCheck(runbook.Step): """Checking if CPU overcommited beyond threshold""" def execute(self): """Checking if CPU is overcommited""" cpu_count = 1000 start_formatted_string = op.get( flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S') end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S') within_str = f'within d\'{start_formatted_string}\', d\'{end_formatted_string}\'' vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) op.info(f'vm.min_cpu_platform: {vm.min_cpu_platform()}') if vm.is_sole_tenant_vm or 'e2' in vm.machine_type(): start_dt_pst = datetime.strptime(vm.laststarttimestamp(), '%Y-%m-%dT%H:%M:%S.%f%z') start_dt_utc = start_dt_pst.astimezone(timezone.utc) start_dt_utc_plus_5_mins = start_dt_utc + timedelta(minutes=5) current_time_utc = datetime.now(timezone.utc) within_hours = 9 if (start_dt_utc_plus_5_mins > current_time_utc or not vm.is_running) and vm.laststoptimestamp(): # Instance just starting up, CpuCount might not be available currently via metrics. # Use instance's last stop time as EndTime for monitoring query stop_dt_pst = datetime.strptime(vm.laststoptimestamp(), '%Y-%m-%dT%H:%M:%S.%f%z') stop_dt_utc = stop_dt_pst.astimezone(timezone.utc) end_formatted_string = stop_dt_utc.strftime('%Y/%m/%d %H:%M:%S') within_str = 'within %dh, d\'%s\'' % (within_hours, end_formatted_string) else: within_str = f'within d\'{start_formatted_string}\', d\'{end_formatted_string}\'' try: cpu_count_query = monitoring.query( op.get(flags.PROJECT_ID), """ fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/guest_visible_vcpus' | filter (resource.instance_id == '{}') | group_by 1m, [value_guest_visible_vcpus_mean: mean(value.guest_visible_vcpus)] | every 1m | group_by [], [value_guest_visible_vcpus_mean_aggregate: aggregate(value_guest_visible_vcpus_mean)] | {} """.format(vm.id, within_str)) except googleapiclient.errors.HttpError: op.add_failed( op.get(flags.PROJECT_ID), reason=('Not able to pull CPU count for instance {}').format( op.get(flags.INSTANCE_NAME)), remediation='') else: if cpu_count_query: cpu_count = int(list(cpu_count_query.values())[0]['values'][0][0]) else: op.info(( 'CPU count info not available for the instance.\n' 'Please start the VM {} if it is not in running state.\n').format( vm.short_path)) return # an acceptable average Scheduler Wait Time is 20 ms/s per vCPU. utilization_threshold = cpu_count * 20 cpu_overcomit_metrics = monitoring.query( op.get(flags.PROJECT_ID), """ fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/scheduler_wait_time' | filter (resource.instance_id == '{}') | group_by [resource.instance_id], 1m, [value_scheduler_wait_time_max: max(value.scheduler_wait_time)] | every 1m | filter (cast_units(value_scheduler_wait_time_max,"")*1000) >= {} | {} """.format(vm.id, utilization_threshold, within_str)) if cpu_overcomit_metrics: op.add_failed( vm, reason= ('CPU for the VM {} is over committed beyond acceptable limits: {} ms/s' ).format(vm.name, utilization_threshold), remediation='') else: op.add_ok(vm, reason='VM CPU is not overcommited.\n') else: op.add_skipped(vm, reason='VM is neither a Sole Tenent VM nor an E2 instance,' 'Skipping CPU Overcommitment checks') class DiskAvgIOLatencyCheck(runbook.Step): """Check Disk Avg IO Latency""" template = 'vm_performance::disk_io_latency_check' def execute(self): """Checking if Instance's Disk Avg IO Latency is within optimal limits""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) start_formatted_string = op.get( flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S') end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S') within_str = f'within d\'{start_formatted_string}\', d\'{end_formatted_string}\'' # Fetch list of disks for the instance disk_list = gce.get_all_disks_of_instance(op.get_context(), vm.zone, vm.name) disk: gce.Disk for disks in disk_list.items(): disk = disks[1] if disk.type in ['pd-balanced', 'pd-ssd', 'pd-standard', 'pd-extreme']: # Checking Disk IO latency for the instance - disk_io_latency = monitoring.query( op.get(flags.PROJECT_ID), """ fetch gce_instance | metric 'compute.googleapis.com/instance/disk/average_io_latency' | filter (resource.instance_id == '{}') && (metric.device_name == '{}' && metric.storage_type == '{}') | group_by 1m, [value_average_io_latency_mean: mean(value.average_io_latency)] | every 1m | group_by [metric.storage_type], [value_average_io_latency_mean_percentile: percentile(value_average_io_latency_mean, 99)] | filter(cast_units(value_average_io_latency_mean_percentile,"")/1000) >= {} | {} """.format(vm.id, disk.name, disk.type, IO_LATENCY_THRESHOLD, within_str)) if disk_io_latency: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, disk_name=disk.name), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON, disk_name=disk.name)) else: op.add_skipped( vm, reason=('Disk-Type {} is not supported with this gcpdiag runbook,' ' disk name - {}').format(disk.type, disk.name)) class DiskIopsThroughputUtilisationChecks(runbook.Step): """Checking if the Disk IOPS/throughput usage is within optimal levels""" # IOPS and Throughput calculation is based on - # https://cloud.google.com/compute/docs/disks/performance template = 'vm_performance::disk_io_usage_check' start_time: datetime end_time: datetime start_formatted_string: datetime end_formatted_string: datetime silent: bool def execute(self): """Checking if the Disk IOPS/throughput usage is within optimal levels""" if hasattr(self, 'start_time'): self.start_formatted_string = self.start_time else: self.start_formatted_string = op.get( flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S') if hasattr(self, 'end_time'): self.end_formatted_string = self.end_time else: self.end_formatted_string = op.get( flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S') #op.info(('\n\nStart TIme: {}, End time: {}\n\n').format( # self.start_formatted_string, self.end_formatted_string)) disk_io_util_threshold = 0.9 vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) start_dt_pst = datetime.strptime(vm.laststarttimestamp(), '%Y-%m-%dT%H:%M:%S.%f%z') start_dt_utc = start_dt_pst.astimezone(timezone.utc) start_dt_utc_plus_5_mins = start_dt_utc + timedelta(minutes=5) current_time_utc = datetime.now(timezone.utc) within_hours = 9 if (start_dt_utc_plus_5_mins > current_time_utc or not vm.is_running) and vm.laststoptimestamp(): # Instance just starting up, CpuCount might not be available currently via metrics. # Use instance's last stop time as EndTime for monitoring query stop_dt_pst = datetime.strptime(vm.laststoptimestamp(), '%Y-%m-%dT%H:%M:%S.%f%z') stop_dt_utc = stop_dt_pst.astimezone(timezone.utc) end_formatted_string = stop_dt_utc.strftime('%Y/%m/%d %H:%M:%S') within_str = 'within %dh, d\'%s\'' % (within_hours, end_formatted_string) else: within_str = f'within d\'{self.start_formatted_string}\', d\'{self.end_formatted_string}\'' cpu_count_query = None try: cpu_count_query = monitoring.query( op.get(flags.PROJECT_ID), """ fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/guest_visible_vcpus' | filter (resource.instance_id == '{}') | group_by 1m, [value_guest_visible_vcpus_mean: mean(value.guest_visible_vcpus)] | every 1m | group_by [], [value_guest_visible_vcpus_mean_aggregate: aggregate(value_guest_visible_vcpus_mean)] | {} """.format(vm.id, within_str)) except googleapiclient.errors.HttpError: op.add_skipped( op.get(flags.PROJECT_ID), reason=('Not able to pull CPU count for instance {}').format( op.get(flags.INSTANCE_NAME))) if cpu_count_query: cpu_count = int(list(cpu_count_query.values())[0]['values'][0][0]) else: op.add_failed( vm, reason='\tCPU count info is not available for the instance via' ' Monitoring metric "guest_visible_vcpus"', remediation=( '\tPlease first start the VM {}, if it is not in running state' ).format(vm.short_path)) return # Fetch list of disks for the instance disk_list = gce.get_all_disks_of_instance(op.get_context(), vm.zone, vm.name) # Load limits per GB data from json file limits_per_gb_file = f'{dirname(__file__)}/disk_performance_benchmark/limits_per_gb.json' with open(limits_per_gb_file, encoding='utf-8') as file: limits_data = json.load(file) file.close() vm_family = vm.machine_type()[0] if vm.machine_type().split('-')[0] == 'custom': vm_family = 'n' # Load instance level iops/throughput limits from json file vm_family_file = f'{dirname(__file__)}/disk_performance_benchmark/{vm_family}-family.json' with open(vm_family_file, encoding='utf-8') as f: mach_fam_json_data = json.load(f) f.close() # Fetch disk sizes attached to the VM: total_disk_size = { 'pd-balanced': 0, 'pd-ssd': 0, 'pd-standard': 0, 'pd-extreme': 0 } provisions_iops = { 'pd-balanced': 0, 'pd-ssd': 0, 'pd-standard': 0, 'pd-extreme': 0 } disk: gce.Disk for disk_name in disk_list.items(): disk = disk_name[1] if disk.type == 'pd-balanced': total_disk_size['pd-balanced'] += int(disk.size) elif disk.type == 'pd-ssd': total_disk_size['pd-ssd'] += int(disk.size) elif disk.type == 'pd-standard': total_disk_size['pd-standard'] += int(disk.size) elif disk.type == 'pd-extreme': total_disk_size['pd-extreme'] += int(disk.size) provisions_iops['pd-extreme'] += int(disk.provisionediops or 0) else: op.add_skipped( vm, reason=('Disk-Type {} is not supported with this gcpdiag runbook,' ' disk name - {}').format(disk.type, disk.name)) # Getting dirty with logic based on different disk types, Machine types, CPU counts etc. for disktypes in total_disk_size.items(): disktype = disktypes[0] if total_disk_size[disktype] > 0 and cpu_count > 0: if vm_family in ['a', 'f', 'g', 'm']: if vm.machine_type().split('-')[0].upper() in [ 'A2', 'A3', 'F1', 'G2', 'M1', 'M2', 'M3' ]: next_hop = 'Machine type' next_hop_val = vm.machine_type() search_str = vm.machine_type().split('-')[0].upper() if search_str == 'A2' and 'ultragpu' in next_hop_val: search_str = search_str + ' Ultra VMs' elif search_str == 'A2' and 'highgpu' in next_hop_val: search_str = search_str + ' Ultra VMs' else: search_str = search_str + ' VMs' data = self.limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) # upto first 100GB, pd-standard disks have fixed IO limits if disktype == 'pd-standard' and int( total_disk_size[disktype]) < 100: op.info(( '\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Read-IOPS Count: {},' '\n\t Read-Throughput: {} MB/s,' '\n\t Write-IOPS Count: {},' '\n\t Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) self.actual_usage_comparision(vm, disktype, 75 * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision(vm, disktype, 150 * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') elif disktype == 'pd-extreme' and vm.machine_type() in [ 'g1-small', 'f1-micro' ]: op.add_skipped( vm, reason=('The script do not support ' 'pd-extreme disk type with machine type {} \n' ).format(next_hop_val)) else: op.info( ('IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[0], data[1]) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[4], data[5]) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: op.add_failed( vm, reason= ('The machine type {} is not supported with this gcpdiag runbook' ).format(vm.machine_type()), remediation= 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,' ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3') elif vm_family in ['c', 'h', 'z']: if vm.machine_type().split('-')[0].upper() in [ 'C2', 'C2D', 'C3', 'C3D', 'H3', 'Z3' ]: next_hop = 'VM vCPU count' next_hop_val = str(cpu_count) search_str = vm.machine_type().split('-')[0].upper() + ' VMs' # upto first 100GB, pd-standard disks have fixed IO limits if disktype == 'pd-standard' and int( total_disk_size[disktype]) < 100: op.info(( '\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Read-IOPS Count: {},' '\n\t Read-Throughput: {} MB/s,' '\n\t Write-IOPS Count: {},' '\n\t Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) self.actual_usage_comparision(vm, disktype, 75 * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision(vm, disktype, 150 * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') elif disktype == 'pd-extreme': # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support data = self.limit_calculator(limits_data, mach_fam_json_data, 'pd-ssd', int(total_disk_size['pd-extreme']), search_str, next_hop, next_hop_val) op.info( ('IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), min(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[1], provisions_iops['pd-extreme']) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[5], provisions_iops['pd-extreme']) * 0.9, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: data = self.limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) op.info( ('IOPS and Throughput limits available for VM DiskType - {},' '\n\t Total DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[0], data[1]) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[4], data[5]) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: op.add_failed( vm, reason= ('The machine type {} is not supported with this gcpdiag runbook' ).format(vm.machine_type()), remediation= 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,' ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3') elif vm_family == 't': # Logic to fetch details for T2 family type if vm.machine_type().split('-')[0].upper() in ['T2D', 'T2A']: next_hop = 'VM vCPU count' if vm.machine_type().split('-')[0].upper() == 'T2D': # T2D Family if disktype == 'pd-standard': if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count > 15: next_hop_val = '16 or more' else: if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count in range(16, 32): next_hop_val = '16-31' elif cpu_count > 31: next_hop_val = '32-60' else: # T2A Family if disktype == 'pd-standard': if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 4): next_hop_val = '2-3' elif cpu_count in range(4, 8): next_hop_val = '4-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count > 15: next_hop_val = '16 or more' else: if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count in range(16, 32): next_hop_val = '16-31' elif cpu_count in range(32, 48): next_hop_val = '32-47' elif cpu_count > 47: next_hop_val = '48' search_str = vm.machine_type().split('-')[0].upper() + ' VMs' if disktype == 'pd-extreme': # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support data = self.limit_calculator(limits_data, mach_fam_json_data, 'pd-ssd', int(total_disk_size['pd-extreme']), search_str, next_hop, next_hop_val) op.info( ('IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), min(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[1], provisions_iops['pd-extreme']) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[5], provisions_iops['pd-extreme']) * 0.9, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') elif disktype == 'pd-standard' and int( total_disk_size[disktype]) < 100: # upto first 100GB, pd-standard disks have fixed IO limits op.info(( '\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Read-IOPS Count: {},' '\n\t Read-Throughput: {} MB/s,' '\n\t Write-IOPS Count: {},' '\n\t Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) self.actual_usage_comparision(vm, disktype, 75 * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision(vm, disktype, 150 * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: data = self.limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) op.info( ('IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[0], data[1]) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[4], data[5]) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: op.add_failed( vm, reason= ('The machine type {} is not supported with this gcpdiag runbook' ).format(vm.machine_type()), remediation= 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,' ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3') elif vm_family == 'e': # Logic to fetch details for E2 family type if vm.machine_type().split('-')[0].upper() in ['E2']: next_hop = 'VM vCPU count' if 'e2-medium' in vm.machine_type(): next_hop_val = 'e2-medium*' else: if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count in range(16, 32): next_hop_val = '16-31' elif cpu_count > 31: next_hop_val = '32 or more' search_str = vm.machine_type().split('-')[0].upper() + ' VMs' if disktype == 'pd-extreme': # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support data = self.limit_calculator(limits_data, mach_fam_json_data, 'pd-ssd', int(total_disk_size['pd-extreme']), search_str, next_hop, next_hop_val) op.info( ('IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), min(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[1], provisions_iops['pd-extreme']) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[5], provisions_iops['pd-extreme']) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') elif disktype == 'pd-standard' and int( total_disk_size[disktype]) < 100: # upto first 100GB, pd-standard disks have fixed IO limits op.info(( '\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Read-IOPS Count: {},' '\n\t Read-Throughput: {} MB/s,' '\n\t Write-IOPS Count: {},' '\n\t Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) self.actual_usage_comparision(vm, disktype, 75 * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision(vm, disktype, 150 * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: data = self.limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) op.info( ('IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[0], data[1]) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[4], data[5]) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: op.add_failed( vm, reason= ('The machine type {} is not supported with this gcpdiag runbook' ).format(vm.machine_type()), remediation= 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,' ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3') elif vm_family == 'n': if vm.machine_type().split('-')[0].upper() in [ 'N1', 'N2', 'N2D', 'CUSTOM' ]: next_hop = 'VM vCPU count' if vm.machine_type().split('-')[0] == 'custom': search_str = 'N1 VMs' else: search_str = vm.machine_type().split('-')[0].upper() + ' VMs' if disktype in ['pd-balanced', 'pd-ssd']: if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count in range(16, 32): next_hop_val = '16-31' elif cpu_count in range(32, 64): next_hop_val = '32-63' elif cpu_count > 63: next_hop_val = '64 or more' data = self.limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) op.info(( 'IOPS and Throughput limits available for VM DiskType - {}, Total DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {}, \n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {}, \n\t Max Write-Throughput: {} MB/s' ).format(disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[0], data[1]) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[4], data[5]) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') elif disktype == 'pd-standard': if cpu_count == 1: next_hop_val = '1' elif cpu_count in range(2, 8): next_hop_val = '2-7' elif cpu_count in range(8, 16): next_hop_val = '8-15' elif cpu_count > 15: next_hop_val = '16 or more' if int(total_disk_size[disktype]) < 100: # upto first 100GB, pd-standard disks have fixed IO limits op.info(( '\n\tIOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Read-IOPS Count: {},' '\n\t Read-Throughput: {} MB/s,' '\n\t Write-IOPS Count: {},' '\n\t Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), 75, 12, 150, 12)) self.actual_usage_comparision(vm, disktype, 75 * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision(vm, disktype, 150 * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: data = self.limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) op.info(( 'IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:,' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[0], data[1]), min(data[2], data[3]), min(data[4], data[5]), min(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[0], data[1]) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[4], data[5]) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') elif disktype == 'pd-extreme': if search_str == 'N2 VMs' and cpu_count > 63: next_hop = 'Machine type' next_hop_val = vm.machine_type() data = self.limit_calculator(limits_data, mach_fam_json_data, disktype, int(total_disk_size[disktype]), search_str, next_hop, next_hop_val) op.info(( 'IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), max(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), max(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[1], provisions_iops['pd-extreme']) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[5], provisions_iops['pd-extreme']) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: next_hop = 'VM vCPU count' data = self.limit_calculator(limits_data, mach_fam_json_data, 'pd-ssd', int(total_disk_size['pd-extreme']), search_str, next_hop, next_hop_val) # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support op.info(( 'IOPS and Throughput limits available for VM DiskType - {},' '\n\tTotal DiskSize: {}:' '\n\n\t Max Read-IOPS Count: {},' '\n\t Max Read-Throughput: {} MB/s,' '\n\t Max Write-IOPS Count: {},' '\n\t Max Write-Throughput: {} MB/s\n').format( disktype, int(total_disk_size[disktype]), min(data[1], provisions_iops['pd-extreme']), max(data[2], data[3]), min(data[5], provisions_iops['pd-extreme']), max(data[6], data[7]))) self.actual_usage_comparision( vm, disktype, min(data[1], provisions_iops['pd-extreme']) * disk_io_util_threshold, 'max_read_ops_count') self.actual_usage_comparision( vm, disktype, max(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000, 'max_read_bytes_count') self.actual_usage_comparision( vm, disktype, min(data[5], provisions_iops['pd-extreme']) * disk_io_util_threshold, 'max_write_ops_count') self.actual_usage_comparision( vm, disktype, max(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000, 'max_write_bytes_count') else: op.add_failed( vm, reason= ('The machine type {} is not supported with this gcpdiag runbook' ).format(vm.machine_type()), remediation= 'You may only run this runbook for any of the below machine family:' 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,' ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3') else: op.add_failed( vm, reason= ('The machine type {} is not supported with this gcpdiag runbook' ).format(vm.machine_type()), remediation= 'You may only run this runbook for any of the below machine family:' 'A, C, E, G, F, H, N, M, T, Z') def limit_calculator(self, limits_data, mach_fam_json_data, disktype: str, total_disk_size: int, search_str: str, next_hop: str, next_hop_val: str): # Data fetch for limits per GB and Baseline r_iops_limit_per_gb = float( limits_data['iops'][disktype]['Read IOPS per GiB']) w_iops_limit_per_gb = float( limits_data['iops'][disktype]['Write IOPS per GiB']) r_throughput_limit_per_gb = float( limits_data['throughput'][disktype]['Throughput per GiB (MiBps)']) w_throughput_limit_per_gb = float( limits_data['throughput'][disktype]['Throughput per GiB (MiBps)']) baseline_iops = float( limits_data['baseline'][disktype]['Baseline IOPS per VM']) baseline_throughput = float( limits_data['baseline'][disktype]['Baseline Throughput (MiBps) per VM']) # Calculating VM Baseline performance vm_baseline_performance_r_iops = baseline_iops + (r_iops_limit_per_gb * total_disk_size) vm_baseline_performance_w_iops = baseline_iops + (w_iops_limit_per_gb * total_disk_size) vm_baseline_performance_r_throughput = baseline_throughput + ( r_throughput_limit_per_gb * total_disk_size) vm_baseline_performance_w_throughput = baseline_throughput + ( w_throughput_limit_per_gb * total_disk_size) max_read_throuput = 10000000 max_write_throuput = 10000000 max_read_iops = 10000000 max_write_iops = 10000000 for mach_fam_catagory in mach_fam_json_data: if search_str and search_str in mach_fam_catagory: for item in mach_fam_json_data[mach_fam_catagory][disktype]: if item[next_hop] == next_hop_val: max_write_iops = item['Maximum write IOPS'] max_read_iops = item['Maximum read IOPS'] max_read_throuput = item['Maximum read throughput (MiBps)'] max_write_throuput = item['Maximum write throughput (MiBps)'] return (vm_baseline_performance_r_iops, max_read_iops, vm_baseline_performance_r_throughput, max_read_throuput, vm_baseline_performance_w_iops, max_write_iops, vm_baseline_performance_w_throughput, max_write_throuput) def actual_usage_comparision(self, vm: gce.Instance, disktype: str, utilization_threshold: float, metric_name: str): mon_within_str = f'within d\'{self.start_formatted_string}\', d\'{self.end_formatted_string}\'' if disktype == 'pd-balanced': storage_type = 'PD-Balanced' elif disktype == 'pd-extreme': storage_type = 'PD-Extreme' else: storage_type = disktype project = crm.get_project(op.get(flags.PROJECT_ID)) try: metric_name_value = metric_name comp = monitoring.query( op.get(flags.PROJECT_ID), """ fetch gce_instance | metric 'compute.googleapis.com/instance/disk/{}' | filter (resource.instance_id == '{}') && (metric.storage_type == '{}') | group_by 1m, [value_max_count: max(value.{})] | every 1m | group_by [], [value_max_count_max_max: max(value_max_count)] | filter value_max_count_max_max >= {} | {} """.format(metric_name, vm.id, storage_type, metric_name_value, utilization_threshold, mon_within_str)) except googleapiclient.errors.HttpError: op.add_skipped( project, reason= ('Not able to fetch monitoring metric {} data for VM {} - Disktype - {}' ).format(metric_name, op.get(flags.INSTANCE_NAME), disktype)) else: if comp: for compval in comp.items(): if len(compval[1]['values']) > 2: op.add_failed( vm, reason= ('{} usage is reaching beyond optimal limits for disk type {} for this VM' ).format(metric_name, storage_type), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, status=vm.status)) else: op.add_ok( vm, reason=( '{} usage is within optimal limits for disktype {}').format( metric_name, storage_type)) else: op.add_ok( vm, reason=('{} usage is within optimal limits for disktype {}').format( metric_name, storage_type)) class VmPerformanceEnd(runbook.EndStep): """Finalize VM performance diagnostics.""" def execute(self): """Finalize VM performance diagnostics.""" response = None if not config.get(flags.INTERACTIVE_MODE): response = op.prompt( kind=op.CONFIRMATION, message= f'Are you able to find issues related to {op.get(flags.INSTANCE_NAME)} ?', choice_msg='Enter an option: ') if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gce/vm_performance_test.py ================================================ # Copyright 2024 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. """Test class for gce/VmPerformance.""" import datetime import json import unittest from datetime import timezone from unittest import mock import apiclient import googleapiclient.errors from gcpdiag import config from gcpdiag.queries import apis_stub, crm, gce from gcpdiag.runbook import gce as gce_runbook from gcpdiag.runbook import op, snapshot_test_base from gcpdiag.runbook.gce import flags, vm_performance class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gce_runbook runbook_name = 'gce/vm-performance' config.init({'auto': True, 'interface': 'cli'}) min_cpu_platform = 'Intel Ice Lake' rule_parameters = [ { 'project_id': 'gcpdiag-gce-vm-performance', 'instance_name': 'faulty-linux-ssh', 'zone': 'europe-west2-a', }, { 'project_id': 'gcpdiag-gce-vm-performance', 'instance_name': 'faulty-windows-ssh', 'zone': 'europe-west2-a', }, ] class VmPerformanceTest(unittest.TestCase): def test_legacy_parameter_handler(self): runbook = vm_performance.VmPerformance() parameters = {'name': 'test-instance', 'project_id': 'test-project'} runbook.legacy_parameter_handler(parameters) self.assertNotIn('name', parameters) self.assertIn('instance_name', parameters) self.assertEqual(parameters['instance_name'], 'test-instance') self.assertEqual(parameters['project_id'], 'test-project') class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class VmPerformanceStepTestBase(unittest.TestCase): """Base class for VM performance step tests.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.params = { flags.PROJECT_ID: 'test-project', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'test-instance', flags.START_TIME: datetime.datetime(2025, 10, 27, tzinfo=datetime.timezone.utc), flags.END_TIME: datetime.datetime(2025, 10, 28, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params self.mock_gce_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance')) self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_monitoring_query = self.enterContext( mock.patch('gcpdiag.queries.monitoring.query')) self.mock_logs_realtime_query = self.enterContext( mock.patch('gcpdiag.queries.logs.realtime_query')) self.mock_gce_get_all_disks_of_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_all_disks_of_instance')) self.mock_instance = mock.Mock(spec=gce.Instance) self.mock_instance.project_id = 'test-project' self.mock_instance.zone = 'us-central1-a' self.mock_instance.name = 'test-instance' self.mock_instance.id = '12345' self.mock_instance.is_running = True self.mock_instance.disks = [{'deviceName': 'disk-1'}] self.mock_instance.machine_type.return_value = 'n1-standard-1' self.mock_instance.laststarttimestamp.return_value = ( '2025-10-27T10:00:00.000000+00:00') self.mock_instance.laststoptimestamp.return_value = None self.mock_gce_get_instance.return_value = self.mock_instance self.mock_disk = mock.Mock(spec=gce.Disk) self.mock_project = mock.Mock(spec=crm.Project) self.mock_project.id = 'test-project' self.mock_crm_get_project.return_value = self.mock_project class VmPerformanceStartTest(VmPerformanceStepTestBase): """Test VmPerformanceStart step.""" def test_instance_running(self): step = vm_performance.VmPerformanceStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_gce_get_instance.assert_called_once_with( project_id='test-project', zone='us-central1-a', instance_name='test-instance', ) self.assertEqual(self.operator.parameters[flags.ID], '12345') self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_skipped.assert_not_called() def test_instance_not_running(self): self.mock_instance.is_running = False self.mock_instance.status = 'TERMINATED' step = vm_performance.VmPerformanceStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_instance_not_found(self): self.mock_gce_get_instance.side_effect = googleapiclient.errors.HttpError( mock.Mock(status=404), b'not found') step = vm_performance.VmPerformanceStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_instance_name_missing_id_provided(self): self.params[flags.ID] = '12345' self.params[flags.INSTANCE_NAME] = None step = vm_performance.VmPerformanceStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_gce_get_instance.assert_called_once_with( project_id='test-project', zone='us-central1-a', instance_name=None) self.assertEqual(self.operator.parameters[flags.INSTANCE_NAME], 'test-instance') class DiskHealthCheckTest(VmPerformanceStepTestBase): """Test DiskHealthCheck step.""" def test_healthy_disk(self): self.mock_monitoring_query.return_value = [] step = vm_performance.DiskHealthCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_monitoring_query.assert_called_once() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() def test_unhealthy_disk(self): self.mock_monitoring_query.return_value = [{'metric': 'data'}] step = vm_performance.DiskHealthCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_monitoring_query.assert_called_once() self.mock_interface.add_failed.assert_called_once() self.mock_interface.add_ok.assert_not_called() class CpuOvercommitmentCheckTest(VmPerformanceStepTestBase): """Test CpuOvercommitmentCheck step.""" def setUp(self): super().setUp() self.mock_instance.is_sole_tenant_vm = False self.mock_instance.machine_type.return_value = 'e2-standard-2' self.mock_instance.min_cpu_platform.return_value = 'Intel Broadwell' def test_e2_cpu_not_overcommitted(self): self.mock_monitoring_query.side_effect = [ # cpu_count_query result { 'some_id': { 'values': [[2]] } }, # cpu_overcomit_metrics result [], ] step = vm_performance.CpuOvercommitmentCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_monitoring_query.call_count, 2) self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() def test_e2_cpu_overcommitted(self): self.mock_monitoring_query.side_effect = [ # cpu_count_query result { 'some_id': { 'values': [[2]] } }, # cpu_overcomit_metrics result [{ 'metric': 'data' }], ] step = vm_performance.CpuOvercommitmentCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_monitoring_query.call_count, 2) self.mock_interface.add_failed.assert_called_once() self.mock_interface.add_ok.assert_not_called() def test_sole_tenant_cpu_not_overcommitted(self): self.mock_instance.is_sole_tenant_vm = True self.mock_instance.machine_type.return_value = 'n1-standard-1' self.mock_monitoring_query.side_effect = [ { 'some_id': { 'values': [[1]] } }, [], ] step = vm_performance.CpuOvercommitmentCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_monitoring_query.call_count, 2) self.mock_interface.add_ok.assert_called_once() def test_not_e2_or_sole_tenant_skipped(self): self.mock_instance.machine_type.return_value = 'n1-standard-1' step = vm_performance.CpuOvercommitmentCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_monitoring_query.assert_not_called() self.mock_interface.add_skipped.assert_called_once() def test_no_cpu_count_info(self): self.mock_monitoring_query.return_value = [] step = vm_performance.CpuOvercommitmentCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_monitoring_query.assert_called_once() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_skipped.assert_not_called() self.mock_interface.info.assert_called() @mock.patch('gcpdiag.runbook.gce.vm_performance.datetime') def test_instance_just_started_within_window(self, mock_datetime): # Mock current time to be close to laststarttimestamp mock_now = datetime.datetime(2025, 10, 27, 10, 2, 0, tzinfo=datetime.timezone.utc) mock_datetime.now.return_value = mock_now mock_datetime.strptime.side_effect = datetime.datetime.strptime mock_datetime.timedelta = datetime.timedelta self.mock_instance.is_running = False self.mock_instance.laststoptimestamp.return_value = ( '2025-10-27T09:55:00.000000+00:00') self.mock_monitoring_query.side_effect = [ { 'some_id': { 'values': [[2]] } }, [], ] step = vm_performance.CpuOvercommitmentCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_monitoring_query.call_count, 2) query_string = self.mock_monitoring_query.call_args_list[0][0][1] self.assertIn("within 9h, d'2025/10/27 09:55:00'", query_string) class DiskAvgIOLatencyCheckTest(VmPerformanceStepTestBase): """Test DiskAvgIOLatencyCheck step.""" def setUp(self): super().setUp() self.mock_disk = mock.Mock(spec=gce.Disk) self.mock_disk.name = 'disk-1' self.mock_disk.type = 'pd-balanced' self.mock_gce_get_all_disks_of_instance.return_value = { 'disk-1': self.mock_disk } def test_latency_ok(self): self.mock_monitoring_query.return_value = [] step = vm_performance.DiskAvgIOLatencyCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_monitoring_query.assert_called_once() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_not_called() def test_latency_high(self): self.mock_monitoring_query.return_value = [{'metric': 'data'}] step = vm_performance.DiskAvgIOLatencyCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_monitoring_query.assert_called_once() self.mock_interface.add_failed.assert_called_once() self.mock_interface.add_ok.assert_not_called() def test_unsupported_disk_type(self): self.mock_disk.type = 'local-ssd' step = vm_performance.DiskAvgIOLatencyCheck() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_monitoring_query.assert_not_called() self.mock_interface.add_skipped.assert_called_once() class CheckLiveMigrationsTest(VmPerformanceStepTestBase): """Test CheckLiveMigrations step.""" def setUp(self): super().setUp() self.add_child_patch = self.enterContext( mock.patch( 'gcpdiag.runbook.gce.vm_performance.CheckLiveMigrations.add_child')) def test_no_live_migrations(self): self.mock_logs_realtime_query.return_value = [] step = vm_performance.CheckLiveMigrations() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_logs_realtime_query.assert_called_once() self.mock_interface.add_ok.assert_called_once() self.add_child_patch.assert_called_once() self.assertIsInstance( self.add_child_patch.call_args[0][0], vm_performance.DiskIopsThroughputUtilisationChecks, ) def test_live_migrations_found(self): self.mock_logs_realtime_query.return_value = [{ 'timestamp': '2025-10-27T11:00:00.000000Z' }] step = vm_performance.CheckLiveMigrations() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_logs_realtime_query.assert_called_once() self.mock_interface.add_ok.assert_not_called() self.assertEqual(self.add_child_patch.call_count, 2) self.assertIsInstance( self.add_child_patch.call_args_list[0][0][0], vm_performance.DiskIopsThroughputUtilisationChecks, ) self.assertIsInstance( self.add_child_patch.call_args_list[1][0][0], vm_performance.DiskIopsThroughputUtilisationChecks, ) limits_per_gb_data = """{ "iops": { "pd-balanced": {"Read IOPS per GiB": "6", "Write IOPS per GiB": "6"}, "pd-ssd": {"Read IOPS per GiB": "30", "Write IOPS per GiB": "30"}, "pd-standard": {"Read IOPS per GiB": "0.75", "Write IOPS per GiB": "1.5"}, "pd-extreme": {"Read IOPS per GiB": "0", "Write IOPS per GiB": "0"} }, "throughput": { "pd-balanced": {"Throughput per GiB (MiBps)": "0.28"}, "pd-ssd": {"Throughput per GiB (MiBps)": "0.48"}, "pd-standard": {"Throughput per GiB (MiBps)": "0.12"}, "pd-extreme": {"Throughput per GiB (MiBps)": "0"} }, "baseline": { "pd-balanced": {"Baseline IOPS per VM": "0", "Baseline Throughput (MiBps) per VM": "0"}, "pd-ssd": {"Baseline IOPS per VM": "0", "Baseline Throughput (MiBps) per VM": "0"}, "pd-standard": {"Baseline IOPS per VM": "0", "Baseline Throughput (MiBps) per VM": "0"}, "pd-extreme": {"Baseline IOPS per VM": "0", "Baseline Throughput (MiBps) per VM": "0"} } }""" n_family_data = """{ "N1 VMs": {"pd-balanced": [{"VM vCPU count": "1", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}], "pd-standard": [{"VM vCPU count": "1", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}]}, "N2 VMs": {"pd-extreme": [{"Machine type": "n2-standard-80", "Maximum read IOPS": 100000, "Maximum write IOPS": 100000, "Maximum read throughput (MiBps)": 4000, "Maximum write throughput (MiBps)": 4000}], "pd-standard": [{"VM vCPU count": "1", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}]}, "N2D VMs": {"pd-standard": [{"VM vCPU count": "2-7", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}]} }""" c_family_data = """{ "C2 VMs": {"pd-ssd": [{"VM vCPU count": "4", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}]}, "C3 VMs": {"pd-ssd": [{"VM vCPU count": "4", "Maximum read IOPS": 25000, "Maximum write IOPS": 25000, "Maximum read throughput (MiBps)": 1200, "Maximum write throughput (MiBps)": 1200}]} }""" t_family_data = """{ "T2D VMs": {"pd-standard": [{"VM vCPU count": "2-7", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}]}, "T2A VMs": {"pd-standard": [{"VM vCPU count": "4-7", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}]} }""" e_family_data = """{ "E2 VMs": {"pd-balanced": [{"VM vCPU count": "2-7", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}], "pd-ssd": [{"VM vCPU count": "2-7", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}], "pd-extreme": [{"VM vCPU count": "2-7", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}], "pd-standard": [{"VM vCPU count": "2-7", "Maximum read IOPS": 15000, "Maximum write IOPS": 15000, "Maximum read throughput (MiBps)": 240, "Maximum write throughput (MiBps)": 240}]} }""" a_family_data = """{ "A2 VMs": {"pd-balanced": [{"Machine type": "a2-highgpu-1g", "Maximum read IOPS": 3000, "Maximum write IOPS": 3000, "Maximum read throughput (MiBps)": 120, "Maximum write throughput (MiBps)": 120}]}, "A2 Ultra VMs": {"pd-balanced": [{"Machine type": "a2-ultragpu-1g", "Maximum read IOPS": 3000, "Maximum write IOPS": 3000, "Maximum read throughput (MiBps)": 120, "Maximum write throughput (MiBps)": 120}]}, "F1 VMs": {}, "G2 VMs": {}, "M1 VMs": {"pd-ssd": [{"Machine type": "m1-ultramem-40", "Maximum read IOPS": 60000, "Maximum write IOPS": 60000, "Maximum read throughput (MiBps)": 1200, "Maximum write throughput (MiBps)": 1200}]}, "M2 VMs": {}, "M3 VMs": {} }""" class DiskIopsThroughputUtilisationChecksTest(VmPerformanceStepTestBase): """Test DiskIopsThroughputUtilisationChecks step.""" def setUp(self): super().setUp() self.mock_disk = mock.Mock(spec=gce.Disk) self.mock_disk.name = 'disk-1' self.mock_disk.type = 'pd-balanced' self.mock_disk.size = 100 self.mock_disk.provisionediops = 0 self.mock_gce_get_all_disks_of_instance.return_value = { 'disk-1': self.mock_disk } self.mock_monitoring_query.side_effect = [ # cpu_count_query { '1': { 'values': [[1]] } }, # actual_usage_comparison query 1 [], # actual_usage_comparison query 2 [], # actual_usage_comparison query 3 [], # actual_usage_comparison query 4 [], ] @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_n1_pd_balanced_ok(self, mock_json_load): mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_c2_pd_ssd_ok(self, mock_json_load): self.mock_instance.machine_type.return_value = 'c2-standard-4' self.mock_monitoring_query.side_effect = [{ '1': { 'values': [[4]] } }, [], [], [], []] self.mock_disk.type = 'pd-ssd' self.mock_gce_get_all_disks_of_instance.return_value = { 'disk-1': self.mock_disk } mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(c_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_n1_pd_balanced_high_usage(self, mock_json_load): self.mock_monitoring_query.side_effect = [ # cpu_count_query { '1': { 'values': [[1]] } }, { 'some_id': { 'values': [['val1'], ['val2'], ['val3']] } }, {}, { 'some_id': { 'values': [['val1'], ['val2'], ['val3']] } }, {}, ] mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_failed.call_count, 2) self.assertEqual(self.mock_interface.add_ok.call_count, 2) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_t2d_pd_standard_ok(self, mock_json_load): self.mock_instance.machine_type.return_value = 't2d-standard-4' self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[4]] } }, [], [], [], [], ] self.mock_disk.type = 'pd-standard' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(t_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_e2_pd_balanced_ok(self, mock_json_load): self.mock_instance.machine_type.return_value = 'e2-standard-4' self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[4]] } }, [], [], [], [], ] self.mock_disk.type = 'pd-balanced' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(e_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_n2_pd_extreme_ok(self, mock_json_load): self.mock_instance.machine_type.return_value = 'n2-standard-80' # > 63 cpus self.mock_disk.type = 'pd-extreme' self.mock_disk.provisionediops = 50000 self.mock_monitoring_query.side_effect = [ # cpu_count_query { '1': { 'values': [[80]] } }, # actual_usage_comparison queries {}, {}, {}, {}, ] mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_unsupported_machine_type(self, mock_json_load): self.mock_instance.machine_type.return_value = 'x1-standard-1' self.mock_monitoring_query.side_effect = [{'1': {'values': [[1]]}}] mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertEqual(mock_json_load.call_count, 2) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_custom_machine_type(self, mock_json_load): self.mock_instance.machine_type.return_value = 'custom-2-4096' self.mock_monitoring_query.side_effect = [{ '1': { 'values': [[2]] } }, [], [], [], []] self.mock_disk.type = 'pd-balanced' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_g1_small_unsupported_family(self, mock_json_load): self.mock_instance.machine_type.return_value = 'g1-small' self.mock_disk.type = 'pd-extreme' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(a_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_e2_medium_machine_type(self, mock_json_load): self.mock_instance.machine_type.return_value = 'e2-medium' self.mock_monitoring_query.side_effect = [{ '1': { 'values': [[2]] } }, [], [], [], []] self.mock_disk.type = 'pd-balanced' e_family_data_medium = json.loads(e_family_data) e_family_data_medium['E2 VMs']['pd-balanced'] = [{ 'VM vCPU count': 'e2-medium*', 'Maximum read IOPS': 15000, 'Maximum write IOPS': 15000, 'Maximum read throughput (MiBps)': 240, 'Maximum write throughput (MiBps)': 240 }] mock_json_load.side_effect = [ json.loads(limits_per_gb_data), e_family_data_medium, ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('gcpdiag.runbook.gce.vm_performance.datetime') @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_instance_just_stopped_window(self, mock_json_load, mock_datetime): # Mock current time to be close to laststarttimestamp mock_now = datetime.datetime(2025, 10, 27, 10, 2, 0, tzinfo=datetime.timezone.utc) mock_datetime.now.return_value = mock_now mock_datetime.strptime.side_effect = datetime.datetime.strptime mock_datetime.timedelta = datetime.timedelta self.mock_instance.is_running = False self.mock_instance.laststoptimestamp.return_value = ( '2025-10-27T09:55:00.000000+00:00') mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_monitoring_query.call_count, 5) query_string = self.mock_monitoring_query.call_args_list[0][0][1] self.assertIn("within 9h, d'2025/10/27 09:55:00'", query_string) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_actual_usage_comparision_http_error(self, mock_json_load): mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[1]] } }, # CPU count googleapiclient.errors.HttpError( mock.Mock(status=500), b'internal error'), # actual_usage_comparision googleapiclient.errors.HttpError(mock.Mock(status=500), b'internal error'), googleapiclient.errors.HttpError(mock.Mock(status=500), b'internal error'), googleapiclient.errors.HttpError(mock.Mock(status=500), b'internal error'), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_interface.add_skipped.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_t2a_machine_types(self, mock_json_load): """Targets logic for T2A machine types.""" self.mock_instance.machine_type.return_value = 't2a-standard-4' self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[4]] } }, [], [], [], [], ] self.mock_disk.type = 'pd-standard' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(t_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_m_family_machine_types(self, mock_json_load): """Targets logic for M family machine types.""" self.mock_instance.machine_type.return_value = 'm1-ultramem-40' self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[40]] } }, [], [], [], [], ] self.mock_disk.type = 'pd-ssd' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(a_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_c3_machine_types_pd_extreme(self, mock_json_load): """Targets logic for C3 machine types with pd-extreme.""" self.mock_instance.machine_type.return_value = 'c3-standard-4' self.mock_monitoring_query.side_effect = [{ '1': { 'values': [[4]] } }, [], [], [], []] self.mock_disk.type = 'pd-extreme' self.mock_disk.provisionediops = 10000 mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(c_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_n2d_machine_types_pd_standard(self, mock_json_load): """Targets logic for N2D machine types with pd-standard.""" self.mock_instance.machine_type.return_value = 'n2d-standard-2' self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[2]] } }, [], [], [], [], ] self.mock_disk.type = 'pd-standard' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_e2_pd_extreme(self, mock_json_load): """Targets logic for E2 machine types with pd-extreme.""" self.mock_instance.machine_type.return_value = 'e2-standard-4' self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[4]] } }, [], [], [], [], ] self.mock_disk.type = 'pd-extreme' self.mock_disk.provisionediops = 12000 mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(e_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_limit_calculator_iops_write(self, mock_json_load): """Targets limit_calculator to ensure write IOPS are returned correctly.""" self.mock_instance.machine_type.return_value = 'n1-standard-1' self.mock_disk.type = 'pd-balanced' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() limits_data_loaded = json.loads(limits_per_gb_data) mach_fam_json_data_loaded = json.loads(n_family_data) results = step.limit_calculator( limits_data_loaded, mach_fam_json_data_loaded, 'pd-balanced', 100, 'N1 VMs', 'VM vCPU count', '1', ) self.assertEqual(results[5], 15000) # max_write_iops self.assertEqual(results[4], 600) # vm_baseline_performance_w_iops class VmPerformanceEndTest(VmPerformanceStepTestBase): """Test VmPerformanceEnd step.""" def setUp(self): super().setUp() self.mock_op_prompt = self.enterContext( mock.patch('gcpdiag.runbook.op.prompt')) self.mock_config_get = self.enterContext(mock.patch('gcpdiag.config.get')) def test_end_step_no_interactive_mode_no_answer(self): self.mock_config_get.return_value = False self.mock_op_prompt.return_value = op.NO step = vm_performance.VmPerformanceEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_prompt.assert_called_once() self.mock_interface.info.assert_called_once() def test_end_step_no_interactive_mode_yes_answer(self): self.mock_config_get.return_value = False self.mock_op_prompt.return_value = op.YES step = vm_performance.VmPerformanceEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_prompt.assert_called_once() self.mock_interface.info.assert_not_called() def test_end_step_interactive_mode(self): self.mock_config_get.return_value = True step = vm_performance.VmPerformanceEnd() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_op_prompt.assert_not_called() class VmPerformanceBuildTreeTest(unittest.TestCase): @mock.patch('gcpdiag.runbook.gce.vm_performance.VmPerformance.add_step') @mock.patch('gcpdiag.runbook.gce.vm_performance.VmPerformance.add_start') @mock.patch('gcpdiag.runbook.gce.vm_performance.VmPerformance.add_end') @mock.patch('gcpdiag.runbook.op.get') def test_build_tree(self, mock_op_get, mock_add_end, mock_add_start, mock_add_step): mock_op_get.return_value = 'test_value' runbook = vm_performance.VmPerformance() runbook.build_tree() mock_add_start.assert_called_once() self.assertIsInstance(mock_add_start.call_args[1]['step'], vm_performance.VmPerformanceStart) step_instances = [call[1]['child'] for call in mock_add_step.call_args_list] self.assertTrue( any( isinstance(s, gce_runbook.generalized_steps.HighVmCpuUtilization) for s in step_instances)) self.assertTrue( any( isinstance(s, gce_runbook.generalized_steps.HighVmMemoryUtilization) for s in step_instances)) self.assertTrue( any( isinstance(s, gce_runbook.generalized_steps.HighVmDiskUtilization) for s in step_instances)) self.assertTrue( any( isinstance(s, vm_performance.CpuOvercommitmentCheck) for s in step_instances)) self.assertTrue( any( isinstance(s, vm_performance.DiskHealthCheck) for s in step_instances)) self.assertTrue( any( isinstance(s, vm_performance.DiskAvgIOLatencyCheck) for s in step_instances)) self.assertTrue( any( isinstance(s, gce_runbook.generalized_steps.VmSerialLogsCheck) for s in step_instances)) self.assertTrue( any( isinstance(s, vm_performance.CheckLiveMigrations) for s in step_instances)) mock_add_end.assert_called_once() self.assertIsInstance(mock_add_end.call_args[1]['step'], vm_performance.VmPerformanceEnd) class VmPerformanceCoverageTest(VmPerformanceStepTestBase): """Additional coverage tests for the complex disk logic.""" def setUp(self): super().setUp() self.mock_monitoring_query.return_value = { '1': { 'values': [[4]] } # 4 vCPUs default } self.mock_disk = mock.Mock(spec=gce.Disk) self.mock_disk.name = 'disk-1' self.mock_disk.size = 200 self.mock_disk.provisionediops = 0 self.mock_gce_get_all_disks_of_instance.return_value = { 'disk-1': self.mock_disk } @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_pd_standard_small_disk_limits(self, mock_json_load): """Targets logic for pd-standard disks < 100GB.""" self.mock_disk.type = 'pd-standard' self.mock_disk.size = 50 # < 100GB trigger self.mock_instance.machine_type.return_value = 'n1-standard-4' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data) ] self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[4]] } }, { 'some_id': { 'values': [['9999'], ['9999'], ['9999']] } }, {}, {}, {}, ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.assertEqual(self.mock_interface.add_ok.call_count, 3) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_pd_extreme_n2_high_cpu(self, mock_json_load): """Targets pd-extreme logic for N2 VMs > 63 CPUs.""" self.mock_disk.type = 'pd-extreme' self.mock_disk.provisionediops = 50000 self.mock_instance.machine_type.return_value = 'n2-standard-80' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[80]] } }, {}, {}, {}, {}, ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_unsupported_disk_type(self, mock_json_load): """Targets the skipped block for unsupported disk types.""" self.mock_disk.type = 'pd-unknown' self.mock_monitoring_query.return_value = {'1': {'values': [[1]]}} mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(n_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_a2_pd_balanced_ok(self, mock_json_load): """Targets logic for A2 machine types.""" self.mock_instance.machine_type.return_value = 'a2-highgpu-1g' self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[8]] } }, [], [], [], [], ] self.mock_disk.type = 'pd-balanced' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(a_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) @mock.patch('builtins.open', mock.mock_open()) @mock.patch('json.load') def test_a2_ultragpu_machine_type(self, mock_json_load): """Targets logic for A2 UltraGPU machine types.""" self.mock_instance.machine_type.return_value = 'a2-ultragpu-1g' self.mock_monitoring_query.side_effect = [ { '1': { 'values': [[12]] } }, [], [], [], [], ] self.mock_disk.type = 'pd-balanced' mock_json_load.side_effect = [ json.loads(limits_per_gb_data), json.loads(a_family_data), ] step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(mock_json_load.call_count, 2) self.assertEqual(self.mock_monitoring_query.call_count, 5) self.assertEqual(self.mock_interface.add_ok.call_count, 4) def test_disk_iops_utilisation_unbound_local(self): """Reproduces UnboundLocalError when monitoring.query raises HttpError.""" self.params[flags.START_TIME] = datetime.datetime(2024, 1, 1, tzinfo=timezone.utc) self.params[flags.END_TIME] = datetime.datetime(2024, 1, 1, 1, tzinfo=timezone.utc) self.mock_instance.laststarttimestamp.return_value = ( '2024-01-01T00:00:00.000000+00:00') self.mock_instance.is_running = True self.mock_monitoring_query.side_effect = apiclient.errors.HttpError( resp=mock.Mock(status=403), content=b'Forbidden') step = vm_performance.DiskIopsThroughputUtilisationChecks() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/gce/vm_termination.py ================================================ # # Copyright 2024 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. """Module containing VM Termination diagnostic tree and custom steps""" import re from datetime import datetime import googleapiclient.errors from boltons.iterutils import get_path from dateutil import parser from gcpdiag import runbook, utils from gcpdiag.queries import crm, gce, logs from gcpdiag.runbook import exceptions as runbook_exceptions from gcpdiag.runbook import op from gcpdiag.runbook.gce import constants, flags from gcpdiag.runbook.gce import util as gce_util TERMINATION_OPERATION_FILTER = '''(targetId = "{INSTANCE_ID}") AND (operationType = "compute.instances.repair.recreateInstance") OR (operationType = "compute.instances.hostError") OR (operationType = "compute.instances.guestTerminate") OR (operationType = "compute.instances.preempted") OR (operationType = "compute.instances.terminateOnHostMaintenance") OR (operationType = "stop") OR (operationType = "compute.instanceGroupManagers.resizeAdvanced") OR (operationType = "compute.autoscalers.resize") ''' class VmTermination(runbook.DiagnosticTree): """GCE Instance unexpected shutdowns and reboots diagnostics This runbook assists in investigating and understanding the reasons behind unexpected terminations or reboots of GCE Virtual Machines (VMs). Areas investigated: - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud systems due to maintenance events, hardware failures, or resource constraints. - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions, such as API calls made by users or service accounts, including manual shutdowns, restarts, or automated processes impacting VM states. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID hosting the terminated VM.', 'required': True }, flags.INSTANCE_NAME: { 'type': str, 'help': 'The name of the terminated VM. Or provide the id i.e -p id=', 'required': True }, flags.INSTANCE_ID: { 'type': int, 'help': 'The instance ID of the terminated VM. Or provide name instead i.e -p name=' }, flags.ZONE: { 'type': str, 'help': 'The Google Cloud zone where the terminated VM is located.', 'required': True }, flags.START_TIME: { 'type': datetime, 'help': 'The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.END_TIME: { 'type': datetime, 'help': 'The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.OPERATION_TYPE: { 'type': str, 'help': 'The type of operation to investigate. eg. "compute.instances.hostError"', } } def build_tree(self): """Composes the VM runbook tree""" start = VmTerminationStart() self.add_start(start) self.add_step(parent=start, child=TerminationOperationType()) self.add_end(VmTerminationEnd()) class VmTerminationStart(runbook.StartStep): """VM termination pre-runbook checks""" def execute(self): """Validate the provided parameters to investigate VM terminations.""" project = crm.get_project(op.get(flags.PROJECT_ID)) op.put(flags.PROJECT_NUMBER, project.number) vm = None try: name = op.get(flags.INSTANCE_NAME) or op.get(flags.INSTANCE_ID) vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=name) except (googleapiclient.errors.HttpError, KeyError): op.add_skipped( project, reason=('Instance {} does not exist in zone {} or project {}').format( name, op.get(flags.ZONE), op.get(flags.PROJECT_ID))) else: if vm and name.isdigit(): op.put(flags.INSTANCE_NAME, vm.name) elif vm and not name.isdigit(): op.put(flags.INSTANCE_ID, vm.id) # Improvements: output details of the VM as op.info def is_within_window(operation, start_time, end_time): """Check if the operation is within the given time window""" operation_time = parser.parse(operation['startTime']) return start_time <= operation_time <= end_time class TerminationOperationType(runbook.Gateway): """Determine the type of termination Analyzes log entries to identify whether the termination was normal or abnormal from a guest OS perspective. Was the shutdown intentionally issued by a user or a system fault? """ def execute(self): """Investigate VM termination reason.""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: gce_util.ensure_instance_resolved() except (runbook_exceptions.FailedStepError, runbook_exceptions.MissingParameterError) as e: op.add_skipped(project, reason=str(e)) return instance_id = op.get(flags.INSTANCE_ID) operation_type = op.get(flags.OPERATION_TYPE) filter_str = ( f'(targetId = "{instance_id}") AND (operationType = "{operation_type}")' if operation_type else TERMINATION_OPERATION_FILTER.format( INSTANCE_ID=instance_id)) res = gce.get_global_operations( project=op.get(flags.PROJECT_ID), filter_str=filter_str, service_project_number=project.number, order_by='creationTimestamp desc', max_results=5, ) start = op.get(flags.START_TIME) end = op.get(flags.END_TIME) operations = list(filter(lambda o: is_within_window(o, start, end), res)) if operations: # get the most recent termination operation operation_type = get_path(operations[0], ('operationType')) progress = get_path(operations[0], ('progress')) # if part of a mig if progress == 100 and operation_type == constants.IG_INSTANCE_REPAIR_METHOD: mig_recreation = ManagedInstanceGroupRecreation() mig_recreation.status = get_path(operations[0], ('statusMessage')) self.add_child(mig_recreation) elif progress == 100 and operation_type == constants.INSTANCE_PREMPTION_METHOD: preemptible_instance_termination = PreemptibleInstance() preemptible_instance_termination.status = get_path( operations[0], ('statusMessage')) self.add_child(preemptible_instance_termination) elif progress == 100 and operation_type == constants.HOST_ERROR_METHOD: host_error = HostError() host_error.status = get_path(operations[0], ('statusMessage')) self.add_child(host_error) elif progress == 100 and operation_type == constants.GUEST_TERMINATE_METHOD: # Coverage: Differentiate between user and system initiated shutdowns. eg: shutdown due # to integrity monitoring https://cloud.google.com/compute/shielded-vm/docs/ # integrity-monitoring#updating-baseline # Help users to understand the PCRs and how to fix it guest_os_issued_shutdown = GuestOsIssuedShutdown() guest_os_issued_shutdown.status = get_path(operations[0], ('statusMessage')) self.add_child(guest_os_issued_shutdown) elif progress == 100 and operation_type == constants.TERMINATE_ON_HOST_MAINTENANCE_METHOD: terminate_on_host_maintenance = TerminateOnHostMaintenance() terminate_on_host_maintenance.status = get_path(operations[0], ('statusMessage')) self.add_child(terminate_on_host_maintenance) elif progress == 100 and operation_type == 'stop': stop_gateway = StopOperationGateway() stop_gateway.stop_account = get_path(operations[0], ('user')) stop_gateway.operation_name = get_path(operations[0], ('name')) self.add_child(stop_gateway) else: op.add_skipped(project, reason='No matching operations found in time window.') class ManagedInstanceGroupRecreation(runbook.Step): """Investigate if an instance recreation by MIG was normal Determines if the instance was recreated as part of a normal Managed Instance Group (MIG) process. """ template = 'vm_termination::mig_instance_recreation' def execute(self): """Investigate if instance was recreated by a MIG""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) reason = op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status_message=self.status) remediation = 'No action required.' try: if vm.created_by_mig and vm.mig.version_target_reached: remediation = op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path) elif vm.created_by_mig and not vm.mig.version_target_reached: # Coverage: Give more insights into what is preventing the instance from being recreated remediation = op.prep_msg(op.FAILURE_REMEDIATION_ALT1, full_resource_path=vm.full_path) except AttributeError: pass op.add_failed(resource=vm, reason=reason, remediation=remediation) class PreemptibleInstance(runbook.Step): """Investigate the cause of a preemptible VM termination Preemptible VMs are short-lived instances. This step investigates normal or abnormal circumstances leading to termination. """ template = 'vm_termination::preemptible_instance' def execute(self): """Investigate the cause of a Spot VM termination""" try: vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) except googleapiclient.errors.HttpError: op.add_skipped(resource=None, reason='Spot Instance has been deleted.') else: if vm.is_preemptible_vm and vm.is_running: op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status_message=self.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path)) elif vm.is_preemptible_vm and not vm.is_running: op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status_message=self.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1, full_resource_path=vm.full_path)) class HostError(runbook.Step): """Investigate the cause of a host error Host errors should be rare. This step provides insights into the root cause of the issue. """ template = 'vm_termination::host_error' def execute(self): """Investigate the cause of a host error""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status_message=self.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path)) class GuestOsIssuedShutdown(runbook.Step): """Investigate shutdowns issued from within the guest OS This step investigates whether the VM termination was initiated by a user or a system fault within the guest OS. It provides insights into the root cause of the termination. """ template = 'vm_termination::guest_os_issued_shutdown' def execute(self): """Investigate the cause of a guest OS issued shutdown""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) # Coverage: analyze the serial port logs to provide more insights into the termination op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status_message=self.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path)) class TerminateOnHostMaintenance(runbook.Step): """Investigate the cause of termination related to host maintenance Termination on host maintenance is normal behavior. This step verifies if it was expected. This will typically happen during a failed live migration. """ template = 'vm_termination::terminate_on_host_maintenance' status: str def execute(self): """Investigate the cause of termination on host maintenance""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, status_message=self.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path)) class UserOrServiceAccountInitiatedStop(runbook.Step): """Investigate the cause of a user-initiated VM termination This step investigates whether the VM termination was initiated by a user or a system fault. """ template = 'vm_termination::user_stop' stop_account: str def execute(self): """Investigate the cause of a user-initiated VM termination""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) if not vm.is_running: op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, stop_account=self.stop_account), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, stop_account=self.stop_account)) else: op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, stop_account=self.stop_account), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1, full_resource_path=vm.full_path, stop_account=self.stop_account)) class ComputeClusterManagerTermination(runbook.Step): """Investigate termination initiated by GCP GCE Compute Cluster Manager Google's Compute Cluster Manager can terminate instances due to billing issues or other reasons. This step investigates the root cause of the termination. """ template = 'vm_termination::compute_cluster_manager_termination' stop_account: str def execute(self): """Investigate termination initiated by Google's Compute Cluster Manager""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) vpc_project = 'Unknown' network_name = 'Unknown' # try to get more infomratino about the what happened try: network_string = vm.get_network_interfaces[0]['network'] m = re.match(r'^.+/projects/([^/]+)/global/networks/([^/]+)$', network_string) if m: vpc_project, network_name = m.group(1), m.group(2) except googleapiclient.errors.HttpError as e: err = utils.GcpApiError(e) m = re.search(r'projects\/([^\/]+)', str(err.response)) if m: vpc_project = m.group(1) if vpc_project != op.get(flags.PROJECT_ID): op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, stop_account=self.stop_account), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1, full_resource_path=vm.full_path, network_name=network_name, shared_vpc_project=vpc_project, stop_account=self.stop_account)) class StopOperationGateway(runbook.Gateway): """Determine the kind of stop operation Stop operations can be caused by a user, customer-owned service account, or Google workflows due to billing issues or resource policies. """ stop_account: str operation_name: str def execute(self): """Decision point to investigate various stop operation types""" # Termination due to scheduled policy compute_sa = f'service-{op.get(flags.PROJECT_NUMBER)}@compute-system.iam.gserviceaccount.com' if self.stop_account == compute_sa: log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=f'''resource.labels.instance_id="{op.get(flags.INSTANCE_ID)}" operation.id="{self.operation_name}" ''', start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)) if log_entries: for log_entry in log_entries: if get_path(log_entry, ('protoPayload', 'methodName')) == 'ScheduledVMs': scheduled_stop_policy = ScheduledStopPolicy() scheduled_stop_policy.stop_account = self.stop_account self.add_child(scheduled_stop_policy) return elif self.stop_account != constants.GCE_CLUSTER_MANAGER_EMAIL: user_stop = UserOrServiceAccountInitiatedStop() user_stop.stop_account = self.stop_account self.add_child(user_stop) elif self.stop_account == constants.GCE_CLUSTER_MANAGER_EMAIL: compute_cluster_manager_termination = ComputeClusterManagerTermination() compute_cluster_manager_termination.stop_account = self.stop_account self.add_child(compute_cluster_manager_termination) class ScheduledStopPolicy(runbook.Step): """Investigate the cause of a scheduled stop policy This step investigates whether the VM termination was initiated by a scheduled stop policy. """ template = 'vm_termination::scheduled_stop_policy' stop_account: str def execute(self): """Investigate the scheduled stop policy""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) if vm.is_running: op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, stop_account=self.stop_account), remediation=op.prep_msg(op.FAILURE_REMEDIATION, full_resource_path=vm.full_path, stop_account=self.stop_account)) else: op.add_failed(resource=vm, reason=op.prep_msg(op.FAILURE_REASON, full_resource_path=vm.full_path, stop_account=self.stop_account), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1, full_resource_path=vm.full_path, stop_account=self.stop_account)) class VmTerminationEnd(runbook.EndStep): """Finalize the diagnostics process for VM terminations This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for VM terminations. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. """ def execute(self): """Finalize VM terminations diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message='Are you satisfied with the VM termination RCA performed?') if response == op.NO: op.info(message=op.END_MESSAGE) op.interface.rm.generate_report() ================================================ FILE: gcpdiag/runbook/gce/vm_termination_test.py ================================================ # Copyright 2024 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](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. """Snapshot testing and unittest.""" import datetime import unittest from unittest import mock import googleapiclient.errors from gcpdiag.queries import apis_stub from gcpdiag.queries import crm as crm_queries from gcpdiag.queries import gce as gce_queries from gcpdiag.runbook import exceptions as runbook_exceptions from gcpdiag.runbook import op from gcpdiag.runbook.gce import constants, flags, vm_termination DUMMY_PROJECT_ID = 'gcpdiag-gce5-aaaa' DUMMY_PROJECT_NUMBER = 123456012345 class MockMessage: """Mock messages for testing. Simply returns the key to verify template usage. """ def get_msg(self, key, **kwargs): del kwargs return f'{key}' class VmTerminationTestBase(unittest.TestCase): """Base class for VM Termination runbook tests using state-based verification.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.params = { flags.PROJECT_ID: DUMMY_PROJECT_ID, flags.PROJECT_NUMBER: DUMMY_PROJECT_NUMBER, flags.INSTANCE_ID: '111222333', flags.INSTANCE_NAME: 'test-instance', flags.ZONE: 'us-central1-a', flags.START_TIME: datetime.datetime(2025, 3, 18, tzinfo=datetime.timezone.utc), flags.END_TIME: datetime.datetime(2025, 3, 19, tzinfo=datetime.timezone.utc), } self.operator.parameters = self.params self.mock_project = mock.Mock(spec=crm_queries.Project) self.mock_project.number = DUMMY_PROJECT_NUMBER self.enterContext( mock.patch( 'gcpdiag.queries.crm.get_project', return_value=self.mock_project, )) self.mock_vm = mock.Mock(spec=gce_queries.Instance) self.mock_vm.full_path = ( f'projects/{DUMMY_PROJECT_ID}/zones/{self.params[flags.ZONE]}/' f'instances/{self.params[flags.INSTANCE_NAME]}') self.mock_vm.name = self.params[flags.INSTANCE_NAME] self.mock_vm.id = self.params[flags.INSTANCE_ID] self.mock_vm.is_running = True self.mock_get_instance = self.enterContext( mock.patch('gcpdiag.queries.gce.get_instance', return_value=self.mock_vm)) self.gce_get_ops_patch = self.enterContext( mock.patch('gcpdiag.queries.gce.get_global_operations')) def make_operation(op_type, start_time='2025-03-18T12:00:00Z', progress=100, status_message='test', user='test@example.com', name='test-op'): """Utility to create a mock operation dictionary.""" return { 'operationType': op_type, 'startTime': start_time, 'progress': progress, 'statusMessage': status_message, 'user': user, 'name': name, } class TerminationOperationTypeTest(VmTerminationTestBase): """Test TerminationOperationType Gateway coverage.""" def test_host_error_operation(self): self.gce_get_ops_patch.return_value = [ make_operation(constants.HOST_ERROR_METHOD) ] step = vm_termination.TerminationOperationType() with op.operator_context(self.operator): self.operator.set_step(step) self.operator.set_step(step) step.execute() assert any(isinstance(c, vm_termination.HostError) for c in step.steps) def test_stop_operation(self): self.gce_get_ops_patch.return_value = [make_operation('stop')] step = vm_termination.TerminationOperationType() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() assert any( isinstance(c, vm_termination.StopOperationGateway) for c in step.steps) def test_preempted_operation(self): self.gce_get_ops_patch.return_value = [ make_operation(constants.INSTANCE_PREMPTION_METHOD) ] step = vm_termination.TerminationOperationType() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() assert any( isinstance(c, vm_termination.PreemptibleInstance) for c in step.steps) def test_shutdown_operation(self): self.gce_get_ops_patch.return_value = [ make_operation('compute.instances.guestTerminate') ] step = vm_termination.TerminationOperationType() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() assert any( isinstance(c, vm_termination.GuestOsIssuedShutdown) for c in step.steps) def test_mig_repair_operation(self): self.gce_get_ops_patch.return_value = [ make_operation(constants.IG_INSTANCE_REPAIR_METHOD) ] step = vm_termination.TerminationOperationType() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() assert any( isinstance(c, vm_termination.ManagedInstanceGroupRecreation) for c in step.steps) def test_no_relevant_operation(self): self.gce_get_ops_patch.return_value = [make_operation('other-operation')] step = vm_termination.TerminationOperationType() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(len(step.steps), 0) class TestVmTerminationStubs(VmTerminationTestBase): """Test VM Termination runbook steps with mocks and stubs.""" def test_is_within_window(self): operation = {'startTime': '2025-03-18T12:00:00Z'} start = self.params[flags.START_TIME] end = self.params[flags.END_TIME] self.assertTrue(vm_termination.is_within_window(operation, start, end)) def test_start_step_instance_not_found(self): self.mock_get_instance.side_effect = googleapiclient.errors.HttpError( mock.Mock(status=404), b'Not Found') step = vm_termination.VmTerminationStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_termination_op_type_unresolved(self): with op.operator_context(self.operator): with mock.patch( 'gcpdiag.runbook.gce.util.ensure_instance_resolved', side_effect=runbook_exceptions.MissingParameterError('missing')): step = vm_termination.TerminationOperationType() self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_mig_recreation_target_reached(self): self.mock_vm.created_by_mig = True self.mock_vm.mig = mock.Mock(version_target_reached=True) step = vm_termination.ManagedInstanceGroupRecreation() step.status = 'recreating' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once_with( resource=self.mock_vm, reason='failure_reason', remediation='failure_remediation', run_id='test-run', step_execution_id=mock.ANY) def test_preemptible_instance_skipped(self): self.mock_get_instance.side_effect = googleapiclient.errors.HttpError( mock.Mock(status=404), b'Not Found') step = vm_termination.PreemptibleInstance() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_host_error_execution(self): step = vm_termination.HostError() step.status = 'Hardware failure' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_guest_os_shutdown_execution(self): step = vm_termination.GuestOsIssuedShutdown() step.status = 'Power button pressed' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_terminate_on_maintenance_execution(self): step = vm_termination.TerminateOnHostMaintenance() step.status = 'Live migration failed' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_user_stop_stopped_state(self): self.mock_vm.is_running = False step = vm_termination.UserOrServiceAccountInitiatedStop() step.stop_account = 'user@example.com' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_ccm_termination_api_error(self): type(self.mock_vm).get_network_interfaces = mock.PropertyMock( side_effect=googleapiclient.errors.HttpError(mock.Mock( status=403), b'Permission denied')) step = vm_termination.ComputeClusterManagerTermination() step.stop_account = constants.GCE_CLUSTER_MANAGER_EMAIL with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() del type(self.mock_vm).get_network_interfaces def test_stop_gateway_scheduled_policy(self): step = vm_termination.StopOperationGateway() step.stop_account = ( f'service-{DUMMY_PROJECT_NUMBER}@compute-system.iam.gserviceaccount.com' ) step.operation_name = 'test-op' with op.operator_context(self.operator): with mock.patch( 'gcpdiag.queries.logs.realtime_query', return_value=[{ 'protoPayload': { 'methodName': 'ScheduledVMs' } }], ): self.operator.set_step(step) step.execute() assert any( isinstance(c, vm_termination.ScheduledStopPolicy) for c in step.steps) def test_start_step_instance_found_by_id(self): self.operator.parameters[flags.INSTANCE_NAME] = '111222333' step = vm_termination.VmTerminationStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.operator.parameters[flags.INSTANCE_NAME], self.mock_vm.name) def test_start_step_instance_found_by_name(self): self.operator.parameters[flags.INSTANCE_NAME] = 'test-instance' step = vm_termination.VmTerminationStart() with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertEqual(self.operator.parameters[flags.INSTANCE_ID], self.mock_vm.id) def test_mig_recreation_target_not_reached(self): self.mock_vm.created_by_mig = True self.mock_vm.mig = mock.Mock(version_target_reached=False) step = vm_termination.ManagedInstanceGroupRecreation() step.status = 'recreating' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once_with( resource=self.mock_vm, reason='failure_reason', remediation='failure_remediation_a1', run_id='test-run', step_execution_id=mock.ANY) def test_preemptible_instance_not_running(self): self.mock_vm.is_preemptible_vm = True self.mock_vm.is_running = False step = vm_termination.PreemptibleInstance() step.status = 'preempted' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once_with( resource=self.mock_vm, reason='failure_reason', remediation='failure_remediation_a1', run_id='test-run', step_execution_id=mock.ANY) def test_ccm_termination_shared_vpc(self): self.mock_vm.get_network_interfaces = [{ 'network': 'https://www.googleapis.com/compute/v1/projects/shared-vpc-host/global/networks/vpc-1' }] step = vm_termination.ComputeClusterManagerTermination() step.stop_account = constants.GCE_CLUSTER_MANAGER_EMAIL with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_stop_gateway_user_stop(self): step = vm_termination.StopOperationGateway() step.stop_account = 'user@example.com' step.operation_name = 'test-op' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertTrue( any( isinstance(c, vm_termination.UserOrServiceAccountInitiatedStop) for c in step.steps)) def test_stop_gateway_ccm_termination(self): step = vm_termination.StopOperationGateway() step.stop_account = constants.GCE_CLUSTER_MANAGER_EMAIL step.operation_name = 'test-op' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.assertTrue( any( isinstance(c, vm_termination.ComputeClusterManagerTermination) for c in step.steps)) def test_scheduled_stop_policy_running(self): self.mock_vm.is_running = True step = vm_termination.ScheduledStopPolicy() step.stop_account = f'service-{DUMMY_PROJECT_NUMBER}@compute-system.iam.gserviceaccount.com' with op.operator_context(self.operator): self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once_with( resource=self.mock_vm, reason='failure_reason', remediation='failure_remediation', run_id='test-run', step_execution_id=mock.ANY) def test_vm_termination_end_satisfied(self): step = vm_termination.VmTerminationEnd() with op.operator_context(self.operator): with mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES): self.operator.set_step(step) step.execute() self.operator.interface.rm.generate_report.assert_not_called() ================================================ FILE: gcpdiag/runbook/gcf/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/gcf/constants.py ================================================ # Copyright 2024 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. """Constants applicable relevant to only gcf implementation""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.constants import * SERVICE_AGENT_ROLE = 'roles/cloudfunctions.serviceAgent' USER_PRINCIPAL_ROLE = 'roles/iam.serviceAccountUser' ================================================ FILE: gcpdiag/runbook/gcf/failed_deployments.py ================================================ # Copyright 2024 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. """Cloud Run function failed deployments check""" from datetime import datetime import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import config, runbook from gcpdiag.queries import crm, iam, logs from gcpdiag.runbook import op from gcpdiag.runbook.gcf import constants as gcf_const from gcpdiag.runbook.gcf import flags from gcpdiag.runbook.iam import generalized_steps as iam_gs class FailedDeployments(runbook.DiagnosticTree): """ Cloud Run function failed deployments check This runbook will assist users to check reasons for failed deployments of Gen2 cloud functions. Current basic Validations: - Check for existence of Default SA - Check for existence of Cloud function Service Agent - Check for existence of cloud functions Service Agent and its permissions - Check for error logs for global scope code errors and resource location constraint. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID containing the cloud function', 'required': True }, flags.NAME: { 'type': str, 'help': 'Name of the cloud function failing deployment', 'deprecated': True, 'new_parameter': 'cloud_function_name', }, flags.CLOUD_FUNCTION_NAME: { 'type': str, 'help': 'Name of the cloud function failing deployment', 'required': True }, flags.REGION: { 'type': str, 'help': 'Region of the cloud function failing deployment', 'required': True }, flags.START_TIME: { 'type': datetime, 'help': 'Start time of the issue Format: YYYY-MM-DDTHH:MM:SSZ', }, flags.END_TIME: { 'type': datetime, 'help': 'End time of the issue. Format: YYYY-MM-DDTHH:MM:SSZ', }, flags.GAC_SERVICE_ACCOUNT: { 'type': str, 'help': 'Service account used by the user for deployment.' } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.CLOUD_FUNCTION_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = FailedDeploymentsStart() self.add_start(start) custom = DefaultServiceAccountCheck() self.add_step(parent=start, child=custom) self.add_step(parent=custom, child=UserServiceAccountCheck()) self.add_step(parent=custom, child=FunctionGlobalScopeCheck()) self.add_step(parent=custom, child=LocationConstraintCheck()) self.add_end(FailedDeploymentEndStep()) class FailedDeploymentsStart(runbook.StartStep): """Check for function status and existence of function in project.""" def execute(self): """Check if cloud function region and name is specified.""" project = crm.get_project(op.get(flags.PROJECT_ID)) if not project: op.add_skipped( project, reason=f'Project {op.get(flags.PROJECT_ID)} does not exist') class DefaultServiceAccountCheck(runbook.Step): """Check if cloud run function default service account and agent exists and is enabled.""" template = 'failed_deployments::default_service_account_check' def execute(self): """Check if cloud run function default service account and agent exists and is enabled.""" project_num = crm.get_project(op.get(flags.PROJECT_ID)).number service_agent = ('service-{}@gcf-admin-robot.iam.gserviceaccount.com' ).format(project_num) default_sa = ( '{}-compute@developer.gserviceaccount.com').format(project_num) project = crm.get_project(op.get(flags.PROJECT_ID)) try: if iam.is_service_account_existing( service_agent, op.get_context()) and iam.is_service_account_enabled( service_agent, op.get_context()): console_permission = iam_gs.IamPolicyCheck() console_permission.template = 'gcpdiag.runbook.gcf::failed_deployments::agent_permission' console_permission.principal = f'serviceAccount:{service_agent}' console_permission.roles = [gcf_const.SERVICE_AGENT_ROLE] console_permission.require_all = False self.add_child(console_permission) except googleapiclient.errors.HttpError as err: if err.code == 404: op.add_skipped( project, reason=('Service agent {} does not exist on project {}').format( service_agent, op.get(flags.PROJECT_ID))) else: op.add_skipped( project, reason=('Service agent {} is not enabled on project {}').format( service_agent, op.get(flags.PROJECT_ID))) if iam.is_service_account_existing( default_sa, op.get_context()) and iam.is_service_account_enabled( default_sa, op.get_context()): op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON)) else: op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class UserServiceAccountCheck(runbook.Step): """Check if User/Service account has permissions on Cloud function runtime service account""" template = 'failed_deployments::user_service_account_check' def execute(self): """Check if User/Service account has permissions on Cloud function runtime service account""" cloud_function_name = op.get(flags.CLOUD_FUNCTION_NAME) project = crm.get_project(op.get(flags.PROJECT_ID)) project_num = crm.get_project(op.get(flags.PROJECT_ID)).number logging_filter = ''' protoPayload.methodName=("google.cloud.functions.v2.FunctionService.UpdateFunction" OR "google.cloud.functions.v2.FunctionService.CreateFunction") protoPayload.resourceName =~ "{}" severity=NOTICE'''.format(cloud_function_name) try: log_entries = logs.realtime_query(project_id=op.get(flags.PROJECT_ID), filter_str=logging_filter, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)) latest_entry = log_entries[-1] user_principal = get_path( latest_entry, ('protoPayload', 'authenticationInfo', 'principalEmail'), default='') runtime_account = f'{project_num}-compute@developer.gserviceaccount.com' policy_list = iam.get_service_account_iam_policy(op.get_context(), runtime_account) #Check if User account/Service account has 'roles/iam.serviceAccountUser' #permissions on Cloud function runtime service account user_principal_sa = 'serviceAccount:' + user_principal user_principal_user = 'user:' + user_principal if policy_list.has_role_permissions( user_principal_sa, gcf_const.USER_PRINCIPAL_ROLE) or policy_list.has_role_permissions( user_principal_user, gcf_const.USER_PRINCIPAL_ROLE): op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON, user_principal=user_principal, runtime_account=runtime_account)) else: op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON, user_principal=user_principal, runtime_account=runtime_account), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) except googleapiclient.errors.HttpError: op.add_skipped( project, reason=( 'No function failure log entries found for project {}').format( op.get(flags.PROJECT_ID))) class FunctionGlobalScopeCheck(runbook.Step): """Check for deployment failures due to global scope code errors""" template = 'failed_deployments::global_scope_check' def execute(self): """Check for deployment failures due to global scope code errors""" cloud_function_name = op.get(flags.CLOUD_FUNCTION_NAME) project = crm.get_project(op.get(flags.PROJECT_ID)) global_scope_filter = ''' resource.type="cloud_function" SEARCH("Could not create or update Cloud Run service {}, Container Healthcheck failed.")'''.format(cloud_function_name) global_log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=global_scope_filter, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)) if global_log_entries: op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON)) class LocationConstraintCheck(runbook.Step): """Check for deployment failures due to resource location constraint""" template = 'failed_deployments::location_constraint_check' def execute(self): """Check for deployment failures due to resource location constraint""" #Identify deployment failures due to resource location org policy constraints. project = crm.get_project(op.get(flags.PROJECT_ID)) location_constraint_filter = ''' resource.type="cloud_function" SEARCH("Constraint `constraints/gcp.resourceLocations` violated")''' location_log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=location_constraint_filter, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)) if location_log_entries: op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON)) class FailedDeploymentEndStep(runbook.EndStep): """Finalizing cloud run function deployment failures """ def execute(self): """Finalizing cloud run function deployment failures """ response = None if not config.get(flags.INTERACTIVE_MODE): response = op.prompt(kind=op.CONFIRMATION, message=('Were you able to troubleshoot effectively' ' your Cloud Run Function deployment?'), choice_msg='Enter an option: ') if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gcf/failed_deployments_test.py ================================================ # Copyright 2024 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. """Test class for gcf/FailedDeployments""" from gcpdiag import config from gcpdiag.runbook import gcf, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gcf runbook_name = 'gcf/failed-deployments' project_id = 'gcpdiag-gcf1-aaaa' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-gcf1-aaaa', 'cloud_function_name': 'gcf1', 'region': 'us-central1-a' }] ================================================ FILE: gcpdiag/runbook/gcf/flags.py ================================================ # Copyright 2024 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. """Flags for gcf""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.flags import * GAC_SERVICE_ACCOUNT = 'gac_service_account' CLOUD_FUNCTION_NAME = 'cloud_function_name' ================================================ FILE: gcpdiag/runbook/gcf/generalized_steps.py ================================================ # Copyright 2024 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. """Generalized steps""" ================================================ FILE: gcpdiag/runbook/gcf/generalized_steps_test.py ================================================ # Copyright 2024 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. """Generalized steps test class""" ================================================ FILE: gcpdiag/runbook/gcf/snapshots/failed_deployments.txt ================================================ cloud_function_name=gcf1,project_id=gcpdiag-gcf1-aaaa,region=us-central1-a gcf/failed-deployments: Cloud Run function failed deployments check This runbook will assist users to check reasons for failed deployments of Gen2 cloud functions. Current basic Validations: - Check for existence of Default SA - Check for existence of Cloud function Service Agent - Check for existence of cloud functions Service Agent and its permissions - Check for error logs for global scope code errors and resource location constraint. [START]: Check if cloud function region and name is specified. [AUTOMATED STEP]: Check if cloud run function default service account and agent exists and is enabled. - gcpdiag-gcf1-aaaa [FAIL] [REASON] The Cloud Functions service agent or the default runtime service account does not exist or is not enabled: [REMEDIATION] Refer to the IAM roles guide for providing default roles to the Cloud Run function default service account and the service agent: [AUTOMATED STEP]: Verify that serviceAccount:service-12340003@gcf-admin-robot.iam.gserviceaccount.com has required permissions/roles in project/None. - projects/gcpdiag-gcf1-aaaa [OK] [REASON] Cloud function service agent has the required role permissions [AUTOMATED STEP]: Check if User/Service account has permissions on Cloud function runtime service account [AUTOMATED STEP]: Check for deployment failures due to global scope code errors - gcpdiag-gcf1-aaaa [FAIL] [REASON] A problem with the function code was detected. The deployment pipeline completed the function deployment, but failed at the last step- sending a health check to the function. This health check executes the function's global scope, which may be throwing an exception, crashing, or timing out. [REMEDIATION] Refer to the following document to address this error: [AUTOMATED STEP]: Check for deployment failures due to resource location constraint - gcpdiag-gcf1-aaaa [FAIL] [REASON] An active resource location constraint policy in the organization restricts function deployment in the regions specified by the policy. [REMEDIATION] Refer to the following document to address this error: [END]: Finalizing cloud run function deployment failures ================================================ FILE: gcpdiag/runbook/gcf/templates/failed_deployments.jinja ================================================ {% block agent_permission_failure_reason %} The service agent requires the 'cloudfunctions.serviceAgent' role. {% endblock agent_permission_failure_reason %} {% block agent_permission_failure_remediation %} Refer to the IAM roles guide for providing the default role to the service agent: {% endblock agent_permission_failure_remediation %} {% block agent_permission_success_reason %} Cloud function service agent has the required role permissions {% endblock agent_permission_success_reason %} {% block default_service_account_check_failure_reason %} The Cloud Functions service agent or the default runtime service account does not exist or is not enabled: {% endblock default_service_account_check_failure_reason %} {% block default_service_account_check_failure_remediation %} Refer to the IAM roles guide for providing default roles to the Cloud Run function default service account and the service agent: {% endblock default_service_account_check_failure_remediation %} {% block default_service_account_check_success_reason %} The service agent and default service account exist and are enabled. {% endblock default_service_account_check_success_reason %} {% block user_service_account_check_failure_reason %} The user principal '{user_principal}' does not have roles/iam.serviceAccountUser role on the runtime Service Account '{runtime_account}' {% endblock user_service_account_check_failure_reason %} {% block user_service_account_check_failure_remediation %} Assign the Service Account User role (roles/iam.serviceAccountUser) to the user on the default or non-default runtime service account. This role includes the iam.serviceAccounts.actAs permission. {% endblock user_service_account_check_failure_remediation %} {% block user_service_account_check_success_reason %} The user principal '{user_principal}' has roles/iam.serviceAccountUser role on the runtime Service Account '{runtime_account}' {% endblock user_service_account_check_success_reason %} {% block global_scope_check_failure_reason %} A problem with the function code was detected. The deployment pipeline completed the function deployment, but failed at the last step- sending a health check to the function. This health check executes the function's global scope, which may be throwing an exception, crashing, or timing out. {% endblock global_scope_check_failure_reason %} {% block global_scope_check_failure_remediation %} Refer to the following document to address this error: {% endblock global_scope_check_failure_remediation %} {% block global_scope_check_success_reason %} No issues found with function global scope. {% endblock global_scope_check_success_reason %} {% block location_constraint_check_failure_reason %} An active resource location constraint policy in the organization restricts function deployment in the regions specified by the policy. {% endblock location_constraint_check_failure_reason %} {% block location_constraint_check_failure_remediation %} Refer to the following document to address this error: {% endblock location_constraint_check_failure_remediation %} {% block location_constraint_check_success_reason %} No resource location constraints blocking function deployment. {% endblock location_constraint_check_success_reason %} ================================================ FILE: gcpdiag/runbook/gcp/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/gcp/constants.py ================================================ # Copyright 2021 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. """Common constants available at gcp platform level""" from enum import Enum # pylint:disable=wildcard-import,unused-wildcard-import from gcpdiag.runbook.constants import * class APIState(Enum): """Enum for representing the state of a service API. Attributes: STATE_UNSPECIFIED: The default value, indicating that the enabled state of the service is unspecified or not meaningful. This state is typical for consumers other than projects (such as folders and organizations), where the enabled state is always considered unspecified. DISABLED: Indicates that the service cannot be used by the consumer. It represents a service that has either been explicitly disabled or has never been enabled. ENABLED: Indicates that the service has been explicitly enabled for use by the consumer. """ STATE_UNSPECIFIED = 'STATE_UNSPECIFIED' DISABLED = 'DISABLED' ENABLED = 'ENABLED' GCP_SYSTEM_EMAIL = 'system@google.com' ================================================ FILE: gcpdiag/runbook/gcp/flags.py ================================================ # Copyright 2023 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. """Common parameter flags applicable to any gcp runbook""" # pylint:disable=wildcard-import,unused-wildcard-import from gcpdiag.runbook.flags import * PROJECT_ID = 'project_id' PROJECT_NUMBER = 'project_number' FOLDER_ID = 'folder_id' ORG_ID = 'org_id' NAME = 'name' ID = 'id' INSTANCE_NAME = 'instance_name' INSTANCE_ID = 'instance_id' REGION = 'region' ZONE = 'zone' SERIAL_CONSOLE_FILE = 'serial_console_file' # unique flags belong to this runbook PROXY = 'proxy' SRC_IP = 'src_ip' DEST_IP = 'dest_ip' CLIENT = 'check_os_login' POSIX_USER = 'local_user' PORT = 'port' PROTOCOL_TYPE = 'protocol_type' PRINCIPAL_TYPE = 'principal_type' CLIENT = 'client' MFA = 'mfa' MIG_NAME = 'mig_name' LOCATION = 'location' ================================================ FILE: gcpdiag/runbook/gcp/generalized_steps.py ================================================ # Copyright 2023 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. """Reusable Steps application to any product""" import typing import googleapiclient.http from boltons.iterutils import get_path from gcpdiag import config, models, runbook from gcpdiag.models import Resource from gcpdiag.queries import apis, crm from gcpdiag.runbook import op from gcpdiag.runbook.gcp import constants, flags class HumanTask(runbook.Step): """Defines a manual approach verification step involving human intervention. This is special step in a runbook designed for situations where automated verification is not possible, and human judgment is required. It prompts the operator (a human user) to manually check and confirm whether an issue is occurring. This can involve accessing a system, reviewing configurations, or validating the state of a resource based on provided instructions. """ resource: Resource instructions: str = '' options: dict = {} def __init__(self, uuid=None, parent=None, step_type=op.StepType.MANUAL): super().__init__(step_type=step_type, uuid=uuid, parent=parent) def execute(self): """Human task: Follow the guide below and confirm if issue is occurring or not.""" instructions = self.instructions or op.prep_msg(op.INSTRUCTIONS_MESSAGE) options = self.options or op.DEFAULT_INSTRUCTIONS_OPTIONS if instructions: response = op.prompt(kind=op.CONFIRMATION, message=instructions, options=options) if response == op.UNCERTAIN: response = op.add_uncertain(resource=self.resource, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg( op.UNCERTAIN_REMEDIATION)) elif response == op.YES: op.add_ok(self.resource, op.prep_msg(op.SUCCESS_REASON)) elif response == op.NO: op.add_failed(self.resource, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class ResourceAttributeCheck(runbook.Step): """Generalized step used to verify the value of a GCP resource's attribute. This step enables the flexible verification of attributes within any JSON-viewable GCP resource, such as GCE instances or Cloud Storage buckets. It checks if a specific resource's attribute matches an expected value and optionally supports custom evaluation logic for more complex verification scenarios. Attributes: resource_query (Callable): Function to fetch the target GCP resource. Must return a `Resource` object. Typically, this is one of the `gcpdiag.queries.*` methods. query_kwargs (dict): Keyword arguments to pass to `resource_query`. resource (Resource): The GCP resource fetched by `resource_query`. attribute (Optional[tuple]): Path to the nested attribute within the resource to be verified, represented as a tuple of strings. Utilizes `boltons.iterutils.get_path` for navigation. evaluator (Optional[Callable]): A custom function for performing complex evaluations on a resource attribute. Should return a dict: {'success_reason': {'key1': 'value1', ...}, 'failure_reason': {...}} expected_value (str): The expected value of the target attribute. expected_value_type (type): Data type of the expected attribute value. Defaults to `str`. extract_args (dict): Configuration for extracting additional information for message formatting, with keys specifying the argument name and values specifying the source and attribute path. message_args (dict): Extracted arguments used for formatting outcome messages. Usage: An example to check the status of a GCE instance: ```python status_check = ResourceAttributeCheck() status_check.resource_query = gce.get_instance status_check.query_kwargs = { 'project_id': op.get(flags.PROJECT_ID), 'zone': op.get(flags.ZONE), 'instance_name': op.get(flags.INSTANCE_NAME) } status_check.attribute = ('status',) status_check.expected_value = 'RUNNING' status_check.extract_args = { 'vm_name': {'source': models.Resource, 'attribute': 'name'}, 'status': {'source': models.Resource, 'attribute': 'status'}, 'resource_project_id': {'source': models.Parameter, 'attribute': 'project_id'} } ``` `get_path`: https://boltons.readthedocs.io/en/latest/_modules/boltons/iterutils.html#get_path """ resource_query: typing.Callable query_kwargs: dict evaluator: typing.Callable attribute: tuple expected_value: str expected_value_type: type = str extract_args: dict = {} message_args: dict = {} template = 'resource_attribute::default' resource: Resource def execute(self): """Verify resource has expected value.""" try: self.resource = self.resource_query(**self.query_kwargs) # TODO: change this. except googleapiclient.errors.HttpError: op.add_uncertain(self.resource, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) if self.extract_args is not None: for k, v in self.extract_args.items(): if v['source'] == Resource: # pylint:disable=protected-access self.message_args[k] = get_path(self.resource._resource_data, v['attribute'], default=v.get('default')) if v['source'] == models.Parameter: self.message_args[k] = op.get(v['attribute']) if hasattr(self, 'evaluator'): res = self.evaluator(self.resource) if op.SUCCESS_REASON in res: kwargs = res.get(op.SUCCESS_REASON) or self.message_args op.add_ok(self.resource, op.prep_msg(op.SUCCESS_REASON, **kwargs)) elif res.get(op.FAILURE_REASON): kwargs = res.get(op.FAILURE_REASON) or self.message_args op.add_failed(self.resource, reason=op.prep_msg(op.FAILURE_REASON, **kwargs), remediation=op.prep_msg(op.FAILURE_REMEDIATION, **kwargs)) if hasattr(self, 'attribute'): # pylint:disable=protected-access actual_value = get_path(self.resource._resource_data, self.attribute, default=None) if self.expected_value == actual_value: op.add_ok(self.resource, op.prep_msg(op.SUCCESS_REASON, **self.message_args)) else: op.add_failed(self.resource, reason=op.prep_msg(op.FAILURE_REASON, **self.message_args), remediation=op.prep_msg(op.FAILURE_REMEDIATION, **self.message_args)) class ServiceApiStatusCheck(runbook.Step): """Check whether or not a service has been enabled for use by a consumer Checks is a Cloud API service is enabled or not. Guides the user to enable the service if it's expected to be enabled and vice versa. Attributes: api_name (str): The name of the service to check. expected_state (str): The expected state of the service, used to verify against the actual service state retrieved during execution. API state has to be one of the value of gcp.constants.APIState """ api_name: str expected_state: constants.APIState template: str = 'api::default' project_id: str def execute(self): """Verify {api_name}.{universe_domain} API is {expected_state} in project {project_id}.""" project = crm.get_project(self.project_id) is_enabled = apis.is_enabled(self.project_id, self.api_name) service_name = f"{self.api_name}.{config.get('universe_domain')}" actual_state = constants.APIState.ENABLED if is_enabled else constants.APIState.DISABLED if self.expected_state == actual_state: op.add_ok( project, op.prep_msg(op.SUCCESS_REASON, service_name=service_name, expected_state=self.expected_state.value)) else: remediation = '' if self.expected_state == constants.APIState.ENABLED: remediation = op.prep_msg(op.FAILURE_REMEDIATION, service_name=service_name, project_id=op.get(flags.PROJECT_ID)) if self.expected_state == constants.APIState.DISABLED: remediation = op.prep_msg(op.FAILURE_REMEDIATION_ALT1, service_name=service_name, project_id=op.get(flags.PROJECT_ID)) op.add_failed(project, reason=op.prep_msg( op.FAILURE_REASON, service_name=service_name, expected_state=self.expected_state.value), remediation=remediation) ================================================ FILE: gcpdiag/runbook/gcp/templates/api.jinja ================================================ {% block default_success_reason %} The `{service_name}` service is currently in the expected state: `{expected_state}`. {% endblock default_success_reason %} {% block default_failure_reason %} The `{service_name}` service is not in the expected state `{expected_state}` {% endblock default_failure_reason %} {% block default_failure_remediation %} This service is expected to be enabled. Execute the command below to enable {service_name} in {project_id} gcloud services enable {service_name} --project={project_id} Resources {% endblock default_failure_remediation %} {% block default_failure_remediation_a1 %} This service is expected to be disabled. Execute the command below to disable {service_name} in {project_id} gcloud services disable {service_name} --project={project_id} Resources {% endblock default_failure_remediation_a1 %} ================================================ FILE: gcpdiag/runbook/gcp/templates/resource_attribute.jinja ================================================ {% block default_failure_reason %} Resource doesn't have the expected value {% endblock default_failure_reason %} {% block default_failure_remediation %} Update the resource to have the expected value {% endblock default_failure_remediation %} {% block default_success_reason %} Resource has the expected value {% endblock default_success_reason %} ================================================ FILE: gcpdiag/runbook/gke/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/gke/cluster_autoscaler.py ================================================ # Copyright 2024 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. """GKE Cluster Autoscaler runbook""" import json from gcpdiag import runbook from gcpdiag.queries import apis, crm, gke, logs from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags from gcpdiag.utils import GcpApiError def local_log_search(cluster_name, cluster_location, error_message): """Constructs a filter string for a logs query function based on provided arguments. Args: cluster_name: Optional name of the cluster to filter logs for. cluster_location: Optional location of the cluster to filter logs for. error_message: Required error message to include in the filter. Returns: A string representing the filter for the logs query. """ filter_list = [ 'log_id("container.googleapis.com/cluster-autoscaler-visibility")', 'resource.type="k8s_cluster"', f'resource.labels.location="{cluster_location}"', f'resource.labels.cluster_name="{cluster_name}"', f'{error_message}' ] filter_str = '\n'.join(filter_list) log_entries = logs.realtime_query(project_id=op.get(flags.PROJECT_ID), start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), filter_str=filter_str) return log_entries class ClusterAutoscaler(runbook.DiagnosticTree): """Analyses logs in the project where the cluster is running. If there are log entries that contain messages listed in the public documentation https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#messages then provide details on how each particular issue can be solved. The following ScaleUP logs messages are covered: - scale.up.error.out.of.resources - scale.up.error.quota.exceeded - scale.up.error.waiting.for.instances.timeout - scale.up.error.ip.space.exhausted - scale.up.error.service.account.deleted The following ScaleDown logs messages are covered: - scale.down.error.failed.to.evict.pods - no.scale.down.node.node.group.min.size.reached - no.scale.down.node.scale.down.disabled.annotation - no.scale.down.node.minimal.resource.limits.exceeded - no.scale.down.node.no.place.to.move.pods - no.scale.down.node.pod.not.backed.by.controller - no.scale.down.node.pod.not.safe.to.evict.annotation - no.scale.down.node.pod.kube.system.unmovable - no.scale.down.node.pod.not.enough.pdb - no.scale.down.node.pod.controller.not.found - no.scale.down.node.pod.unexpected.error """ # Specify parameters common to all steps in the diagnostic tree class. parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The ID of the project hosting the GKE Cluster', 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'deprecated': True, 'new_parameter': 'gke_cluster_name', }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'required': True }, flags.LOCATION: { 'type': str, 'help': 'The zone or region of the GKE cluster', 'required': True } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): start = ClusterAutoscalerStart() out_of_resources = CaOutOfResources() quota_exceeded = CaQuotaExceeded() instance_timeout = CaInstanceTimeout() ip_space_exhausted = CaIpSpaceExhausted() service_account_deleted = CaServiceAccountDeleted() min_size_reached = CaMinSizeReached() failed_to_evict_pods = CaFailedToEvictPods() disabled_annotation = CaDisabledAnnotation() min_resource_limit_exceeded = CaMinResourceLimitExceeded() no_place_to_move_pods = CaNoPlaceToMovePods() pod_not_backed_by_controller = CaPodsNotBackedByController() not_safe_to_evict_annotation = CaNotSafeToEvictAnnotation() pod_kube_system_unmovable = CaPodKubeSystemUnmovable() pod_not_enough_pdb = CaPodNotEnoughPdb() pod_controller_not_found = CaPodControllerNotFound() pod_unexpected_error = CaPodUnexpectedError() end = ClusterAutoscalerEnd() self.add_start(step=start) self.add_step(parent=start, child=out_of_resources) self.add_step(parent=out_of_resources, child=quota_exceeded) self.add_step(parent=quota_exceeded, child=instance_timeout) self.add_step(parent=instance_timeout, child=ip_space_exhausted) self.add_step(parent=ip_space_exhausted, child=service_account_deleted) self.add_step(parent=service_account_deleted, child=min_size_reached) self.add_step(parent=min_size_reached, child=failed_to_evict_pods) self.add_step(parent=failed_to_evict_pods, child=disabled_annotation) self.add_step(parent=disabled_annotation, child=min_resource_limit_exceeded) self.add_step(parent=min_resource_limit_exceeded, child=no_place_to_move_pods) self.add_step(parent=no_place_to_move_pods, child=pod_not_backed_by_controller) self.add_step(parent=pod_not_backed_by_controller, child=not_safe_to_evict_annotation) self.add_step(parent=not_safe_to_evict_annotation, child=pod_kube_system_unmovable) self.add_step(parent=pod_kube_system_unmovable, child=pod_not_enough_pdb) self.add_step(parent=pod_not_enough_pdb, child=pod_controller_not_found) self.add_step(parent=pod_controller_not_found, child=pod_unexpected_error) self.add_end(step=end) class ClusterAutoscalerStart(runbook.StartStep): """Initiates diagnostics for Cluster Autoscaler. Check - if logging API is enabled - verify that the cluster exists at that location """ def execute(self): """ Check the provided parameters. """ # skip if logging is disabled project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) if not apis.is_enabled(project, 'logging'): op.add_skipped(project_path, reason=('Logging disabled in project {}').format(project)) return # verify if the provided cluster at location is present project = crm.get_project(op.get(flags.PROJECT_ID)) try: cluster = gke.get_cluster(op.get(flags.PROJECT_ID), cluster_id=op.get(flags.GKE_CLUSTER_NAME), location=op.get(flags.LOCATION)) except GcpApiError: op.add_skipped( project, reason=('Cluster {} does not exist in {} for project {}').format( op.get(flags.GKE_CLUSTER_NAME), op.get(flags.LOCATION), op.get(flags.PROJECT_ID))) else: op.add_ok(project, reason=('Cluster {} found in {} for project {}').format( cluster.name, op.get(flags.LOCATION), op.get(flags.PROJECT_ID))) class CaOutOfResources(runbook.Step): """Check for "scale.up.error.out.of.resources" log entries""" template = 'clusterautoscaler::out_of_resources' def execute(self): """ Check for "scale.up.error.out.of.resources" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId=' '"scale.up.error.out.of.resources"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaQuotaExceeded(runbook.Step): """Check for "scale.up.error.quota.exceeded" log entries""" template = 'clusterautoscaler::quota_exceeded' def execute(self): """ Check for "scale.up.error.quota.exceeded" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId=' '"scale.up.error.quota.exceeded"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaInstanceTimeout(runbook.Step): """Check for "scale.up.error.waiting.for.instances.timeout" log entries""" template = 'clusterautoscaler::instance_timeout' def execute(self): """ Check for "scale.up.error.waiting.for.instances.timeout" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId=' '"scale.up.error.waiting.for.instances.timeout"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaIpSpaceExhausted(runbook.Step): """Check for "scale.up.error.ip.space.exhausted" log entries""" template = 'clusterautoscaler::ip_space_exhausted' def execute(self): """ Check for "scale.up.error.ip.space.exhausted" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId=' '"scale.up.error.ip.space.exhausted"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaServiceAccountDeleted(runbook.Step): """Check for "scale.up.error.service.account.deleted" log entries""" template = 'clusterautoscaler::service_account_deleted' def execute(self): """ Check for "scale.up.error.service.account.deleted" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId=' '"scale.up.error.service.account.deleted"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaMinSizeReached(runbook.Step): """Check for "no.scale.down.node.node.group.min.size.reached" log entries""" template = 'clusterautoscaler::min_size_reached' def execute(self): """ Check for "no.scale.down.node.node.group.min.size.reached" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.node.group.min.size.reached"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaFailedToEvictPods(runbook.Step): """Check for "scale.down.error.failed.to.evict.pods" log entries""" template = 'clusterautoscaler::failed_evict_pods' def execute(self): """ Check for "scale.down.error.failed.to.evict.pods" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId=' '"scale.down.error.failed.to.evict.pods"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaDisabledAnnotation(runbook.Step): """Check for "no.scale.down.node.scale.down.disabled.annotation" log entries""" template = 'clusterautoscaler::disabled_annotation' def execute(self): """ Check for "no.scale.down.node.scale.down.disabled.annotation" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.scale.down.disabled.annotation"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaMinResourceLimitExceeded(runbook.Step): """Check for "no.scale.down.node.minimal.resource.limits.exceeded" log entries""" template = 'clusterautoscaler::min_resource_limit_exceeded' def execute(self): """ Check for "no.scale.down.node.minimal.resource.limits.exceeded" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.minimal.resource.limits.exceeded"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaNoPlaceToMovePods(runbook.Step): """Check for "no.scale.down.node.no.place.to.move.pods" log entries""" template = 'clusterautoscaler::no_place_to_move_pods' def execute(self): """ Check for "no.scale.down.node.no.place.to.move.pods" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.no.place.to.move.pods"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaPodsNotBackedByController(runbook.Step): """Check for "no.scale.down.node.pod.not.backed.by.controller" log entries""" template = 'clusterautoscaler::pod_not_backed_by_controller' def execute(self): """ Check for "no.scale.down.node.pod.not.backed.by.controller" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.pod.not.backed.by.controller"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaNotSafeToEvictAnnotation(runbook.Step): """Check for "no.scale.down.node.pod.not.safe.to.evict.annotation" log entries""" template = 'clusterautoscaler::not_safe_to_evict_annotation' def execute(self): """ Check for "no.scale.down.node.pod.not.safe.to.evict.annotation" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.pod.not.safe.to.evict.annotation"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaPodKubeSystemUnmovable(runbook.Step): """Check for "no.scale.down.node.pod.kube.system.unmovable" log entries""" template = 'clusterautoscaler::pod_kube_system_unmovable' def execute(self): """ Check for "no.scale.down.node.pod.kube.system.unmovable" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.pod.kube.system.unmovable"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaPodNotEnoughPdb(runbook.Step): """Check for "no.scale.down.node.pod.not.enough.pdb" log entries""" template = 'clusterautoscaler::pod_not_enough_pdb' def execute(self): """ Check for "no.scale.down.node.pod.not.enough.pdb" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.pod.not.enough.pdb"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaPodControllerNotFound(runbook.Step): """Check for "no.scale.down.node.pod.controller.not.found" log entries""" template = 'clusterautoscaler::pod_controller_not_found' def execute(self): """ Check for "no.scale.down.node.pod.controller.not.found" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.pod.controller.not.found"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class CaPodUnexpectedError(runbook.Step): """Check for "no.scale.down.node.pod.unexpected.error" log entries""" template = 'clusterautoscaler::pod_unexpected_error' def execute(self): """ Check for "no.scale.down.node.pod.unexpected.error" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) error_message = ( 'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId=' '"no.scale.down.node.pod.unexpected.error"') log_entries = local_log_search(cluster_name, cluster_location, error_message) if log_entries: for log_entry in log_entries: sample_log = json.dumps(log_entry, indent=2) break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class ClusterAutoscalerEnd(runbook.EndStep): """Finalizes the diagnostics process for `Cluster Autoscaler`. This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for `Cluster Autoscaler`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. """ def execute(self): """Finalize `Cluster Autoscaler` diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message= 'Are you satisfied with the `GKE Cluster Autoscaler` RCA performed?') if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gke/cluster_autoscaler_test.py ================================================ # Copyright 2024 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. """Test class for gke/ClusterAutoscaler.""" import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gke, op, snapshot_test_base from gcpdiag.runbook.gke import cluster_autoscaler from gcpdiag.utils import GcpApiError class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke runbook_name = 'gke/cluster-autoscaler' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr', 'gke_cluster_name': 'gcp-cluster', 'location': 'europe-west10' }] RUNBOOK_PARAMS = { 'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr', 'gke_cluster_name': 'gcp-cluster', 'location': 'europe-west10', 'start_time': '2024-01-01T00:00:00Z', 'end_time': '2024-01-01T01:00:00Z', } class MockMessage: """Mock class for op.Message.""" def __init__(self): self.messages = [] def print(self, *args, **kwargs): pass class RunbookTest(unittest.TestCase): def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.enterContext( mock.patch.object(config, 'get', side_effect=lambda k: RUNBOOK_PARAMS[k])) self.mock_op_get = self.enterContext( mock.patch.object(op, 'get', side_effect=lambda k, v=None: RUNBOOK_PARAMS[k])) self.mock_add_ok = self.enterContext(mock.patch.object(op, 'add_ok')) self.mock_add_failed = self.enterContext(mock.patch.object( op, 'add_failed')) self.mock_add_skipped = self.enterContext( mock.patch.object(op, 'add_skipped')) self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_gke_get_cluster = self.enterContext( mock.patch('gcpdiag.queries.gke.get_cluster')) self.mock_apis_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_logs_realtime_query = self.enterContext( mock.patch('gcpdiag.queries.logs.realtime_query')) self.mock_op_prompt = self.enterContext(mock.patch.object(op, 'prompt')) self.mock_op_info = self.enterContext(mock.patch.object(op, 'info')) self.mock_op_prep_msg = self.enterContext( mock.patch.object(op, 'prep_msg', side_effect=lambda x, **y: x)) self.project = mock.MagicMock() self.project.id = RUNBOOK_PARAMS['project_id'] self.mock_crm_get_project.return_value = self.project self.cluster = mock.MagicMock() self.cluster.name = RUNBOOK_PARAMS['gke_cluster_name'] self.mock_gke_get_cluster.return_value = self.cluster def test_start_step_logging_disabled(self): self.mock_apis_is_enabled.return_value = False step = cluster_autoscaler.ClusterAutoscalerStart() step.execute() self.mock_add_skipped.assert_called_once() def test_start_step_cluster_not_found(self): """GcpApiError branch.""" self.mock_apis_is_enabled.return_value = True mock_response = mock.Mock() mock_response.status = 404 mock_response.content = b'{"error": "cluster not found"}' self.mock_gke_get_cluster.side_effect = GcpApiError(mock_response) step = cluster_autoscaler.ClusterAutoscalerStart() step.execute() self.mock_add_skipped.assert_called_once() def test_ca_out_of_resources_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaOutOfResources() step.execute() self.mock_add_failed.assert_called_once() def test_ca_min_size_reached_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaMinSizeReached() step.execute() self.mock_add_failed.assert_called_once() def test_end_step_prompt_no(self): self.mock_op_prompt.return_value = op.NO step = cluster_autoscaler.ClusterAutoscalerEnd() step.execute() self.mock_op_info.assert_called_once() def test_start_step_success(self): self.mock_apis_is_enabled.return_value = True self.mock_gke_get_cluster.return_value = self.cluster self.mock_gke_get_cluster.side_effect = None step = cluster_autoscaler.ClusterAutoscalerStart() step.execute() self.mock_add_ok.assert_called_once() def test_ca_out_of_resources_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaOutOfResources() step.execute() self.mock_add_ok.assert_called_once() def test_ca_min_size_reached_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaMinSizeReached() step.execute() self.mock_add_ok.assert_called_once() def test_ca_quota_exceeded_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaQuotaExceeded() step.execute() self.mock_add_failed.assert_called_once() def test_ca_quota_exceeded_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaQuotaExceeded() step.execute() self.mock_add_ok.assert_called_once() def test_ca_instance_timeout_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaInstanceTimeout() step.execute() self.mock_add_failed.assert_called_once() def test_ca_instance_timeout_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaInstanceTimeout() step.execute() self.mock_add_ok.assert_called_once() def test_ca_ip_space_exhausted_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaIpSpaceExhausted() step.execute() self.mock_add_failed.assert_called_once() def test_ca_ip_space_exhausted_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaIpSpaceExhausted() step.execute() self.mock_add_ok.assert_called_once() def test_ca_service_account_deleted_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaServiceAccountDeleted() step.execute() self.mock_add_failed.assert_called_once() def test_ca_service_account_deleted_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaServiceAccountDeleted() step.execute() self.mock_add_ok.assert_called_once() def test_ca_failed_to_evict_pods_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaFailedToEvictPods() step.execute() self.mock_add_failed.assert_called_once() def test_ca_failed_to_evict_pods_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaFailedToEvictPods() step.execute() self.mock_add_ok.assert_called_once() def test_ca_disabled_annotation_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaDisabledAnnotation() step.execute() self.mock_add_failed.assert_called_once() def test_ca_disabled_annotation_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaDisabledAnnotation() step.execute() self.mock_add_ok.assert_called_once() def test_ca_min_resource_limit_exceeded_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaMinResourceLimitExceeded() step.execute() self.mock_add_failed.assert_called_once() def test_ca_min_resource_limit_exceeded_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaMinResourceLimitExceeded() step.execute() self.mock_add_ok.assert_called_once() def test_ca_no_place_to_move_pods_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaNoPlaceToMovePods() step.execute() self.mock_add_failed.assert_called_once() def test_ca_no_place_to_move_pods_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaNoPlaceToMovePods() step.execute() self.mock_add_ok.assert_called_once() def test_ca_pods_not_backed_by_controller_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaPodsNotBackedByController() step.execute() self.mock_add_failed.assert_called_once() def test_ca_pods_not_backed_by_controller_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaPodsNotBackedByController() step.execute() self.mock_add_ok.assert_called_once() def test_ca_not_safe_to_evict_annotation_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaNotSafeToEvictAnnotation() step.execute() self.mock_add_failed.assert_called_once() def test_ca_not_safe_to_evict_annotation_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaNotSafeToEvictAnnotation() step.execute() self.mock_add_ok.assert_called_once() def test_ca_pod_kube_system_unmovable_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaPodKubeSystemUnmovable() step.execute() self.mock_add_failed.assert_called_once() def test_ca_pod_kube_system_unmovable_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaPodKubeSystemUnmovable() step.execute() self.mock_add_ok.assert_called_once() def test_ca_pod_not_enough_pdb_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaPodNotEnoughPdb() step.execute() self.mock_add_failed.assert_called_once() def test_ca_pod_not_enough_pdb_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaPodNotEnoughPdb() step.execute() self.mock_add_ok.assert_called_once() def test_ca_pod_controller_not_found_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaPodControllerNotFound() step.execute() self.mock_add_failed.assert_called_once() def test_ca_pod_controller_not_found_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaPodControllerNotFound() step.execute() self.mock_add_ok.assert_called_once() def test_ca_pod_unexpected_error_step_with_logs(self): self.mock_logs_realtime_query.return_value = [{'some': 'log'}] step = cluster_autoscaler.CaPodUnexpectedError() step.execute() self.mock_add_failed.assert_called_once() def test_ca_pod_unexpected_error_step_without_logs(self): self.mock_logs_realtime_query.return_value = [] step = cluster_autoscaler.CaPodUnexpectedError() step.execute() self.mock_add_ok.assert_called_once() def test_legacy_parameter(self): params = {'name': 'cluster-1', 'project_id': 'p1', 'location': 'l1'} rb = cluster_autoscaler.ClusterAutoscaler() rb.legacy_parameter_handler(params) self.assertNotIn('name', params) self.assertIn('gke_cluster_name', params) self.assertEqual(params['gke_cluster_name'], 'cluster-1') class TestClusterAutoscaler(unittest.TestCase): """Unit tests for ClusterAutoscaler runbook to increase coverage.""" def setUp(self): super().setUp() self.runbook = cluster_autoscaler.ClusterAutoscaler() def test_build_tree_structure(self): """Ensures the diagnostic tree is built correctly.""" self.runbook.build_tree() self.assertIsInstance(self.runbook.start, cluster_autoscaler.ClusterAutoscalerStart) start_steps = self.runbook.start.steps self.assertGreater(len(start_steps), 0) self.assertIsInstance(start_steps[0], cluster_autoscaler.CaOutOfResources) out_of_resources_steps = start_steps[0].steps self.assertIsInstance(out_of_resources_steps[0], cluster_autoscaler.CaQuotaExceeded) self.assertIsInstance(self.runbook.start.steps[-1], cluster_autoscaler.ClusterAutoscalerEnd) @mock.patch('gcpdiag.queries.apis.is_enabled') @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.op.add_skipped') @mock.patch('gcpdiag.runbook.op.get') def test_start_step_cluster_not_found_mock(self, mock_get, mock_add_skipped, mock_gke, mock_crm, mock_apis): """GcpApiError branch in ClusterAutoscalerStart.execute.""" del mock_crm mock_get.side_effect = (lambda k: 'test-project' if 'project' in k else 'test-cluster') mock_apis.return_value = True mock_gke.side_effect = GcpApiError( response={'error': { 'message': 'Not Found', 'code': 404 }}) step = cluster_autoscaler.ClusterAutoscalerStart() step.execute() mock_add_skipped.assert_called_once() @mock.patch('gcpdiag.runbook.op.prep_msg') @mock.patch('gcpdiag.runbook.gke.cluster_autoscaler.local_log_search') @mock.patch('gcpdiag.runbook.op.add_failed') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.crm.get_project') def test_out_of_resources_with_logs(self, mock_crm, mock_get, mock_add_failed, mock_log_search, mock_prep_msg): """'if log_entries' branch in CaOutOfResources.execute.""" del mock_crm mock_log_search.return_value = [{ 'textPayload': 'resource exhaustion error' }] mock_prep_msg.side_effect = lambda x, **y: x mock_get.side_effect = lambda k, v=None: RUNBOOK_PARAMS.get(k, v) step = cluster_autoscaler.CaOutOfResources() step.execute() mock_add_failed.assert_called_once() ================================================ FILE: gcpdiag/runbook/gke/constants.py ================================================ # Copyright 2024 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. """Constants specific to only GKE""" ================================================ FILE: gcpdiag/runbook/gke/flags.py ================================================ # Copyright 2024 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. """Contains GKE specific flags""" # pylint: disable=wildcard-import, unused-wildcard-import from gcpdiag.runbook.gcp.flags import * # pylint: disable=wildcard-import, unused-wildcard-import from gcpdiag.runbook.iam.flags import * LOCATION = 'location' NODE = 'node' NODEPOOL = 'nodepool' GKE_CLUSTER_NAME = 'gke_cluster_name' OPS_AGENT_EXPORTING_METRICS = False PROTOCOL_TYPE = 'protocol_type' INTERACTIVE_MODE = 'auto' # cluster zone or region LOCATION = 'location' POD_IP = 'pod_ip' GKE_NODE_IP = 'node_ip' SRC_IP = 'src_ip' DEST_IP = 'dest_ip' ================================================ FILE: gcpdiag/runbook/gke/generalized_steps.py ================================================ # Copyright 2024 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. """Contains Generalized steps used by only GKE runbooks""" from gcpdiag import runbook from gcpdiag.lint.gke import util from gcpdiag.queries import apis, crm, gke, iam from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags class ApiEnabled(runbook.Step): """Step to verify if a given Google Cloud API is enabled for the project. Attributes: api_name (str): the API service name (e.g. 'monitoring', 'logging'). template (str): the runbook template path for this check. """ api_name: str template: str def execute(self): """Verify if the API is enabled for this project.""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) if apis.is_enabled(project, self.api_name): op.add_ok(project_path, reason=f'The {self.api_name} API is enabled.') else: op.add_failed(project_path, reason=f'The {self.api_name} API is NOT enabled.', remediation=f'Please enable the {self.api_name} API') class NodePoolScope(runbook.Step): """Step to verify that each GKE node pool has at least one of the required OAuth scopes. Attributes: required_scopes (list): a list of OAuth scope URLs to check. template (str): the runbook template path for this check. service_name (str) the service whose role need to be check. """ required_scopes: list template: str service_name: str def execute(self): """Verify node-pool OAuth scopes include one of the required scopes.""" # fetch all clusters clusters = gke.get_clusters(op.get_context()) # find target cluster by name and location partial = f"{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}" cluster_obj = util.get_cluster_object(clusters, partial) for nodepool in cluster_obj.nodepools: if any(s in nodepool.config.oauth_scopes for s in self.required_scopes): op.add_ok( nodepool, reason= f'The node pool {nodepool} has the correct {self.service_name} access scope.' ) else: op.add_failed( nodepool, reason= f'The node pool {nodepool} is missing {self.service_name} access scope.', remediation= f'Please create new node pools with the correct {self.service_name} scope.' ) class ServiceAccountPermission(runbook.Step): """Step to verify that service accounts in GKE node pools have the required IAM roles. Attributes: required_roles (list): list of IAM roles to check on each node-pool service account. template (str): the runbook template path for this check. service_name (str) the service for which service account permissions need to be check. """ required_roles: list template: str service_name: str def execute(self): """Verifies the node pool's service account has a role with the correct required service IAM permissions.""" clusters = gke.get_clusters(op.get_context()) partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}' cluster_obj = util.get_cluster_object(clusters, partial_path) iam_policy = iam.get_project_policy(op.get_context()) # Verifies service-account permissions for every nodepool. for np in cluster_obj.nodepools: sa = np.service_account if not iam.is_service_account_enabled(sa, op.get_context()): op.add_failed( np, reason=f'The service account {sa} is disabled or deleted.', remediation=( f'The service account {sa} used by GKE nodes should have ' f'the required {self.service_name} role.')) #checking all roles for ServiceAccount of all Nodepool missing_roles = [] for role in self.required_roles: if not iam_policy.has_role_permissions(f'serviceAccount:{sa}', role): missing_roles.append(role) missing_roles_string = ', '.join(missing_roles) if missing_roles: op.add_failed( np, reason= (f'The service account: {sa} is missing role(s): {missing_roles_string}.' ), remediation= (f'Please grant the role(s): {missing_roles_string} to the service account: {sa}.' )) else: op.add_ok(np, reason=(f'Service account: {sa} has the correct ' f'{self.service_name} permissions.')) ================================================ FILE: gcpdiag/runbook/gke/generalized_steps_test.py ================================================ # Copyright 2024 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. """Tests for gke/generalized_steps.py.""" import unittest from unittest import mock from gcpdiag.queries import apis_stub from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags, generalized_steps class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class GkeStepTestBase(unittest.TestCase): """Base class for GKE generalized step tests.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.mock_op_add_ok = self.enterContext( mock.patch('gcpdiag.runbook.op.add_ok')) self.mock_op_add_failed = self.enterContext( mock.patch('gcpdiag.runbook.op.add_failed')) self.mock_op_get_context = self.enterContext( mock.patch('gcpdiag.runbook.op.get_context')) self.params = { flags.PROJECT_ID: 'test-project', flags.LOCATION: 'us-central1', flags.GKE_CLUSTER_NAME: 'test-cluster', } self.mock_op_get.side_effect = lambda key, default=None: self.params.get( key, default) class ApiEnabledTest(GkeStepTestBase): """Test ApiEnabled step.""" @mock.patch('gcpdiag.queries.apis.is_enabled') @mock.patch('gcpdiag.queries.crm.get_project') def test_api_enabled_ok(self, unused_mock_get_project, mock_is_enabled): mock_is_enabled.return_value = True step = generalized_steps.ApiEnabled() step.api_name = 'container.googleapis.com' step.execute() self.mock_op_add_ok.assert_called_once() @mock.patch('gcpdiag.queries.apis.is_enabled') @mock.patch('gcpdiag.queries.crm.get_project') def test_api_enabled_failed(self, unused_mock_get_project, mock_is_enabled): mock_is_enabled.return_value = False step = generalized_steps.ApiEnabled() step.api_name = 'container.googleapis.com' step.execute() self.mock_op_add_failed.assert_called_once() class NodePoolScopeTest(GkeStepTestBase): """Test NodePoolScope step.""" @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_nodepool_scope_ok(self, mock_get_cluster_obj, unused_mock_get_clusters): mock_nodepool = mock.Mock() mock_nodepool.config.oauth_scopes = [ 'https://www.googleapis.com/auth/cloud-platform' ] mock_cluster = mock.Mock() mock_cluster.nodepools = [mock_nodepool] mock_get_cluster_obj.return_value = mock_cluster step = generalized_steps.NodePoolScope() step.required_scopes = ['https://www.googleapis.com/auth/cloud-platform'] step.service_name = 'Cloud Platform' step.execute() self.mock_op_add_ok.assert_called_once() @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_nodepool_scope_failed(self, mock_get_cluster_obj, unused_mock_get_clusters): mock_nodepool = mock.Mock() mock_nodepool.config.oauth_scopes = ['wrong-scope'] mock_cluster = mock.Mock() mock_cluster.nodepools = [mock_nodepool] mock_get_cluster_obj.return_value = mock_cluster step = generalized_steps.NodePoolScope() step.required_scopes = ['correct-scope'] step.service_name = 'Cloud Platform' step.execute() self.mock_op_add_failed.assert_called_once() class ServiceAccountPermissionTest(GkeStepTestBase): """Test ServiceAccountPermission step.""" @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') @mock.patch('gcpdiag.queries.iam.get_project_policy') @mock.patch('gcpdiag.queries.iam.is_service_account_enabled') def test_sa_permission_ok(self, mock_sa_enabled, mock_get_policy, mock_get_cluster_obj, unused_mock_get_clusters): mock_sa_enabled.return_value = True mock_policy = mock.Mock() mock_policy.has_role_permissions.return_value = True mock_get_policy.return_value = mock_policy mock_nodepool = mock.Mock() mock_nodepool.service_account = 'test-sa@project.iam.gserviceaccount.com' mock_cluster = mock.Mock() mock_cluster.nodepools = [mock_nodepool] mock_get_cluster_obj.return_value = mock_cluster step = generalized_steps.ServiceAccountPermission() step.required_roles = ['roles/container.nodeServiceAccount'] step.service_name = 'GKE' step.execute() self.mock_op_add_ok.assert_called_once() @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') @mock.patch('gcpdiag.queries.iam.get_project_policy') @mock.patch('gcpdiag.queries.iam.is_service_account_enabled') def test_sa_disabled(self, mock_sa_enabled, unused_mock_get_policy, mock_get_cluster_obj, unused_mock_get_clusters): mock_sa_enabled.return_value = False mock_nodepool = mock.Mock() mock_cluster = mock.Mock() mock_cluster.nodepools = [mock_nodepool] mock_get_cluster_obj.return_value = mock_cluster step = generalized_steps.ServiceAccountPermission() step.required_roles = ['roles/container.nodeServiceAccount'] step.service_name = 'GKE' step.execute() # Should fail because SA is disabled self.mock_op_add_failed.assert_called() ================================================ FILE: gcpdiag/runbook/gke/gke_ip_masq_standard.py ================================================ # Copyright 2024 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. """This runbook will analyze symptoms for IP Masquerading issues on GKE Cluster.""" import ipaddress from datetime import datetime from gcpdiag import runbook from gcpdiag.queries import crm, gke, logs from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags class GkeIpMasqStandard(runbook.DiagnosticTree): """This runbook will analyze symptoms for IP Masquerading issues on GKE Cluster. It examines the following: - Are there any traffic logs to destination IP? - Is ip-masq-agent DaemonSet in kube-system namespace? - Is ip-masq-agent Configmap in kube-system namespace? - Is GKE node IP and Pod IP are under nonMasquerade CIDR? - Is Destination IP is under are under nonMasquerade CIDR? """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.SRC_IP: { 'type': ipaddress.IPv4Address, 'help': 'The source IP from where connection is generated', }, flags.DEST_IP: { 'type': ipaddress.IPv4Address, 'help': 'The Destination IP is where the request is sending (Example : 8.8.8.8)', 'required': True }, flags.POD_IP: { 'type': str, 'help': 'GKE Pod IP address or pod address range(Example 192.168.1.0/24)', }, flags.NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'required': False, 'deprecated': True, 'new_parameter': 'gke_cluster_name', }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', }, flags.LOCATION: { 'type': str, 'help': 'The zone or region of the GKE cluster', }, flags.GKE_NODE_IP: { 'type': str, 'help': 'GKE Node IP address or address range/CIDR (Example 192.168.1.0/24)' }, flags.START_TIME: { 'type': datetime, 'help': 'Start time of the issue', }, flags.END_TIME: { 'type': datetime, 'help': 'End time of the issue', } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate your step classes # start = StandardIpMasqStart() start = GkeIpMasqStandardStart() self.add_start(start) custom = Nodeproblem() self.add_step(parent=start, child=custom) check_daemon_set_present = CheckDaemonSet() self.add_step(parent=start, child=check_daemon_set_present) check_config_map_present = CheckConfigMap() self.add_step(parent=check_daemon_set_present, child=check_config_map_present) check_pod_ip = CheckPodIP() self.add_step(parent=check_config_map_present, child=check_pod_ip) check_node_ip = CheckNodeIP() self.add_step(parent=check_pod_ip, child=check_node_ip) check_destination_ip = CheckDestinationIP() self.add_step(parent=check_node_ip, child=check_destination_ip) self.add_end(GkeIpMasqStandardEnd()) class GkeIpMasqStandardStart(runbook.StartStep): """Check if the project ID, GKE cluster and its location is valid. Based on information provided would direct toward further troubleshooting. """ def execute(self): """Lets check the provided parameters.""" # # skip if logging is disabled project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) # check if there are clusters in the project clusters = gke.get_clusters(op.get_context()) # following checks are necessary, depending on what input is provided: # - no input, get all clusters available # - just cluster name is provided, check if there's a cluster with that name # - just location is provided, check if there are clusters at that location # - cluster name and location are provided, check if there's that cluster at that location cluster_name = op.get(flags.GKE_CLUSTER_NAME) cluster_location = op.get(flags.LOCATION) found_cluster = False found_cluster_with_location = False found_clusters_at_location = False if cluster_name and cluster_location: for cluster in clusters.values(): if cluster_name == str(cluster).rsplit('/', maxsplit=1)[-1] \ and cluster_location == str(cluster).split('/')[-3]: found_cluster_with_location = True op.add_ok( project_path, reason=( 'Cluster with the name {} on {} exist in project {}').format( cluster_name, cluster_location, project)) break elif cluster_name: for cluster in clusters.values(): if cluster_name == str(cluster).rsplit('/', maxsplit=1)[-1]: found_cluster = True op.add_ok(project_path, reason=('Cluster with name {} exist in project {}').format( cluster_name, project)) break elif cluster_location: for cluster in clusters.values(): if cluster_location == str(cluster).split('/')[-3]: found_clusters_at_location = True op.add_uncertain( project_path, reason= ('There are clusters found on {} location. Please add cluster name to limit search' ).format(cluster_location)) break if not found_cluster_with_location and cluster_location and cluster_name: op.add_skipped( project_path, reason=('Cluster with the name {} in {} does not exist in project {}' ).format(cluster_name, cluster_location, project)) # next check includes found_cluster_with_location because we found a cluster at a particular # location thus we cannot skip these checks elif not found_cluster and not found_cluster_with_location and cluster_name: op.add_skipped( project_path, reason=( 'Cluster with the name {} does not exist in project {}').format( cluster_name, project)) elif not found_clusters_at_location and not found_cluster_with_location and cluster_location: op.add_skipped( project_path, reason=('No clusters found at location {} in project {}').format( cluster_location, project)) class Nodeproblem(runbook.Step): """This will confirm if there is any VPC flow logs to destination IP. This will either rule out ip-masq issue or points to ip-mas-agent issue. """ template = 'ipmasq_standard::Nodeproblem' def execute(self): """Are you seeing issue from GKE NODE as well?""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) log_entries = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), filter_str=f'''"{op.get(flags.DEST_IP)}" OR "{op.get(flags.SRC_IP)}"''', start_time=op.get(flags.END_TIME), end_time=datetime.now()) if log_entries: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON)) else: op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class CheckDaemonSet(runbook.Step): """ On GKE for ip-masq can be deployed or automatically in cluster. This step will verify if Daemon set present? """ template = 'ipmasq_standard::daemon' def execute(self): """Lets check if Daemon set present..""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) op.add_uncertain(project_path, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) class CheckConfigMap(runbook.Step): """ This will confirm config map is present as that llow user to make changes on ip-agent. This will check if config map is present ? """ template = 'ipmasq_standard::configmap' def execute(self): """Lets confirm if config map is configure.""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) op.add_uncertain(project_path, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) class CheckPodIP(runbook.Step): """ GKE preserves the Pod IP addresses sent to destinations in the nonMasqueradeCIDRs list. This will confirm if pod IP is present on the list. """ template = 'ipmasq_standard::pod' def execute(self): """Lets check pod ip present..""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) op.add_uncertain(project_path, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) class CheckNodeIP(runbook.Step): """ When Node IP is present under non-masquerade list, it will allow node IP to not get natted . This will check node IP address is present default non-masquerade destinations. """ template = 'ipmasq_standard::node' def execute(self): '''Lets check node IP is present under non-masq cidr.''' project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) op.add_uncertain(project_path, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) class CheckDestinationIP(runbook.Step): """GKE is expected not to IP masquerade. If needed then it should be added on nonMasqueradeCIDRs. This will confirm if pod IP is present on the list. """ template = 'ipmasq_standard::destination' def execute(self): '''Lets check if pod ip address is present.''' project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) op.add_uncertain(project_path, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) class GkeIpMasqStandardEnd(runbook.EndStep): """Concludes the the diagnostics process. If connectivity issue presits from pod, it directs the user to helpful resources and suggests contacting support with a detailed report. """ def execute(self): """Finalize connectivity diagnostics.""" op.info( message= 'If all check passed consider please contact support for further troubleshooting' ) ================================================ FILE: gcpdiag/runbook/gke/gke_ip_masq_standard_test.py ================================================ # Copyright 2024 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. """Test class for gke/GkeIpMasqStandard.""" import unittest from unittest import mock from gcpdiag.queries import apis_stub from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags, gke_ip_masq_standard class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class TestGkeIpMasqStandard(unittest.TestCase): """Unit tests for GkeIpMasqStandard runbook logic.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.project_path = 'projects/p1' self.cluster_c1 = mock.Mock() self.cluster_c1.__str__ = mock.Mock( return_value='projects/p1/locations/us-central1/clusters/c1') self.clusters = {'c1': self.cluster_c1} self.enterContext( mock.patch('gcpdiag.runbook.op.get_context', autospec=True)) self.enterContext( mock.patch('gcpdiag.runbook.op.prep_msg', side_effect=lambda x, **y: x, autospec=True)) @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_ok') def test_execute_found_cluster_with_name_and_location(self, mock_add_ok, mock_op_get, mock_get_clusters, mock_get_project): """StartStep adds OK when both cluster name and location match an existing cluster.""" mock_get_project.return_value = self.project_path mock_get_clusters.return_value = self.clusters mock_op_get.side_effect = { flags.PROJECT_ID: 'p1', flags.GKE_CLUSTER_NAME: 'c1', flags.LOCATION: 'us-central1' }.get step = gke_ip_masq_standard.GkeIpMasqStandardStart() step.execute() mock_add_ok.assert_called_once() @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_execute_skipped_when_cluster_location_mismatch( self, mock_add_skipped, mock_op_get, mock_get_clusters, mock_get_project): """StartStep skips when the cluster name exists but is in a different location.""" mock_get_project.return_value = self.project_path mock_get_clusters.return_value = self.clusters mock_op_get.side_effect = { flags.PROJECT_ID: 'p1', flags.GKE_CLUSTER_NAME: 'c1', flags.LOCATION: 'europe-west1' }.get step = gke_ip_masq_standard.GkeIpMasqStandardStart() step.execute() mock_add_skipped.assert_called_with(self.project_path, reason=mock.ANY) @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_uncertain') def test_execute_uncertain_when_only_location_provided( self, mock_add_uncertain, mock_op_get, mock_get_clusters, mock_get_project): """StartStep adds uncertain when only location is provided and multiple clusters exist.""" mock_get_project.return_value = self.project_path mock_get_clusters.return_value = self.clusters mock_op_get.side_effect = { flags.PROJECT_ID: 'p1', flags.GKE_CLUSTER_NAME: None, flags.LOCATION: 'us-central1' }.get step = gke_ip_masq_standard.GkeIpMasqStandardStart() step.execute() mock_add_uncertain.assert_called_once() def test_legacy_parameter_handler_converts_name_to_cluster_name(self): """legacy_parameter_handler correctly moves 'name' to 'gke_cluster_name'.""" runbook_obj = gke_ip_masq_standard.GkeIpMasqStandard() params = {flags.NAME: 'test_cluster'} runbook_obj.legacy_parameter_handler(params) self.assertNotIn(flags.NAME, params) self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'test_cluster') @mock.patch('gcpdiag.runbook.DiagnosticTree.add_step') @mock.patch('gcpdiag.runbook.DiagnosticTree.add_start') @mock.patch('gcpdiag.runbook.DiagnosticTree.add_end') def test_build_tree_constructs_full_diagnostic_path(self, mock_add_end, mock_add_start, mock_add_step): """build_tree adds all required steps and end states to the tree.""" runbook_obj = gke_ip_masq_standard.GkeIpMasqStandard() runbook_obj.build_tree() mock_add_start.assert_called_once() mock_add_end.assert_called_once() self.assertGreater(mock_add_step.call_count, 1) @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.logs.realtime_query') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_ok') def test_nodeproblem_success_on_logs_found(self, mock_add_ok, mock_op_get, mock_realtime_query, mock_get_project): """Nodeproblem adds OK when flow logs are found.""" mock_get_project.return_value = self.project_path mock_realtime_query.return_value = ['log_entry'] mock_op_get.return_value = 'some_val' step = gke_ip_masq_standard.Nodeproblem() step.execute() mock_add_ok.assert_called_once() class TestGkeIpMasqStandardCoverage(unittest.TestCase): """unit tests to increase coverage of gke_ip_masq_standard.py.""" def setUp(self): super().setUp() self.project_path = 'projects/p1' self.cluster_c1 = mock.Mock() self.cluster_c1.__str__ = mock.Mock( return_value='projects/p1/locations/us-central1/clusters/c1') self.clusters = {'c1': self.cluster_c1} self.enterContext( mock.patch('gcpdiag.runbook.op.get_context', autospec=True)) self.enterContext( mock.patch('gcpdiag.runbook.op.prep_msg', side_effect=lambda x, **y: x, autospec=True)) @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_ok') def test_execute_found_cluster_by_name_only(self, mock_add_ok, mock_op_get, mock_get_clusters, mock_get_project): """GkeIpMasqStandardStart finds cluster when only name is provided (Lines 162-168).""" mock_get_project.return_value = self.project_path mock_get_clusters.return_value = self.clusters mock_op_get.side_effect = { flags.PROJECT_ID: 'p1', flags.GKE_CLUSTER_NAME: 'c1', flags.LOCATION: None }.get step = gke_ip_masq_standard.GkeIpMasqStandardStart() step.execute() mock_add_ok.assert_called_with(self.project_path, reason=mock.ANY) @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_execute_skipped_when_cluster_name_not_found(self, mock_add_skipped, mock_op_get, mock_get_clusters, mock_get_project): """GkeIpMasqStandardStart skips when cluster name is provided but not found (Line 187).""" mock_get_project.return_value = self.project_path mock_get_clusters.return_value = {} mock_op_get.side_effect = { flags.PROJECT_ID: 'p1', flags.GKE_CLUSTER_NAME: 'missing-cluster', flags.LOCATION: None } step = gke_ip_masq_standard.GkeIpMasqStandardStart() step.execute() mock_add_skipped.assert_called_with(self.project_path, reason=mock.ANY) @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_execute_skipped_when_no_clusters_at_location(self, mock_add_skipped, mock_op_get, mock_get_clusters, mock_get_project): """GkeIpMasqStandardStart skips when no clusters exist at the provided location (Line 193).""" mock_get_project.return_value = self.project_path mock_get_clusters.return_value = {} mock_op_get.side_effect = { flags.PROJECT_ID: 'p1', flags.GKE_CLUSTER_NAME: None, flags.LOCATION: 'us-central1' }.get step = gke_ip_masq_standard.GkeIpMasqStandardStart() step.execute() mock_add_skipped.assert_called_with(self.project_path, reason=mock.ANY) @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.logs.realtime_query') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_failed') def test_nodeproblem_failed_on_no_logs(self, mock_add_failed, mock_op_get, mock_realtime_query, mock_get_project): """Nodeproblem fails when no VPC flow logs are found.""" mock_get_project.return_value = self.project_path mock_realtime_query.return_value = [] mock_op_get.return_value = 'val' step = gke_ip_masq_standard.Nodeproblem() step.execute() mock_add_failed.assert_called_once() @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.add_uncertain') def test_diagnostic_steps_uncertain_output(self, mock_add_uncertain, mock_op_get, mock_get_project): """Verifies all check steps provide uncertain findings (Lines 236, 256, 274, 292, 310).""" mock_get_project.return_value = self.project_path mock_op_get.return_value = 'p1' steps = [ gke_ip_masq_standard.CheckDaemonSet(), gke_ip_masq_standard.CheckConfigMap(), gke_ip_masq_standard.CheckPodIP(), gke_ip_masq_standard.CheckNodeIP(), gke_ip_masq_standard.CheckDestinationIP() ] for step in steps: step.execute() self.assertEqual(mock_add_uncertain.call_count, len(steps)) @mock.patch('gcpdiag.runbook.op.info') def test_gke_ip_masq_standard_end_info(self, mock_op_info): """GkeIpMasqStandardEnd provides final troubleshooting guidance (Line 328).""" step = gke_ip_masq_standard.GkeIpMasqStandardEnd() step.execute() mock_op_info.assert_called_once_with(message=mock.ANY) ================================================ FILE: gcpdiag/runbook/gke/image_pull.py ================================================ # Copyright 2024 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. """GKE Image pull failures runbook""" from datetime import datetime from boltons.iterutils import get_path from gcpdiag import runbook from gcpdiag.queries import apis, crm, gke, logs from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags from gcpdiag.utils import GcpApiError def local_realtime_query(filter_list): filter_str = '\n'.join(filter_list) result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID), start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), filter_str=filter_str) return result class ImagePull(runbook.DiagnosticTree): """Analysis and Resolution of Image Pull Failures on GKE clusters. This runbook investigates the gke cluster for Image pull failures and recommends remediation steps. Areas Examined: - GKE cluster - Stackdriver logs """ # Specify parameters common to all steps in the diagnostic tree class. parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'deprecated': True, 'new_parameter': 'gke_cluster_name' }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'required': True, }, flags.LOCATION: { 'type': str, 'help': 'The zone or region of the GKE cluster', 'required': True }, flags.START_TIME: { 'type': datetime, 'help': '(Optional) The start window to query the logs. Format: YYYY-MM-DDTHH:MM:SSZ', 'required': False }, flags.END_TIME: { 'type': datetime, 'help': '(Optional) The end window for the logs. Format: YYYY-MM-DDTHH:MM:SSZ', 'required': False } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate your step classes start = ImagePullStart() # add them to your tree self.add_start(start) image_not_found = ImageNotFound() image_forbidden = ImageForbidden() image_dns_issue = ImageDnsIssue() image_connection_timeout_restricted_private = ImageConnectionTimeoutRestrictedPrivate( ) image_connection_timeout = ImageConnectionTimeout() image_not_found_insufficient_scope = ImageNotFoundInsufficientScope() # Describe the step relationships self.add_step(parent=start, child=image_not_found) self.add_step(parent=image_not_found, child=image_forbidden) self.add_step(parent=image_forbidden, child=image_dns_issue) self.add_step(parent=image_dns_issue, child=image_connection_timeout_restricted_private) self.add_step(parent=image_connection_timeout_restricted_private, child=image_connection_timeout) self.add_step(parent=image_connection_timeout, child=image_not_found_insufficient_scope) # Ending runbook self.add_end(ImagePullEnd()) class ImagePullStart(runbook.StartStep): """Initiates diagnostics for Image pull runbook. Check - if logging API is enabled - verify that the cluster exists at that location """ def execute(self): """Starting the image pull error diagnostics""" # skip if logging is disabled project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) if not apis.is_enabled(project, 'logging'): op.add_skipped(project_path, reason=('Logging disabled in project {}').format(project)) return # verify if the provided cluster at location is present project = crm.get_project(op.get(flags.PROJECT_ID)) try: cluster = gke.get_cluster(op.get(flags.PROJECT_ID), cluster_id=op.get(flags.GKE_CLUSTER_NAME), location=op.get(flags.LOCATION)) except GcpApiError: op.add_skipped( project, reason=('Cluster {} does not exist in {} for project {}').format( op.get(flags.GKE_CLUSTER_NAME), op.get(flags.LOCATION), op.get(flags.PROJECT_ID))) else: op.add_ok(project, reason=('Cluster {} found in {} for project {}').format( cluster.name, op.get(flags.LOCATION), op.get(flags.PROJECT_ID))) class ImageNotFound(runbook.Step): """Check for Image not found log entries""" template = 'imagepull::image_not_found' def execute(self): """Check for "Failed to pull image.*not found" log entries.""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) filter_list = [ 'log_id("events")', 'resource.type="k8s_pod"', 'jsonPayload.message:"Failed to pull image"', 'jsonPayload.message:"not found"', f'resource.labels.location="{cluster_location}"', f'resource.labels.cluster_name="{cluster_name}"' ] log_entries = local_realtime_query(filter_list) if log_entries: sample_log = format_log_entries(log_entries) op.add_failed(project_path, reason=op.prep_msg( op.FAILURE_REASON, log_entry=sample_log, start_time=start_time, end_time=end_time, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=start_time, end_time=end_time)) class ImageForbidden(runbook.Step): """Image cannot be pulled, insufficiente permissions""" template = 'imagepull::image_forbidden' def execute(self): """Check for "Failed to pull image.*403 Forbidden" log entries.""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) filter_list = [ 'log_id("events")', 'resource.type="k8s_pod"', 'jsonPayload.message:"Failed to pull image"', 'jsonPayload.message:"403 Forbidden"', f'resource.labels.location="{cluster_location}"', f'resource.labels.cluster_name="{cluster_name}"' ] log_entries = local_realtime_query(filter_list) if log_entries: sample_log = format_log_entries(log_entries) op.add_failed(project_path, reason=op.prep_msg( op.FAILURE_REASON, log_entry=sample_log, start_time=start_time, end_time=end_time, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=start_time, end_time=end_time)) class ImageDnsIssue(runbook.Step): """Node DNS sever cannot resolve the IP of the repository""" template = 'imagepull::image_dns_issue' def execute(self): """Check for "Failed to pull image.*lookup.*server misbehaving" log entries.""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) filter_list = [ 'log_id("events")', 'resource.type="k8s_pod"', 'jsonPayload.message:"Failed to pull image"', 'jsonPayload.message:"lookup"', 'jsonPayload.message:"server misbehaving"', f'resource.labels.location="{cluster_location}"', f'resource.labels.cluster_name="{cluster_name}"' ] log_entries = local_realtime_query(filter_list) if log_entries: sample_log = format_log_entries(log_entries) op.add_failed(project_path, reason=op.prep_msg( op.FAILURE_REASON, log_entry=sample_log, start_time=start_time, end_time=end_time, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=start_time, end_time=end_time)) class ImageConnectionTimeoutRestrictedPrivate(runbook.Step): """The connection to restricted.googleapis.com or private.googleapis.com is timing out""" template = 'imagepull::image_connection_timeout_restricted_private' def execute(self): """ Check for "Failed to pull image.*dial tcp.*199.36.153.\\d:443: i/o timeout" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) filter_list = [ 'log_id("events")', 'resource.type="k8s_pod"', 'jsonPayload.message:"Failed to pull image"', 'jsonPayload.message:"dial tcp"', 'jsonPayload.message:"199.36.153.*:443: i/o timeout"', f'resource.labels.location="{cluster_location}"', f'resource.labels.cluster_name="{cluster_name}"' ] log_entries = local_realtime_query(filter_list) if log_entries: sample_log = format_log_entries(log_entries) op.add_failed(project_path, reason=op.prep_msg( op.FAILURE_REASON, log_entry=sample_log, start_time=start_time, end_time=end_time, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=start_time, end_time=end_time)) class ImageConnectionTimeout(runbook.Step): """The connection to Google APIs is timing out""" template = 'imagepull::image_connection_timeout' def execute(self): """ Check for "Failed to pull image.*dial tcp.*i/o timeout" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) filter_list = [ 'log_id("events")', 'resource.type="k8s_pod"', 'jsonPayload.message:"Failed to pull image"', 'jsonPayload.message:"dial tcp"', 'jsonPayload.message:"i/o timeout"', f'resource.labels.location="{cluster_location}"', f'resource.labels.cluster_name="{cluster_name}"' ] log_entries = local_realtime_query(filter_list) if log_entries: sample_log = format_log_entries(log_entries) op.add_failed(project_path, reason=op.prep_msg( op.FAILURE_REASON, log_entry=sample_log, start_time=start_time, end_time=end_time, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=start_time, end_time=end_time)) class ImageNotFoundInsufficientScope(runbook.Step): """Check for Image not found log entries with insufficient_scope server message""" template = 'imagepull::image_not_found_insufficient_scope' def execute(self): """ Check for "Failed to pull image.*insufficient_scope" log entries """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) cluster_location = op.get(flags.LOCATION) cluster_name = op.get(flags.GKE_CLUSTER_NAME) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) filter_list = [ 'log_id("events")', 'resource.type="k8s_pod"', 'jsonPayload.message:"Failed to pull image"', 'jsonPayload.message:"insufficient_scope"', f'resource.labels.location="{cluster_location}"', f'resource.labels.cluster_name="{cluster_name}"' ] log_entries = local_realtime_query(filter_list) if log_entries: sample_log = format_log_entries(log_entries) op.add_failed(project_path, reason=op.prep_msg( op.FAILURE_REASON, log_entry=sample_log, start_time=start_time, end_time=end_time, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=start_time, end_time=end_time)) class ImagePullEnd(runbook.EndStep): """Finalizes the diagnostics process for `GKE Image Pull runbbok`. This step prompts the user to confirm satisfaction with the analysis performed for `GKE Image Pull runbbok`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. """ def execute(self): """Finalize `GKE Image Pull runbbok` diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message='Are you satisfied with the `GKE Image Pull runbbok` analysis?') if response == op.NO: op.info(message=op.END_MESSAGE) def format_log_entries(log_entries): """Formats a list of log entries into a readable string. Args: log_entries: A list of log entry dictionaries. Returns: A formatted string containing information from all log entries. """ log_entry = log_entries[-1] formatted_log = [] labels = get_path(log_entry, ('resource', 'labels'), default={}) # Provide default empty dict if labels: formatted_log.extend([ f"Cluster name: {labels.get('cluster_name', 'N/A')}", f"Location: {labels.get('location', 'N/A')}", f"Namespace Name: {labels.get('namespace_name', 'N/A')}", f"Pod Name: {labels.get('pod_name', 'N/A')}", f"Project ID: {labels.get('project_id', 'N/A')}" ]) else: formatted_log.extend([ 'Cluster name: Not found', 'Location: Not found', 'Namespace Name: Not found', 'Pod Name: Not found', 'Project ID: Not found' ]) json_payload = get_path(log_entry, ('jsonPayload',), default={}) # Provide default empty dict formatted_log.extend([ f"Log Message: {json_payload.get('message', 'N/A')}", f"Reporting Instance: {json_payload.get('reportingInstance', 'N/A')}", f"Last Timestamp: {json_payload.get('lastTimestamp', 'N/A')}" ]) return '\n'.join(formatted_log) ================================================ FILE: gcpdiag/runbook/gke/image_pull_test.py ================================================ # Copyright 2024 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. """Test class for gke/Image_pull.""" import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gke, op, snapshot_test_base from gcpdiag.runbook.gke import flags, image_pull from gcpdiag.utils import GcpApiError class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke runbook_name = 'gke/image-pull' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr', 'gke_cluster_name': 'gke-cluster', 'location': 'europe-west10', 'start_time': '2024-08-12T01:00:00Z', 'end_time': '2024-08-12T23:00:00Z' }] class TestImagePull(unittest.TestCase): """Unit tests for GKE Image Pull runbook.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.project_id = 'test-project' self.cluster_name = 'test-cluster' self.location = 'us-central1' self.enterContext( mock.patch('gcpdiag.runbook.op.get_context', autospec=True)) self.enterContext( mock.patch( 'gcpdiag.runbook.op.prep_msg', side_effect=lambda x, **y: x, autospec=True, )) @mock.patch('gcpdiag.runbook.gke.image_pull.op.get') @mock.patch('gcpdiag.queries.apis.is_enabled') @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_skipped') def test_image_pull_start_skips_when_logging_disabled(self, mock_add_skipped, mock_get_project, mock_is_enabled, mock_op_get): """ImagePullStart should skip execution if the Logging API is disabled.""" del mock_get_project mock_op_get.side_effect = (lambda key: self.project_id if key == flags.PROJECT_ID else None) mock_is_enabled.return_value = False step = image_pull.ImagePullStart() step.execute() mock_add_skipped.assert_called_once() self.assertIn('Logging disabled', mock_add_skipped.call_args[1]['reason']) @mock.patch('gcpdiag.queries.apis.is_enabled') @mock.patch('gcpdiag.runbook.gke.image_pull.crm.get_project') @mock.patch('gcpdiag.runbook.gke.image_pull.op.get') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_skipped') def test_image_pull_start_skips_when_cluster_not_found( self, mock_add_skipped, mock_get_cluster, mock_op_get, mock_get_project, mock_is_enabled, ): """ImagePullStart should skip execution if the cluster does not exist.""" del mock_get_project mock_is_enabled.return_value = True mock_op_get.side_effect = { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: self.cluster_name, flags.LOCATION: self.location, }.get mock_response = mock.Mock() mock_response.status = 404 mock_response.content = b'{"error": "cluster not found"}' mock_get_cluster.side_effect = GcpApiError(mock_response) step = image_pull.ImagePullStart() step.execute() mock_add_skipped.assert_called_once() self.assertIn('does not exist', mock_add_skipped.call_args[1]['reason']) @mock.patch('gcpdiag.runbook.gke.image_pull.local_realtime_query') @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_failed') @mock.patch('gcpdiag.runbook.gke.image_pull.crm.get_project') @mock.patch('gcpdiag.runbook.gke.image_pull.op.get') def test_image_not_found_fails_when_logs_detected(self, mock_op_get, mock_get_project, mock_add_failed, mock_query): """ImageNotFound should report failure when 'not found' logs are present.""" del mock_get_project mock_op_get.return_value = 'test' mock_query.return_value = [{ 'resource': { 'labels': { 'pod_name': 'test-pod' } }, 'jsonPayload': { 'message': 'Failed to pull image: not found' }, }] step = image_pull.ImageNotFound() step.execute() mock_add_failed.assert_called_once() def test_format_log_entries_handles_missing_labels(self): """format_log_entries should provide 'Not found' placeholders when labels are missing.""" log_entries = [{'jsonPayload': {'message': 'error'}}] result = image_pull.format_log_entries(log_entries) self.assertIn('Cluster name: Not found', result) self.assertIn('Log Message: error', result) def test_legacy_parameter_handler_migrates_name_to_gke_cluster_name(self): """legacy_parameter_handler should migrate the deprecated 'name' flag.""" params = {flags.NAME: 'old-name'} runbook_obj = image_pull.ImagePull() runbook_obj.legacy_parameter_handler(params) self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'old-name') self.assertNotIn(flags.NAME, params) @mock.patch('gcpdiag.runbook.gke.image_pull.op.prompt') @mock.patch('gcpdiag.runbook.gke.image_pull.op.info') def test_image_pull_end_shows_info_on_no_response(self, mock_op_info, mock_op_prompt): """ImagePullEnd should show an end message if user is not satisfied.""" mock_op_prompt.return_value = op.NO step = image_pull.ImagePullEnd() step.execute() mock_op_info.assert_called_once() class TestImagePullCoverage(unittest.TestCase): """Additional unit tests to achieve 100% coverage for image_pull.py.""" def setUp(self): super().setUp() self.project_id = 'test-project' self.cluster_name = 'test-cluster' self.location = 'us-central1' self.enterContext( mock.patch('gcpdiag.runbook.op.get_context', autospec=True)) self.enterContext( mock.patch( 'gcpdiag.runbook.op.prep_msg', side_effect=lambda x, **y: x, autospec=True, )) @mock.patch('gcpdiag.queries.logs.realtime_query') @mock.patch('gcpdiag.runbook.gke.image_pull.op.get') def test_local_realtime_query_correctly_calls_logs_query( self, mock_op_get, mock_logs_query): """local_realtime_query should use parameters from op.get for the logs query.""" mock_op_get.side_effect = { flags.PROJECT_ID: self.project_id, flags.START_TIME: '2024-01-01T00:00:00Z', flags.END_TIME: '2024-01-01T01:00:00Z', }.get filters = ['filter1', 'filter2'] image_pull.local_realtime_query(filters) mock_logs_query.assert_called_once_with(project_id=self.project_id, start_time='2024-01-01T00:00:00Z', end_time='2024-01-01T01:00:00Z', filter_str='filter1\nfilter2') @mock.patch('gcpdiag.runbook.DiagnosticTree.add_end') @mock.patch('gcpdiag.runbook.DiagnosticTree.add_step') @mock.patch('gcpdiag.runbook.DiagnosticTree.add_start') def test_build_tree_constructs_correct_diagnostic_structure( self, mock_add_start, mock_add_step, mock_add_end): """build_tree should define the expected sequence of diagnostic steps.""" dtree = image_pull.ImagePull() dtree.build_tree() mock_add_start.assert_called_once() mock_add_end.assert_called_once() self.assertGreater(mock_add_step.call_count, 1) @mock.patch('gcpdiag.runbook.gke.image_pull.local_realtime_query') @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_ok') @mock.patch('gcpdiag.runbook.gke.image_pull.crm.get_project') @mock.patch('gcpdiag.runbook.gke.image_pull.op.get') def test_diagnostic_steps_report_ok_when_no_logs_found( self, mock_op_get, mock_get_project, mock_add_ok, mock_query): """Verify Success paths for diagnostic steps (e.g., ImageForbidden, ImageDnsIssue).""" del mock_get_project mock_op_get.return_value = 'test' mock_query.return_value = [] steps_to_test = [ image_pull.ImageNotFound(), image_pull.ImageForbidden(), image_pull.ImageDnsIssue(), image_pull.ImageConnectionTimeout(), image_pull.ImageNotFoundInsufficientScope() ] for step in steps_to_test: step.execute() mock_add_ok.assert_called() mock_add_ok.reset_mock() @mock.patch('gcpdiag.runbook.gke.image_pull.local_realtime_query') @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_failed') @mock.patch('gcpdiag.runbook.gke.image_pull.crm.get_project') @mock.patch('gcpdiag.runbook.gke.image_pull.op.get') def test_steps_fail_on_matching_log_entries(self, mock_op_get, mock_get_project, mock_add_failed, mock_query): """Verify Failure paths for specific error classes like Forbidden or DNS issues.""" del mock_get_project mock_op_get.return_value = 'test' mock_query.return_value = [{ 'jsonPayload': { 'message': 'error message' }, 'resource': {} }] steps = [ image_pull.ImageForbidden(), image_pull.ImageDnsIssue(), image_pull.ImageConnectionTimeoutRestrictedPrivate(), image_pull.ImageConnectionTimeout(), image_pull.ImageNotFoundInsufficientScope() ] for step in steps: step.execute() mock_add_failed.assert_called() mock_add_failed.reset_mock() @mock.patch('gcpdiag.runbook.gke.image_pull.op.get') @mock.patch('gcpdiag.queries.apis.is_enabled') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_ok') def test_image_pull_start_succeeds_when_cluster_and_logging_active( self, mock_add_ok, mock_get_project, mock_get_cluster, mock_is_enabled, mock_op_get, ): """ImagePullStart should report OK when requirements are met.""" del mock_get_project mock_op_get.return_value = 'test' mock_is_enabled.return_value = True mock_cluster = mock.Mock() mock_cluster.name = 'test-cluster' mock_cluster.name = 'test-cluster' mock_get_cluster.return_value = mock_cluster step = image_pull.ImagePullStart() step.execute() mock_add_ok.assert_called_once() self.assertIn('found', mock_add_ok.call_args[1]['reason']) ================================================ FILE: gcpdiag/runbook/gke/ip_exhaustion.py ================================================ # Copyright 2024 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. """Module containing VM External IP connectivity debugging tree and custom steps""" from datetime import datetime from gcpdiag import config, runbook from gcpdiag.queries import crm, gke, logs from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags from gcpdiag.utils import GcpApiError def local_realtime_query(filter_str): result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID), start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), filter_str=filter_str) return result class IpExhaustion(runbook.DiagnosticTree): """Troubleshooting ip exhaustion issues on GKE clusters. This runbook investigates the gke cluster for ip exhaustion issues and recommends remediation steps. Areas Examined: - GKE cluster type. - GKE cluster and nodepool configuration - Stackdriver logs """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The ID of the project hosting the GKE Cluster', 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'deprecated': True, 'new_parameter': 'gke_cluster_name' }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'required': True, }, flags.LOCATION: { 'type': str, 'help': 'The zone or region of the GKE cluster', 'required': True }, flags.START_TIME: { 'type': datetime, 'help': 'The start window to investigate the ip exhaustion. Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.END_TIME: { 'type': datetime, 'help': 'The end window to investigate the ip exhaustion. Format: YYYY-MM-DDTHH:MM:SSZ' } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate your step classes start = IpExhaustionStart() # add them to your tree self.add_start(start) # you can create custom steps to define unique logic pod_ip_range_exhaustion = PodIpRangeExhaustion() node_ip_range_exhaustion = NodeIpRangeExhaustion() # Describe the step relationships self.add_step(parent=start, child=node_ip_range_exhaustion) self.add_step(parent=node_ip_range_exhaustion, child=pod_ip_range_exhaustion) # Ending your runbook self.add_end(IpExhaustionEnd()) class IpExhaustionStart(runbook.StartStep): """Start IP Exhaustion Checks""" def execute(self): """Starting the IP Exhaustion diagnostics""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: cluster = gke.get_cluster(op.get(flags.PROJECT_ID), cluster_id=op.get(flags.GKE_CLUSTER_NAME), location=op.get(flags.LOCATION)) except GcpApiError: op.add_skipped( project, reason=('Cluster {} does not exist in {} for project {}').format( op.get(flags.GKE_CLUSTER_NAME), op.get(flags.LOCATION), op.get(flags.PROJECT_ID))) else: op.add_ok(project, reason=('Cluster {} found in {} for project {}').format( cluster.name, op.get(flags.LOCATION), op.get(flags.PROJECT_ID))) class NodeIpRangeExhaustion(runbook.Step): """Check Node IP Range Exhaustion and offer remediation. Checks Node IP range exhaustion and offers remediation step. """ template = 'ipexhaustion::node_ip_exhaustion' # max number of characters from the cluster name that will end up in the node name MAX_GKE_NAME_LENGTH = 16 def execute(self): """Checking node IP Exhaustion and offering remediation steps""" cluster = gke.get_cluster(op.get(flags.PROJECT_ID), cluster_id=op.get(flags.GKE_CLUSTER_NAME), location=op.get(flags.LOCATION)) location = op.get(flags.LOCATION) name = op.get(flags.GKE_CLUSTER_NAME) error_msg = 'IP_SPACE_EXHAUSTED' node_subnet = cluster.get_subnet_name # adding fltr variable, because otherwise the filter string will be longer than 100 chars fltr = 'protoPayload.status.details.ipSpaceExhausted.networkOrSubnetworkResource.resourceName' # using here ':' instead of '=' for 'protoPayload.status.message' because there could be # status messages like 'IP_SPACE_EXHAUSTED,IP_SPACE_EXHAUSTED' instead of 'IP_SPACE_EXHAUSTED' filter_str = [ 'log_id("cloudaudit.googleapis.com/activity")', 'protoPayload.methodName="v1.compute.instances.insert"', 'resource.type="gce_instance"', 'severity=ERROR', f'protoPayload.status.message:"{error_msg}"', f'protoPayload.resourceName:"{location}"', f'protoPayload.resourceName:"{name[:self.MAX_GKE_NAME_LENGTH]}"', f'{fltr}="{node_subnet}"' ] filter_str = '\n'.join(filter_str) # Check activity logs if 'IP_SPACE_EXHAUSTED' log is present in cloud logging. op.info(f'Searching cloud logging for the string {error_msg} ' 'which indicates IP Exhaustion issue') ip_space_exhausted_log_entries = local_realtime_query(filter_str) # Check cloud log entries for IP exhaustion. if ip_space_exhausted_log_entries: op.info( f'{error_msg} error found for cluster {name} and subnet {node_subnet}' ) op.add_failed(cluster, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=name, node_subnet=node_subnet), remediation=op.prep_msg(op.FAILURE_REMEDIATION, node_subnet=node_subnet)) else: op.add_ok(cluster, reason=op.prep_msg(op.SUCCESS_REASON, cluster_name=name)) class PodIpRangeExhaustion(runbook.Step): """Check Pod IP Range Exhaustion and offer remediation. Checks Pod IP range exhaustion and offers remediation step. """ template = 'ipexhaustion::pod_ip_exhaustion' MAX_GKE_SUBNET_NAME_LENGTH = 15 MAX_GKE_NAME_LENGTH = 16 def execute(self): """Checking Pod IP Exhaustion and offering remediation steps""" cluster = gke.get_cluster(op.get(flags.PROJECT_ID), cluster_id=op.get(flags.GKE_CLUSTER_NAME), location=op.get(flags.LOCATION)) project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) name = op.get(flags.GKE_CLUSTER_NAME) error_msg = 'IP_SPACE_EXHAUSTED' node_subnet = cluster.get_subnet_name pool_config = cluster.get_nodepool_config pool_nr = len(pool_config) # adding fltr variable, because otherwise the filter string will be longer than 100 chars fltr = 'protoPayload.status.details.ipSpaceExhausted.networkOrSubnetworkResource.resourceName' # using here ':' instead of '=' for 'protoPayload.status.message' because there could be # status messages like 'IP_SPACE_EXHAUSTED,IP_SPACE_EXHAUSTED' instead of 'IP_SPACE_EXHAUSTED' filter_str = [ 'log_id("cloudaudit.googleapis.com/activity")', 'protoPayload.methodName="v1.compute.instances.insert"', 'resource.type="gce_instance"', 'severity=ERROR', f'protoPayload.status.message:"{error_msg}"', f'protoPayload.resourceName:"{location}"', f'protoPayload.resourceName:"{name[:self.MAX_GKE_NAME_LENGTH]}"' ] # creating a pod_ranges list from a set to exclude duplicates pod_ranges = list( {pool_config[i]['networkConfig']['podRange'] for i in range(pool_nr)}) # add opening parenthesis to the query filter_str.append('(') # create the filter for all subnets for all nodepools for pod_range in pod_ranges: resource = (f'{node_subnet[:self.MAX_GKE_SUBNET_NAME_LENGTH]}-' f'{pod_range[:self.MAX_GKE_SUBNET_NAME_LENGTH]}-') # if it's the last element, don't add OR to the filter if pod_range == pod_ranges[-1]: filter_str.append(f'{fltr}:"{resource}"') else: filter_str.append(f'{fltr}:"{resource}" OR') # add closing parenthesis to the query filter_str.append(')') filter_str = '\n'.join(filter_str) ip_space_exhausted_pod_range_log_entries = local_realtime_query(filter_str) if ip_space_exhausted_pod_range_log_entries: op.info( 'Verifying if the cluster is an Autopilot cluster or a Standard cluster.' ) if cluster.is_autopilot: op.info('Cluster is an Autopilot cluster') op.add_failed(cluster, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=name), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: location = op.get(flags.LOCATION) op.info('Cluster is a Standard cluster') op.add_failed(cluster, reason=op.prep_msg(op.FAILURE_REASON, cluster_name=name), remediation=op.prep_msg( op.FAILURE_REMEDIATION_ALT1, cluster_name=name, project_name=project, subnet_name=node_subnet, region=location, network=cluster.get_network_string)) else: op.add_ok( cluster, reason= (f'No Pod IP exhaustion issues found for cluster {name} in the project {project}' )) class IpExhaustionEnd(runbook.EndStep): """Concludes the CLuster IP Exhaustion diagnostics process. If the issue persists, it directs the user to helpful resources and suggests contacting support with a detailed report. """ def execute(self): """Finalize VM external connectivity diagnostics.""" if not config.get(flags.INTERACTIVE_MODE): response = op.prompt( kind=op.CONFIRMATION, message=('Are you still experiencing exhaustion issues on the cluster' f' {op.get(flags.GKE_CLUSTER_NAME)}'), choice_msg='Enter an option: ', ) if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gke/ip_exhaustion_test.py ================================================ # Copyright 2024 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. """Test class for gke/IpExhaustionIssues.""" import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gke, op, snapshot_test_base from gcpdiag.runbook.gke import flags, ip_exhaustion from gcpdiag.utils import GcpApiError class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke runbook_name = 'gke/ip-exhaustion' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gke3-gggg', 'gke_cluster_name': 'cluster-1', 'location': 'us-central1-c', 'start_time': '2024-06-30T01:00:00Z', 'end_time': '2024-06-30T23:00:00Z' }] class TestIpExhaustionUnit(unittest.TestCase): """Unit tests covering the diagnostic tree and individual steps.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.project_id = 'test-project' self.cluster_name = 'test-cluster' self.location = 'us-central1-a' self.enterContext( mock.patch('gcpdiag.runbook.op.get_context', autospec=True)) self.enterContext( mock.patch( 'gcpdiag.runbook.op.prep_msg', side_effect=lambda x, **y: x, autospec=True, )) self.enterContext(mock.patch('gcpdiag.runbook.op.info', autospec=True)) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.logs.realtime_query') def test_local_realtime_query(self, mock_query, mock_op_get): """Covers lines 26-30: Verifies the log query helper correctly handles parameters.""" mock_op_get.side_effect = lambda k, default=None: { flags.PROJECT_ID: self.project_id, flags.START_TIME: '2024-06-30T01:00:00Z', flags.END_TIME: '2024-06-30T23:00:00Z' }.get(k, default) ip_exhaustion.local_realtime_query('test-filter') mock_query.assert_called_once_with(project_id=self.project_id, start_time='2024-06-30T01:00:00Z', end_time='2024-06-30T23:00:00Z', filter_str='test-filter') def test_legacy_parameter_handler(self): """Covers lines 89-90: Verifies handling of deprecated 'name' parameter.""" tree = ip_exhaustion.IpExhaustion() params = {flags.NAME: 'old-name-param'} tree.legacy_parameter_handler(params) self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'old-name-param') self.assertNotIn(flags.NAME, params) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_start_step_cluster_not_found(self, mock_skip, mock_get_cluster, unused_mock_get_project, mock_op_get): """Covers lines 116-122: Verifies skipping when GKE cluster is not found.""" mock_op_get.side_effect = lambda k, default=None: { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: self.cluster_name, flags.LOCATION: self.location }.get(k, default) # Simulate API error for non-existent cluster mock_response = mock.Mock() mock_response.status = 404 mock_response.content = b'{"error": "cluster not found"}' mock_get_cluster.side_effect = GcpApiError(mock_response) step = ip_exhaustion.IpExhaustionStart() step.execute() mock_skip.assert_called_once() self.assertIn('does not exist', mock_skip.call_args[1]['reason']) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query') @mock.patch('gcpdiag.runbook.op.add_failed') def test_node_exhaustion_detected(self, mock_failed, mock_query, unused_mock_get_cluster, mock_op_get): """Covers lines 147-187: Verifies failure report when Node IP exhaustion logs found.""" mock_op_get.side_effect = lambda k, default=None: { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: self.cluster_name, flags.LOCATION: self.location }.get(k, default) mock_query.return_value = ['IP_SPACE_EXHAUSTED log entry'] step = ip_exhaustion.NodeIpRangeExhaustion() step.execute() mock_failed.assert_called_once() @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query') @mock.patch('gcpdiag.runbook.op.add_failed') def test_pod_exhaustion_autopilot_detected(self, mock_failed, mock_query, mock_get_cluster, mock_op_get): """Covers lines 204-273: Verifies Autopilot-specific failure logic for Pod IP exhaustion.""" mock_op_get.side_effect = lambda k, default=None: { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: self.cluster_name, flags.LOCATION: self.location }.get(k, default) mock_query.return_value = ['found pod exhaustion log'] cluster = mock_get_cluster.return_value cluster.is_autopilot = True cluster.get_nodepool_config = [{'networkConfig': {'podRange': 'range-1'}}] step = ip_exhaustion.PodIpRangeExhaustion() step.execute() mock_failed.assert_called_once() @mock.patch('gcpdiag.config.get') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.runbook.op.prompt') @mock.patch('gcpdiag.runbook.op.info') def test_end_step_resolution_confirmation(self, mock_info, mock_prompt, mock_op_get, mock_config_get): """Covers lines 290-298: Verifies final prompt logic in non-interactive mode.""" mock_config_get.return_value = False # Force prompt trigger mock_prompt.return_value = 'NO' mock_op_get.return_value = self.cluster_name with mock.patch('gcpdiag.runbook.op.NO', 'NO'): step = ip_exhaustion.IpExhaustionEnd() step.execute() mock_prompt.assert_called_once() mock_info.assert_called_with(message=mock.ANY) def test_build_tree(self): """Covers lines 96-107: Verifies the diagnostic tree structure and step relationships.""" tree = ip_exhaustion.IpExhaustion() tree.build_tree() self.assertIsNotNone(tree.start) self.assertIsInstance(tree.start, ip_exhaustion.IpExhaustionStart) self.assertEqual(tree.start.doc_file_name, 'ip-exhaustion-start') self.assertEqual(len(tree.start.steps), 2) self.assertIsInstance(tree.start.steps[0], ip_exhaustion.NodeIpRangeExhaustion) self.assertIsInstance(tree.start.steps[1], ip_exhaustion.IpExhaustionEnd) self.assertIsInstance(tree.start.steps[0].steps[0], ip_exhaustion.PodIpRangeExhaustion) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.op.add_ok') def test_start_step_cluster_found(self, mock_ok, mock_get_cluster, unused_mock_get_project, mock_op_get): """Covers line 128: Verifies success path when the GKE cluster exists.""" mock_op_get.side_effect = lambda k, default=None: { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: self.cluster_name, flags.LOCATION: self.location }.get(k, default) mock_get_cluster.return_value.name = self.cluster_name step = ip_exhaustion.IpExhaustionStart() step.execute() # Confirms op.add_ok is called (line 128) mock_ok.assert_called_once() self.assertIn('found', mock_ok.call_args[1]['reason']) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query') @mock.patch('gcpdiag.runbook.op.add_ok') def test_node_exhaustion_not_found(self, mock_ok, mock_query, unused_mock_get_cluster, mock_op_get): """Covers line 187: Verifies OK status when no Node IP exhaustion logs are found.""" mock_op_get.side_effect = lambda k, default=None: { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: self.cluster_name, flags.LOCATION: self.location }.get(k, default) mock_query.return_value = [] # Simulate no exhaustion logs step = ip_exhaustion.NodeIpRangeExhaustion() step.execute() # Confirms op.add_ok is called (line 187) mock_ok.assert_called_once() @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query') @mock.patch('gcpdiag.runbook.op.add_failed') @mock.patch('gcpdiag.runbook.op.info') def test_pod_exhaustion_standard_cluster_detected(self, mock_info, mock_failed, mock_query, mock_get_cluster, mock_op_get): """Covers lines 243, 266-273: Verifies failure logic for Standard GKE clusters.""" mock_op_get.side_effect = lambda k, default=None: { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: self.cluster_name, flags.LOCATION: self.location }.get(k, default) mock_query.return_value = ['IP_SPACE_EXHAUSTED'] cluster = mock_get_cluster.return_value cluster.is_autopilot = False cluster.get_nodepool_config = [{'networkConfig': {'podRange': 'range-1'}}] step = ip_exhaustion.PodIpRangeExhaustion() step.execute() mock_failed.assert_called_once() mock_info.assert_any_call('Cluster is a Standard cluster') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_cluster') @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query') @mock.patch('gcpdiag.runbook.op.add_ok') def test_pod_exhaustion_not_found(self, mock_ok, mock_query, mock_get_cluster, mock_op_get): """Verifies OK when no Pod IP exhaustion logs found.""" mock_op_get.side_effect = lambda k, default=None: { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: self.cluster_name, flags.LOCATION: self.location }.get(k, default) mock_query.return_value = [] cluster = mock_get_cluster.return_value cluster.get_nodepool_config = [{'networkConfig': {'podRange': 'range-1'}}] step = ip_exhaustion.PodIpRangeExhaustion() step.execute() mock_ok.assert_called_once() ================================================ FILE: gcpdiag/runbook/gke/logs.py ================================================ # Copyright 2024 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. """Module containing investigating and resolving GKE logging related issues""" from typing import Dict from gcpdiag import runbook from gcpdiag.lint.gke import util from gcpdiag.queries import apis, crm, gke, iam, monitoring, quotas from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags class Logs(runbook.DiagnosticTree): """Provides a methodical approach to troubleshooting GKE logging issues. This runbook guides you through a systematic investigation of potential causes when logs from the Google Kubernetes Engine (GKE) cluster are missing or incomplete. The focus is on core configuration settings that are essential for proper logging functionality. The following areas are examined: - **Project-Level Logging:** Ensures that the Google Cloud project housing the GKE cluster has the Cloud Logging API enabled. - **Cluster-Level Logging:** Verifies that logging is explicitly enabled within the GKE cluster's configuration. - **Node Pool Permissions:** Confirms that the nodes within the cluster's node pools have the 'Cloud Logging Write' scope enabled, allowing them to send log data. - **Service Account Permissions:** Validates that the service account used by the node pools possesses the necessary IAM permissions to interact with Cloud Logging. Specifically, the "roles/logging.logWriter" role is typically required. - **Cloud Logging API Write Quotas:** Verifies that Cloud Logging API Write quotas have not been exceeded within the specified timeframe. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The ID of the project hosting the GKE Cluster', 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'deprecated': True, 'new_parameter': 'gke_cluster_name', }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': 'The name of the GKE cluster', 'required': True }, flags.LOCATION: { 'type': str, 'help': 'The zone or region of the GKE cluster', 'required': True } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate your step classes start = LogsStart() project_logging_check = LoggingApiEnabled() cluster_logging_check = ClusterLevelLoggingEnabled() node_pool_access_scope_check = NodePoolCloudLoggingAccessScope() service_account_permissions_check = ServiceAccountLoggingPermission() logging_write_api_quota_exceeded_check = LoggingWriteApiQuotaExceeded() # add them to the tree self.add_start(start) self.add_step(parent=start, child=project_logging_check) self.add_step(parent=project_logging_check, child=cluster_logging_check) self.add_step(parent=cluster_logging_check, child=node_pool_access_scope_check) self.add_step(parent=node_pool_access_scope_check, child=service_account_permissions_check) self.add_step(parent=service_account_permissions_check, child=logging_write_api_quota_exceeded_check) self.add_end(step=LogsEnd()) class LogsStart(runbook.StartStep): """Initiates diagnostics for GKE Clusters. - **Initial Checks:** - Verifies if logging API is enabled for the project. - Validates that there are GKE clusters in the project. - (Optional) If a cluster name is provided, checks if that cluster exists in the project. - (Optional) If a location is provided, verifies there are clusters in that location. - (Optional) If both a location and a name are provided, verifies that the cluster exists at that location. """ def execute(self): """Checks the provided parameters.""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) # Checks if there are clusters in the project clusters = gke.get_clusters(op.get_context()) if not clusters: op.add_skipped( project_path, reason=('No GKE clusters found in project {}').format(project)) return # The following checks adjust based on the input provided: # - Both cluster name and location: Verify if that specific cluster exists at that location. cluster_name = op.get(flags.GKE_CLUSTER_NAME) cluster_location = op.get(flags.LOCATION) found_cluster = False found_cluster_with_location = False found_clusters_at_location = False if cluster_name and cluster_location: for cluster in clusters.values(): if cluster_name == str(cluster).rsplit('/', maxsplit=1)[-1] \ and cluster_location == str(cluster).split('/')[-3]: found_cluster_with_location = True break if not found_cluster_with_location and cluster_location and cluster_name: op.add_skipped( project_path, reason=('Cluster with the name {} in {} does not exist in project {}' ).format(cluster_name, cluster_location, project)) # next check includes found_cluster_with_location because we found a cluster at a particular # location thus we cannot skip these checks elif not found_cluster and not found_cluster_with_location and cluster_name: op.add_skipped( project_path, reason=( 'Cluster with the name {} does not exist in project {}').format( cluster_name, project)) elif not found_clusters_at_location and not found_cluster_with_location and cluster_location: op.add_skipped( project_path, reason=('No clusters found at location {} in project {}').format( cluster_location, project)) class LoggingApiEnabled(runbook.Step): """Verifies if the Cloud Logging API is enabled for the project hosting the GKE cluster. This initial step ensures that the fundamental infrastructure for logging within the project is operational. If the Cloud Logging API is disabled, logs from the GKE cluster won't be collected or stored by Google Cloud. """ template = 'logs::project_logging_check' def execute(self): """Checks if logging API is disabled in the project.""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) if apis.is_enabled(project, 'logging'): op.add_ok(project_path, reason='The logging API is enabled in your project.') else: op.add_failed(project_path, reason='The logging API is NOT enabled in your project.', remediation='Please endable the logging API') class ClusterLevelLoggingEnabled(runbook.Step): """Verifies that logging is enabled at the GKE cluster level. Confirms that the GKE cluster configuration explicitly enables logging. Even if the project has the Cloud Logging API enabled and other settings are correct, logs won't be collected if cluster-level logging is disabled. """ template = 'logs::cluster_logging_check' def execute(self): """Checks if GKE level logging is disabled""" clusters = gke.get_clusters(op.get_context()) partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}' cluster_obj = util.get_cluster_object(clusters, partial_path) if not cluster_obj.is_autopilot: disabled: list[str] = [] if cluster_obj.has_logging_enabled() and \ 'WORKLOADS' not in cluster_obj.enabled_logging_components(): disabled.append('workload logs') elif not cluster_obj.has_logging_enabled(): disabled.append('logging') if not disabled: op.add_ok( cluster_obj, reason= f' GKE level logging is enabled for the cluster {cluster_obj}.') else: op.add_failed( cluster_obj, reason= f'GKE level logging is not enabled for the cluster {cluster_obj}.', remediation='Please endable GKE level logging for this cluster.') class NodePoolCloudLoggingAccessScope(runbook.Step): """Verifies that GKE node pools have the required Cloud Logging access scopes. Confirms that the nodes within the GKE cluster's node pools have the necessary scopes to write log data to Cloud Logging. These scopes include 'https://www.googleapis.com/auth/logging.write' and potentially others, such as 'https://www.googleapis.com/auth/cloud-platform' and 'https://www.googleapis.com/auth/logging.admin', depending on the configuration. """ template = 'logs::node_pool_access_scope_check' def execute(self): """Verifies the node pools have Cloud Logging access scope""" required_clogging_access_scope = [ 'https://www.googleapis.com/auth/logging.write', 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/logging.admin' ] clusters = gke.get_clusters(op.get_context()) partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}' cluster_obj = util.get_cluster_object(clusters, partial_path) for nodepool in cluster_obj.nodepools: if any(s in nodepool.config.oauth_scopes for s in required_clogging_access_scope): op.add_ok( nodepool, reason= f'The node pool {nodepool} has the correct Cloud Logging access scope.' ) else: op.add_failed( nodepool, reason= f'The node pool {nodepool} is missing Cloud Logging access scope.', remediation= 'Please create new node pools with the correct logging scope. \ Please read https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging\ #verify_nodes_in_the_node_pools_have_access_scope.') class ServiceAccountLoggingPermission(runbook.Step): """Verifies the service accounts associated with node pools have 'logging.logWriter' permissions. Checks that the service accounts used by nodes in the GKE cluster have the essential "roles/logging.logWriter" IAM permission. This permission is required to send log data to Google Cloud Logging. """ template = 'logs::service_account_permissions_check' def execute(self): """ Verifies the node pool's service account has a role with the correct logging IAM permissions """ clusters = gke.get_clusters(op.get_context()) partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}' cluster_obj = util.get_cluster_object(clusters, partial_path) iam_policy = iam.get_project_policy(op.get_context()) logging_role = 'roles/logging.logWriter' # Verifies service-account permissions for every nodepool. for np in cluster_obj.nodepools: sa = np.service_account if not iam.is_service_account_enabled(sa, op.get_context()): op.add_failed( np, reason=f'The service account {sa} is disabled or deleted.', remediation='The service account {} used by GKE nodes should have \ the logging.logWriter role.'.format(sa)) elif not iam_policy.has_role_permissions(f'serviceAccount:{sa}', logging_role): op.add_failed(np, reason='The service account: {} is missing \ role: {}.'.format(sa, logging_role), remediation='Please grant the role: {} to the service \ account: {}.'.format(logging_role, sa)) else: op.add_ok(np, reason='Service account: {} has the correct \ logging permissions.'.format(sa)) class LoggingWriteApiQuotaExceeded(runbook.Step): """Verifies that Cloud Logging API write quotas have not been exceeded. Checks if the project has exceeded any Cloud Logging write quotas within the defined timeframe. Exceeding the quota could prevent nodes from sending log data, even if other configurations are correct. """ template = 'logs::logging_write_api_quota_exceeded_check' def execute(self): """Checks if Cloud Logging API write quotas have been exceeded""" query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {} params = { 'start_time': op.get(flags.START_TIME).strftime("d\'%Y/%m/%d-%H:%M:%S'"), 'end_time': op.get(flags.END_TIME).strftime("d\'%Y/%m/%d-%H:%M:%S'") } query_results_per_project_id[op.get(flags.PROJECT_ID)] = \ monitoring.query( op.get(flags.PROJECT_ID), quotas.QUOTA_EXCEEDED_QUERY_WINDOW_TEMPLATE.format_map(params)) project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) if len(query_results_per_project_id[project]) == 0: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) else: exceeded_quotas = [] for i in query_results_per_project_id[project].values(): if i['labels'][ 'metric.limit_name'] == 'WriteRequestsPerMinutePerProject': try: exceeded_quotas.append(i['labels']['metric.limit_name']) except KeyError: op.add_skipped(op.project, 'no data') #invalid query result return exceeded_quota_names = ', '.join(exceeded_quotas) op.add_failed( project_path, reason='Project {} has recently exceeded the following \ quotas: {}.'.format(project, exceeded_quota_names), remediation='Please check the project {} for the Cloud Logging API \ quotas {} which have been reached'.format(project, exceeded_quota_names)) class LogsEnd(runbook.EndStep): """Finalizes the 'GKE logs' diagnostic process. Prompts the user for satisfaction with the Root Cause Analysis (RCA) and takes appropriate actions based on their response: * **Confirmation:** Concludes the runbook execution. * **Further Action:** Triggers additional steps, such as report generation, if necessary. """ def execute(self): """Finalize `GKE logs` diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message='Are you satisfied with the `GKE logs` RCA performed?') if response == op.NO: op.info(message=op.END_MESSAGE) op.interface.rm.generate_report() ================================================ FILE: gcpdiag/runbook/gke/logs_test.py ================================================ # Copyright 2024 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. """Test class for gke/GkeLogs""" import datetime import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gke as gke_runbook from gcpdiag.runbook import op, snapshot_test_base from gcpdiag.runbook.gke import flags, logs class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke_runbook runbook_name = 'gke/logs' project_id = 'gcpdiag-gke-cluster-autoscaler-rrrr' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr', 'name': 'gcp-cluster', 'gke_cluster_name': 'gcp-cluster', 'location': 'europe-west10' }] class TestGkeLogsSteps(unittest.TestCase): """Unit tests for GKE Logs runbook steps to increase coverage.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.mock_op_add_ok = self.enterContext( mock.patch('gcpdiag.runbook.op.add_ok')) self.mock_op_add_failed = self.enterContext( mock.patch('gcpdiag.runbook.op.add_failed')) self.mock_op_add_skipped = self.enterContext( mock.patch('gcpdiag.runbook.op.add_skipped')) self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_gke_get_clusters = self.enterContext( mock.patch('gcpdiag.queries.gke.get_clusters')) self.project_id = 'test-project' self.params = { flags.PROJECT_ID: self.project_id, flags.GKE_CLUSTER_NAME: 'test-cluster', flags.LOCATION: 'us-central1' } self.mock_op_get.side_effect = lambda key, default=None: self.params.get( key, default) self.mock_interface = mock.MagicMock() self.operator = op.Operator(self.mock_interface) self.operator.set_parameters(self.params) self.operator.set_step(mock.MagicMock()) self.operator.set_run_id('test_run') # Tests for LogsStart (Lines 83-105) def test_logs_start_skips_when_no_clusters(self): """Given no clusters in project, when LogsStart executes, then it skips.""" self.mock_gke_get_clusters.return_value = {} step = logs.LogsStart() with op.operator_context(self.operator): step.execute() self.mock_op_add_skipped.assert_called_with(mock.ANY, reason=mock.ANY) def test_logs_start_skips_when_cluster_not_found(self): """Given cluster name doesn't match, when LogsStart executes, then it skips.""" cluster = mock.Mock() cluster.__str__ = mock.Mock( return_value='projects/p/locations/zone/clusters/other-cluster') self.mock_gke_get_clusters.return_value = {'other': cluster} step = logs.LogsStart() with op.operator_context(self.operator): step.execute() self.mock_op_add_skipped.assert_called() # Tests for LoggingApiEnabled (Lines 122-145) @mock.patch('gcpdiag.queries.apis.is_enabled') def test_logging_api_failed_when_disabled(self, mock_is_enabled): """Given Logging API is disabled, then step fails.""" mock_is_enabled.return_value = False step = logs.LoggingApiEnabled() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() # Tests for ClusterLevelLoggingEnabled (Lines 148-188) @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_cluster_logging_fails_when_disabled(self, mock_get_obj): """Given logging is disabled in cluster config, then step fails.""" cluster_obj = mock.Mock() cluster_obj.is_autopilot = False cluster_obj.has_logging_enabled.return_value = False mock_get_obj.return_value = cluster_obj step = logs.ClusterLevelLoggingEnabled() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() # Tests for NodePoolCloudLoggingAccessScope (Lines 206-224) @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_nodepool_scope_fails_when_missing(self, mock_get_obj): """Given node pool missing logging scope, then step fails.""" nodepool = mock.Mock() nodepool.config.oauth_scopes = ['https://www.googleapis.com/auth/compute'] cluster_obj = mock.Mock() cluster_obj.nodepools = [nodepool] mock_get_obj.return_value = cluster_obj step = logs.NodePoolCloudLoggingAccessScope() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() # Tests for ServiceAccountLoggingPermission (Lines 246-314) @mock.patch('gcpdiag.queries.iam.get_project_policy') @mock.patch('gcpdiag.queries.iam.is_service_account_enabled') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_sa_permission_fails_when_missing_role(self, mock_get_obj, mock_sa_enabled, mock_get_policy): """Given SA exists but missing LogWriter role, then step fails.""" nodepool = mock.Mock() nodepool.service_account = 'test-sa@test.iam.gserviceaccount.com' cluster_obj = mock.Mock() cluster_obj.nodepools = [nodepool] mock_get_obj.return_value = cluster_obj mock_sa_enabled.return_value = True policy = mock.Mock() policy.has_role_permissions.return_value = False mock_get_policy.return_value = policy step = logs.ServiceAccountLoggingPermission() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() # Tests for LoggingWriteApiQuotaExceeded (Lines 332-367) @mock.patch('gcpdiag.queries.monitoring.query') def test_quota_check_fails_when_exceeded(self, mock_query): """Given monitoring returns quota exceeded errors, then step fails.""" self.params[flags.START_TIME] = mock.Mock() self.params[flags.END_TIME] = mock.Mock() mock_query.return_value = { 'ts1': { 'labels': { 'metric.limit_name': 'WriteRequestsPerMinutePerProject' } } } step = logs.LoggingWriteApiQuotaExceeded() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() del self.params[flags.START_TIME] del self.params[flags.END_TIME] # Tests for LogsEnd (Lines 387-392) @mock.patch('gcpdiag.runbook.op.prompt') def test_logs_end_generates_report_on_no(self, mock_prompt): """Given user is not satisfied, then generate report.""" mock_prompt.return_value = op.NO op.interface = self.mock_interface step = logs.LogsEnd() with op.operator_context(self.operator): step.execute() self.mock_interface.rm.generate_report.assert_called() del op.interface class TestGkeLogsCoverage(unittest.TestCase): """Unit tests targeting uncovered lines in logs.py.""" def setUp(self): super().setUp() self.mock_interface = mock.Mock() self.operator = op.Operator(self.mock_interface) self.params = { flags.PROJECT_ID: 'test-project', flags.GKE_CLUSTER_NAME: 'test-cluster', flags.LOCATION: 'us-central1', flags.START_TIME: datetime.datetime.now(), flags.END_TIME: datetime.datetime.now() } self.operator.set_parameters(self.params) self.operator.set_step(mock.MagicMock()) self.operator.set_run_id('test_run') self.operator.interface = mock.Mock() self.operator.interface.rm = mock.Mock() self.operator.messages = MockMessage() # Setup standard mocks for gcpdiag operations self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.mock_op_get.side_effect = lambda key, default=None: self.params.get( key, default) self.mock_op_add_ok = self.enterContext( mock.patch('gcpdiag.runbook.op.add_ok')) self.mock_op_add_failed = self.enterContext( mock.patch('gcpdiag.runbook.op.add_failed')) self.mock_op_add_skipped = self.enterContext( mock.patch('gcpdiag.runbook.op.add_skipped')) self.mock_gke_get_clusters = self.enterContext( mock.patch('gcpdiag.queries.gke.get_clusters')) self.enterContext(mock.patch('gcpdiag.queries.crm.get_project')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_iam_get_project_policy = self.enterContext( mock.patch('gcpdiag.queries.iam.get_project_policy')) self.mock_iam_is_service_account_enabled = self.enterContext( mock.patch('gcpdiag.queries.iam.is_service_account_enabled')) self.mock_monitoring_query = self.enterContext( mock.patch('gcpdiag.queries.monitoring.query')) self.mock_op_prompt = self.enterContext( mock.patch('gcpdiag.runbook.op.prompt')) # Covers LogsStart (Lines 83-84, 89-105) def test_logs_start_branch_coverage(self): # Line 83-84: No clusters found self.mock_gke_get_clusters.return_value = {} step = logs.LogsStart() with op.operator_context(self.operator): step.execute() self.mock_op_add_skipped.assert_called() # Line 89-105: Specific cluster mismatch cluster = mock.Mock() cluster.__str__ = mock.Mock( return_value='projects/p/locations/other/clusters/other') self.mock_gke_get_clusters.return_value = {'other': cluster} with op.operator_context(self.operator): step.execute() self.mock_op_add_skipped.assert_called() # Covers LoggingApiEnabled (Lines 145-146) def test_logging_api_failed(self): self.mock_is_enabled.return_value = False step = logs.LoggingApiEnabled() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() # Covers ClusterLevelLoggingEnabled (Lines 155-162, 185) @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_cluster_logging_disabled_logic(self, mock_get_obj): cluster_obj = mock.Mock() cluster_obj.is_autopilot = False cluster_obj.has_logging_enabled.return_value = True cluster_obj.enabled_logging_components.return_value = ['SYSTEM' ] # WORKLOADS missing cluster_obj.__str__ = mock.Mock(return_value='test-cluster') mock_get_obj.return_value = cluster_obj step = logs.ClusterLevelLoggingEnabled() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() # Covers NodePoolCloudLoggingAccessScope (Lines 214, 219) @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_nodepool_scope_coverage(self, mock_get_obj): np_ok = mock.Mock() np_ok.config.oauth_scopes = [ 'https://www.googleapis.com/auth/logging.write' ] np_fail = mock.Mock() np_fail.config.oauth_scopes = [] cluster_obj = mock.Mock() cluster_obj.nodepools = [np_ok, np_fail] mock_get_obj.return_value = cluster_obj step = logs.NodePoolCloudLoggingAccessScope() with op.operator_context(self.operator): step.execute() self.mock_op_add_ok.assert_called_with(np_ok, reason=mock.ANY) self.mock_op_add_failed.assert_called_with(np_fail, reason=mock.ANY, remediation=mock.ANY) # Covers ServiceAccountLoggingPermission (Lines 260, 301, 314) @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_sa_permission_coverage(self, mock_get_obj): np_disabled = mock.Mock() np_disabled.service_account = 'sa-disabled' np_ok = mock.Mock() np_ok.service_account = 'sa-ok' cluster_obj = mock.Mock() cluster_obj.nodepools = [np_disabled, np_ok] mock_get_obj.return_value = cluster_obj self.mock_iam_is_service_account_enabled.side_effect = lambda sa, ctx: sa == 'sa-ok' policy = mock.Mock() policy.has_role_permissions.return_value = True self.mock_iam_get_project_policy.return_value = policy step = logs.ServiceAccountLoggingPermission() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called_with(np_disabled, reason=mock.ANY, remediation=mock.ANY) self.mock_op_add_ok.assert_called_with(np_ok, reason=mock.ANY) # Covers LoggingWriteApiQuotaExceeded (Lines 351, 362-365) def test_quota_query_error_handling(self): # Triggers line 351 (monitoring.query) and 362-365 (KeyError handling) self.mock_monitoring_query.return_value = { 'bad_series': { 'labels': { 'metric.limit_name': 'some-limit' } } } # Missing metric.limit_name step = logs.LoggingWriteApiQuotaExceeded() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() def test_logs_start_location_mismatch_skips(self): """Lines 108-111 (Logic): Skips if no clusters are found at the specified location.""" # Mock a cluster at a different location than 'us-central1' cluster = mock.Mock() cluster.__str__ = mock.Mock( return_value='projects/p/locations/europe-west1/clusters/c') self.mock_gke_get_clusters.return_value = {'cluster': cluster} step = logs.LogsStart() with op.operator_context(self.operator): step.execute() self.mock_op_add_skipped.assert_called_once() _, kwargs = self.mock_op_add_skipped.call_args self.assertIn('does not exist in project', kwargs['reason']) @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_cluster_logging_enabled_ok(self, mock_get_obj): """Line 185: Confirms logging is enabled for non-autopilot clusters.""" cluster = mock.Mock(is_autopilot=False) cluster.has_logging_enabled.return_value = True cluster.enabled_logging_components.return_value = ['WORKLOADS', 'SYSTEM'] mock_get_obj.return_value = cluster step = logs.ClusterLevelLoggingEnabled() with op.operator_context(self.operator): step.execute() self.mock_op_add_ok.assert_called() @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_node_pool_missing_scope_fails(self, mock_get_obj): """Line 214: Fails when a node pool is missing required logging scopes.""" np = mock.Mock() np.config.oauth_scopes = [ 'https://www.googleapis.com/auth/compute.readonly' ] cluster = mock.Mock(nodepools=[np]) mock_get_obj.return_value = cluster step = logs.NodePoolCloudLoggingAccessScope() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() def test_node_pool_access_scope_ok(self): """Line 214-219 (Logic): Verifies success when a valid logging scope is present.""" np = mock.Mock() np.config.oauth_scopes = ['https://www.googleapis.com/auth/logging.write'] cluster = mock.Mock(nodepools=[np]) with mock.patch('gcpdiag.lint.gke.util.get_cluster_object', return_value=cluster): step = logs.NodePoolCloudLoggingAccessScope() with op.operator_context(self.operator): step.execute() self.mock_op_add_ok.assert_called() @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_sa_missing_log_writer_role_fails(self, mock_get_obj): """Line 260: Fails when service account lacks roles/logging.logWriter.""" np = mock.Mock(service_account='test-sa@iam.gserviceaccount.com') cluster = mock.Mock(nodepools=[np]) policy = mock.Mock() policy.has_role_permissions.return_value = False self.mock_iam_get_project_policy.return_value = policy self.mock_iam_is_service_account_enabled.return_value = True mock_get_obj.return_value = cluster step = logs.ServiceAccountLoggingPermission() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') def test_sa_disabled_fails(self, mock_get_obj): """Lines 254-259 (Logic): Fails when the service account is disabled or deleted.""" np = mock.Mock(service_account='test-sa@iam.gserviceaccount.com') cluster = mock.Mock(nodepools=[np]) mock_get_obj.return_value = cluster self.mock_iam_is_service_account_enabled.return_value = False # SA is disabled step = logs.ServiceAccountLoggingPermission() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called_once() _, kwargs = self.mock_op_add_failed.call_args self.assertIn('is disabled or deleted', kwargs['reason']) def test_quota_exceeded_found_fails(self): """Line 314: Fails when WriteRequestsPerMinutePerProject quota is exceeded.""" self.mock_monitoring_query.return_value = { 'ts1': { 'labels': { 'metric.limit_name': 'WriteRequestsPerMinutePerProject' } } } step = logs.LoggingWriteApiQuotaExceeded() with op.operator_context(self.operator): step.execute() self.mock_op_add_failed.assert_called() def test_quota_exceeded_no_data_ok(self): """Lines 301-304 (Logic): Confirms success when no quota-exceeded events are returned.""" self.mock_monitoring_query.return_value = {} # Empty results step = logs.LoggingWriteApiQuotaExceeded() with op.operator_context(self.operator): step.execute() self.mock_op_add_ok.assert_called() def test_logs_end_triggers_report_on_no(self): """Line 351: Generates a report if user is not satisfied with the RCA.""" self.mock_op_prompt.return_value = op.NO op.interface = self.operator.interface step = logs.LogsEnd() with op.operator_context(self.operator): step.execute() self.operator.interface.rm.generate_report.assert_called() del op.interface def test_logs_end_satisfied_concludes(self): """Line 351 (Logic): Concludes normally when the user is satisfied.""" self.mock_op_prompt.return_value = op.YES step = logs.LogsEnd() with op.operator_context(self.operator): step.execute() # verify generate_report was NOT called self.operator.interface.rm.generate_report.assert_not_called() ================================================ FILE: gcpdiag/runbook/gke/monitoring_configuration.py ================================================ # Copyright 2024 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. """Module containing investigating and resolving GKE Monitoring related issues""" from gcpdiag import runbook from gcpdiag.lint.gke import util from gcpdiag.queries import crm, gke from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags from gcpdiag.runbook.gke import generalized_steps as gke_gs class MonitoringConfiguration(runbook.DiagnosticTree): """Verifies that GKE Monitoring and its components are correctly configured and operational. This runbook guides through a systematic investigation of potential causes when monitoring from the Google Kubernetes Engine (GKE) cluster are missing or incomplete. The focus is on core configuration settings that are essential for proper monitoring functionality. The following areas are examined: - **Project-Level Monitoring:** Ensures that the Google Cloud project housing the GKE cluster has the Cloud Monitoring API enabled. - **Cluster-Level Monitoring:** Verifies that monitoring is explicitly enabled within the GKE cluster's configuration. - **Node Pool Permissions:** Confirms that the nodes within the cluster's node pools have the 'Cloud Monitoring Write' scope enabled, allowing them to send metrics data. - **Service Account Permissions:** Validates that the service account used by the node pools possesses the necessary IAM permissions to interact with Cloud Monitoring. Specifically, the "roles/monitoring.metricWriter" role is typically required. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The ID of the project hosting the GKE Cluster', 'required': True }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'required': True }, flags.LOCATION: { 'type': str, 'help': 'The zone or region of the GKE cluster', 'required': True } } def build_tree(self): """Constructs the diagnostic tree with appropriate steps.""" # Instantiate the step classes start = MonitoringConfigurationStart() project_monitoring_configuration_check = MonitoringApiConfigurationEnabled() cluster_monitoring_configuration_check = ClusterLevelMonitoringConfigurationEnabled( ) node_pool_access_scope_configuration_check = NodePoolCloudMonitoringAccessScopeConfiguration( ) service_account_permissions_check = ServiceAccountMonitoringPermissionConfiguration( ) # add them to the tree self.add_start(start) self.add_step(parent=start, child=project_monitoring_configuration_check) self.add_step(parent=project_monitoring_configuration_check, child=cluster_monitoring_configuration_check) self.add_step(parent=cluster_monitoring_configuration_check, child=node_pool_access_scope_configuration_check) self.add_step(parent=node_pool_access_scope_configuration_check, child=service_account_permissions_check) self.add_end(step=MonitoringConfigurationEnd()) class MonitoringConfigurationStart(runbook.StartStep): """Initiates diagnostics for GKE Clusters. - **Initial Checks:** - Verifies if Monitoring API is enabled for the project. - Validates that there are GKE clusters in the project. - (Optional) If a cluster name is provided, checks if that cluster exists in the project. - (Optional) If a location is provided, verifies there are clusters in that location. - (Optional) If both a location and a name are provided, verifies that the cluster exists at that location. """ def execute(self): """Checks the provided parameters.""" project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) # Checks if there are clusters in the project clusters = gke.get_clusters(op.get_context()) if not clusters: op.add_skipped( project_path, reason=('No GKE clusters found in project {}').format(project)) return # The following checks adjust based on the input provided: # - Both cluster name and location: Verify if that specific cluster exists at that location. cluster_name = op.get(flags.GKE_CLUSTER_NAME) cluster_location = op.get(flags.LOCATION) # Initialize flags to track findings found_cluster = False found_cluster_with_location = False found_clusters_at_location = False if cluster_name or cluster_location: for cluster in clusters.values(): name_match = cluster_name and (cluster_name == str(cluster).rsplit( '/', 1)[-1]) location_match = cluster_location and (cluster_location == str(cluster).split('/')[-3]) if name_match: found_cluster = True if location_match: found_clusters_at_location = True if name_match and location_match: found_cluster_with_location = True break # After finding the exact required, no need to search further # Checking the matching conditions for the required cluster in Order if not found_cluster_with_location and cluster_name and cluster_location: op.add_skipped( project_path, reason=('Cluster with the name {} in {} does not exist in project {}' ).format(cluster_name, cluster_location, project)) elif not found_cluster and cluster_name: op.add_skipped( project_path, reason=( 'Cluster with the name {} does not exist in project {}').format( cluster_name, project)) elif not found_clusters_at_location and cluster_location: op.add_skipped( project_path, reason=('No clusters found at location {} in project {}').format( cluster_location, project)) class MonitoringApiConfigurationEnabled(gke_gs.ApiEnabled): """Verifies if the Cloud Monitoring API is enabled for the project. This initial step ensures that the fundamental infrastructure for monitoring within the project is operational. If the Cloud Monitoring API is disabled, monitoring from the GKE cluster won't be collected or stored by Google Cloud. """ api_name = 'monitoring' template = 'monitoring_configuration::project_monitoring_configuration_check' class ClusterLevelMonitoringConfigurationEnabled(runbook.Step): """Verifies that monitoring is enabled at the GKE cluster level. Confirms that the GKE cluster configuration explicitly enables monitoring. Even if the project has the Cloud Monitoring API enabled and other settings are correct, monitoring won't be collected if cluster-level monitoring is disabled . """ template = 'monitoring_configuration::cluster_monitoring_configuration_check' def execute(self): """Checks if GKE level Monitoring is disabled.""" clusters = gke.get_clusters(op.get_context()) partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}' cluster_obj = util.get_cluster_object(clusters, partial_path) # Available GKE cluster metrics as of 28 April 2025 gke_monitoring_components = { 'CADVISOR', 'DAEMONSET', 'DEPLOYMENT', 'HPA', 'KUBELET', 'POD', 'STATEFULSET', 'STORAGE', 'SYSTEM_COMPONENTS' } #'APISERVER', 'CONTROLLER_MANAGER, 'SCHEDULER' => ControlPlane components # monitoring are not enabled by default due to which skipping its check if cluster_obj.is_autopilot: op.add_ok( cluster_obj, reason= 'GKE Autopilot clusters have Cloud Monitoring enabled by default.') return disabled = [] if cluster_obj.has_monitoring_enabled(): # Enabled metrics on the provided cluster cluster_enabled_monitoring_metrics = cluster_obj.enabled_monitoring_components( ) # Check if the cluster has GPU based Nodepool # Find any GPU node pools by taint for np in cluster_obj.nodepools: #Iterate our all available NodePool # pylint: disable=protected-access config_data = np._resource_data.get('config', {}) taints = config_data.get('taints', []) for t in taints: #Iterate our the taints on the Nodepool if (t.get('key') == 'nvidia.com/gpu' and t.get('value') == 'present' and t.get('effect') == 'NO_SCHEDULE'): gke_monitoring_components.add('DCGM') break #if found first occurrence then break # Check missing metrics not_enabled_cluster_metrics = gke_monitoring_components - set( cluster_enabled_monitoring_metrics) if not_enabled_cluster_metrics: not_enabled_cluster_metrics_string = ', '.join( sorted(not_enabled_cluster_metrics)) disabled.append( f'Missing metrics: {not_enabled_cluster_metrics_string}') else: disabled.append('Monitoring entirely disabled') if not disabled: op.add_ok( cluster_obj, reason= f'GKE level monitoring is fully enabled for the cluster {cluster_obj}.' ) else: disabled_components_metrics = ', '.join(disabled) op.add_failed( cluster_obj, reason= f'GKE level monitoring is not fully enabled for the cluster {cluster_obj}.', remediation=( f'Issues detected:\n {disabled_components_metrics}.\n' f'Please enable missing components or full GKE monitoring.')) class NodePoolCloudMonitoringAccessScopeConfiguration(gke_gs.NodePoolScope): """Verifies that GKE node pools have the required Cloud Monitoring access scopes. Confirms that the nodes within the GKE cluster's node pools have the necessary scopes to write metrics data to Cloud Monitoring. These scopes include 'https://www.googleapis.com/auth/monitoring' and potentially others, such as 'https://www.googleapis.com/auth/cloud-platform' and 'https://www.googleapis.com/auth/monitoring.write', depending on the configuration. """ template = 'monitoring_configuration::node_pool_access_scope_configuration_check' required_scopes = [ 'https://www.googleapis.com/auth/monitoring', 'https://www.googleapis.com/auth/monitoring.write', 'https://www.googleapis.com/auth/cloud-platform' ] service_name = 'Monitoring' class ServiceAccountMonitoringPermissionConfiguration( gke_gs.ServiceAccountPermission): """Verifies that service accounts in GKE node pools have monitoring permissions. Checks that the service accounts used by nodes in the GKE cluster have the essential "roles/monitoring.metricWriter" IAM permission. This permission is required to send metric data to Google Cloud Monitoring. """ template = 'monitoring_configuration::service_account_permissions_configuration_check' required_roles = [ 'roles/monitoring.metricWriter', 'roles/stackdriver.resourceMetadata.writer' ] service_name = 'monitoring' class MonitoringConfigurationEnd(runbook.EndStep): """Finalizes diagnostics for GKE Monitoring. Prompts the user for satisfaction with the Root Cause Analysis (RCA) and takes appropriate actions based on their response: * **Confirmation:** Concludes the runbook execution. * **Further Action:** Triggers additional steps, such as report generation, if necessary. """ def execute(self): """Finalizes `GKE Monitoring` diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message='Are you satisfied with the `GKE Monitoring` RCA performed?') if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gke/monitoring_configuration_test.py ================================================ # Copyright 2024 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. """Test class for gke/GkeMonitoring.""" import unittest from unittest import mock from gcpdiag import config from gcpdiag.runbook import gke, op, snapshot_test_base from gcpdiag.runbook.gke import flags, monitoring_configuration class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke runbook_name = 'gke/monitoring-configuration' project_id = 'mytestproject-371511' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'mytestproject-371511', 'gke_cluster_name': 'cluster-2', 'location': 'us-central1-a', }] class MockCluster: """Mock GKE cluster for testing.""" def __init__( self, name, location, is_autopilot=False, monitoring_enabled=True, metrics=None, ): self.name = name self.location = location self.is_autopilot = is_autopilot self._monitoring_enabled = monitoring_enabled self._metrics = metrics or [] self.nodepools = [] self.full_path = f'projects/p/locations/{location}/clusters/{name}' def has_monitoring_enabled(self): return self._monitoring_enabled def enabled_monitoring_components(self): return self._metrics def __str__(self): return self.full_path class MockNodePool: """Mock GKE node pool for testing.""" def __init__(self, taints=None): self._resource_data = {'config': {'taints': taints or []}} class TestMonitoringConfiguration(unittest.TestCase): """Test class for monitoring_configuration runbook.""" @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_start_step_no_clusters(self, mock_skipped, mock_crm, mock_gke, mock_get): """Test behavior when no clusters are found in the project.""" del mock_crm, mock_get # unused mock_gke.return_value = {} step = monitoring_configuration.MonitoringConfigurationStart() with op.operator_context(mock.Mock(parameters={'project_id': 'proj-1'})): step.execute() mock_skipped.assert_called_once() self.assertIn('No GKE clusters found', mock_skipped.call_args[1]['reason']) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_start_step_cluster_not_found_with_name_and_location( self, mock_skipped, mock_crm, mock_gke, mock_get): """Test behavior when a specific cluster name/location is provided but doesn't exist.""" del mock_crm # unused mock_get.side_effect = { flags.PROJECT_ID: 'p1', flags.GKE_CLUSTER_NAME: 'missing-cluster', flags.LOCATION: 'us-central1', }.get mock_gke.return_value = {'c1': MockCluster('other', 'us-east1')} step = monitoring_configuration.MonitoringConfigurationStart() with op.operator_context( mock.Mock( parameters={ 'project_id': 'p1', 'gke_cluster_name': 'missing-cluster', 'location': 'us-central1' })): step.execute() mock_skipped.assert_called_once() self.assertIn('does not exist', mock_skipped.call_args[1]['reason']) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') @mock.patch('gcpdiag.runbook.op.add_failed') def test_cluster_monitoring_entirely_disabled(self, mock_failed, mock_util, mock_gke, mock_get): """Test failure when monitoring is completely disabled at the cluster level.""" del mock_gke, mock_get # unused cluster = MockCluster('c1', 'loc1', monitoring_enabled=False) mock_util.return_value = cluster step = monitoring_configuration.ClusterLevelMonitoringConfigurationEnabled() with op.operator_context(mock.Mock(parameters={'project_id': 'p'})): step.execute() mock_failed.assert_called_once() self.assertIn('Monitoring entirely disabled', mock_failed.call_args[1]['remediation']) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') @mock.patch('gcpdiag.runbook.op.add_failed') def test_cluster_monitoring_missing_gpu_metrics(self, mock_failed, mock_util, mock_gke, mock_get): """Test failure when DCGM metrics are missing for a cluster with GPU taints.""" del mock_gke, mock_get # unused cluster = MockCluster('gpu-c', 'loc1', metrics=['SYSTEM_COMPONENTS']) gpu_taint = { 'key': 'nvidia.com/gpu', 'value': 'present', 'effect': 'NO_SCHEDULE' } cluster.nodepools = [MockNodePool(taints=[gpu_taint])] mock_util.return_value = cluster step = monitoring_configuration.ClusterLevelMonitoringConfigurationEnabled() with op.operator_context(mock.Mock(parameters={'project_id': 'p'})): step.execute() mock_failed.assert_called_once() self.assertIn('DCGM', mock_failed.call_args[1]['remediation']) @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') @mock.patch('gcpdiag.runbook.op.add_ok') def test_cluster_monitoring_autopilot_skipped(self, mock_ok, mock_util, mock_gke, mock_get): """Test that Autopilot clusters are correctly identified as fully enabled (logic skip).""" del mock_gke, mock_get # unused cluster = MockCluster('auto-c', 'loc1', is_autopilot=True) mock_util.return_value = cluster step = monitoring_configuration.ClusterLevelMonitoringConfigurationEnabled() with op.operator_context(mock.Mock(parameters={'project_id': 'p'})): step.execute() mock_ok.assert_called_once() @mock.patch('gcpdiag.runbook.op.prompt') @mock.patch('gcpdiag.runbook.op.info') def test_end_step_user_not_satisfied(self, mock_info, mock_prompt): """Test behavior when the user indicates they are not satisfied with the RCA.""" mock_prompt.return_value = op.NO step = monitoring_configuration.MonitoringConfigurationEnd() step.execute() mock_info.assert_called_with(message=op.END_MESSAGE) class TestMonitoringConfigurationCoverage(unittest.TestCase): """Unit tests to achieve 100% coverage for monitoring_configuration.py.""" @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.add_skipped') @mock.patch('gcpdiag.runbook.op.get') def test_start_execute_no_clusters(self, mock_op_get, mock_add_skipped, mock_get_clusters, mock_get_project): """Covers lines 75-81: Behavior when no clusters are found in the project.""" mock_op_get.side_effect = {flags.PROJECT_ID: 'test-project'}.get mock_get_clusters.return_value = {} mock_get_project.return_value = 'projects/test-project' step = monitoring_configuration.MonitoringConfigurationStart() with op.operator_context( mock.Mock(parameters={'project_id': 'test-project'})): step.execute() mock_add_skipped.assert_called_once() self.assertIn('No GKE clusters found', mock_add_skipped.call_args[1]['reason']) @mock.patch('gcpdiag.queries.crm.get_project') @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.get') def test_start_execute_with_parameters(self, mock_op_get, mock_get_clusters, mock_get_project): """Covers lines 87-93: Parameter retrieval and flag initialization.""" # Arrange del mock_get_project # unused mock_op_get.side_effect = { flags.PROJECT_ID: 'test-project', flags.GKE_CLUSTER_NAME: 'cluster-1', flags.LOCATION: 'us-central1', }.get mock_get_clusters.return_value = { 'c1': MockCluster('cluster-1', 'us-central1') } step = monitoring_configuration.MonitoringConfigurationStart() with op.operator_context( mock.Mock( parameters={ 'project_id': 'test-project', 'gke_cluster_name': 'cluster-1', 'location': 'us-central1' })): step.execute() @mock.patch('gcpdiag.queries.gke.get_clusters') @mock.patch('gcpdiag.runbook.op.get') @mock.patch('gcpdiag.lint.gke.util.get_cluster_object') @mock.patch('gcpdiag.runbook.op.add_ok') def test_cluster_level_monitoring_standard_path(self, mock_add_ok, mock_get_cluster_obj, mock_op_get, mock_get_clusters): """Covers lines 140-160: Step execution for a standard GKE cluster.""" del mock_get_clusters # unused mock_op_get.side_effect = { flags.LOCATION: 'us-central1', flags.GKE_CLUSTER_NAME: 'cluster-1' }.get metrics = [ 'CADVISOR', 'DAEMONSET', 'DEPLOYMENT', 'HPA', 'KUBELET', 'POD', 'STATEFULSET', 'STORAGE', 'SYSTEM_COMPONENTS', ] cluster = MockCluster('cluster-1', 'us-central1', is_autopilot=False, metrics=metrics) mock_get_cluster_obj.return_value = cluster step = monitoring_configuration.ClusterLevelMonitoringConfigurationEnabled() with op.operator_context( mock.Mock( parameters={ 'project_id': 'p', 'location': 'us-central1', 'gke_cluster_name': 'cluster-1' })): step.execute() mock_add_ok.assert_called_once() @mock.patch('gcpdiag.runbook.op.prompt') @mock.patch('gcpdiag.runbook.op.info') def test_end_execute_satisfied(self, mock_op_info, mock_op_prompt): """Covers line 242: Execution of the end step.""" del mock_op_info # unused mock_op_prompt.return_value = op.YES step = monitoring_configuration.MonitoringConfigurationEnd() step.execute() mock_op_prompt.assert_called_once() ================================================ FILE: gcpdiag/runbook/gke/node_auto_repair.py ================================================ # Copyright 2024 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. """GKE Node Auto Repair runbook.""" from gcpdiag import runbook from gcpdiag.queries import crm, gke, logs from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags def local_realtime_query(filter_str): result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID), start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), filter_str=filter_str) return result def unallocatable_gpu_tpu(node, location=None, name=None, gpu=False, tpu=False): # the logs for repairs caused by unallocatable TPU or GPU are very similar, so it's worth having # one function for both. If a node has unallocatable TPU or GPU # - it will be marked as NodeNotSchedulable # and there will be log entries with" # - '"Updated allocatable" device="google.com/tpu"' for unallocatable TPU # - '"Updated allocatable" device="nvidia.com/gpu"' for unallocatable GPU # we check the logs for the presence of both events and if both are present, then unallocatable # TPU/GPU is the reason for auto-repair. filter_str = [ 'log_id("events")', f'resource.labels.node_name="{node}"', 'jsonPayload.reason="NodeNotSchedulable"' ] if location: filter_str.append(f'resource.labels.location="{location}"') if name: filter_str.append(f'resource.labels.cluster_name="{name}"') filter_str = '\n'.join(filter_str) log_entries_event = local_realtime_query(filter_str) # If there are no "NodeNotSchedulable" events, no need to check for other logs. if not log_entries_event: return False filter_str = [ 'log_id("kubelet")', f'resource.labels.node_name="{node}"', 'jsonPayload.MESSAGE:"Updated allocatable"' ] if tpu: filter_str.append('jsonPayload.MESSAGE:"google.com/tpu"') if gpu: filter_str.append('jsonPayload.MESSAGE:"nvidia.com/gpu"') if location: filter_str.append(f'resource.labels.location="{location}"') if name: filter_str.append(f'resource.labels.cluster_name="{name}"') filter_str = '\n'.join(filter_str) log_entries_kubelet = local_realtime_query(filter_str) return log_entries_event and log_entries_kubelet def check_node_unhealthy(node, location=None, name=None, unhealthy_status='NodeNotReady'): """Checks if a node has been in the specified unhealthy status. Args: node: The name of the GKE node to check. location: The zone of the node. Optional. name: The name of the GKE cluster. Optional. unhealthy_status: The unhealthy status to check for. Defaults to 'NodeNotReady'. It can be 'NodeNotReady' or 'NodeHasDiskPressure'. Returns: True if the node has been in the specified unhealthy status, False otherwise. """ filter_str = [ 'log_id("events")', f'resource.labels.node_name="{node}"', f'jsonPayload.message="Node {node} status is now: {unhealthy_status}"', ] if location: filter_str.append(f'resource.labels.location="{location}"') if name: filter_str.append(f'resource.labels.cluster_name="{name}"') filter_str = '\n'.join(filter_str) log_entries = local_realtime_query(filter_str) # Check if there are any log entries indicating the node was in the specified unhealthy status if log_entries: return True return False class NodeAutoRepair(runbook.DiagnosticTree): """Provides the reason why a Node was auto-repaired This runbook checks if: - Node auto-repair is enabled on the cluster - Nodes was repaired because it was in NotReady status for more than 10 minutes - Nodes was repaired because it had disk pressure - Nodes was repaired because of unallocatable GPUs - Nodes was repaired because of unallocatable TPUs """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The ID of the project hosting the GKE Cluster', 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'required': False, 'deprecated': True, 'new_parameter': 'gke_cluster_name' }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': 'The name of the GKE cluster, to limit search only for this cluster', 'required': False }, flags.NODE: { 'type': str, 'help': 'The node name with issues.', 'required': True }, flags.LOCATION: { 'type': str, 'help': 'The zone or region of the GKE cluster', 'required': False } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = NodeAutoRepairStart() node_notready_check = NodeNotReady() node_disk_full_check = NodeDiskFull() unallocatable_gpu_check = UnallocatableGpu() unallocatable_tpu_check = UnallocatableTpu() self.add_start(start) self.add_step(parent=start, child=node_notready_check) self.add_step(parent=node_notready_check, child=node_disk_full_check) self.add_step(parent=node_disk_full_check, child=unallocatable_gpu_check) self.add_step(parent=unallocatable_gpu_check, child=unallocatable_tpu_check) self.add_end(step=NodeAutoRepairEnd()) class NodeAutoRepairStart(runbook.StartStep): """Check inputs and verify if there actually was a repair event""" def execute(self): """Check inputs and verify if there was a repair event""" project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) # check if there are clusters in the project if name: clusters = gke.get_clusters(op.get_context()) if not clusters: op.add_skipped( project_path, reason=f'No {name} GKE cluster found in project {project}') return else: clusters = gke.get_clusters(op.get_context()) if not clusters: op.add_skipped(project_path, reason=f'No GKE clusters found in project {project}') return # check if there were any repair operations for provided node filter_str = [ 'log_id("cloudaudit.googleapis.com/activity")', 'protoPayload.methodName="io.k8s.core.v1.nodes.update"', 'protoPayload.request.metadata.annotations."gke-current-operation":"AUTO_REPAIR_NODES"', f'protoPayload.resourceName="core/v1/nodes/{node}"' ] if location: filter_str.append(f'resource.labels.location="{location}"') if name: filter_str.append(f'resource.labels.cluster_name="{name}"') filter_str = '\n'.join(filter_str) log_entries = local_realtime_query(filter_str) if not log_entries: reason = f'There are no node repair operations for node {node}' if name: reason += f' in cluster {name}' if location: reason += f' in location {location}' reason += f' in the provided time range {start_time} - {end_time}.' op.add_skipped(project_path, reason=reason) return class NodeNotReady(runbook.Step): """Checks if nodes have been in NotReady status for an extended period (e.g., 10 minutes).""" template = 'nodeautorepair::node_notready' def execute(self): """Checking if there is the node is in NotReady status.""" project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) if check_node_unhealthy(node, location, name, unhealthy_status='NodeNotReady'): op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, node=node), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node)) class NodeDiskFull(runbook.Step): """Checks if node disks are full.""" template = 'nodeautorepair::node_disk_full' def execute(self): """Checking if there is the node is in NodeHasDiskPressure status.""" project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) if check_node_unhealthy(node, location, name, unhealthy_status='NodeHasDiskPressure'): op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, node=node), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node)) class UnallocatableGpu(runbook.Step): """Checks GPU allocation""" template = 'nodeautorepair::unallocatable_gpu' def execute(self): """Verify whether the node was auto-repaired because of Unallocatable GPUs.""" project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) if unallocatable_gpu_tpu(node, location, name, tpu=False, gpu=True): op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, node=node), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node)) class UnallocatableTpu(runbook.Step): """Checks TPU allocation""" template = 'nodeautorepair::unallocatable_tpu' def execute(self): """Verify whether the node was auto-repaired because of Unallocatable TPUs.""" project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) if unallocatable_gpu_tpu(node, location, name, tpu=True, gpu=False): op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, node=node), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node)) class NodeAutoRepairEnd(runbook.EndStep): """Finalizes the diagnostics process for `Node AutoRepair`. This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for `Node AutoRepair`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. """ def execute(self): """Finalize `Node AutoRepair` diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message='Are you satisfied with the `GKE Node AutoRepair` RCA performed?' ) if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gke/node_auto_repair_test.py ================================================ # # 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. """Test class for gke/NodeAutoRepair""" import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gke, op, snapshot_test_base from gcpdiag.runbook.gke import flags, node_auto_repair class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke runbook_name = 'gke/node-auto-repair' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr', 'gke_cluster_name': 'gcp-cluster', 'node': 'gke-gcp-cluster-default-pool-82e0c046-8m8b', 'location': 'europe-west10-a' }] class MockMessage: """Mock messages for testing.""" def __init__(self): self.messages = { 'nodeautorepair::node_notready': 'Node is not ready', 'nodeautorepair::node_disk_full': 'Node disk is full', 'nodeautorepair::unallocatable_gpu': 'Unallocatable GPU', 'nodeautorepair::unallocatable_tpu': 'Unallocatable TPU', } def __getitem__(self, key): return self.messages[key] class NodeAutoRepairTest(unittest.TestCase): """Test NodeAutoRepair runbook steps and functions.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.mock_op_add_ok = self.enterContext( mock.patch('gcpdiag.runbook.op.add_ok')) self.mock_op_add_failed = self.enterContext( mock.patch('gcpdiag.runbook.op.add_failed')) self.mock_op_add_skipped = self.enterContext( mock.patch('gcpdiag.runbook.op.add_skipped')) self.mock_op_prompt = self.enterContext( mock.patch('gcpdiag.runbook.op.prompt')) self.mock_op_info = self.enterContext(mock.patch('gcpdiag.runbook.op.info')) self.mock_op_prep_msg = self.enterContext( mock.patch('gcpdiag.runbook.op.prep_msg')) self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_gke_get_clusters = self.enterContext( mock.patch('gcpdiag.queries.gke.get_clusters')) self.params = { flags.PROJECT_ID: 'test-project', flags.LOCATION: 'us-central1-a', flags.NODE: 'test-node', flags.GKE_CLUSTER_NAME: 'test-cluster', flags.START_TIME: '2025-01-01T00:00:00Z', flags.END_TIME: '2025-01-01T01:00:00Z', } self.mock_op_get.side_effect = lambda key, default=None: self.params.get( key, default) self.mock_project = mock.Mock() self.mock_project.full_path = 'projects/test-project' self.mock_crm_get_project.return_value = self.mock_project mock_interface = mock.Mock() operator = op.Operator(mock_interface) operator.messages = MockMessage() operator.set_parameters(self.params) self.enterContext(op.operator_context(operator)) @mock.patch('gcpdiag.queries.logs.realtime_query') def test_local_realtime_query_calls_logs_query(self, mock_query): node_auto_repair.local_realtime_query('test-filter') mock_query.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query') def test_unallocatable_gpu_tpu_returns_false_if_no_events( self, mock_local_query): mock_local_query.return_value = [] self.assertFalse(node_auto_repair.unallocatable_gpu_tpu('node')) @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query') def test_unallocatable_gpu_tpu_returns_true_if_gpu_found( self, mock_local_query): mock_local_query.side_effect = [['event'], ['kubelet']] self.assertTrue(node_auto_repair.unallocatable_gpu_tpu('node', gpu=True)) @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query') def test_unallocatable_gpu_tpu_returns_true_if_tpu_found( self, mock_local_query): mock_local_query.side_effect = [['event'], ['kubelet']] self.assertTrue(node_auto_repair.unallocatable_gpu_tpu('node', tpu=True)) @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query') def test_check_node_unhealthy_returns_true_if_logs_found( self, mock_local_query): mock_local_query.return_value = ['log'] self.assertTrue(node_auto_repair.check_node_unhealthy('node')) @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query') def test_check_node_unhealthy_returns_false_if_no_logs( self, mock_local_query): mock_local_query.return_value = [] self.assertFalse(node_auto_repair.check_node_unhealthy('node')) def test_node_auto_repair_legacy_parameter_handler_renames_flag(self): runbook_obj = node_auto_repair.NodeAutoRepair() params = {flags.NAME: 'cluster'} runbook_obj.legacy_parameter_handler(params) self.assertNotIn(flags.NAME, params) self.assertIn(flags.GKE_CLUSTER_NAME, params) self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'cluster') def test_start_step_skips_if_no_clusters_found(self): self.mock_gke_get_clusters.return_value = {} step = node_auto_repair.NodeAutoRepairStart() step.execute() self.mock_op_add_skipped.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query') def test_start_step_skips_if_no_repair_operations_found( self, mock_local_query): self.mock_gke_get_clusters.return_value = {'test-cluster': mock.Mock()} mock_local_query.return_value = [] step = node_auto_repair.NodeAutoRepairStart() step.execute() self.mock_op_add_skipped.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query') def test_start_step_continues_if_repair_operations_found( self, mock_local_query): self.mock_gke_get_clusters.return_value = {'test-cluster': mock.Mock()} mock_local_query.return_value = ['op'] step = node_auto_repair.NodeAutoRepairStart() step.execute() self.mock_op_add_skipped.assert_not_called() @mock.patch('gcpdiag.runbook.gke.node_auto_repair.check_node_unhealthy') def test_node_not_ready_reports_failure_if_unhealthy(self, mock_check): mock_check.return_value = True step = node_auto_repair.NodeNotReady() step.execute() self.mock_op_add_failed.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_auto_repair.check_node_unhealthy') def test_node_not_ready_reports_ok_if_healthy(self, mock_check): mock_check.return_value = False step = node_auto_repair.NodeNotReady() step.execute() self.mock_op_add_ok.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_auto_repair.check_node_unhealthy') def test_node_disk_full_reports_failure_if_pressure_found(self, mock_check): mock_check.return_value = True step = node_auto_repair.NodeDiskFull() step.execute() self.mock_op_add_failed.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_auto_repair.unallocatable_gpu_tpu') def test_unallocatable_gpu_reports_failure_if_detected(self, mock_check): mock_check.return_value = True step = node_auto_repair.UnallocatableGpu() step.execute() self.mock_op_add_failed.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_auto_repair.unallocatable_gpu_tpu') def test_unallocatable_tpu_reports_failure_if_detected(self, mock_check): mock_check.return_value = True step = node_auto_repair.UnallocatableTpu() step.execute() self.mock_op_add_failed.assert_called_once() def test_end_step_finishes_without_info_if_satisfied(self): self.mock_op_prompt.return_value = op.YES step = node_auto_repair.NodeAutoRepairEnd() step.execute() self.mock_op_info.assert_not_called() def test_end_step_shows_info_if_not_satisfied(self): self.mock_op_prompt.return_value = op.NO step = node_auto_repair.NodeAutoRepairEnd() step.execute() self.mock_op_info.assert_called_once() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/gke/node_bootstrapping.py ================================================ # Copyright 2024 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. """GKE Node Bootstrapping runbook""" # input would be a location (zone for a node) and a node name # if a node name cannot be provided, then a nodepool name should be provided. With the nodepool # name and location (zone or region for a nodepool), we can check if there are instances.insert # errors. # if a node name and location is provided, we can check Node Registration Checker logs # # logic used for the node registration checker: # - check if it's a GKE node, skip if it isn't # - check if the node exists and 10 minutes passed since instance was started, to make sure there's # enough time for Node Registration Checker to run # - check if node's service account has logging permissions, otherwise we don't have logs to look # into # - check if node exists and it's running # - check if START_TIME is before node boot, so we can capture the boot time logs # - if yes, check for Node Registration Checker logs: # - if "Node ready and registered." found, all good, return OK result # - else if "Completed running Node Registration Checker" found, then it's a failure and # provide the summary. # - check if multiple "Completed running Node Registration Checker" messages are found for the # same node name, this means it's in a repair loop # - else (the node is not running) check if there are any logs for instance id and location # provided, if there are no logs, this means either the node didn't exist in the time range # provided, or the input is incorrect (node/location pair) # - else if "Node ready and registered." found for node name, then it registered at some point in # the past (limited to search interval) # - else check for instance name and see if Node Registration Checker finished running and # provide output # - else fail because Node Registration Checker didn't complete from datetime import datetime, timedelta, timezone import googleapiclient.errors from gcpdiag import runbook from gcpdiag.queries import crm, gce, gke, iam, logs from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags TOKEN_NRC_START = '** Here is a summary of the checks performed: **' def get_node_instance(project, location, node): # check if node exists, location here is zone, because it's a single node try: node_vm = gce.get_instance(project, location, node) except googleapiclient.errors.HttpError: return None else: return node_vm def local_realtime_query(filter_str): result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID), start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), filter_str=filter_str) return result def get_nrc_summary(node, location): filter_str = [ f'labels."compute.googleapis.com/resource_name"="{node}"', 'resource.type="gce_instance"', f'resource.labels.zone="{location}"', 'log_id("serialconsole.googleapis.com/serial_port_1_output")', 'textPayload:"node-registration-checker.sh"' ] filter_str = '\n'.join(filter_str) log_entries_all = local_realtime_query(filter_str) found = False nrc_summary = [] for log_entry in log_entries_all: if TOKEN_NRC_START in log_entry['textPayload']: # found match for the summary and taking its index position # ncr_start_pos = log_entries_all.index(log_entry) found = True if found: nrc_summary.append(log_entry['textPayload']) if '** Completed running Node Registration Checker **' in log_entry[ 'textPayload']: break return nrc_summary class NodeBootstrapping(runbook.DiagnosticTree): """Analyses issues experienced when adding nodes to your GKE Standard cluster. This runbook requires at least - location and node parameters. Location here is the zone where the node is running, for example us-central1-c. - location, nodepool and cluster name parameters to be provided. Location is zone or region for a nodepool, if the cluster is a regional cluster, then location for a nodepool will be the cluster region. For example a region could be us-central1. If a location/node pair is provided, the runbook will check the Node Registration Checker output for the given location/node pair. If a location, nodepool and GKE cluster name parameters are provided, the runbook will check for any errors that might have occurred when the instances.insert method was invoked for the given parameters. """ # Specify parameters common to all steps in the diagnostic tree class. parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The ID of the project hosting the GKE Cluster', 'required': True, }, flags.LOCATION: { 'type': str, 'help': ( 'The location where the node or nodepool is. For a node, location' ' will be the zone where the node is running (i.e.' ' us-central1-c). For a nodepool, this can be the zone or the' ' region (i.e. us-central1) where the nodepool is configured'), 'required': True, }, flags.NODE: { 'type': str, 'help': ('The node name that is failing to register (if available). If' ' node name is not available, please provide the nodepool name' " where nodes aren't registering"), 'required': False, }, flags.NODEPOOL: { 'type': str, 'help': ( "The nodepool name where nodes aren't registering, if a node name" ' is not available'), 'required': False, }, flags.NAME: { 'type': str, 'help': ('The GKE cluster name. When providing nodepool name, please' ' provide the GKE cluster name as well to be able to properly' ' filter events in the logging query.'), 'deprecated': True, 'new_parameter': 'gke_cluster_name', }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': ('The GKE cluster name. When providing nodepool name, please' ' provide the GKE cluster name as well to be able to properly' ' filter events in the logging query.'), 'required': False, }, flags.START_TIME: { 'type': datetime, 'help': ('The start window to investigate vm termination. Format:' ' YYYY-MM-DDTHH:MM:SSZ'), }, flags.END_TIME: { 'type': datetime, 'help': ('The end window for the investigation. Format:' ' YYYY-MM-DDTHH:MM:SSZ'), }, } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): start = NodeBootstrappingStart() node_insert_ok = NodeInsertCheck() node_reg_ok = NodeRegistrationSuccess() end = NodeBootstrappingEnd() self.add_start(step=start) self.add_step(parent=start, child=node_insert_ok) self.add_step(parent=node_insert_ok, child=node_reg_ok) self.add_end(step=end) class NodeBootstrappingStart(runbook.StartStep): """Initiates diagnostics for Node Bootstrapping. Check - if there are GKE clusters in the project - if the instance provided is a GKE node - if serial logs are enabled - if there are any logs for the provided inputs """ def execute(self): """ Check the provided parameters. """ project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) # check if there are clusters in the project if name: clusters = gke.get_clusters( op.get_context(project_id=project, resources=[name])) if not clusters: op.add_skipped( project_path, reason=f'No {name} GKE cluster found in project {project}') return else: clusters = gke.get_clusters( op.get_context(project_id=op.get(flags.PROJECT_ID))) if not clusters: op.add_skipped( project_path, reason=('No GKE clusters found in project {}').format(project)) return # check if node exists if node: node_vm = get_node_instance(project, location, node) if node_vm: if not node_vm.is_gke_node(): op.add_skipped( project_path, reason= (f'Instance {node} in location {location} does not appear to be a GKE node' )) return elif not node_vm.is_serial_port_logging_enabled(): op.add_skipped( project_path, reason= (f'Instance {node} in location {location} does not have Serial Logs enabled, please ' 'enable serial logs for easier troubleshooting.')) return # fail if Audit Log does not have any log entries for the input provided, meaning there could # have been an input error filter_str = [ 'log_id("cloudaudit.googleapis.com/activity")', f'resource.labels.zone="{location}"', f'protoPayload.resourceName:"{node}"' ] filter_str = '\n'.join(filter_str) log_entries = local_realtime_query(filter_str) if not log_entries: op.add_skipped( project_path, reason= (f'There are no log entries for the provided node {node} and location ' f'{location} in the provided time range ' f'{start_time} - {end_time}.\n' 'Please make sure the node/location pair is correct and it was booted ' 'in the time range provided, then try again this runbook.')) return class NodeInsertCheck(runbook.Step): """Check for any errors during instances.insert method""" template = 'nodebootstrapping::node_insert_check' MAX_GKE_NAME_LENGTH = 16 def execute(self): """ Check for any errors during instances.insert method for the given location (region or zone) and nodepool pair. """ project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) nodepool = op.get(flags.NODEPOOL) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) if nodepool and name: if not node: # the gke instance name will have a max of 16 characters from the nodepool name # and max 16 characters from the GKE cluster name filter_str = [ 'log_id("cloudaudit.googleapis.com/activity")', 'protoPayload.methodName="v1.compute.instances.insert"', 'resource.type="gce_instance"', 'severity=ERROR', f'protoPayload.resourceName:"{location}"', f'protoPayload.resourceName:"{name[:self.MAX_GKE_NAME_LENGTH]}"', f'protoPayload.resourceName:"{nodepool[:self.MAX_GKE_NAME_LENGTH]}"' ] filter_str = '\n'.join(filter_str) log_entries = local_realtime_query(filter_str) if log_entries: nr_errors = len(log_entries) for log_entry in log_entries: sample_log = log_entry sample_log = str(sample_log).replace(', ', '\n') break op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log, NODEPOOL=nodepool, NAME=name, location=location, NR_ERRORS=nr_errors, start_time=start_time, end_time=end_time), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, start_time=start_time, end_time=end_time, NODEPOOL=nodepool, NAME=name, location=location)) return else: op.add_skipped( project_path, reason= ('Node parameter provided together with nodepool parameter, proceeding with Node ' 'Registration Checkout output verification .')) else: op.add_skipped( project_path, reason= ('No nodepool or GKE cluster name provided, skipping this step . \n' 'Please provide nodepool name (-p nodepool=) and GKE cluster name ' '(-p name=) if you see issues with nodes not appearing in the ' 'nodepool.')) return class NodeRegistrationSuccess(runbook.Step): """Verify Node Registration Checker output""" template = 'nodebootstrapping::node_registration_checker' NODE_BOOT_NCR_READY_MIN_TIME = 7 def execute(self): """ Verify if Node Registration Checker completed running. If the node was successfully registered, provide log entry proving successful registration If the node wasn't registered successfully, provide Node Registration Checker summary to understand why. """ project = op.get(flags.PROJECT_ID) project_path = crm.get_project(project) location = op.get(flags.LOCATION) node = op.get(flags.NODE) if node: # default filter that is used in all log searches default_filter = [ 'resource.type="gce_instance"', f'resource.labels.zone="{location}"', 'log_id("serialconsole.googleapis.com/serial_port_1_output")', 'textPayload:"node-registration-checker.sh"' ] default_filter = '\n'.join(default_filter) # get node instance node_vm = get_node_instance(project, location, node) if node_vm and node_vm.is_running: # Check if NODE_BOOT_NCR_READY_MIN_TIME minutes (should be at least 7 minutes) passed since # the instance was booted, to make sure there was enough time for Node Registration Checker # to finish running time_since_creation = datetime.now( ) - node_vm.creation_timestamp >= timedelta( minutes=self.NODE_BOOT_NCR_READY_MIN_TIME) if not time_since_creation: op.add_failed( project_path, reason= (f'Instance {node} with instance-id {node_vm.id} in location {location} just booted ' f'at {node_vm.creation_timestamp}.'), remediation= (f'Please allow for at least {self.NODE_BOOT_NCR_READY_MIN_TIME} minutes since ' 'starting the instance to allow for Node Registration Checker to finish running.' )) return if node_vm: # check node service account has logging write permissions iam_policy = iam.get_project_policy(op.get_context()) if not iam_policy.has_role_permissions( f'serviceAccount:{node_vm.service_account}', 'roles/logging.logWriter'): op.add_failed( project_path, reason= (f'The service account {node_vm.service_account} for node {node} in location ' f'{location} does not have "Logs Writer (roles/logging.logWriter)" role ' 'permissions. "Logs Writer" permissions are needed for the Node Registration ' 'Checker\'s output to be written in Cloud Logging, where we can analyse it.' ), remediation= ('Add the minimum permissions required to operate GKE to the Node\'s Service ' f'Account {node_vm.service_account} following the documentation: ' 'https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster' '#permissions')) return # if serial log is enabled, we can check Cloud Logging for node-registration-checker.sh # output: if node_vm and node_vm.is_running and node_vm.is_serial_port_logging_enabled( ): # check if START_TIME is after node's boot time if yes we might not find Node # Registration Checker logs, so the user needs to set earlier START_TIME # get the offset-aware datetime instead of offset-naive node_start_time = datetime.fromisoformat(str( node_vm.creation_timestamp)).replace(tzinfo=timezone.utc) if node_start_time < op.get(flags.START_TIME): op.add_failed( project_path, reason= (f'The node {node} in the location {location} booted at {node_start_time} before ' f'the provided START_TIME {op.get(flags.START_TIME)} ' '(default is 8 hours from now)'), remediation= ('Please provide the START_TIME parameter (-p start_time) with a date ' f'before {node_start_time}, so that the runbook can find the Node Registration ' 'Checker logs for the node')) return filter_str = [ f'resource.labels.instance_id="{node_vm.id}"', default_filter, 'textPayload:"Node ready and registered."' ] filter_str = '\n'.join(filter_str) log_entries_success = local_realtime_query(filter_str) if log_entries_success: # node registered successfully, we're all good sample_log = log_entries_success.pop() sample_log = str(sample_log).replace(', ', '\n') op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, log_entry=sample_log, node=node)) else: # node failed to register, need to find Node Registration Checker summary verify if # node-registration-checker.sh finished running filter_str = [ f'resource.labels.instance_id="{node_vm.id}"', default_filter, 'textPayload:"Completed running Node Registration Checker"' ] filter_str = '\n'.join(filter_str) log_entries_completed = local_realtime_query(filter_str) if log_entries_completed: # node registration finished running but node didn't register. Get all logs for info filter_str = [ f'resource.labels.instance_id="{node_vm.id}"', default_filter ] filter_str = '\n'.join(filter_str) log_entries_all = local_realtime_query(filter_str) # log_entries_all have now all the logs until the final "Completed running Node # Registration Checker" message, thus we need to pop messages one by one and go back # until the start of the NRC report message "Here is a summary of the checks performed" found = False nrc_summary = [] while not found: nrc_summary.insert(0, log_entries_all.pop()['textPayload']) if TOKEN_NRC_START in nrc_summary[0]: found = True op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, log_entries=nrc_summary, node=node, location=location), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return else: # Could not find message that Node Registration Checker finished running for instance # id, checking by node name and look for potential repair loop filter_str = [ f'labels."compute.googleapis.com/resource_name"="{node}"', default_filter, 'textPayload:"Completed running Node Registration Checker"' ] filter_str = '\n'.join(filter_str) log_entries_completed = local_realtime_query(filter_str) if log_entries_completed: # as there is "Completed running Node Registration Checker" log entry but not for # current instance_id, this means that the node is in a repair loop. Need to find out # the summary taking into account that there could be multiple summaries nrc_summary = get_nrc_summary(node, op.get(flags.LOCATION)) op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON_ALT1, log_entries=nrc_summary, node=node, location=location), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return else: # node is running, but there's no "Completed running Node Registration Checker" log # entry in the provided time range op.add_failed(project_path, reason=op.prep_msg(op.UNCERTAIN_REASON, node=node, location=location, start_time=op.get( flags.START_TIME), end_time=op.get(flags.END_TIME)), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION, node=node)) return else: # node doesn't exist, checking older logs by node name and trying to find if Node # Registration Checker completed running at least once filter_str = [ f'labels."compute.googleapis.com/resource_name"="{node}"', default_filter, 'textPayload:"Node ready and registered."' ] filter_str = '\n'.join(filter_str) log_entries_success = local_realtime_query(filter_str) if log_entries_success: # node isn't running now, but it registered successfully in the past sample_log = log_entries_success.pop() sample_log = str(sample_log).replace(', ', '\n') op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON_ALT1, log_entry=sample_log, node=node)) else: filter_str = [ f'labels."compute.googleapis.com/resource_name"="{node}"', default_filter, 'textPayload:"Completed running Node Registration Checker"' ] filter_str = '\n'.join(filter_str) log_entries_completed = local_realtime_query(filter_str) if log_entries_completed: # Node Registration Checker completed running. Need to find out the summary, taking # into account that there could be multiple summaries nrc_summary = get_nrc_summary(node, op.get(flags.LOCATION)) op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON_ALT2, log_entries=nrc_summary, node=node, location=location), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return else: # node is not running and Node Registration Checker did not complete running. Most # probably the node was deleted before Node Registration Checker could finish running. op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON_ALT3, node=node, location=location), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT3)) return else: op.add_skipped( project_path, reason= ('No node name provided, skipping this step .\n' 'Please provide node name (-p node=) if the node appears in the nodepool, ' 'but fails registration.\n')) class NodeBootstrappingEnd(runbook.EndStep): """Finalizes the diagnostics process for `GKE Node Bootstrapping`. This step prompts the user to confirm satisfaction with the analysis performed for `GKE Node Bootstrapping`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. """ def execute(self): """Finalize `GKE Node Bootstrapping` diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message='Are you satisfied with the `GKE Node Bootstrapping` analysis?') if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gke/node_bootstrapping_test.py ================================================ # Copyright 2024 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. """Test class for gke/NodeBootstrapping.""" import collections import unittest from datetime import datetime, timedelta, timezone from unittest.mock import ANY, MagicMock, patch from googleapiclient.errors import HttpError from gcpdiag import config from gcpdiag.queries import crm_stub, gce_stub, gke_stub, iam_stub, logs_stub from gcpdiag.runbook import gke, op, snapshot_test_base from gcpdiag.runbook.gke import flags, node_bootstrapping TEST_TIME = datetime(2026, 1, 8, 12, 0, 0, tzinfo=timezone.utc) class MockDatetime(datetime): @classmethod def now(cls, tz=None): if tz: return TEST_TIME.astimezone(tz) return TEST_TIME class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke runbook_name = 'gke/node-bootstrapping' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gke1-aaaa', 'nodepool': 'gke-gke1-default-pool-671518f6', 'location': 'europe-west4-a', 'gke_cluster_name': 'gke-cluster-name', }] class TestNodeBootstrappingCoverage(unittest.TestCase): """Comprehensive test suite for node_bootstrapping.py to reach 100% coverage. Follows Arrange-Act-Assert and Behavior-Driven Testing patterns. """ def setUp(self): super().setUp() patcher = patch('gcpdiag.runbook.gke.node_bootstrapping.datetime', MockDatetime) patcher.start() self.addCleanup(patcher.stop) self.op_add_ok = patch('gcpdiag.runbook.op.add_ok').start() self.op_add_failed = patch('gcpdiag.runbook.op.add_failed').start() self.op_add_skipped = patch('gcpdiag.runbook.op.add_skipped').start() self.mock_gke = patch('gcpdiag.runbook.gke.node_bootstrapping.gke', gke_stub).start() self.mock_gce = patch('gcpdiag.runbook.gke.node_bootstrapping.gce', gce_stub).start() self.mock_crm = patch('gcpdiag.runbook.gke.node_bootstrapping.crm', crm_stub).start() self.mock_iam = patch('gcpdiag.runbook.gke.node_bootstrapping.iam', iam_stub).start() self.mock_logs_module = patch('gcpdiag.runbook.gke.node_bootstrapping.logs', logs_stub).start() self.mock_realtime_query = patch('gcpdiag.queries.logs_stub.realtime_query', create=True).start() self.mock_get_clusters = patch('gcpdiag.queries.gke_stub.get_clusters', create=True).start() self.mock_get_instance = patch('gcpdiag.queries.gce_stub.get_instance', create=True).start() self.mock_get_project = patch('gcpdiag.queries.crm_stub.get_project', create=True).start() self.mock_get_project_policy = patch( 'gcpdiag.queries.iam_stub.get_project_policy', create=True).start() self.params = { flags.PROJECT_ID: 'test-project', flags.LOCATION: 'us-central1-a', flags.NODE: 'test-node', flags.GKE_CLUSTER_NAME: 'test-cluster', flags.START_TIME: TEST_TIME - timedelta(hours=1), flags.END_TIME: TEST_TIME, flags.NODEPOOL: 'test-pool', } self.mock_op_parent = MagicMock() self.mock_op_parent.parameters = self.params self.addCleanup(patch.stopall) def create_mock_vm(self, is_gke=True, serial_enabled=True, running=True): vm = MagicMock() vm.is_gke_node.return_value = is_gke vm.is_serial_port_logging_enabled.return_value = serial_enabled vm.is_running = running vm.id = '12345' vm.service_account = 'test-sa@project.iam.gserviceaccount.com' vm.creation_timestamp = TEST_TIME - timedelta(minutes=15) return vm def test_start_no_clusters_named(self): """Cluster name provided but not found.""" self.mock_get_clusters.return_value = [] step = node_bootstrapping.NodeBootstrappingStart() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_skipped.assert_called_with( ANY, reason='No test-cluster GKE cluster found in project test-project') def test_start_no_clusters_at_all(self): """No clusters in project.""" self.params[flags.GKE_CLUSTER_NAME] = None self.mock_get_clusters.return_value = [] step = node_bootstrapping.NodeBootstrappingStart() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_skipped.assert_called_with( ANY, reason='No GKE clusters found in project test-project') def test_start_non_gke_node(self): """Node is not a GKE node.""" self.mock_get_instance.return_value = self.create_mock_vm(is_gke=False) step = node_bootstrapping.NodeBootstrappingStart() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_skipped.assert_called_with( ANY, reason= 'Instance test-node in location us-central1-a does not appear to be a GKE node' ) def test_insert_check_failed(self): """instances.insert error found.""" self.params[flags.NODE] = None # Ensure it checks pool insert self.mock_realtime_query.return_value = [{ 'severity': 'ERROR', 'protoPayload': { 'resourceName': 'pool' } }] step = node_bootstrapping.NodeInsertCheck() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called_once() def test_registration_too_young(self): """Node just booted (< 7 mins).""" vm = self.create_mock_vm() vm.creation_timestamp = TEST_TIME - timedelta(minutes=2) self.mock_get_instance.return_value = vm step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY) def test_registration_missing_permissions(self): """Node SA lacks log writer role.""" vm = self.create_mock_vm() self.mock_get_instance.return_value = vm mock_policy = MagicMock() mock_policy.has_role_permissions.return_value = False self.mock_get_project_policy.return_value = mock_policy step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY) def test_registration_repair_loop(self): """NRC finished for name but not current ID.""" vm = self.create_mock_vm() self.mock_get_instance.return_value = vm self.mock_realtime_query.side_effect = [ [], # for log_entries_success [], # for log_entries_completed by id [{ 'textPayload': 'Completed running Node Registration Checker' }], [ { 'textPayload': 'other log' }, { 'textPayload': '** Here is a summary of the checks performed: **' }, { 'textPayload': 'check 1' }, { 'textPayload': ('** Completed running Node Registration Checker **') }, ], ] step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called() def test_registration_deleted_node_past_success(self): """Node deleted but registered in past.""" self.mock_get_instance.return_value = None self.mock_realtime_query.return_value = [{ 'textPayload': 'Node ready and registered.' }] step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_ok.assert_called() def test_get_nrc_summary_logic(self): """Directly tests the helper logic of get_nrc_summary.""" self.mock_realtime_query.return_value = [ { 'textPayload': 'other log' }, { 'textPayload': '** Here is a summary of the checks performed: **' }, { 'textPayload': 'check 1' }, { 'textPayload': '** Completed running Node Registration Checker **' }, ] with op.operator_context(self.mock_op_parent): summary = node_bootstrapping.get_nrc_summary('node', 'zone') self.assertEqual(len(summary), 3) self.assertIn('check 1', summary[1]) def test_insert_check_ok(self): """No insert errors found for nodepool.""" self.params[flags.NODE] = None self.mock_realtime_query.return_value = [] step = node_bootstrapping.NodeInsertCheck() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_ok.assert_called_once() def test_registration_start_time_after_boot(self): """node_start_time < START_TIME failure.""" vm = self.create_mock_vm() vm.creation_timestamp = datetime(2024, 1, 1, 0, 0, 0, tzinfo=timezone.utc) self.mock_get_instance.return_value = vm self.params[flags.START_TIME] = datetime(2024, 1, 2, 0, 0, 0, tzinfo=timezone.utc) mock_policy = MagicMock() mock_policy.has_role_permissions.return_value = True self.mock_get_project_policy.return_value = mock_policy step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY) def test_registration_success_running(self): """Running node registered successfully.""" vm = self.create_mock_vm() self.mock_get_instance.return_value = vm self.mock_realtime_query.return_value = [{ 'textPayload': 'Node ready and registered.' }] mock_policy = MagicMock() mock_policy.has_role_permissions.return_value = True self.mock_get_project_policy.return_value = mock_policy step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_ok.assert_called() def test_registration_failed_with_summary(self): """Checker completed but failed, summary extracted.""" vm = self.create_mock_vm() self.mock_get_instance.return_value = vm mock_policy = MagicMock() mock_policy.has_role_permissions.return_value = True self.mock_get_project_policy.return_value = mock_policy self.mock_realtime_query.side_effect = [ [], # for log_entries_success [{ 'textPayload': 'Completed...' }], # for log_entries_completed [ # for log_entries_all for summary extraction { 'textPayload': 'Completed running Node Registration Checker' }, { 'textPayload': 'Error details' }, { 'textPayload': node_bootstrapping.TOKEN_NRC_START }, ] ] step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called() def test_registration_deleted_node_failed_summary(self): """Node not running, checker failed in past.""" self.mock_get_instance.return_value = None self.mock_realtime_query.side_effect = [ [], # log_entries_success [{ 'textPayload': 'Completed...' }], # log_entries_completed by name [ # logs for get_nrc_summary { 'textPayload': node_bootstrapping.TOKEN_NRC_START }, { 'textPayload': 'error' }, { 'textPayload': '** Completed running Node Registration Checker **' }, ] ] step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called() def test_end_step_not_satisfied(self): """User not satisfied with analysis.""" with patch('gcpdiag.runbook.op.prompt', return_value=op.NO): op_info = patch('gcpdiag.runbook.op.info').start() step = node_bootstrapping.NodeBootstrappingEnd() with op.operator_context(self.mock_op_parent): step.execute() op_info.assert_called_with(message=ANY) def test_get_nrc_summary_no_match(self): """get_nrc_summary with no summary tokens.""" self.mock_realtime_query.return_value = [{'textPayload': 'junk'}] with op.operator_context(self.mock_op_parent): summary = node_bootstrapping.get_nrc_summary('node', 'zone') self.assertEqual(len(summary), 0) def test_get_instance_http_error(self): """gce.get_instance raises HttpError.""" self.mock_get_instance.side_effect = HttpError(MagicMock(status=404), b'not found') self.mock_realtime_query.return_value = [] step = node_bootstrapping.NodeBootstrappingStart() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_skipped.assert_called_once() _, kwargs = self.op_add_skipped.call_args self.assertIn('There are no log entries for the provided node test-node', kwargs['reason']) def test_start_no_logs_for_node(self): """No audit logs found for the node.""" self.mock_get_instance.return_value = self.create_mock_vm() self.mock_realtime_query.return_value = [] step = node_bootstrapping.NodeBootstrappingStart() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_skipped.assert_called_once() _, kwargs = self.op_add_skipped.call_args self.assertIn('There are no log entries for the provided node test-node', kwargs['reason']) def test_registration_uncertain_no_nrc_complete(self): """NRC completion log not found for running node.""" vm = self.create_mock_vm() self.mock_get_instance.return_value = vm mock_policy = MagicMock() mock_policy.has_role_permissions.return_value = True self.mock_get_project_policy.return_value = mock_policy self.mock_realtime_query.side_effect = [ [], # log_entries_success [], # log_entries_completed by id [] # log_entries_completed by name ] step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY) def test_node_not_running_nrc_did_not_complete_in_past(self): """Node not running, NRC never completed in past.""" self.mock_get_instance.return_value = None self.mock_realtime_query.side_effect = [ [], # log_entries_success [] # log_entries_completed by name ] step = node_bootstrapping.NodeRegistrationSuccess() with op.operator_context(self.mock_op_parent): step.execute() self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY) def test_legacy_parameter_handler(self): """legacy 'name' parameter is handled.""" runbook = node_bootstrapping.NodeBootstrapping() params = {'name': 'test-cluster'} runbook.legacy_parameter_handler(params) self.assertNotIn('name', params) self.assertIn('gke_cluster_name', params) self.assertEqual(params['gke_cluster_name'], 'test-cluster') def test_build_tree(self): """build_tree.""" runbook = node_bootstrapping.NodeBootstrapping() runbook.build_tree() # BFS to collect all steps q = collections.deque([runbook.start]) steps_in_runbook = [] visited_steps = set() while q: s = q.popleft() if s in visited_steps: continue visited_steps.add(s) steps_in_runbook.append(s) q.extend(s.steps) step_types = [type(s) for s in steps_in_runbook] self.assertIn(node_bootstrapping.NodeBootstrappingStart, step_types) self.assertIn(node_bootstrapping.NodeInsertCheck, step_types) self.assertIn(node_bootstrapping.NodeRegistrationSuccess, step_types) self.assertIn(node_bootstrapping.NodeBootstrappingEnd, step_types) if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/gke/node_unavailability.py ================================================ # Copyright 2024 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. """GKE Node Unavailability runbook""" from gcpdiag import runbook from gcpdiag.queries import crm, gke, logs from gcpdiag.runbook import op from gcpdiag.runbook.gke import flags # local variables to not repeat the same log queries LOG_PREEMPTED = LOG_DELETED = LOG_MIGRATED = None def local_realtime_query(filter_str): result = logs.realtime_query( project_id=op.get(flags.PROJECT_ID), start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME), filter_str=filter_str, ) return result class NodeUnavailability(runbook.DiagnosticTree): """Identifies the reasons for a GKE node being unavailable. This runbook investigates various factors that may have caused a node to become unavailable, including: - Live Migration - Preemption - Removal by the Cluster Autoscaler - Node Pool Upgrade """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The ID of the project hosting the GKE Cluster', 'required': True, }, flags.NAME: { 'type': str, 'help': ('The name of the GKE cluster, to limit search only for this' ' cluster'), 'required': False, 'deprecated': True, 'new_parameter': 'gke_cluster_name', }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': ('The name of the GKE cluster, to limit search only for this' ' cluster'), 'required': False, }, flags.NODE: { 'type': str, 'help': 'The node name that was started.', 'required': True, }, flags.LOCATION: { 'type': str, 'help': 'The zone or region of the GKE cluster', 'required': False, }, } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = NodeUnavailabilityStart() live_migration_check = LiveMigration() preemption_check = PreemptionCondition() autoscaler_removal_check = NodeRemovedByAutoscaler() upgrade_check = NodePoolUpgrade() self.add_start(start) self.add_step(parent=start, child=live_migration_check) self.add_step(parent=live_migration_check, child=preemption_check) self.add_step(parent=preemption_check, child=autoscaler_removal_check) self.add_step(parent=autoscaler_removal_check, child=upgrade_check) self.add_end(step=NodeUnavailabilityEnd()) class NodeUnavailabilityStart(runbook.StartStep): """Check inputs and verify if the node was unavailable""" def execute(self): """Check inputs and verify if the node was unavailable""" project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) global LOG_MIGRATED, LOG_DELETED, LOG_PREEMPTED # check if there are clusters in the project clusters = gke.get_clusters(op.get_context()) if not clusters: op.add_skipped(project_path, reason=f'No GKE clusters found in project {project}') return # check if there were any node unavailability logs for the provided node filter_str = [ 'resource.type="gce_instance"', 'log_id("cloudaudit.googleapis.com/system_event")', 'protoPayload.methodName="compute.instances.preempted"', f'protoPayload.resourceName:"{node}"' ] filter_str = '\n'.join(filter_str) LOG_PREEMPTED = local_realtime_query(filter_str) filter_str = [ 'resource.type="gce_instance"', '(protoPayload.methodName="compute.instances.migrateOnHostMaintenance" OR' ' operation.producer="compute.instances.migrateOnHostMaintenance")', 'log_id("cloudaudit.googleapis.com/system_event")', f'protoPayload.resourceName:"{node}"' ] filter_str = '\n'.join(filter_str) LOG_MIGRATED = local_realtime_query(filter_str) filter_str = [ 'resource.type="gce_instance"', 'protoPayload.methodName="v1.compute.instances.delete"', 'log_id("cloudaudit.googleapis.com/activity")', f'protoPayload.resourceName:"{node}"', ] filter_str = '\n'.join(filter_str) LOG_DELETED = local_realtime_query(filter_str) if not (LOG_PREEMPTED or LOG_MIGRATED or LOG_DELETED): reason = (f'There are no log entries that would show node {node} being' ' unavailable') if name: reason += f' in cluster {name}' if location: reason += f' in location {location}' reason += f' in the provided time range {start_time} - {end_time}.' op.add_skipped(project_path, reason=reason) return class LiveMigration(runbook.Step): """Checks if the node was unavailable due to a live migration event.""" template = 'nodeunavailability::node_live_migration' def execute(self): """Check for live migration logs.""" project = op.get(flags.PROJECT_ID) node = op.get(flags.NODE) project_path = crm.get_project(project) if LOG_MIGRATED: op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, node=node), remediation=op.prep_msg(op.FAILURE_REMEDIATION, node=node)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node)) class PreemptionCondition(runbook.Step): """Checks if the node was preempted.""" template = 'nodeunavailability::node_preempted' def execute(self): """Checks for preemption logs.""" project = op.get(flags.PROJECT_ID) node = op.get(flags.NODE) project_path = crm.get_project(project) if LOG_PREEMPTED: op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, node=node), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node)) class NodeRemovedByAutoscaler(runbook.Step): """Checks if the node was removed by Cluster Autoscaler.""" template = 'nodeunavailability::node_removed_by_autoscaler' def execute(self): """Checks for Cluster Autoscaler ScaleDown logs.""" project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) filter_str = [ 'resource.type="k8s_cluster"', 'log_id("container.googleapis.com/cluster-autoscaler-visibility")', f'jsonPayload.decision.scaleDown.nodesToBeRemoved.node.name="{node}"' ] if location: filter_str.append(f'resource.labels.location="{location}"') if name: filter_str.append(f'resource.labels.cluster_name="{name}"') filter_str = '\n'.join(filter_str) log_entries = local_realtime_query(filter_str) if log_entries and LOG_DELETED: op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, node=node), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node)) class NodePoolUpgrade(runbook.Step): """Checks if the node was removed by Cluster Upgrade Operation.""" template = 'nodeunavailability::node_pool_upgrade' def execute(self): """Checks for Node Upgrade operation logs.""" project = op.get(flags.PROJECT_ID) location = op.get(flags.LOCATION) node = op.get(flags.NODE) name = op.get(flags.GKE_CLUSTER_NAME) project_path = crm.get_project(project) filter_str = [ 'resource.type="k8s_cluster"', 'log_id("cloudaudit.googleapis.com/activity")', 'protoPayload.methodName="io.k8s.core.v1.nodes.update"', 'protoPayload.request.metadata.annotations."gke-current-operation":"UPGRADE_NODES"', f'protoPayload.resourceName="core/v1/nodes/{node}"' ] if location: filter_str.append(f'resource.labels.location="{location}"') if name: filter_str.append(f'resource.labels.cluster_name="{name}"') filter_str = '\n'.join(filter_str) log_entries = local_realtime_query(filter_str) if log_entries and LOG_DELETED: op.add_failed(project_path, reason=op.prep_msg(op.FAILURE_REASON, node=node), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node)) class NodeUnavailabilityEnd(runbook.EndStep): """Finalizes the diagnostics process for `Node Unavailability`. This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for `Node Unavailability`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. """ def execute(self): """Finalize `Node Unavailability` diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message=('Are you satisfied with the `GKE Node Unavailability` RCA' ' performed?'), ) if response == op.NO: op.info(message=( "If no cause for the node's unavailability is found, you could" ' try the node-auto-repair runbook, which would cover node' ' unavailability due to node repair events.')) ================================================ FILE: gcpdiag/runbook/gke/node_unavailability_test.py ================================================ # Copyright 2024 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. """Test class for gke/NodeUnavailability""" import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gke, op, snapshot_test_base from gcpdiag.runbook.gke import flags, node_unavailability class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke runbook_name = 'gke/node-unavailability' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr', 'gke_cluster_name': 'gcp-cluster', 'node': 'gke-gcp-cluster-default-pool-82e0c046-8m8b', 'location': 'europe-west10-a' }] class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class TestNodeUnavailability(unittest.TestCase): """Unit tests for NodeUnavailability runbook.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() node_unavailability.LOG_PREEMPTED = None node_unavailability.LOG_MIGRATED = None node_unavailability.LOG_DELETED = None self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.mock_op_add_ok = self.enterContext( mock.patch('gcpdiag.runbook.op.add_ok')) self.mock_op_add_failed = self.enterContext( mock.patch('gcpdiag.runbook.op.add_failed')) self.mock_op_add_skipped = self.enterContext( mock.patch('gcpdiag.runbook.op.add_skipped')) self.mock_op_prompt = self.enterContext( mock.patch('gcpdiag.runbook.op.prompt')) self.mock_op_info = self.enterContext(mock.patch('gcpdiag.runbook.op.info')) self.mock_op_prep_msg = self.enterContext( mock.patch('gcpdiag.runbook.op.prep_msg')) self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_gke_get_clusters = self.enterContext( mock.patch('gcpdiag.queries.gke.get_clusters')) self.params = { flags.PROJECT_ID: 'test-project', flags.LOCATION: 'us-central1-a', flags.NODE: 'test-node', flags.GKE_CLUSTER_NAME: 'test-cluster', flags.START_TIME: '2025-01-01T00:00:00Z', flags.END_TIME: '2025-01-01T01:00:00Z', } self.mock_op_get.side_effect = lambda key, default=None: self.params.get( key, default) self.mock_project = mock.Mock() self.mock_project.full_path = 'projects/test-project' self.mock_crm_get_project.return_value = self.mock_project mock_interface = mock.Mock() operator = op.Operator(mock_interface) operator.set_parameters(self.params) self.enterContext(op.operator_context(operator)) @mock.patch('gcpdiag.queries.logs.realtime_query') def test_local_realtime_query(self, mock_realtime_query): """Test local_realtime_query (Lines 26-32)""" node_unavailability.local_realtime_query('test-filter') mock_realtime_query.assert_called_once() def test_legacy_parameter_handler(self): """Test legacy_parameter_handler (Lines 81-82)""" runbook_instance = node_unavailability.NodeUnavailability() params = {flags.NAME: 'cluster-name'} runbook_instance.legacy_parameter_handler(params) self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'cluster-name') self.assertNotIn(flags.NAME, params) def test_build_tree(self): """Test build_tree (Lines 86-97)""" runbook_instance = node_unavailability.NodeUnavailability() runbook_instance.build_tree() self.assertIsInstance(runbook_instance.start, node_unavailability.NodeUnavailabilityStart) def test_node_unavailability_start_no_clusters(self): """Test NodeUnavailabilityStart when no clusters are found (Lines 118-121)""" self.mock_gke_get_clusters.return_value = [] step = node_unavailability.NodeUnavailabilityStart() step.execute() self.mock_op_add_skipped.assert_called_once_with(mock.ANY, reason=mock.ANY) @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query') def test_node_unavailability_start_no_logs(self, mock_local_query): """Test NodeUnavailabilityStart when no unavailability logs are found (Lines 153-162)""" self.mock_gke_get_clusters.return_value = ['cluster1'] mock_local_query.return_value = [] # Return empty for all log queries step = node_unavailability.NodeUnavailabilityStart() step.execute() self.mock_op_add_skipped.assert_called_once() def test_live_migration_failed(self): """Test LiveMigration step when logs are present (Lines 177-179)""" node_unavailability.LOG_MIGRATED = ['log-entry'] step = node_unavailability.LiveMigration() step.execute() self.mock_op_add_failed.assert_called_once() def test_live_migration_ok(self): """Test LiveMigration step when no logs are present (Line 181)""" node_unavailability.LOG_MIGRATED = [] step = node_unavailability.LiveMigration() step.execute() self.mock_op_add_ok.assert_called_once() def test_preemption_failed(self): """Test PreemptionCondition step when logs are present (Lines 196-198)""" node_unavailability.LOG_PREEMPTED = ['log-entry'] step = node_unavailability.PreemptionCondition() step.execute() self.mock_op_add_failed.assert_called_once() def test_preemption_ok(self): """Test PreemptionCondition step when no logs are present (Line 200)""" node_unavailability.LOG_PREEMPTED = [] step = node_unavailability.PreemptionCondition() step.execute() self.mock_op_add_ok.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query') def test_autoscaler_removal_failed(self, mock_local_query): """Test NodeRemovedByAutoscaler when logs exist (Lines 229-231)""" mock_local_query.return_value = ['scale-down-log'] node_unavailability.LOG_DELETED = ['delete-log'] step = node_unavailability.NodeRemovedByAutoscaler() step.execute() self.mock_op_add_failed.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query') def test_autoscaler_removal_ok(self, mock_local_query): """Test NodeRemovedByAutoscaler when no scale-down logs exist (Line 234)""" mock_local_query.return_value = [] step = node_unavailability.NodeRemovedByAutoscaler() step.execute() self.mock_op_add_ok.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query') def test_node_pool_upgrade_failed(self, mock_local_query): """Test NodePoolUpgrade when logs exist (Lines 265-267)""" mock_local_query.return_value = ['upgrade-log'] node_unavailability.LOG_DELETED = ['delete-log'] step = node_unavailability.NodePoolUpgrade() step.execute() self.mock_op_add_failed.assert_called_once() @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query') def test_node_pool_upgrade_ok(self, mock_local_query): """Test NodePoolUpgrade when no upgrade logs exist (Line 270)""" mock_local_query.return_value = [] step = node_unavailability.NodePoolUpgrade() step.execute() self.mock_op_add_ok.assert_called_once() def test_node_unavailability_end_not_satisfied(self): """Test NodeUnavailabilityEnd when user is not satisfied (Lines 291-293)""" self.mock_op_prompt.return_value = op.NO step = node_unavailability.NodeUnavailabilityEnd() step.execute() self.mock_op_info.assert_called_once() ================================================ FILE: gcpdiag/runbook/gke/resource_quotas.py ================================================ # Copyright 2024 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. """GKE Resource Quotas runbook""" from datetime import datetime from boltons.iterutils import get_path from gcpdiag import runbook from gcpdiag.queries import crm, gke, logs from gcpdiag.runbook import op from gcpdiag.runbook.gcp import generalized_steps as gcp_gs from gcpdiag.runbook.gke import flags from gcpdiag.utils import GcpApiError, Version class ResourceQuotas(runbook.DiagnosticTree): """Analyses logs in the project where the cluster is running. If there are log entries that contain messages listed in the public documentation https://cloud.google.com/knowledge/kb/google-kubernetes-engine-pods-fail-to-start-due-to-exceeded-quota-000004701 then provide details on how this issue can be solved. """ # Specify parameters common to all steps in the diagnostic tree class. parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True, }, flags.NAME: { 'type': str, 'help': ('The name of the GKE cluster, to limit search only for this' ' cluster'), 'deprecated': True, 'new_parameter': 'gke_cluster_name', }, flags.GKE_CLUSTER_NAME: { 'type': str, 'help': ('The name of the GKE cluster, to limit search only for' ' this cluster'), 'required': True, }, flags.LOCATION: { 'type': str, 'help': '(Optional) The zone or region of the GKE cluster', 'required': True, }, flags.START_TIME: { 'type': datetime, 'help': ('(Optional) The start window to query the logs. Format:' ' YYYY-MM-DDTHH:MM:SSZ'), 'required': False, }, flags.END_TIME: { 'type': datetime, 'help': ('(Optional) The end window for the logs. Format:' ' YYYY-MM-DDTHH:MM:SSZ'), 'required': False, }, } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME) def build_tree(self): start = ResourceQuotasStart() project_logging_check = gcp_gs.ServiceApiStatusCheck() project_logging_check.api_name = 'logging' project_logging_check.project_id = op.get(flags.PROJECT_ID) project_logging_check.expected_state = gcp_gs.constants.APIState.ENABLED clusterversion = ClusterVersion() end = ResourceQuotasEnd() self.add_start(step=start) self.add_step(parent=start, child=project_logging_check) self.add_step(parent=project_logging_check, child=clusterversion) self.add_end(step=end) class ResourceQuotasStart(runbook.StartStep): """Initiates diagnostics for Resource Quotas. Check - if logging API is enabled - if there are GKE clusters in the project - if a cluster name is provided, verify if that cluster exists in the project - if a location is provided, verify there are clusters in that location - if both a location and a name are provided, verify that the cluster exists at that location """ def execute(self): """ Check the provided parameters. """ project = crm.get_project(op.get(flags.PROJECT_ID)) try: cluster = gke.get_cluster(op.get(flags.PROJECT_ID), cluster_id=op.get(flags.GKE_CLUSTER_NAME), location=op.get(flags.LOCATION)) except GcpApiError: op.add_skipped( project, reason=('Cluster {} does not exist in {} for project {}').format( op.get(flags.GKE_CLUSTER_NAME), op.get(flags.LOCATION), op.get(flags.PROJECT_ID))) else: op.add_ok(project, reason=('Cluster {} found in {} for project {}').format( cluster.name, op.get(flags.LOCATION), op.get(flags.PROJECT_ID))) class ClusterVersion(runbook.Step): """Check for cluster version""" GKE_QUOTA_ENFORCEMENT_MIN_VERSION = Version('1.28.0') def execute(self): """ Verify cluster's running version. GKE doesn't enforce the Kubernetes resource quotas for clusters running version 1.28 or later. """ cluster = gke.get_cluster(op.get(flags.PROJECT_ID), cluster_id=op.get(flags.GKE_CLUSTER_NAME), location=op.get(flags.LOCATION)) resource_quota_exceeded = ResourceQuotaExceeded() resource_quota_exceeded.cluster_name = cluster.name resource_quota_exceeded.project_id = op.get(flags.PROJECT_ID) resource_quota_exceeded.cluster_location = cluster.location if cluster.master_version >= self.GKE_QUOTA_ENFORCEMENT_MIN_VERSION: resource_quota_exceeded.template = 'resourcequotas::higher_version_quota_exceeded' else: resource_quota_exceeded.template = 'resourcequotas::lower_version_quota_exceeded' self.add_child(resource_quota_exceeded) class ResourceQuotaExceeded(runbook.Step): """Verify that Kubernetes resource quotas have not been exceeded.""" cluster_name: str cluster_location: str project_id: str template: str = 'resourcequotas::lower_version_quota_exceeded' def execute(self): """Verify that Kubernetes resource quotas for cluster project/{project_id}/locations/{cluster_location}/clusters/{cluster_name} were not exceeded between {start_time} and {end_time} """ project = crm.get_project(self.project_id) filter_list = [ 'log_id("cloudaudit.googleapis.com/activity")', 'resource.type="k8s_cluster"', f'resource.labels.location="{self.cluster_location}"', f'resource.labels.cluster_name="{self.cluster_name}"', 'protoPayload.status.message:"forbidden: exceeded quota"' ] filter_str = '\n'.join(filter_list) log_entries = logs.realtime_query(project_id=project.project_id, filter_str=filter_str, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)) if log_entries: # taking the last log entry to provide as output, because the latest log entry is always # more relevant than the 1st json_payload = get_path(log_entries[-1], ('protoPayload', 'status'), default={}) sample_log = f"Log Message: {json_payload.get('message', 'N/A')}" op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log, cluster=self.cluster_name, project=project, location=self.cluster_location, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON, cluster=self.cluster_name, project=project, location=self.cluster_location, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME))) class ResourceQuotasEnd(runbook.EndStep): """Finalizes the diagnostics process for `Resource Quotas`. This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for `Resource Quotas`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. """ def execute(self): """Finalize `Resource Quotas` diagnostics.""" response = op.prompt( kind=op.CONFIRMATION, message='Are you satisfied with the `GKE Resource Quotas` RCA performed?' ) if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gke/resource_quotas_test.py ================================================ # Copyright 2024 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. """Test class for gke/ResourceQuotas""" import unittest from unittest import mock from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.runbook import gke, op, snapshot_test_base from gcpdiag.runbook.gke import flags, resource_quotas from gcpdiag.utils import GcpApiError, Version class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = gke runbook_name = 'gke/resource-quotas' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr', 'gke_cluster_name': 'gcp-cluster', 'location': 'europe-west10-a', 'end_time': '2024-12-09T07:40:16Z', 'start_time': '2024-12-08T07:40:16Z', }] class MockMessage: """Mock messages for testing.""" def get_msg(self, key, **kwargs): del kwargs return f'{key}' class TestResourceQuotas(unittest.TestCase): """Unit tests covering resource_quotas.""" def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_get_user_email = self.enterContext( mock.patch('gcpdiag.queries.apis.get_user_email')) self.mock_is_enabled = self.enterContext( mock.patch('gcpdiag.queries.apis.is_enabled')) self.mock_is_enabled.return_value = True self.mock_get_user_email.return_value = 'test@example.com' self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get')) self.mock_op_add_ok = self.enterContext( mock.patch('gcpdiag.runbook.op.add_ok')) self.mock_op_add_failed = self.enterContext( mock.patch('gcpdiag.runbook.op.add_failed')) self.mock_op_add_skipped = self.enterContext( mock.patch('gcpdiag.runbook.op.add_skipped')) self.mock_op_prompt = self.enterContext( mock.patch('gcpdiag.runbook.op.prompt')) self.mock_op_info = self.enterContext(mock.patch('gcpdiag.runbook.op.info')) self.mock_op_prep_msg = self.enterContext( mock.patch('gcpdiag.runbook.op.prep_msg')) self.mock_crm_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_gke_get_cluster = self.enterContext( mock.patch('gcpdiag.queries.gke.get_cluster')) self.params = { flags.PROJECT_ID: 'test-project', flags.GKE_CLUSTER_NAME: 'test-cluster', flags.LOCATION: 'us-central1-a', flags.START_TIME: '2025-01-01T00:00:00Z', flags.END_TIME: '2025-01-01T01:00:00Z', } self.mock_op_get.side_effect = lambda k: self.params[k] self.mock_project = mock.Mock() self.mock_project.full_path = 'projects/test-project' self.mock_crm_get_project.return_value = self.mock_project mock_interface = mock.Mock() operator = op.Operator(mock_interface) operator.set_parameters(self.params) self.enterContext(op.operator_context(operator)) def test_legacy_parameter_handler_renames_name_to_cluster_name(self): """legacy_parameter_handler should map 'name' to 'gke_cluster_name'.""" rq = resource_quotas.ResourceQuotas() parameters = {flags.NAME: 'my-cluster'} rq.legacy_parameter_handler(parameters) self.assertNotIn(flags.NAME, parameters) self.assertEqual(parameters[flags.GKE_CLUSTER_NAME], 'my-cluster') def test_build_tree_correctly_assembles_diagnostic_dag(self): """build_tree should add steps to the diagnostic tree.""" rq = resource_quotas.ResourceQuotas() rq.build_tree() self.assertIsNotNone(rq.start) def test_start_step_cluster_found_reports_ok(self): """ResourceQuotasStart reports OK when the cluster exists.""" step = resource_quotas.ResourceQuotasStart() self.mock_gke_get_cluster.return_value = mock.Mock(name='my-cluster') step.execute() self.mock_op_add_ok.assert_called_once() def test_start_step_cluster_not_found_reports_skipped(self): """ResourceQuotasStart reports SKIPPED when GcpApiError occurs.""" step = resource_quotas.ResourceQuotasStart() self.mock_gke_get_cluster.side_effect = GcpApiError('not found') step.execute() self.mock_op_add_skipped.assert_called_once() def test_cluster_version_step_assigns_higher_version_template(self): """ClusterVersion uses higher_version template for GKE versions >= 1.28.""" step = resource_quotas.ClusterVersion() self.mock_gke_get_cluster.return_value = mock.Mock( master_version=Version('1.28.0'), name='c', location='l') step.add_child = mock.Mock() step.execute() child = step.add_child.call_args[0][0] self.assertEqual(child.template, 'resourcequotas::higher_version_quota_exceeded') def test_cluster_version_step_assigns_lower_version_template(self): """ClusterVersion uses lower_version template for GKE versions < 1.28.""" step = resource_quotas.ClusterVersion() self.mock_gke_get_cluster.return_value = mock.Mock( master_version=Version('1.27.0'), name='c', location='l') step.add_child = mock.Mock() step.execute() child = step.add_child.call_args[0][0] self.assertEqual(child.template, 'resourcequotas::lower_version_quota_exceeded') @mock.patch('gcpdiag.queries.logs.realtime_query') def test_quota_exceeded_step_reports_failure_when_logs_found( self, mock_logs_query): """ResourceQuotaExceeded reports FAILURE when quota logs are identified.""" step = resource_quotas.ResourceQuotaExceeded() step.project_id, step.cluster_name, step.cluster_location = 'p', 'c', 'l' self.mock_crm_get_project.return_value = mock.Mock(project_id='p') mock_logs_query.return_value = [{ 'protoPayload': { 'status': { 'message': 'exceeded quota' } } }] step.execute() self.mock_op_add_failed.assert_called_once() @mock.patch('gcpdiag.queries.logs.realtime_query') def test_quota_exceeded_step_reports_ok_when_no_logs_found( self, mock_logs_query): """ResourceQuotaExceeded reports OK when no relevant logs are found.""" step = resource_quotas.ResourceQuotaExceeded() step.project_id, step.cluster_name, step.cluster_location = 'p', 'c', 'l' self.mock_crm_get_project.return_value = mock.Mock(project_id='p') mock_logs_query.return_value = [] step.execute() self.mock_op_add_ok.assert_called_once() def test_end_step_shows_info_on_negative_user_response(self): """ResourceQuotasEnd displays end message when user responds 'NO'.""" step = resource_quotas.ResourceQuotasEnd() self.mock_op_prompt.return_value = resource_quotas.op.NO step.execute() self.mock_op_info.assert_called_once_with( message=resource_quotas.op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/gke/snapshots/cluster_autoscaler.txt ================================================ gke_cluster_name=gcp-cluster,location=europe-west10,project_id=gcpdiag-gke-cluster-autoscaler-rrrr gke/cluster-autoscaler: Analyses logs in the project where the cluster is running. If there are log entries that contain messages listed in the public documentation https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#messages then provide details on how each particular issue can be solved. The following ScaleUP logs messages are covered: - scale.up.error.out.of.resources - scale.up.error.quota.exceeded - scale.up.error.waiting.for.instances.timeout - scale.up.error.ip.space.exhausted - scale.up.error.service.account.deleted The following ScaleDown logs messages are covered: - scale.down.error.failed.to.evict.pods - no.scale.down.node.node.group.min.size.reached - no.scale.down.node.scale.down.disabled.annotation - no.scale.down.node.minimal.resource.limits.exceeded - no.scale.down.node.no.place.to.move.pods - no.scale.down.node.pod.not.backed.by.controller - no.scale.down.node.pod.not.safe.to.evict.annotation - no.scale.down.node.pod.kube.system.unmovable - no.scale.down.node.pod.not.enough.pdb - no.scale.down.node.pod.controller.not.found - no.scale.down.node.pod.unexpected.error [START]: Check the provided parameters. [AUTOMATED STEP]: Check for "scale.up.error.out.of.resources" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleUp event failed because some of the MIGs could not be increased due to lack of resources. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Follow the documentation: [AUTOMATED STEP]: Check for "scale.up.error.quota.exceeded" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleUp event failed because some of the MIGs could not be increased, due to exceeded Compute Engine quota. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Check the Errors tab of the MIG in Google Cloud console to see what quota is being exceeded. Follow the instructions to request a quota increase: [AUTOMATED STEP]: Check for "scale.up.error.waiting.for.instances.timeout" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleUp event failed because instances in some of the MIGs failed to appear in time. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] This message is transient. If it persists, engage Google Cloud Support for further investigation. [AUTOMATED STEP]: Check for "scale.up.error.ip.space.exhausted" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleUp event failed because the cluster doesn't have enough unallocated IP address space to use to add new nodes or Pods. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Refer to the troubleshooting steps to address the lack of IP address space for the nodes or pods. [AUTOMATED STEP]: Check for "scale.up.error.service.account.deleted" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleUp event failed because a service account used by Cluster Autoscaler has been deleted. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Engage Google Cloud Support for further investigation. [AUTOMATED STEP]: Check for "no.scale.down.node.node.group.min.size.reached" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Node cannot be removed because its node group is already at its minimum size. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Review and adjust the minimum value set for node pool autoscaling. [AUTOMATED STEP]: Check for "scale.down.error.failed.to.evict.pods" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleDown event failed because some of the Pods could not be evicted from a node. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Review best practices for Pod Disruption Budgets to ensure that the rules allow for eviction of application replicas when acceptable. [AUTOMATED STEP]: Check for "no.scale.down.node.scale.down.disabled.annotation" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleDown event failed because the node is annotated with cluster-autoscaler.kubernetes.io/scale-down-disabled: true. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Cluster autoscaler skips nodes with this annotation without considering their utilization and this message is logged regardless of the node's utilization factor. If you want cluster autoscaler to scale down these nodes, remove the annotation. [AUTOMATED STEP]: Check for "no.scale.down.node.minimal.resource.limits.exceeded" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleDown event failed because it would violate cluster-wide minimal resource limits. These are the resource limits set for node auto-provisioning. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Review your limits for memory and vCPU and, if you want cluster autoscaler to scale down this node, decrease the limits by following the documentation [AUTOMATED STEP]: Check for "no.scale.down.node.no.place.to.move.pods" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleDown event failed because there's no place to move Pods. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] If you expect that the Pod should be rescheduled, review the scheduling requirements of the Pods on the underutilized node to determine if they can be moved to another node in the cluster. To learn more, see the link [AUTOMATED STEP]: Check for "no.scale.down.node.pod.not.backed.by.controller" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleDown event failed because a Pod is not backed by a controller such as ReplicationController, DaemonSet, Job, StatefulSet, or ReplicaSet. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Set the annotation "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" for the Pod or define an acceptable controller [AUTOMATED STEP]: Check for "no.scale.down.node.pod.not.safe.to.evict.annotation" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleDown event failed because a Pod on the node has the safe-to-evict=false annotation Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] If the Pod can be safely evicted, edit the manifest of the Pod and update the annotation to "cluster-autoscaler.kubernetes.io/safe-to-evict": "true". [AUTOMATED STEP]: Check for "no.scale.down.node.pod.kube.system.unmovable" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleDown event failed because the pod is a non-DaemonSet, non-mirrored, Pod without a PodDisruptionBudget in the kube-system namespace. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] By default, Pods in the kube-system namespace aren't removed by cluster autoscaler. To resolve this issue, either add a PodDisruptionBudget for the kube-system Pods or use a combination of node pools taints and tolerations to separate kube-system Pods from your application Pods. To learn more, see [AUTOMATED STEP]: Check for "no.scale.down.node.pod.not.enough.pdb" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The scaleDown event failed the pod doesn't have enough PodDisruptionBudget. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] Review the PodDisruptionBudget for the Pod and consider making it less restrictive. To learn more, see [AUTOMATED STEP]: Check for "no.scale.down.node.pod.controller.not.found" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Pod is blocking the ScaleDown event because its controller (for example, a Deployment or ReplicaSet) can't be found. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] To determine what actions were taken that left the Pod running after its controller was removed, review the logs. To resolve this issue, manually delete the Pod. [AUTOMATED STEP]: Check for "no.scale.down.node.pod.unexpected.error" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Pod is blocking the ScaleDown event because of an unexpected error. Example log entry that would help identify involved objects: { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } [REMEDIATION] The root cause of this error is unknown. Contact Cloud Customer Care for further investigation. [END]: Finalize `Cluster Autoscaler` diagnostics. ================================================ FILE: gcpdiag/runbook/gke/snapshots/gke_ip_masq_standard.txt ================================================ dest_ip=8.8.8.8,gke_cluster_name=gke1,project_id=gcpdiag-gke4-runbook,src_ip=0.0.0.0 gke/gke-ip-masq-standard: This runbook will analyze symptoms for IP Masquerading issues on GKE Cluster. It examines the following: - Are there any traffic logs to destination IP? - Is ip-masq-agent DaemonSet in kube-system namespace? - Is ip-masq-agent Configmap in kube-system namespace? - Is GKE node IP and Pod IP are under nonMasquerade CIDR? - Is Destination IP is under are under nonMasquerade CIDR? [START]: Lets check the provided parameters. - gcpdiag-gke4-aaaa [OK] [REASON] Cluster with name gke1 exist in project gcpdiag-gke4-runbook [AUTOMATED STEP]: Are you seeing issue from GKE NODE as well? - gcpdiag-gke4-aaaa [FAIL] [REASON] There are no egress traffic to Destination IP which indicates that GKE NODE is also having issue to connect to destination IP. [REMEDIATION] Enable VPC flow logs by following the documentation and look if traffic id going out to destination: [AUTOMATED STEP]: Lets check if Daemon set present.. - gcpdiag-gke4-aaaa [UNCERTAIN] [REASON] Check for ip-masq-agent daemonSet is deployed in the Cluster. If yes follow check next step. [REMEDIATION] If No, please follow [1] to deploy ip-masq-agent DaemonSet in the kube-system namespace and wait for around 5 minutes for the DaemonSet to be ready. [1] [AUTOMATED STEP]: Lets confirm if config map is configure. - gcpdiag-gke4-aaaa [UNCERTAIN] [REASON] When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] [REMEDIATION] If you needs to customize the configmap, then follow the steps [1] to deploy ip-masq-agent ConfigMap in the kube-system namespace. [1] [AUTOMATED STEP]: Lets check pod ip present.. - gcpdiag-gke4-aaaa [UNCERTAIN] [REASON] When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] [REMEDIATION] Follow the steps for including the pod IP CIDRs in nonMasqueradeCIDRs [1]. [1] [AUTOMATED STEP]: Lets check node IP is present under non-masq cidr. - gcpdiag-gke4-aaaa [UNCERTAIN] [REASON] When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] [REMEDIATION] Follow the steps for including the Node IP CIDRs in nonMasqueradeCIDRs [1]. [1] [AUTOMATED STEP]: Lets check if pod ip address is present. - gcpdiag-gke4-aaaa [UNCERTAIN] [REASON] When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] [REMEDIATION] Follow the steps for including the Destination IP CIDRs in nonMasqueradeCIDRs [1]. [1] [END]: Finalize connectivity diagnostics. [INFO]: If all check passed consider please contact support for further troubleshooting ================================================ FILE: gcpdiag/runbook/gke/snapshots/image_pull.txt ================================================ end_time=2024-08-12T23:00:00Z,gke_cluster_name=gke-cluster,location=europe- west10,project_id=gcpdiag-gke-cluster-autoscaler-rrrr,start_time=2024-08-12T01:00:00Z gke/image-pull: Analysis and Resolution of Image Pull Failures on GKE clusters. This runbook investigates the gke cluster for Image pull failures and recommends remediation steps. Areas Examined: - GKE cluster - Stackdriver logs [START]: Starting the image pull error diagnostics [AUTOMATED STEP]: Check for "Failed to pull image.*not found" log entries. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] A container on pod on node failed to pull image because the image was not found in the repository. Example log entry: Cluster name: N/A Location: europe-west1-b Namespace Name: N/A Pod Name: N/A Project ID: gcpdiag-gke1-aaaa Log Message: N/A Reporting Instance: N/A Last Timestamp: N/A [REMEDIATION] Refer to the troubleshooting documentation: [AUTOMATED STEP]: Check for "Failed to pull image.*403 Forbidden" log entries. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Image cannot be pulled by a container on Pod, because there are not enough permissions to pull it from the repository. Verify the node SA has the correct permissions. Example log entry that would help identify involved objects: Cluster name: N/A Location: europe-west1-b Namespace Name: N/A Pod Name: N/A Project ID: gcpdiag-gke1-aaaa Log Message: N/A Reporting Instance: N/A Last Timestamp: N/A [REMEDIATION] Ensure the node service account has the necessary permissions to pull the image. Refer to the documentation: [AUTOMATED STEP]: Check for "Failed to pull image.*lookup.*server misbehaving" log entries. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The DNS resolver (metadata server 169.254.169.254:53) on node was unable to resolve the image repository's IP address, preventing image pull. This often indicates issues with networking or DNS configuration. Example log entry: Cluster name: N/A Location: europe-west1-b Namespace Name: N/A Pod Name: N/A Project ID: gcpdiag-gke1-aaaa Log Message: N/A Reporting Instance: N/A Last Timestamp: N/A [REMEDIATION] Verify networking and DNS requirements, particularly for Private Google Access. Refer to the documentation: [AUTOMATED STEP]: Check for "Failed to pull image.*dial tcp.*199.36.153.\d:443: i/o timeout" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Connections from node to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30) timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to these IP ranges. Example log entry: Cluster name: N/A Location: europe-west1-b Namespace Name: N/A Pod Name: N/A Project ID: gcpdiag-gke1-aaaa Log Message: N/A Reporting Instance: N/A Last Timestamp: N/A [REMEDIATION] Ensure firewall rules permit egress traffic to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30). Refer to the documentation: [AUTOMATED STEP]: Check for "Failed to pull image.*dial tcp.*i/o timeout" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Connections from node to Google APIs timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to Google APIs. The specific blocked IP range might be indicated in the log entry. Example log entry: Cluster name: N/A Location: europe-west1-b Namespace Name: N/A Pod Name: N/A Project ID: gcpdiag-gke1-aaaa Log Message: N/A Reporting Instance: N/A Last Timestamp: N/A [REMEDIATION] Ensure firewall rules permit egress traffic to Google APIs. Refer to the documentation: [AUTOMATED STEP]: Check for "Failed to pull image.*insufficient_scope" log entries - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Either user or service account that's trying to pull the image doesn't have the necessary permissions to access it or Image doesn't exist. Example log entry that would help identify involved objects: Cluster name: N/A Location: europe-west1-b Namespace Name: N/A Pod Name: N/A Project ID: gcpdiag-gke1-aaaa Log Message: N/A Reporting Instance: N/A Last Timestamp: N/A [REMEDIATION] 1. Verify that the image name is correct. 2. Ensure the node's service account has the necessary permissions. Refer to the documentation: [END]: Finalize `GKE Image Pull runbbok` diagnostics. ================================================ FILE: gcpdiag/runbook/gke/snapshots/ip_exhaustion.txt ================================================ end_time=2024-06-30T23:00:00Z,gke_cluster_name=cluster-1,location=us-central1-c,project_id=gcpdiag- gke3-gggg,start_time=2024-06-30T01:00:00Z gke/ip-exhaustion: Troubleshooting ip exhaustion issues on GKE clusters. This runbook investigates the gke cluster for ip exhaustion issues and recommends remediation steps. Areas Examined: - GKE cluster type. - GKE cluster and nodepool configuration - Stackdriver logs [START]: Starting the IP Exhaustion diagnostics - gcpdiag-gke3-gggg [OK] [REASON] Cluster cluster-1 found in us-central1-c for project gcpdiag-gke3-gggg [AUTOMATED STEP]: Checking node IP Exhaustion and offering remediation steps [INFO]: Searching cloud logging for the string IP_SPACE_EXHAUSTED which indicates IP Exhaustion issue [INFO]: IP_SPACE_EXHAUSTED error found for cluster cluster-1 and subnet public-subnet - gcpdiag-gke3-gggg/us-central1-c/cluster-1 [FAIL] [REASON] Node IP exhaustion is detected in the cluster cluster-1 for the subnet public-subnet [REMEDIATION] Please follow the below documentation [1] to expand the ip range of the node subnet. The subnet that has exhausted its IP space is public-subnet. [1] [AUTOMATED STEP]: Checking Pod IP Exhaustion and offering remediation steps [INFO]: Verifying if the cluster is an Autopilot cluster or a Standard cluster. [INFO]: Cluster is a Standard cluster - gcpdiag-gke3-gggg/us-central1-c/cluster-1 [FAIL] [REASON] Pod IP exhaustion is detected in the cluster cluster-1 [REMEDIATION] Here are some commands you can run to add an additional IPv4 pod range to address this issue, and you can find more detailed instructions at the documentation [1]. **Allocate IP addresses with designed length and create a pod range** ``` export POD_IP_RANGE_PREFIX_LENGTH=14 export POD_RANGE_NAME="range-`tr -dc a-z0-9 [2] [3] [END]: Finalize VM external connectivity diagnostics. ================================================ FILE: gcpdiag/runbook/gke/snapshots/logs.txt ================================================ gke_cluster_name=gcp-cluster,location=europe-west10,name=gcp-cluster,project_id=gcpdiag-gke-cluster- autoscaler-rrrr gke/logs: Provides a methodical approach to troubleshooting GKE logging issues. This runbook guides you through a systematic investigation of potential causes when logs from the Google Kubernetes Engine (GKE) cluster are missing or incomplete. The focus is on core configuration settings that are essential for proper logging functionality. The following areas are examined: - **Project-Level Logging:** Ensures that the Google Cloud project housing the GKE cluster has the Cloud Logging API enabled. - **Cluster-Level Logging:** Verifies that logging is explicitly enabled within the GKE cluster's configuration. - **Node Pool Permissions:** Confirms that the nodes within the cluster's node pools have the 'Cloud Logging Write' scope enabled, allowing them to send log data. - **Service Account Permissions:** Validates that the service account used by the node pools possesses the necessary IAM permissions to interact with Cloud Logging. Specifically, the "roles/logging.logWriter" role is typically required. - **Cloud Logging API Write Quotas:** Verifies that Cloud Logging API Write quotas have not been exceeded within the specified timeframe. [START]: Checks the provided parameters. [AUTOMATED STEP]: Checks if logging API is disabled in the project. - gcpdiag-gke-cluster-autoscaler-rrrr [OK] [REASON] The logging API is enabled in your project. [AUTOMATED STEP]: Checks if GKE level logging is disabled - gcpdiag-gke-cluster-autoscaler-rrrr/europe-west10/gcp-cluster [OK] [REASON] GKE level logging is enabled for the cluster projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/europe-west10/clusters/gcp-cluster. [AUTOMATED STEP]: Verifies the node pools have Cloud Logging access scope - gcpdiag-gke-cluster-autoscaler-rrrr/europe-west10/gcp-cluster/default-pool [OK] [REASON] The node pool projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/europe-west10/clusters/gcp-cluster/nodePools/default-pool has the correct Cloud Logging access scope. [AUTOMATED STEP]: Verifies the node pool's service account has a role with the correct logging IAM permissions - gcpdiag-gke-cluster-autoscaler-rrrr/europe-west10/gcp-cluster/default-pool [OK] [REASON] Service account: 1234000173-compute@developer.gserviceaccount.com has the correct logging permissions. [AUTOMATED STEP]: Checks if Cloud Logging API write quotas have been exceeded - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Project gcpdiag-gke-cluster-autoscaler-rrrr has recently exceeded the following quotas: WriteRequestsPerMinutePerProject. [REMEDIATION] Please check the project gcpdiag-gke-cluster-autoscaler-rrrr for the Cloud Logging API quotas WriteRequestsPerMinutePerProject which have been reached [END]: Finalize `GKE logs` diagnostics. ================================================ FILE: gcpdiag/runbook/gke/snapshots/monitoring_configuration.txt ================================================ gke_cluster_name=cluster-2,location=us-central1-a,project_id=mytestproject-371511 gke/monitoring-configuration: Verifies that GKE Monitoring and its components are correctly configured and operational. This runbook guides through a systematic investigation of potential causes when monitoring from the Google Kubernetes Engine (GKE) cluster are missing or incomplete. The focus is on core configuration settings that are essential for proper monitoring functionality. The following areas are examined: - **Project-Level Monitoring:** Ensures that the Google Cloud project housing the GKE cluster has the Cloud Monitoring API enabled. - **Cluster-Level Monitoring:** Verifies that monitoring is explicitly enabled within the GKE cluster's configuration. - **Node Pool Permissions:** Confirms that the nodes within the cluster's node pools have the 'Cloud Monitoring Write' scope enabled, allowing them to send metrics data. - **Service Account Permissions:** Validates that the service account used by the node pools possesses the necessary IAM permissions to interact with Cloud Monitoring. Specifically, the "roles/monitoring.metricWriter" role is typically required. [START]: Checks the provided parameters. [AUTOMATED STEP]: Verify if the API is enabled for this project. [AUTOMATED STEP]: Checks if GKE level Monitoring is disabled. [AUTOMATED STEP]: Verify node-pool OAuth scopes include one of the required scopes. [AUTOMATED STEP]: Verifies the node pool's service account has a role with the correct required service IAM permissions. [END]: Finalizes `GKE Monitoring` diagnostics. ================================================ FILE: gcpdiag/runbook/gke/snapshots/node_auto_repair.txt ================================================ gke_cluster_name=gcp-cluster,location=europe-west10-a,node=gke-gcp-cluster-default- pool-82e0c046-8m8b,project_id=gcpdiag-gke-cluster-autoscaler-rrrr gke/node-auto-repair: Provides the reason why a Node was auto-repaired This runbook checks if: - Node auto-repair is enabled on the cluster - Nodes was repaired because it was in NotReady status for more than 10 minutes - Nodes was repaired because it had disk pressure - Nodes was repaired because of unallocatable GPUs - Nodes was repaired because of unallocatable TPUs [START]: Check inputs and verify if there was a repair event [AUTOMATED STEP]: Checking if there is the node is in NotReady status. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The node gke-gcp-cluster-default-pool-82e0c046-8m8b was auto-repaired because it was in a NotReady state for more than approximately 10 minutes. [REMEDIATION] The auto-repair should have fixed the detected NotReady state. For more details check: [AUTOMATED STEP]: Checking if there is the node is in NodeHasDiskPressure status. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The node gke-gcp-cluster-default-pool-82e0c046-8m8b was auto-repaired because it had disk pressure for more than 30 minutes. [REMEDIATION] The auto-repair should have fixed the detected disk pressure. For more details check: [AUTOMATED STEP]: Verify whether the node was auto-repaired because of Unallocatable GPUs. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The node gke-gcp-cluster-default-pool-82e0c046-8m8b was auto-repaired because it had unallocatable GPU(s) for more than 15 minutes. [REMEDIATION] The auto-repair should have fixed the detected unallocatable GPU(s). For more details check: [AUTOMATED STEP]: Verify whether the node was auto-repaired because of Unallocatable TPUs. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The node gke-gcp-cluster-default-pool-82e0c046-8m8b was auto-repaired because it had unallocatable TPU(s) for more than 10 minutes. [REMEDIATION] The auto-repair should have fixed the detected unallocatable TPU(s). For more details check: [END]: Finalize `Node AutoRepair` diagnostics. ================================================ FILE: gcpdiag/runbook/gke/snapshots/node_bootstrapping.txt ================================================ gke_cluster_name=gke-cluster-name,location=europe-west4-a,nodepool=gke-gke1-default- pool-671518f6,project_id=gcpdiag-gke1-aaaa gke/node-bootstrapping: Analyses issues experienced when adding nodes to your GKE Standard cluster. This runbook requires at least - location and node parameters. Location here is the zone where the node is running, for example us-central1-c. - location, nodepool and cluster name parameters to be provided. Location is zone or region for a nodepool, if the cluster is a regional cluster, then location for a nodepool will be the cluster region. For example a region could be us-central1. If a location/node pair is provided, the runbook will check the Node Registration Checker output for the given location/node pair. If a location, nodepool and GKE cluster name parameters are provided, the runbook will check for any errors that might have occurred when the instances.insert method was invoked for the given parameters. [START]: Check the provided parameters. - gcpdiag-gke1-aaaa [SKIP] [REASON] No gke-cluster-name GKE cluster found in project gcpdiag-gke1-aaaa ================================================ FILE: gcpdiag/runbook/gke/snapshots/node_unavailability.txt ================================================ gke_cluster_name=gcp-cluster,location=europe-west10-a,node=gke-gcp-cluster-default- pool-82e0c046-8m8b,project_id=gcpdiag-gke-cluster-autoscaler-rrrr gke/node-unavailability: Identifies the reasons for a GKE node being unavailable. This runbook investigates various factors that may have caused a node to become unavailable, including: - Live Migration - Preemption - Removal by the Cluster Autoscaler - Node Pool Upgrade [START]: Check inputs and verify if the node was unavailable [AUTOMATED STEP]: Check for live migration logs. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] Live migration check failed for node gke-gcp-cluster-default-pool-82e0c046-8m8b. [REMEDIATION] There was a live migration event for the node gke-gcp-cluster-default-pool-82e0c046-8m8b. For more details about Live migration process during maintenance events, please consult the documentation: [AUTOMATED STEP]: Checks for preemption logs. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The node gke-gcp-cluster-default-pool-82e0c046-8m8b was preempted. [REMEDIATION] Compute Engine might stop (preempt) preemptible instances if it needs to reclaim the compute capacity for allocation to other VMs. For more details about preemptible VMs in GKE please consult the documentation: [AUTOMATED STEP]: Checks for Cluster Autoscaler ScaleDown logs. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The node gke-gcp-cluster-default-pool-82e0c046-8m8b was removed by the cluster autoscaler. [REMEDIATION] This is expected behavior. GKE's cluster autoscaler automatically resizes the number of nodes in a given node pool, based on the demands of your workloads. When demand is low, the cluster autoscaler scales back down to a minimum size that you designate. For more details about Cluster Autoscaler ScaleDown events please consult the documentation: [AUTOMATED STEP]: Checks for Node Upgrade operation logs. - gcpdiag-gke-cluster-autoscaler-rrrr [FAIL] [REASON] The node gke-gcp-cluster-default-pool-82e0c046-8m8b was unavailable due to a node pool upgrade. [REMEDIATION] This is expected behavior, when the upgrade is performed, nodes are drained and re-created to match the desired version. To list the node upgrade operations, please issue the following gcloud command: ``` gcloud container operations list --filter=operationType:UPGRADE_NODES ``` For more details about node upgrades please consult the documentation: [END]: Finalize `Node Unavailability` diagnostics. ================================================ FILE: gcpdiag/runbook/gke/snapshots/resource_quotas.txt ================================================ end_time=2024-12-09T07:40:16Z,gke_cluster_name=gcp-cluster,location=europe- west10-a,project_id=gcpdiag-gke-cluster-autoscaler-rrrr,start_time=2024-12-08T07:40:16Z gke/resource-quotas: Analyses logs in the project where the cluster is running. If there are log entries that contain messages listed in the public documentation https://cloud.google.com/knowledge/kb/google-kubernetes-engine-pods-fail-to-start-due-to-exceeded-quota-000004701 then provide details on how this issue can be solved. [START]: Check the provided parameters. [AUTOMATED STEP]: Verify logging.googleapis.com API is ENABLED in project gcpdiag-gke-cluster-autoscaler-rrrr. - gcpdiag-gke-cluster-autoscaler-rrrr [OK] [REASON] The `logging.googleapis.com` service is currently in the expected state: `ENABLED`. [AUTOMATED STEP]: Verify cluster's running version. GKE doesn't enforce the Kubernetes resource quotas for clusters running version 1.28 or later. [END]: Finalize `Resource Quotas` diagnostics. ================================================ FILE: gcpdiag/runbook/gke/templates/clusterautoscaler.jinja ================================================ {% block out_of_resources_failure_reason %} The scaleUp event failed because some of the MIGs could not be increased due to lack of resources. Example log entry that would help identify involved objects: {log_entry} {% endblock out_of_resources_failure_reason %} {% block out_of_resources_failure_remediation %} Follow the documentation: {% endblock out_of_resources_failure_remediation %} {% block out_of_resources_success_reason %} No "scale.up.error.out.of.resources" errors found between {start_time} and {end_time} {% endblock out_of_resources_success_reason %} {% block quota_exceeded_failure_reason %} The scaleUp event failed because some of the MIGs could not be increased, due to exceeded Compute Engine quota. Example log entry that would help identify involved objects: {log_entry} {% endblock quota_exceeded_failure_reason %} {% block quota_exceeded_failure_remediation %} Check the Errors tab of the MIG in Google Cloud console to see what quota is being exceeded. Follow the instructions to request a quota increase: {% endblock quota_exceeded_failure_remediation %} {% block quota_exceeded_success_reason %} No "scale.up.error.quota.exceeded errors" found between {start_time} and {end_time} {% endblock quota_exceeded_success_reason %} {% block instance_timeout_failure_reason %} The scaleUp event failed because instances in some of the MIGs failed to appear in time. Example log entry that would help identify involved objects: {log_entry} {% endblock instance_timeout_failure_reason %} {% block instance_timeout_failure_remediation %} This message is transient. If it persists, engage Google Cloud Support for further investigation. {% endblock instance_timeout_failure_remediation %} {% block instance_timeout_success_reason %} No "scale.up.error.waiting.for.instances.timeout" errors found between {start_time} and {end_time} {% endblock instance_timeout_success_reason %} {% block ip_space_exhausted_failure_reason %} The scaleUp event failed because the cluster doesn't have enough unallocated IP address space to use to add new nodes or Pods. Example log entry that would help identify involved objects: {log_entry} {% endblock ip_space_exhausted_failure_reason %} {% block ip_space_exhausted_failure_remediation %} Refer to the troubleshooting steps to address the lack of IP address space for the nodes or pods. {% endblock ip_space_exhausted_failure_remediation %} {% block ip_space_exhausted_success_reason %} No "scale.up.error.ip.space.exhausted" errors found between {start_time} and {end_time} {% endblock ip_space_exhausted_success_reason %} {% block service_account_deleted_failure_reason %} The scaleUp event failed because a service account used by Cluster Autoscaler has been deleted. Example log entry that would help identify involved objects: {log_entry} {% endblock service_account_deleted_failure_reason %} {% block service_account_deleted_failure_remediation %} Engage Google Cloud Support for further investigation. {% endblock service_account_deleted_failure_remediation %} {% block service_account_deleted_success_reason %} No "scale.up.error.service.account.deleted" errors found between {start_time} and {end_time} {% endblock service_account_deleted_success_reason %} {% block min_size_reached_failure_reason %} Node cannot be removed because its node group is already at its minimum size. Example log entry that would help identify involved objects: {log_entry} {% endblock min_size_reached_failure_reason %} {% block min_size_reached_failure_remediation %} Review and adjust the minimum value set for node pool autoscaling. {% endblock min_size_reached_failure_remediation %} {% block min_size_reached_success_reason %} No "no.scale.down.node.node.group.min.size.reached" errors found between {start_time} and {end_time} {% endblock min_size_reached_success_reason %} {% block failed_evict_pods_failure_reason %} The scaleDown event failed because some of the Pods could not be evicted from a node. Example log entry that would help identify involved objects: {log_entry} {% endblock failed_evict_pods_failure_reason %} {% block failed_evict_pods_failure_remediation %} Review best practices for Pod Disruption Budgets to ensure that the rules allow for eviction of application replicas when acceptable. {% endblock failed_evict_pods_failure_remediation %} {% block failed_evict_pods_success_reason %} No "scale.down.error.failed.to.evict.pods" errors found between {start_time} and {end_time} {% endblock failed_evict_pods_success_reason %} {% block disabled_annotation_failure_reason %} The scaleDown event failed because the node is annotated with cluster-autoscaler.kubernetes.io/scale-down-disabled: true. Example log entry that would help identify involved objects: {log_entry} {% endblock disabled_annotation_failure_reason %} {% block disabled_annotation_failure_remediation %} Cluster autoscaler skips nodes with this annotation without considering their utilization and this message is logged regardless of the node's utilization factor. If you want cluster autoscaler to scale down these nodes, remove the annotation. {% endblock disabled_annotation_failure_remediation %} {% block disabled_annotation_success_reason %} No "no.scale.down.node.scale.down.disabled.annotation" errors found between {start_time} and {end_time} {% endblock disabled_annotation_success_reason %} {% block min_resource_limit_exceeded_failure_reason %} The scaleDown event failed because it would violate cluster-wide minimal resource limits. These are the resource limits set for node auto-provisioning. Example log entry that would help identify involved objects: {log_entry} {% endblock min_resource_limit_exceeded_failure_reason %} {% block min_resource_limit_exceeded_failure_remediation %} Review your limits for memory and vCPU and, if you want cluster autoscaler to scale down this node, decrease the limits by following the documentation {% endblock min_resource_limit_exceeded_failure_remediation %} {% block min_resource_limit_exceeded_success_reason %} No "no.scale.down.node.minimal.resource.limits.exceeded" errors found between {start_time} and {end_time} {% endblock min_resource_limit_exceeded_success_reason %} {% block no_place_to_move_pods_failure_reason %} The scaleDown event failed because there's no place to move Pods. Example log entry that would help identify involved objects: {log_entry} {% endblock no_place_to_move_pods_failure_reason %} {% block no_place_to_move_pods_failure_remediation %} If you expect that the Pod should be rescheduled, review the scheduling requirements of the Pods on the underutilized node to determine if they can be moved to another node in the cluster. To learn more, see the link {% endblock no_place_to_move_pods_failure_remediation %} {% block no_place_to_move_pods_success_reason %} No "no.scale.down.node.no.place.to.move.pods" errors found between {start_time} and {end_time} {% endblock no_place_to_move_pods_success_reason %} {% block pod_not_backed_by_controller_failure_reason %} The scaleDown event failed because a Pod is not backed by a controller such as ReplicationController, DaemonSet, Job, StatefulSet, or ReplicaSet. Example log entry that would help identify involved objects: {log_entry} {% endblock pod_not_backed_by_controller_failure_reason %} {% block pod_not_backed_by_controller_failure_remediation %} Set the annotation "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" for the Pod or define an acceptable controller {% endblock pod_not_backed_by_controller_failure_remediation %} {% block pod_not_backed_by_controller_success_reason %} No "no.scale.down.node.pod.not.backed.by.controller" errors found between {start_time} and {end_time} {% endblock pod_not_backed_by_controller_success_reason %} {% block not_safe_to_evict_annotation_failure_reason %} The scaleDown event failed because a Pod on the node has the safe-to-evict=false annotation Example log entry that would help identify involved objects: {log_entry} {% endblock not_safe_to_evict_annotation_failure_reason %} {% block not_safe_to_evict_annotation_failure_remediation %} If the Pod can be safely evicted, edit the manifest of the Pod and update the annotation to "cluster-autoscaler.kubernetes.io/safe-to-evict": "true". {% endblock not_safe_to_evict_annotation_failure_remediation %} {% block not_safe_to_evict_annotation_success_reason %} No "no.scale.down.node.pod.not.safe.to.evict.annotation" errors found between {start_time} and {end_time} {% endblock not_safe_to_evict_annotation_success_reason %} {% block pod_kube_system_unmovable_failure_reason %} The scaleDown event failed because the pod is a non-DaemonSet, non-mirrored, Pod without a PodDisruptionBudget in the kube-system namespace. Example log entry that would help identify involved objects: {log_entry} {% endblock pod_kube_system_unmovable_failure_reason %} {% block pod_kube_system_unmovable_failure_remediation %} By default, Pods in the kube-system namespace aren't removed by cluster autoscaler. To resolve this issue, either add a PodDisruptionBudget for the kube-system Pods or use a combination of node pools taints and tolerations to separate kube-system Pods from your application Pods. To learn more, see {% endblock pod_kube_system_unmovable_failure_remediation %} {% block pod_kube_system_unmovable_success_reason %} No "no.scale.down.node.pod.kube.system.unmovable" errors found between {start_time} and {end_time} {% endblock pod_kube_system_unmovable_success_reason %} {% block pod_not_enough_pdb_failure_reason %} The scaleDown event failed the pod doesn't have enough PodDisruptionBudget. Example log entry that would help identify involved objects: {log_entry} {% endblock pod_not_enough_pdb_failure_reason %} {% block pod_not_enough_pdb_failure_remediation %} Review the PodDisruptionBudget for the Pod and consider making it less restrictive. To learn more, see {% endblock pod_not_enough_pdb_failure_remediation %} {% block pod_not_enough_pdb_success_reason %} No "no.scale.down.node.pod.not.enough.pdb" errors found between {start_time} and {end_time} {% endblock pod_not_enough_pdb_success_reason %} {% block pod_controller_not_found_failure_reason %} Pod is blocking the ScaleDown event because its controller (for example, a Deployment or ReplicaSet) can't be found. Example log entry that would help identify involved objects: {log_entry} {% endblock pod_controller_not_found_failure_reason %} {% block pod_controller_not_found_failure_remediation %} To determine what actions were taken that left the Pod running after its controller was removed, review the logs. To resolve this issue, manually delete the Pod. {% endblock pod_controller_not_found_failure_remediation %} {% block pod_controller_not_found_success_reason %} No "no.scale.down.node.pod.controller.not.found" errors found between {start_time} and {end_time} {% endblock pod_controller_not_found_success_reason %} {% block pod_unexpected_error_failure_reason %} Pod is blocking the ScaleDown event because of an unexpected error. Example log entry that would help identify involved objects: {log_entry} {% endblock pod_unexpected_error_failure_reason %} {% block pod_unexpected_error_failure_remediation %} The root cause of this error is unknown. Contact Cloud Customer Care for further investigation. {% endblock pod_unexpected_error_failure_remediation %} {% block pod_unexpected_error_success_reason %} No "no.scale.down.node.pod.unexpected.error" errors found between {start_time} and {end_time} {% endblock pod_unexpected_error_success_reason %} ================================================ FILE: gcpdiag/runbook/gke/templates/imagepull.jinja ================================================ {% block image_not_found_failure_reason %} A container on pod on node failed to pull image because the image was not found in the repository. Example log entry: {log_entry} {% endblock image_not_found_failure_reason %} {% block image_not_found_failure_remediation %} Refer to the troubleshooting documentation: {% endblock image_not_found_failure_remediation %} {% block image_not_found_success_reason %} No "Failed to pull image.*not found" errors were found for cluster between {start_time} and {end_time}. {% endblock image_not_found_success_reason %} {% block image_forbidden_failure_reason %} Image cannot be pulled by a container on Pod, because there are not enough permissions to pull it from the repository. Verify the node SA has the correct permissions. Example log entry that would help identify involved objects: {log_entry} {% endblock image_forbidden_failure_reason %} {% block image_forbidden_failure_remediation %} Ensure the node service account has the necessary permissions to pull the image. Refer to the documentation: {% endblock image_forbidden_failure_remediation %} {% block image_forbidden_success_reason %} No "Failed to pull image.*403 Forbidden" errors were found for cluster between {start_time} and {end_time}. {% endblock image_forbidden_success_reason %} {% block image_dns_issue_failure_reason %} The DNS resolver (metadata server 169.254.169.254:53) on node was unable to resolve the image repository's IP address, preventing image pull. This often indicates issues with networking or DNS configuration. Example log entry: {log_entry} {% endblock image_dns_issue_failure_reason %} {% block image_dns_issue_failure_remediation %} Verify networking and DNS requirements, particularly for Private Google Access. Refer to the documentation: {% endblock image_dns_issue_failure_remediation %} {% block image_dns_issue_success_reason %} No "Failed to pull image.*lookup.*server misbehaving" errors were found for cluster between {start_time} and {end_time}. {% endblock image_dns_issue_success_reason %} {% block image_connection_timeout_restricted_private_failure_reason %} Connections from node to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30) timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to these IP ranges. Example log entry: {log_entry} {% endblock image_connection_timeout_restricted_private_failure_reason %} {% block image_connection_timeout_restricted_private_failure_remediation %} Ensure firewall rules permit egress traffic to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30). Refer to the documentation: {% endblock image_connection_timeout_restricted_private_failure_remediation %} {% block image_connection_timeout_restricted_private_success_reason %} No "Failed to pull image.*dial tcp.*199.36.153.\d:443: i/o timeout" errors were found for cluster between {start_time} and {end_time}. {% endblock image_connection_timeout_restricted_private_success_reason %} {% block image_connection_timeout_failure_reason %} Connections from node to Google APIs timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to Google APIs. The specific blocked IP range might be indicated in the log entry. Example log entry: {log_entry} {% endblock image_connection_timeout_failure_reason %} {% block image_connection_timeout_failure_remediation %} Ensure firewall rules permit egress traffic to Google APIs. Refer to the documentation: {% endblock image_connection_timeout_failure_remediation %} {% block image_connection_timeout_success_reason %} No "Failed to pull image.*dial tcp.*i/o timeout" errors were found for cluster between {start_time} and {end_time}. {% endblock image_connection_timeout_success_reason %} {% block image_not_found_insufficient_scope_failure_reason %} Either user or service account that's trying to pull the image doesn't have the necessary permissions to access it or Image doesn't exist. Example log entry that would help identify involved objects: {log_entry} {% endblock image_not_found_insufficient_scope_failure_reason %} {% block image_not_found_insufficient_scope_failure_remediation %} 1. Verify that the image name is correct. 2. Ensure the node's service account has the necessary permissions. Refer to the documentation: {% endblock image_not_found_insufficient_scope_failure_remediation %} {% block image_not_found_insufficient_scope_success_reason %} No "Failed to pull image.*insufficient_scope" errors found between {start_time} and {end_time} {% endblock image_not_found_insufficient_scope_success_reason %} ================================================ FILE: gcpdiag/runbook/gke/templates/ipexhaustion.jinja ================================================ ######################################################### # messages for the pod IP exhaustion # ######################################################### # messages for pod IP exhaustion {% block pod_ip_exhaustion_failure_reason %} Pod IP exhaustion is detected in the cluster {cluster_name} {% endblock pod_ip_exhaustion_failure_reason %} {% block pod_ip_exhaustion_failure_remediation %} Please follow the below documentation [1] to add ipv4 range to the autopilot cluster to mitgate the issue. [1] {% endblock pod_ip_exhaustion_failure_remediation %} {% block pod_ip_exhaustion_failure_remediation_a1 %} Here are some commands you can run to add an additional IPv4 pod range to address this issue, and you can find more detailed instructions at the documentation [1]. **Allocate IP addresses with designed length and create a pod range** ``` export POD_IP_RANGE_PREFIX_LENGTH=14 export POD_RANGE_NAME="range-`tr -dc a-z0-9 [2] [3] {% endblock pod_ip_exhaustion_failure_remediation_a1 %} ############################################################# # Messages for Node IP exhaustion # ############################################################# # messages for node IP exhaustion {% block node_ip_exhaustion_success_reason %} No Node IP exhaustion detected in the cluster {cluster_name} {% endblock node_ip_exhaustion_success_reason %} {% block node_ip_exhaustion_failure_reason %} Node IP exhaustion is detected in the cluster {cluster_name} for the subnet {node_subnet} {% endblock node_ip_exhaustion_failure_reason %} {% block node_ip_exhaustion_failure_remediation %} Please follow the below documentation [1] to expand the ip range of the node subnet. The subnet that has exhausted its IP space is {node_subnet}. [1] {% endblock node_ip_exhaustion_failure_remediation %} ================================================ FILE: gcpdiag/runbook/gke/templates/ipmasq_standard.jinja ================================================ {% block Nodeproblem_failure_reason %} There are no egress traffic to Destination IP which indicates that GKE NODE is also having issue to connect to destination IP. {% endblock Nodeproblem_failure_reason %} {% block Nodeproblem_failure_remediation %} Enable VPC flow logs by following the documentation and look if traffic id going out to destination: {% endblock Nodeproblem_failure_remediation %} {% block Nodeproblem_success_reason %} When VPC flow logs shows traffic is going out, then GKE IP masquerading may be working as intended. If the end-to-end case is still failing, the problem is likely to be somewhere in the networking path between Dest-IP and node on which impacted Pod is scheduled. {% endblock Nodeproblem_success_reason %} {% block daemon_uncertain_reason %} Check for ip-masq-agent daemonSet is deployed in the Cluster. If yes follow check next step. {% endblock daemon_uncertain_reason %} {% block daemon_uncertain_remediation %} If No, please follow [1] to deploy ip-masq-agent DaemonSet in the kube-system namespace and wait for around 5 minutes for the DaemonSet to be ready. [1] {% endblock daemon_uncertain_remediation %} {% block configmap_uncertain_reason %} When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] {% endblock configmap_uncertain_reason %} {% block configmap_uncertain_remediation %} If you needs to customize the configmap, then follow the steps [1] to deploy ip-masq-agent ConfigMap in the kube-system namespace. [1] {% endblock configmap_uncertain_remediation %} {% block pod_uncertain_reason %} When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] {% endblock pod_uncertain_reason %} {% block pod_uncertain_remediation %} Follow the steps for including the pod IP CIDRs in nonMasqueradeCIDRs [1]. [1] {% endblock pod_uncertain_remediation %} {% block node_uncertain_reason %} When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] {% endblock node_uncertain_reason %} {% block node_uncertain_remediation %} Follow the steps for including the Node IP CIDRs in nonMasqueradeCIDRs [1]. [1] {% endblock node_uncertain_remediation %} {% block destination_uncertain_reason %} When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] {% endblock destination_uncertain_reason %} {% block destination_uncertain_remediation %} Follow the steps for including the Destination IP CIDRs in nonMasqueradeCIDRs [1]. [1] {% endblock destination_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/gke/templates/logs.jinja ================================================ {% block project_logging_check_failure_reason %} The logging health check failed because the Cloud Logging API is not enabled for the project. {% endblock project_logging_check_failure_reason %} {% block project_logging_check_failure_remediation %} Enable the Cloud Logging API for your project through the Google Cloud Console or relevant API calls. See instructions: {% endblock project_logging_check_failure_remediation %} {% block project_logging_check_success_reason %} The Cloud Logging API is enabled for the project. {% endblock project_logging_check_success_reason %} {% block cluster_logging_check_failure_reason %} The logging health check failed because cluster-level logging is not enabled. {% endblock cluster_logging_check_failure_reason %} {% block cluster_logging_check_failure_remediation %} Enable cluster-level logging for your Kubernetes cluster. This can be done through the Google Cloud Console or GKE-specific tools. See instructions: {% endblock cluster_logging_check_failure_remediation %} {% block cluster_logging_check_success_reason %} Cluster-level logging is enabled for the cluster. {% endblock cluster_logging_check_success_reason %} {% block node_pool_access_scope_check_failure_reason %} The logging health check failed because node pools have insufficient access scope for Cloud Logging. {% endblock node_pool_access_scope_check_failure_reason %} {% block node_pool_access_scope_check_failure_remediation %} Adjust node pool access scope to grant necessary logging permissions. See instructions: {% endblock node_pool_access_scope_check_failure_remediation %} {% block node_pool_access_scope_check_success_reason %} Node pools have sufficient access scope for Cloud Logging. {% endblock node_pool_access_scope_check_success_reason %} {% block service_account_permissions_check_failure_reason %} The logging health check failed because the service account lacks necessary permissions to write logs. {% endblock service_account_permissions_check_failure_reason %} {% block service_account_permissions_check_failure_remediation %} Grant the service account the 'roles/logging.logWriter' role or equivalent permissions. See instructions: {% endblock service_account_permissions_check_failure_remediation %} {% block service_account_permissions_check_success_reason %} The service account has necessary permissions to write logs. {% endblock service_account_permissions_check_success_reason %} {% block logging_write_api_quota_exceeded_check_failure_reason %} The logging health check failed because your project has exceeded its Cloud Logging Write API quota. {% endblock logging_write_api_quota_exceeded_check_failure_reason %} {% block logging_write_api_quota_exceeded_check_failure_remediation %} Review logging usage and either reduce log volume or request a quota increase. See instructions: {% endblock logging_write_api_quota_exceeded_check_failure_remediation %} {% block logging_write_api_quota_exceeded_check_success_reason %} The project is within its Cloud Logging Write API quota between {start_time} and {end_time}. {% endblock logging_write_api_quota_exceeded_check_success_reason %} ================================================ FILE: gcpdiag/runbook/gke/templates/monitoring_configuration.jinja ================================================ {% block project_monitoring_configuration_check_failure_reason %} The Monitoring health check failed because the Cloud Monitoring API is not enabled for the project. {% endblock project_monitoring_configuration_check_failure_reason %} {% block project_monitoring_configuration_check_failure_remediation %} Enable the Cloud Monitoring API for the project through the Google Cloud Console or relevant API calls. See instructions: {% endblock project_monitoring_configuration_check_failure_remediation %} {% block project_monitoring_configuration_check_success_reason %} The Cloud Monitoring API is enabled for the project. {% endblock project_monitoring_configuration_check_success_reason %} {% block cluster_monitoring_configuration_check_failure_reason %} The monitoring health check failed because cluster-level monitoring is not enabled. {% endblock cluster_monitoring_configuration_check_failure_reason %} {% block cluster_monitoring_configuration_check_failure_remediation %} Enable cluster-level monitoring for the Kubernetes cluster. This can be done through the Google Cloud Console or GKE-specific tools. See instructions: {% endblock cluster_monitoring_configuration_check_failure_remediation %} {% block cluster_monitoring_configuration_check_success_reason %} Cluster-level monitoring is enabled for the cluster. {% endblock cluster_monitoring_configuration_check_success_reason %} {% block node_pool_access_scope_configuration_check_failure_reason %} The monitoring health check failed because node pools have insufficient access scope for Cloud Monitoring. {% endblock node_pool_access_scope_configuration_check_failure_reason %} {% block node_pool_access_scope_configuration_check_failure_remediation %} Adjust node pool access scope to grant necessary monitoring permissions. See instructions: {% endblock node_pool_access_scope_configuration_check_failure_remediation %} {% block node_pool_access_scope_configuration_check_success_reason %} Node pools have sufficient access scope for Cloud Monitoring. {% endblock node_pool_access_scope_configuration_check_success_reason %} {% block service_account_permissions_configuration_check_failure_reason %} The monitoring health check failed because the service account lacks necessary permissions to write metrics. {% endblock service_account_permissions_configuration_check_failure_reason %} {% block service_account_permissions_configuration_check_failure_remediation %} Grant the service account the 'roles/monitoring.metricWriter' role or equivalent permissions. See instructions: {% endblock service_account_permissions_configuration_check_failure_remediation %} {% block service_account_permissions_configuration_check_success_reason %} The service account has necessary permissions to write metrics. {% endblock service_account_permissions_configuration_check_success_reason %} ================================================ FILE: gcpdiag/runbook/gke/templates/nodeautorepair.jinja ================================================ {% block node_notready_failure_reason %} The node {node} was auto-repaired because it was in a NotReady state for more than approximately 10 minutes. {% endblock node_notready_failure_reason %} {% block node_notready_failure_remediation %} The auto-repair should have fixed the detected NotReady state. For more details check: {% endblock node_notready_failure_remediation %} {% block node_notready_success_reason %} The node {node} was auto-repaired for reasons other than being in a NotReady state. {% endblock node_notready_success_reason %} {% block node_disk_full_failure_reason %} The node {node} was auto-repaired because it had disk pressure for more than 30 minutes. {% endblock node_disk_full_failure_reason %} {% block node_disk_full_failure_remediation %} The auto-repair should have fixed the detected disk pressure. For more details check: {% endblock node_disk_full_failure_remediation %} {% block node_disk_full_success_reason %} The node {node} was auto-repaired for reasons other than disk pressure. {% endblock node_disk_full_success_reason %} {% block unallocatable_gpu_failure_reason %} The node {node} was auto-repaired because it had unallocatable GPU(s) for more than 15 minutes. {% endblock unallocatable_gpu_failure_reason %} {% block unallocatable_gpu_failure_remediation %} The auto-repair should have fixed the detected unallocatable GPU(s). For more details check: {% endblock unallocatable_gpu_failure_remediation %} {% block unallocatable_gpu_success_reason %} The node {node} was auto-repaired for reasons other than unallocatable GPU(s). {% endblock unallocatable_gpu_success_reason %} {% block unallocatable_tpu_failure_reason %} The node {node} was auto-repaired because it had unallocatable TPU(s) for more than 10 minutes. {% endblock unallocatable_tpu_failure_reason %} {% block unallocatable_tpu_failure_remediation %} The auto-repair should have fixed the detected unallocatable TPU(s). For more details check: {% endblock unallocatable_tpu_failure_remediation %} {% block unallocatable_tpu_success_reason %} The node {node} was auto-repaired for reasons other than unallocatable TPU(s). {% endblock unallocatable_tpu_success_reason %} ================================================ FILE: gcpdiag/runbook/gke/templates/nodebootstrapping.jinja ================================================ {% block node_registration_checker_failure_reason %} Node {node} in zone {location} is currently running, but it failed registration with kube-apiserver, below is the Node Registration Checker summary: {% for i in range(16) %} {log_entries[{{ i }}]} {% endfor %} {% endblock node_registration_checker_failure_reason %} {% block node_registration_checker_failure_reason_a1 %} Node {node} in zone {location} failed registration with kube-apiserver, it is in a repair loop. Below is the Node Registration Checker summary: {% for i in range(16) %} {log_entries[{{ i }}]} {% endfor %} {% endblock node_registration_checker_failure_reason_a1 %} {% block node_registration_checker_failure_reason_a2 %} Node {node} in zone {location} is not currently running. While checking logs it was found that it failed registration with kube-apiserver. Below is the Node Registration Checker summary: {% for i in range(16) %} {log_entries[{{ i }}]} {% endfor %} {% endblock node_registration_checker_failure_reason_a2 %} {% block node_registration_checker_failure_reason_a3 %} Could not find summary from Node Registration Checker for node {node} in zone {location}. The node might have been deleted before Node Registration Checker could finish running. {% endblock node_registration_checker_failure_reason_a3 %} {% block node_registration_checker_failure_remediation_a3 %} Try to run the runbook with a node that is currently running. {% endblock node_registration_checker_failure_remediation_a3 %} {% block node_registration_checker_failure_remediation %} To understand why the node failed registration with kube-apiserver, please check the following documentation page: {% endblock node_registration_checker_failure_remediation %} {% block node_registration_checker_success_reason %} Node {node} is currently running and, according to the output from Node Registration Checker, it was registered successfully. Below is the log entry that shows successful registration: {log_entry} {% endblock node_registration_checker_success_reason %} {% block node_registration_checker_success_reason_a1 %} Node {node} is not currently running, but according to the output from Node Registration Checker, it was registered successfully in the past. Below is the log entry that shows successful registration: {log_entry} {% endblock node_registration_checker_success_reason_a1 %} {% block node_registration_checker_uncertain_reason %} The node {node} in the zone {location} is running, but there are no logs generated by Node Registration Checker in the provided time range {start_time} - {end_time}. {% endblock node_registration_checker_uncertain_reason %} {% block node_registration_checker_uncertain_remediation %} This runbook looks for logs generated by Node Registration Checker. Because there are no logs from Node Registration Checker for the node {node}, but it is running, there could be a different issue with the node. Please try the runbook with a different node in the same nodepool. {% endblock node_registration_checker_uncertain_remediation %} {% block node_insert_check_failure_reason %} There were {NR_ERRORS} errors found for instances.insert method for nodepool {NODEPOOL} in the cluster {NAME} in location {location} between {start_time} and {end_time}. Below is the latest log entry found that can help you identify the issue and involved objects: {log_entry} {% endblock node_insert_check_failure_reason %} {% block node_insert_check_failure_remediation %} Please refer to the troubleshooting steps to learn how to resolve the errors: {% endblock node_insert_check_failure_remediation %} {% block node_insert_check_success_reason %} No errors found for instances.insert method for nodepool {NODEPOOL} in the cluster {NAME} in location {location} between {start_time} and {end_time}. {% endblock node_insert_check_success_reason %} ================================================ FILE: gcpdiag/runbook/gke/templates/nodeunavailability.jinja ================================================ {% block node_live_migration_failure_reason %} Live migration check failed for node {node}. {% endblock node_live_migration_failure_reason %} {% block node_live_migration_failure_remediation %} There was a live migration event for the node {node}. For more details about Live migration process during maintenance events, please consult the documentation: {% endblock node_live_migration_failure_remediation %} {% block node_live_migration_success_reason %} The node {node} was unavailable for reasons other than live migration. {% endblock node_live_migration_success_reason %} {% block node_preempted_failure_reason %} The node {node} was preempted. {% endblock node_preempted_failure_reason %} {% block node_preempted_failure_remediation %} Compute Engine might stop (preempt) preemptible instances if it needs to reclaim the compute capacity for allocation to other VMs. For more details about preemptible VMs in GKE please consult the documentation: {% endblock node_preempted_failure_remediation %} {% block node_preempted_success_reason %} The node {node} was unavailable for reasons other than preemption. {% endblock node_preempted_success_reason %} {% block node_removed_by_autoscaler_failure_reason %} The node {node} was removed by the cluster autoscaler. {% endblock node_removed_by_autoscaler_failure_reason %} {% block node_removed_by_autoscaler_failure_remediation %} This is expected behavior. GKE's cluster autoscaler automatically resizes the number of nodes in a given node pool, based on the demands of your workloads. When demand is low, the cluster autoscaler scales back down to a minimum size that you designate. For more details about Cluster Autoscaler ScaleDown events please consult the documentation: {% endblock node_removed_by_autoscaler_failure_remediation %} {% block node_removed_by_autoscaler_success_reason %} The node {node} was unavailable for reasons other than scale down by the cluster autoscaler. {% endblock node_removed_by_autoscaler_success_reason %} {% block node_pool_upgrade_failure_reason %} The node {node} was unavailable due to a node pool upgrade. {% endblock node_pool_upgrade_failure_reason %} {% block node_pool_upgrade_failure_remediation %} This is expected behavior, when the upgrade is performed, nodes are drained and re-created to match the desired version. To list the node upgrade operations, please issue the following gcloud command: ``` gcloud container operations list --filter=operationType:UPGRADE_NODES ``` For more details about node upgrades please consult the documentation: {% endblock node_pool_upgrade_failure_remediation %} {% block node_pool_upgrade_success_reason %} The node {node} was unavailable for reasons other than a node pool upgrade. {% endblock node_pool_upgrade_success_reason %} ================================================ FILE: gcpdiag/runbook/gke/templates/resourcequotas.jinja ================================================ {% block higher_version_quota_exceeded_step_name %} Verify Kubernetes resource quotas are within limits for cluster: project/{project_id}/locations/{cluster_location}/clusters/{cluster_name} between {start_time} and {end_time}. {% endblock higher_version_quota_exceeded_step_name %} {% block higher_version_quota_exceeded_failure_reason %} The cluster projects/{project}/locations/{location}/clusters/{cluster} has exceeded its Kubernetes resource quota between {start_time} and {end_time}. Example log entry that would help identify involved objects: {log_entry} {% endblock higher_version_quota_exceeded_failure_reason %} {% block higher_version_quota_exceeded_failure_remediation %} GKE doesn't enforce the Kubernetes resource quotas for clusters running version 1.28 or later, however GKE doesn't restrict applying custom Kubernetes resource quotas. More details: To list resource quotas in the cluster, use the following command: `kubectl get resourcequota --all-namespaces` Refer to the Kubernetes documentation for more information about resource quotas: {% endblock higher_version_quota_exceeded_failure_remediation %} {% block higher_version_quota_exceeded_success_reason %} The cluster projects/{project}/locations/{location}/clusters/{cluster} was within its Kubernetes resource quota between {start_time} and {end_time}. {% endblock higher_version_quota_exceeded_success_reason %} {% block lower_version_quota_exceeded_step_name %} Verify Kubernetes resource quotas are within limits for cluster: project/{project_id}/locations/{cluster_location}/clusters/{cluster_name} between {start_time} and {end_time} {% endblock lower_version_quota_exceeded_step_name %} {% block lower_version_quota_exceeded_failure_reason %} The cluster projects/{project}/locations/{location}/clusters/{cluster} has exceeded its Kubernetes resource quota between {start_time} and {end_time}. Example log entry that would help identify involved objects: {log_entry} {% endblock lower_version_quota_exceeded_failure_reason %} {% block lower_version_quota_exceeded_failure_remediation %} For clusters with under 100 nodes, GKE applies a Kubernetes resource quota to every namespace. These quotas protect the cluster's control plane from instability caused by potential bugs in applications deployed to the cluster. These quotas cannot be removed because they are enforced by GKE. See details: To list resource quotas in the cluster, use the following command: `kubectl get resourcequota --all-namespaces` Refer to the Kubernetes documentation for more information about resource quotas: For the GKE resource quotas named "gke-resource-quotas", open a GCP support case to request either an increase to a specific quota limit or the disabling of GKE resource quotas for the cluster. {% endblock lower_version_quota_exceeded_failure_remediation %} {% block lower_version_quota_exceeded_success_reason %} The cluster projects/{project}/locations/{location}/clusters/{cluster} was within its Kubernetes resource quota between {start_time} and {end_time}. {% endblock lower_version_quota_exceeded_success_reason %} ================================================ FILE: gcpdiag/runbook/iam/__init__.py ================================================ # Copyright 2021 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. ================================================ FILE: gcpdiag/runbook/iam/constants.py ================================================ # Copyright 2023 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. """IAM constants""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.constants import * # All users, if the VM has a service account SA_USER_ROLE = 'roles/iam.serviceAccountUser' # TCP IAP IAP_ROLE = 'roles/iap.tunnelResourceAccessor' # Basic Roles OWNER_ROLE = 'roles/owner' VIEWER_ROLE = 'roles/viewer' ================================================ FILE: gcpdiag/runbook/iam/flags.py ================================================ # Copyright 2024 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. """Contains flags specific to GCP IAM product""" # pylint: disable=wildcard-import, unused-wildcard-import from gcpdiag.runbook.gcp.flags import * SERVICE_ACCOUNT = 'service_account' PRINCIPAL = 'principal' ================================================ FILE: gcpdiag/runbook/iam/generalized_steps.py ================================================ # Copyright 2024 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. """Contains Generatlized Steps for IAM""" from typing import Optional, Set from gcpdiag import runbook from gcpdiag.queries import iam from gcpdiag.runbook import op from gcpdiag.runbook.iam import flags class VmHasAnActiveServiceAccount(runbook.Step): """Investigates if a VM's service account is active. This step checks if the specified service account is neither disabled nor deleted. It verifies the existence of the service account and its active status within the specified project. Attributes: template (str): Template identifier for reporting the service account status. service_account (str, optional): The email address of the service account to check. If not provided, it is obtained from the operation's context. project_id (str, optional): The ID of the Google Cloud project within which to check the service account. If not provided, it is obtained from the operation's context. """ template = 'service_account::active' service_account: str = '' project_id: str = '' def execute(self): """Verify if the specified service account is active.""" sa = self.service_account or op.get(flags.SERVICE_ACCOUNT) context = op.get_context() project_id = self.project_id or op.get(flags.PROJECT_ID) if sa and project_id: sa_resource = next( filter(lambda r: r.email == sa, iam.get_service_account_list(project_id)), None) # Verify service account exists if not iam.is_service_account_existing(sa, context): op.add_failed(sa_resource, reason=op.prep_msg(op.FAILURE_REASON, sa=sa_resource.full_path), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) # Verify service account exists elif not iam.is_service_account_enabled(sa, context): op.add_failed(resource=sa_resource, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1, sa=sa_resource.full_path)) elif (iam.is_service_account_existing(sa, context) and iam.is_service_account_enabled(sa, context)): op.add_ok(sa_resource, op.prep_msg(op.SUCCESS_REASON, sa=sa_resource.full_path)) else: op.add_uncertain(None, reason=op.UNCERTAIN_REASON, remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.add_uncertain(None, reason=op.UNCERTAIN_REASON, remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) class IamPolicyCheck(runbook.Step): """Verify if specificd principal has permissions or roles permission/role in project. This step supports checking for either all specified permissions/roles are present or at least one for the principal (user or service account). It reports the present and missing permissions/roles accordingly. Also, identifying which permissions or roles are present and which are missing. Attributes: principal (str): The identifier for the principal whose permissions are being checked. permissions (Optional[Set[str]]): A set of IAM permissions to check. Specify this or `roles`. roles (Optional[Set[str]]): A set of IAM roles to check. Specify this or `permissions`. require_all (bool): If True, requires all specified permissions or roles to be present. If False, requires at least one of the specified permissions or roles to be present. template (str): The template used for generating reports for the step. """ template = 'permissions::default' principal: str = '' permissions: Optional[Set[str]] = None roles: Optional[Set[str]] = None require_all: bool = False project = None def execute(self): """Verify that {principal} has required permissions/roles in project/{project}.""" iam_policy = iam.get_project_policy(op.get_context()) principal = self.principal or op.get(flags.PRINCIPAL) present_permissions_or_roles = set() missing_permissions_or_roles = set() items = self.permissions or self.roles or set() for item in items: if self.permissions: has_item = iam_policy.has_permission(principal, item) else: has_item = iam_policy.has_role_permissions(principal, item) if has_item: present_permissions_or_roles.add(item) else: missing_permissions_or_roles.add(item) all_present = not missing_permissions_or_roles any_present = bool(present_permissions_or_roles) outcome = all_present if self.require_all else any_present permissions_or_roles = 'permissions' if self.permissions else 'roles' if outcome: op.add_ok(resource=iam_policy, reason=op.prep_msg(op.SUCCESS_REASON, principal=principal, permissions_or_roles=permissions_or_roles, present_permissions_or_roles=', '.join( sorted(present_permissions_or_roles)))) else: op.add_failed( resource=iam_policy, reason=op.prep_msg(op.FAILURE_REASON, principal=principal, permissions_or_roles=permissions_or_roles, missing_permissions_or_roles=', '.join( sorted(missing_permissions_or_roles))), remediation=op.prep_msg(op.FAILURE_REMEDIATION, principal=principal, permissions_or_roles=permissions_or_roles, present_permissions_or_roles=', '.join( sorted(present_permissions_or_roles)), missing_permissions_or_roles=', '.join( sorted(missing_permissions_or_roles)))) ================================================ FILE: gcpdiag/runbook/iam/templates/permissions.jinja ================================================ {% block default_success_reason %} {principal} has expected {permissions_or_roles}. {present_permissions_or_roles}. {% endblock default_success_reason %} {% block default_failure_reason %} {principal} does not have at least one of the expected {permissions_or_roles}: {missing_permissions_or_roles}. {% endblock default_failure_reason %} {% block default_failure_remediation %} Grant a role containing the missing permissions by following the instructions in [1]. Refer to [2] for a list of Google Cloud predefined roles. Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant. [1] [2] {% endblock default_failure_remediation %} ================================================ FILE: gcpdiag/runbook/iam/templates/service_account.jinja ================================================ {% block active_success_reason %} Service account {sa} is active. {% endblock active_success_reason %} {% block active_failure_reason %} Service account {sa} is deleted. {% endblock active_failure_reason %} {% block active_failure_remediation %} Service account {sa} has been deleted. Deleted service accounts can be undeleted within 30 days of deletion [2]. After 30 days, IAM permanently removes the service account, and it cannot be recovered. Refer to [1] for details on deleting service accounts and [2] for undeleting them. [1] [2] {% endblock active_failure_remediation %} {% block active_failure_remediation_a1 %} Service account `{sa}` is disabled. To re-enable the service account, follow the instructions in [1]. To verify if the service account is deleted, refer to [verifying service account status](https://cloud.google.com/iam/docs/service-accounts-disable-enable). {% endblock active_failure_remediation_a1 %} {% block active_uncertain_reason %} Could not find service account {sa}. {% endblock active_uncertain_reason %} {% block active_uncertain_remediation %} Could not determine the status (e.g., active, disabled, or deleted) for service account `{sa}`. - To manually verify the service account, refer to the [documentation for listing and checking service accounts](https://cloud.google.com/iam/docs/service-accounts-list-edit#listing). - For information on deleted service accounts, see [deleted service account details](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#deleting). - If the service account was deleted, review [how to undelete a service account](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting) to recover it if feasible. {% endblock active_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/interconnect/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/interconnect/bgp_down_flap.py ================================================ # Copyright 2025 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. """This runbook will analyze BGP down or flap issue.""" import json import re from datetime import datetime, timezone import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import runbook from gcpdiag.queries import crm, interconnect, logs, network from gcpdiag.runbook import op from gcpdiag.runbook.interconnect import flags # GRACEFUL_RESTART_TIMER is set to 120 seconds, which is current Cloud Router default. # However, this value can vary based on GCP Cloud Router configuration. GRACEFUL_RESTART_TIMER = 120 def get_time_delta(t1: str, t2: str) -> str: """ Calculates the time difference between two ISO 8601 formatted time strings. Args: t1: The ISO 8601 formatted start time string. t2: The ISO 8601 formatted time end time string. Returns: A string representing the time difference in seconds, rounded to two decimal places. """ t11 = datetime.fromisoformat(str(t1)).replace(tzinfo=timezone.utc) t22 = datetime.fromisoformat(str(t2)).replace(tzinfo=timezone.utc) dt = t22 - t11 dtstr = str(round(dt.total_seconds(), 2)) return dtstr def local_realtime_query(in_start_time, in_end_time, filter_str): """ Run cloud logging query to get cloud logging details. Args: in_sart_time: The ISO 8601 formatted start time string. in_end_time: The ISO 8601 formatted time end time string. filter_str: The filter strings in cloud logging query. Returns: A dqueue collection containing cloud logging query output entries. """ result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID), start_time=in_start_time, end_time=in_end_time, filter_str=filter_str) return result class BgpDownFlap(runbook.DiagnosticTree): """This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region. The following steps are executed: - Check BGP down status: Check if any vlan attachment has BGP down state. - Check Interconnect maintenance: Check if there are interconnect maintenance events are associated with the BGP down vlan attachments. - Check BGP flap status: Check if any BGP flaps happened. - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events are associated with the BGP flaps. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.REGION: { 'type': str, 'help': 'The region where the vlan attachment is located', 'required': True, }, flags.ATTACHMENT_NAME: { 'type': str, 'help': 'The attachment name(s) as comma-separated values or a regular expression. ' 'eg: vlan1,vlan2 or vlan.* or .* for all attachments', 'required': True, }, flags.START_TIME: { 'type': datetime, 'help': 'The start window to investigate BGP flap. Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.END_TIME: { 'type': datetime, 'help': 'The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ' } } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = BgpDownFlapStart() self.add_start(start) bgpdown = CheckBgpDown() iccheck = CheckInterconnectMaintenance() bgpflapcheck = CheckBgpFlap() crcheck = CheckCloudRouterMaintenance() self.add_step(parent=start, child=bgpdown) self.add_step(parent=bgpdown, child=iccheck) self.add_step(parent=start, child=bgpflapcheck) self.add_step(parent=bgpflapcheck, child=crcheck) self.add_end(BgpDownFlapEnd()) class BgpDownFlapStart(runbook.StartStep): """Check if the project and other parameters are valid and vlan attachments are available. This step starts the BGP issue debugging process by verifying the correct input parameters have been provided and checking to ensure that the following resources exist. - The Project - Region - The vlan attachments exist for the given project """ template = 'bgp_down_flap::start' def execute(self): """Check provided parameters.""" project_id = op.get(flags.PROJECT_ID) proj = crm.get_project(project_id) attachments_in = op.get(flags.ATTACHMENT_NAME).rstrip(', \n') # regexp or comma separated names attachments_in_list = attachments_in.split(',') found_attachment_list = [] try: attachments = interconnect.get_vlan_attachments(project_id) except googleapiclient.errors.HttpError: op.add_skipped(proj, reason=op.prep_msg(op.SKIPPED_REASON, project_id=project_id)) return else: for vlan in attachments: if vlan.region == op.get(flags.REGION): if vlan.name in attachments_in_list or re.search( attachments_in, vlan.name): found_attachment_list.append(vlan.name) if len(found_attachment_list) >= len(attachments_in_list): op.put(flags.ATTACHMENT_LIST, ','.join(found_attachment_list)) op.add_ok(proj, reason=op.prep_msg(op.SUCCESS_REASON, total_num=len(found_attachment_list), region=op.get(flags.REGION), project_id=project_id)) return err_names = '' for item in attachments_in_list: if item not in found_attachment_list: err_names += item + ',' err_names = err_names.rstrip(',') op.add_skipped(proj, reason=op.prep_msg(op.SKIPPED_REASON_ALT1, err_names=err_names, region=op.get(flags.REGION), project_id=project_id)) class CheckBgpDown(runbook.Step): """Check if vlan attachments have BGP down state. Check if any vlan attachments have in BGP down state. """ template = 'bgp_down_flap::bgpdown' def execute(self): """ Check if there is vlan attachment has BGP down. """ project_id = op.get(flags.PROJECT_ID) project = crm.get_project(op.get(flags.PROJECT_ID)) attachments = interconnect.get_vlan_attachments(project.id) vlan_router_map = {} in_region = op.get(flags.REGION) found_attachment_list = op.get(flags.ATTACHMENT_LIST).split(',') # check each vlan attachment bgp state processed_routers = {} bgpdown_list = {} vlan_router_map = {} error_interconnects = '' for vlan in attachments: if vlan.region != in_region or vlan.name not in found_attachment_list: continue router_name = vlan.router bgp_status = None # update bgp information in processed_routers if router_name in processed_routers: bgp_status = processed_routers[router_name] else: vlan_router_status = network.nat_router_status(project.id, router_name=vlan.router, region=vlan.region) bgp_status = vlan_router_status.bgp_peer_status processed_routers[router_name] = bgp_status # fetch bgp status for matching vlan attachment for item in bgp_status: if item['ipAddress'] == vlan.ipv4address: if item['state'] != 'Established': bgpdown_list.setdefault(vlan.interconnect, []).append(vlan.name) vlan_router_map[vlan.name] = vlan.router error_interconnects += vlan.interconnect + ',' if len(error_interconnects) == 0: op.put(flags.ERROR_LIST, '') op.add_ok( project, op.prep_msg(op.SUCCESS_REASON, region=op.get(flags.REGION), project_id=project_id)) else: # display interconnect name with BGP down status reason = '\n\t Attachments with BGP down status:\n' for ic, vlans in bgpdown_list.items(): for item in vlans: reason += op.prep_msg(op.FAILURE_REASON, interconnect_name=ic, attachment_name=item, router_name=vlan_router_map[item]) op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON_ALT1, reason=reason), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) if len(error_interconnects) > 0: error_interconnects = error_interconnects[:-1] op.put(flags.ERROR_LIST, error_interconnects) class CheckInterconnectMaintenance(runbook.Step): """Check if interconnects with BGP down are in maintenance state. Check if any interconnects with BGP down are in maintenance state. """ template = 'bgp_down_flap::interconnect_maintenance' def execute(self): """Check if any BGP down interconnects are in maintenance state.""" project = crm.get_project(op.get(flags.PROJECT_ID)) err_list = op.get(flags.ERROR_LIST) if len(err_list) == 0: op.add_skipped(project, reason=op.prep_msg(op.SKIPPED_REASON, region=op.get(flags.REGION), project_id=project.id)) return interconnects = interconnect.get_links(project.id) if not interconnects: op.add_skipped(project, reason='no Inteconnect links found') return checklist = [] for c in interconnects: icname = c.name if c.under_maintenance: checklist.append(icname) bgpdown_no_ic_maintenance_list = '' if len(checklist) > 0: tmperrorlist = err_list.split(',') for item in tmperrorlist: if item in checklist: continue else: bgpdown_no_ic_maintenance_list += item + ',' else: bgpdown_no_ic_maintenance_list = err_list bgpdown_no_ic_maintenance_list = bgpdown_no_ic_maintenance_list.rstrip(',') if len(bgpdown_no_ic_maintenance_list) == 0: op.add_ok(project, op.prep_msg(op.SUCCESS_REASON)) else: reason = '\n\t BGP down details:\n' for item in bgpdown_no_ic_maintenance_list.split(','): reason += op.prep_msg(op.FAILURE_REASON, interconnect_name=item) # interconnect BGP down can be caused by various reasons # The first step is to check if there is planned maintenance event remediation_details = """ \n\t Suggested Remediations: * Check on-prem PF interface status towards on-prem router * Check RX/TX light level * Check cloud console interconnect details or cloud logging * Check other potential issues, or Contact Google Cloud Support.""" op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON_ALT1, reason=reason), remediation=op.prep_msg(op.FAILURE_REMEDIATION, remediation=remediation_details)) class CheckCloudRouterMaintenance(runbook.Step): """Check if any Cloud Router had maintenance event. Check if any Cloud Router had maintenance event. Report BGP flaps without Cloud Router maintenance event. """ template = 'bgp_down_flap::cloud_router_maintenance' def execute(self): """Check if the Cloud Router had maintenance event.""" project = crm.get_project(op.get(flags.PROJECT_ID)) bgp_flaps = json.loads(op.get(flags.BGP_FLAP_LIST)) uncertain = False checklist = [] # List all router_id with uncertain BGP flaps for key, value in bgp_flaps.items(): if value['uncertain_flag'] == 'True': uncertain = True router_id = key.split('--')[0] if router_id not in checklist: checklist.append(router_id) # Skip if no uncertain BGP flas need to be checked if uncertain is False: op.add_skipped(project, reason=op.prep_msg(op.SKIPPED_REASON, region=op.get(flags.REGION), project_id=project.id)) return # Fetch cloud logging router maintenance events # maintenance_list : # key : router_id # value : list of maintenance event timestamps maintenance_list = {} for router_id in checklist: filter_str = [ 'resource.type="gce_router"', '"Maintenance of router task"' ] region = op.get(flags.REGION) if region: filter_str.append(f'resource.labels.region="{region}"') # Minor Concern: The filter string for Cloud Logging, created by joining IP # addresses with "OR", could potentially become very long if there are many # attachments. While unlikely to hit the absolute maximum, it's worth # keeping in mind. filter_str.append(f'resource.labels.router_id="{router_id}"') filter_str = '\n'.join(filter_str) start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) # Ensure times are timezone-aware UTC if start_time.tzinfo is None: start_time = start_time.replace(tzinfo=datetime.timezone.utc) if end_time.tzinfo is None: end_time = end_time.replace(tzinfo=datetime.timezone.utc) serial_log_entries = None serial_log_entries = local_realtime_query(start_time, end_time, filter_str) times = [] for item in serial_log_entries: payload = get_path(item, ('textPayload'), default=None) log_region = get_path(item, ('resource', 'labels', 'region'), default=None) if log_region != region: continue if 'Maintenance of router task' not in payload: continue timestamp = get_path(item, ('timestamp'), default=None) times.append(timestamp) maintenance_list[router_id] = times # Find BGP flaps that do not have allgined router maintenance events # err_list # key : router_id--ip # value: list of BGP flap events without maintenance events err_list = {} for key, value in bgp_flaps.items(): # check short duration uncertain BGP flaps if value['uncertain_flag'] != 'True': continue router_id = value['router_id'] if router_id not in maintenance_list or len( maintenance_list[router_id]) == 0: err_list[key] = value['events'] continue events = value['events'] for oneflap in events: tmpstr = oneflap[0] t1 = tmpstr.split(',')[1] t2 = tmpstr.split(',')[3] okevent = False for cr_time in maintenance_list[router_id]: delta1 = get_time_delta(t1, cr_time) delta2 = get_time_delta(cr_time, t2) # check if there is router maintenance event between the BGP flap start and end time if delta1[0] != '-' and delta2[0] != '-': okevent = True break if not okevent: err_list.setdefault(key, []).append(oneflap) # error_list contains router_id with BGP flaps but no maintenance event if len(err_list) > 0: reason = '\n' for key, value in err_list.items(): flap_details = '\n\t\tBGP flap details:' for item in value: flap_details = flap_details + '\n\t\t' + ','.join(item) flap_details += '\n' reason += op.prep_msg(op.FAILURE_REASON, router_id=bgp_flaps[key]['router_id'], local_ip=bgp_flaps[key]['local_ip'], remote_ip=bgp_flaps[key]['remote_ip'], router_name=bgp_flaps[key]['router_name'], attachment=bgp_flaps[key]['attachment_name'], project_id=bgp_flaps[key]['project_id'], flap_details=flap_details) example_query = """ \nExample query: resource.type="gce_router" "Maintenance of router task" OR ("came up" OR "went down") resource.labels.region="" r.esource.labels.router_id="" """ op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON_ALT1, timer=GRACEFUL_RESTART_TIMER, reason=reason), remediation=op.prep_msg(op.FAILURE_REMEDIATION, timer=GRACEFUL_RESTART_TIMER, example_query=example_query)) else: op.add_ok(project, op.prep_msg(op.SUCCESS_REASON, timer=GRACEFUL_RESTART_TIMER)) class CheckBgpFlap(runbook.Step): """Check if any BGP flap events, report error flaps with duration over 60 seconds. Check if any BGP flap events, report error flaps with duration over 60 seconds. """ template = 'bgp_down_flap::bgpflap' def execute(self): """Check if there are BGP flap events.""" project = crm.get_project(op.get(flags.PROJECT_ID)) region = op.get(flags.REGION) attachments_in = op.get(flags.ATTACHMENT_NAME).rstrip( ', \n') # regexp or comma separated names attachments_in_list = attachments_in.split(',') found_attachment_list = [] try: attachments = interconnect.get_vlan_attachments(project.id) except googleapiclient.errors.HttpError: op.add_skipped(project, reason=op.prep_msg(op.SKIPPED_REASON, project_id=project.id)) return for vlan in attachments: if vlan.region == op.get(flags.REGION): if vlan.name in attachments_in_list or re.search( attachments_in, vlan.name): found_attachment_list.append(vlan.name) peerip_router_map = {} vlan_ipv4_list = [] attachments = interconnect.get_vlan_attachments(project.id) for vlan in attachments: if vlan.region != region or vlan.name not in found_attachment_list: continue vlan_ipv4_list.append(vlan.remoteip) # peerip_router_map # key : vlan.remoteIp # value: router_name, localIp, reomoteIp, interconnect, region, project_id key = vlan.remoteip peerip_router_map.setdefault(key, []).append(vlan.router) peerip_router_map[key].append(vlan.ipv4address) peerip_router_map[key].append(vlan.remoteip) peerip_router_map[key].append(vlan.interconnect) peerip_router_map[key].append(region) peerip_router_map[key].append(project.id) peerip_router_map[key].append(vlan.name) filter_str = [ 'resource.type="gce_router"', '"BGP "', '("came up" OR "went down")' ] # cloud logging query takes time # run query once to get logging for all attachments ipstr = '' for item in vlan_ipv4_list: ipstr += '"' + item + '"' + ' OR ' ipstr = ipstr[:-3] # Minor Concern: The filter string for Cloud Logging, created by joining IP # addresses with "OR", could potentially become very long if there are many # attachments. While unlikely to hit the absolute maximum, it's worth # keeping in mind. filter_str.append(ipstr) if region: filter_str.append(f'resource.labels.region="{region}"') filter_str = '\n'.join(filter_str) last_down_time = {} router_logs = {} err_router_logs = {} start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) # Ensure times are timezone-aware UTC if start_time.tzinfo is None: start_time = start_time.replace(tzinfo=datetime.timezone.utc) if end_time.tzinfo is None: end_time = end_time.replace(tzinfo=datetime.timezone.utc) serial_log_entries = None serial_log_entries = local_realtime_query(start_time, end_time, filter_str) # ensure the serial_log_entries have oldest timestamp first if len(serial_log_entries) > 1: t1 = get_path(serial_log_entries[0], ('timestamp'), default=None) t2 = get_path(serial_log_entries[-1], ('timestamp'), default=None) delta = get_time_delta(t1, t2) if delta[0] == '-': reversed_list = [] for item in serial_log_entries: reversed_list.insert(0, item) serial_log_entries = reversed_list # get bgp flaps events from logging query output # router_logs : all bgp flaps # err_router_logs : bgp flaps longer than GRACEFUL_RESTART_TIMER for item in serial_log_entries: errflag = False payload = get_path(item, ('textPayload'), default=None) timestamp = get_path(item, ('timestamp'), default=None) router_id = get_path(item, ('resource', 'labels', 'router_id'), default=None) log_region = get_path(item, ('resource', 'labels', 'region'), default=None) if log_region != region: continue if not 'BGP Event: BGP peering with' in payload: continue tmp = payload.split('peering with ')[1] ip = tmp.split()[0].strip() # unique identify BGP session by using router_id and ip router_ip_key = router_id + '--' + ip logentry = [] if 'came up' in payload: if router_ip_key in last_down_time: downtime = last_down_time[router_ip_key][0] last_down_time[router_ip_key] = [] delta = get_time_delta(downtime, timestamp) down_up_times = 'went down,' + downtime + ',came up,' + timestamp logentry.append(down_up_times) logentry.append(delta) if int(delta.split('.', maxsplit=1)[0]) > GRACEFUL_RESTART_TIMER: # BGP flaps longer than GRACEFUL_RESTART_TIMER will cause data plane issue. errflag = True logentry.append('Error') else: # If there is a normal maintenance event align with a flap, we can ignore the BGP flap. logentry.append('Uncertain') router_logs.setdefault(router_ip_key, []).append(logentry) else: last_down_time.setdefault(router_ip_key, []).append(timestamp) if errflag: err_router_logs.setdefault(router_ip_key, []).append(logentry) # cross reference BGP data # get vlan information from API call # get BGP and router information from logging bgpdata = {} for key, value in router_logs.items(): remote_ip = key.split('--')[1] router_id = key.split('--')[0] onedata = {} onedata['router_id'] = router_id onedata['remote_ip'] = remote_ip onedata['events'] = value onedata['uncertain_flag'] = 'False' onedata['error_flag'] = 'False' for items in value: if 'Uncertain' in items: onedata['uncertain_flag'] = 'True' elif 'Error' in items: onedata['error_flag'] = 'True' onedata['router_name'] = peerip_router_map[remote_ip][0] onedata['local_ip'] = peerip_router_map[remote_ip][1] onedata['interconnect_name'] = peerip_router_map[remote_ip][3] onedata['region'] = peerip_router_map[remote_ip][4] onedata['project_id'] = peerip_router_map[remote_ip][5] onedata['attachment_name'] = peerip_router_map[remote_ip][6] bgpdata[key] = onedata op.put(flags.BGP_FLAP_LIST, json.dumps(bgpdata)) if len(router_logs) > 0: reason = '\n' if len(err_router_logs) == 0: # process BGP flaps with time duration less than graceful restart timer. if len(bgpdata) != 0: for item in bgpdata.values(): if item['uncertain_flag'] != 'True': continue flap_details = '\n\t\tBGP flap details:' for oneflap in item['events']: flap_details = flap_details + '\n\t\t' + ','.join(oneflap) flap_details += '\n' reason += op.prep_msg(op.UNCERTAIN_REASON, router_id=item['router_id'], local_ip=item['local_ip'], remote_ip=item['remote_ip'], router_name=item['router_name'], attachment=item['attachment_name'], project_id=item['project_id'], flap_details=flap_details) op.add_uncertain(project, reason=op.prep_msg(op.UNCERTAIN_REASON_ALT1, project_id=project.id, timer=GRACEFUL_RESTART_TIMER, reason=reason), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: # process BGP flaps with time duration longer than graceful restart timer. if len(bgpdata) != 0: for item in bgpdata.values(): if item['error_flag'] != 'True': continue flap_details = '\n\t\tBGP flap details:' for oneflap in item['events']: flap_details = flap_details + '\n\t\t' + ','.join(oneflap) flap_details += '\n' reason += op.prep_msg(op.FAILURE_REASON, router_id=item['router_id'], local_ip=item['local_ip'], remote_ip=item['remote_ip'], router_name=item['router_name'], attachment=item['attachment_name'], project_id=item['project_id'], flap_details=flap_details) example_query = """ \n\nExample query: resource.type="gce_router" "Maintenance of router task" OR ("came up" OR "went down") resource.labels.region="" r.esource.labels.router_id="" """ op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON_ALT1, project_id=project.id, timer=GRACEFUL_RESTART_TIMER, reason=reason), remediation=op.prep_msg(op.FAILURE_REMEDIATION, timer=GRACEFUL_RESTART_TIMER, example_query=example_query)) return else: op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON, region=op.get(flags.REGION), project_id=project.id)) class BgpDownFlapEnd(runbook.EndStep): """Concludes the diagnostics process. The following are considered error and need further debugging: 1> BGP down events found without interconnect maintenance 2> BGP flaps with duration over graceful restart timer 3> BGP flaps with duration less than graceful restart timer but no Cloud Router maintenance event Please contact GCP support for further debugging. """ def execute(self): """Finalizing connectivity diagnostics.""" op.info('If any further debugging is needed, ' 'consider please contact GCP support for further troubleshooting') ================================================ FILE: gcpdiag/runbook/interconnect/bgp_down_flap_test.py ================================================ # Copyright 2025 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. """Test class for interconnect/BgpDownFlap.""" import json import unittest from datetime import datetime, timezone from unittest import mock import googleapiclient.errors from gcpdiag import config from gcpdiag.runbook import interconnect, snapshot_test_base from gcpdiag.runbook.interconnect import bgp_down_flap, flags class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = interconnect runbook_name = 'interconnect/bgp-down-flap' project_id = 'gcpdiag-interconnect1-aaaa' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-interconnect1-aaaa', 'region': 'us-central1', 'custom_flag': 'interconnect', 'attachment_name': 'dummy-attachment11' }, { 'project_id': 'gcpdiag-interconnect1-aaaa', 'region': 'us-east4', 'custom_flag': 'interconnect', 'attachment_name': 'dummy-attachment1,dummy-attachment2,dummy-attachment3,dummy-attachment4' }, { 'project_id': 'gcpdiag-interconnect1-aaaa', 'region': 'us-west2', 'custom_flag': 'interconnect', 'attachment_name': 'dummy-attachment5,dummy-attachment6' }] class TestBgpDownFlap(unittest.TestCase): """Unit tests for bgp_down_flap logic and steps.""" def setUp(self): super().setUp() self.project_id = 'test-project' self.region = 'us-central1' self.project = mock.MagicMock() self.project.id = self.project_id # Global mocks for queries to prevent 403 errors and real API calls self.mock_get_project = mock.patch('gcpdiag.queries.crm.get_project', return_value=self.project).start() self.mock_get_vlan = mock.patch( 'gcpdiag.queries.interconnect.get_vlan_attachments').start() self.mock_get_links = mock.patch( 'gcpdiag.queries.interconnect.get_links').start() self.mock_logs_query = mock.patch( 'gcpdiag.queries.logs.realtime_query').start() self.mock_router_status = mock.patch( 'gcpdiag.queries.network.nat_router_status').start() # Mock the op context for runbook flags and reporting self.mock_op_get = mock.patch('gcpdiag.runbook.op.get').start() self.mock_op_put = mock.patch('gcpdiag.runbook.op.put').start() self.mock_op_add_ok = mock.patch('gcpdiag.runbook.op.add_ok').start() self.mock_op_add_failed = mock.patch( 'gcpdiag.runbook.op.add_failed').start() self.mock_op_add_skipped = mock.patch( 'gcpdiag.runbook.op.add_skipped').start() self.mock_op_add_uncertain = mock.patch( 'gcpdiag.runbook.op.add_uncertain').start() self.mock_op_prep_msg = mock.patch('gcpdiag.runbook.op.prep_msg').start() self.mock_op_info = mock.patch('gcpdiag.runbook.op.info').start() self.op_flags = { flags.PROJECT_ID: self.project_id, flags.REGION: self.region, flags.ATTACHMENT_NAME: 'vlan1', flags.ATTACHMENT_LIST: 'vlan1', flags.ERROR_LIST: '', flags.START_TIME: datetime(2025, 1, 1, tzinfo=timezone.utc), flags.END_TIME: datetime(2025, 1, 2, tzinfo=timezone.utc), flags.BGP_FLAP_LIST: '{}' } self.mock_op_get.side_effect = self.op_flags.get self.mock_operator = mock.MagicMock(parameters={}) def tearDown(self): super().tearDown() mock.patch.stopall() def _create_vlan_mock(self, name='vlan1', ipv4='2.2.2.2'): """Helper to create a vlan mock with consistent attributes.""" v = mock.MagicMock() v.name = name v.region = self.region v.ipv4address = ipv4 # Logic compares item['ipAddress'] to this field v.remoteip = ipv4 v.interconnect = 'ic1' v.router = 'r1' return v def test_get_time_delta(self): result = bgp_down_flap.get_time_delta('2025-01-01T10:00:00Z', '2025-01-01T10:00:05.5Z') self.assertEqual(result, '5.5') def test_local_realtime_query(self): bgp_down_flap.local_realtime_query('t1', 't2', 'filter') self.mock_logs_query.assert_called() def test_start_step_handles_api_failure(self): self.mock_get_vlan.side_effect = googleapiclient.errors.HttpError( mock.MagicMock(status=403), b'Forbidden') step = bgp_down_flap.BgpDownFlapStart() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_skipped.assert_called() def test_check_bgp_down_detects_failure(self): test_ip = '1.1.1.1' project_id = 'test-project' attachment_name = 'attachment1' region = 'us-central1' self.mock_op_get.side_effect = lambda key, default=None: { flags.PROJECT_ID: project_id, flags.REGION: region, flags.ATTACHMENT_LIST: attachment_name }.get(key, default) project = mock.MagicMock() project.id = project_id self.mock_get_project.return_value = project vlan = mock.MagicMock() vlan.name = attachment_name vlan.region = region vlan.ipv4address = test_ip vlan.router = 'router1' vlan.interconnect = 'interconnect1' self.mock_get_vlan.return_value = [vlan] mock_status = mock.MagicMock() mock_status.bgp_peer_status = [{'ipAddress': test_ip, 'state': 'Active'}] self.mock_router_status.return_value = mock_status step = bgp_down_flap.CheckBgpDown() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_failed.assert_called() def test_check_bgp_down_ok(self): test_ip = '2.2.2.2' vlan = self._create_vlan_mock(ipv4=test_ip) self.mock_get_vlan.return_value = [vlan] router_status = mock.MagicMock() router_status.bgp_peer_status = [{ 'ipAddress': test_ip, 'state': 'Established' }] self.mock_router_status.return_value = router_status step = bgp_down_flap.CheckBgpDown() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_ok.assert_called() def test_start_step_ok(self): vlan = self._create_vlan_mock(name='vlan1') self.mock_get_vlan.return_value = [vlan] step = bgp_down_flap.BgpDownFlapStart() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_ok.assert_called() def test_start_step_attachment_not_found(self): self.op_flags[flags.ATTACHMENT_NAME] = 'non-existent-vlan' vlan = self._create_vlan_mock(name='vlan1') self.mock_get_vlan.return_value = [vlan] step = bgp_down_flap.BgpDownFlapStart() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_skipped.assert_called() def test_check_ic_maintenance_skipped_no_errors(self): self.op_flags[flags.ERROR_LIST] = '' step = bgp_down_flap.CheckInterconnectMaintenance() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_skipped.assert_called() def test_check_ic_maintenance_skipped_no_links(self): self.op_flags[flags.ERROR_LIST] = 'ic1' self.mock_get_links.return_value = [] step = bgp_down_flap.CheckInterconnectMaintenance() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_skipped.assert_called() def test_check_ic_maintenance_ok(self): self.op_flags[flags.ERROR_LIST] = 'ic1' ic_link = mock.MagicMock() ic_link.name = 'ic1' ic_link.under_maintenance = True self.mock_get_links.return_value = [ic_link] step = bgp_down_flap.CheckInterconnectMaintenance() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_ok.assert_called() def test_check_ic_maintenance_unexplained_down(self): self.op_flags[flags.ERROR_LIST] = 'ic1' ic_link = mock.MagicMock() ic_link.name = 'ic1' ic_link.under_maintenance = False self.mock_get_links.return_value = [ic_link] step = bgp_down_flap.CheckInterconnectMaintenance() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_failed.assert_called() def test_check_cr_maintenance_detects_unexplained_flap(self): flap_data = { 'r1_id--2.2.2.2': { 'uncertain_flag': 'True', 'router_id': 'r1_id', 'local_ip': '1.1.1.1', 'remote_ip': '2.2.2.2', 'router_name': 'r1', 'attachment_name': 'vlan1', 'project_id': self.project_id, 'events': [[ 'went down,2025-01-01T12:00:00Z,came up,2025-01-01T12:01:00Z' ]], } } self.op_flags[flags.BGP_FLAP_LIST] = json.dumps(flap_data) self.mock_logs_query.return_value = [] step = bgp_down_flap.CheckCloudRouterMaintenance() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_failed.assert_called() def test_check_cr_maintenance_skipped_no_uncertain_flaps(self): self.op_flags[flags.BGP_FLAP_LIST] = '{}' step = bgp_down_flap.CheckCloudRouterMaintenance() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_skipped.assert_called() def test_check_cr_maintenance_ok(self): flap_data = { 'r1_id--2.2.2.2': { 'uncertain_flag': 'True', 'router_id': 'r1_id', 'local_ip': '1.1.1.1', 'remote_ip': '2.2.2.2', 'router_name': 'r1', 'attachment_name': 'vlan1', 'project_id': self.project_id, 'events': [[ 'went down,2025-01-01T12:00:00Z,came up,2025-01-01T12:01:00Z', '60.0', 'Uncertain' ]], } } self.op_flags[flags.BGP_FLAP_LIST] = json.dumps(flap_data) self.mock_logs_query.return_value = [{ 'textPayload': 'Maintenance of router task', 'timestamp': '2025-01-01T12:00:30Z', 'resource': { 'labels': { 'router_id': 'r1_id', 'region': self.region } }, }] step = bgp_down_flap.CheckCloudRouterMaintenance() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_ok.assert_called() def test_check_bgp_flap_logic(self): vlan = self._create_vlan_mock(ipv4='1.1.1.1') vlan.remoteip = '2.2.2.2' self.mock_get_vlan.return_value = [vlan] self.mock_logs_query.return_value = [ { 'textPayload': 'BGP Event: BGP peering with 2.2.2.2 went down', 'timestamp': '2025-01-01T12:00:00Z', 'resource': { 'labels': { 'router_id': 'r1_id', 'region': self.region } }, }, { 'textPayload': 'BGP Event: BGP peering with 2.2.2.2 came up', 'timestamp': '2025-01-01T12:05:00Z', 'resource': { 'labels': { 'router_id': 'r1_id', 'region': self.region } }, }, ] step = bgp_down_flap.CheckBgpFlap() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_failed.assert_called() def test_check_bgp_flap_skipped_on_api_error(self): self.mock_get_vlan.side_effect = googleapiclient.errors.HttpError( mock.MagicMock(status=403), b'Forbidden') step = bgp_down_flap.CheckBgpFlap() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_skipped.assert_called_once() def test_check_bgp_flap_ok_no_flaps(self): vlan = self._create_vlan_mock(ipv4='1.1.1.1') vlan.remoteip = '2.2.2.2' self.mock_get_vlan.return_value = [vlan] self.mock_logs_query.return_value = [] step = bgp_down_flap.CheckBgpFlap() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_ok.assert_called() def test_check_bgp_flap_uncertain(self): vlan = self._create_vlan_mock(ipv4='1.1.1.1') vlan.remoteip = '2.2.2.2' self.mock_get_vlan.return_value = [vlan] self.mock_logs_query.return_value = [ { 'textPayload': 'BGP Event: BGP peering with 2.2.2.2 went down', 'timestamp': '2025-01-01T12:00:00Z', 'resource': { 'labels': { 'router_id': 'r1_id', 'region': self.region } }, }, { 'textPayload': 'BGP Event: BGP peering with 2.2.2.2 came up', 'timestamp': '2025-01-01T12:01:00Z', 'resource': { 'labels': { 'router_id': 'r1_id', 'region': self.region } }, }, ] step = bgp_down_flap.CheckBgpFlap() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_uncertain.assert_called() def test_check_bgp_flap_log_reversal(self): vlan = self._create_vlan_mock(ipv4='1.1.1.1') vlan.remoteip = '2.2.2.2' self.mock_get_vlan.return_value = [vlan] self.mock_logs_query.return_value = [ { 'textPayload': 'BGP Event: BGP peering with 2.2.2.2 came up', 'timestamp': '2025-01-01T12:01:00Z', 'resource': { 'labels': { 'router_id': 'r1_id', 'region': self.region } }, }, { 'textPayload': 'BGP Event: BGP peering with 2.2.2.2 went down', 'timestamp': '2025-01-01T12:00:00Z', 'resource': { 'labels': { 'router_id': 'r1_id', 'region': self.region } }, }, ] step = bgp_down_flap.CheckBgpFlap() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_add_uncertain.assert_called() def test_end_step(self): step = bgp_down_flap.BgpDownFlapEnd() with bgp_down_flap.op.operator_context(self.mock_operator): step.execute() self.mock_op_info.assert_called() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/interconnect/constants.py ================================================ # Copyright 2025 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. ================================================ FILE: gcpdiag/runbook/interconnect/flags.py ================================================ # Copyright 2025 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. """Contains interconnect specific flags""" # pylint: disable=wildcard-import, unused-wildcard-import from gcpdiag.runbook.iam.flags import * from gcpdiag.runbook.interconnect.flags import * REGION = 'region' ATTACHMENT_LIST = '' ERROR_LIST = '' BGP_FLAP_LIST = '' ATTACHMENT_NAME = 'attachment_name' ================================================ FILE: gcpdiag/runbook/interconnect/generalized_steps.py ================================================ # Copyright 2025 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. ================================================ FILE: gcpdiag/runbook/interconnect/generalized_steps_test.py ================================================ # Copyright 2025 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. ================================================ FILE: gcpdiag/runbook/interconnect/snapshots/bgp_down_flap.txt ================================================ attachment_name=dummy-attachment11,custom_flag=interconnect,project_id=gcpdiag- interconnect1-aaaa,region=us-central1 interconnect/bgp-down-flap: This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region. The following steps are executed: - Check BGP down status: Check if any vlan attachment has BGP down state. - Check Interconnect maintenance: Check if there are interconnect maintenance events are associated with the BGP down vlan attachments. - Check BGP flap status: Check if any BGP flaps happened. - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events are associated with the BGP flaps. [START]: Check provided parameters. - gcpdiag-interconnect1-aaaa [OK] [REASON] Total `1` vlan attachments found in `us-central1` in project `gcpdiag-interconnect1-aaaa`. [AUTOMATED STEP]: Check if there is vlan attachment has BGP down. - gcpdiag-interconnect1-aaaa [OK] [REASON] No VLAN attachments have BGP down in region `us-central1` in project `gcpdiag-interconnect1-aaaa`. [AUTOMATED STEP]: Check if any BGP down interconnects are in maintenance state. - gcpdiag-interconnect1-aaaa [SKIP] [REASON] No interconnects have BGP down status, skip interconnect mainteance check in in region `us-central1` in project `gcpdiag-interconnect1-aaaa`. [AUTOMATED STEP]: Check if there are BGP flap events. - gcpdiag-interconnect1-aaaa [OK] [REASON] No BGP flaps are found in region `us-central1` in project `gcpdiag-interconnect1-aaaa`. [AUTOMATED STEP]: Check if the Cloud Router had maintenance event. - gcpdiag-interconnect1-aaaa [SKIP] [REASON] No BGP flaps, skip cloud router mainteance check in in region `us-central1` in project `gcpdiag-interconnect1-aaaa`. [END]: Finalizing connectivity diagnostics. [INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting attachment_name=dummy-attachment1,dummy-attachment2,dummy-attachment3,dummy- attachment4,custom_flag=interconnect,project_id=gcpdiag-interconnect1-aaaa,region=us-east4 interconnect/bgp-down-flap: This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region. The following steps are executed: - Check BGP down status: Check if any vlan attachment has BGP down state. - Check Interconnect maintenance: Check if there are interconnect maintenance events are associated with the BGP down vlan attachments. - Check BGP flap status: Check if any BGP flaps happened. - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events are associated with the BGP flaps. [START]: Check provided parameters. - gcpdiag-interconnect1-aaaa [OK] [REASON] Total `4` vlan attachments found in `us-east4` in project `gcpdiag-interconnect1-aaaa`. [AUTOMATED STEP]: Check if there is vlan attachment has BGP down. - gcpdiag-interconnect1-aaaa [FAIL] [REASON] Some interconnects have BGP down status. See details Attachments with BGP down status: Attachment:dummy-attachment4, Interconnect:dummy-interconnect2, Cloud_Router_Name:dummy-router2 [REMEDIATION] For any interconnects in BGP down state, continue runbook check if the interconnect is in maintenance state. Check the public documentation for guidance. [AUTOMATED STEP]: Check if any BGP down interconnects are in maintenance state. - gcpdiag-interconnect1-aaaa [FAIL] [REASON] There are interconnects with BGP down status have no planned maintenance. See details BGP down details: The interconnect `dummy-interconnect2` with BGP down status has no planned maintenance. [REMEDIATION] Interconnect BGP down can be caused by various reasons. Suggested remediation: Suggested Remediations: * Check on-prem PF interface status towards on-prem router * Check RX/TX light level * Check cloud console interconnect details or cloud logging * Check other potential issues, or Contact Google Cloud Support. [AUTOMATED STEP]: Check if there are BGP flap events. - gcpdiag-interconnect1-aaaa [FAIL] [REASON] BGP flaps lasting longer than `120` seconds detected in project `gcpdiag-interconnect1-aaaa`. See details Abnormal long BGP flaps: crId:6988249776642123456, ip:169.254.2.1, peerIp:169.254.2.2, crName:dummy-router1, vlan:dummy-attachment2, proj:gcpdiag-interconnect1-aaaa, details: BGP flap details: went down,2025-03-27T23:32:19.397757310Z,came up,2025-03-27T23:34:39.923120483Z,140.53,Error [REMEDIATION] BGP flaps lasting longer than `120` seconds are unlikely to be caused by Cloud Router maintenance events. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance. or contact GCP support.Logging query example Example query: resource.type="gce_router" "Maintenance of router task" OR ("came up" OR "went down") resource.labels.region="" r.esource.labels.router_id="" [AUTOMATED STEP]: Check if the Cloud Router had maintenance event. - gcpdiag-interconnect1-aaaa [OK] [REASON] BGP flaps less than 120 seconds are all caused by Cloud Router maintenance events. [END]: Finalizing connectivity diagnostics. [INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting attachment_name=dummy-attachment5,dummy-attachment6,custom_flag=interconnect,project_id=gcpdiag- interconnect1-aaaa,region=us-west2 interconnect/bgp-down-flap: This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region. The following steps are executed: - Check BGP down status: Check if any vlan attachment has BGP down state. - Check Interconnect maintenance: Check if there are interconnect maintenance events are associated with the BGP down vlan attachments. - Check BGP flap status: Check if any BGP flaps happened. - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events are associated with the BGP flaps. [START]: Check provided parameters. - gcpdiag-interconnect1-aaaa [OK] [REASON] Total `2` vlan attachments found in `us-west2` in project `gcpdiag-interconnect1-aaaa`. [AUTOMATED STEP]: Check if there is vlan attachment has BGP down. - gcpdiag-interconnect1-aaaa [FAIL] [REASON] Some interconnects have BGP down status. See details Attachments with BGP down status: Attachment:dummy-attachment5, Interconnect:dummy-interconnect3, Cloud_Router_Name:dummy-router3 [REMEDIATION] For any interconnects in BGP down state, continue runbook check if the interconnect is in maintenance state. Check the public documentation for guidance. [AUTOMATED STEP]: Check if any BGP down interconnects are in maintenance state. - gcpdiag-interconnect1-aaaa [OK] [REASON] The interconnects with BGP down status align with the planned interconnect maintenance events. [AUTOMATED STEP]: Check if there are BGP flap events. - gcpdiag-interconnect1-aaaa [UNCERTAIN] [REASON] BGP flaps lasting less than `120` seconds detected. They are normal if there are cloud router maintenance events. See details Short duration BGP flaps: crId:666666875024123457, ip:169.254.6.1, peerIp:169.254.6.2, crName:dummy-router3, vlan:dummy-attachment6, proj:gcpdiag-interconnect1-aaaa, details: BGP flap details: went down,2025-03-27T23:32:19.397757310Z,came up,2025-03-27T23:33:39.923120483Z,80.53,Uncertain [REMEDIATION] Continue runbook to check if there are `cloud router maintenance` events align with BGP flaps. [AUTOMATED STEP]: Check if the Cloud Router had maintenance event. - gcpdiag-interconnect1-aaaa [FAIL] [REASON] There are BGP flaps less than 120 seconds without Cloud Router maintenance events. See details Error BGP : crId:666666875024123457, ip:169.254.6.1, peerIp:169.254.6.2, crName:dummy-router3, vlan:dummy-attachment6, proj:gcpdiag-interconnect1-aaaa, details: BGP flap details: went down,2025-03-27T23:32:19.397757310Z,came up,2025-03-27T23:33:39.923120483Z,80.53,Uncertain [REMEDIATION] BGP flaps lasting less than 120 seconds have been observed without Cloud Router maintenance. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.Logging query example or contact GCP support. Example query: resource.type="gce_router" "Maintenance of router task" OR ("came up" OR "went down") resource.labels.region="" r.esource.labels.router_id="" [END]: Finalizing connectivity diagnostics. [INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting ================================================ FILE: gcpdiag/runbook/interconnect/templates/bgp_down_flap.jinja ================================================ ############################################################# # Messages for BGP Down Flap Check # ############################################################# {% block start_success_reason %} Total `{total_num}` vlan attachments found in `{region}` in project `{project_id}`. {% endblock start_success_reason %} {% block start_skipped_reason%} Unable to fetch any vlan attachments in any region in project `{project_id}`. {% endblock start_skipped_reason %} {% block start_skipped_reason_a1%} Unable to fetch `{err_names}` in region `{region}` in project `{project_id}`. {% endblock start_skipped_reason_a1 %} {% block bgpdown_success_reason %} No VLAN attachments have BGP down in region `{region}` in project `{project_id}`. {% endblock bgpdown_success_reason %} {% block bgpdown_failure_reason %} Attachment:{attachment_name}, Interconnect:{interconnect_name}, Cloud_Router_Name:{router_name} {% endblock bgpdown_failure_reason %} {% block bgpdown_failure_reason_a1 %} Some interconnects have BGP down status. See details {reason} {% endblock bgpdown_failure_reason_a1 %} {% block bgpdown_failure_remediation %} For any interconnects in BGP down state, continue runbook check if the interconnect is in maintenance state. Check the public documentation for guidance. {% endblock bgpdown_failure_remediation %} {% block interconnect_maintenance_skipped_reason %} No interconnects have BGP down status, skip interconnect mainteance check in in region `{region}` in project `{project_id}`. {% endblock interconnect_maintenance_skipped_reason %} {% block interconnect_maintenance_success_reason %} The interconnects with BGP down status align with the planned interconnect maintenance events. {% endblock interconnect_maintenance_success_reason %} {% block interconnect_maintenance_failure_reason%} The interconnect `{interconnect_name}` with BGP down status has no planned maintenance. {% endblock interconnect_maintenance_failure_reason %} {% block interconnect_maintenance_failure_reason_a1 %} There are interconnects with BGP down status have no planned maintenance. See details {reason} {% endblock interconnect_maintenance_failure_reason_a1 %} {% block interconnect_maintenance_failure_remediation %} Interconnect BGP down can be caused by various reasons. Suggested remediation: {remediation} {% endblock interconnect_maintenance_failure_remediation %} {% block bgpflap_skipped_reason%} Unable to fetch any vlan attachments to check BGP flap in any region in project `{project_id}`. {% endblock bgpflap_skipped_reason %} {% block bgpflap_success_reason %} No BGP flaps are found in region `{region}` in project `{project_id}`. {% endblock bgpflap_success_reason %} {% block bgpflap_failure_reason%} Abnormal long BGP flaps: crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details} {% endblock bgpflap_failure_reason %} {% block bgpflap_failure_reason_a1%} BGP flaps lasting longer than `{timer}` seconds detected in project `{project_id}`. See details {reason} {% endblock bgpflap_failure_reason_a1 %} {% block bgpflap_failure_remediation %} BGP flaps lasting longer than `{timer}` seconds are unlikely to be caused by Cloud Router maintenance events. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance. or contact GCP support.Logging query example {example_query} {% endblock bgpflap_failure_remediation %} {% block bgpflap_uncertain_reason%} Short duration BGP flaps: crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details} {% endblock bgpflap_uncertain_reason %} {% block bgpflap_uncertain_reason_a1%} BGP flaps lasting less than `{timer}` seconds detected. They are normal if there are cloud router maintenance events. See details {reason} {% endblock bgpflap_uncertain_reason_a1 %} {% block bgpflap_uncertain_remediation %} Continue runbook to check if there are `cloud router maintenance` events align with BGP flaps. {% endblock bgpflap_uncertain_remediation %} {% block cloud_router_maintenance_skipped_reason %} No BGP flaps, skip cloud router mainteance check in in region `{region}` in project `{project_id}`. {% endblock cloud_router_maintenance_skipped_reason %} {% block cloud_router_maintenance_success_reason%} BGP flaps less than {timer} seconds are all caused by Cloud Router maintenance events. {% endblock cloud_router_maintenance_success_reason %} {% block cloud_router_maintenance_failure_reason%} Error BGP : crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details} {% endblock cloud_router_maintenance_failure_reason %} {% block cloud_router_maintenance_failure_reason_a1%} There are BGP flaps less than {timer} seconds without Cloud Router maintenance events. See details {reason} {% endblock cloud_router_maintenance_failure_reason_a1 %} {% block cloud_router_maintenance_failure_remediation %} BGP flaps lasting less than {timer} seconds have been observed without Cloud Router maintenance. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.Logging query example or contact GCP support.{example_query} {% endblock cloud_router_maintenance_failure_remediation %} ================================================ FILE: gcpdiag/runbook/lb/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/lb/constants.py ================================================ # Copyright 2024 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. """Constants specific to LB""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.constants import * ================================================ FILE: gcpdiag/runbook/lb/flags.py ================================================ # Copyright 2024 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. """Contains LB specific flags""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.flags import * BACKEND_SERVICE_NAME = 'backend_service_name' CERTIFICATE_NAME = 'certificate_name' REGION = 'region' FORWARDING_RULE_NAME = 'forwarding_rule_name' BACKEND_LATENCY_THRESHOLD = 'backend_latency_threshold' REQUEST_COUNT_THRESHOLD = 'request_count_threshold' ERROR_RATE_THRESHOLD = 'error_rate_threshold' ================================================ FILE: gcpdiag/runbook/lb/generalized_steps.py ================================================ # Copyright 2024 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. """Contains Generalized steps used by only LB runbooks""" ================================================ FILE: gcpdiag/runbook/lb/generalized_steps_test.py ================================================ # Copyright 2024 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. ================================================ FILE: gcpdiag/runbook/lb/latency.py ================================================ # Copyright 2024 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.googleapis.com/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. """playbook to troubleshoot Application Load Balancer latency.""" import googleapiclient.errors from gcpdiag import config, runbook from gcpdiag.queries import apis, crm, lb, monitoring from gcpdiag.runbook import op from gcpdiag.runbook.lb import flags class Latency(runbook.DiagnosticTree): """This runbook diagnoses and troubleshoots latency issues with Application Load Balancers. It analyzes key metrics to identify potential bottlenecks and performance problems. Key Investigation Areas: - Backend Latency: - Measures the time taken for backends to respond to requests, checking if it exceeds a configurable threshold. - Request Count Per Second (QPS): - Monitors the rate of incoming requests to the load balancer, checking if it exceeds a configurable threshold. A high request count coupled with high latency might suggest overload. - 5xx Error Rate: - Calculates the percentage of 5xx server errors, indicating problems on the backend servers. This check uses a configurable threshold and considers the request count to provide a meaningful error rate. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID where the load balancer is located', 'required': True, }, flags.FORWARDING_RULE_NAME: { 'type': str, 'help': 'The name of the forwarding rule associated with the Load Balancer to check', 'required': True, }, flags.REGION: { 'type': str, 'help': 'The region where the forwarding rule is located', 'required': False, }, flags.BACKEND_LATENCY_THRESHOLD: { 'type': float, 'help': 'Threshold for backend latency in milliseconds.', 'required': False, }, flags.REQUEST_COUNT_THRESHOLD: { 'type': float, 'help': 'Threshold for average request count per second.', 'required': False, }, flags.ERROR_RATE_THRESHOLD: { 'type': float, 'help': 'Threshold for error rate (percentage of 5xx errors).', 'required': False, }, } def build_tree(self): """Construct the diagnostic tree with start and end steps only.""" start = LbLatencyStart() self.add_start(start) backend_latency_check = LbBackendLatencyCheck() self.add_step(parent=start, child=backend_latency_check) request_count_check = LbRequestCountCheck() self.add_step(parent=start, child=request_count_check) average_request_count = request_count_check.average_request_count error_rate_check = LbErrorRateCheck( average_request_count=average_request_count) self.add_step(parent=request_count_check, child=error_rate_check) self.add_end(LatencyEnd()) class LbLatencyStart(runbook.StartStep): """Fetch the specified forwarding rule""" def execute(self): """Fetch the specified forwarding rule.""" proj = crm.get_project(op.get(flags.PROJECT_ID)) if not apis.is_enabled(op.get(flags.PROJECT_ID), 'compute'): op.add_skipped(proj, reason='Compute API is not enabled') return # Early exit if Compute API is disabled try: # Attempt to fetch the forwarding rule self.forwarding_rule = lb.get_forwarding_rule( op.get(flags.PROJECT_ID), op.get(flags.FORWARDING_RULE_NAME), op.get(flags.REGION)) op.info(f'Forwarding rule found: {self.forwarding_rule.name}') except googleapiclient.errors.HttpError: # Skip the runbook if forwarding rule is missing op.add_skipped( proj, reason='Forwarding rule not found in the specified project and region.' ) return load_balancer_type = self.forwarding_rule.load_balancer_type supported_load_balancer_types = [ lb.LoadBalancerType.CLASSIC_APPLICATION_LB, lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB, lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB, lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB, ] if load_balancer_type == lb.LoadBalancerType.LOAD_BALANCER_TYPE_UNSPECIFIED: op.add_skipped( proj, reason= 'The given forwarding rule type is not used for load balancing.', ) return elif load_balancer_type not in supported_load_balancer_types: op.add_skipped( proj, reason=( 'Latency runbook is not supported for the specified load balancer' f' type: {lb.get_load_balancer_type_name(load_balancer_type)}'), ) return class LbBackendLatencyCheck(runbook.Step): """Check if backend latency exceeds the threshold""" template = 'latency::backend_latency' def execute(self): """Check backend latency for the specified forwarding rule""" self.forwarding_rule = lb.get_forwarding_rule( op.get(flags.PROJECT_ID), op.get(flags.FORWARDING_RULE_NAME), op.get(flags.REGION)) project_id = op.get(flags.PROJECT_ID) # Define default threshold value threshold = op.get(flags.BACKEND_LATENCY_THRESHOLD) if op.get( flags.BACKEND_LATENCY_THRESHOLD) is not None else 200 forwarding_rule = self.forwarding_rule fr_name = op.get(flags.FORWARDING_RULE_NAME) load_balancer_type = self.forwarding_rule.load_balancer_type region = op.get(flags.REGION) query = '' average_latency = None op.info('Forwarding rule name: ' + str(self.forwarding_rule)) # Construct the MQL query string, incorporating filter and time range if load_balancer_type == lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB: #To Do: Add support for Network Load Balancers and Pass through Load Balancers #To Do: Allow users to chose a specific time range query = f''' fetch http_external_regional_lb_rule | metric 'loadbalancing.googleapis.com/https/external/regional/backend_latencies' | filter (resource.forwarding_rule_name == '{fr_name}' && resource.region == '{region}') | align delta(1m) | every 1m | group_by [], [value_backend_latencies_average: mean(value.backend_latencies)] | within 15m ''' if load_balancer_type in [ lb.LoadBalancerType.CLASSIC_APPLICATION_LB, lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB, ]: query = f''' fetch https_lb_rule | metric 'loadbalancing.googleapis.com/https/backend_latencies' | filter (resource.forwarding_rule_name == '{fr_name}') | align delta(1m) | every 1m | group_by [], [value_backend_latencies_average: mean(value.backend_latencies)] | within 15m ''' if load_balancer_type == lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB: query = f''' fetch internal_http_lb_rule | metric 'loadbalancing.googleapis.com/https/internal/backend_latencies' | filter (resource.forwarding_rule_name == '{fr_name}' && resource.region == '{region}') | align delta(1m) | every 1m | group_by [], [value_backend_latencies_average: mean(value.backend_latencies)] | within 15m ''' try: # Execute the query using the monitoring API metric = monitoring.query(project_id, query) values = [] if metric: for _, item in metric.items( ): # Iterate over the items in the metric dictionary if 'values' in item: values = item['values'] else: values = [[0]] if values is not None: flattened_values = [ float(item) for sublist in values for item in sublist ] average_latency = sum(flattened_values) / len( flattened_values) if flattened_values else 0 if average_latency > threshold: op.add_failed(forwarding_rule, reason=op.prep_msg(op.FAILURE_REASON, average_latency=round( average_latency, 2), threshold=threshold), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(forwarding_rule, reason=op.prep_msg(op.SUCCESS_REASON, average_latency=round(average_latency, 2), threshold=threshold)) return metric except Exception as e: # Catch any other errors op.info('An unexpected error occurred during LbBackendLatency execution.') op.info('Error details: ' + str(e)) raise class LbRequestCountCheck(runbook.Step): """Check if request count per second exceeds the threshold""" def __init__(self, average_request_count=0, **kwargs): super().__init__(**kwargs) self.average_request_count = average_request_count template = 'latency::request_count' def execute(self): """Check request count per second for the specified forwarding rule""" self.forwarding_rule = lb.get_forwarding_rule( op.get(flags.PROJECT_ID), op.get(flags.FORWARDING_RULE_NAME), op.get(flags.REGION)) project_id = op.get(flags.PROJECT_ID) threshold = op.get(flags.REQUEST_COUNT_THRESHOLD) if op.get( flags.REQUEST_COUNT_THRESHOLD) is not None else 150 forwarding_rule = self.forwarding_rule fr_name = op.get(flags.FORWARDING_RULE_NAME) load_balancer_type = self.forwarding_rule.load_balancer_type region = op.get(flags.REGION) query = '' op.info('Forwarding rule name: ' + str(self.forwarding_rule)) # Construct the MQL query string, incorporating filter and time range if load_balancer_type == lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB: query = f''' fetch http_external_regional_lb_rule | metric 'loadbalancing.googleapis.com/https/external/regional/request_count' | filter (resource.forwarding_rule_name == '{fr_name}' && resource.region == '{region}') | align rate(1m) | every 1m | group_by [], [value_request_count_aggregate: aggregate(value.request_count)] | within 15m ''' if load_balancer_type in [ lb.LoadBalancerType.CLASSIC_APPLICATION_LB, lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB, ]: query = f''' fetch https_lb_rule | metric 'loadbalancing.googleapis.com/https/request_count' | filter (resource.forwarding_rule_name == '{fr_name}') | align rate(1m) | every 1m | group_by [], [value_request_count_aggregate: aggregate(value.request_count)] | within 15m ''' if load_balancer_type == lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB: query = f''' fetch internal_http_lb_rule | metric 'loadbalancing.googleapis.com/https/internal/request_count' | filter (resource.forwarding_rule_name == '{fr_name}' && resource.region == '{region}') | align rate(1m) | every 1m | group_by [], [value_request_count_aggregate: aggregate(value.request_count)] | within 15m ''' try: # Execute the query using the monitoring API metric = monitoring.query(project_id, query) values = [] if metric: for _, item in metric.items( ): # Iterate over the items in the metric dictionary if 'values' in item: values = item['values'] else: values = [[0]] if values is not None: flattened_values_rc = [ float(item) for sublist in values for item in sublist ] self.average_request_count = sum(flattened_values_rc) / ( len(flattened_values_rc) * 60) if flattened_values_rc else 0 if self.average_request_count > threshold: op.add_failed(forwarding_rule, reason=op.prep_msg(op.FAILURE_REASON, average_request_count=round( self.average_request_count, 2), threshold=threshold), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(forwarding_rule, reason=op.prep_msg(op.SUCCESS_REASON, average_request_count=round( self.average_request_count, 2), threshold=threshold)) return metric except Exception as e: # Catch any other errors op.info('An unexpected error occurred during LBRequestCount execution.') op.info('Error details: ' + str(e)) raise def get_average_request_count(self): """Return the calculated average_request_count to be used in the next step.""" return self.average_request_count class LbErrorRateCheck(runbook.Step): """Check if error exceeds the threshold""" def __init__(self, average_request_count=None, **kwargs): super().__init__(**kwargs) self.average_request_count = average_request_count template = 'latency::error_rate' def execute(self): """Check the 5xx error rate for the specified forwarding rule""" self.forwarding_rule = lb.get_forwarding_rule( op.get(flags.PROJECT_ID), op.get(flags.FORWARDING_RULE_NAME), op.get(flags.REGION)) project_id = op.get(flags.PROJECT_ID) threshold = op.get(flags.ERROR_RATE_THRESHOLD) if op.get( flags.ERROR_RATE_THRESHOLD) is not None else 1 forwarding_rule = self.forwarding_rule fr_name = op.get(flags.FORWARDING_RULE_NAME) load_balancer_type = self.forwarding_rule.load_balancer_type region = op.get(flags.REGION) average_error_count = None average_error_rate = None query = '' op.info('Forwarding rule name: ' + str(self.forwarding_rule)) # Construct the MQL query string, incorporating filter and time range if load_balancer_type == lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB: query = f''' fetch http_external_regional_lb_rule | metric 'loadbalancing.googleapis.com/https/external/regional/backend_request_count' | filter (resource.forwarding_rule_name == '{fr_name}' && resource.region == '{region}') && (metric.response_code_class == 500) | align rate(1m) | every 1m | group_by [], [value_backend_request_count_aggregate: aggregate(value.backend_request_count)] | within 15m ''' if load_balancer_type in [ lb.LoadBalancerType.CLASSIC_APPLICATION_LB, lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB, ]: query = f''' fetch https_lb_rule | metric 'loadbalancing.googleapis.com/https/backend_request_count' | filter (resource.forwarding_rule_name == '{fr_name}') && (metric.response_code_class == 500) | align rate(1m) | every 1m | group_by [], [value_backend_request_count_aggregate: aggregate(value.backend_request_count)] | within 15m ''' if load_balancer_type == lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB: query = f''' fetch internal_http_lb_rule | metric 'loadbalancing.googleapis.com/https/internal/backend_request_count' | filter (resource.forwarding_rule_name == '{fr_name}' && resource.region == '{region}') && (metric.response_code_class == 500) | align rate(1m) | every 1m | group_by [], [value_backend_request_count_aggregate: aggregate(value.backend_request_count)] | within 15m ''' try: metric = monitoring.query(project_id, query) values = [] if metric and metric.get('values'): for _, item in metric.items( ): # Iterate over the items in the metric dictionary if 'values' in item: values = item['values'] else: values = [[0]] if values is not None: flattened_values_er = [ float(item) for sublist in values for item in sublist ] average_error_count = sum(flattened_values_er) / len( flattened_values_er) if flattened_values_er else 0 if average_error_count is not None and self.average_request_count is not None: if self.average_request_count > 0: average_error_rate = average_error_count / self.average_request_count * 100 else: average_error_rate = 0 if average_error_rate is None: average_error_rate = 0 if average_error_rate > threshold: op.add_failed(forwarding_rule, reason=op.prep_msg(op.FAILURE_REASON, average_error_rate=round( average_error_rate, 2), threshold=threshold), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(forwarding_rule, reason=op.prep_msg(op.SUCCESS_REASON, average_error_rate=round( average_error_rate, 2), threshold=threshold)) return metric except Exception as e: # Catch any other errors op.info('An unexpected error occurred during LbErrorRateCheck execution.') op.info('Error details: ' + str(e)) raise class LatencyEnd(runbook.EndStep): """Concludes the latency diagnostics process. If the issue persists, it directs the user to helpful resources and suggests contacting support with a detailed report. """ def execute(self): """Finalize unhealthy backends diagnostics.""" if not config.get(flags.INTERACTIVE_MODE): response = op.prompt( kind=op.CONFIRMATION, message=( 'Are you still experiencing latency issues' f' with your forwarding rule {op.get(flags.FORWARDING_RULE_NAME)}' ), choice_msg='Enter an option: ', ) if response == op.YES: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/lb/latency_test.py ================================================ # Copyright 2024 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. """Test class for lb/latency.""" import unittest from unittest import mock import apiclient from gcpdiag import config from gcpdiag.queries import apis_stub from gcpdiag.queries import lb as queries_lb from gcpdiag.runbook import lb, op, snapshot_test_base from gcpdiag.runbook.lb import flags from gcpdiag.runbook.lb.latency import (LatencyEnd, LbBackendLatencyCheck, LbErrorRateCheck, LbLatencyStart, LbRequestCountCheck) class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = lb runbook_name = 'lb/latency' project_id = '' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-lb3-aaaa', 'forwarding_rule_name': 'https-content-rule', 'region': 'global' }, { 'project_id': 'gcpdiag-lb3-aaaa', 'forwarding_rule_name': 'https-content-rule-working', 'region': 'global' }, { 'project_id': 'gcpdiag-lb3-aaaa', 'forwarding_rule_name': 'https-content-rule', 'region': 'global', 'backend_latency_threshold': '700000', 'request_count_threshold': '700000', 'error_rate_threshold': '50' }] @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) class TestLatencyLogic(unittest.TestCase): """Unit tests for specific logic branches in latency.py.""" def setUp(self): super().setUp() self.mock_fr = mock.MagicMock() self.mock_fr.name = 'test-fr' self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB) self.operator = op.Operator(mock.MagicMock()) self.operator.parameters = { flags.PROJECT_ID: 'gcpdiag-lb3-aaaa', flags.FORWARDING_RULE_NAME: 'test-fr', flags.REGION: 'global', 'start_time': '2024-01-01T00:00:00Z', 'end_time': '2024-01-01T01:00:00Z', flags.BACKEND_LATENCY_THRESHOLD: 200, flags.REQUEST_COUNT_THRESHOLD: 150, flags.ERROR_RATE_THRESHOLD: 1, } self.operator.set_run_id('test') self.operator.set_step(mock.Mock(execution_id='test-step')) self.operator.messages = mock.MagicMock() @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_start_step_unspecified_type(self, mock_skip, mock_get_fr): """Covers LbLatencyStart with unspecified LB type.""" self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.LOAD_BALANCER_TYPE_UNSPECIFIED) mock_get_fr.return_value = self.mock_fr step = LbLatencyStart() with op.operator_context(self.operator): step.execute() mock_skip.assert_called_once_with(mock.ANY, reason=mock.ANY) @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_start_step_unsupported_type(self, mock_skip, mock_get_fr): """Covers LbLatencyStart with unsupported LB type.""" self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.EXTERNAL_PASSTHROUGH_LB) mock_get_fr.return_value = self.mock_fr step = LbLatencyStart() with op.operator_context(self.operator): step.execute() mock_skip.assert_called_once_with(mock.ANY, reason=mock.ANY) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') @mock.patch('gcpdiag.runbook.op.info') def test_backend_latency_exception(self, mock_info, mock_get_fr, mock_query): """Covers exception handling in LbBackendLatencyCheck.""" mock_get_fr.return_value = self.mock_fr mock_query.side_effect = RuntimeError('Monitoring Error') step = LbBackendLatencyCheck() with op.operator_context(self.operator): with self.assertRaises(RuntimeError): step.execute() mock_info.assert_any_call(mock.ANY) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_backend_latency_empty_values(self, mock_get_fr, mock_query): """Covers fallback to [[0]] values in LbBackendLatencyCheck.""" mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'other': 'data'}} step = LbBackendLatencyCheck() with op.operator_context(self.operator): step.execute() self.operator.interface.add_ok.assert_called_once() @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_backend_latency_regional_external(self, mock_get_fr, mock_query): """Covers Regional External LB branch in LbBackendLatencyCheck.""" self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB) mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'values': [[100]]}} step = LbBackendLatencyCheck() with op.operator_context(self.operator): step.execute() query_str = mock_query.call_args[0][1] self.assertIn('http_external_regional_lb_rule', query_str) self.assertIn(f"resource.forwarding_rule_name == '{self.mock_fr.name}'", query_str) self.assertIn( f"resource.region == '{self.operator.parameters[flags.REGION]}'", query_str) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_backend_latency_regional_internal(self, mock_get_fr, mock_query): """Covers Regional Internal LB branch in LbBackendLatencyCheck.""" self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB) mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'values': [[100]]}} step = LbBackendLatencyCheck() with op.operator_context(self.operator): step.execute() query_str = mock_query.call_args[0][1] self.assertIn('internal_http_lb_rule', query_str) self.assertIn(f"resource.forwarding_rule_name == '{self.mock_fr.name}'", query_str) self.assertIn( f"resource.region == '{self.operator.parameters[flags.REGION]}'", query_str) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_request_count_regional_external(self, mock_get_fr, mock_query): """Covers Regional External LB branch in LbRequestCountCheck.""" self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB) mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'values': [[10]]}} step = LbRequestCountCheck() with op.operator_context(self.operator): step.execute() query_str = mock_query.call_args[0][1] self.assertIn('http_external_regional_lb_rule', query_str) self.assertIn(f"resource.forwarding_rule_name == '{self.mock_fr.name}'", query_str) self.assertIn( f"resource.region == '{self.operator.parameters[flags.REGION]}'", query_str) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_request_count_regional_internal(self, mock_get_fr, mock_query): """Covers Regional Internal LB branch in LbRequestCountCheck.""" self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB) mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'values': [[10]]}} step = LbRequestCountCheck() with op.operator_context(self.operator): step.execute() query_str = mock_query.call_args[0][1] self.assertIn('internal_http_lb_rule', query_str) self.assertIn(f"resource.forwarding_rule_name == '{self.mock_fr.name}'", query_str) self.assertIn( f"resource.region == '{self.operator.parameters[flags.REGION]}'", query_str) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_error_rate_calculation_and_regional_internal(self, mock_get_fr, mock_query): """Covers Error rate calculation for Regional Internal.""" self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB) mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'values': [[5]]}} step = LbErrorRateCheck(average_request_count=100) with op.operator_context(self.operator): step.execute() query_str = mock_query.call_args[0][1] self.assertIn('internal_http_lb_rule', query_str) self.assertIn(f"resource.forwarding_rule_name == '{self.mock_fr.name}'", query_str) self.assertIn( f"resource.region == '{self.operator.parameters[flags.REGION]}'", query_str) @mock.patch('gcpdiag.config.get', return_value=False) @mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES) @mock.patch('gcpdiag.runbook.op.info') def test_latency_end_yes(self, mock_info, unused_mock_prompt, unused_mock_config): """Covers LatencyEnd step logic.""" step = LatencyEnd() with op.operator_context(self.operator): step.execute() mock_info.assert_called_with(message=op.END_MESSAGE) @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=False) @mock.patch('gcpdiag.runbook.op.add_skipped') def test_start_step_compute_disabled(self, mock_skip, unused_mock_is_enabled): """Covers Early exit when Compute API is disabled.""" step = LbLatencyStart() with op.operator_context(self.operator): step.execute() mock_skip.assert_called_once_with(mock.ANY, reason='Compute API is not enabled') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') @mock.patch('gcpdiag.runbook.op.add_skipped') def test_start_step_http_error(self, mock_skip, mock_get_fr): """Covers HttpError when fetching forwarding rule.""" mock_get_fr.side_effect = apiclient.errors.HttpError( mock.Mock(status=404), b'Not Found') step = LbLatencyStart() with op.operator_context(self.operator): step.execute() mock_skip.assert_called_once_with(mock.ANY, reason=mock.ANY) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') @mock.patch('gcpdiag.runbook.op.info') def test_request_count_exception(self, mock_info, mock_get_fr, mock_query): """Covers Exception handling in LbRequestCountCheck.""" mock_get_fr.return_value = self.mock_fr mock_query.side_effect = RuntimeError('Monitoring Error') step = LbRequestCountCheck() with op.operator_context(self.operator): with self.assertRaises(RuntimeError): step.execute() mock_info.assert_any_call(mock.ANY) def test_get_average_request_count(self): """Covers get_average_request_count getter.""" step = LbRequestCountCheck(average_request_count=12.5) self.assertEqual(step.get_average_request_count(), 12.5) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_error_rate_regional_external(self, mock_get_fr, mock_query): """Covers Regional External LB branch in LbErrorRateCheck.""" self.mock_fr.load_balancer_type = ( queries_lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB) mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'values': [[5]]}} step = LbErrorRateCheck(average_request_count=100) with op.operator_context(self.operator): step.execute() query_str = mock_query.call_args[0][1] self.assertIn('http_external_regional_lb_rule', query_str) self.assertIn(f"resource.forwarding_rule_name == '{self.mock_fr.name}'", query_str) self.assertIn( f"resource.region == '{self.operator.parameters[flags.REGION]}'", query_str) @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_error_rate_empty_values(self, mock_get_fr, mock_query): """Covers Handling missing 'values' key in LbErrorRateCheck.""" mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'other': 'data'}} step = LbErrorRateCheck(average_request_count=10) with op.operator_context(self.operator): step.execute() @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') def test_error_rate_zero_qps(self, mock_get_fr, mock_query): """Covers Error rate calculation when request count is zero.""" mock_get_fr.return_value = self.mock_fr mock_query.return_value = {'key': {'values': [[5]]}} step = LbErrorRateCheck(average_request_count=0) with op.operator_context(self.operator): step.execute() @mock.patch('gcpdiag.queries.monitoring.query') @mock.patch('gcpdiag.queries.lb.get_forwarding_rule') @mock.patch('gcpdiag.runbook.op.info') def test_error_rate_exception(self, mock_info, mock_get_fr, mock_query): """Covers Exception handling in LbErrorRateCheck.""" mock_get_fr.return_value = self.mock_fr mock_query.side_effect = RuntimeError('Monitoring Error') step = LbErrorRateCheck(average_request_count=10) with op.operator_context(self.operator): with self.assertRaises(RuntimeError): step.execute() mock_info.assert_any_call(mock.ANY) ================================================ FILE: gcpdiag/runbook/lb/snapshots/latency.txt ================================================ forwarding_rule_name=https-content-rule,project_id=gcpdiag-lb3-aaaa,region=global lb/latency: This runbook diagnoses and troubleshoots latency issues with Application Load Balancers. It analyzes key metrics to identify potential bottlenecks and performance problems. Key Investigation Areas: - Backend Latency: - Measures the time taken for backends to respond to requests, checking if it exceeds a configurable threshold. - Request Count Per Second (QPS): - Monitors the rate of incoming requests to the load balancer, checking if it exceeds a configurable threshold. A high request count coupled with high latency might suggest overload. - 5xx Error Rate: - Calculates the percentage of 5xx server errors, indicating problems on the backend servers. This check uses a configurable threshold and considers the request count to provide a meaningful error rate. [START]: Fetch the specified forwarding rule. [INFO]: Forwarding rule found: https-content-rule [AUTOMATED STEP]: Check backend latency for the specified forwarding rule [INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule - gcpdiag-lb3-aaaa/https-content-rule [FAIL] [REASON] The forwarding rule has a backend latency of 660138.25 ms. This is higher than the threshold value of 200 ms. [REMEDIATION] Investigate the increased backend latency. Check the health and performance of the backend instances, examining metrics such as CPU utilization, memory usage, and disk I/O. [AUTOMATED STEP]: Check request count per second for the specified forwarding rule [INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule - gcpdiag-lb3-aaaa/https-content-rule [FAIL] [REASON] The forwarding rule has an average request count of 11002.3 requests/s in the last 15 minutes. This is higher than the threshold value of 150. [REMEDIATION] The high request count suggests the backend may be overloaded. Consider scaling up the backend by adding more instances or increasing the resources of existing instances. [AUTOMATED STEP]: Check the 5xx error rate for the specified forwarding rule [INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule - gcpdiag-lb3-aaaa/https-content-rule [OK] [REASON] The forwarding rule has an average error rate of 0% in the last 15 minutes. This is less than the threshold value of 1%. [END]: Finalize unhealthy backends diagnostics. forwarding_rule_name=https-content-rule-working,project_id=gcpdiag-lb3-aaaa,region=global lb/latency: This runbook diagnoses and troubleshoots latency issues with Application Load Balancers. It analyzes key metrics to identify potential bottlenecks and performance problems. Key Investigation Areas: - Backend Latency: - Measures the time taken for backends to respond to requests, checking if it exceeds a configurable threshold. - Request Count Per Second (QPS): - Monitors the rate of incoming requests to the load balancer, checking if it exceeds a configurable threshold. A high request count coupled with high latency might suggest overload. - 5xx Error Rate: - Calculates the percentage of 5xx server errors, indicating problems on the backend servers. This check uses a configurable threshold and considers the request count to provide a meaningful error rate. [START]: Fetch the specified forwarding rule. - gcpdiag-lb3-aaaa [SKIP] [REASON] Forwarding rule not found in the specified project and region. backend_latency_threshold=700000,error_rate_threshold=50,forwarding_rule_name=https-content- rule,project_id=gcpdiag-lb3-aaaa,region=global,request_count_threshold=700000 lb/latency: This runbook diagnoses and troubleshoots latency issues with Application Load Balancers. It analyzes key metrics to identify potential bottlenecks and performance problems. Key Investigation Areas: - Backend Latency: - Measures the time taken for backends to respond to requests, checking if it exceeds a configurable threshold. - Request Count Per Second (QPS): - Monitors the rate of incoming requests to the load balancer, checking if it exceeds a configurable threshold. A high request count coupled with high latency might suggest overload. - 5xx Error Rate: - Calculates the percentage of 5xx server errors, indicating problems on the backend servers. This check uses a configurable threshold and considers the request count to provide a meaningful error rate. [START]: Fetch the specified forwarding rule. [INFO]: Forwarding rule found: https-content-rule [AUTOMATED STEP]: Check backend latency for the specified forwarding rule [INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule - gcpdiag-lb3-aaaa/https-content-rule [OK] [REASON] The forwarding rule has a backend latency of 660138.25 ms. This is less than the threshold value of 700000.0 ms. [AUTOMATED STEP]: Check request count per second for the specified forwarding rule [INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule - gcpdiag-lb3-aaaa/https-content-rule [OK] [REASON] The forwarding rule has an average request count of 11002.3 requests/s in the last 15 minutes. This is less than the threshold value of 700000.0. [AUTOMATED STEP]: Check the 5xx error rate for the specified forwarding rule [INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule - gcpdiag-lb3-aaaa/https-content-rule [OK] [REASON] The forwarding rule has an average error rate of 0% in the last 15 minutes. This is less than the threshold value of 50.0%. [END]: Finalize unhealthy backends diagnostics. ================================================ FILE: gcpdiag/runbook/lb/snapshots/ssl_certificates.txt ================================================ certificate_name=cert1,project_id=gcpdiag-lb3-aaaa lb/ssl-certificates: This runbook diagnoses and troubleshoots issues with SSL certificates. The supported certificates are Google-managed classic certificates attached to load balancers. It helps identify and resolve common problems that prevent certificates from provisioning or functioning correctly. Key Investigation Area: - Certificate Status: - Checks the certificate's provisioning status and identifies any failed domains. - Domain Validation: - Verifies DNS configuration for each domain, ensuring proper A/AAAA records and the absence of conflicting records. - Load Balancer Configuration: - Confirms the certificate is correctly attached to a target proxy and associated with a forwarding rule using port 443. - Conflicting resources: - Ensures no certificate map is attached to the target proxy, which can interfere with Google-managed certificates. - Provisioning Time: - Checks Cloud Logging to determine when the certificate was attached and allows sufficient time for propagation. [START]: Verify the existence and status of the SSL certificate "cert1". [INFO]: name: cert1 - gcpdiag-lb3-aaaa [FAIL] [REASON] The Google-managed SSL certificate "cert1" is not in ACTIVE state. [GATEWAY]: Analyze the status of the Google-managed SSL certificate "cert1". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1 [UNCERTAIN] [REASON] The Google-managed SSL certificate "cert1" is in the PROVISIONING state. Further investigation into the status of each domain is necessary.. [GATEWAY]: Check the status of each individual domain associated with the SSL certificate "cert1". [AUTOMATED STEP]: Analyze domains in FAILED_NOT_VISIBLE state for certificate "cert1". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1 [FAIL] [REASON] The following domains are in FAILED_NOT_VISIBLE state: natka123.com, second.natka123.com for SSL certificate "cert1". This usually means the domain's DNS records are not correctly pointing to the load balancer. [GATEWAY]: Verify the SSL certificate "cert1" is attached to a target proxy. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1 [OK] [REASON] The SSL certificate "cert1" is attached to target proxies (projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy) that are in use by forwarding rules. [GATEWAY]: Verify the DNS records for domain "natka123.com" associated with the SSL certificate "cert1". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1 [UNCERTAIN] [REASON] Some DNS records for domain natka123.com resolve to the following unexpected IP address(es): 1.2.3.5. While other records point to the expected IP addresses: 1.2.3.4. The unexpected IP addresses do not point to any load balancer associated with certificate cert1. This can cause certificate provisioning issues. [REMEDIATION] Configure DNS records for natka123.com to point to the correct load balancer IP address(es) for certificate cert1. The following load balancer IP addresses are associated with this certificate: - forwarding rule "https-content-rule" in "global": 1.2.3.4 Check: [GATEWAY]: Verify the DNS records for domain "second.natka123.com" associated with the SSL certificate "cert1". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1 [FAIL] [REASON] DNS records for domain second.natka123.com currently resolve to the following IP addresses: 2600:1901:0:d0d7::. These IP addresses do not point to any load balancer associated with certificate cert1. Certificate provisioning is therefore blocked. [REMEDIATION] Configure DNS records for second.natka123.com to point to the correct load balancer IP address(es) for certificate cert1. The following load balancer IP addresses are associated with this certificate: - forwarding rule "https-content-rule" in "global": 1.2.3.4 Check: [AUTOMATED STEP]: Check if the load balancer with certificate "cert1" is configured to listen on port 443. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1 [OK] [REASON] The SSL certificate "cert1" has forwarding rules configured for HTTPS (port 443) on all associated IP addresses. [AUTOMATED STEP]: Check for conflicting certificate map set on a target proxy for certificate "cert1". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1 [FAIL] [REASON] The following target proxies have a conflicting certificate map: Target Proxy: projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy has certificate map //certificatemanager.googleapis.com/projects/gcpdiag-lb3-aaaa/locations/global/certificateMaps/cert-map together with classic SSL certificates https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1. If certificate map is set on a target proxy, the classic SSL certificates are ignored. [REMEDIATION] If this configuration is unintended, detach the certificate map from the target proxies. [AUTOMATED STEP]: Check if the SSL certificate "cert1" associated resources has been updated recently. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1 [UNCERTAIN] [REASON] The SSL certificate "cert1" has recently had associated resources modified. This might affect DNS validation. Details are below: Forwarding rule https-content-rule in scope global has been modified at 2024-10-18T14:34:17.798905Z. Target proxy https-lb-proxy in scope global has been modified at 2024-10-18T14:34:17.798905Z. [REMEDIATION] DNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If cert1 was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete. [END]: Finalize SSL Certificate diagnostics. certificate_name=cert2,project_id=gcpdiag-lb3-aaaa lb/ssl-certificates: This runbook diagnoses and troubleshoots issues with SSL certificates. The supported certificates are Google-managed classic certificates attached to load balancers. It helps identify and resolve common problems that prevent certificates from provisioning or functioning correctly. Key Investigation Area: - Certificate Status: - Checks the certificate's provisioning status and identifies any failed domains. - Domain Validation: - Verifies DNS configuration for each domain, ensuring proper A/AAAA records and the absence of conflicting records. - Load Balancer Configuration: - Confirms the certificate is correctly attached to a target proxy and associated with a forwarding rule using port 443. - Conflicting resources: - Ensures no certificate map is attached to the target proxy, which can interfere with Google-managed certificates. - Provisioning Time: - Checks Cloud Logging to determine when the certificate was attached and allows sufficient time for propagation. [START]: Verify the existence and status of the SSL certificate "cert2". [INFO]: name: cert2 - gcpdiag-lb3-aaaa [FAIL] [REASON] The Google-managed SSL certificate "cert2" is not in ACTIVE state. [GATEWAY]: Analyze the status of the Google-managed SSL certificate "cert2". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2 [UNCERTAIN] [REASON] The Google-managed SSL certificate "cert2" is in the PROVISIONING state. Further investigation into the status of each domain is necessary.. [GATEWAY]: Check the status of each individual domain associated with the SSL certificate "cert2". [AUTOMATED STEP]: Analyze domains in FAILED_NOT_VISIBLE state for certificate "cert2". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2 [FAIL] [REASON] The following domains are in FAILED_NOT_VISIBLE state: test.natka123.com for SSL certificate "cert2". This usually means the domain's DNS records are not correctly pointing to the load balancer. [GATEWAY]: Verify the SSL certificate "cert2" is attached to a target proxy. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2 [OK] [REASON] The SSL certificate "cert2" is attached to target proxies (projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy-working) that are in use by forwarding rules. [GATEWAY]: Verify the DNS records for domain "test.natka123.com" associated with the SSL certificate "cert2". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2 [FAIL] [REASON] DNS records for domain test.natka123.com currently resolve to the following IP addresses: 192.168.3.4. These IP addresses do not point to any load balancer associated with certificate cert2. Certificate provisioning is therefore blocked. [REMEDIATION] Configure DNS records for test.natka123.com to point to the correct load balancer IP address(es) for certificate cert2. The following load balancer IP addresses are associated with this certificate: - forwarding rule "https-content-rule-working" in "global": 2600:1901:0:d0d7:: Check: [AUTOMATED STEP]: Check if the load balancer with certificate "cert2" is configured to listen on port 443. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2 [FAIL] [REASON] The following forwarding rules with certificate cert2: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule-working use IP address 2600:1901:0:d0d7:: but none of them listen on port 443. There must be at least one load balancer's forwarding rule that uses TCP port 443 for the Google-managed certificate to be initially provisioned and automatically renewed. [REMEDIATION] Configure the load balancer to listen on port 443 for SSL certificate "cert2". [AUTOMATED STEP]: Check for conflicting certificate map set on a target proxy for certificate "cert2". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2 [OK] [REASON] All target proxies associated with the SSL certificate "cert2" do not have a certificate map. [AUTOMATED STEP]: Check if the SSL certificate "cert2" associated resources has been updated recently. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2 [UNCERTAIN] [REASON] The SSL certificate "cert2" has recently had associated resources modified. This might affect DNS validation. Details are below: Forwarding rule https-content-rule-working in scope global has been modified at 2024-10-18T14:34:17.798905Z. Target proxy https-lb-proxy-working in scope global has been modified at 2024-10-18T14:34:17.798905Z. [REMEDIATION] DNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If cert2 was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete. [END]: Finalize SSL Certificate diagnostics. certificate_name=cert3,project_id=gcpdiag-lb3-aaaa lb/ssl-certificates: This runbook diagnoses and troubleshoots issues with SSL certificates. The supported certificates are Google-managed classic certificates attached to load balancers. It helps identify and resolve common problems that prevent certificates from provisioning or functioning correctly. Key Investigation Area: - Certificate Status: - Checks the certificate's provisioning status and identifies any failed domains. - Domain Validation: - Verifies DNS configuration for each domain, ensuring proper A/AAAA records and the absence of conflicting records. - Load Balancer Configuration: - Confirms the certificate is correctly attached to a target proxy and associated with a forwarding rule using port 443. - Conflicting resources: - Ensures no certificate map is attached to the target proxy, which can interfere with Google-managed certificates. - Provisioning Time: - Checks Cloud Logging to determine when the certificate was attached and allows sufficient time for propagation. [START]: Verify the existence and status of the SSL certificate "cert3". [INFO]: name: cert3 - gcpdiag-lb3-aaaa [FAIL] [REASON] The Google-managed SSL certificate "cert3" is not in ACTIVE state. [GATEWAY]: Analyze the status of the Google-managed SSL certificate "cert3". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3 [UNCERTAIN] [REASON] The Google-managed SSL certificate "cert3" is in the PROVISIONING state. Further investigation into the status of each domain is necessary.. [GATEWAY]: Check the status of each individual domain associated with the SSL certificate "cert3". [AUTOMATED STEP]: Analyze domains in FAILED_NOT_VISIBLE state for certificate "cert3". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3 [FAIL] [REASON] The following domains are in FAILED_NOT_VISIBLE state: second.test.org, test.org for SSL certificate "cert3". This usually means the domain's DNS records are not correctly pointing to the load balancer. [GATEWAY]: Verify the SSL certificate "cert3" is attached to a target proxy. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3 [OK] [REASON] The SSL certificate "cert3" is attached to target proxies (projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy) that are in use by forwarding rules. [GATEWAY]: Verify the DNS records for domain "second.test.org" associated with the SSL certificate "cert3". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3 [FAIL] [REASON] DNS records for domain second.test.org currently resolve to the following IP addresses: 2600:1901:0:d0d7::. These IP addresses do not point to any load balancer associated with certificate cert3. Certificate provisioning is therefore blocked. [REMEDIATION] Configure DNS records for second.test.org to point to the correct load balancer IP address(es) for certificate cert3. The following load balancer IP addresses are associated with this certificate: - forwarding rule "ssl-rule" in "global": 192.168.3.5 Check: [GATEWAY]: Verify the DNS records for domain "test.org" associated with the SSL certificate "cert3". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3 [OK] [REASON] DNS records for domain test.org are correctly configured. All resolved IP addresses (192.168.3.5) point to the load balancer(s) associated with certificate cert3. [AUTOMATED STEP]: Check if the load balancer with certificate "cert3" is configured to listen on port 443. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3 [OK] [REASON] The SSL certificate "cert3" has forwarding rules configured for HTTPS (port 443) on all associated IP addresses. [AUTOMATED STEP]: Check for conflicting certificate map set on a target proxy for certificate "cert3". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3 [OK] [REASON] All target proxies associated with the SSL certificate "cert3" do not have a certificate map. [AUTOMATED STEP]: Check if the SSL certificate "cert3" associated resources has been updated recently. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3 [UNCERTAIN] [REASON] The SSL certificate "cert3" has recently had associated resources modified. This might affect DNS validation. Details are below: Forwarding rule ssl-rule in scope global has been modified at 2024-10-18T14:34:17.798905Z. Target proxy ssl-proxy in scope global has been modified at 2024-10-18T14:34:17.798905Z. [REMEDIATION] DNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If cert3 was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete. [END]: Finalize SSL Certificate diagnostics. certificate_name=unused-cert4,project_id=gcpdiag-lb3-aaaa lb/ssl-certificates: This runbook diagnoses and troubleshoots issues with SSL certificates. The supported certificates are Google-managed classic certificates attached to load balancers. It helps identify and resolve common problems that prevent certificates from provisioning or functioning correctly. Key Investigation Area: - Certificate Status: - Checks the certificate's provisioning status and identifies any failed domains. - Domain Validation: - Verifies DNS configuration for each domain, ensuring proper A/AAAA records and the absence of conflicting records. - Load Balancer Configuration: - Confirms the certificate is correctly attached to a target proxy and associated with a forwarding rule using port 443. - Conflicting resources: - Ensures no certificate map is attached to the target proxy, which can interfere with Google-managed certificates. - Provisioning Time: - Checks Cloud Logging to determine when the certificate was attached and allows sufficient time for propagation. [START]: Verify the existence and status of the SSL certificate "unused-cert4". [INFO]: name: unused-cert4 - gcpdiag-lb3-aaaa [FAIL] [REASON] The Google-managed SSL certificate "unused-cert4" is not in ACTIVE state. [GATEWAY]: Analyze the status of the Google-managed SSL certificate "unused-cert4". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/unused-cert4 [UNCERTAIN] [REASON] The Google-managed SSL certificate "unused-cert4" is in the PROVISIONING state. Further investigation into the status of each domain is necessary.. [GATEWAY]: Check the status of each individual domain associated with the SSL certificate "unused-cert4". [AUTOMATED STEP]: Analyze domains in FAILED_NOT_VISIBLE state for certificate "unused-cert4". - projects/gcpdiag-lb3-aaaa/global/sslCertificates/unused-cert4 [FAIL] [REASON] The following domains are in FAILED_NOT_VISIBLE state: second.test.org, test.org for SSL certificate "unused-cert4". This usually means the domain's DNS records are not correctly pointing to the load balancer. [GATEWAY]: Verify the SSL certificate "unused-cert4" is attached to a target proxy. - projects/gcpdiag-lb3-aaaa/global/sslCertificates/unused-cert4 [FAIL] [REASON] The SSL certificate "unused-cert4" is not attached to any target proxies. Attach the certificate to a target proxy. [REMEDIATION] Follow the documentation to attach the certificate to a target proxy: [END]: Finalize SSL Certificate diagnostics. ================================================ FILE: gcpdiag/runbook/lb/snapshots/unhealthy_backends.txt ================================================ backend_service_name=web-backend-service,project_id=gcpdiag-lb2-aaaa lb/unhealthy-backends: Load Balancer Unhealthy Backends Analyzer. This runbook helps investigate why backends in a load balancer are unhealthy. It confirms and summarizes the current health status of the backends, aiding in identifying any unhealthy instances. Key Investigation Areas: - Firewalls: - Verifies if firewall rules are properly configured to allow health check traffic. - Port Configuration: - Checks if health check sends probe requests to the different port than serving port. This may be intentional or a potential configuration error, and the runbook will provide guidance on the implications. - Protocol Configuration: - Checks if health check uses the same protocol as backend service. This may be intentional or a potential configuration error, and the runbook will provide guidance on the implications. - Logging: - Checks if health check logging is enabled to aid in troubleshooting. - Health Check Logs (if enabled): - Analyzes the latest health check logs to identify the specific reasons for backend unhealthiness: - Timeouts: Identifies if the backend is timing out and provides potential causes and remediation steps. - Unhealthy: Indicates that the backend is reachable but doesn't meet the health check's criteria. It provides guidance on the expected health check behavior and suggests configuration checks. - Unknown: Explains the potential reasons for the "UNKNOWN" health state and suggests actions like adjusting timeouts or checking for Google Cloud outages. - Past Health Check Success: - Checks if the health check has worked successfully in the past to determine if the issue is recent or ongoing. - VM Performance: - Checks if the instances performance is degraded - disks, memory and cpu utilization are being checked. [START]: Analyze unhealthy backends for backend service "web-backend-service" in scope "global". - gcpdiag-lb2-aaaa/web-backend-service [FAIL] [REASON] The backend service web-backend-service in the global scope has unhealthy backends. Group https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example has 2/2 unhealthy backends The backend service web-backend-service uses the following health check: http-basic-check. The health check is using HTTP protocol, and it is set to: - send a prober requests to the / path on port 80 - expect a response with an HTTP 200 (OK) status code The health check is configured with the following timing and threshold settings: - **Check Interval:** A health check is performed every 5 seconds. - **Timeout:** The prober will wait up to 5 seconds for a response. - **Healthy Threshold:** It takes 2 consecutive successes for a backend to be considered healthy. - **Unhealthy Threshold:** It takes 2 consecutive failures for a backend to be considered unhealthy. [GATEWAY]: Verify health check logging enabled for backend service "web-backend-service" in scope "global". - gcpdiag-lb2-aaaa/http-basic-check [OK] [REASON] Health check logging is enabled for health check projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check. [GATEWAY]: Analyze latest health check log for backend service "web-backend-service" in scope "global". [AUTOMATED STEP]: Analyze TIMEOUT health check logs for backend service "web-backend-service" in scope "global". - gcpdiag-lb2-aaaa/web-backend-service [UNCERTAIN] [REASON] Health check logs for backend service projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service show the detailed health state "TIMEOUT". Responses received from backends: "HTTP response: , Error: Timeout waiting for connect" The backend might be timing out because: 1. The application is overloaded and taking too long to respond. 2. The backend service or health check timeout is too low. 3. Connection to the endpoint cannot be established - the backend instance has crashed or is otherwise unresponsive. The following responses were received from your backends: "HTTP response: , Error: Timeout waiting for connect" [REMEDIATION] 1. Make sure that the backend service timeout (current value: 30s) and health check timeout (current value: 5s) are appropriately configured to accommodate the application's expected response time. 2. Investigate the application's configuration to ensure it is correctly handling health check probe requests. The health check is using HTTP protocol, and it is set to: - send a prober requests to the / path on port 80 - expect a response with an HTTP 200 (OK) status code 3. Check if firewall rules or iptables configurations are blocking the health check probes from reaching the backend instances, resulting in timeouts. [AUTOMATED STEP]: Check past health check success for backend service "web-backend-service" in scope "global". - gcpdiag-lb2-aaaa/web-backend-service [UNCERTAIN] [REASON] https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example: Backends transitioned to an unhealthy state at 2024-08-13T09:20:22.666336211Z [REMEDIATION] Check the logs and monitoring metrics for the instances associated with backend service projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service, focusing on recent timeframes to see if there were any errors, crashes, or resource exhaustion issues. Also inspect any application-specific logs for errors or warnings. [AUTOMATED STEP]: Validate port configuration for backend service "web-backend-service" in scope "global". - gcpdiag-lb2-aaaa/web-backend-service [UNCERTAIN] [REASON] The load balancer is conducting health checks on port 88 for the backend service projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service. However, this health check port differs from the port used by the load balancer for serving traffic on some backend instance groups. The backend service is configured to use the "http" port, which is then translated to a specific port number based on the "http" port mapping within each backend instance group. Affected backends: projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example - port name "http" translates to port 80 This configuration can be problematic unless the load balancer has been configured to use a different port for health checks purposefully. [REMEDIATION] 1. **Verify Intent:** Confirm if the health check port `88` is *meant* to be different from the serving port defined by "http" on the backends. 2. **Test Port on Backend VMs:** Check if port `88` is listening on an instance from the affected groups. Run this command from your local machine/Cloud Shell: ```bash gcloud compute ssh [INSTANCE_NAME] --zone [ZONE] --project gcpdiag-lb2-aaaa --command="sudo ss -tlnp | grep ':88'" ``` * Output showing `LISTEN` indicates the port is open and your application is likely listening. * No output suggests the port is not in a listening state on that VM. 3. **Adjust Configuration:** * **If Mismatch is Unintentional:** Align the load balancer's health check port in the backend service `projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service` to match the actual port number used by "http" in the instance groups. * **If Mismatch is Intentional:** Ensure your application on the VMs is correctly configured to listen on port `88`. * **If Port Not Listening:** Troubleshoot your application on the VM to ensure it's running and bound to port `88`. Check the VM's local firewall as well. If the health check port `88` is meant to be different from the serving port (e.g., a dedicated management/health endpoint), confirm that your application is correctly configured to listen on the health check port. [AUTOMATED STEP]: Validate protocol configuration for backend service "web-backend-service" in scope "global". - gcpdiag-lb2-aaaa/web-backend-service [OK] [REASON] The load balancer is performing health checks using the same protocol (HTTP) used for serving traffic on backend service projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service. This is the standard configuration. [AUTOMATED STEP]: Verify firewall rules allow health checks for backend service "web-backend-service" in scope "global". - gcpdiag-lb2-aaaa/web-backend-service [FAIL] [REASON] Health check firewall is not configured The health checks are currently failing due to a misconfigured firewall. This prevents Google Cloud probers from connecting to the backends, causing the load balancer to consider them unhealthy. [REMEDIATION] Update the firewall rules to allow inbound traffic from the Google Cloud health check IP ranges (found at ) to the backends. [COMPOSITE STEP]: Check VMs performance for unhealthy backends in backend service "web-backend-service" in scope "global". [AUTOMATED STEP]: Verify VM memory utilization is within optimal levels. - gcpdiag-lb2-aaaa/vm-pn3l [FAIL] [REASON] Memory utilization on this VM has reached levels that may compromise its VM application performance. [REMEDIATION] Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-lb2-aaaa/vm-pn3l [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels. - gcpdiag-lb2-aaaa/vm-pn3l [FAIL] [REASON] Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels. - gcpdiag-lb2-aaaa/vm-pn3l [FAIL] [REASON] CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. [REMEDIATION] Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: [END]: Finalize unhealthy backends diagnostics. backend_service_name=backend-service-2,project_id=gcpdiag-lb2-aaaa,region=europe-west4 lb/unhealthy-backends: Load Balancer Unhealthy Backends Analyzer. This runbook helps investigate why backends in a load balancer are unhealthy. It confirms and summarizes the current health status of the backends, aiding in identifying any unhealthy instances. Key Investigation Areas: - Firewalls: - Verifies if firewall rules are properly configured to allow health check traffic. - Port Configuration: - Checks if health check sends probe requests to the different port than serving port. This may be intentional or a potential configuration error, and the runbook will provide guidance on the implications. - Protocol Configuration: - Checks if health check uses the same protocol as backend service. This may be intentional or a potential configuration error, and the runbook will provide guidance on the implications. - Logging: - Checks if health check logging is enabled to aid in troubleshooting. - Health Check Logs (if enabled): - Analyzes the latest health check logs to identify the specific reasons for backend unhealthiness: - Timeouts: Identifies if the backend is timing out and provides potential causes and remediation steps. - Unhealthy: Indicates that the backend is reachable but doesn't meet the health check's criteria. It provides guidance on the expected health check behavior and suggests configuration checks. - Unknown: Explains the potential reasons for the "UNKNOWN" health state and suggests actions like adjusting timeouts or checking for Google Cloud outages. - Past Health Check Success: - Checks if the health check has worked successfully in the past to determine if the issue is recent or ongoing. - VM Performance: - Checks if the instances performance is degraded - disks, memory and cpu utilization are being checked. [START]: Analyze unhealthy backends for backend service "backend-service-2" in scope "europe-west4". - gcpdiag-lb2-aaaa/backend-service-2 [FAIL] [REASON] The backend service backend-service-2 in the europe-west4 scope has unhealthy backends. Group https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1 has 1/1 unhealthy backends The backend service backend-service-2 uses the following health check: tcp-basic-check-2. The health check is using TCP protocol, and it is set to: - send a prober requests on port 80 - expect a successful TCP handshake The health check is configured with the following timing and threshold settings: - **Check Interval:** A health check is performed every 5 seconds. - **Timeout:** The prober will wait up to 5 seconds for a response. - **Healthy Threshold:** It takes 2 consecutive successes for a backend to be considered healthy. - **Unhealthy Threshold:** It takes 2 consecutive failures for a backend to be considered unhealthy. [GATEWAY]: Verify health check logging enabled for backend service "backend-service-2" in scope "europe-west4". - gcpdiag-lb2-aaaa/tcp-basic-check-2 [OK] [REASON] Health check logging is enabled for health check projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/tcp-basic-check-2. [GATEWAY]: Analyze latest health check log for backend service "backend-service-2" in scope "europe-west4". [AUTOMATED STEP]: Analyze TIMEOUT health check logs for backend service "backend-service-2" in scope "europe-west4". - gcpdiag-lb2-aaaa/backend-service-2 [UNCERTAIN] [REASON] Health check logs for backend service projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2 show the detailed health state "TIMEOUT". Responses received from backends: "HTTP response: , Error: Timeout waiting for connect" The backend might be timing out because: 1. The application is overloaded and taking too long to respond. 2. The backend service or health check timeout is too low. 3. Connection to the endpoint cannot be established - the backend instance has crashed or is otherwise unresponsive. The following responses were received from your backends: "HTTP response: , Error: Timeout waiting for connect" [REMEDIATION] 1. Make sure that the backend service timeout (current value: 30s) and health check timeout (current value: 5s) are appropriately configured to accommodate the application's expected response time. 2. Investigate the application's configuration to ensure it is correctly handling health check probe requests. The health check is using TCP protocol, and it is set to: - send a prober requests on port 80 - expect a successful TCP handshake 3. Check if firewall rules or iptables configurations are blocking the health check probes from reaching the backend instances, resulting in timeouts. [AUTOMATED STEP]: Check past health check success for backend service "backend-service-2" in scope "europe-west4". - gcpdiag-lb2-aaaa/backend-service-2 [UNCERTAIN] [REASON] https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1: Backends transitioned to an unhealthy state at 2024-08-13T09:20:22.666336211Z [REMEDIATION] Check the logs and monitoring metrics for the instances associated with backend service projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2, focusing on recent timeframes to see if there were any errors, crashes, or resource exhaustion issues. Also inspect any application-specific logs for errors or warnings. [AUTOMATED STEP]: Validate port configuration for backend service "backend-service-2" in scope "europe-west4". - gcpdiag-lb2-aaaa/backend-service-2 [UNCERTAIN] [REASON] Backend service "backend-service-2" is a external Passthrough Load Balancer. These load balancers forward traffic to backends without changing the destination port, so there isn't a single "serving port" on the load balancer itself. The health check probes are sent to the port defined directly in the HealthCheck resource. The associated health check "tcp-basic-check-2" is configured to use port 80. [REMEDIATION] Please ensure that the backend instances (VMs or endpoints) are configured to accept and respond to health check probes specifically on port 80. The application running on the backends must be actively listening on this port (80) for the health checks to succeed, regardless of the ports used for actual application traffic. [AUTOMATED STEP]: Validate protocol configuration for backend service "backend-service-2" in scope "europe-west4". - gcpdiag-lb2-aaaa/backend-service-2 [OK] [REASON] The load balancer is performing health checks using the same protocol (TCP) used for serving traffic on backend service projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2. This is the standard configuration. [AUTOMATED STEP]: Verify firewall rules allow health checks for backend service "backend-service-2" in scope "europe-west4". - gcpdiag-lb2-aaaa/backend-service-2 [OK] [REASON] Firewall rules are correctly configured and are not blocking health check probes for backend service projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2. [COMPOSITE STEP]: Check VMs performance for unhealthy backends in backend service "backend-service-2" in scope "europe-west4". [AUTOMATED STEP]: Verify VM memory utilization is within optimal levels. - gcpdiag-lb2-aaaa/neg-vm [FAIL] [REASON] Memory utilization on this VM has reached levels that may compromise its VM application performance. [REMEDIATION] Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-lb2-aaaa/neg-vm [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels. - gcpdiag-lb2-aaaa/neg-vm [FAIL] [REASON] Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels. - gcpdiag-lb2-aaaa/neg-vm [FAIL] [REASON] CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. [REMEDIATION] Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: [END]: Finalize unhealthy backends diagnostics. ================================================ FILE: gcpdiag/runbook/lb/ssl_certificates.py ================================================ # Copyright 2024 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. """Module containing steps to analyze SSL certificate issues.""" from datetime import datetime, timedelta from typing import List, Union import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import config, runbook from gcpdiag.queries import apis, crm, dns, lb, logs from gcpdiag.runbook import op from gcpdiag.runbook.lb import flags TargetProxy = Union[lb.TargetHttpsProxy, lb.TargetSslProxy] class SslCertificates(runbook.DiagnosticTree): """This runbook diagnoses and troubleshoots issues with SSL certificates. The supported certificates are Google-managed classic certificates attached to load balancers. It helps identify and resolve common problems that prevent certificates from provisioning or functioning correctly. Key Investigation Area: - Certificate Status: - Checks the certificate's provisioning status and identifies any failed domains. - Domain Validation: - Verifies DNS configuration for each domain, ensuring proper A/AAAA records and the absence of conflicting records. - Load Balancer Configuration: - Confirms the certificate is correctly attached to a target proxy and associated with a forwarding rule using port 443. - Conflicting resources: - Ensures no certificate map is attached to the target proxy, which can interfere with Google-managed certificates. - Provisioning Time: - Checks Cloud Logging to determine when the certificate was attached and allows sufficient time for propagation. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True, }, flags.CERTIFICATE_NAME: { 'type': str, 'help': 'The name of the SSLcertificate that you want to investigate', 'required': True, }, } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" project_id = op.get(flags.PROJECT_ID) certificate_name = op.get(flags.CERTIFICATE_NAME) # Instantiate your step classes start = SslCertificatesStart() start.project_id = project_id start.certificate_name = certificate_name # add them to your tree self.add_start(start) # you can create custom steps to define unique logic cert_status = AnalyzeCertificateStatus() cert_status.project_id = project_id cert_status.certificate_name = certificate_name # Describe the step relationships self.add_step(parent=start, child=cert_status) analyze_domain_statuses = AnalyzeDomainStatuses() analyze_domain_statuses.project_id = project_id analyze_domain_statuses.certificate_name = certificate_name self.add_step(parent=cert_status, child=analyze_domain_statuses) # Ending your runbook self.add_end(SslCertificatesEnd()) class SslCertificatesStart(runbook.StartStep): """Verify the existence type and status of the SSL certificate.""" template = 'ssl_certificates::confirmation' project_id: str certificate_name: str @property def name(self): return (f'Verify the existence and status of the SSL certificate' f' "{self.certificate_name}".') def execute(self): """Verifies the existence type and status of the SSL certificate.""" proj = crm.get_project(self.project_id) if not apis.is_enabled(self.project_id, 'compute'): op.add_skipped(proj, reason='Compute API is not enabled') return # Early exit if Compute API is disabled try: op.info(f'name: {self.certificate_name}') certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) except googleapiclient.errors.HttpError: op.add_skipped( proj, reason=op.prep_msg( op.SKIPPED_REASON, name=self.certificate_name, project_id=self.project_id, ), ) return # Early exit if certificate doesn't exist if certificate.type == 'SELF_MANAGED': op.add_skipped( proj, reason=op.prep_msg(op.SKIPPED_REASON_ALT1, name=self.certificate_name), ) return # Early exit if certificate is not Google-managed if certificate.status == 'ACTIVE': op.add_ok( proj, reason=op.prep_msg(op.SUCCESS_REASON, name=self.certificate_name), ) else: op.add_failed(proj, reason=op.prep_msg(op.FAILURE_REASON, name=self.certificate_name), remediation='') class AnalyzeCertificateStatus(runbook.Gateway): """Analyze the status of the Google-managed certificate.""" template = 'ssl_certificates::cert_status' project_id: str certificate_name: str @property def name(self): return (f'Analyze the status of the Google-managed SSL certificate' f' "{self.certificate_name}".') def execute(self): """Checks the status of the Google-managed certificate.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) op.add_metadata('certificateStatus', certificate.status) if certificate.status == 'PROVISIONING_FAILED_PERMANENTLY': op.add_failed( certificate, reason=op.prep_msg(op.FAILURE_REASON, name=self.certificate_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) return elif certificate.status in ('PROVISIONING_FAILED', 'PROVISIONING'): op.add_uncertain( certificate, reason=op.prep_msg( op.UNCERTAIN_REASON, name=self.certificate_name, status=certificate.status, context=('Further investigation into the status of each domain is' ' necessary.'), ), ) return elif certificate.status == 'RENEWAL_FAILED': op.add_uncertain( certificate, reason=op.prep_msg( op.UNCERTAIN_REASON, name=self.certificate_name, status=certificate.status, context=( 'This typically occurs when the load balancer or DNS' ' configuration has issues, preventing the automatic renewal' ' of the Google-managed certificate.'), ), ) return op.add_ok( certificate, reason=op.prep_msg( op.SUCCESS_REASON, name=self.certificate_name, status=certificate.status, ), ) class AnalyzeDomainStatuses(runbook.Gateway): """Check the status of each individual domain associated with the SSL certificate.""" template = 'ssl_certificates::domain_status' project_id: str certificate_name: str @property def name(self): return ( f'Check the status of each individual domain associated with the SSL' f' certificate "{self.certificate_name}".') def execute(self): """Checks the status of each individual domain associated with the SSL certificate.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) failed_not_visible_domains = [] failed_caa_domains = [] failed_rate_limited_domains = [] provisioning_domains = [] for domain, status in certificate.domain_status.items(): if status == 'FAILED_NOT_VISIBLE': failed_not_visible_domains.append(domain) if status in ('FAILED_CAA_CHECKING', 'FAILED_CAA_FORBIDDEN'): failed_caa_domains.append(domain) if status == 'FAILED_RATE_LIMITED': failed_rate_limited_domains.append(domain) if status == 'PROVISIONING': provisioning_domains.append(domain) if failed_not_visible_domains: step = AnalyzeFailedNotVisibleDomains() step.project_id = self.project_id step.domains = failed_not_visible_domains step.certificate_name = self.certificate_name self.add_child(step) if failed_caa_domains: step = AnalyzeFailedCaaCheck() step.project_id = self.project_id step.domains = failed_caa_domains step.certificate_name = self.certificate_name self.add_child(step) if failed_rate_limited_domains: step = AnalyzeRateLimitedDomains() step.project_id = self.project_id step.domains = failed_rate_limited_domains step.certificate_name = self.certificate_name self.add_child(step) if provisioning_domains: step = AnalyzeProvisioningDomains() step.project_id = self.project_id step.domains = provisioning_domains step.certificate_name = self.certificate_name self.add_child(step) if failed_not_visible_domains or provisioning_domains: step = CheckCertificateAttachment() step.project_id = self.project_id step.certificate_name = self.certificate_name self.add_child(step) if (not failed_not_visible_domains and not failed_caa_domains and not failed_rate_limited_domains and not provisioning_domains): op.add_ok( certificate, reason=op.prep_msg(op.SUCCESS_REASON, name=self.certificate_name), ) class AnalyzeFailedNotVisibleDomains(runbook.Step): """Analyze domains in "FAILED_NOT_VISIBLE" state.""" template = 'ssl_certificates::failed_not_visible_domains' project_id: str domains: List[str] certificate_name: str @property def name(self): return (f'Analyze domains in FAILED_NOT_VISIBLE' f' state for certificate "{self.certificate_name}".') def execute(self): """Analyzes domains in "FAILED_NOT_VISIBLE" state.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) op.add_failed( certificate, reason=op.prep_msg( op.FAILURE_REASON, domains=', '.join(self.domains), name=self.certificate_name, ), remediation='', ) op.add_metadata('failedNotVisibleDomains', self.domains) class AnalyzeProvisioningDomains(runbook.Step): """Analyze domains in "PROVISIONING" state.""" template = 'ssl_certificates::provisioning_domains' project_id: str domains: List[str] certificate_name: str @property def name(self): return (f'Analyze domains in PROVISIONING state' f' for certificate "{self.certificate_name}".') def execute(self): """Analyzes domains in "PROVISIONING" state.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) op.add_uncertain( certificate, reason=op.prep_msg( op.UNCERTAIN_REASON, domains=', '.join(self.domains), name=self.certificate_name, ), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION), ) op.add_metadata('provisioningDomains', self.domains) class AnalyzeRateLimitedDomains(runbook.Step): """Analyze domains in "FAILED_RATE_LIMITED" state.""" template = 'ssl_certificates::failed_rate_limited_domains' project_id: str domains: List[str] certificate_name: str @property def name(self): return (f'Analyze domains in' f' FAILED_RATE_LIMITED state for certificate' f' "{self.certificate_name}".') def execute(self): """Analyzes domains in "FAILED_RATE_LIMITED" state.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) op.add_failed( certificate, reason=op.prep_msg(op.FAILURE_REASON, domains=', '.join(self.domains), name=self.certificate_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) op.add_metadata('failedRateLimitedDomains', self.domains) class AnalyzeFailedCaaCheck(runbook.Step): """Analyze domains in "FAILED_CAA_CHECKING" or "FAILED_CAA_FORBIDDEN" state.""" template = 'ssl_certificates::failed_caa_check_domains' project_id: str domains: List[str] certificate_name: str @property def name(self): return (f'Analyze domains in' f' FAILED_CAA_CHECKING or FAILED_CAA_FORBIDDEN state for' f' certificate "{self.certificate_name}".') def execute(self): """Analyzes domains in "FAILED_CAA_CHECKING" or "FAILED_CAA_FORBIDDEN" state.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) op.add_failed( certificate, reason=op.prep_msg(op.FAILURE_REASON, domains=', '.join(self.domains), name=self.certificate_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) op.add_metadata('failedCaaCheckDomains', self.domains) class CheckCertificateAttachment(runbook.Gateway): """Check if the SSL certificate is attached to a target proxy. This target proxy needs to be in use by a forwarding rule for the provisioning to succeed. """ template = 'ssl_certificates::check_certificate_attachment' project_id: str certificate_name: str @property def name(self): return (f'Verify the SSL certificate "{self.certificate_name}" is attached' f' to a target proxy.') def execute(self): """Checks if the SSL certificate is attached to a target proxy.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) try: target_https_proxies = lb.get_target_https_proxies(self.project_id) target_ssl_proxies = lb.get_target_ssl_proxies(self.project_id) except googleapiclient.errors.HttpError as e: op.add_skipped( certificate, reason=f'Target proxies could not be fetched: {e}', ) return target_proxies_with_certificate = [] for target_proxy in target_https_proxies + target_ssl_proxies: if certificate.self_link in target_proxy.ssl_certificates: target_proxies_with_certificate.append(target_proxy) if not target_proxies_with_certificate: op.add_failed( certificate, reason=op.prep_msg(op.FAILURE_REASON, name=self.certificate_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) return try: forwarding_rules = lb.get_forwarding_rules(self.project_id) except ValueError as e: op.add_skipped( certificate, reason=f'Target proxies could not be fetched: {e}', ) return forwarding_rules_by_target_proxy = {} for fr in forwarding_rules: forwarding_rules_by_target_proxy.setdefault(fr.target, []).append(fr) # Filter out target proxies that are not in use by any forwarding rules used_target_proxies_with_certificate = [ tp for tp in target_proxies_with_certificate if forwarding_rules_by_target_proxy.get(tp.full_path) ] if not used_target_proxies_with_certificate: op.add_failed( certificate, reason= ('The SSL certificate is attached to target proxies:' f" {', '.join([tp.full_path for tp in target_proxies_with_certificate])} that" ' are not in use by any forwarding rules.'), remediation='Please attach the target proxies to forwarding rules', ) return # Gather forwarding rules that use target proxies with the given certificate forwarding_rules_with_certificate = [] for tp in used_target_proxies_with_certificate: rules = forwarding_rules_by_target_proxy.get(tp.full_path) if rules: forwarding_rules_with_certificate.extend(rules) op.add_ok( certificate, reason=op.prep_msg( op.SUCCESS_REASON, name=self.certificate_name, target_proxies=', '.join( [tp.full_path for tp in used_target_proxies_with_certificate]), ), ) for domain in certificate.domain_status.keys(): if certificate.domain_status[domain] != 'ACTIVE': verify_dns_records = VerifyDnsRecords() verify_dns_records.project_id = self.project_id verify_dns_records.domain = domain verify_dns_records.certificate_name = self.certificate_name verify_dns_records.forwarding_rules_with_certificate = ( forwarding_rules_with_certificate) self.add_child(verify_dns_records) verify_forwarding_rules_port = VerifyForwardingRulesPort() verify_forwarding_rules_port.project_id = self.project_id verify_forwarding_rules_port.certificate_name = self.certificate_name verify_forwarding_rules_port.forwarding_rules_with_certificate = ( forwarding_rules_with_certificate) self.add_child(verify_forwarding_rules_port) verify_no_certificate_map_conflict = VerifyNoCertificateMapConflict() verify_no_certificate_map_conflict.project_id = self.project_id verify_no_certificate_map_conflict.certificate_name = self.certificate_name verify_no_certificate_map_conflict.target_proxies_with_certificate = ( target_proxies_with_certificate) self.add_child(verify_no_certificate_map_conflict) check_provisioning_time = CheckProvisioningTime() check_provisioning_time.project_id = self.project_id check_provisioning_time.certificate_name = self.certificate_name check_provisioning_time.target_proxies_with_certificate = ( target_proxies_with_certificate) check_provisioning_time.forwarding_rules_with_certificate = ( forwarding_rules_with_certificate) self.add_child(check_provisioning_time) class VerifyDnsRecords(runbook.Gateway): """Check the DNS records for specific domain associated with the SSL certificate.""" template = 'ssl_certificates::verify_dns_records' project_id: str forwarding_rules_with_certificate: List[lb.ForwardingRules] domain: str certificate_name: str @property def name(self): return ( f'Verify the DNS records for domain "{self.domain}" associated with the' f' SSL certificate "{self.certificate_name}".') def execute(self): certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) ip_addresses = dns.find_dns_records(self.domain) op.add_metadata('domain', self.domain) op.add_metadata('domain_to_ip_addresses', ip_addresses) # Group forwarding rules by IP address frs_by_ip = {} fr_ip_message = '' for fr in self.forwarding_rules_with_certificate: frs_by_ip.setdefault(fr.ip_address, []).append(fr) fr_ip_message += ( f'- forwarding rule "{fr.name}" in "{fr.region}": {fr.ip_address}\n') # Check which IP addresses point to the load balancer ip_addresses_pointing_to_lb = [] unresolved_ip_addresses = [] for ip_address in ip_addresses: if frs_by_ip.get(ip_address): ip_addresses_pointing_to_lb.append(ip_address) else: unresolved_ip_addresses.append(ip_address) if ip_addresses_pointing_to_lb and not unresolved_ip_addresses: op.add_ok( certificate, reason=op.prep_msg( op.SUCCESS_REASON, domain=self.domain, ip_addresses=', '.join(ip_addresses_pointing_to_lb), name=self.certificate_name, ), ) elif ip_addresses_pointing_to_lb and unresolved_ip_addresses: op.add_uncertain( certificate, reason=op.prep_msg( op.UNCERTAIN_REASON, domain=self.domain, name=self.certificate_name, unresolved_ip_addresses=', '.join(unresolved_ip_addresses), resolved_ip_addresses=', '.join(ip_addresses_pointing_to_lb), ), remediation=op.prep_msg( op.UNCERTAIN_REMEDIATION, domain=self.domain, fr_ip_message=fr_ip_message, name=self.certificate_name, ), ) elif unresolved_ip_addresses: op.add_failed( certificate, reason=op.prep_msg( op.FAILURE_REASON, domain=self.domain, unresolved_ip_addresses=', '.join(unresolved_ip_addresses), name=self.certificate_name, ), remediation=op.prep_msg( op.FAILURE_REMEDIATION, domain=self.domain, fr_ip_message=fr_ip_message, name=self.certificate_name, ), ) else: op.add_failed( certificate, reason=op.prep_msg(op.FAILURE_REASON_ALT1, domain=self.domain), remediation=op.prep_msg( op.FAILURE_REMEDIATION, domain=self.domain, fr_ip_message=fr_ip_message, name=self.certificate_name, ), ) class VerifyForwardingRulesPort(runbook.Step): """Checks if the load balancer is configured to listen on port 443. More specifically, check if all IP addresses associated with the certificate have forwarding rules that listen on port 443 """ template = 'ssl_certificates::verify_forwarding_rules_port' project_id: str forwarding_rules_with_certificate: List[lb.ForwardingRules] certificate_name: str @property def name(self): return (f'Check if the load balancer with certificate' f' "{self.certificate_name}" is configured to listen on port 443.') def execute(self): """Checks if the load balancer is configured to listen on port 443.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) # Group forwarding rules by IP address frs_by_ip = {} for fr in self.forwarding_rules_with_certificate: frs_by_ip.setdefault(fr.ip_address, []).append(fr) misconfigured_entities = [] # For each IP address check if the lb is configured to listen on port 443 for ip_address, frs in frs_by_ip.items(): if not any(self.is_port_in_range(443, fr.port_range) for fr in frs): misconfigured_entities.append( 'The following forwarding rules with certificate' f' {certificate.name}: \n' f" {', '.join([fr.full_path for fr in frs])} \n use IP address" f' {ip_address} but none of them listen on port 443. \n') if misconfigured_entities: op.add_failed( certificate, reason=op.prep_msg( op.FAILURE_REASON, misconfigured_entities='\n'.join(misconfigured_entities), ), remediation=op.prep_msg(op.FAILURE_REMEDIATION, name=self.certificate_name), ) else: op.add_ok( certificate, reason=op.prep_msg(op.SUCCESS_REASON, name=self.certificate_name), ) def is_port_in_range(self, port: int, port_range: str): try: start, end = map(int, port_range.split('-')) return start <= port <= end except ValueError: # Handle invalid port range format return False class VerifyNoCertificateMapConflict(runbook.Step): """Checks for conflicting certificate map set on a target proxy.""" template = 'ssl_certificates::verify_no_certificate_map_conflict' project_id: str target_proxies_with_certificate: List[TargetProxy] certificate_name: str @property def name(self): return (f'Check for conflicting certificate map set on a target proxy for' f' certificate "{self.certificate_name}".') def execute(self): """Checks for conflicting certificate map set on a target proxy.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) conflicting_target_proxies = [] for target_proxy in self.target_proxies_with_certificate: if target_proxy.certificate_map: conflicting_target_proxies.append(target_proxy) if conflicting_target_proxies: target_proxy_conflicts = [ f'Target Proxy: {target_proxy.full_path} has certificate map' f' {target_proxy.certificate_map} together with classic SSL' f" certificates {', '.join(target_proxy.ssl_certificates)}" for target_proxy in conflicting_target_proxies ] op.add_failed( certificate, reason=op.prep_msg( op.FAILURE_REASON, conflicting_target_proxies='\n'.join(target_proxy_conflicts), ), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_ok( certificate, reason=op.prep_msg(op.SUCCESS_REASON, name=self.certificate_name), ) class CheckProvisioningTime(runbook.Step): """Checks if the SSL certificate associated resources has been updated recently.""" template = 'ssl_certificates::check_provisioning_time' project_id: str target_proxies_with_certificate: List[TargetProxy] forwarding_rules_with_certificate: List[lb.ForwardingRules] certificate_name: str @property def name(self): return (f'Check if the SSL certificate "{self.certificate_name}" associated' f' resources has been updated recently.') def execute(self): """Checks if the SSL certificate associated resources has been updated recently.""" certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name) recently_changed = [] for forwarding_rule in self.forwarding_rules_with_certificate: filter_str = """resource.type="gce_forwarding_rule" resource.labels.region="{}" resource.labels.forwarding_rule_id="{}" protoPayload.methodName=~"(forwardingRules|globalForwardingRules).(patch|update|insert)" """.format(forwarding_rule.region, forwarding_rule.id) serial_log_entries = logs.realtime_query( project_id=self.project_id, filter_str=filter_str, start_time=datetime.now() - timedelta(days=1), end_time=datetime.now(), ) if serial_log_entries: last_log = serial_log_entries.pop() timestamp = get_path(last_log, 'timestamp') recently_changed.append( f'Forwarding rule {forwarding_rule.name} in scope' f' {forwarding_rule.region} has been modified at {timestamp}.') for target_proxy in self.target_proxies_with_certificate: if target_proxy.region != 'global': # For now support only global target HTTPS proxies in this step # - there is no monitoring type for regional target proxies continue if isinstance(target_proxy, lb.TargetHttpsProxy): filter_str = """resource.type="gce_target_https_proxy" resource.labels.target_https_proxy_id="{}" protoPayload.methodName=~"targetHttpsProxies.(patch|update|insert|setSslCertificates)" """.format(target_proxy.id) elif isinstance(target_proxy, lb.TargetSslProxy): filter_str = """resource.type="gce_target_ssl_proxy" resource.labels.target_ssl_proxy_name="{}" resource.labels.region="{}" protoPayload.methodName=~"targetSslProxies.(patch|update|insert|setSslCertificates)" """.format(target_proxy.region, target_proxy.name) else: # This should never happen raise ValueError(f'Unsupported target proxy type: {type(target_proxy)}') serial_log_entries = logs.realtime_query( project_id=self.project_id, filter_str=filter_str, start_time=datetime.now() - timedelta(days=1), end_time=datetime.now(), ) if serial_log_entries: last_log = serial_log_entries.pop() timestamp = get_path(last_log, 'timestamp') recently_changed.append( f'Target proxy {target_proxy.name} in scope' f' {target_proxy.region} has been modified at {timestamp}.') if recently_changed: op.add_uncertain( certificate, reason=op.prep_msg( op.UNCERTAIN_REASON, recently_changed='\n'.join(recently_changed), name=self.certificate_name, ), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION, name=self.certificate_name), ) else: op.add_ok( certificate, reason=op.prep_msg( op.SUCCESS_REASON, name=self.certificate_name, ), ) class SslCertificatesEnd(runbook.EndStep): """Concludes the SSL Certificate diagnostics process.""" def execute(self): """Finalize SSL Certificate diagnostics.""" if not config.get(flags.INTERACTIVE_MODE): response = op.prompt( kind=op.CONFIRMATION, message='Are you satisfied with the SSL Certificate troubleshooting?', ) if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/lb/ssl_certificates_test.py ================================================ # Copyright 2024 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. """Test class for lb/SslCertificate""" from gcpdiag import config from gcpdiag.runbook import lb, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = lb runbook_name = 'lb/ssl-certificates' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-lb3-aaaa', 'certificate_name': 'cert1', }, { 'project_id': 'gcpdiag-lb3-aaaa', 'certificate_name': 'cert2', }, { 'project_id': 'gcpdiag-lb3-aaaa', 'certificate_name': 'cert3', }, { 'project_id': 'gcpdiag-lb3-aaaa', 'certificate_name': 'unused-cert4', }] ================================================ FILE: gcpdiag/runbook/lb/templates/latency.jinja ================================================ {% block backend_latency_success_reason%} The forwarding rule has a backend latency of {average_latency} ms. This is less than the threshold value of {threshold} ms. {% endblock backend_latency_success_reason %} {% block backend_latency_failure_reason%} The forwarding rule has a backend latency of {average_latency} ms. This is higher than the threshold value of {threshold} ms. {% endblock backend_latency_failure_reason %} {% block backend_latency_failure_remediation%} Investigate the increased backend latency. Check the health and performance of the backend instances, examining metrics such as CPU utilization, memory usage, and disk I/O. {% endblock backend_latency_failure_remediation %} {% block request_count_success_reason%} The forwarding rule has an average request count of {average_request_count} requests/s in the last 15 minutes. This is less than the threshold value of {threshold}. {% endblock request_count_success_reason %} {% block request_count_failure_reason%} The forwarding rule has an average request count of {average_request_count} requests/s in the last 15 minutes. This is higher than the threshold value of {threshold}. {% endblock request_count_failure_reason %} {% block request_count_failure_remediation%} The high request count suggests the backend may be overloaded. Consider scaling up the backend by adding more instances or increasing the resources of existing instances. {% endblock request_count_failure_remediation %} {% block error_rate_success_reason%} The forwarding rule has an average error rate of {average_error_rate}% in the last 15 minutes. This is less than the threshold value of {threshold}%. {% endblock error_rate_success_reason %} {% block error_rate_failure_reason%} The forwarding rule has an average error rate of {average_error_rate}% in the last 15 minutes. This is higher than the threshold value of {threshold}%. {% endblock error_rate_failure_reason %} {% block error_rate_failure_remediation%} A high error rate indicates potential problems with the backend service. Check the logs for 5xx errors and investigate the root cause. Common issues include application errors and resource exhaustion. If the errors correlate with specific requests, examine those requests for patterns or anomalies. {% endblock error_rate_failure_remediation %} ================================================ FILE: gcpdiag/runbook/lb/templates/ssl_certificates.jinja ================================================ {% block confirmation_success_reason %} The SSL certificate "{name}" is in ACTIVE state. {% endblock confirmation_success_reason %} {% block confirmation_skipped_reason %} The SSL certificate "{name}" does not exist or project {project_id} does not exist. {% endblock confirmation_skipped_reason %} {% block confirmation_skipped_reason_a1 %} The certificate "{name}" is self-managed. Self-managed certificates require manual handling for obtaining, provisioning, and renewal. This diagnostic check supports only Google-managed certificates. {% endblock confirmation_skipped_reason_a1 %} {% block confirmation_failure_reason %} The Google-managed SSL certificate "{name}" is not in ACTIVE state. {% endblock confirmation_failure_reason %} {% block cert_status_success_reason %} The Google-managed SSL certificate "{name}" is in {status} state. {% endblock cert_status_success_reason %} {% block cert_status_failure_reason %} The Google-managed SSL certificate "{name}" is in the PROVISIONING_FAILED_PERMANENTLY state. This is a non-recoverable state. {% endblock cert_status_failure_reason %} {% block cert_status_failure_remediation %} Recreate the certificate. Refer to the documentation for instructions on creating SSL certificates. {% endblock cert_status_failure_remediation %} {% block cert_status_uncertain_reason %} The Google-managed SSL certificate "{name}" is in the {status} state. {context}. {% endblock cert_status_uncertain_reason %} {% block domain_status_success_reason %} All domains associated with the SSL certificate "{name}" are in the ACTIVE state. Domain provisioning appears successful. {% endblock domain_status_success_reason %} {% block failed_not_visible_domains_failure_reason %} The following domains are in FAILED_NOT_VISIBLE state: {domains} for SSL certificate "{name}". This usually means the domain's DNS records are not correctly pointing to the load balancer. {% endblock failed_not_visible_domains_failure_reason %} {% block provisioning_domains_uncertain_reason %} The following domains are in PROVISIONING state: {domains} for SSL certificate "{name}". {% endblock provisioning_domains_uncertain_reason %} {% block provisioning_domains_uncertain_remediation %} The provisioning process can take some time. The diagnostic process will continue checking other potential issues while the domains are provisioning. {% endblock provisioning_domains_uncertain_remediation %} {% block failed_rate_limited_domains_failure_reason %} The following domains are in FAILED_RATE_LIMITED state: {domains} for SSL certificate "{name}". This indicates rate limiting by the Certificate Authority. This likely means the allowed number of certificate requests in a short period was exceeded. {% endblock failed_rate_limited_domains_failure_reason %} {% block failed_rate_limited_domains_failure_remediation %} Wait for a while and then check the certificate status again. If the issue persists, contact Google Cloud Support. {% endblock failed_rate_limited_domains_failure_remediation %} {% block failed_caa_check_domains_failure_reason %} The following domains are in FAILED_CAA_CHECKING or FAILED_CAA_FORBIDDEN state: {domains} for SSL certificate "{name}". This indicates misconfigured CAA records. CAA records authorize specific Certificate Authorities to issue certificates for the domain. {% endblock failed_caa_check_domains_failure_reason %} {% block failed_caa_check_domains_failure_remediation %} Ensure the CAA records are configured correctly. Refer to the documentation for instructions on configuring CAA records: {% endblock failed_caa_check_domains_failure_remediation %} {% block check_certificate_attachment_failure_reason %} The SSL certificate "{name}" is not attached to any target proxies. Attach the certificate to a target proxy. {% endblock check_certificate_attachment_failure_reason %} {% block check_certificate_attachment_failure_remediation %} Follow the documentation to attach the certificate to a target proxy: {% endblock check_certificate_attachment_failure_remediation %} {% block check_certificate_attachment_success_reason %} The SSL certificate "{name}" is attached to target proxies ({target_proxies}) that are in use by forwarding rules. {% endblock check_certificate_attachment_success_reason %} {% block verify_dns_records_success_reason %} DNS records for domain {domain} are correctly configured. All resolved IP addresses ({ip_addresses}) point to the load balancer(s) associated with certificate {name}. {% endblock verify_dns_records_success_reason %} {% block verify_dns_records_failure_reason %} DNS records for domain {domain} currently resolve to the following IP addresses: {unresolved_ip_addresses}. These IP addresses do not point to any load balancer associated with certificate {name}. Certificate provisioning is therefore blocked. {% endblock verify_dns_records_failure_reason %} {% block verify_dns_records_failure_remediation %} Configure DNS records for {domain} to point to the correct load balancer IP address(es) for certificate {name}. The following load balancer IP addresses are associated with this certificate: {fr_ip_message} Check: {% endblock verify_dns_records_failure_remediation %} {% block verify_dns_records_failure_reason_a1 %} Domain {domain} does not resolve to any IP addresses. In order to provision the certificate, the domain must resolve to an IP address that points to a load balancer associated with the certificate. {% endblock verify_dns_records_failure_reason_a1 %} {% block verify_dns_records_uncertain_reason %} Some DNS records for domain {domain} resolve to the following unexpected IP address(es): {unresolved_ip_addresses}. While other records point to the expected IP addresses: {resolved_ip_addresses}. The unexpected IP addresses do not point to any load balancer associated with certificate {name}. This can cause certificate provisioning issues. {% endblock verify_dns_records_uncertain_reason %} {% block verify_dns_records_uncertain_remediation %} Configure DNS records for {domain} to point to the correct load balancer IP address(es) for certificate {name}. The following load balancer IP addresses are associated with this certificate: {fr_ip_message} Check: {% endblock verify_dns_records_uncertain_remediation %} {% block verify_forwarding_rules_port_success_reason %} The SSL certificate "{name}" has forwarding rules configured for HTTPS (port 443) on all associated IP addresses. {% endblock verify_forwarding_rules_port_success_reason %} {% block verify_forwarding_rules_port_failure_reason %} {misconfigured_entities} There must be at least one load balancer's forwarding rule that uses TCP port 443 for the Google-managed certificate to be initially provisioned and automatically renewed. {% endblock verify_forwarding_rules_port_failure_reason %} {% block verify_forwarding_rules_port_failure_remediation %} Configure the load balancer to listen on port 443 for SSL certificate "{name}". {% endblock verify_forwarding_rules_port_failure_remediation %} {% block verify_no_certificate_map_conflict_success_reason %} All target proxies associated with the SSL certificate "{name}" do not have a certificate map. {% endblock verify_no_certificate_map_conflict_success_reason %} {% block verify_no_certificate_map_conflict_failure_reason %} The following target proxies have a conflicting certificate map: {conflicting_target_proxies}. If certificate map is set on a target proxy, the classic SSL certificates are ignored. {% endblock verify_no_certificate_map_conflict_failure_reason %} {% block verify_no_certificate_map_conflict_failure_remediation %} If this configuration is unintended, detach the certificate map from the target proxies. {% endblock verify_no_certificate_map_conflict_failure_remediation %} {% block check_provisioning_time_success_reason %} No recent changes were detected for forwarding rules and target proxies associated with the SSL certificate "{name}". {% endblock check_provisioning_time_success_reason %} {% block check_provisioning_time_uncertain_reason %} The SSL certificate "{name}" has recently had associated resources modified. This might affect DNS validation. Details are below: {recently_changed} {% endblock check_provisioning_time_uncertain_reason %} {% block check_provisioning_time_uncertain_remediation %} DNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If {name} was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete. {% endblock check_provisioning_time_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/lb/templates/unhealthy_backends.jinja ================================================ {% block confirmation_success_reason %} All backends are currently healthy in backend service {name} in scope {region}. {% endblock confirmation_success_reason %} {% block confirmation_uncertain_reason %} All backends are currently healthy in backend service {name} in scope {region}. However, health check logging is disabled, so recent unhealthy events could not be checked. {% endblock confirmation_uncertain_reason %} {% block confirmation_failure_reason_a1 %} All backends are currently healthy in backend service {name} in scope {region}. However, we found health check logs indicating unhealthy backends in the last 10 minutes. {detailed_reason} {% endblock confirmation_failure_reason_a1 %} {% block confirmation_failure_reason %} The backend service {name} in the {region} scope has unhealthy backends. {detailed_reason} The backend service {name} uses the following health check: {hc_name}. {success_criteria} {timing_and_threshold} {% endblock confirmation_failure_reason %} {% block logging_enabled_success_reason %} Health check logging is enabled for health check {hc_url}. {% endblock logging_enabled_success_reason %} {% block logging_enabled_uncertain_reason %} Logging is not enabled for health check {hc_url}. Lack of logs hinders troubleshooting, as logs provide visibility into health check state changes and probe details needed to diagnose failures. {% endblock logging_enabled_uncertain_reason %} {% block logging_enabled_uncertain_remediation %} Enable logging for the health check using the following `gcloud` command: ``` gcloud compute health-checks update {protocol} {hc_name} {additional_flags} --enable-logging ``` This will log any future changes in health status, but won't show past activity. Note that new health check logs will only appear when a health state transition occurs. {% endblock logging_enabled_uncertain_remediation %} {% block port_mismatch_uncertain_reason %} The load balancer is conducting health checks on port {hc_port} for the backend service {bs_resource}. However, this health check port differs from the port used by the load balancer for serving traffic on some backend instance groups. The backend service is configured to use the "{serving_port_name}" port, which is then translated to a specific port number based on the "{serving_port_name}" port mapping within each backend instance group. Affected backends: {formatted_igs} This configuration can be problematic unless the load balancer has been configured to use a different port for health checks purposefully. {% endblock port_mismatch_uncertain_reason %} {% block port_mismatch_uncertain_remediation %} 1. **Verify Intent:** Confirm if the health check port `{hc_port}` is *meant* to be different from the serving port defined by "{serving_port_name}" on the backends. 2. **Test Port on Backend VMs:** Check if port `{hc_port}` is listening on an instance from the affected groups. Run this command from your local machine/Cloud Shell: ```bash gcloud compute ssh [INSTANCE_NAME] --zone [ZONE] --project {project_id} --command="sudo ss -tlnp | grep ':{hc_port}'" ``` * Output showing `LISTEN` indicates the port is open and your application is likely listening. * No output suggests the port is not in a listening state on that VM. 3. **Adjust Configuration:** * **If Mismatch is Unintentional:** Align the load balancer's health check port in the backend service `{bs_resource}` to match the actual port number used by "{serving_port_name}" in the instance groups. * **If Mismatch is Intentional:** Ensure your application on the VMs is correctly configured to listen on port `{hc_port}`. * **If Port Not Listening:** Troubleshoot your application on the VM to ensure it's running and bound to port `{hc_port}`. Check the VM's local firewall as well. If the health check port `{hc_port}` is meant to be different from the serving port (e.g., a dedicated management/health endpoint), confirm that your application is correctly configured to listen on the health check port. {% endblock port_mismatch_uncertain_remediation %} {% block port_mismatch_uncertain_reason_a1 %} Backend service "{backend_service_name}" is a {lb_scheme} Passthrough Load Balancer. These load balancers forward traffic to backends without changing the destination port, so there isn't a single "serving port" on the load balancer itself. The health check probes are sent to the port defined directly in the HealthCheck resource. The associated health check "{hc_name}" is configured to use port {hc_port}. {% endblock port_mismatch_uncertain_reason_a1 %} {% block port_mismatch_uncertain_remediation_a1 %} Please ensure that the backend instances (VMs or endpoints) are configured to accept and respond to health check probes specifically on port {hc_port}. The application running on the backends must be actively listening on this port ({hc_port}) for the health checks to succeed, regardless of the ports used for actual application traffic. {% endblock port_mismatch_uncertain_remediation_a1 %} {% block port_mismatch_success_reason %} The load balancer is performing health checks on the same port used for serving traffic. This is the standard configuration. {port_mapping} {% endblock port_mismatch_success_reason %} {% block protocol_mismatch_uncertain_reason %} The load balancer uses {serving_protocol} for traffic but {hc_protocol} for health checks on backend service {bs_resource}. If not intended, this protocol mismatch can lead to incorrect health assessments, potentially causing traffic to be sent to failing backends or triggering unnecessary failovers. Here are some examples of potentially problematic mismatches: * **TLS vs. Non-TLS:** * Health Check: HTTPS, Backend: HTTP - The health check will try to initiate a TLS handshake, which will fail against a non-TLS server. * Health Check: HTTP, Backend: HTTPS - The health check sends plaintext, but the server expects TLS, likely resulting in a connection reset or protocol error. * **Application Protocol Mismatch:** * Health Check: GRPC, Backend: HTTP - The health check speaks the GRPC protocol, but the backend expects standard HTTP requests. * Health Check: HTTP, Backend: SSL - The health check expects an HTTP application response, but the backend is configured for generic SSL, which might not involve HTTP. * **Protocol Version/Feature Mismatch (Subtler issues even with the same base protocol):** * An HTTP/1.0 health check request to a server strictly requiring HTTP/1.1 features. * An HTTP/2 health check to a server only supporting HTTP/1.1 without proper negotiation. **Important:** Health checks using {hc_protocol} might be passing while the application serving {serving_protocol} traffic is failing because the success criteria for the two protocols can differ. More details on the health check success criteria can be found in [docs](https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-protocol-http). {% endblock protocol_mismatch_uncertain_reason %} {% block protocol_mismatch_uncertain_remediation %} 1. Verify if this protocol difference is intentional and well-understood. 2. If not, **align the health check protocol with the serving protocol ({serving_protocol})** to ensure health checks accurately represent the backend's ability to serve traffic. 3. Consult the [Health Checks Overview](https://cloud.google.com/load-balancing/docs/health-check-concepts) for best practices. {% endblock protocol_mismatch_uncertain_remediation %} {% block protocol_mismatch_success_reason %} The load balancer is performing health checks using the same protocol ({hc_protocol}) used for serving traffic on backend service {bs_resource}. This is the standard configuration. {% endblock protocol_mismatch_success_reason %} {% block protocol_mismatch_success_reason_a1 %} The backend service {bs_resource} uses {serving_protocol} for traffic and a TCP health check. TCP health checks are broadly compatible as they only test basic port connectivity, not application-level responses. This is a common configuration. {% endblock protocol_mismatch_success_reason_a1 %} {% block firewall_rules_failure_reason %} {insight} The health checks are currently failing due to a misconfigured firewall. This prevents Google Cloud probers from connecting to the backends, causing the load balancer to consider them unhealthy. {% endblock firewall_rules_failure_reason %} {% block firewall_rules_failure_remediation %} Update the firewall rules to allow inbound traffic from the Google Cloud health check IP ranges (found at ) to the backends. {% endblock firewall_rules_failure_remediation %} {% block firewall_rules_success_reason %} Firewall rules are correctly configured and are not blocking health check probes for backend service {bs_url}. {% endblock firewall_rules_success_reason %} {% block past_hc_success_uncertain_remediation %} Check the logs and monitoring metrics for the instances associated with backend service {bs_url}, focusing on recent timeframes to see if there were any errors, crashes, or resource exhaustion issues. Also inspect any application-specific logs for errors or warnings. {% endblock past_hc_success_uncertain_remediation %} {% block unknown_hc_state_log_failure_reason %} Health check logs for backend service {bs_url} show entries with the detailed health state UNKNOWN. This indicates that the health checking system is aware of the instance, but its health status is undetermined. This situation can arise when a new endpoint is unresponsive to health checks and there's a substantial configured timeout period (approximately 25 seconds or longer). In such cases, the "UNKNOWN" state might be published while the health checker waits for the timeout to expire. Additionally, "UNKNOWN" could also be published during outage scenarios if the health checkers themselves are crashing. In this critical situation, endpoints that previously had known health states could transition to "UNKNOWN". {% endblock unknown_hc_state_log_failure_reason %} {% block unknown_hc_state_log_failure_remediation %} For new endpoints: Consider reducing the timeout period for health checks if appropriate, especially during initial setup or testing phases. For potential Google Cloud outages: Use Personalized Service Health to check for any ongoing incidents that might be affecting the project or the specific service in question. If an incident is identified, follow any recommended mitigation steps or wait for the issue to be resolved by Google Cloud. {% endblock unknown_hc_state_log_failure_remediation %} {% block unhealthy_hc_state_log_failure_reason %} Health check logs for backend service {bs_url} indicate a detailed health state of UNHEALTHY. The backend instances are reachable but are not passing the health check requirements. Responses received from backends: {probe_results_text_str} {% endblock unhealthy_hc_state_log_failure_reason %} {% block unhealthy_hc_state_log_failure_remediation %} {success_criteria} Investigate the configuration of the application to ensure it aligns with these health check expectations. If a different endpoint should be checked or a different response is expected, adjust the health check settings accordingly. Common reasons for UNHEALTHY detailed state: * Health check is configured for a path to which application is not responding. In this case, the probes are responded with 404 response. Solution is to either change the health check path or configure the application to provide a successful response on the path configured on the health check. * Backend server has received a HTTP request, which is not compliant with the application's expectations, from the health check probers. In this case, the probes are responded with 400 response. The failure message is 'Bad Request [Code: 400]'. Possible reason for the backend server to serve 400 response is: * A missing or wrong Host header received. * The health checker sends a request using a protocol version that the application doesn't support or expects in a different format. Examples: * Client sends HTTP/1.0 but server requires HTTP/1.1+ and interprets the request as invalid. * Client sends HTTP/2 frames to a plain HTTP/1.1 endpoint (without proper upgrade negotiation). * Client sends TLS-encrypted data to an HTTP (non-TLS) port — server tries to parse the Client Hello as an HTTP request, resulting in an improper request, and returns 400. * Unexpected query parameters in the request sent by the health check probers. * TLS version mismatch between the health check probers and the backend server. The failure message will be Connect failed. * Health check probes are responded with Service Unavailable, Service Temporarily Unavailable, Internal Server Error. In this case, the probes are responded with 5XX. Solution is to check: * if the backend instances are experiencing high CPU, memory, or network utilization, and as a result the customer backends are responding with 5XX. * if the instances are running a bad image. Bad instance images might have missing or improperly configured services, broken or ignored startup scripts, stale environment configurations. * CheckInterval config on the health check might be too short, leading to an excessive number of health checks sent to the backends, leading to high network utilization on the backends * Some backends are configured to use a different port/protocol for health checks, than the named port assigned for traffic by the load balancer. In such a case, if the correct port is not configured in the backend, this can become problematic. In the health check logs, the failure explanation is visible as Connection refused, HTTP response: , Error: Connection refused or HTTP response: , Error: Connection reset by peer. Solution is to make the backend application listen on the port that is configured for the health check purposes or to change the health check port to the port on which the application is listening. {% endblock unhealthy_hc_state_log_failure_remediation %} {% block timeout_hc_state_log_failure_reason %} Health check logs for backend service {bs_url} show the detailed health state "TIMEOUT". Responses received from backends: {probe_results_text_str} The backend might be timing out because: 1. The application is overloaded and taking too long to respond. 2. The backend service or health check timeout is too low. 3. Connection to the endpoint cannot be established - the backend instance has crashed or is otherwise unresponsive. The following responses were received from your backends: {probe_results_text_str} {% endblock timeout_hc_state_log_failure_reason %} {% block timeout_hc_state_log_failure_remediation %} 1. Make sure that the backend service timeout (current value: {bs_timeout_sec}s) and health check timeout (current value: {hc_timeout_sec}s) are appropriately configured to accommodate the application's expected response time. 2. Investigate the application's configuration to ensure it is correctly handling health check probe requests. {success_criteria} 3. Check if firewall rules or iptables configurations are blocking the health check probes from reaching the backend instances, resulting in timeouts. {% endblock timeout_hc_state_log_failure_remediation %} ================================================ FILE: gcpdiag/runbook/lb/unhealthy_backends.py ================================================ # Copyright 2024 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. """Module containing steps to analyze Health Check issues.""" import re import urllib.parse from datetime import datetime, timedelta from itertools import groupby from typing import List, Optional import googleapiclient.errors from boltons.iterutils import get_path from gcpdiag import config, runbook from gcpdiag.queries import apis, crm, gce, lb, logs from gcpdiag.runbook import op from gcpdiag.runbook.gce import generalized_steps as gce_gs from gcpdiag.runbook.lb import flags class UnhealthyBackends(runbook.DiagnosticTree): """Load Balancer Unhealthy Backends Analyzer. This runbook helps investigate why backends in a load balancer are unhealthy. It confirms and summarizes the current health status of the backends, aiding in identifying any unhealthy instances. Key Investigation Areas: - Firewalls: - Verifies if firewall rules are properly configured to allow health check traffic. - Port Configuration: - Checks if health check sends probe requests to the different port than serving port. This may be intentional or a potential configuration error, and the runbook will provide guidance on the implications. - Protocol Configuration: - Checks if health check uses the same protocol as backend service. This may be intentional or a potential configuration error, and the runbook will provide guidance on the implications. - Logging: - Checks if health check logging is enabled to aid in troubleshooting. - Health Check Logs (if enabled): - Analyzes the latest health check logs to identify the specific reasons for backend unhealthiness: - Timeouts: Identifies if the backend is timing out and provides potential causes and remediation steps. - Unhealthy: Indicates that the backend is reachable but doesn't meet the health check's criteria. It provides guidance on the expected health check behavior and suggests configuration checks. - Unknown: Explains the potential reasons for the "UNKNOWN" health state and suggests actions like adjusting timeouts or checking for Google Cloud outages. - Past Health Check Success: - Checks if the health check has worked successfully in the past to determine if the issue is recent or ongoing. - VM Performance: - Checks if the instances performance is degraded - disks, memory and cpu utilization are being checked. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True, }, flags.BACKEND_SERVICE_NAME: { 'type': str, 'help': ('The name of the backend service that you want to investigate'), 'required': True, }, flags.REGION: { 'type': str, 'help': ('The region configured for the load balancer (backend service).' ' If not provided, the backend service is assumed to be global.' ), 'required': False, }, } def build_tree(self): """Fetches primary resources and builds the diagnostic tree.""" project_id = op.get(flags.PROJECT_ID) backend_service_name = op.get(flags.BACKEND_SERVICE_NAME) region = op.get(flags.REGION, 'global') # The start step is always added. Its execute method will determine the # initial message based on the objects it receives. start = UnhealthyBackendsStart() start.project_id = project_id start.backend_service_name = backend_service_name start.region = region self.add_start(start) logging_check = VerifyHealthCheckLoggingEnabled() port_check = ValidateBackendServicePortConfiguration() protocol_check = ValidateBackendServiceProtocolConfiguration() firewall_check = VerifyFirewallRules() vm_performance_check = CheckVmPerformance() self.add_step(parent=start, child=logging_check) self.add_step(parent=start, child=port_check) self.add_step(parent=start, child=protocol_check) self.add_step(parent=start, child=firewall_check) self.add_step(parent=start, child=vm_performance_check) self.add_end(UnhealthyBackendsEnd()) # Pre-flight checks before fetching resources if not apis.is_enabled(project_id, 'compute'): start.error_message = ( 'Compute Engine API is not enabled. Please enable it and try again.') return # Fetch all primary resources once to avoid redundant API calls try: backend_service = lb.get_backend_service(project_id, backend_service_name, region) except googleapiclient.errors.HttpError: # If the backend service doesn't exist, we can't proceed. # The start step will report this and the runbook will end. start.error_message = ( f'Backend service {backend_service_name} does not exist in scope' f' {region} or project {project_id}') return start.backend_service = backend_service if not backend_service.health_check: start.error_message = ( f'Backend service {backend_service_name} does not have a health check' f' configured in scope {region} or project {project_id}') return health_check = gce.get_health_check(project_id, backend_service.health_check, backend_service.health_check_region) start.health_check = health_check backend_health_statuses = lb.get_backend_service_health( op.get_context(), backend_service_name, region) start.backend_health_statuses = backend_health_statuses if not backend_health_statuses: # Start step will see this list is empty and report no backends. return # If we got this far, we have all necessary objects. Now, build the # rest of the tree and pass the fetched objects to each step. logging_check.project_id = project_id logging_check.region = region logging_check.backend_service_name = backend_service_name logging_check.backend_service = backend_service logging_check.health_check = health_check logging_check.backend_health_statuses = backend_health_statuses port_check.project_id = project_id port_check.region = region port_check.backend_service_name = backend_service_name port_check.backend_service = backend_service port_check.health_check = health_check protocol_check.project_id = project_id protocol_check.region = region protocol_check.backend_service_name = backend_service_name protocol_check.backend_service = backend_service protocol_check.health_check = health_check firewall_check.project_id = project_id firewall_check.region = region firewall_check.backend_service_name = backend_service_name firewall_check.backend_service = backend_service vm_performance_check.project_id = project_id vm_performance_check.region = region vm_performance_check.backend_service_name = backend_service_name vm_performance_check.backend_health_statuses = backend_health_statuses class UnhealthyBackendsStart(runbook.StartStep): """Start step for Unhealthy Backends runbook.""" template = 'unhealthy_backends::confirmation' project_id: str backend_service_name: str region: str # Pre-fetched objects from the parent DiagnosticTree backend_service: Optional[lb.BackendServices] = None health_check: Optional[gce.HealthCheck] = None backend_health_statuses: Optional[List[lb.BackendHealth]] = None error_message: str = '' @property def name(self): return (f'Analyze unhealthy backends for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Checks the health of a specified load balancer's backends.""" proj = crm.get_project(self.project_id) if self.error_message: op.add_skipped(proj, reason=self.error_message) return if not self.backend_service: op.add_skipped( proj, reason=(f'Backend service {self.backend_service_name} does not' f' exist in scope {self.region} or project' f' {self.project_id}'), ) return if not self.backend_health_statuses: op.add_skipped( proj, reason=(f'Backend service {self.backend_service_name} does not' f' have any backends in scope {self.region} or' f' project {self.project_id}'), ) return unhealthy_backends = [ backend for backend in self.backend_health_statuses if backend.health_state == 'UNHEALTHY' ] backend_health_statuses_per_group = { k: list(v) for k, v in groupby(self.backend_health_statuses, key=lambda x: x.group) } if unhealthy_backends: detailed_reason = '' for group, backends_in_group in backend_health_statuses_per_group.items(): unhealthy_count = sum( 1 for x in backends_in_group if x.health_state == 'UNHEALTHY') detailed_reason += ( f'Group {group} has {unhealthy_count}/{len(backends_in_group)} ' 'unhealthy backends\n') op.add_failed( resource=self.backend_service, reason=op.prep_msg( op.FAILURE_REASON, name=self.backend_service_name, region=self.region, detailed_reason=detailed_reason, hc_name=self.health_check.name, success_criteria=get_health_check_success_criteria( self.health_check), timing_and_threshold=_get_timing_and_threshold_info( self.health_check)), remediation='', ) else: if not self.health_check.is_log_enabled: op.add_uncertain( resource=self.backend_service, reason=op.prep_msg( op.UNCERTAIN_REASON, name=self.backend_service_name, region=self.region, ), ) return # Check for past unhealthy logs all_groups = {status.group for status in self.backend_health_statuses} group_filters = [] group_metadata = {} detailed_reason = '' past_issue_found = False for group in all_groups: m = re.search(r'/(?:regions|zones)/([^/?]+)/([^/?]+)/([^/?]+)', group) if not m: continue location = m.group(1) resource_type = m.group(2) resource_name = m.group(3) if resource_type == 'instanceGroups': # Construct individual filter part and store metadata for mapping logs back to group URL filter_part = ( f'(resource.type="gce_instance_group" AND ' f'resource.labels.instance_group_name="{resource_name}" AND ' f'resource.labels.location=~"{location}")') group_filters.append(filter_part) group_metadata[('gce_instance_group', resource_name, location)] = group elif resource_type == 'networkEndpointGroups': neg = _get_zonal_network_endpoint_group(self.project_id, location, resource_name) if neg: filter_part = ( f'(resource.type="gce_network_endpoint_group" AND ' f'resource.labels.network_endpoint_group_id="{neg.id}" AND ' f'resource.labels.zone="{location}")') group_filters.append(filter_part) group_metadata[('gce_network_endpoint_group', neg.id, location)] = group if group_filters: # Aggregate filters into a single query aggregated_filter = """log_name="projects/{}/logs/compute.googleapis.com%2Fhealthchecks" (jsonPayload.healthCheckProbeResult.healthState="UNHEALTHY" OR jsonPayload.healthCheckProbeResult.previousHealthState="UNHEALTHY") AND ({}) """.format(self.project_id, ' OR '.join(group_filters)) log_entries = logs.realtime_query( project_id=self.project_id, filter_str=aggregated_filter, start_time=datetime.now() - timedelta(minutes=10), end_time=datetime.now(), disable_paging=True, ) if log_entries: past_issue_found = True affected_groups = set() for entry in log_entries: rtype = get_path(entry, ('resource', 'type')) labels = get_path(entry, ('resource', 'labels'), {}) # Normalize location and name for metadata mapping loc = labels.get('location') or labels.get('zone') name = labels.get('instance_group_name') or labels.get( 'network_endpoint_group_id') group_url = group_metadata.get((rtype, name, loc)) # Fallback for regional MIGs where logs report the zone if not group_url and loc: parts = loc.rsplit('-', 1) if len(parts) == 2: region = parts[0] group_url = group_metadata.get((rtype, name, region)) if group_url: affected_groups.add(group_url) detailed_reason = ''.join([ f'Group {g} had unhealthy backends in the last 10 minutes.\n' for g in sorted(affected_groups) ]) if past_issue_found: op.add_failed( resource=self.backend_service, reason=op.prep_msg( op.FAILURE_REASON_ALT1, name=self.backend_service_name, region=self.region, detailed_reason=detailed_reason, ), remediation='', ) else: op.add_ok( resource=self.backend_service, reason=op.prep_msg( op.SUCCESS_REASON, name=self.backend_service_name, region=self.region, ), ) class CheckVmPerformance(runbook.CompositeStep): """Checks if the instances performance is degraded.""" template = 'unhealthy_backends::vm_performance' project_id: str backend_service_name: str region: str backend_health_statuses: List[lb.BackendHealth] @property def name(self): return (f'Check VMs performance for unhealthy backends in backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Checks if the VM performance is degraded. In this step one unhealthy instance from each group is analyzed - disks, memory and cpu utilization are being checked. """ instances_to_analyze_by_group = {} for status in sorted( self.backend_health_statuses, key=lambda obj: obj.instance): # sorting to make testing predictable if status.health_state == 'UNHEALTHY': instances_to_analyze_by_group[status.group] = status.instance for group, instance in instances_to_analyze_by_group.items(): m = re.search(r'projects/([^/?]+)/zones/([^/?]+)/instances/([^/?]+)', instance) if not m: raise RuntimeError( "Can't determine project, zone or instance name from self links" f' {group}') project_id = m.group(1) zone = m.group(2) instance_name = m.group(3) instance_object = gce.get_instance(project_id=project_id, zone=zone, instance_name=instance_name) if not instance_object: op.add_skipped( None, reason= f'VM instance {instance_name} not found in project {project_id} zone {zone}' ) mem_check = gce_gs.HighVmMemoryUtilization() mem_check.vm = instance_object disk_check = gce_gs.HighVmDiskUtilization() disk_check.vm = instance_object cpu_check = gce_gs.HighVmCpuUtilization() cpu_check.vm = instance_object self.add_child(mem_check) self.add_child(disk_check) self.add_child(cpu_check) class VerifyFirewallRules(runbook.Step): """Checks if firewall rules are configured correctly.""" template = 'unhealthy_backends::firewall_rules' project_id: str backend_service_name: str region: str backend_service: lb.BackendServices @property def name(self): return (f'Verify firewall rules allow health checks for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Checks if firewall rules are configured correctly.""" if not apis.is_enabled(self.project_id, 'recommender'): op.add_skipped( crm.get_project(self.project_id), reason=( 'Checking firewall rules requires Recommender API to be enabled'), ) return used_by_refs = self.backend_service.used_by_refs insights = lb.get_lb_insights_for_a_project(self.project_id, self.region) for insight in insights: if insight.is_firewall_rule_insight and insight.details.get( 'loadBalancerUri'): # network load balancers (backend service is central resource): if insight.details.get('loadBalancerUri').endswith( self.backend_service.full_path): op.add_metadata('insightDetail', insight.details) op.add_failed( resource=self.backend_service, reason=op.prep_msg( op.FAILURE_REASON, insight=insight.description, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) return for ref in used_by_refs: # application load balancers (url map is central resource): if insight.details.get('loadBalancerUri').endswith(ref): op.add_metadata('insightDetail', insight.details) op.add_failed( resource=self.backend_service, reason=op.prep_msg( op.FAILURE_REASON, insight=insight.description, ), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) return op.add_ok(self.backend_service, reason=op.prep_msg(op.SUCCESS_REASON, bs_url=self.backend_service.full_path)) class ValidateBackendServicePortConfiguration(runbook.Step): """Checks if health check sends probe requests to the different port than serving port.""" template = 'unhealthy_backends::port_mismatch' project_id: str backend_service_name: str region: str backend_service: lb.BackendServices health_check: gce.HealthCheck @property def name(self): return (f'Validate port configuration for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Checks if health check sends probe requests to the different port than serving port.""" lb_scheme = self.backend_service.load_balancing_scheme if self.region != 'global' and lb_scheme in ['INTERNAL', 'EXTERNAL']: op.add_uncertain( self.backend_service, reason=op.prep_msg( op.UNCERTAIN_REASON_ALT1, backend_service_name=self.backend_service_name, lb_scheme=lb_scheme.lower(), hc_name=self.health_check.name, hc_port=self.health_check.port, ), remediation=op.prep_msg( op.UNCERTAIN_REMEDIATION_ALT1, hc_port=self.health_check.port, ), ) return if not apis.is_enabled(self.project_id, 'recommender'): op.add_skipped( crm.get_project(self.project_id), reason=('Checking port configuration requires Recommender API to be' ' enabled'), ) return igs = gce.get_instance_groups(op.get_context()) insights = lb.get_lb_insights_for_a_project(self.project_id, self.region) for insight in insights: if insight.is_health_check_port_mismatch_insight: for info in insight.details.get('backendServiceInfos'): if info.get('backendServiceUri').endswith( self.backend_service.full_path): impacted_igs = [ igs.get(self._normalize_url(x)) for x in info.get('impactedInstanceGroupUris', []) ] formatted_igs = self._format_affected_instance_groups( impacted_igs, info.get('servingPortName')) op.add_uncertain( resource=self.backend_service, reason=op.prep_msg( op.UNCERTAIN_REASON, hc_port=info.get('healthCheckPortNumber'), serving_port_name=info.get('servingPortName'), formatted_igs=formatted_igs, bs_resource=self.backend_service.full_path, ), remediation=op.prep_msg( op.UNCERTAIN_REMEDIATION, hc_port=info.get('healthCheckPortNumber'), serving_port_name=info.get('servingPortName'), bs_resource=self.backend_service.full_path, project_id=self.project_id, ), ) return port_name = self.backend_service.port_name has_negs = any('/networkEndpointGroups/' in backend.get('group') for backend in self.backend_service.backends) if has_negs: port_mapping = ( 'Backend service uses Network Endpoint Groups (NEGs), portName' ' parameter is not applicable.') op.add_ok( self.backend_service, reason=op.prep_msg(op.SUCCESS_REASON, port_mapping=port_mapping), ) else: port_mapping_details = [] for backend in self.backend_service.backends: ig = igs.get(self._normalize_url(backend.get('group'))) if ig: port_numbers = self._get_port_numbers_by_name(ig, port_name) if port_numbers: port_numbers_str = ', '.join(sorted(port_numbers)) port_mapping_details.append( f' {ig.full_path}: portName "{port_name}" -> port(s)' f' {port_numbers_str}') else: port_mapping_details.append( f' {ig.full_path}: portName "{port_name}" not defined') if port_mapping_details: port_mapping = (' Health check port specification:' f' {self.health_check.port_specification}') if self.health_check.port_specification == 'USE_FIXED_PORT': port_mapping += f'\n Health check port: {self.health_check.port}' port_mapping += ('\n Backend service serving port name:' f' "{port_name}"\n Port mapping details:\n' + '\n'.join(port_mapping_details)) else: port_mapping = ( f'portName "{port_name}" is not used in any instance group for this' ' backend service.') op.add_ok( self.backend_service, reason=op.prep_msg(op.SUCCESS_REASON, port_mapping=port_mapping), ) def _normalize_url(self, url): if not url: return url try: # Add // prefix if scheme is missing for urlparse to work correctly if (not url.startswith('http://') and not url.startswith('https://') and not url.startswith('//')): temp_url = '//' + url else: temp_url = url parsed_url = urllib.parse.urlparse(temp_url) if parsed_url.hostname == 'compute.googleapis.com': return parsed_url.path.lstrip('/') elif (parsed_url.hostname == 'www.googleapis.com' and parsed_url.path.startswith('/compute/v1/')): return parsed_url.path.replace('/compute/v1/', '', 1) else: return url except ValueError: # Handle potential parsing errors return url def _format_affected_instance_groups(self, impacted_instance_groups, serving_port_name): output_lines = [] for group in impacted_instance_groups: port_numbers = ', '.join( self._get_port_numbers_by_name(group, serving_port_name)) output_lines.append( f'{group.full_path} - port name "{serving_port_name}" translates to' f' port {port_numbers}') return '\n'.join(output_lines) def _get_port_numbers_by_name(self, impacted_instance_group, serving_port_name): return [ str(p['port']) for p in impacted_instance_group.named_ports if p.get('name') == serving_port_name ] class ValidateBackendServiceProtocolConfiguration(runbook.Step): """Checks if health check uses the same protocol as backend service for serving traffic.""" template = 'unhealthy_backends::protocol_mismatch' project_id: str backend_service_name: str region: str backend_service: lb.BackendServices health_check: gce.HealthCheck @property def name(self): return (f'Validate protocol configuration for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Checks if health check uses the same protocol as backend service for serving traffic.""" if self.backend_service.protocol == 'UDP': op.add_skipped( self.backend_service, reason=( "Load balancer uses UDP protocol which doesn't make sense for" " health checks as it's connectionless and doesn't have built-in" ' features for acknowledging delivery'), ) return if self.health_check.type == self.backend_service.protocol: op.add_ok( self.backend_service, reason=op.prep_msg(op.SUCCESS_REASON, bs_resource=self.backend_service.full_path, hc_protocol=self.health_check.type), ) elif self.health_check.type == 'TCP': op.add_ok( self.backend_service, reason=op.prep_msg(op.SUCCESS_REASON_ALT1, bs_resource=self.backend_service.full_path, serving_protocol=self.backend_service.protocol), ) else: op.add_uncertain( self.backend_service, reason=op.prep_msg( op.UNCERTAIN_REASON, hc_protocol=self.health_check.type, serving_protocol=self.backend_service.protocol, bs_resource=self.backend_service.full_path, ), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION,), ) class VerifyHealthCheckLoggingEnabled(runbook.Gateway): """Check if health check logging is enabled.""" template = 'unhealthy_backends::logging_enabled' project_id: str backend_service_name: str region: str backend_service: lb.BackendServices health_check: gce.HealthCheck backend_health_statuses: List[lb.BackendHealth] @property def name(self): return (f'Verify health check logging enabled for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Check if health check logging is enabled and create child steps if so.""" if self.health_check.is_log_enabled: op.add_ok( self.health_check, reason=op.prep_msg(op.SUCCESS_REASON, hc_url=self.health_check.full_path), ) analyze_latest_hc_log = AnalyzeLatestHealthCheckLog() analyze_latest_hc_log.project_id = self.project_id analyze_latest_hc_log.backend_service_name = self.backend_service_name analyze_latest_hc_log.region = self.region analyze_latest_hc_log.backend_service = self.backend_service analyze_latest_hc_log.health_check = self.health_check analyze_latest_hc_log.backend_health_statuses = self.backend_health_statuses self.add_child(analyze_latest_hc_log) check_past_hc_success = CheckPastHealthCheckSuccess() check_past_hc_success.project_id = self.project_id check_past_hc_success.backend_service_name = self.backend_service_name check_past_hc_success.region = self.region check_past_hc_success.backend_service = self.backend_service check_past_hc_success.backend_health_statuses = self.backend_health_statuses self.add_child(check_past_hc_success) else: additional_flags = '' if self.region != 'global': additional_flags = f'--region={self.region} ' op.add_uncertain( self.backend_service, reason=op.prep_msg(op.UNCERTAIN_REASON, hc_url=self.health_check.full_path), remediation=op.prep_msg( op.UNCERTAIN_REMEDIATION, hc_name=self.health_check.name, protocol=self.health_check.type.lower(), additional_flags=additional_flags, ), ) class AnalyzeLatestHealthCheckLog(runbook.Gateway): """Look for the latest health check logs and based on that decide what to do next.""" template = 'unhealthy_backends::health_check_log' project_id: str backend_service_name: str region: str backend_service: lb.BackendServices health_check: gce.HealthCheck backend_health_statuses: List[lb.BackendHealth] @property def name(self): return (f'Analyze latest health check log for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Look for the latest health check logs and based on that decide what to do next.""" # Find all groups that have at least one unhealthy instance unhealthy_groups = { state.group for state in self.backend_health_statuses if state.health_state == 'UNHEALTHY' } check_window = timedelta(days=14) if not unhealthy_groups: unhealthy_groups = {state.group for state in self.backend_health_statuses} check_window = timedelta(minutes=10) detailed_health_states = {} # Add support for NEGs for group in unhealthy_groups: m = re.search(r'/(?:regions|zones)/([^/?]+)/([^/?]+)/([^/?]+)', group) if not m: raise RuntimeError( "Can't determine region or zone or group name from self links" f' {group}') location = m.group(1) resource_type = m.group(2) resource_name = m.group(3) if resource_type == 'instanceGroups': filter_str = """resource.type="gce_instance_group" log_name="projects/{}/logs/compute.googleapis.com%2Fhealthchecks" resource.labels.instance_group_name="{}" resource.labels.location=~"{}" jsonPayload.healthCheckProbeResult.healthState="UNHEALTHY" """.format(self.project_id, resource_name, location) elif resource_type == 'networkEndpointGroups': network_endpoint_group = _get_zonal_network_endpoint_group( self.project_id, location, resource_name) if network_endpoint_group: filter_str = """resource.type="gce_network_endpoint_group" log_name="projects/{}/logs/compute.googleapis.com%2Fhealthchecks" resource.labels.network_endpoint_group_id="{}" resource.labels.zone={} jsonPayload.healthCheckProbeResult.healthState="UNHEALTHY" """.format(self.project_id, network_endpoint_group.id, location) else: op.add_skipped( resource=self.backend_service, reason=( f'Network endpoint group {resource_name} in zone {location} ' f'does not exist in project {self.project_id}'), ) continue else: op.add_skipped( resource=self.backend_service, reason=(f'Unsupported resource type {resource_type} for group' f' {group} in backend service' f' {self.backend_service_name} in scope' f' {self.region}'), ) continue serial_log_entries = logs.realtime_query( project_id=self.project_id, filter_str=filter_str, start_time=datetime.now() - check_window, end_time=datetime.now(), disable_paging=True, ) if serial_log_entries: last_log = serial_log_entries.pop() op.add_metadata('log', last_log) if (get_path( last_log, 'jsonPayload.healthCheckProbeResult.healthState') == 'UNHEALTHY'): detailed_health_states.setdefault( get_path( last_log, 'jsonPayload.healthCheckProbeResult.detailedHealthState', ), [], ).append(get_path(last_log, 'jsonPayload.healthCheckProbeResult')) if detailed_health_states.get('TIMEOUT'): timeout_hc_log_step = AnalyzeTimeoutHealthCheckLog() timeout_hc_log_step.project_id = self.project_id timeout_hc_log_step.backend_service_name = self.backend_service_name timeout_hc_log_step.region = self.region timeout_hc_log_step.logs = detailed_health_states.get('TIMEOUT') timeout_hc_log_step.backend_service = self.backend_service timeout_hc_log_step.health_check = self.health_check self.add_child(timeout_hc_log_step) if detailed_health_states.get('UNHEALTHY'): unhealthy_hc_log_step = AnalyzeUnhealthyHealthCheckLog() unhealthy_hc_log_step.project_id = self.project_id unhealthy_hc_log_step.backend_service_name = self.backend_service_name unhealthy_hc_log_step.region = self.region unhealthy_hc_log_step.logs = detailed_health_states.get('UNHEALTHY') unhealthy_hc_log_step.backend_service = self.backend_service unhealthy_hc_log_step.health_check = self.health_check self.add_child(unhealthy_hc_log_step) if detailed_health_states.get('UNKNOWN'): unknown_hc_log_step = AnalyzeUnknownHealthCheckLog() unknown_hc_log_step.project_id = self.project_id unknown_hc_log_step.backend_service_name = self.backend_service_name unknown_hc_log_step.region = self.region unknown_hc_log_step.backend_service = self.backend_service self.add_child(unknown_hc_log_step) class AnalyzeTimeoutHealthCheckLog(runbook.Step): """Analyzes logs with the detailed health check state TIMEOUT""" logs: list[dict] template = 'unhealthy_backends::timeout_hc_state_log' project_id: str backend_service_name: str region: str backend_service: lb.BackendServices health_check: gce.HealthCheck @property def name(self): return (f'Analyze TIMEOUT health check logs for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Analyzes logs with the detailed health check state TIMEOUT""" if not self.logs: op.add_skipped( self.backend_service, reason='No logs with detailed health state TIMEOUT found', ) return probe_results_texts = { get_path(log, 'probeResultText') for log in self.logs } probe_results_text_str = ', '.join(f'"{x}"' for x in probe_results_texts) try: success_criteria = get_health_check_success_criteria(self.health_check) except ValueError as e: op.add_skipped( self.backend_service, reason=f'Health check type is not supported: {e}', ) return op.add_uncertain( self.backend_service, reason=op.prep_msg(op.FAILURE_REASON, probe_results_text_str=probe_results_text_str, bs_url=self.backend_service.full_path), remediation=op.prep_msg( op.FAILURE_REMEDIATION, success_criteria=success_criteria, bs_timeout_sec=self.backend_service.timeout_sec or 30, hc_timeout_sec=self.health_check.timeout_sec, ), ) class AnalyzeUnhealthyHealthCheckLog(runbook.Step): """Analyzes logs with detailed health state UNHEALTHY.""" template = 'unhealthy_backends::unhealthy_hc_state_log' logs: list[dict] project_id: str backend_service_name: str region: str backend_service: lb.BackendServices health_check: gce.HealthCheck @property def name(self): return (f'Analyze UNHEALTHY health check logs for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Analyzes logs with detailed health state UNHEALTHY.""" if not self.logs: op.add_skipped( self.backend_service, reason='No logs with detailed health state UNHEALTHY found', ) return try: success_criteria = get_health_check_success_criteria(self.health_check) except ValueError as e: op.add_skipped( self.backend_service, reason=f'Health check type is not supported: {e}', ) return probe_results_texts = { get_path(log, 'probeResultText') for log in self.logs } probe_results_text_str = ', '.join(f'"{x}"' for x in probe_results_texts) op.add_uncertain( self.backend_service, reason=op.prep_msg(op.FAILURE_REASON, probe_results_text_str=probe_results_text_str, bs_url=self.backend_service.full_path), remediation=op.prep_msg(op.FAILURE_REMEDIATION, success_criteria=success_criteria), ) class AnalyzeUnknownHealthCheckLog(runbook.Step): """Analyze logs with detailed health state UNKNOWN.""" template = 'unhealthy_backends::unknown_hc_state_log' project_id: str backend_service_name: str region: str backend_service: lb.BackendServices @property def name(self): return (f'Analyze UNKNOWN health check logs for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Analyze logs with detailed health state UNKNOWN.""" op.add_uncertain( self.backend_service, reason=op.prep_msg(op.FAILURE_REASON, bs_url=self.backend_service.full_path), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) class CheckPastHealthCheckSuccess(runbook.Step): """Checks if the health check has worked successfully in the past.""" template = 'unhealthy_backends::past_hc_success' project_id: str backend_service_name: str region: str backend_service: lb.BackendServices backend_health_statuses: List[lb.BackendHealth] @property def name(self): return (f'Check past health check success for backend service' f' "{self.backend_service_name}" in scope' f' "{self.region}".') def execute(self): """Checks if the health check has worked successfully in the past.""" unhealthy_groups = { state.group for state in self.backend_health_statuses if state.health_state == 'UNHEALTHY' } any_date_found = False message = '' # Add support for NEGs for group in unhealthy_groups: m = re.search(r'/(?:regions|zones)/([^/?]+)/([^/?]+)/([^/?]+)', group) if not m: raise RuntimeError( "Can't determine region or zone or instanceGroup name from ig" f' {group}') location = m.group(1) resource_type = m.group(2) resource_name = m.group(3) if resource_type == 'instanceGroups': filter_str = """resource.type="gce_instance_group" log_name="projects/{}/logs/compute.googleapis.com%2Fhealthchecks" resource.labels.instance_group_name="{}" resource.labels.location={} jsonPayload.healthCheckProbeResult.previousHealthState="HEALTHY" jsonPayload.healthCheckProbeResult.detailedHealthState="TIMEOUT" OR "UNHEALTHY" OR "UNKNOWN" """.format( self.project_id, resource_name, location) elif resource_type == 'networkEndpointGroups': network_endpoint_group = _get_zonal_network_endpoint_group( self.project_id, location, resource_name) if network_endpoint_group: filter_str = """resource.type="gce_network_endpoint_group" log_name="projects/{}/logs/compute.googleapis.com%2Fhealthchecks" resource.labels.network_endpoint_group_id="{}" resource.labels.zone={} jsonPayload.healthCheckProbeResult.previousHealthState="HEALTHY" jsonPayload.healthCheckProbeResult.detailedHealthState="TIMEOUT" OR "UNHEALTHY" OR "UNKNOWN" """.format( self.project_id, network_endpoint_group.id, location) else: op.add_skipped( resource=group, reason=( f'Network endpoint group {resource_name} in zone {location} ' f'does not exist in project {self.project_id}'), ) continue else: op.add_skipped( resource=group, reason=(f'Unsupported resource type {resource_type} for group' f' {group} in backend service' f' {self.backend_service_name} in scope' f' {self.region}'), ) continue serial_log_entries = logs.realtime_query( project_id=self.project_id, filter_str=filter_str, start_time=datetime.now() - timedelta(days=14), end_time=datetime.now(), disable_paging=True, ) if serial_log_entries: last_log = serial_log_entries.pop() timestamp = get_path(last_log, 'receiveTimestamp') any_date_found = True op.add_metadata(group, timestamp) message += (f'{group}: Backends transitioned to an unhealthy state at' f' {timestamp}\n\n') else: message += ( f'{group}: No logs were found indicating HEALTHY -> UNHEALTHY' ' transition \n\n') if message and any_date_found: op.add_uncertain( self.backend_service, reason=message, remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION, bs_url=self.backend_service.full_path), ) else: op.add_skipped( self.backend_service, reason=('No past health check success found in the logs for the ' f'backend service {self.backend_service.full_path}'), ) class UnhealthyBackendsEnd(runbook.EndStep): """Concludes the unhealthy backends diagnostics process. If the issue persists, it directs the user to helpful resources and suggests contacting support with a detailed report. """ def execute(self): """Finalize unhealthy backends diagnostics.""" if not config.get(flags.INTERACTIVE_MODE): region = op.get(flags.REGION, 'global') backend_service_name = op.get(flags.BACKEND_SERVICE_NAME) response = op.prompt( kind=op.CONFIRMATION, message=( 'Are you still experiencing health check issues on the backend' f' service {backend_service_name} in scope' f' {region}?'), choice_msg='Enter an option: ', ) if response == op.NO: op.info(message=op.END_MESSAGE) def get_health_check_success_criteria(health_check: gce.HealthCheck): """Constructs a human-readable description of a health check's success criteria.""" success_criteria = ( f'The health check is using {health_check.type} protocol, and ') port = ('serving port' if health_check.port_specification == 'USE_SERVING_PORT' else f'port {health_check.port}') if health_check.type in ['HTTP', 'HTTPS', 'HTTP2']: success_criteria += ( 'it is set to: \n- send a prober requests to the' f' {health_check.request_path} path on {port} \n- expect a response' ' with an HTTP 200 (OK) status code') if health_check.response: success_criteria += ( f' and response body containing the string "{health_check.response}"') elif health_check.type in ['TCP', 'SSL']: success_criteria += f'it is set to: \n- send a prober requests on {port}' if health_check.request: success_criteria += ( f' with the configured request string "{health_check.request}"') success_criteria += f'\n- expect a successful {health_check.type} handshake' if health_check.response: success_criteria += ( f' and the response string exactly matches: "{health_check.response}"' ) elif health_check.type == 'GRPC': success_criteria += ( f' it is set to: \n- send a prober requests on {port} \n- expect a RPC' ' response with the status OK and the status field set to SERVING') else: raise ValueError(f'Unsupported health check type: {health_check.type}') return success_criteria def _get_timing_and_threshold_info(health_check: gce.HealthCheck) -> str: """Constructs a human-readable description of a health check's timing and threshold settings.""" timing_and_threshold = ( f'The health check is configured with the following timing and threshold' f' settings:\n- **Check Interval:** A health check is performed every' f' {health_check.check_interval_sec} seconds.\n- **Timeout:** The prober' f' will wait up to {health_check.timeout_sec} seconds for a' f' response.\n- **Healthy Threshold:** It takes' f' {health_check.healthy_threshold} consecutive successes for a backend to' f' be considered healthy.\n- **Unhealthy Threshold:** It takes' f' {health_check.unhealthy_threshold} consecutive failures for a backend' f' to be considered unhealthy.') return timing_and_threshold def _get_zonal_network_endpoint_group( project: str, zone: str, name: str) -> Optional[gce.NetworkEndpointGroup]: """Returns a map of Network Endpoint Groups in the project.""" groups = gce.get_zonal_network_endpoint_groups(op.get_context()) url = f"""projects/{project}/zones/{zone}/networkEndpointGroups/{name}""" if url in groups: return groups[url] else: return None ================================================ FILE: gcpdiag/runbook/lb/unhealthy_backends_test.py ================================================ # Copyright 2024 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. """Test class for lb/LbUnhealthyBackends""" from gcpdiag import config from gcpdiag.runbook import lb, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = lb runbook_name = 'lb/unhealthy-backends' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-lb2-aaaa', 'backend_service_name': 'web-backend-service', }, { 'project_id': 'gcpdiag-lb2-aaaa', 'backend_service_name': 'backend-service-2', 'region': 'europe-west4', }] ================================================ FILE: gcpdiag/runbook/logs/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/logs/constants.py ================================================ # Copyright 2024 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. """Contains constants specific constants""" ================================================ FILE: gcpdiag/runbook/logs/flags.py ================================================ # Copyright 2024 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. """Contains flags specific to cloud logging runbooks""" ================================================ FILE: gcpdiag/runbook/logs/generalized_steps.py ================================================ # Copyright 2024 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. """Contains generalized Cloud logging related Steps """ import re from typing import Optional from gcpdiag import runbook, utils from gcpdiag.queries import crm, logs from gcpdiag.runbook import op from gcpdiag.runbook.gcp import flags class CheckIssueLogEntry(runbook.Step): """Checks logs for problematic entry using filter string provided. Attributes: project_id(str): Project ID to search for filter filter_str(str): Filter written in log querying language: https://cloud.google.com/logging/docs/view/query-library. This field required because an empty filter matches all log entries. template(str): Custom template for logging issues related to a resource type resource_name (Optional[str]): Resource identifier that will be used in the custom template provided. """ project_id: str filter_str: str template: str = 'logging::default' issue_pattern: Optional[list[str]] = [] resource_name: Optional[str] = None def execute(self): """Check for log entries matching problematic filter string""" project = crm.get_project(self.project_id) try: fetched_logs = logs.realtime_query(project_id=self.project_id, filter_str=self.filter_str, start_time=op.get(flags.START_TIME), end_time=op.get(flags.END_TIME)) except utils.GcpApiError as err: self.template = 'logging::default' op.add_skipped(project, reason=op.prep_msg(op.SKIPPED_REASON, api_err=err, query=self.filter_str)) else: remediation = None reason = None self.filter_str += (f'timestamp >= "{op.get(flags.START_TIME)}"' f' AND timestamp <= "{op.get(flags.END_TIME)}"\n') if fetched_logs and _pattern_exists_in_entries(self.issue_pattern, fetched_logs): if self.template != 'logging::default' and self.resource_name: reason = op.prep_msg(op.FAILURE_REASON, resource_name=self.resource_name, project_id=self.project_id, query=self.filter_str) remediation = op.prep_msg(op.FAILURE_REMEDIATION, query=self.filter_str, resource_name=self.resource_name, project_id=self.project_id) else: reason = op.prep_msg(op.FAILURE_REASON, query=self.filter_str) remediation = op.prep_msg(op.FAILURE_REMEDIATION, query=self.filter_str) op.add_failed(project, reason=reason, remediation=remediation) else: if self.template != 'logging::default' and self.resource_name: reason = op.prep_msg(op.UNCERTAIN_REASON, resource_name=self.resource_name, query=self.filter_str, project_id=self.project_id) remediation = op.prep_msg(op.UNCERTAIN_REMEDIATION, query=self.filter_str, resource_name=self.resource_name, project_id=self.project_id) else: reason = op.prep_msg(op.UNCERTAIN_REASON, query=self.filter_str) remediation = op.prep_msg(op.UNCERTAIN_REMEDIATION, query=self.filter_str) op.add_uncertain(project, reason=reason, remediation=remediation) def _pattern_exists_in_entries(issue_pattern, fetched_logs): for log_entry in fetched_logs: message = log_entry.get('protoPayload', {}).get('status', {}).get('message') if message: for pattern_str in issue_pattern: if re.search(pattern_str, message): return True return False ================================================ FILE: gcpdiag/runbook/logs/templates/logging.jinja ================================================ {% block default_failure_reason %} Problematic log entries found matching query: {query} {% endblock default_failure_reason %} {% block default_failure_remediation %} Run the following Cloud Logging query in the Google Cloud console to find the log entry indicating the problem: Query: {query} {% endblock default_failure_remediation %} {% block default_uncertain_reason %} No problematic log entries found in the time range matching the following query: {query} {% endblock default_uncertain_reason %} {% block default_uncertain_remediation %} 1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly. Query: {query} 2. Verify that logging for the resource has not been disabled due to cost management: {% endblock default_uncertain_remediation %} {% block default_skipped_reason %} Could not fetch log entries for the following due to {api_err}. Query: {query} {% endblock default_skipped_reason %} {% block dataproc_cluster_quota_uncertain_reason %} No issues with insufficient quota identified for cluster {resource_name} in project {project_id} using query: {query}. {% endblock dataproc_cluster_quota_uncertain_reason %} {% block dataproc_cluster_quota_uncertain_remediation %} 1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly. Query: {query} 2. Verify that the property `dataproc.logging.stackdriver.enable` has not been set to false for cluster {resource_name} in project {project_id}: 3. Verify that logging for the cluster {resource_name} has not been disabled due to cost management: {% endblock dataproc_cluster_quota_uncertain_remediation %} {% block dataproc_cluster_quota_failure_reason %} The cluster {resource_name} in project {project_id} could not be created due to insufficient quota identified using query: {query} {% endblock dataproc_cluster_quota_failure_reason %} {% block dataproc_cluster_quota_failure_remediation %} This issue occurs when the requested Dataproc cluster exceeds the project's available quota for resources such as CPU, disk space, or IP addresses. To resolve this issue: - Request additional quota [1] via the Google Cloud console. - Create the cluster in a different project. [1] {% endblock dataproc_cluster_quota_failure_remediation %} {% block dataproc_cluster_stockout_uncertain_reason %} No issues with stockouts identified for cluster {resource_name} in project {project_id} using query: {query}. {% endblock dataproc_cluster_stockout_uncertain_reason %} {% block dataproc_cluster_stockout_uncertain_remediation %} 1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly. Query: {query} 2. Verify that the property `dataproc.logging.stackdriver.enable` has not been set to false for cluster {resource_name} in project {project_id}: 3. Verify that logging for the cluster {resource_name} has not been disabled due to cost management: {% endblock dataproc_cluster_stockout_uncertain_remediation %} {% block dataproc_cluster_stockout_failure_reason %} The cluster {resource_name} creation in project {project_id} failed due to insufficient resources in the selected zone/region. {% endblock dataproc_cluster_stockout_failure_reason %} {% block dataproc_cluster_stockout_failure_remediation %} A Dataproc cluster creation stockout occurs when the requested resources for cluster creation are currently not available within a specified Google Cloud zone or region. Resolution Steps: 1. Utilize Dataproc Auto Zone Placement: When creating your Dataproc cluster, avoid explicitly specifying a zone. Instead, leverage Dataproc's Auto Zone placement feature, which automatically selects an available zone with sufficient resources. 2. Review Capacity and Quota Management: If you are already employing Auto Zone placement and still encountering stockouts, it may indicate broader capacity or quota limitations. Consult the following resource for comprehensive strategies on managing capacity, quotas, and stockouts in Google Cloud. {% endblock dataproc_cluster_stockout_failure_remediation %} {% block gce_log_failure_reason %} Log entries found matching query: {query} {% endblock gce_log_failure_reason %} {% block gce_log_failure_remediation %} Review the log entries in Cloud Logging for details. Query: {query} {% endblock gce_log_failure_remediation %} {% block gce_log_uncertain_reason %} No log entries matching issue patterns found in project {project_id} for resource {resource_name} with query: {query} {% endblock gce_log_uncertain_reason %} {% block gce_log_uncertain_remediation %} 1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly. Query: {query} 2. Verify that logging for the resource has not been disabled due to cost management: {% endblock gce_log_uncertain_remediation %} {% block gce_log_skipped_reason %}c Could not fetch log entries for query due to: {api_err}. Query: {query} {% endblock gce_log_skipped_reason %} ================================================ FILE: gcpdiag/runbook/monitoring/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/monitoring/constants.py ================================================ # Copyright 2024 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. """Contains constants specific to Cloud Monitoring""" ================================================ FILE: gcpdiag/runbook/monitoring/flags.py ================================================ # Copyright 2024 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. """Contains flags specific to Cloud monitoring""" ================================================ FILE: gcpdiag/runbook/monitoring/generalized_steps.py ================================================ # Copyright 2024 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. """Contains generalized steps for Cloud monitoring""" from gcpdiag import runbook from gcpdiag.models import Resource from gcpdiag.queries import monitoring from gcpdiag.runbook import op from gcpdiag.runbook.gcp import flags class TimeSeriesCheck(runbook.Step): """Assess if a given metric is has expected values.. Currently checks if an attribute - Currently checks if metrics exists indicating a problem - Improve to be more flexible. """ template = 'metrics::default' query: str query_kwargs: dict resource: Resource def execute(self): """Verify if expected metrics value is present or not""" metrics = None metrics = monitoring.query(op.get(flags.PROJECT_ID), self.query.format(self.query_kwargs)) if metrics: op.add_failed(self.resource, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(self.resource, reason=op.prep_msg(op.SUCCESS_REASON)) ================================================ FILE: gcpdiag/runbook/monitoring/templates/metrics.jinja ================================================ {% block default_success_reason %} The expected good value is present within the checked metric collection. {% endblock default_success_reason %} {% block default_failure_reason %} A known bad value is present within the checked metric collection. {% endblock default_failure_reason %} {% block default_failure_remediation %} Review the metric data in Cloud Monitoring for more details. Alternatively, run the following Cloud Logging query: Query: {query} {% endblock default_failure_remediation %} {% block default_uncertain_reason %} The metric data analysis was inconclusive. Manual investigation using Cloud Logging is recommended. {% endblock default_uncertain_reason %} {% block default_uncertain_remediation %} Review the metric data in Cloud Monitoring for more details. Alternatively, run the following Cloud Logging query: Query: {query} {% endblock default_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/nat/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/nat/constants.py ================================================ # Copyright 2024 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. """Common constants used within runbook""" ================================================ FILE: gcpdiag/runbook/nat/flags.py ================================================ # Copyright 2024 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. """Common flags applicable to any runbook""" # pylint: disable=wildcard-import, unused-wildcard-import from gcpdiag.runbook.gcp.flags import * PROJECT_ID = 'project_id' PROJECT_NUMBER = 'project_number' NETWORK = 'network' NAT_NETWORK = 'nat_network' REGION = 'region' NAT_GATEWAY_NAME = 'nat_gateway_name' CLOUD_ROUTER_NAME = 'cloud_router_name' FOLDER_ID = 'folder_id' ORG_ID = 'org_id' NAME = 'name' ID = 'id' ZONE = 'zone' INTERACTIVE_MODE = 'auto' ================================================ FILE: gcpdiag/runbook/nat/generalized_steps.py ================================================ # Copyright 2024 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. """Contains Reusable Steps for NAT related Diagnostic Trees""" from gcpdiag import runbook from gcpdiag.queries import gce, monitoring from gcpdiag.runbook import op from gcpdiag.runbook.nat import utils from gcpdiag.runbook.vpc import flags class NatIpExhaustionCheck(runbook.Step): """Evaluates NATGW for NAT IP exhaustion/allocation issues. This step determines whether Cloud NAT has run into issues due to insufficient NAT IP addresses. """ template = 'nat_out_of_resources::nat_ip_exhaustion_check' def execute(self): """Checking NAT Allocation failed metric for NAT IP allocation failure""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) region = utils.region_from_zone(op.get(flags.ZONE)) if op.get('nat_gateway_name'): gw_name = op.get('nat_gateway_name') nat_allocation_failed = monitoring.query( op.get(flags.PROJECT_ID), 'fetch nat_gateway::router.googleapis.com/nat/nat_allocation_failed ' f'| filter (resource.gateway_name == \'{gw_name}\' && resource.region == \'{region}\')' ' | within 5m') if nat_allocation_failed: values = nat_allocation_failed.values() for value in values: if value.get('values')[0][0]: op.add_failed(vm, reason=op.prep_msg( op.FAILURE_REASON, nat_gateway_name=op.get('nat_gateway_name')), remediation=op.prep_msg( op.FAILURE_REMEDIATION, nat_gateway_name=op.get('nat_gateway_name'))) else: op.add_ok(vm, reason=op.prep_msg( op.SUCCESS_REASON, nat_gateway_name=op.get('nat_gateway_name'))) else: op.add_uncertain( vm, f"Cloud not get IP allocation failed metric for NATGW {op.get('nat_gateway_name')}" ) class NatResourceExhaustionCheck(runbook.Step): """Evaluates NATGW for OUT_OF_RESOURCES and ENDPOINT_INDEPENDENCE_CONFLICT issues. This step determines whether Cloud NAT has run into resource issues. """ template = 'nat_out_of_resources::nat_resource_exhaustion_check' def execute(self): """Checking NATGW for OUT_OF_RESOURCES or ENDPOINT_INDEPENDENCE_CONFLICT issues""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) region = utils.region_from_zone(op.get(flags.ZONE)) if op.get('nat_gateway_name'): gw_name = op.get('nat_gateway_name') dropped_sent_packets_count = monitoring.query( op.get(flags.PROJECT_ID), 'fetch nat_gateway::router.googleapis.com/nat/dropped_sent_packets_count ' f'| filter (resource.gateway_name == \'{gw_name}\' ' f'&& resource.region == \'{region}\')' '| align rate(10m)' '| within 10m | group_by [metric.reason],' ' [value_dropped_sent_packets_count_aggregate: ' 'aggregate(value.dropped_sent_packets_count)]') if dropped_sent_packets_count: values = dropped_sent_packets_count.values() for value in values: if value.get('values')[0][0]: op.add_failed(vm, reason=op.prep_msg( op.FAILURE_REASON, metric_reason=value.get('labels', {}).get('metric.reason'), nat_gateway_name=op.get('nat_gateway_name')), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(vm, reason=op.prep_msg( op.SUCCESS_REASON, nat_gateway_name=op.get('nat_gateway_name'), metric_reason=value.get('labels', {}).get('metric.reason'))) else: op.add_uncertain( vm, f"Cloud not get dropped sent packets count metric for NATGW {op.get('nat_gateway_name')}" ) class NatDroppedReceivedPacketCheck(runbook.Step): """Evaluates NATGW received_packets_dropped metric for issues. This step determines whether the NATGW is dropping packets. NAT gateways could be dropping packets for various reasons; however, the drops are not always indicative of an issue """ template = 'nat_out_of_resources::nat_dropped_received_packet_check' def execute(self): """Checking NATGW received_packets_dropped metric for elevated drops""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) region = utils.region_from_zone(op.get(flags.ZONE)) if op.get('nat_gateway_name'): gw_name = op.get('nat_gateway_name') received_packets_dropped = monitoring.query( op.get(flags.PROJECT_ID), 'fetch nat_gateway::router.googleapis.com/nat/dropped_received_packets_count ' f'| filter (resource.gateway_name == \'{gw_name}\' && resource.region == \'{region}\')' '| align rate(5m) | within 5m | group_by [],' '[value_dropped_received_packets_count_aggregate:' 'aggregate(value.dropped_received_packets_count)]') if received_packets_dropped: values = received_packets_dropped.values() for value in values: if value.get('values')[0][0] >= 1: op.put('natgw_rcv_pkt_drops', True) op.add_uncertain(vm, reason=op.prep_msg( op.UNCERTAIN_REASON, nat_gateway_name=op.get('nat_gateway_name'), metric_value=value.get('values')[0][0]), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) # Also check the for received packet drops at the vm level vm_received_packets_dropped_count = monitoring.query( op.get(flags.PROJECT_ID), 'fetch gce_instance::compute.googleapis.com/nat/dropped_received_packets_count ' f'| filter (resource.gateway_name == \'{gw_name}\' ' f'&& resource.region == \'{region}\')' '| align rate(5m)' '| every 5m' '| group_by [resource.instance_id], ' '[value_dropped_received_packets_count_aggregate: ' 'aggregate(value.dropped_received_packets_count)]') if vm_received_packets_dropped_count: vm_drop_list = [] vm_values = vm_received_packets_dropped_count.values() for vm_value in vm_values: if vm_value.get('values')[0][0] >= 1 and len(vm_drop_list) <= 5: vm_drop_list.append({ 'instance_id': vm_value.get('labels', {}).get('resource.instance_id'), 'rcv_pkt_drp_count': vm_value.get('values')[0][0] }) if vm_drop_list: op.add_uncertain( vm, reason='Elevated received_packet_drop_count metric noticed' f'for following VMs {str(vm_drop_list)}', remediation= """VMs could be dropping packets for various reasons; however, the drops are not always indicative of an issue. See more on troubleshooting cloud NAT and reducing the drops here [1] and [2]: Open a case to GCP Support for justification for the packet drops. [1] https://cloud.google.com/nat/docs/troubleshooting [2] https://cloud.google.com/knowledge/kb /reduce-received-packets-dropped-count-on-cloud-nat-000006744""" ) else: op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON)) else: op.add_ok(vm, reason=op.prep_msg( op.SUCCESS_REASON, nat_gateway_name=op.get('nat_gateway_name'))) else: op.add_uncertain( vm, 'Cloud not get dropped_received_packets_count' f"metric for NATGW {op.get('nat_gateway_name')}") ================================================ FILE: gcpdiag/runbook/nat/generalized_steps_test.py ================================================ # Copyright 2024 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. """Reusable Steps for NAT related Diagnostic Trees""" import datetime import unittest from unittest import mock from gcpdiag.queries import apis_stub from gcpdiag.runbook import op from gcpdiag.runbook.nat import generalized_steps from gcpdiag.runbook.vpc import flags class MockMessage: """Mock messages for testing. Simply returns the key to verify template usage. """ def get_msg(self, key, **kwargs): del kwargs return f'{key}' class MockMonitoringResult: def __init__(self, data): self._data = data def values(self): return self._data def __bool__(self): return bool(self._data) def make_ip_exhaustion_result(is_failed): if is_failed is None: return None return MockMonitoringResult([{'values': [[is_failed]]}]) def make_resource_exhaustion_result(value, reason='OUT_OF_RESOURCES'): if value is None: return None return MockMonitoringResult([{ 'values': [[value]], 'labels': { 'metric.reason': reason } }]) def make_dropped_received_packet_result(value): if value is None: return None return MockMonitoringResult([{'values': [[value]]}]) def make_vm_dropped_received_packet_result(vm_drops): # vm_drops is a list of tuples: (instance_id, drop_count) data = [] for instance_id, drop_count in vm_drops: data.append({ 'values': [[drop_count]], 'labels': { 'resource.instance_id': instance_id } }) return MockMonitoringResult(data) class NatStepsTest(unittest.TestCase): def setUp(self): super().setUp() self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_monitoring_query = self.enterContext( mock.patch('gcpdiag.queries.monitoring.query')) self.mock_region_from_zone = self.enterContext( mock.patch('gcpdiag.runbook.nat.utils.region_from_zone', return_value='us-central1')) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.params = { flags.PROJECT_ID: 'gcpdiag-nat1-aaaa', flags.ZONE: 'us-central1-a', flags.INSTANCE_NAME: 'instance-1', 'nat_gateway_name': 'nat-gw-1', 'start_time': datetime.datetime(2025, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc), 'end_time': datetime.datetime(2025, 1, 1, 1, 0, 0, tzinfo=datetime.timezone.utc), } def test_nat_ip_exhaustion_check_failed(self): self.mock_monitoring_query.return_value = make_ip_exhaustion_result( is_failed=True) step = generalized_steps.NatIpExhaustionCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_uncertain.assert_not_called() def test_nat_ip_exhaustion_check_ok(self): self.mock_monitoring_query.return_value = make_ip_exhaustion_result( is_failed=False) step = generalized_steps.NatIpExhaustionCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_uncertain.assert_not_called() def test_nat_ip_exhaustion_check_no_gw_name(self): self.params['nat_gateway_name'] = None step = generalized_steps.NatIpExhaustionCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_uncertain.assert_called_once() def test_nat_ip_exhaustion_check_no_monitoring_data(self): self.mock_monitoring_query.return_value = make_ip_exhaustion_result( is_failed=None) step = generalized_steps.NatIpExhaustionCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_uncertain.assert_not_called() class NatResourceExhaustionCheckTest(NatStepsTest): def test_nat_resource_exhaustion_check_failed(self): self.mock_monitoring_query.return_value = make_resource_exhaustion_result( value=1) step = generalized_steps.NatResourceExhaustionCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_uncertain.assert_not_called() def test_nat_resource_exhaustion_check_ok(self): self.mock_monitoring_query.return_value = make_resource_exhaustion_result( value=0) step = generalized_steps.NatResourceExhaustionCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_uncertain.assert_not_called() def test_nat_resource_exhaustion_check_no_gw_name(self): self.params['nat_gateway_name'] = None step = generalized_steps.NatResourceExhaustionCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_uncertain.assert_called_once() def test_nat_resource_exhaustion_check_no_monitoring_data(self): self.mock_monitoring_query.return_value = make_resource_exhaustion_result( None) step = generalized_steps.NatResourceExhaustionCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_uncertain.assert_not_called() class NatDroppedReceivedPacketCheckTest(NatStepsTest): def test_nat_dropped_received_packet_check_ok(self): self.mock_monitoring_query.return_value = make_dropped_received_packet_result( 0) step = generalized_steps.NatDroppedReceivedPacketCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertNotIn('natgw_rcv_pkt_drops', self.operator.parameters) self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_uncertain.assert_not_called() def test_nat_dropped_received_packet_check_no_gw_name(self): self.params['nat_gateway_name'] = None step = generalized_steps.NatDroppedReceivedPacketCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertNotIn('natgw_rcv_pkt_drops', self.operator.parameters) self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_uncertain.assert_called_once() def test_nat_dropped_received_packet_check_no_monitoring_data(self): self.mock_monitoring_query.return_value = make_dropped_received_packet_result( None) step = generalized_steps.NatDroppedReceivedPacketCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertNotIn('natgw_rcv_pkt_drops', self.operator.parameters) self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_uncertain.assert_not_called() def test_nat_dropped_received_packet_check_gw_drops_no_vm_drops_data(self): self.mock_monitoring_query.side_effect = [ make_dropped_received_packet_result(1), None ] step = generalized_steps.NatDroppedReceivedPacketCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertEqual(op.get('natgw_rcv_pkt_drops'), True) self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_not_called() self.mock_interface.add_uncertain.assert_called_once() def test_nat_dropped_received_packet_check_gw_drops_vm_drops_below_threshold( self): self.mock_monitoring_query.side_effect = [ make_dropped_received_packet_result(1), make_vm_dropped_received_packet_result([('vm1', 0.5), ('vm2', 0)]) ] step = generalized_steps.NatDroppedReceivedPacketCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertEqual(op.get('natgw_rcv_pkt_drops'), True) self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_called_once() self.assertEqual(self.mock_interface.add_uncertain.call_count, 1) def test_nat_dropped_received_packet_check_gw_drops_with_vm_drops(self): self.mock_monitoring_query.side_effect = [ make_dropped_received_packet_result(1), make_vm_dropped_received_packet_result([('vm1', 2), ('vm2', 0)]) ] step = generalized_steps.NatDroppedReceivedPacketCheck() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertEqual(op.get('natgw_rcv_pkt_drops'), True) self.mock_interface.add_failed.assert_not_called() self.mock_interface.add_ok.assert_not_called() self.assertEqual(self.mock_interface.add_uncertain.call_count, 2) ================================================ FILE: gcpdiag/runbook/nat/out_of_resources.py ================================================ # Copyright 2024 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. """Class for nat/Out_of_resources""" ================================================ FILE: gcpdiag/runbook/nat/out_of_resources_test.py ================================================ # Copyright 2024 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. """Test class for nat/Out_of_resources""" ================================================ FILE: gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py ================================================ # Copyright 2024 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. """Module containing NAT IP Allocation Failed debugging tree and custom steps""" import googleapiclient.errors from gcpdiag import config, models, runbook from gcpdiag.queries import crm, monitoring, network from gcpdiag.runbook import op from gcpdiag.runbook.nat import flags class PublicNatIpAllocationFailed(runbook.DiagnosticTree): """Troubleshooting for IP Allocation issues for Cloud NAT. This runbook investigates Cloud NAT for NAT IP Allocation failed issue and proposes remediation steps. Areas Examined: - Metric check: Checks the NAT Allocation Failed metric for the provided NATGW if it is True or False. - NATGW Configuration: Checks the gateway if it is configured with manual or automatic IP allocation. - NAT IP and Port calculation: For source nic without an External IP address, verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.NAT_GATEWAY_NAME: { 'type': str, 'help': 'The name of the NATGW', 'required': True }, flags.CLOUD_ROUTER_NAME: { 'type': str, 'help': 'The name of the Cloud Router of the NATGW', 'required': True }, flags.NETWORK: { 'type': str, 'help': 'The VPC network of the target NATGW', 'new_parameter': 'nat_network', 'deprecated': True, }, flags.NAT_NETWORK: { 'type': str, 'help': 'The VPC network of the target NATGW', 'required': True }, flags.REGION: { 'type': str, 'help': 'The region of the target NATGW', 'required': True } } def legacy_parameter_handler(self, parameters): """Handles legacy parameters.""" if flags.NETWORK in parameters: parameters[flags.NAT_NETWORK] = parameters.pop(flags.NETWORK) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate step classes start = NatIpAllocationFailedStart() nat_allocation_failed_check = NatAllocationFailedCheck() nat_gw_ip_allocation_method_check = NatIpAllocationMethodCheck() # add to the debugging tree self.add_start(start) # Describe the step relationships self.add_step(parent=start, child=nat_allocation_failed_check) self.add_step(parent=nat_allocation_failed_check, child=nat_gw_ip_allocation_method_check) # Ending your runbook self.add_end(NatIpAllocationFailedEnd()) class NatIpAllocationFailedStart(runbook.StartStep): """Start Nat IP Allocation Failed Checks. This step steps starts the NAT IP Allocation Failed Check debugging process by verifying the correct input parameters have been provided and checking to ensure that the following resources exist. - The Project - VPC Network - The NAT Cloud Router """ template = 'nat_ip_allocation_failed::confirmation' def execute(self): """Starting Nat IP Allocation Failed diagnostics""" project = crm.get_project(op.get(flags.PROJECT_ID)) context = models.Context(project_id=op.get(flags.PROJECT_ID)) # try to fetch the network for the NATGW try: vpc_network = network.get_network( project_id=context.project_id, network_name=op.get(flags.NAT_NETWORK), context=context, ) except googleapiclient.errors.HttpError: op.add_skipped( project, reason=op.prep_msg( op.SKIPPED_REASON, network=op.get(flags.NAT_NETWORK), project_id=op.get(flags.PROJECT_ID), ), ) return # try to get the cloud router try: routers = network.get_routers( project_id=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), network=vpc_network, ) except googleapiclient.errors.HttpError: op.add_skipped( project, reason=op.prep_msg( op.SKIPPED_REASON_ALT1, cloud_router=op.get(flags.CLOUD_ROUTER_NAME), region=op.get(flags.REGION), project_id=op.get(flags.PROJECT_ID), ), ) return if routers: # Check that the cloud router name passed is valid. router = [r for r in routers if r.name == op.get(flags.CLOUD_ROUTER_NAME)] if not router: op.add_skipped( project, reason=op.prep_msg( op.SKIPPED_REASON_ALT2, cloud_router=op.get(flags.CLOUD_ROUTER_NAME), region=op.get(flags.REGION), project_id=op.get(flags.PROJECT_ID), ), ) return # Check that the natgateway name passed is served by the cloud router. nat_router = router[0] if not [ n for n in nat_router.nats if n['name'] == op.get(flags.NAT_GATEWAY_NAME) ]: op.add_skipped( project, reason=op.prep_msg( op.SKIPPED_REASON_ALT3, cloud_router=op.get(flags.NAT_GATEWAY_NAME), region=op.get(flags.REGION), project_id=op.get(flags.PROJECT_ID), ), ) class NatAllocationFailedCheck(runbook.Step): """Checks NAT Allocation failed metric for the NATGW. This step determines whether Cloud NAT has run into issues due to insufficient NAT IP addresses. by checking the NAT Allocation failed metric. """ template = 'nat_ip_allocation_failed::nat_allocation_metric_check' def execute(self): """Checking the nat_allocation_failed metric for NAT IP allocation failure and the NAT router status. """ project = crm.get_project(op.get(flags.PROJECT_ID)) gw_name = op.get(flags.NAT_GATEWAY_NAME) region = op.get(flags.REGION) min_extra_ips_needed = 0 vms_with_nat_mappings = 0 # check the nat router status router_status = network.nat_router_status( project_id=op.get(flags.PROJECT_ID), router_name=op.get(flags.CLOUD_ROUTER_NAME), region=op.get(flags.REGION)) if not router_status: op.info('unable to fetch router status for the router: %s', op.get(flags.CLOUD_ROUTER_NAME)) else: min_extra_ips_needed = router_status.min_extra_nat_ips_needed vms_with_nat_mappings = router_status.num_vms_with_nat_mappings nat_allocation_failed = monitoring.query( op.get(flags.PROJECT_ID), 'fetch nat_gateway::router.googleapis.com/nat/nat_allocation_failed ' f'| filter (resource.gateway_name == \'{gw_name}\' && resource.region == \'{region}\')' ' | within 5m') if nat_allocation_failed: values = nat_allocation_failed.values() for value in values: if value.get('values')[0][0] or min_extra_ips_needed: op.add_failed(project, reason=op.prep_msg( op.FAILURE_REASON, nat_gateway_name=op.get(flags.NAT_GATEWAY_NAME), router_name=op.get(flags.CLOUD_ROUTER_NAME), min_extra_ips_needed=min_extra_ips_needed, vms_with_nat_mappings=vms_with_nat_mappings), remediation=op.prep_msg( op.FAILURE_REMEDIATION, nat_gateway_name=op.get(flags.NAT_GATEWAY_NAME), router_name=op.get(flags.CLOUD_ROUTER_NAME), min_extra_ips_needed=min_extra_ips_needed, vms_with_nat_mappings=vms_with_nat_mappings)) else: op.add_ok(project, reason=op.prep_msg( op.SUCCESS_REASON, nat_gateway_name=op.get(flags.NAT_GATEWAY_NAME), router_name=op.get(flags.CLOUD_ROUTER_NAME), min_extra_ips_needed=min_extra_ips_needed, vms_with_nat_mappings=vms_with_nat_mappings)) op.add_skipped(project, reason=op.prep_msg( op.SKIPPED_REASON, nat_gateway_name=op.get(flags.NAT_GATEWAY_NAME), router_name=op.get(flags.CLOUD_ROUTER_NAME))) else: op.add_uncertain(project, reason=op.prep_msg(op.UNCERTAIN_REASON, nat_gateway_name=op.get( flags.NAT_GATEWAY_NAME)), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION, nat_gateway_name=op.get( flags.NAT_GATEWAY_NAME))) class NatIpAllocationMethodCheck(runbook.Gateway): """Checks the NATGW configuration to determine next troubleshooting steps. Checks if the NATGW router is configured with manual or automatic IP allocation """ template = 'nat_ip_allocation_failed::nat_allocation_method_check' def execute(self): """Checking the NATGW configuration.""" project = crm.get_project(op.get(flags.PROJECT_ID)) context = models.Context(project_id=op.get(flags.PROJECT_ID)) # try to fetch the network for the NATGW try: vpc_network = network.get_network(project_id=context.project_id, network_name=op.get(flags.NAT_NETWORK), context=context) except googleapiclient.errors.HttpError: op.add_skipped( project, reason= ("""Unable to fetch the network {} confirm it exists in the project {}""" ).format(op.get(flags.NAT_NETWORK), op.get(flags.PROJECT_ID))) return # try to get the router try: routers = network.get_routers(project_id=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), network=vpc_network) except googleapiclient.errors.HttpError: op.add_skipped(project, reason=("""Failed to fetch routers in the vpc network {} does not exist in region {} of project {}""").format( op.get(flags.NAT_NETWORK), op.get(flags.REGION), op.get(flags.PROJECT_ID))) return if routers: # filter routers for the cloud router name specified for the gateway. router = [r for r in routers if r.name == op.get(flags.CLOUD_ROUTER_NAME)] if router: nat_router = router[0] if nat_router.get_nat_ip_allocate_option( nat_gateway=op.get(flags.NAT_GATEWAY_NAME)) == 'AUTO_ONLY': self.add_child(NatIpAllocationAutoOnly()) else: self.add_child(NatIpAllocationManualOnly()) else: op.add_skipped(project, reason=""" No Cloud router with the name: {} found. """.format(op.get(flags.CLOUD_ROUTER_NAME))) class NatIpAllocationAutoOnly(runbook.Step): """Provides recommendations when NAT IP allocation is AUTO_ONLY. NAT IP allocation is configured as AUTO_ONLY, either: - Switch to Manual NAT IP assignment or - Add one more gateway in the same network and region """ template = 'nat_ip_allocation_failed::nat_allocation_auto_only' def execute(self): """NAT IP allocation is configured as AUTO_ONLY.""" project = crm.get_project(op.get(flags.PROJECT_ID)) op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON, nat_gateway_name=op.get( flags.NAT_GATEWAY_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class NatIpAllocationManualOnly(runbook.Step): """Investigates when NAT IP allocation is MANUAL_ONLY. If the NAT IP allocation is configured as MANUAL_ONLY: - Confirm if the number of NAT IP's required by the gateway is over 300 - Follow the NAT IP Quota Increase Process """ template = 'nat_ip_allocation_failed::nat_allocation_manual_only' def execute(self): """NAT IP allocation is configured with MANUAL_ONLY. Running diagnostic for NAT Gateway configured as MANUAL_ONLY only """ project = crm.get_project(op.get(flags.PROJECT_ID)) context = models.Context(project_id=op.get(flags.PROJECT_ID)) enable_dynamic_port_allocation = None nat_gw_ips_in_use = None min_extra_ips_needed = 0 vms_with_nat_mappings = 0 # try to fetch the network for the NATGW try: vpc_network = network.get_network(project_id=context.project_id, network_name=op.get(flags.NAT_NETWORK), context=context) except googleapiclient.errors.HttpError: op.add_skipped( project, reason= ("""Unable to fetch the network {} confirm it exists in the project {}""" ).format(op.get(flags.NAT_NETWORK), op.get(flags.PROJECT_ID))) return # try to get the router try: routers = network.get_routers(project_id=op.get(flags.PROJECT_ID), region=op.get(flags.REGION), network=vpc_network) except googleapiclient.errors.HttpError: op.add_skipped(project, reason=("""Failed to fetch routers in the vpc network {} does not exist in region {} of project {}""").format( op.get(flags.NAT_NETWORK), op.get(flags.REGION), op.get(flags.PROJECT_ID))) return if routers: # filter for the cloud router name specified. router = [r for r in routers if r.name == op.get(flags.CLOUD_ROUTER_NAME)] if router: nat_router = router[0] enable_dynamic_port_allocation = nat_router.get_enable_dynamic_port_allocation( op.get(flags.NAT_GATEWAY_NAME)) else: op.add_skipped(project, reason=(""" No Cloud router with the name: {} found. """).format(op.get(flags.CLOUD_ROUTER_NAME))) return # Check the nat router status for number of additional NAT IP addresses needed router_status = network.nat_router_status( project_id=op.get(flags.PROJECT_ID), router_name=op.get(flags.CLOUD_ROUTER_NAME), region=op.get(flags.REGION)) if not router_status: op.info('unable to fetch router status for the router: %s', op.get(flags.CLOUD_ROUTER_NAME)) else: min_extra_ips_needed = router_status.min_extra_nat_ips_needed vms_with_nat_mappings = router_status.num_vms_with_nat_mappings # get the NAT IP info mappings for the NAT Gateway router_nat_ip_info = network.get_nat_ip_info( project_id=op.get(flags.PROJECT_ID), router_name=op.get(flags.CLOUD_ROUTER_NAME), region=op.get(flags.REGION)) result = router_nat_ip_info.result if result and op.get(flags.NAT_GATEWAY_NAME) in str(result): nat_gw_ip_info = [ n for n in result if n['natName'] == op.get(flags.NAT_GATEWAY_NAME) ] nat_gw_ip_mappings = nat_gw_ip_info[0]['natIpInfoMappings'] nat_gw_ips_in_use = len( [ip for ip in nat_gw_ip_mappings if ip['usage'] == 'IN_USE']) op.add_ok(project, reason=op.prep_msg( op.SUCCESS_REASON, router_name=op.get(flags.CLOUD_ROUTER_NAME), extra_ips_needed=min_extra_ips_needed, vms_with_nat_mappings=vms_with_nat_mappings, enable_dynamic_port_allocation=enable_dynamic_port_allocation, nat_gw_ips_in_use=nat_gw_ips_in_use)) if min_extra_ips_needed > 0 and nat_gw_ips_in_use > 299: op.add_failed(project, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) if min_extra_ips_needed > 0 and nat_gw_ips_in_use < 300: op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON_ALT1, nat_gateway_name=op.get( flags.NAT_GATEWAY_NAME))) class NatIpAllocationFailedEnd(runbook.EndStep): """Concludes the NAT IP allocation failed diagnostics process. If NAT allocation issues persist, it directs the user to helpful resources and suggests contacting support with a detailed report. """ template = 'nat_ip_allocation_failed::endstep' def execute(self): """Finalize NAT allocation failed diagnostics.""" if not config.get(flags.INTERACTIVE_MODE): response = op.prompt( kind=op.CONFIRMATION, message='Does the issue persist after taking remediation steps?', choice_msg='Enter an option: ') if response == op.NO: op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/nat/public_nat_ip_allocation_failed_test.py ================================================ # Copyright 2024 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. """Test class for nat/nat_ip_allocation_failed""" import datetime import unittest from unittest import mock import googleapiclient from gcpdiag import config from gcpdiag.queries import apis_stub, crm from gcpdiag.runbook import nat, op, snapshot_test_base from gcpdiag.runbook.nat import flags, public_nat_ip_allocation_failed class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = nat runbook_name = 'nat/public-nat-ip-allocation-failed' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-nat1-aaaa', 'region': 'europe-west4', 'nat_gateway_name': 'public-nat-gateway', 'cloud_router_name': 'public-nat-cloud-router', 'network': 'nat-vpc-network' }] class MockMessage: """Mock messages for testing. Simply returns the key to verify template usage. """ def get_msg(self, key, **kwargs): del kwargs return f'{key}' class MockMonitoringResult: def __init__(self, data): self._data = data def values(self): return self._data def __bool__(self): return bool(self._data) def make_ip_exhaustion_result(is_failed): if is_failed is None: return None return MockMonitoringResult([{'values': [[is_failed]]}]) class MockRouterStatus: def __init__(self, min_extra_nat_ips_needed, num_vms_with_nat_mappings): self.min_extra_nat_ips_needed = min_extra_nat_ips_needed self.num_vms_with_nat_mappings = num_vms_with_nat_mappings class MockNatIpInfo: def __init__(self, result): self.result = result class MockRouter: """Mock network.Router object.""" def __init__(self, name, nats, ip_allocate_option='MANUAL_ONLY', dynamic_ports=False): self.name = name self.nats = nats self._ip_allocate_option = ip_allocate_option self._dynamic_ports = dynamic_ports def get_nat_ip_allocate_option(self, nat_gateway): del nat_gateway return self._ip_allocate_option def get_enable_dynamic_port_allocation(self, nat_gateway): del nat_gateway return self._dynamic_ports class PublicNatIpAllocationFailedTest(unittest.TestCase): def setUp(self): super().setUp() self.mock_monitoring_query = self.enterContext( mock.patch('gcpdiag.queries.monitoring.query')) self.mock_get_project = self.enterContext( mock.patch('gcpdiag.queries.crm.get_project')) self.mock_get_network = self.enterContext( mock.patch('gcpdiag.queries.network.get_network')) self.mock_get_routers = self.enterContext( mock.patch('gcpdiag.queries.network.get_routers')) self.mock_nat_router_status = self.enterContext( mock.patch('gcpdiag.queries.network.nat_router_status')) self.mock_get_nat_ip_info = self.enterContext( mock.patch('gcpdiag.queries.network.get_nat_ip_info')) self.mock_get_api = self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.params = { flags.PROJECT_ID: 'test-project', flags.REGION: 'us-central1', flags.NAT_GATEWAY_NAME: 'test-nat-gw', flags.CLOUD_ROUTER_NAME: 'test-router', flags.NAT_NETWORK: 'test-network', 'start_time': datetime.datetime(2025, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc), 'end_time': datetime.datetime(2025, 1, 1, 1, 0, 0, tzinfo=datetime.timezone.utc), } self.mock_get_project.return_value = crm.Project({ 'projectId': 'test-project', 'name': 'projects/123' }) self.mock_get_network.return_value = mock.MagicMock() self.op_get_dict = { flags.PROJECT_ID: 'test-project', 'nat_gateway_name': 'test-nat-gw', } def test_legacy_parameter_handler_network_present(self): """Test that legacy 'network' parameter is moved to 'nat_network'.""" params = {'network': 'legacy-network-value'} tree = public_nat_ip_allocation_failed.PublicNatIpAllocationFailed() tree.legacy_parameter_handler(params) self.assertNotIn('network', params) self.assertIn('nat_network', params) self.assertEqual(params['nat_network'], 'legacy-network-value') def test_start_step_get_network_fails(self): """Test start step when get_network throws HttpError.""" step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart() mock_response = mock.Mock() mock_response.status = 404 self.mock_get_network.side_effect = googleapiclient.errors.HttpError( mock_response, b'not found') with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_start_step_get_routers_fails(self): """Test start step when get_routers throws HttpError.""" step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart() mock_response = mock.Mock() mock_response.status = 404 self.mock_get_routers.side_effect = googleapiclient.errors.HttpError( mock_response, b'not found') with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_start_step_router_not_found(self): """Test start step when router name not in list.""" step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart() self.mock_get_routers.return_value = [ MockRouter('other-router', nats=[{ 'name': 'test-nat-gw' }]) ] with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_start_step_nat_gw_not_found(self): """Test start step when nat gw name not in router.""" step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart() self.mock_get_routers.return_value = [ MockRouter('test-router', nats=[{ 'name': 'other-nat-gw' }]) ] with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_nat_allocation_failed_check_no_router_status(self): """Test allocation check when router status is missing.""" step = public_nat_ip_allocation_failed.NatAllocationFailedCheck() self.mock_nat_router_status.return_value = None self.mock_monitoring_query.return_value = make_ip_exhaustion_result( is_failed=False) with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_skipped.assert_called_once() def test_nat_allocation_failed_check_monitoring_returns_none(self): """Test allocation check when monitoring returns no data.""" step = public_nat_ip_allocation_failed.NatAllocationFailedCheck() self.mock_nat_router_status.return_value = MockRouterStatus(0, 10) self.mock_monitoring_query.return_value = None with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_uncertain.assert_called_once() def test_nat_allocation_failed_check_failed_metric(self): """Test allocation check when nat_allocation_failed metric is true.""" step = public_nat_ip_allocation_failed.NatAllocationFailedCheck() self.mock_nat_router_status.return_value = MockRouterStatus(None, 10) self.mock_monitoring_query.return_value = make_ip_exhaustion_result( is_failed=True) with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_nat_allocation_failed_check_extra_ips_needed(self): """Test allocation check when min_extra_ips_needed > 0.""" step = public_nat_ip_allocation_failed.NatAllocationFailedCheck() self.mock_nat_router_status.return_value = MockRouterStatus(5, 10) self.mock_monitoring_query.return_value = make_ip_exhaustion_result( is_failed=False) with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_nat_allocation_failed_check_ok(self): """Test allocation check passes.""" step = public_nat_ip_allocation_failed.NatAllocationFailedCheck() self.mock_nat_router_status.return_value = MockRouterStatus(0, 10) self.mock_monitoring_query.return_value = make_ip_exhaustion_result( is_failed=False) with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_skipped.assert_called_once() def test_nat_ip_allocation_method_check_auto(self): """Test allocation method check branches to auto.""" step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck() self.mock_get_routers.return_value = [ MockRouter('test-router', nats=[{ 'name': 'test-nat-gw' }], ip_allocate_option='AUTO_ONLY') ] with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertIsInstance( step.steps[0], public_nat_ip_allocation_failed.NatIpAllocationAutoOnly) def test_nat_ip_allocation_method_check_manual(self): """Test allocation method check branches to manual.""" step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck() self.mock_get_routers.return_value = [ MockRouter('test-router', nats=[{ 'name': 'test-nat-gw' }], ip_allocate_option='MANUAL_ONLY') ] with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertIsInstance( step.steps[0], public_nat_ip_allocation_failed.NatIpAllocationManualOnly) def test_nat_ip_allocation_auto_only(self): """Test NatIpAllocationAutoOnly step.""" step = public_nat_ip_allocation_failed.NatIpAllocationAutoOnly() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_failed.assert_called_once() def test_nat_ip_allocation_manual_only_needs_quota(self): """Test NatIpAllocationManualOnly when quota increase is needed.""" step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly() self.mock_get_routers.return_value = [ MockRouter('test-router', nats=[{ 'name': 'test-nat-gw' }], ip_allocate_option='MANUAL_ONLY') ] self.mock_nat_router_status.return_value = MockRouterStatus(5, 10) nat_ip_info_result = [{ 'natName': 'test-nat-gw', 'natIpInfoMappings': [{ 'natIp': '1.1.1.1', 'usage': 'IN_USE' }] * 300 }] self.mock_get_nat_ip_info.return_value = MockNatIpInfo(nat_ip_info_result) with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_ok.assert_called_once() self.mock_interface.add_failed.assert_called_once() def test_nat_ip_allocation_manual_only_ok(self): """Test NatIpAllocationManualOnly when no quota increase is needed.""" step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly() self.mock_get_routers.return_value = [ MockRouter('test-router', nats=[{ 'name': 'test-nat-gw' }], ip_allocate_option='MANUAL_ONLY') ] self.mock_nat_router_status.return_value = MockRouterStatus(5, 10) nat_ip_info_result = [{ 'natName': 'test-nat-gw', 'natIpInfoMappings': [{ 'natIp': '1.1.1.1', 'usage': 'IN_USE' }] * 100 }] self.mock_get_nat_ip_info.return_value = MockNatIpInfo(nat_ip_info_result) with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() # add_ok is called once in all cases, and a second time if ips < 300 self.assertEqual(self.mock_interface.add_ok.call_count, 2) self.mock_interface.add_failed.assert_not_called() def test_end_step(self): """Test NatIpAllocationFailedEnd step.""" step = public_nat_ip_allocation_failed.NatIpAllocationFailedEnd() with mock.patch('gcpdiag.config.get', return_value=False), \ mock.patch('gcpdiag.runbook.op.prompt', return_value=op.NO): with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_with(op.END_MESSAGE, 'INFO') def test_build_tree(self): tree = public_nat_ip_allocation_failed.PublicNatIpAllocationFailed() tree.build_tree() self.assertIsInstance( tree.start, public_nat_ip_allocation_failed.NatIpAllocationFailedStart) def test_nat_ip_allocation_manual_only_no_router_status(self): step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly() self.mock_get_routers.return_value = [ MockRouter('test-router', nats=[{ 'name': 'test-nat-gw' }]) ] self.mock_nat_router_status.return_value = None nat_ip_info_result = [{ 'natName': 'test-nat-gw', 'natIpInfoMappings': [{ 'natIp': '1.1.1.1', 'usage': 'IN_USE' }] }] self.mock_get_nat_ip_info.return_value = MockNatIpInfo(nat_ip_info_result) with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.info.assert_called_once() def test_nat_ip_allocation_method_check_get_network_fails(self): step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck() mock_response = mock.Mock() mock_response.status = 404 self.mock_get_network.side_effect = googleapiclient.errors.HttpError( mock_response, b'not found') with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_nat_ip_allocation_method_check_get_routers_fails(self): step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck() mock_response = mock.Mock() mock_response.status = 404 self.mock_get_routers.side_effect = googleapiclient.errors.HttpError( mock_response, b'not found') with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_nat_ip_allocation_method_check_no_router_found(self): step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck() self.mock_get_routers.return_value = [ MockRouter('other-router', nats=[{ 'name': 'test-nat-gw' }]) ] with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_end_step_interactive_no(self): """Test NatIpAllocationFailedEnd step with interactive mode.""" step = public_nat_ip_allocation_failed.NatIpAllocationFailedEnd() with mock.patch('gcpdiag.config.get', return_value=True), \ mock.patch('gcpdiag.runbook.op.prompt', return_value=op.NO): with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.info.assert_not_called() def test_nat_ip_allocation_manual_only_get_network_fails(self): step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly() mock_response = mock.Mock() mock_response.status = 404 self.mock_get_network.side_effect = googleapiclient.errors.HttpError( mock_response, b'not found') with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_nat_ip_allocation_manual_only_get_routers_fails(self): step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly() mock_response = mock.Mock() mock_response.status = 404 self.mock_get_routers.side_effect = googleapiclient.errors.HttpError( mock_response, b'not found') with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_nat_ip_allocation_manual_only_no_nat_ip_info(self): step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly() self.mock_get_routers.return_value = [ MockRouter('test-router', nats=[{ 'name': 'test-nat-gw' }]) ] self.mock_nat_router_status.return_value = MockRouterStatus(0, 10) self.mock_get_nat_ip_info.return_value = MockNatIpInfo(None) with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.assertEqual(self.mock_interface.add_ok.call_count, 1) def test_nat_ip_allocation_manual_only_no_routers_list_found(self): step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly() self.mock_get_routers.return_value = [] with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.add_skipped.assert_called_once() def test_end_step_interactive_yes(self): with mock.patch('gcpdiag.config.get', return_value=False), \ mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES): step = public_nat_ip_allocation_failed.NatIpAllocationFailedEnd() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.info.assert_not_called() class PublicNatIpAllocationFailedStubDataTest(unittest.TestCase): def setUp(self): super().setUp() self.mock_get_api = self.enterContext( mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)) self.mock_monitoring_query = self.enterContext( mock.patch('gcpdiag.queries.monitoring.query')) self.mock_interface = mock.create_autospec(op.InteractionInterface, instance=True) self.mock_interface.rm = mock.Mock() self.operator = op.Operator(self.mock_interface) self.operator.run_id = 'test-run' self.operator.messages = MockMessage() self.params = { flags.PROJECT_ID: 'gcpdiag-nat1-aaaa', flags.REGION: 'europe-west4', flags.NAT_GATEWAY_NAME: 'public-nat-gateway', flags.CLOUD_ROUTER_NAME: 'public-nat-cloud-router', flags.NAT_NETWORK: 'nat-vpc-network', 'start_time': datetime.datetime(2025, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc), 'end_time': datetime.datetime(2025, 1, 1, 1, 0, 0, tzinfo=datetime.timezone.utc), } def test_start_step_success_with_stub_data(self): """Test start step with gcpdiag-nat1-aaaa data.""" step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() # Based on nat1 data, this step should succeed without skipping self.mock_interface.add_skipped.assert_not_called() def test_end_step_interactive_yes(self): with mock.patch('gcpdiag.config.get', return_value=False), \ mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES): step = public_nat_ip_allocation_failed.NatIpAllocationFailedEnd() with op.operator_context(self.operator): self.operator.parameters = self.params self.operator.set_step(step) step.execute() self.mock_interface.info.assert_not_called() ================================================ FILE: gcpdiag/runbook/nat/snapshots/public_nat_ip_allocation_failed.txt ================================================ cloud_router_name=public-nat-cloud-router,nat_gateway_name=public-nat-gateway,network=nat-vpc- network,project_id=gcpdiag-nat1-aaaa,region=europe-west4 nat/public-nat-ip-allocation-failed: Troubleshooting for IP Allocation issues for Cloud NAT. This runbook investigates Cloud NAT for NAT IP Allocation failed issue and proposes remediation steps. Areas Examined: - Metric check: Checks the NAT Allocation Failed metric for the provided NATGW if it is True or False. - NATGW Configuration: Checks the gateway if it is configured with manual or automatic IP allocation. - NAT IP and Port calculation: For source nic without an External IP address, verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW. [START]: Starting Nat IP Allocation Failed diagnostics [AUTOMATED STEP]: Checking the nat_allocation_failed metric for NAT IP allocation failure and the NAT router status. - gcpdiag-nat1-aaaa [FAIL] [REASON] NAT IP allocation failure found on the NAT Gateway: public-nat-gateway [REMEDIATION] Continue the runbook for further diagnostic and remediation steps for the IP exhaustion issue on public-nat-gateway [GATEWAY]: Checks if the NATGW router is configured with manual or automatic IP allocation [AUTOMATED STEP]: NAT IP allocation is configured with MANUAL_ONLY. Running diagnostic for NAT Gateway configured as MANUAL_ONLY only - gcpdiag-nat1-aaaa [OK] [REASON] Checking on the status and configuration of the Cloud NAT Router public-nat-cloud-router and Gateway: 1. Minimum extra NAT IPs Needed: 2 2. Number of VM Endpoints With NAT mappings: 2 3. Dynamic port allocation enabled: False 4. Number of NAT Gateway IPs in use: 1 - gcpdiag-nat1-aaaa [OK] [REASON] The NAT Gateway public-nat-gateway is configured for manual IP allocation: The number of NAT IPs required is less than quota limit of 300. Consider taking the steps in [1] to allocate more IP address or further optimize port utilization on the gateway [2] 1. 2. [END]: Concludes the NAT IP allocation failed diagnostics process ================================================ FILE: gcpdiag/runbook/nat/templates/nat_ip_allocation_failed.jinja ================================================ ############################################################# # Messages for NAT IP Allocation Failed Check # ############################################################# {% block confirmation_skipped_reason %} Unable to fetch the network {network} confirm it exists in the project {project_id}. {% endblock confirmation_skipped_reason %} {% block confirmation_skipped_reason_a1 %} The cloud router {cloud_router} does not exist in region {region} or project {project_id}. {% endblock confirmation_skipped_reason_a1 %} {% block confirmation_skipped_reason_a2 %} Cannot find the NAT cloud router: {cloud_router} in the region {region} for the project {project_id} Check the cloud router name to ensure it exists in the project and rerun. {% endblock confirmation_skipped_reason_a2 %} {% block confirmation_skipped_reason_a3 %} Cannot find the NAT Gateway: {nat_gateway} in the region {region} for the project {project_id} Check the cloud router name to ensure it exists in the project and rerun. {% endblock confirmation_skipped_reason_a3 %} ############################################################# # Messages for NAT IP Allocation Failed Check # ############################################################# {% block nat_ip_allocation_auto_only_success_reason %} No IP exhaustion issues found on the NAT GW {nat_gateway_name} {% endblock nat_ip_allocation_auto_only_success_reason %} {% block nat_ip_allocation_auto_only_failure_reason %} Manual NAT IP allocation is enabled on the NAT GW {nat_gateway_name} {% endblock nat_ip_allocation_auto_only_failure_reason %} {% block nat_ip_allocation_auto_only_failure_remediation %} IP exhaustion issues on {nat_gateway_name} can be remediated by taking the following steps in: {% endblock nat_ip_allocation_auto_only_failure_remediation %} ############################################################# # Messages for NAT ALLOCATION FAILED METRIC Check # ############################################################# {% block nat_allocation_metric_check_success_reason %} No issues noticed on the NAT allocation failed metric for the NAT Gateway: {nat_gateway_name} {% endblock nat_allocation_metric_check_success_reason %} {% block nat_allocation_metric_check_failure_reason %} NAT IP allocation failure found on the NAT Gateway: {nat_gateway_name} {% endblock nat_allocation_metric_check_failure_reason %} {% block nat_allocation_metric_check_failure_remediation %} Continue the runbook for further diagnostic and remediation steps for the IP exhaustion issue on {nat_gateway_name} {% endblock nat_allocation_metric_check_failure_remediation %} {% block nat_allocation_metric_check_skipped_reason %} No issues detected on the nat_allocation_failed metric for the gateway: {nat_gateway_name}. Checks on the status of the cloud router for the NAT gateway: {router_name} does not indicate extra IPs are needed. {% endblock nat_allocation_metric_check_skipped_reason %} {% block nat_allocation_metric_check_uncertain_reason %} Unable to fetch the the nat_allocation_failed metric for the gateway: {nat_gateway_name} {% endblock nat_allocation_metric_check_uncertain_reason %} {% block nat_allocation_metric_check_uncertain_remediation %} Confirm that the NAT Gateway name {nat_gateway_name} provided is correct and metric for the gateway is visible on cloud console. {% endblock nat_allocation_metric_check_uncertain_remediation %} ############################################################# # NAT ALLOCATION AUTO ONLY # ############################################################# {% block nat_allocation_auto_only_failure_reason %} The NAT Gateway {nat_gateway_name} is configured for automatic IP allocation {% endblock nat_allocation_auto_only_failure_reason %} {% block nat_allocation_auto_only_failure_remediation %} To resolve this issue, consider implementing the following options: 1. Add one more NAT gateway in the same network and region. 2. Switch to Manual NAT IP assignment. {% endblock nat_allocation_auto_only_failure_remediation %} ############################################################# # NAT ALLOCATION MANUAL ONLY # ############################################################# {% block nat_allocation_manual_only_success_reason %} Checking on the status and configuration of the Cloud NAT Router {router_name} and Gateway: 1. Minimum extra NAT IPs Needed: {extra_ips_needed} 2. Number of VM Endpoints With NAT mappings: {vms_with_nat_mappings} 3. Dynamic port allocation enabled: {enable_dynamic_port_allocation} 4. Number of NAT Gateway IPs in use: {nat_gw_ips_in_use} {% endblock nat_allocation_manual_only_success_reason %} {% block nat_allocation_manual_only_success_reason_a1 %} The NAT Gateway {nat_gateway_name} is configured for manual IP allocation: The number of NAT IPs required is less than quota limit of 300. Consider taking the steps in [1] to allocate more IP address or further optimize port utilization on the gateway [2] 1. 2. {% endblock nat_allocation_manual_only_success_reason_a1 %} {% block nat_allocation_manual_only_failure_reason %} The number of NAT IPs in use on the NAT Gateway is >= 300 which is above the quota limit [1]. 1. {% endblock nat_allocation_manual_only_failure_reason %} {% block nat_allocation_manual_only_failure_remediation %} Consider creating additional NAT gateways or optimise port usage [1]: 1. {% endblock nat_allocation_manual_only_failure_remediation %} ############################################################# # NAT ALLOCATION METHOD CHECK # ############################################################# {% block nat_allocation_method_check_step_name %} Checks if the NATGW router is configured with manual or automatic IP allocation {% endblock nat_allocation_method_check_step_name %} ############################################################# # NAT ALLOCATION END STEP # ############################################################# {% block endstep_step_name %} Concludes the NAT IP allocation failed diagnostics process {% endblock endstep_step_name %} ================================================ FILE: gcpdiag/runbook/nat/templates/nat_out_of_resources.jinja ================================================ ############################################################# # Messages for NAT IP Exhaustion Check # ############################################################# {% block nat_ip_exhaustion_check_success_reason %} No IP exhaustion issues found on the NAT GW {nat_gateway_name} {% endblock nat_ip_exhaustion_check_success_reason %} {% block nat_ip_exhaustion_check_failure_reason %} NAT IP allocation failure found on the NAT GW {nat_gateway_name} {% endblock nat_ip_exhaustion_check_failure_reason %} {% block nat_ip_exhaustion_check_failure_remediation %} IP exhaustion issues on {nat_gateway_name} can be remediated by taking the following steps in [1]: [1] {% endblock nat_ip_exhaustion_check_failure_remediation %} ############################################################# # Messages for Resource Exhaustion Check # ############################################################# {% block nat_resource_exhaustion_check_success_reason %} No {metric_reason} issues on the dropped_sent_packet metric for the NAT GW {nat_gateway_name} seen. {% endblock nat_resource_exhaustion_check_success_reason %} {% block nat_resource_exhaustion_check_failure_reason %} {metric_reason} issue found on the dropped_sent_packet metric on the NAT GW {nat_gateway_name} {% endblock nat_resource_exhaustion_check_failure_reason %} {% block nat_resource_exhaustion_check_failure_remediation %} Resource exhaustion issues can be remediated by taking the following steps in [1]: [1] {% endblock nat_resource_exhaustion_check_failure_remediation %} ############################################################# # Messages for NAT received packet drop check # ############################################################# {% block nat_dropped_received_packet_check_success_reason %} No received_packet_drop on NAT GW {nat_gateway_name} seen. {% endblock nat_dropped_received_packet_check_success_reason %} {% block nat_dropped_received_packet_check_uncertain_reason %} Elevated received_packet_drop_count metric noticed for NAT GW {nat_gateway_name} dropped_received_packet: {metric_value} {% endblock nat_dropped_received_packet_check_uncertain_reason %} {% block nat_dropped_received_packet_check_uncertain_remediation %} NAT gateways could be dropping packets for various reasons; however, the drops are not always indicative of an issue. Checking received_packet_drop metrics at the VM level as well. Open a case to GCP Support for confirmation of the reason for the drops See more on troubleshooting cloud NAT reducing the drops here [1] and [2]: [1] [2] {% endblock nat_dropped_received_packet_check_uncertain_remediation %} ############################################################# # Messages for VM received packet drop check # ############################################################# {% block vm_dropped_received_packet_check_success_reason %} No received_packet_drop on NAT GW {nat_gateway_name} seen. {% endblock vm_dropped_received_packet_check_success_reason %} {% block vm_dropped_received_packet_check_uncertain_reason %} Elevated received_packet_drop_count metric noticed for following VMs {vm_drop_list} {% endblock vm_dropped_received_packet_check_uncertain_reason %} {% block vm_dropped_received_packet_check_uncertain_remediation %} VMs could be dropping packets for various reasons; however, the drops are not always indicative of an issue. See more on troubleshooting cloud NAT and reducing the drops here [1] and [2]: Open a case to GCP Support for justification for the packet drops. [1] [2] {% endblock vm_dropped_received_packet_check_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/nat/utils.py ================================================ # Copyright 2023 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. """Helpful functions used in different parts of the NAT runbooks""" import re # get region from zone def region_from_zone(zone: str) -> str: pattern = r'^(.+?-.+?)-' match = re.match(pattern, zone) region = match.group(1) if match else '' return region ================================================ FILE: gcpdiag/runbook/nat/utils_test.py ================================================ # Copyright 2023 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. """Test for NAT utils.""" import unittest from gcpdiag.runbook.nat import utils class RegionFromZoneTest(unittest.TestCase): """Test region_from_zone.""" def test_region_from_zone(self): self.assertEqual(utils.region_from_zone('us-central1-a'), 'us-central1') self.assertEqual(utils.region_from_zone('europe-west1-b'), 'europe-west1') self.assertEqual(utils.region_from_zone('asia-northeast3-c'), 'asia-northeast3') self.assertEqual(utils.region_from_zone('us-east4-a'), 'us-east4') def test_no_match(self): self.assertEqual(utils.region_from_zone('us-central1'), '') self.assertEqual(utils.region_from_zone(''), '') self.assertEqual(utils.region_from_zone('invalid-zone'), '') ================================================ FILE: gcpdiag/runbook/op.py ================================================ # Copyright 2024 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. """Operator Module""" import threading from contextlib import contextmanager from typing import Any, Optional, Tuple from gcpdiag import context as gcpdiag_context from gcpdiag import models from gcpdiag.runbook.constants import * # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.report import InteractionInterface report_lock = threading.Lock() _thread_local = threading.local() # Use thread-local storage class Operator: """ Operation Object used to manipulate context, message and parameter data""" messages: models.Messages context: models.Context parameter: models.Parameter interface: InteractionInterface run_id: str _step = None _tree = None context_provider: Optional[gcpdiag_context.ContextProvider] def __init__( self, interface: InteractionInterface, context_provider: Optional[gcpdiag_context.ContextProvider] = None, ): self.interface = interface self.context_provider = context_provider def set_run_id(self, run_id): self.run_id = run_id def set_parameters(self, p): self.parameters = p def create_context(self, project_id, locations=None, labels=None, parameters=None, resources=None): self.context = models.Context(project_id=project_id, locations=locations, labels=labels, parameters=parameters, resources=resources, context_provider=self.context_provider) def set_messages(self, m): self.messages = m def set_step(self, s): self._step = s def set_tree(self, t): self._tree = t @property def step(self): return self._step @property def tree(self): return self._tree @contextmanager def operator_context(new_operator): _thread_local.operator = new_operator try: yield finally: _thread_local.operator = None def _get_operator(): """Retrieves the current operator from thread-local storage.""" operator = getattr(_thread_local, 'operator', None) if operator is None: raise RuntimeError( 'No operator found in thread-local storage. ' 'Are you trying to use op.get, op.put, etc. outside of an ' 'operator_context?') return operator # pylint: disable=protected-access def prep_msg(key, **kwargs): """ Parses the Jinja template block linked the calling step This function takes a scenario key and template variables as input, and uses them to parse a Jinja template. The template is linked to a specific step, and the function returns the parsed message. Usage: op.prep_msg(op.SUCCESS_REASON, template_var1=value1, template_var2=value2) Args: key (str): The scenario key that determines which template to use. **kwargs: Arbitrary keyword arguments representing the variables to be passed into the Jinja template. Returns: str: The parsed message from the linked Jinja template. """ operator = _get_operator() # set default template variables if 'start_time' not in kwargs: kwargs['start_time'] = operator.parameters['start_time'] if 'end_time' not in kwargs: kwargs['end_time'] = operator.parameters['end_time'] return operator.messages.get_msg(key, **kwargs) def get(key, default=None): """ Retrieve user provided runbook parameter values It retrieves the user-provided parameter value for the given key or returns the default value if the key is not found. The default value can be what is defined at the diagnostic tree parameter declaration or the default value provided to this method. If both method and diagnostic tree level parameters are provided, the tree level overrides the method default. Args: key (str): The key for the parameter to be retrieved. default (any, optional): The default value to return if no value. Defaults to None. Returns: any: The value associated with the key if it exists, otherwise the default value. Usage: value = op.get('parameter_name') """ operator = _get_operator() return operator.parameters.get(key, default) def put(key, value): """ Create a new parameter or update an existing parameter This function assigns the given value to the specified key within the runbook's context parameters. Args: key (str): The key for the parameter to be set. value (any): The value to be associated with the key. Usage: operator.put('parameter_name', 'value') """ operator = _get_operator() operator.parameters[key] = value def prompt(message: str, kind: str = '', options: dict = None, choice_msg: str = '') -> Any: """ Displays a prompt to the user with the given message and choice message. This function interfaces with the operator's prompt mechanism to display a message to the user. It can include additional information such as the the kind of prompt, available options, and a message for choosing from options. Args: message (str): The main message to display to the user. kind (str, optional): The type of prompt, CONFIRMATION, HUMAN_TASK options (dict, optional): A dictionary of options that the user can choose from. choice_msg (str, optional): An optional message guiding the user to make a choice from the options. Defaults to an empty string. Returns: Any: User response Usage: op.prompt(message='Check the remaining interfaces as well?', kind=op.CONFIRMATION, choice_msg='Select one of the options below:', options={'y': 'Yes, all remaining interfaces', 'n': 'No Proceed'} ) """ operator = _get_operator() return operator.interface.prompt(message=message, kind=kind, options=options, choice_msg=choice_msg) def info(message: str, step_type='INFO') -> None: """Send an informational message to the user""" operator = _get_operator() operator.interface.info(message, step_type) operator.interface.rm.add_step_info_metadata( run_id=operator.run_id, step_execution_id=operator.step.execution_id, value=message) def prep_rca(resource: Optional[models.Resource], template, suffix, kwarg) -> None: """Parses a log form and complex Jinja templates for root cause analysis (RCA).""" operator = _get_operator() return operator.interface.prepare_rca(run_id=operator.run_id, resource=resource, template=template, suffix=suffix, step=operator.step, context=kwarg) def add_skipped(resource: Optional[models.Resource], reason: str) -> None: """Sends a skip message for a step to the user and store it in the report""" operator = _get_operator() with report_lock: operator.interface.add_skipped(run_id=operator.run_id, resource=resource, reason=reason, step_execution_id=operator.step.execution_id) def add_ok(resource: models.Resource, reason: str) -> None: """Sends a success message for a step to the user and store it in the report""" operator = _get_operator() with report_lock: operator.interface.add_ok(run_id=operator.run_id, resource=resource, reason=reason, step_execution_id=operator.step.execution_id) def add_failed(resource: models.Resource, reason: str, remediation: str) -> Any: """Sends a failure message for a step to the user and store it in the report""" operator = _get_operator() with report_lock: return operator.interface.add_failed( run_id=operator.run_id, resource=resource, reason=reason, remediation=remediation, step_execution_id=operator.step.execution_id) def add_uncertain(resource: models.Resource, reason: str, remediation: str = None, human_task_msg: str = '') -> Any: """Sends an inconclusive message for a step to the user and store it in the report""" operator = _get_operator() with report_lock: return operator.interface.add_uncertain( run_id=operator.run_id, resource=resource, reason=reason, remediation=remediation, step_execution_id=operator.step.execution_id, human_task_msg=human_task_msg) def get_step_outcome(execution_id) -> Tuple[Any, dict]: """Returns the overall evaluation result of a step You can only check for steps that have already been executed. It is not possible to get the status of the current step, it's descendants or steps in branches not yet executed. Returns: a dict of totals by status representing outcome of resource evaluations or empty dict if the step hasn't been executed. """ operator = _get_operator() with report_lock: step_result = operator.interface.rm.reports[operator.run_id].results.get( execution_id) if not step_result: return (None, {}) return (step_result.overall_status, step_result.totals_by_status) def step_ok(execution_id) -> bool: """Checks if the step with the provided run id passed evaluation""" overall_status, _ = get_step_outcome(execution_id) return overall_status == 'ok' def step_failed(execution_id) -> bool: """Checks if the step with the provided run id failed evaluation""" overall_status, _ = get_step_outcome(execution_id) return overall_status == 'failed' def step_uncertain(execution_id) -> bool: """Checks if the step with the provided run id has an indeterminate evaluation""" overall_status, _ = get_step_outcome(execution_id) return overall_status == 'uncertain' def step_skipped(execution_id) -> bool: """Checks if the step with the provided run id was skipped""" overall_status, _ = get_step_outcome(execution_id) return overall_status == 'skipped' def step_unexecuted(execution_id) -> bool: """Checks if the step with the provided run id was never executed""" overall_status, _ = get_step_outcome(execution_id) return overall_status is None def add_metadata(key, value): operator = _get_operator() with report_lock: operator.interface.rm.add_step_metadata( run_id=operator.run_id, step_execution_id=operator.step.execution_id, key=key, value=value) def get_metadata(key, step_execution_id=None): operator = _get_operator() with report_lock: step_execution_id = step_execution_id or operator.step.execution_id return operator.interface.rm.get_step_metadata( run_id=operator.run_id, step_execution_id=step_execution_id, key=key) def get_all_metadata(step_execution_id=None): operator = _get_operator() with report_lock: step_execution_id = step_execution_id or operator.step.execution_id return operator.interface.rm.get_all_step_metadata( run_id=operator.run_id, step_execution_id=step_execution_id) def get_context(**kwargs) -> models.Context: """Returns the current execution context. If keyword arguments are provided, a new context is created using these arguments. If context is not initialized, it will be created using parameters from operator. This function retrieves the current operator from thread-local storage and returns its context, which includes execution parameters such as project ID, locations, labels, and user-defined flags. Returns: models.Context: The current context object. """ operator = _get_operator() if kwargs: operator.create_context(**kwargs) return operator.context if not hasattr(operator, 'context'): p = operator.parameters operator.create_context(project_id=p.get('project_id'), locations=p.get('locations'), labels=p.get('labels'), parameters=p.get('parameters'), resources=p.get('resources')) return operator.context ================================================ FILE: gcpdiag/runbook/op_test.py ================================================ # Copyright 2024 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. '''Test Operator methods''' import unittest from functools import wraps from unittest import mock from gcpdiag.runbook import Step, op, report def with_operator_context(test_method): """Decorator to set up operator context for op_test test methods.""" @wraps(test_method) def wrapper(self): test_operator = op.Operator(interface=report.InteractionInterface( kind='cli')) test_operator.set_run_id('test_run_for_' + test_method.__name__) test_operator.interface.rm = report.TerminalReportManager() test_report = report.Report(run_id=test_operator.run_id, parameters={}) test_operator.interface.rm.reports[test_operator.run_id] = test_report test_step = ok_step test_operator.set_step(test_step) test_report.results[ok_step.execution_id] = ok_step test_report.results[failed_step.execution_id] = failed_step test_report.results[uncertain_step.execution_id] = uncertain_step test_report.results[skipped_step.execution_id] = skipped_step self.test_operator = test_operator with op.operator_context(test_operator): return test_method( self) # Execute the actual test method within the context return wrapper ok_step_eval = report.ResourceEvaluation(resource=None, status='ok', reason='TestReason', remediation='TestRemediation') failed_step_eval = report.ResourceEvaluation(resource=None, reason='TestReason', remediation='TestRemediation', status='failed') uncertain_step_eval = report.ResourceEvaluation(resource=None, reason='TestReason', remediation='TestRemediation', status='uncertain') skipped_step_eval = report.ResourceEvaluation(resource=None, reason='TestReason', remediation='TestRemediation', status='skipped') ok_step = report.StepResult(step=Step(uuid='ok.step')) ok_step.results.append(ok_step_eval) failed_step = report.StepResult(step=Step(uuid='failed.step')) failed_step.results.append(failed_step_eval) uncertain_step = report.StepResult(step=Step(uuid='uncertain.step')) uncertain_step.results.append(uncertain_step_eval) skipped_step = report.StepResult(step=Step(uuid='skipped.step')) skipped_step.results.append(skipped_step_eval) # This global operator is only used for creating step results and should not # interfere with thread-local tests. operator = op.Operator(interface=report.InteractionInterface(kind='cli')) operator.set_run_id('test') operator.interface.rm = report.TerminalReportManager() operator.interface.rm.reports['test'] = report.Report(run_id='test', parameters={}) operator.interface.rm.reports['test'].results[ok_step.execution_id] = ok_step operator.interface.rm.reports['test'].results[ failed_step.execution_id] = failed_step operator.interface.rm.reports['test'].results[ uncertain_step.execution_id] = uncertain_step operator.interface.rm.reports['test'].results[ skipped_step.execution_id] = skipped_step operator.set_step(ok_step) class OperatorTest(unittest.TestCase): '''Test Report Manager''' @with_operator_context def test_positive_step_overall_status_case(self): self.assertTrue(op.step_ok('gcpdiag.runbook.Step.ok.step')) self.assertTrue(op.step_failed('gcpdiag.runbook.Step.failed.step')) self.assertTrue(op.step_uncertain('gcpdiag.runbook.Step.uncertain.step')) self.assertTrue(op.step_skipped('gcpdiag.runbook.Step.skipped.step')) self.assertTrue(op.step_unexecuted('gcpdiag.runbook.Step.random.step')) @with_operator_context def test_negative_step_overall_status_case(self): self.assertFalse(op.step_ok('gcpdiag.runbook.Step.failed.step')) self.assertFalse(op.step_failed('gcpdiag.runbook.Step.ok.step')) self.assertFalse(op.step_uncertain('gcpdiag.runbook.Step.ok.step')) self.assertFalse(op.step_skipped('gcpdiag.runbook.Step.failed.step')) self.assertFalse(op.step_unexecuted('gcpdiag.runbook.Step.ok.step')) @with_operator_context def test_get_and_put_parameters(self): self.test_operator.parameters = {'test_key': 'test_value'} self.assertEqual(op.get('test_key'), 'test_value') self.assertEqual(op.get('unknown_key', 'default_value'), 'default_value') op.put('new_key', 'new_value') self.assertEqual(self.test_operator.parameters['new_key'], 'new_value') @with_operator_context def test_get_step_outcome(self): overall_status, totals = op.get_step_outcome(ok_step.execution_id) self.assertEqual(overall_status, 'ok') self.assertEqual(totals, {'ok': 1}) overall_status, totals = op.get_step_outcome('unknown_step') self.assertIsNone(overall_status) self.assertEqual(totals, {}) @with_operator_context def test_add_and_get_metadata(self): op.add_metadata('metadata_key_one', 'test_value_one') op.add_metadata('metadata_key_two', 'test_value_two') value = op.get_metadata('metadata_key_one') self.assertEqual(value, 'test_value_one') all_metadata = op.get_all_metadata() self.assertEqual(2, len(all_metadata)) self.assertEqual(op.get_all_metadata()['metadata_key_two'], 'test_value_two') @with_operator_context def test_add_info_metadata(self): info_msgs = ['info1', 'info2', 'info3'] for i in info_msgs: op.info(i) step_report = self.test_operator.interface.rm.reports[ self.test_operator.run_id].results.get(ok_step.execution_id) self.assertEqual(info_msgs, step_report.info) @with_operator_context def test_get_context_with_create(self): self.test_operator.create_context('test-project', labels={'env': 'prod'}) context = op.get_context() self.assertEqual(context.project_id, 'test-project') self.assertEqual(context.labels, {'env': 'prod'}) @with_operator_context def test_get_context_lazy_init(self): self.test_operator.parameters = { 'project_id': 'test-project-lazy', 'labels': { 'l': 'v' } } context = op.get_context() self.assertEqual(context.project_id, 'test-project-lazy') self.assertEqual(context.labels, {'l': 'v'}) @with_operator_context def test_get_context_with_kwargs(self): context = op.get_context(project_id='kwargs-project', resources=['myres']) self.assertEqual(context.project_id, 'kwargs-project') # Context converts resources list to resources_pattern self.assertEqual(context.resources_pattern.pattern, 'myres') @with_operator_context def test_operator_properties(self): self.test_operator.set_run_id('new_run_id') self.assertEqual(self.test_operator.run_id, 'new_run_id') self.test_operator.set_messages({'msg': 'content'}) self.assertEqual(self.test_operator.messages, {'msg': 'content'}) self.test_operator.set_tree('tree_obj') self.assertEqual(self.test_operator.tree, 'tree_obj') self.test_operator.set_step('step_obj') self.assertEqual(self.test_operator.step, 'step_obj') self.test_operator.set_parameters({'p': 'v'}) self.assertEqual(self.test_operator.parameters, {'p': 'v'}) def test_get_operator_no_context_error(self): with self.assertRaisesRegex(RuntimeError, 'No operator found'): op.get('test_key') @with_operator_context def test_prep_msg(self): self.test_operator.messages = mock.MagicMock() self.test_operator.parameters = { 'start_time': '2024-01-01', 'end_time': '2024-01-02' } op.prep_msg('test_key', custom_var='val') self.test_operator.messages.get_msg.assert_called_with( 'test_key', start_time='2024-01-01', end_time='2024-01-02', custom_var='val') @with_operator_context def test_prompt(self): self.test_operator.interface.prompt = mock.MagicMock( return_value='user_choice') result = op.prompt(message='Check?', kind='CONFIRMATION') self.assertEqual(result, 'user_choice') self.test_operator.interface.prompt.assert_called_once_with( message='Check?', kind='CONFIRMATION', options=None, choice_msg='') @with_operator_context def test_prep_rca(self): self.test_operator.interface.prepare_rca = mock.MagicMock() op.prep_rca(resource=None, template='tpl::prefix', suffix='sfx', kwarg={'k': 'v'}) self.test_operator.interface.prepare_rca.assert_called_once_with( run_id=self.test_operator.run_id, resource=None, template='tpl::prefix', suffix='sfx', step=self.test_operator.step, context={'k': 'v'}) @with_operator_context def test_reporting_actions(self): self.test_operator.interface.add_skipped = mock.MagicMock() self.test_operator.interface.add_ok = mock.MagicMock() self.test_operator.interface.add_failed = mock.MagicMock() self.test_operator.interface.add_uncertain = mock.MagicMock() res = mock.MagicMock() op.add_skipped(res, 'skip_reason') self.test_operator.interface.add_skipped.assert_called_once() op.add_ok(res, 'ok_reason') self.test_operator.interface.add_ok.assert_called_once() op.add_failed(res, 'fail_reason', 'remediation') self.test_operator.interface.add_failed.assert_called_once() op.add_uncertain(res, 'uncertain_reason', 'remediation', 'human_task') self.test_operator.interface.add_uncertain.assert_called_once() if __name__ == '__main__': unittest.main() ================================================ FILE: gcpdiag/runbook/output/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/output/api_output.py ================================================ # Copyright 2024 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. """API class for api output implementations""" import logging import sys from gcpdiag.runbook.output.base_output import BaseOutput class ApiOutput(BaseOutput): """API output implementation.""" def __init__(self, execution_id=None): super().__init__() self.execution_id = execution_id def get_logging_handler(self) -> logging.Handler: stream_handler = logging.StreamHandler(stream=sys.stdout) formatter = logging.Formatter(self._get_log_format()) stream_handler.setFormatter(formatter) return stream_handler def _get_log_format(self): log_format = '[%(levelname)-6s] ' if self.execution_id: log_format += f'[EID: {self.execution_id}] ' log_format += '%(message)s' return log_format ================================================ FILE: gcpdiag/runbook/output/base_output.py ================================================ # Copyright 2023 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. """ Base class for different output implementations """ import logging import sys from typing import Any, Optional from gcpdiag import models class BaseOutput: """ Base class for different output implementations """ def print_ok(self, resource: models.Resource, reason: str = '') -> None: pass def print_skipped(self, resource: Optional[models.Resource], reason: str, remediation: str = None) -> None: pass def print_failed(self, resource: models.Resource, reason: str, remediation: str) -> None: pass def print_uncertain(self, resource: models.Resource, reason: str, remediation: str = None) -> None: pass def prompt(self, message: str, kind: str = '', options: dict = None, choice_msg: str = '', non_interactive: bool = None) -> Any: pass def info(self, message: str, step_type='INFO'): pass def display_runbook_description(self, tree) -> None: pass def get_logging_handler(self) -> logging.Handler: return _LoggingHandler() class _LoggingHandler(logging.Handler): """Basic Logging Hangler""" def __init__(self, stream_config=None): super().__init__() self.stream_config = stream_config or { logging.DEBUG: sys.stdout, logging.INFO: sys.stdout, logging.WARNING: sys.stderr, logging.ERROR: sys.stderr, logging.CRITICAL: sys.stderr } def emit(self, record): record.msg = f'[{record.levelname}] {record.msg}' stream = self.stream_config.get(record.levelno, sys.stderr) stream.flush() ================================================ FILE: gcpdiag/runbook/output/terminal_output.py ================================================ # Copyright 2023 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. # pylint: disable=cyclic-import """ Output implementation that prints result in human-readable format. """ import logging import os import sys import textwrap import threading from typing import Any, Optional, TextIO import blessings # pylint: disable=unused-import (lint is used in type hints) from gcpdiag import config, models, runbook from gcpdiag.runbook import constants from gcpdiag.runbook.flags import INTERACTIVE_MODE from gcpdiag.runbook.output.base_output import BaseOutput OUTPUT_WIDTH = 68 def is_cloud_shell(): return os.getenv('CLOUD_SHELL') def emoji_wrap(char): if is_cloud_shell(): # emoji not displayed as double width in Cloud Shell (bug?) return char + ' ' else: return char class TerminalOutput(BaseOutput): """ Output implementation that prints result in human-readable format. """ file: TextIO show_ok: bool show_skipped: bool log_info_for_progress_only: bool lock: threading.Lock line_unfinished: bool term: blessings.Terminal def __init__(self, file: TextIO = sys.stdout, log_info_for_progress_only: bool = True, show_ok: bool = True, show_skipped: bool = True): self.file = file self.show_ok = show_ok self.show_skipped = show_skipped self.log_info_for_progress_only = log_info_for_progress_only self.lock = threading.Lock() self.line_unfinished = False self.term = blessings.Terminal() def display_banner(self) -> None: if self.term.does_styling: print(self.term.bold(f"gcpdiag {emoji_wrap('🩺')} {config.VERSION}\n")) else: print(f'gcpdiag {config.VERSION}\n', file=sys.stderr) def display_header(self) -> None: print('Starting runbook inspection [Alpha Release]\n', file=sys.stderr) def display_runbook_description(self, tree): self.terminal_print_line(f'{self.term.yellow(tree.name)}: {tree.__doc__}') def display_footer(self, result) -> None: totals = result.get_totals_by_status() state_strs = [ f'{totals.get(state, 0)} {state}' for state in ['skipped', 'ok', 'failed', 'uncertain'] ] print(f"Rules summary: {', '.join(state_strs)}", file=sys.stderr) def get_logging_handler(self) -> logging.Handler: return _LoggingHandler(self) def print_line(self, text: str = '') -> None: """Write a line to the desired output provided as self.file.""" print(text, file=self.file, flush=True) def _wrap_indent(self, text: str, prefix: str) -> str: width = self.term.width or 80 width = min(width, 80) return textwrap.indent(textwrap.fill(text, width - len(prefix)), prefix) def _italic(self, text: str) -> str: if is_cloud_shell(): # TODO(b/201958597): Cloud Shell with tmux doesn't format italic properly at the moment return text else: return self.term.italic(text) def terminal_update_line(self, text: str) -> None: """Update the current line on the terminal.""" if self.term.width: print(self.term.move_x(0) + self.term.clear_eol() + text, end='', flush=True, file=self.file) self.line_unfinished = True else: # If it's a stream, do not output anything, assuming that the # interesting output will be passed via terminal_print_line pass def terminal_erase_line(self) -> None: """Remove the current content on the line.""" if self.line_unfinished and self.term.width: print(self.term.move_x(0) + self.term.clear_eol(), flush=True, end='', file=self.file) self.line_unfinished = False def terminal_print_line(self, text: str = '') -> None: """Write a line to the terminal, replacing any current line content, and add a line feed.""" if self.term.width: self.terminal_update_line(text) print(file=sys.stdout) else: print(text, file=sys.stdout) # flush the output, so that we can more easily grep, tee, etc. sys.stdout.flush() self.line_unfinished = False def _print_rule_header(self, rule: 'runbook.DiagnosticTree') -> None: bullet = '' if self.term.does_styling: bullet = emoji_wrap('🔎') + ' ' else: bullet = '* ' self.terminal_print_line(bullet + self.term.yellow(rule.name)) def _print_long_desc(self, rule: 'runbook.DiagnosticTree') -> None: self.terminal_print_line() self.terminal_print_line( self._italic(self._wrap_indent(rule.__doc__ or '', ' '))) self.terminal_print_line() self.terminal_print_line(' ' + rule.doc_url) def print_skipped(self, resource: Optional[models.Resource], reason: str, remediation: str = None) -> None: short_path = resource.short_path if resource is not None \ and resource.short_path is not None else '' self.terminal_print_line() self.terminal_print_line(' - ' + short_path.ljust(OUTPUT_WIDTH) + ' [' + self.term.yellow('SKIP') + ']') if reason: self.terminal_print_line(' [' + self.term.green('REASON') + ']') self.terminal_print_line(textwrap.indent(reason, ' ')) if remediation: self.terminal_print_line(' [' + self.term.green('REMEDIATION') + ']') self.terminal_print_line(textwrap.indent(remediation, ' ')) def print_ok(self, resource: models.Resource, reason: str = '') -> None: if not self.show_ok: return short_path = resource.short_path if resource is not None \ and resource.short_path is not None else '' self.terminal_print_line() self.terminal_print_line(' - ' + short_path.ljust(OUTPUT_WIDTH) + ' [' + self.term.green('OK') + ']') if reason: self.terminal_print_line(' [' + self.term.green('REASON') + ']') self.terminal_print_line(textwrap.indent(reason, ' ')) def print_failed(self, resource: models.Resource, reason: str, remediation: str) -> None: """Output test result and registers the result to be used in the runbook report. The failure assigned a human task unless program is running autonomously """ short_path = resource.short_path if resource is not None \ and resource.short_path is not None else '' self.terminal_print_line() self.terminal_print_line(' - ' + short_path.ljust(OUTPUT_WIDTH) + ' [' + self.term.red('FAIL') + ']') if reason: self.terminal_print_line(' [' + self.term.green('REASON') + ']') self.terminal_print_line(textwrap.indent(f'{reason}', ' ')) if remediation: self.terminal_print_line(' [' + self.term.green('REMEDIATION') + ']') self.terminal_print_line(textwrap.indent(f'{remediation}', ' ')) def print_uncertain(self, resource: models.Resource, reason: str, remediation: str = None) -> None: short_path = resource.short_path if resource is not None \ and resource.short_path is not None else '' self.terminal_print_line() self.terminal_print_line(' - ' + short_path.ljust(OUTPUT_WIDTH) + ' [' + self.term.yellow('UNCERTAIN') + ']') if reason: self.terminal_print_line(' [' + self.term.green('REASON') + ']') self.terminal_print_line(textwrap.indent(reason, ' ')) if remediation: self.terminal_print_line(' [' + self.term.green('REMEDIATION') + ']') self.terminal_print_line(textwrap.indent(f'{remediation}', ' ')) def info(self, message: str, step_type='INFO'): """ For informational update and getting a response from user """ self.terminal_print_line(text='' + '[' + self.term.green(step_type) + ']: ' + f'{message}') def prompt(self, message: str, kind: str = '', options: dict = None, choice_msg: str = 'Choose an option: ', non_interactive: bool = None) -> Any: """ For informational update and getting a response from user """ non_interactive = non_interactive or config.get(INTERACTIVE_MODE) if non_interactive: return self.terminal_print_line(text='' + '[' + self.term.green(kind) + ']: ' + f'{message}') self.default_answer = False self.answer = None options_text = '\n' try: if kind in constants.HUMAN_TASK and not options: for option, description in constants.HUMAN_TASK_OPTIONS.items(): options_text += '[' + self.term.green( f'{option}') + ']' + f' - {description}\n' if kind in constants.CONFIRMATION and not options: for option, description in constants.CONFIRMATION_OPTIONS.items(): options_text += '[' + self.term.green( f'{option}') + ']' + f' - {description}\n' if (kind in constants.CONFIRMATION or kind in constants.HUMAN_TASK) \ and options: for option, description in options.items(): options_text += '[' + self.term.green( f'{option}') + ']' + f' - {description}\n' if options_text: self.terminal_print_line(text=textwrap.indent(options_text, ' ')) self.answer = input(textwrap.indent(choice_msg, ' ')) except EOFError: return self.answer # pylint:disable=g-explicit-bool-comparison, We explicitly want to # distinguish between empty string and None. if self.answer == '': # User just hit enter, return default. return self.default_answer elif self.answer is None: return self.answer elif self.answer.strip().lower() in ['s', 'stop']: return constants.STOP elif self.answer.strip().lower() in ['c', 'continue']: return constants.CONTINUE elif self.answer.strip().lower() in ['u', 'uncertain']: return constants.UNCERTAIN elif self.answer.strip().lower() in ['r', 'retest']: return constants.RETEST elif self.answer.strip().lower() in ['y', 'yes']: return constants.YES elif self.answer.strip().lower() in ['n', 'no']: return constants.NO elif self.answer.strip().lower() not in [ 's', 'stop', 'c', 'continue', 'r', 'retest' ]: return self.answer.strip() return class _LoggingHandler(logging.Handler): """logging.Handler implementation used when producing a runbook report.""" output: TerminalOutput def __init__(self, output: TerminalOutput) -> None: super().__init__() self.output = output def format(self, record: logging.LogRecord) -> str: return record.getMessage() def emit(self, record: logging.LogRecord) -> None: if record.levelno == logging.INFO and self.output.log_info_for_progress_only: msg = ' ... ' + self.format(record) # make sure we don't go beyond the terminal width if self.output.term.width: term_overflow = len(msg) - self.output.term.width if term_overflow > 0: msg = msg[:-term_overflow] with self.output.lock: self.output.terminal_update_line(msg) else: msg = f'[{record.levelname}] ' + self.format(record) + ' ' # workaround for bug: # https://github.com/googleapis/google-api-python-client/issues/1116 if 'Invalid JSON content from response' in msg: return with self.output.lock: self.output.terminal_print_line(msg) ================================================ FILE: gcpdiag/runbook/pubsub/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/pubsub/bigquery_subscription_delivery.py ================================================ # Copyright 2025 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. """Runbook for troubleshooting BigQuery subscriptions.""" from boltons.iterutils import get_path from gcpdiag import runbook, utils from gcpdiag.queries import apis, bigquery, crm, iam, monitoring, pubsub from gcpdiag.runbook import op from gcpdiag.runbook.pubsub import flags from gcpdiag.runbook.pubsub import generalized_steps as pubsub_gs # Query to fetch push request counts grouped by response_class RESPONSE_CODES = ( 'fetch pubsub_subscription ' '| metric "pubsub.googleapis.com/subscription/push_request_count"' '| filter resource.project_id == "{project_id}"' ' && (resource.subscription_id == "{subscription_name}") ' '| align rate(1m) ' '| every 1m ' '| group_by [metric.response_class], ' ' [value_push_request_count_aggregate: aggregate(value.push_request_count)]' '| within 30m ') class BigquerySubscriptionDelivery(runbook.DiagnosticTree): """Troubleshoot BigQuery Subscription Errors A diagnostic guide to help you resolve common issues causing message delivery failures from Pub/Sub to BigQuery. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.SUBSCRIPTION_NAME: { 'type': str, 'help': 'The Pub/Sub subscription ID', 'required': True }, 'table_id': { 'type': str, 'help': ('The BigQuery table ID in the format "project_id:dataset.table" ' 'or "dataset.table"'), 'required': True } } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = StartStep() self.add_start(start) subscription_check = SubscriptionExistenceCheck() self.add_step(parent=start, child=subscription_check) table_check = BigQueryTableExistenceCheck() self.add_step(parent=subscription_check, child=table_check) permission_check = BigQueryWriterPermissionCheck() self.add_step(parent=table_check, child=permission_check) subscription_status_check = SubscriptionStatusCheck( is_push_subscription=True) self.add_step(parent=permission_check, child=subscription_status_check) quota_check = pubsub_gs.PubsubQuotas() self.add_step(subscription_status_check, quota_check) investigate_push_errors = InvestigateBQPushErrors() self.add_step(parent=quota_check, child=investigate_push_errors) throughput = pubsub_gs.ThroughputQualification() self.add_step(investigate_push_errors, throughput) dlq_check = pubsub_gs.DeadLetterTopic() self.add_step(throughput, dlq_check) dlq_check_permissions = pubsub_gs.DeadLetterTopicPermissions() self.add_step(dlq_check, dlq_check_permissions) self.add_end(EndStep()) class StartStep(runbook.StartStep): """Check that the project exists and is reachable.""" template = 'generics::start' def execute(self): """Check that the project exists and Pub/Sub API is enabled.""" try: project = crm.get_project(op.get(flags.PROJECT_ID)) if not project: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return else: op.add_ok(project, reason=f"Project '{project.id}' found.") except utils.GcpApiError: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON, project_id=op.get(flags.PROJECT_ID)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return if not apis.is_enabled(op.get(flags.PROJECT_ID), 'pubsub'): op.add_skipped( project, reason='Pub/Sub API is not enabled, please enable to proceed.') return class SubscriptionExistenceCheck(runbook.Step): """Check that the Pub/Sub subscription exists.""" template = 'generics::subscription_existence' def execute(self): """Check that the Pub/Sub subscription exists.""" subscription = None try: subscription = pubsub.get_subscription(op.get(flags.PROJECT_ID), op.get(flags.SUBSCRIPTION_NAME)) except utils.GcpApiError as err: if 'Resource not found' in err.message: op.add_failed(resource=subscription, reason=op.prep_msg(op.FAILURE_REASON, subscription_name=op.get( flags.SUBSCRIPTION_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return else: raise if not subscription: op.add_failed(resource=subscription, reason=op.prep_msg(op.FAILURE_REASON, subscription_name=op.get( flags.SUBSCRIPTION_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(subscription, reason=f"Pub/Sub subscription '{subscription.name}' found.") class BigQueryTableExistenceCheck(runbook.Step): """Check that the BigQuery table exists.""" template = 'generics::bq_table_existence' def execute(self): """Check that the BigQuery table exists.""" project_id = op.get(flags.PROJECT_ID) table_full_id = op.get('table_id') if ':' in table_full_id: project_id, table_id = table_full_id.split(':', 1) else: table_id = table_full_id try: dataset_id, table_name = table_id.split('.', 1) except ValueError: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON, table_full_id=table_full_id), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return table = bigquery.get_table(project_id, dataset_id, table_name) if not table: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON, table_full_id=table_full_id), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok( resource=None, reason=f'BigQuery table {table_full_id} found.', ) class BigQueryWriterPermissionCheck(runbook.Step): """Check that the Pub/Sub service agent has writer permissions on the table.""" template = 'generics::permission_check' def execute(self): """Check that the Pub/Sub service agent has writer permissions.""" project = crm.get_project(op.get(flags.PROJECT_ID)) table_full_id = op.get('table_id') if ':' in table_full_id: table_project_id, table_id = table_full_id.split(':', 1) else: table_project_id = op.get(flags.PROJECT_ID) table_id = table_full_id try: dataset_id, table_name = table_id.split('.', 1) except ValueError: # Handled in BigQueryTableExistenceCheck return service_account = \ f'serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com' table_policy = bigquery.get_table(table_project_id, dataset_id, table_name) if not table_policy: # table not found, handled in previous step return project_policy = iam.get_project_policy(op.get_context()) required_permissions = { 'bigquery.tables.updateData', 'bigquery.tables.getData' } has_permissions = all( project_policy.has_permission(service_account, p) for p in required_permissions) if not has_permissions: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON, service_account=service_account, project_id=project), remediation=op.prep_msg(op.FAILURE_REMEDIATION, service_account=service_account)) else: op.add_ok( resource=None, reason= 'Pub/Sub service account has permissions to write to the BigQuery table.' ) class SubscriptionStatusCheck(runbook.Step): """Check the status of the BigQuery subscription.""" template = 'generics::subscription_status' def execute(self): """Check the BigQuery subscription status and look for common issues.""" try: subscription = pubsub.get_subscription(op.get(flags.PROJECT_ID), op.get(flags.SUBSCRIPTION_NAME)) except ValueError: # Handled in SubscriptionExistenceCheck return if subscription.is_active(): op.add_ok(resource=subscription, reason=f'The subscription {subscription} state is ACTIVE.') else: op.add_failed( resource=subscription, reason=f'The Subscription {subscription} is not in an ACTIVE state.', remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class InvestigateBQPushErrors(runbook.Step): """Investigate message backlog issues for BigQuery subscriptions using push metrics.""" template = 'generics::invalid' def execute(self): """Check push request responses from BigQuery for issues.""" project_id = op.get(flags.PROJECT_ID) push_metric = monitoring.query( project_id, RESPONSE_CODES.format(project_id=project_id, subscription_name=op.get( flags.SUBSCRIPTION_NAME)), ) if not push_metric: op.add_skipped( resource=crm.get_project(project_id), reason=( 'Skipping as no traffic delivery to the BigQuery has been detected' )) else: subscription = pubsub.get_subscription(project_id=project_id, subscription_name=op.get( flags.SUBSCRIPTION_NAME)) found_error_response: bool = False for metric_values in push_metric.values(): response_class = get_path(metric_values, ('labels', 'metric.response_class')) if response_class != 'ack': found_error_response = True op.add_failed(resource=subscription, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) if not found_error_response: op.add_ok(resource=subscription, reason='No error responses from BigQuery detected') class EndStep(runbook.EndStep): """Finalizing the runbook.""" def execute(self): """Finalizing the runbook.""" op.info('Finished troubleshooting BigQuery subscriptions.') ================================================ FILE: gcpdiag/runbook/pubsub/bigquery_subscription_delivery_test.py ================================================ # Copyright 2025 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. """Test for the BigQuery subscriptions runbook.""" from gcpdiag import config from gcpdiag.runbook import pubsub, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = pubsub runbook_name = 'pubsub/bigquery-subscription-delivery' project_id = 'gcpdiag-pubsub1-aaaa' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-pubsub1-aaaa', 'subscription_name': 'gcpdiag-pubsub1subscription2-9pm6hng1', 'table_id': 'test_dataset.test_table' }] ================================================ FILE: gcpdiag/runbook/pubsub/constants.py ================================================ # Copyright 2024 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. """Constants for the pubsub runbook.""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.constants import * ================================================ FILE: gcpdiag/runbook/pubsub/flags.py ================================================ # Copyright 2024 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. """Flags for the pubsub runbook.""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.flags import * from gcpdiag.runbook.iam.flags import * SUBSCRIPTION_NAME = 'subscription_name' ================================================ FILE: gcpdiag/runbook/pubsub/gcs_subscription_delivery.py ================================================ # Copyright 2026 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. """Runbook for troubleshooting Pub/Sub Cloud Storage subscriptions""" from boltons.iterutils import get_path from gcpdiag import models, runbook, utils from gcpdiag.queries import apis, crm, gcs, monitoring, pubsub from gcpdiag.runbook import op from gcpdiag.runbook.pubsub import flags from gcpdiag.runbook.pubsub import generalized_steps as pubsub_gs # Query to fetch push request counts grouped by response_class RESPONSE_CODES = ( 'fetch pubsub_subscription ' '| metric "pubsub.googleapis.com/subscription/push_request_count"' '| filter resource.project_id == "{project_id}"' ' && (resource.subscription_id == "{subscription_name}") ' '| align rate(1m) ' '| every 1m ' '| group_by [metric.response_class], ' ' [value_push_request_count_aggregate: aggregate(value.push_request_count)]' '| within 30m ') class GcsSubscriptionDelivery(runbook.DiagnosticTree): """Troubleshoot Pub/Sub to Cloud Storage subscription issues. This runbook checks for common configuration problems with Pub/Sub subscriptions that are set up to write directly to a Google Cloud Storage bucket. Checks performed: - Subscription existence and type. - Cloud Storage bucket existence. - IAM permissions for the Pub/Sub service account on the bucket. - State of the Pub/Sub subscription. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID containing the Pub/Sub subscription', 'required': True }, flags.SUBSCRIPTION_NAME: { 'type': str, 'help': 'The Pub/Sub subscription ID', 'required': True } } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = GcsSubscriptionDeliveryStart() self.add_start(start) subscription_check = GcsSubscriptionExistenceCheck() self.add_step(parent=start, child=subscription_check) check_bucket = CheckGcsBucket() self.add_step(parent=subscription_check, child=check_bucket) check_permissions = CheckServiceAccountPermissions() self.add_step(parent=check_bucket, child=check_permissions) quota_check = pubsub_gs.PubsubQuotas() self.add_step(check_permissions, quota_check) end_point_responses = ResponseCodeStep() self.add_step(quota_check, end_point_responses) check_sub_state = pubsub_gs.ActiveSubscription() self.add_step(parent=end_point_responses, child=check_sub_state) throughput = pubsub_gs.ThroughputQualification() self.add_step(check_sub_state, throughput) deadletter = pubsub_gs.DeadLetterTopic() self.add_step(throughput, deadletter) deadletter_permissions = pubsub_gs.DeadLetterTopicPermissions() self.add_step(deadletter, deadletter_permissions) self.add_end(GcsSubscriptionDeliveryEnd()) class GcsSubscriptionDeliveryStart(runbook.StartStep): """Start GCS Subscription check Check that the project exists and is reachable. """ template = 'generics::start' def execute(self): """Check that the project exists and Pub/Sub API is enabled""" try: project = crm.get_project(op.get(flags.PROJECT_ID)) if not project: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return else: op.add_ok(project, reason=f"Project '{project.id}' found.") except utils.GcpApiError: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON, project_id=op.get(flags.PROJECT_ID)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return if not apis.is_enabled(op.get(flags.PROJECT_ID), 'pubsub'): op.add_skipped( project, reason='Pub/Sub API is not enabled, please enable to proceed.') return class GcsSubscriptionExistenceCheck(runbook.Step): """Check that the Pub/Sub subscription exists. This step checks that the Pub/Sub subscription exists and is a gcs subscription. """ template = 'generics::subscription_existence' def execute(self): """Check that the Pub/Sub subscription exists.""" try: project_id = op.get(flags.PROJECT_ID) subscription_id = op.get(flags.SUBSCRIPTION_NAME) subscription = pubsub.get_subscription(project_id, subscription_id) except utils.GcpApiError: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON, subscription_name=op.get( flags.SUBSCRIPTION_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return if not subscription.is_gcs_subscription: op.add_failed(resource=subscription, reason=op.prep_msg(op.FAILURE_REASON, subscription_name=op.get( flags.SUBSCRIPTION_NAME)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok( subscription, reason=( f'Subscription {subscription_id} is a Cloud Storage subscription' f'targeting bucket: {subscription.gcs_subscription_bucket()}')) class CheckGcsBucket(runbook.Step): """Checks if the target Cloud Storage bucket exists. This step checks if the target Cloud Storage bucket exists. """ template = 'generics::gcs_bucket_existence' def execute(self): """Checking Cloud Storage bucket existence""" subscription = pubsub.get_subscription(op.get(flags.PROJECT_ID), op.get(flags.SUBSCRIPTION_NAME)) bucket_name = subscription.gcs_subscription_bucket() context = models.Context(project_id=op.get(flags.PROJECT_ID)) if not bucket_name: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) return try: bucket = gcs.get_bucket(context, bucket_name) if bucket: op.add_ok(bucket, reason=f'Target bucket {bucket_name} exists.') else: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) except utils.GcpApiError: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class CheckServiceAccountPermissions(runbook.Step): """Checks if the Pub/Sub service account has correct permissions on the bucket. This step checks if the Pub/Sub service account has correct permissions on the bucket """ template = 'generics::gcs_permission_check' def execute(self): """Checking Pub/Sub service account permissions on the bucket""" project_id = op.get(flags.PROJECT_ID) subscription = pubsub.get_subscription(project_id, op.get(flags.SUBSCRIPTION_NAME)) bucket_name = subscription.gcs_subscription_bucket() context = models.Context(project_id=project_id) if not bucket_name: op.add_skipped( None, reason='Bucket name not found, skipping permission checks.') return project = crm.get_project(project_id) service_account = \ f'serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com' required_permissions = ['storage.objects.create', 'storage.buckets.get'] try: policy = gcs.get_bucket_iam_policy(context, bucket_name) has_permissions = all( policy.has_permission(service_account, p) for p in required_permissions) except utils.GcpApiError as e: op.add_uncertain( subscription, reason= f'Could not verify IAM permissions on bucket {bucket_name}. Error: {e}', remediation= ('Please ensure you have permissions to get the bucket\'s IAM policy ' '(`storage.buckets.getIamPolicy`) and check manually.')) return if has_permissions: op.add_ok( subscription, reason= (f'Pub/Sub service account {service_account} has the necessary permissions ' f'on bucket {bucket_name}.')) else: op.add_failed(resource=None, reason=op.prep_msg(op.FAILURE_REASON, service_account=service_account, bucket_name=bucket_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION, service_account=service_account, bucket_name=bucket_name)) class ResponseCodeStep(runbook.Step): """Check push request responses from the endpoint. This step checks the responses coming from the endpoint and the success rates. """ template = 'generics::endpoint_response' def execute(self): """Check push request responses from the endpoint""" project_id = op.get(flags.PROJECT_ID) push_metric = monitoring.query( project_id, RESPONSE_CODES.format(project_id=project_id, subscription_name=op.get( flags.SUBSCRIPTION_NAME)), ) if not push_metric: op.add_skipped( resource=crm.get_project(project_id), reason=( 'Skipping as no traffic delivery to the endpoint has been detected' )) else: subscription = pubsub.get_subscription(project_id=project_id, subscription_name=op.get( flags.SUBSCRIPTION_NAME)) found_error_response: bool = False for metric_values in push_metric.values(): response_class = get_path(metric_values, ('labels', 'metric.response_class')) if response_class != 'ack': found_error_response = True op.add_failed(resource=subscription, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) if not found_error_response: op.add_ok(resource=subscription, reason='No error responses from the endpoint detected') class GcsSubscriptionDeliveryEnd(runbook.EndStep): """End Step No more checks. """ def execute(self): """Summarizing the findings""" project_id = op.get(flags.PROJECT_ID) subscription_id = op.get(flags.SUBSCRIPTION_NAME) op.info( f'Finished checks for Pub/Sub to GCS subscription' \ f'{subscription_id} in project {project_id}.' ) op.info( 'Please review the check results above. If issues persist, ' \ 'check Cloud Logging for errors related to the subscription.' ) ================================================ FILE: gcpdiag/runbook/pubsub/gcs_subscription_delivery_test.py ================================================ # Copyright 2026 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. """Test class for pubsub/GcsSubscriptionDelivery""" from gcpdiag import config from gcpdiag.runbook import pubsub, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = pubsub runbook_name = 'pubsub/gcs-subscription-delivery' project_id = 'gcpdiag-pubsub1-aaaa' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-pubsub1-aaaa', 'subscription_name': 'gcpdiag-pubsub1subscription3gcs-9pm6hng1' }] ================================================ FILE: gcpdiag/runbook/pubsub/generalized_steps.py ================================================ # Copyright 2024 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. """Common steps for Pub/Sub runbooks.""" import re from boltons.iterutils import get_path from gcpdiag import runbook from gcpdiag.queries import crm, iam, monitoring, pubsub, quotas from gcpdiag.runbook import op from gcpdiag.runbook.pubsub import flags class PubsubQuotas(runbook.Step): """Has common step to check if any Pub/Sub quotas are being exceeded in the project. This step checks if any quotas have been exceeded. """ template = 'generics::quota_exceeded' def execute(self): """Checks if any Pub/Sub quotas are being exceeded.""" if self.quota_exceeded_found is True: op.add_failed( resource=crm.get_project(op.get(flags.PROJECT_ID)), reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_ok( resource=crm.get_project(op.get(flags.PROJECT_ID)), reason='Quota usage is within project limits.', ) def quota_exceeded_found(self) -> bool: quota_exceeded_query = ( quotas.QUOTA_EXCEEDED_HOURLY_PER_SERVICE_QUERY_TEMPLATE.format( service_name='pubsub', within_days=1)) time_series = monitoring.query(op.get(flags.PROJECT_ID), quota_exceeded_query) if time_series: return True return False class ThroughputQualification(runbook.Step): """Has common step to validate subscription qualification attributes. This step checks if the throughput qualification is in a good state. """ template = 'generics::throughput_qualification' def execute(self): """Checks if subscription has good health (high qualification).""" subscription = pubsub.get_subscription(project_id=op.get(flags.PROJECT_ID), subscription_name=op.get( flags.SUBSCRIPTION_NAME)) qualification_query = ( 'fetch pubsub_subscription | metric' ' "pubsub.googleapis.com/subscription/delivery_latency_health_score" |' ' filter (resource.subscription_id =="{}") | group_by 1m,' ' [value_delivery_latency_health_score_sum:sum(if(value.delivery_latency_health_score,' ' 1, 0))] | every 1m | within 10m').format(subscription.name) low_health_metrics = [] time_series = monitoring.query(op.get(flags.PROJECT_ID), qualification_query) for metric in list(time_series.values()): # metric_dict[get_path(metric, ('labels','metric.criteria'))] = metric['values'] if metric['values'][0][-1] == 0: low_health_metrics.append( get_path(metric, ('labels', 'metric.criteria'))) if low_health_metrics: op.add_failed( resource=subscription, reason=op.prep_msg(op.FAILURE_REASON, low_health_metrics=low_health_metrics), remediation=op.prep_msg(op.FAILURE_REMEDIATION), ) else: op.add_ok(resource=subscription, reason='Subcription has good health') class ActiveSubscription(runbook.Step): """Has common step to validate if the subscription is active. This step checks if the subscription is in active (valid) state. """ template = 'generics::subscription_state' def execute(self): """Checks subscription activity status.""" subscription = pubsub.get_subscription(project_id=op.get(flags.PROJECT_ID), subscription_name=op.get( flags.SUBSCRIPTION_NAME)) if subscription.is_active(): op.add_ok(resource=subscription, reason='Subscription is active') else: op.add_failed(resource=subscription, reason='Inactive subscription. ', remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class DeadLetterTopic(runbook.Step): """Has common step to check if the subscription has a dead letter topic. This step checks if the subscription has a Dead Letter Topic attached. This is important to remove the messages that have failed processing out of the main subscription. """ template = 'generics::dead_letter_topic' def execute(self): """Checks for dead letter topic presence.""" subscription = pubsub.get_subscription(project_id=op.get(flags.PROJECT_ID), subscription_name=op.get( flags.SUBSCRIPTION_NAME)) if subscription.has_dead_letter_topic(): op.add_ok(resource=subscription, reason='Dead letter topic already attached') else: op.add_failed(resource=subscription, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class DeadLetterTopicPermissions(runbook.Step): """"Verifies that the Pub/Sub service agent has the necessary IAM permissions \ for the configured Dead Letter Topic. This step checks if the pubsub agent has the relevant permissions to move messages whose processing has failed continuously to the dead letter topic. """ template = 'generics::dead_letter_topic_permissions' def execute(self): """Checks for dead letter topic permissions.""" project_id = op.get(flags.PROJECT_ID) project = crm.get_project(project_id=project_id) subscription = pubsub.get_subscription( project_id=project_id, subscription_name=op.get(flags.SUBSCRIPTION_NAME), ) if not subscription.has_dead_letter_topic(): op.add_skipped( subscription, 'Subscription does not have a dead letter topic configured.') return # dead letter topic is in another project that the user may not be allowed if subscription.has_dead_letter_topic() and subscription.dead_letter_topic( ).split('/')[1] != project_id: op.info( 'Dead Letter topic permissions could not be verified. ' \ 'Please ensure both the publisher role to the dead letter topic/project ' \ 'level and the subscriber role at the subscription/project level to the ' \ 'pubsub agent ' \ 'serviceAccount:service-@gcp-sa-pubsub.iam.gserviceaccount.com ' \ 'are assigned' ) op.add_skipped(resource=project, reason='Dead Letter topic is in another project.') return role_publisher = 'roles/pubsub.publisher' role_subscriber = 'roles/pubsub.subscriber' policy = iam.get_project_policy(op.get_context()) service_account_re = re.compile('serviceAccount:service-' + str(project.number) + '@gcp-sa-pubsub.iam.gserviceaccount.com') service_account = next( filter( service_account_re.match, policy.get_members(), ), None, ) if not service_account: op.add_skipped(resource=project, reason='no Pub/Sub Service Agent found') return # check at the project level if policy.has_role_permissions( member=service_account, role=role_subscriber) and policy.has_role_permissions( member=service_account, role=role_publisher): op.add_ok(resource=project, reason='Dead Letter permissions assigned at the project level') return # check at the resource level subscription_policy = pubsub.get_subscription_iam_policy( op.get_context(), subscription.full_path) topic_policy = pubsub.get_topic_iam_policy(op.get_context(), subscription.dead_letter_topic()) # log uncertain in case of fine grained access restrictions if not subscription_policy.has_role_permissions( service_account, role_subscriber) or not topic_policy.has_role_permissions( service_account, role_publisher): op.add_uncertain( resource=project, reason='Missing dead letter topic permissions', remediation= 'Please ensure both the publisher role to the dead letter topic/project ' \ 'level and the subscriber role at the subscription/project level to the ' \ 'pubsub agent {} are assigned' .format(service_account)) else: op.add_ok(resource=subscription, reason='Dead letter topic permissions assigned') ================================================ FILE: gcpdiag/runbook/pubsub/generalized_steps_test.py ================================================ # Copyright 2024 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. """Tests for common steps for Pub/Sub runbooks.""" ================================================ FILE: gcpdiag/runbook/pubsub/pull_subscription_delivery.py ================================================ # Copyright 2024 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. """Module containing Pub/Sub Pull Delivery diagnostic tree and custom steps.""" from boltons.iterutils import get_path from gcpdiag import runbook, utils from gcpdiag.queries import apis, crm, monitoring, pubsub from gcpdiag.runbook import op from gcpdiag.runbook.pubsub import flags from gcpdiag.runbook.pubsub import generalized_steps as pubsub_gs DELIVERY_RATE = ( 'fetch pubsub_subscription | metric' ' "pubsub.googleapis.com/subscription/sent_message_count"| filter' ' resource.project_id == "{project_id}" && (resource.subscription_id ==' ' "{subscription_name}") | ' ' align rate(1m) | every 1m | group_by [],' ' [value_sent_message_count_aggregate: aggregate(value.sent_message_count)]' ' | within 10m') UNACKED_MESSAGES = ( 'fetch pubsub_subscription | metric' ' "pubsub.googleapis.com/subscription/num_undelivered_messages" | filter' ' resource.project_id == "{project_id}" && (resource.subscription_id ==' ' "{subscription_name}") | group_by 1m,' ' [value_num_undelivered_messages_mean:' ' mean(value.num_undelivered_messages)] | every 1m | group_by [],' ' [value_num_undelivered_messages_mean_aggregate:' ' aggregate(value_num_undelivered_messages_mean)] | within 10m') class PullSubscriptionDelivery(runbook.DiagnosticTree): """Diagnostic checks for Cloud Pub/Sub pull delivery issues. Provides a DiagnosticTree to check for issues related to delivery issues for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues experienced while using Pub/Sub pull subscriptions. - Areas: - delivery latency - quotas - pull rate - throughput rate """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True, }, flags.SUBSCRIPTION_NAME: { 'type': str, 'help': ('The name of subscription to evaluate in the runbook'), 'required': True, }, } def build_tree(self): """Construct the Diagnostic Tree with appropriate steps.""" # Instantiate your step classes start = PullSubscriptionDeliveryStart() self.add_start(start) quota_check = pubsub_gs.PubsubQuotas() self.add_step(start, quota_check) pull_rate = PullRate() self.add_step(quota_check, pull_rate) self.add_end(PullSubscriptionDeliveryEnd()) class PullSubscriptionDeliveryStart(runbook.StartStep): """Start step of runbook. Gets the subscription and confirms it exists in the project. """ def execute(self): """Start step.""" project = crm.get_project(op.get(flags.PROJECT_ID)) if project: op.info(f'name: {project.name}, id: {project.id}') if not apis.is_enabled(op.get(flags.PROJECT_ID), 'pubsub'): op.add_skipped( project, reason='Pub/Sub API is not enabled, please enable to proceed.') return subscription_name = op.get(flags.SUBSCRIPTION_NAME) # check subscription exists and is pull try: subscription = pubsub.get_subscription( project_id=op.get(flags.PROJECT_ID), subscription_name=subscription_name) except utils.GcpApiError: op.add_skipped( resource=project, reason= ('Could not find subscription {subscription_name}, please confirm it exists or ' 'if recreated please wait a few minutes before querying the runbook'. format(subscription_name=subscription_name)), ) else: if subscription.is_push_subscription(): op.add_skipped( resource=project, reason= ('Skipping execution because provided {subscription_name} is a push subscription. ' .format(subscription_name=subscription_name)), ) class PullRate(runbook.Gateway): """Has common step to check the high backlog vs the delivery rate ratio.""" def execute(self): """Checks if delivery rate is low i.e. receiving fewer messages than expected.""" subscription = pubsub.get_subscription(project_id=op.get(flags.PROJECT_ID), subscription_name=op.get( flags.SUBSCRIPTION_NAME)) unacked_messages = self.unacked_messages( subscription.name) # MQL takes truncated names delivery_rate = f'{self.delivery_rate(subscription.name):.2f}' op.info(message=( 'The current rate of delivery rate is {delivery_rate}/s against' ' {unacked_messages} unacked messages. (Note that Pub/Sub may ' 'return fewer messages than the max' ' amount configured, in order to respond to pull RPCs in reasonable time.)' ).format(delivery_rate=delivery_rate, unacked_messages=unacked_messages)) # analyze qualification self.add_child(child=pubsub_gs.ThroughputQualification()) # subscription/sent_message_count def delivery_rate(self, subscription_name: str) -> float: delivery_rate_query = DELIVERY_RATE.format( project_id=op.get(flags.PROJECT_ID), subscription_name=subscription_name) time_series = monitoring.query(op.get(flags.PROJECT_ID), delivery_rate_query) if time_series: return float(get_path(list(time_series.values())[0], 'values')[0][-1]) return 0.0 # subscription/num_undelivered_messages def unacked_messages(self, subscription_name: str) -> float: unacked_messages_query = UNACKED_MESSAGES.format( project_id=op.get(flags.PROJECT_ID), subscription_name=subscription_name) time_series = monitoring.query(op.get(flags.PROJECT_ID), unacked_messages_query) if time_series: return float(get_path(list(time_series.values())[0], 'values')[0][0]) return 0.0 class PullSubscriptionDeliveryEnd(runbook.EndStep): """End of this runbook. No more checks to perform. """ def execute(self): """End step. """ op.info('No more checks to perform.') ================================================ FILE: gcpdiag/runbook/pubsub/pull_subscription_delivery_test.py ================================================ # Copyright 2024 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. """Test class for pubsub/PullSubscriptionDelivery""" from gcpdiag import config from gcpdiag.runbook import pubsub, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = pubsub runbook_name = 'pubsub/pull-subscription-delivery' project_id = 'gcpdiag-pubsub1-aaaa' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-pubsub1-aaaa', 'subscription_name': 'gcpdiag-pubsub1subscription-9pm6hng1' }] ================================================ FILE: gcpdiag/runbook/pubsub/push_subscription_delivery.py ================================================ # Copyright 2025 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. """Module containing Pub/Sub Push Delivery diagnostic tree and custom steps.""" from boltons.iterutils import get_path from gcpdiag import runbook, utils from gcpdiag.queries import apis, crm, monitoring, pubsub from gcpdiag.runbook import op from gcpdiag.runbook.pubsub import flags from gcpdiag.runbook.pubsub import generalized_steps as pubsub_gs RESPONSE_CODES = ( 'fetch pubsub_subscription ' '| metric "pubsub.googleapis.com/subscription/push_request_count"' '| filter resource.project_id == "{project_id}"' ' && (resource.subscription_id == "{subscription_name}") ' '| align rate(1m) ' '| every 1m ' '| group_by [metric.response_class], ' ' [value_push_request_count_aggregate: aggregate(value.push_request_count)]' '| within 10m ') class PushSubscriptionDelivery(runbook.DiagnosticTree): """Diagnostic checks for Cloud Pub/Sub push delivery issues. Provides a DiagnosticTree to check for issues related to delivery issues for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues experienced while using Pub/Sub push subscriptions, including BQ & GCS subscriptions. - Areas: - subscription status - quotas - push responses - throughput rate - dead letter topic attachment and permissions - vpcsc enablement """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True, }, flags.SUBSCRIPTION_NAME: { 'type': str, 'help': ('The name of subscription to evaluate in the runbook'), 'required': True, }, } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" start = PushSubscriptionDeliveryStart() self.add_start(start) active_check = pubsub_gs.ActiveSubscription() self.add_step(start, active_check) quota_check = pubsub_gs.PubsubQuotas() self.add_step(active_check, quota_check) end_point_responses = ResponseCodeStep() self.add_step(quota_check, end_point_responses) throughput = pubsub_gs.ThroughputQualification() self.add_step(end_point_responses, throughput) deadletter = pubsub_gs.DeadLetterTopic() self.add_step(throughput, deadletter) deadletter_permissions = pubsub_gs.DeadLetterTopicPermissions() self.add_step(deadletter, deadletter_permissions) self.add_step(deadletter_permissions, VpcScStep()) # Ending your runbook self.add_end(PushSubscriptionDeliveryEnd()) class PushSubscriptionDeliveryStart(runbook.StartStep): """Start step of runbook. Gets the subscription and confirms it exists in the project. """ def execute(self): """Start step""" project = crm.get_project(op.get(flags.PROJECT_ID)) if project: op.info(f'name: {project.name}, id: {project.id}') if not apis.is_enabled(op.get(flags.PROJECT_ID), 'pubsub'): op.add_skipped( project, reason='Pub/Sub API is not enabled, please enable to proceed.') return subscription_name = op.get(flags.SUBSCRIPTION_NAME) # check subscription exists and is pull try: subscription = pubsub.get_subscription( project_id=op.get(flags.PROJECT_ID), subscription_name=subscription_name) except utils.GcpApiError: op.add_skipped( resource=project, reason= ('Could not find subscription {subscription_name}, please confirm it exists or ' 'if recreated please wait a few minutes before querying the runbook'. format(subscription_name=subscription_name)), ) else: if not subscription.is_push_subscription(): op.add_skipped( resource=project, reason= ('Skipping execution because provided {subscription_name} is not a push subscription. ' .format(subscription_name=subscription_name)), ) class ResponseCodeStep(runbook.Step): """Check push request responses from the endpoint. This step checks the responses coming from the endpoint and the success rates. """ template = 'generics::endpoint_response' def execute(self): """Check push request responses from the endpoint""" project_id = op.get(flags.PROJECT_ID) push_metric = monitoring.query( project_id, RESPONSE_CODES.format(project_id=project_id, subscription_name=op.get( flags.SUBSCRIPTION_NAME)), ) if not push_metric: op.add_skipped( resource=crm.get_project(project_id), reason=( 'Skipping as no traffic delivery to the endpoint has been detected' )) else: subscription = pubsub.get_subscription(project_id=project_id, subscription_name=op.get( flags.SUBSCRIPTION_NAME)) found_error_response: bool = False for metric_values in push_metric.values(): response_class = get_path(metric_values, ('labels', 'metric.response_class')) if response_class != 'ack': found_error_response = True op.add_failed(resource=subscription, reason=op.prep_msg(op.FAILURE_REASON), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) if not found_error_response: op.add_ok(resource=subscription, reason='No error responses from the endpoint detected') class VpcScStep(runbook.Step): """Check if the VPC-SC api is enabled This step highlights caveats of using VPC-SC with push subscriptions """ template = 'generics::vpcsc_api' def execute(self): """Check if push subscription project has a VPCSC perimeter """ if apis.is_enabled(op.get(flags.PROJECT_ID), 'accesscontextmanager'): op.info(op.prep_msg(op.FAILURE_REMEDIATION), step_type='INFO') class PushSubscriptionDeliveryEnd(runbook.EndStep): """End Step No more checks. """ def execute(self): """End Step for push subscription""" op.info('No more checks to perform.') ================================================ FILE: gcpdiag/runbook/pubsub/push_subscription_delivery_test.py ================================================ # Copyright 2025 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. """Test class for pubsub/PushSubscriptionDelivery""" from gcpdiag import config from gcpdiag.runbook import pubsub, snapshot_test_base class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = pubsub runbook_name = 'pubsub/push_subscription_delivery' project_id = 'gcpdiag-pubsub1-aaaa' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-pubsub1-aaaa', 'subscription_name': 'gcpdiag-pubsub1subscription2-9pm6hng1' }] ================================================ FILE: gcpdiag/runbook/pubsub/snapshots/bigquery_subscription_delivery.txt ================================================ project_id=gcpdiag-pubsub1-aaaa,subscription_name=gcpdiag- pubsub1subscription2-9pm6hng1,table_id=test_dataset.test_table pubsub/bigquery-subscription-delivery: Troubleshoot BigQuery Subscription Errors A diagnostic guide to help you resolve common issues causing message delivery failures from Pub/Sub to BigQuery. [START]: Check that the project exists and Pub/Sub API is enabled. - gcpdiag-pubsub1-aaaa [OK] [REASON] Project 'gcpdiag-pubsub1-aaaa' found. [AUTOMATED STEP]: Check that the Pub/Sub subscription exists. - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1 [OK] [REASON] Pub/Sub subscription 'gcpdiag-pubsub1subscription2-9pm6hng1' found. [AUTOMATED STEP]: Check that the BigQuery table exists. [AUTOMATED STEP]: Check that the Pub/Sub service agent has writer permissions. [AUTOMATED STEP]: Check the BigQuery subscription status and look for common issues. - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1 [OK] [REASON] The subscription projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1 state is ACTIVE. [AUTOMATED STEP]: Checks if any Pub/Sub quotas are being exceeded. - gcpdiag-pubsub1-aaaa [OK] [REASON] Quota usage is within project limits. [AUTOMATED STEP]: Check push request responses from BigQuery for issues. - gcpdiag-pubsub1-aaaa [SKIP] [REASON] Skipping as no traffic delivery to the BigQuery has been detected [AUTOMATED STEP]: Checks if subscription has good health (high qualification). - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1 [OK] [REASON] Subcription has good health [AUTOMATED STEP]: Checks for dead letter topic presence. - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1 [OK] [REASON] Dead letter topic already attached [AUTOMATED STEP]: Checks for dead letter topic permissions. - gcpdiag-pubsub1-aaaa [OK] [REASON] Dead Letter permissions assigned at the project level [END]: Finalizing the runbook. [INFO]: Finished troubleshooting BigQuery subscriptions. ================================================ FILE: gcpdiag/runbook/pubsub/snapshots/gcs_subscription_delivery.txt ================================================ project_id=gcpdiag-pubsub1-aaaa,subscription_name=gcpdiag-pubsub1subscription3gcs-9pm6hng1 pubsub/gcs-subscription-delivery: Troubleshoot Pub/Sub to Cloud Storage subscription issues. This runbook checks for common configuration problems with Pub/Sub subscriptions that are set up to write directly to a Google Cloud Storage bucket. Checks performed: - Subscription existence and type. - Cloud Storage bucket existence. - IAM permissions for the Pub/Sub service account on the bucket. - State of the Pub/Sub subscription. [START]: Check that the project exists and Pub/Sub API is enabled - gcpdiag-pubsub1-aaaa [OK] [REASON] Project 'gcpdiag-pubsub1-aaaa' found. [AUTOMATED STEP]: Check that the Pub/Sub subscription exists. - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [OK] [REASON] Subscription gcpdiag-pubsub1subscription3gcs-9pm6hng1 is a Cloud Storage subscriptiontargeting bucket: pubsub1_bucket [AUTOMATED STEP]: Checking Cloud Storage bucket existence [AUTOMATED STEP]: Checking Pub/Sub service account permissions on the bucket - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [OK] [REASON] Pub/Sub service account serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com has the necessary permissions on bucket pubsub1_bucket. [AUTOMATED STEP]: Checks if any Pub/Sub quotas are being exceeded. - gcpdiag-pubsub1-aaaa [OK] [REASON] Quota usage is within project limits. [AUTOMATED STEP]: Check push request responses from the endpoint - gcpdiag-pubsub1-aaaa [SKIP] [REASON] Skipping as no traffic delivery to the endpoint has been detected [AUTOMATED STEP]: Checks subscription activity status. - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [OK] [REASON] Subscription is active [AUTOMATED STEP]: Checks if subscription has good health (high qualification). - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [OK] [REASON] Subcription has good health [AUTOMATED STEP]: Checks for dead letter topic presence. - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [OK] [REASON] Dead letter topic already attached [AUTOMATED STEP]: Checks for dead letter topic permissions. - gcpdiag-pubsub1-aaaa [OK] [REASON] Dead Letter permissions assigned at the project level [END]: Summarizing the findings [INFO]: Finished checks for Pub/Sub to GCS subscriptiongcpdiag-pubsub1subscription3gcs-9pm6hng1 in project gcpdiag-pubsub1-aaaa. [INFO]: Please review the check results above. If issues persist, check Cloud Logging for errors related to the subscription. ================================================ FILE: gcpdiag/runbook/pubsub/snapshots/pull_subscription_delivery.txt ================================================ project_id=gcpdiag-pubsub1-aaaa,subscription_name=gcpdiag-pubsub1subscription-9pm6hng1 pubsub/pull-subscription-delivery: Diagnostic checks for Cloud Pub/Sub pull delivery issues. Provides a DiagnosticTree to check for issues related to delivery issues for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues experienced while using Pub/Sub pull subscriptions. - Areas: - delivery latency - quotas - pull rate - throughput rate [START]: Start step. [INFO]: name: gcpdiag test - pubsub1, id: gcpdiag-pubsub1-aaaa [AUTOMATED STEP]: Checks if any Pub/Sub quotas are being exceeded. - gcpdiag-pubsub1-aaaa [OK] [REASON] Quota usage is within project limits. [GATEWAY]: Checks if delivery rate is low i.e. receiving fewer messages than expected. [INFO]: The current rate of delivery rate is 0.00/s against 0.0 unacked messages. (Note that Pub/Sub may return fewer messages than the max amount configured, in order to respond to pull RPCs in reasonable time.) [AUTOMATED STEP]: Checks if subscription has good health (high qualification). - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription-9pm6hng1 [OK] [REASON] Subcription has good health [END]: End step. [INFO]: No more checks to perform. ================================================ FILE: gcpdiag/runbook/pubsub/snapshots/push_subscription_delivery.txt ================================================ project_id=gcpdiag-pubsub1-aaaa,subscription_name=gcpdiag-pubsub1subscription2-9pm6hng1 pubsub/push-subscription-delivery: Diagnostic checks for Cloud Pub/Sub push delivery issues. Provides a DiagnosticTree to check for issues related to delivery issues for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues experienced while using Pub/Sub push subscriptions, including BQ & GCS subscriptions. - Areas: - subscription status - quotas - push responses - throughput rate - dead letter topic attachment and permissions - vpcsc enablement [START]: Start step [INFO]: name: gcpdiag test - pubsub1, id: gcpdiag-pubsub1-aaaa [AUTOMATED STEP]: Checks subscription activity status. - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1 [OK] [REASON] Subscription is active [AUTOMATED STEP]: Checks if any Pub/Sub quotas are being exceeded. - gcpdiag-pubsub1-aaaa [OK] [REASON] Quota usage is within project limits. [AUTOMATED STEP]: Check push request responses from the endpoint - gcpdiag-pubsub1-aaaa [SKIP] [REASON] Skipping as no traffic delivery to the endpoint has been detected [AUTOMATED STEP]: Checks if subscription has good health (high qualification). - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1 [OK] [REASON] Subcription has good health [AUTOMATED STEP]: Checks for dead letter topic presence. - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1 [OK] [REASON] Dead letter topic already attached [AUTOMATED STEP]: Checks for dead letter topic permissions. - gcpdiag-pubsub1-aaaa [OK] [REASON] Dead Letter permissions assigned at the project level [AUTOMATED STEP]: Check if push subscription project has a VPCSC perimeter [END]: End Step for push subscription [INFO]: No more checks to perform. ================================================ FILE: gcpdiag/runbook/pubsub/templates/generics.jinja ================================================ {% block low_pull_rate_success_reason %} Acceptable pull rate observed. {% endblock low_pull_rate_success_reason %} {% block low_pull_rate_failure_remediation%} Increase pull rate to at least 20 RPCs per minute or increase the value of max messages configured [1]. Note that Pub/Sub may return fewer messages than the max amount configured, in order to respond to pull RPCs in reasonable time. [1] {% endblock low_pull_rate_failure_remediation %} {% block quota_exceeded_failure_reason %} Quota exceeded errors found for the Pub/Sub service. {% endblock quota_exceeded_failure_reason%} {% block quota_exceeded_failure_remediation %} Refer to [1] for guidance on quota limits and how to resolve quota errors. [1] . {% endblock quota_exceeded_failure_remediation %} {% block throughput_qualification_failure_reason %} Low Health Score for the subscription for metrics {low_health_metrics}. {% endblock throughput_qualification_failure_reason %} {% block throughput_qualification_failure_remediation %} Monitor and resolve the health issues of the subscription by referring to [1]. [1] . {% endblock throughput_qualification_failure_remediation %} {% block subscription_state_failure_remediation %} Increase subscription throughput to keep it active, or amend the persistence configuration. [1]. [1] . {% endblock subscription_state_failure_remediation %} {% block endpoint_response_failure_reason %} Non-OK responses from the endpoint detected [1]. [1] {% endblock endpoint_response_failure_reason %} {% block endpoint_response_failure_remediation %} Resolve the endpoint errors processing messages to enable successful delivery. Common errors codes: - 431: payload exceeds allowed header limits. Disable write metadata [1] - 401/403: if enabled, ensure the push subscription authentication abides by the requirements. [2] Otherwise check permission errors at the endpoint. - 400: investigate the correctness of the message attributes & the http endpoint. [1] . [2] . {% endblock endpoint_response_failure_remediation %} {% block dead_letter_topic_failure_reason %} No dead letter topic attached. [1] [1] {% endblock dead_letter_topic_failure_reason %} {% block dead_letter_topic_failure_remediation %} Add dead letter topic to deliver to the topic any messages whose delivery retries has exceeded the threshold. Be aware that this is on best effort [1] and ensure the proper permissions are assigned [2]. Monitor dead-lettered message count[3] and pull from the subscription attached to the dead letter topic to investigate the message processing failures [4]. [1] [2] [3] [4] {% endblock dead_letter_topic_failure_remediation %} {% block dead_letter_topic_permissions_failure_remediation %} Please ensure both the publisher role to the dead letter topic/project level and the subscriber role at the subscription/project level to the pubsub agent {} are assigned {% endblock dead_letter_topic_permissions_failure_remediation %} {% block vpcsc_api_failure_remediation %} Beware of limitations when using push subscriptions with VPCSC [1] such as: - You can't update existing push subscriptions, they continue to function but aren't protected by VPC Service Controls - Custom domains don't work, you can only create new push subscriptions for which the push endpoint is set to a Cloud Run service - You can only create new push subscriptions through Eventarc for Eventarc workflows - Use the fully qualified name of the topic if terraform/deployment manager is used to attach dead letter topics [1] {% endblock vpcsc_api_failure_remediation %} {% block invalid_failure_reason %} Message failures detected. [1] {% endblock %} {% block invalid_failure_remediation %} Handle message failures When a Pub/Sub message cannot be written to BigQuery, the message cannot be acknowledged. The Pub/Sub message forwarded to the dead-letter topic contains an attribute CloudPubSubDeadLetterSourceDeliveryErrorMessage that has the reason that the Pub/Sub message couldn't be written to BigQuery. [1] . {% endblock %} {%- block start_failure_reason -%} Project '{project_id}' not found or no permission to access it. {%- endblock -%} {%- block start_failure_remediation -%} Please check the project ID and your permissions. {%- endblock -%} {%- block subscription_existence_failure_reason -%} Pub/Sub subscription '{subscription_name}' not found. {%- endblock -%} {%- block subscription_existence_failure_remediation -%} Please check the subscription ID and your permissions. {%- endblock -%} {%- block bq_table_existence_failure_reason -%} BigQuery table {table_full_id} not found. {%- endblock -%} {%- block bq_table_existence_failure_remediation -%} Please ensure the BigQuery table exists. {%- endblock -%} {%- block gcs_bucket_existence_failure_reason -%} Bucket not found. {%- endblock -%} {%- block gcs_bucket_existence_failure_remediation -%} Please ensure the Bucket exists. {%- endblock -%} {%- block permission_check_failure_reason -%} The Pub/Sub service account '{service_account}' does not have required BigQuery permissionson project '{project_id}' {%- endblock -%} {%- block permission_check_failure_remediation -%} Grant the "BigQuery Data Editor" role (roles/bigquery.dataEditor) to the Pub/Sub service account: '{service_account}' {%- endblock -%} {%- block gcs_permission_check_failure_reason -%} Pub/Sub service account '{service_account}' is MISSING permission on bucket '{bucket_name}' {%- endblock -%} {%- block gcs_permission_check_failure_remediation -%} Grant the Pub/Sub service account '{service_account}' at least the storage.objects.create and storage.buckets.get permissions on the bucket '{bucket_name}'. {%- endblock -%} {%- block subscription_status_failure_remediation -%} The topic schema and the BigQuery table schema might be incompatible. Please check the schemas and ensure they are compatible. {%- endblock -%} ================================================ FILE: gcpdiag/runbook/report.py ================================================ # Copyright 2021 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. """Main runbook module containing core functionality implementation""" import collections import dataclasses import importlib import json import logging import os import re import sys from collections import OrderedDict from datetime import datetime, timezone from typing import Any, Dict, List, Optional from gcpdiag import config, models from gcpdiag.runbook import constants, util from gcpdiag.runbook.flags import INTERACTIVE_MODE from gcpdiag.runbook.output import terminal_output from gcpdiag.runbook.output.api_output import ApiOutput from gcpdiag.runbook.output.base_output import BaseOutput @dataclasses.dataclass class ResourceEvaluation: """Observation on a single GCP resource""" resource: Optional[models.Resource] reason: Optional[str] remediation: Optional[str] remediation_skipped: Optional[bool] prompt_response: Optional[str] status: str def __init__(self, status: str, resource: Optional[models.Resource], reason: Optional[str], remediation: Optional[str], remediation_skipped: Optional[bool] = None, prompt_response: Optional[str] = None): self.status = status self.resource = resource self.reason = reason self.remediation = remediation self.remediation_skipped = True if config.get( 'auto') else remediation_skipped self.prompt_response = prompt_response @dataclasses.dataclass class StepResult: """Runbook Step Results""" # if any evals failed this will be failed execution_id: str start_time: str end_time: str results: List[ResourceEvaluation] prompt_response: Any metadata: dict info: List step_error: str def __init__(self, step): self.execution_id = step.execution_id self.step = step self.results = [] self.metadata = OrderedDict() self.info = [] self.prompt_response = None self.step_error = None def __hash__(self) -> int: return self.execution_id.__hash__() def __eq__(self, other) -> bool: if self.__class__ == other.__class__: return (self.execution_id == other.execution_id and self.overall_status == other.overall_status and self.results == other.results and self.metadata == other.metadata and self.info == other.info) else: return False @property def overall_status(self): """Return the worst status available in the evaluations for the step Order of worst evals: failed > uncertain > ok > skipped """ if self.step_error: return 'skipped' for status in constants.STATUS_ORDER: if self.totals_by_status.get(status): return status return 'no_status' @property def any_failed(self): return any(r.status == 'failed' for r in self.results) @property def any_uncertain(self): return any(r.status == 'uncertain' for r in self.results) @property def totals_by_status(self) -> Dict[str, int]: totals: Dict[str, int] totals = collections.defaultdict(int) for r in self.results: totals[r.status] += 1 return totals class Report: """Report for a runbook or bundle""" # Same as the runbook or bundle run_id run_id: str runbook_name: Optional[str] = None run_start_time: str run_end_time: str execution_mode: str parameters: models.Parameter results: Dict[str, StepResult] def __init__(self, run_id, parameters) -> None: self.run_id = run_id self.parameters = parameters self.results = {} self.execution_mode = 'NON_INTERACTIVE' if config.get( 'auto') else 'INTERACTIVE' @property def any_failed(self) -> bool: return any(r.overall_status in ('failed', 'uncertain') for r in self.results.values()) def get_totals_by_status(self) -> Dict[str, int]: totals: Dict[str, int] totals = collections.defaultdict(int) for step_result in self.results.values(): totals[step_result.overall_status] += 1 return totals def get_rule_statuses(self) -> Dict[str, str]: return { str(r.execution_id): r.overall_status for r in self.results.values() } class ReportManager: """Base Report Manager subclassed to hand different interfaces (cli, api)""" reports: Dict[str, Report] = {} def __init__(self) -> None: self.reports = {} def add_step_result(self, run_id, result: StepResult): self.reports[run_id].results[result.execution_id] = result def add_step_eval(self, run_id, execution_id, evaluation: ResourceEvaluation): self.reports[run_id].results[execution_id].results.append(evaluation) def add_step_prompt_response(self, run_id, execution_id, prompt_response): self.reports[run_id].results[execution_id].prompt_response = prompt_response def serialize_report(self, report: Report): def improve_formatting(text): if text is None: return None # Decode escaped sequences like \\n, \\r, \\t to their actual characters text = text.encode('utf-8').decode('unicode_escape') # Remove extra spaces at start / end of string text = text.strip() return text def resource_evaluation(eval_list: List[ResourceEvaluation]): return [{ 'resource': r.resource.full_path if r.resource else '-', 'status': r.status, 'reason': improve_formatting(str(r.reason)), 'remediation': improve_formatting(r.remediation) if r.remediation else 'No remediation needed', 'remediation_skipped': False if config.get('auto') else r.remediation_skipped } for r in eval_list] def result_to_dict(entry: StepResult): return { 'execution_id': entry.step.execution_id, 'totals_by_status': entry.totals_by_status, 'description': improve_formatting(entry.step.__doc__), 'name': improve_formatting(entry.step.name) or '', 'execution_message': improve_formatting(entry.step.name) or '', 'overall_status': entry.overall_status, 'start_time': entry.start_time, 'end_time': entry.end_time, 'metadata': entry.metadata, 'info': entry.info, 'execution_error': entry.step_error, 'resource_evaluation': resource_evaluation(entry.results) } def parse_report_data(data): if isinstance(data, StepResult): return result_to_dict(data) else: return str(data) report_dict = { 'run_id': report.run_id, 'execution_mode': report.execution_mode, 'start_time': report.run_start_time, 'end_time': report.run_end_time, 'parameters': report.parameters, 'totals_by_status': report.get_totals_by_status(), 'results': report.results } return json.dumps(report_dict, ensure_ascii=False, default=parse_report_data, indent=2) def generate_reports(self): raise NotImplementedError def get_totals_by_status(self) -> Dict[str, int]: totals: Dict[str, int] totals = collections.defaultdict(int) for report in self.reports.values(): totals.update(report.get_totals_by_status()) return totals def generate_report_metrics(self, report: Report) -> Dict[str, dict]: reports_metrics: Dict[str, Any] = {} all_step_metrics = [] reports_metrics['execution_mode'] = report.execution_mode for result in report.results.values(): step_metrics: Dict[str, dict] = collections.defaultdict(dict) start = util.parse_time_input(result.start_time) end = util.parse_time_input(result.end_time) duration = (end - start).total_seconds() * 1000 step_metrics[result.step.id]['execution_duration'] = duration step_metrics[result.step.id]['totals_by_status'] = result.totals_by_status step_metrics[result.step.id]['error'] = bool(result.step_error) all_step_metrics.append(step_metrics) if report.runbook_name: start = util.parse_time_input(report.run_start_time) end = util.parse_time_input(report.run_end_time) duration = (end - start).total_seconds() * 1000 reports_metrics['runbook_name'] = report.runbook_name reports_metrics['run_duration'] = duration reports_metrics['totals_by_status'] = report.get_totals_by_status() reports_metrics['steps'] = all_step_metrics else: reports_metrics['steps'] = all_step_metrics return reports_metrics def add_step_metadata(self, run_id, key, value, step_execution_id): step_result = None if step_execution_id: step_result = self.reports[run_id].results[step_execution_id] if step_result: step_result.metadata[key] = value def add_step_info_metadata(self, run_id, value, step_execution_id): step_result = None if step_execution_id: step_result = self.reports[run_id].results[step_execution_id] if step_result: step_result.info.append(value) def get_step_metadata(self, run_id, key, step_execution_id): step_result = None if step_execution_id: step_result = self.reports[run_id].results[step_execution_id] if step_result: return step_result.metadata.get(key) return None def get_all_step_metadata(self, run_id, step_execution_id) -> dict: step_result = None if step_execution_id: step_result = self.reports[run_id].results[step_execution_id] if step_result: return step_result.metadata return {} class ApiReportManager(ReportManager): """Report Manager for API interactions with runbooks""" def generate_reports(self): """Generate Runbook Report""" reports = [] for _, report in self.reports.items(): # TODO: Refactor serialization logic to allow # converting a report into a dict without serialization reports.append(json.loads(self.serialize_report(report))) return reports class TerminalReportManager(ReportManager): """ Class representing results of runbook """ def get_report_path(self, run_id): date = datetime.now(timezone.utc).strftime('%Y_%m_%d_%H_%M_%S_%Z') report_name = f"gcpdiag_runbook_report_{re.sub(r'[.]', '_', run_id)}_{date}.json" return os.path.join(config.get('report_dir'), report_name) def generate_reports(self): """Generate Runbook Report""" for run_id, report in self.reports.items(): result = self.serialize_report(report) path = self.get_report_path(run_id) self._write_report_to_terminal(path, result) return json.loads(result) def _write_report_to_terminal(self, out_path, json_report): try: with open(out_path, 'w', encoding='utf-8') as file: file.write(json_report) except PermissionError as e: logging.error( 'Permission denied while saving report to file, displaying report') logging.debug(e) print(json_report, file=sys.stderr) except OSError as e: logging.error( 'Failed to save generated report to file, displaying report') logging.debug(e) print(json_report, file=sys.stderr) else: print(f'\nRunbook report located in: {file.name}', file=sys.stderr) class InteractionInterface: """ RunbookRule workflow use this interface to report ongoing results. """ rm: ReportManager output: BaseOutput def __init__(self, kind) -> None: if kind == constants.CLI: self.rm = TerminalReportManager() self.output = terminal_output.TerminalOutput() elif kind == constants.API: self.rm = ApiReportManager() self.output = ApiOutput() else: raise AttributeError( f'No valid interface specified {kind}. specify `cli` or `api`') def prompt(self, message: str, kind: str = '', options: dict = None, choice_msg: str = '') -> None: return self.output.prompt(message=message, kind=kind, options=options, choice_msg=choice_msg) def info(self, message: str, step_type='INFO') -> None: self.output.info(message=message, step_type=step_type) def prepare_rca(self, run_id, resource: Optional[models.Resource], template, suffix, step, context) -> None: try: module = importlib.import_module(step.__module__) file_name = module.__file__ except ImportError as e: logging.error(e) except AttributeError as e: logging.error('failed to locate steps module %s', e) else: file, prefix = template.split('::') if file_name: filepath = '/'.join([os.path.dirname(file_name), 'templates']) rca = util.render_template(filepath, f'{file}.jinja', context, prefix, suffix) self.output.info(message=rca) self.rm.add_step_eval(run_id=run_id, execution_id=step.execution_id, evaluation=ResourceEvaluation(status='rca', resource=resource, reason=rca, remediation='')) def add_skipped(self, run_id, resource: Optional[models.Resource], reason: str, step_execution_id: str) -> None: self.output.print_skipped(resource=resource, reason=reason) self.rm.add_step_eval(run_id, execution_id=step_execution_id, evaluation=ResourceEvaluation(status='skipped', resource=resource, reason=reason, remediation='')) def add_ok(self, run_id: str, resource: models.Resource, step_execution_id: str, reason: str = '') -> None: self.output.print_ok(resource=resource, reason=reason) self.rm.add_step_eval(run_id=run_id, execution_id=step_execution_id, evaluation=ResourceEvaluation(status='ok', resource=resource, reason=reason, remediation='')) def add_failed(self, run_id: str, resource: models.Resource, reason: str, remediation: str, step_execution_id: str, human_task_msg: str = '') -> Any: """Output test result and registers the result to be used in the runbook report. The failure assigned a human task unless program is running autonomously """ self.output.print_failed(resource=resource, reason=reason, remediation=remediation) result = ResourceEvaluation(status='failed', resource=resource, reason=reason, remediation=remediation) # Add results to report manager so other dependent features can act on it. self.rm.add_step_eval(run_id=run_id, execution_id=step_execution_id, evaluation=result) # assign a human task to be completed choice = self.output.prompt(kind=constants.HUMAN_TASK, message=human_task_msg) if not config.get(INTERACTIVE_MODE): self.rm.add_step_prompt_response(run_id=run_id, execution_id=step_execution_id, prompt_response=choice) if choice is constants.CONTINUE or choice is constants.STOP: result.remediation_skipped = True return choice def add_uncertain(self, run_id: str, step_execution_id: str, resource: models.Resource, reason: str, remediation: str = None, human_task_msg: str = '') -> Any: self.output.print_uncertain(reason=reason, resource=resource, remediation=remediation) result = ResourceEvaluation(status='uncertain', resource=resource, reason=reason, remediation=remediation) self.rm.add_step_eval(run_id=run_id, execution_id=step_execution_id, evaluation=result) choice = self.output.prompt(kind=constants.HUMAN_TASK, message=human_task_msg) if not config.get(INTERACTIVE_MODE): self.rm.add_step_prompt_response(run_id=run_id, execution_id=step_execution_id, prompt_response=choice) if choice is constants.CONTINUE or choice is constants.STOP: result.remediation_skipped = True return choice ================================================ FILE: gcpdiag/runbook/report_test.py ================================================ # Copyright 2021 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. """Test Reporting Classes""" import io import unittest from unittest.mock import Mock, PropertyMock, mock_open, patch from gcpdiag import config from gcpdiag.queries import gce from gcpdiag.runbook import Step, report from gcpdiag.runbook.report import StepResult config.init({'auto': True, 'interface': 'cli'}) json_report = '{"runbook": "test/test-runbook"}' class TestTerminalReportManager(unittest.TestCase): """Test Report Manager""" def setUp(self): self.trm = report.TerminalReportManager() r = report.Report(run_id='test', parameters={}) r.run_id = 'test' self.trm.reports[r.run_id] = r self.resource = gce.Instance( 'project_id', { 'id': '123', 'name': 'test', 'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id' }) ok_step_eval = report.ResourceEvaluation(resource=self.resource, status='ok', reason='TestReason', remediation='TestRemediation') test_step = report.StepResult(step=Step(uuid='ok.step')) test_step.results.append(ok_step_eval) self.trm.reports['test'].results = { test_step.execution_id: test_step, } def test_initialization(self): self.assertIsInstance(self.trm.reports['test'].results, dict) def test_add_step_result(self): step_result = StepResult(Step(uuid='friendly.name')) self.trm.add_step_result(run_id='test', result=step_result) self.assertIn('gcpdiag.runbook.Step.friendly.name', self.trm.reports['test'].results) self.assertEqual( self.trm.reports['test'].results['gcpdiag.runbook.Step.friendly.name'], step_result) def test_any_failed(self): step_result_failed = StepResult(Step(uuid='failed')) failed_eval = report.ResourceEvaluation(resource=self.resource, status='failed', reason='TestReason', remediation='TestRemediation') self.trm.add_step_result(run_id='test', result=step_result_failed) self.trm.add_step_eval(run_id='test', execution_id=step_result_failed.execution_id, evaluation=failed_eval) self.assertTrue(self.trm.reports['test'].any_failed) def test_get_rule_statuses(self): rule_statuses = self.trm.reports['test'].get_rule_statuses() self.assertEqual(rule_statuses, {'gcpdiag.runbook.Step.ok.step': 'ok'}) def test_generate_report_path(self): with patch('gcpdiag.config.get', return_value='fake_dir') as fd: report_path = self.trm.get_report_path('test') self.assertTrue(report_path.endswith('.json')) self.assertTrue(report_path.startswith(fd.return_value)) def test_add_step_prompt_response(self): step_result = StepResult(Step(uuid='prompt.response.step')) self.trm.add_step_result(run_id='test', result=step_result) prompt_response = 'continue' self.trm.add_step_prompt_response( run_id='test', execution_id=step_result.execution_id, prompt_response=prompt_response, ) self.assertEqual( self.trm.reports['test'].results[ step_result.execution_id].prompt_response, prompt_response, ) def test_report_any_failed_uncertain(self): self.trm.reports['test'].results['gcpdiag.runbook.Step.ok.step'].results[ 0].status = 'ok' self.assertFalse(self.trm.reports['test'].any_failed) step_result_uncertain = StepResult(Step(uuid='uncertain')) uncertain_eval = report.ResourceEvaluation(resource=self.resource, status='uncertain', reason='TestReason', remediation='TestRemediation') self.trm.add_step_result(run_id='test', result=step_result_uncertain) self.trm.add_step_eval(run_id='test', execution_id=step_result_uncertain.execution_id, evaluation=uncertain_eval) self.assertTrue(self.trm.reports['test'].any_failed) #pylint:disable=protected-access @patch('builtins.open', new_callable=mock_open) @patch('logging.error') @patch('sys.stderr', new_callable=io.StringIO) def test_report_to_terminal_success(self, mock_stderr, mock_logging_error, m_open): report_path = self.trm.get_report_path('test') self.trm._write_report_to_terminal(out_path=report_path, json_report=json_report) m_open.assert_called_once_with(report_path, 'w', encoding='utf-8') handle = m_open.return_value.__enter__.return_value handle.write.assert_called_once_with(json_report) self.assertEqual(mock_logging_error.call_count, 0) self.assertIn('Runbook report located in:', mock_stderr.getvalue()) @patch('builtins.open', side_effect=PermissionError) @patch('logging.error') @patch('sys.stderr', new_callable=io.StringIO) def test_save_report_permission_error(self, mock_stderr, mock_logging_error, m_open): report_path = self.trm.get_report_path('test') self.trm._write_report_to_terminal(out_path=report_path, json_report=json_report) m_open.assert_called_once_with(report_path, 'w', encoding='utf-8') handle = m_open.return_value.__enter__.return_value handle.write.assert_not_called() mock_logging_error.assert_called_once() assert 'Permission denied' in mock_logging_error.call_args[0][0] # report is displayed on the terminal self.assertIn(json_report, mock_stderr.getvalue()) self.assertNotIn('Runbook report located in', mock_stderr.getvalue()) @patch('builtins.open', side_effect=OSError) @patch('logging.error') @patch('sys.stderr', new_callable=io.StringIO) def test_write_report_to_terminal_os_error(self, mock_stderr, mock_logging_error, m_open): report_path = self.trm.get_report_path('test') self.trm._write_report_to_terminal(out_path=report_path, json_report=json_report) m_open.assert_called_once_with(report_path, 'w', encoding='utf-8') handle = m_open.return_value.__enter__.return_value handle.write.assert_not_called() mock_logging_error.assert_called_once() assert 'Failed to save generated report to file' in mock_logging_error.call_args[ 0][0] # report is displayed on the terminal self.assertIn(json_report, mock_stderr.getvalue()) self.assertNotIn('Runbook report located in', mock_stderr.getvalue()) def test_add_step_metadata(self): step_result = StepResult(Step(uuid='metadata.step')) self.trm.add_step_result(run_id='test', result=step_result) self.trm.add_step_metadata(run_id='test', key='foo', value='bar', step_execution_id=step_result.execution_id) self.assertEqual( self.trm.reports['test'].results[ step_result.execution_id].metadata['foo'], 'bar') self.assertEqual( self.trm.get_step_metadata(run_id='test', key='foo', step_execution_id=step_result.execution_id), 'bar') self.assertEqual( self.trm.get_all_step_metadata( run_id='test', step_execution_id=step_result.execution_id), {'foo': 'bar'}) def test_get_all_step_metadata_no_id(self): self.assertEqual( self.trm.get_all_step_metadata(run_id='test', step_execution_id=None), {}) def test_add_step_info_metadata(self): step_result = StepResult(Step(uuid='info.metadata.step')) self.trm.add_step_result(run_id='test', result=step_result) self.trm.add_step_info_metadata(run_id='test', value='info_message', step_execution_id=step_result.execution_id) self.assertIn( 'info_message', self.trm.reports['test'].results[step_result.execution_id].info) def test_add_step_metadata_no_id(self): self.trm.add_step_metadata(run_id='test', key='foo', value='bar', step_execution_id=None) # in this case nothing is done, so no assertion needed # besides verifying no crash def test_get_step_metadata_no_id(self): self.assertIsNone( self.trm.get_step_metadata(run_id='test', key='foo', step_execution_id=None)) def test_report_any_failed(self): self.trm.reports['test'].results['gcpdiag.runbook.Step.ok.step'].results[ 0].status = 'ok' self.assertFalse(self.trm.reports['test'].any_failed) step_result_failed = StepResult(Step(uuid='failed')) failed_eval = report.ResourceEvaluation(resource=self.resource, status='failed', reason='TestReason', remediation='TestRemediation') self.trm.add_step_result(run_id='test', result=step_result_failed) self.trm.add_step_eval(run_id='test', execution_id=step_result_failed.execution_id, evaluation=failed_eval) self.assertTrue(self.trm.reports['test'].any_failed) @patch( 'gcpdiag.runbook.report.TerminalReportManager._write_report_to_terminal') def test_trm_generate_reports(self, mock_write_report): self.trm.reports['test'].run_start_time = '2023-01-01T00:00:00Z' self.trm.reports['test'].run_end_time = '2023-01-01T00:00:01Z' self.trm.reports['test'].results[ 'gcpdiag.runbook.Step.ok.step'].start_time = '2023-01-01T00:00:00Z' self.trm.reports['test'].results[ 'gcpdiag.runbook.Step.ok.step'].end_time = '2023-01-01T00:00:01Z' self.trm.reports['test'].results[ 'gcpdiag.runbook.Step.ok.step'].step.name = ' step name ' result = self.trm.generate_reports() mock_write_report.assert_called_once() self.assertIsInstance(result, dict) self.assertEqual(result['run_id'], 'test') def test_generate_report_metrics_no_runbook_name(self): step_result = self.trm.reports['test'].results[ 'gcpdiag.runbook.Step.ok.step'] step_result.step = Mock() step_result.step.id = 'ok.step' self.trm.reports['test'].run_start_time = '2023-01-01T00:00:00Z' self.trm.reports['test'].run_end_time = '2023-01-01T00:00:01Z' step_result.start_time = '2023-01-01T00:00:00Z' step_result.end_time = '2023-01-01T00:00:01Z' self.trm.reports['test'].runbook_name = None metrics = self.trm.generate_report_metrics(self.trm.reports['test']) self.assertNotIn('runbook_name', metrics) self.assertNotIn('run_duration', metrics) self.assertNotIn('totals_by_status', metrics) self.assertIn('steps', metrics) self.assertIn('ok.step', metrics['steps'][0]) self.assertEqual(metrics['steps'][0]['ok.step']['execution_duration'], 1000) def test_get_totals_by_status(self): totals = self.trm.get_totals_by_status() self.assertEqual(totals['ok'], 1) def test_generate_report_metrics(self): step_result = self.trm.reports['test'].results[ 'gcpdiag.runbook.Step.ok.step'] step_result.step = Mock() step_result.step.id = 'ok.step' self.trm.reports['test'].run_start_time = '2023-01-01T00:00:00Z' self.trm.reports['test'].run_end_time = '2023-01-01T00:00:01Z' step_result.start_time = '2023-01-01T00:00:00Z' step_result.end_time = '2023-01-01T00:00:01Z' self.trm.reports['test'].runbook_name = 'test/test-runbook' metrics = self.trm.generate_report_metrics(self.trm.reports['test']) self.assertIn('runbook_name', metrics) self.assertEqual(metrics['run_duration'], 1000) self.assertIn('ok.step', metrics['steps'][0]) self.assertEqual(metrics['steps'][0]['ok.step']['execution_duration'], 1000) @patch('builtins.open', new_callable=mock_open) def test_generate_reports_no_reports(self, m_open): trm = report.TerminalReportManager() with self.assertRaises(UnboundLocalError): trm.generate_reports() m_open.assert_not_called() def test_serialize_report_with_formatting(self): self.trm.reports['test'].run_start_time = '2023-01-01T00:00:00Z' self.trm.reports['test'].run_end_time = '2023-01-01T00:00:01Z' step_result = self.trm.reports['test'].results[ 'gcpdiag.runbook.Step.ok.step'] step_result.start_time = '2023-01-01T00:00:00Z' step_result.end_time = '2023-01-01T00:00:01Z' step_result.step.name = ' step name ' step_result.results[0].reason = ' reason\\nnewline ' serialized = self.trm.serialize_report(self.trm.reports['test']) self.assertIn('"name": "step name"', serialized) self.assertIn('"reason": "reason\\nnewline"', serialized) class TestReportResults(unittest.TestCase): """Test Report""" def test_overall_status_no_status(self): step_result = report.StepResult(step=Step(uuid='no.status.step')) self.assertEqual(step_result.overall_status, 'no_status') def test_step_result_any_failed(self): resource = gce.Instance( 'project_id', { 'id': '123', 'name': 'test', 'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id' }) failed_eval = report.ResourceEvaluation(resource=resource, status='failed', reason='TestReason', remediation='TestRemediation') step_result = report.StepResult(step=Step(uuid='failed.step')) step_result.results.append(failed_eval) self.assertTrue(step_result.any_failed) def test_hash(self): step_result = report.StepResult(step=Step(uuid='ok.step')) self.assertEqual(hash(step_result), hash(step_result.execution_id)) def test_equality(self): # Test objects with the same properties are considered equal result1 = StepResult(Step(uuid='uuid')) result2 = StepResult(Step(uuid='uuid')) self.assertEqual(result1, result2) # Test objects with different properties are not considered equal result3 = StepResult(Step()) self.assertNotEqual(result1, result3) def test_overall_status_with_step_error(self): step_result = report.StepResult(step=Step(uuid='error.step')) step_result.step_error = 'some error' self.assertEqual(step_result.overall_status, 'skipped') def test_overall_status_no_results(self): step_result = report.StepResult(step=Step(uuid='no.results.step')) self.assertEqual(step_result.overall_status, 'no_status') def test_any_uncertain(self): resource = gce.Instance( 'project_id', { 'id': '123', 'name': 'test', 'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id' }) uncertain_eval = report.ResourceEvaluation(resource=resource, status='uncertain', reason='TestReason', remediation='TestRemediation') step_result = report.StepResult(step=Step(uuid='uncertain.step')) step_result.results.append(uncertain_eval) self.assertTrue(step_result.any_uncertain) self.assertEqual(step_result.overall_status, 'uncertain') def test_any_failed(self): resource = gce.Instance( 'project_id', { 'id': '123', 'name': 'test', 'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id' }) failed_eval = report.ResourceEvaluation(resource=resource, status='failed', reason='TestReason', remediation='TestRemediation') step_result = report.StepResult(step=Step(uuid='failed.step')) step_result.results.append(failed_eval) self.assertTrue(step_result.any_failed) self.assertEqual(step_result.overall_status, 'failed') class TestApiReportManager(unittest.TestCase): """Test ApiReportManager""" def setUp(self): self.arm = report.ApiReportManager() r = report.Report(run_id='test', parameters={}) r.run_id = 'test' r.run_start_time = '2023-01-01T00:00:00Z' r.run_end_time = '2023-01-01T00:00:01Z' self.arm.reports[r.run_id] = r self.resource = gce.Instance( 'project_id', { 'id': '123', 'name': 'test', 'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id' }) ok_step_eval = report.ResourceEvaluation(resource=self.resource, status='ok', reason='TestReason', remediation='TestRemediation') test_step = report.StepResult(step=Step(uuid='ok.step')) test_step.start_time = '2023-01-01T00:00:00Z' test_step.end_time = '2023-01-01T00:00:01Z' test_step.results.append(ok_step_eval) self.arm.reports['test'].results = { test_step.execution_id: test_step, } @patch('gcpdiag.runbook.Step.name', new_callable=PropertyMock) def test_generate_reports(self, mock_name): mock_name.return_value = 'test step' reports = self.arm.generate_reports() self.assertEqual(len(reports), 1) self.assertEqual(reports[0]['run_id'], 'test') class TestInteractionInterface(unittest.TestCase): """Test InteractionInterface""" def setUp(self): self.addCleanup(config.init, {'auto': True, 'interface': 'cli'}) config.init({'auto': False, 'interface': 'cli'}) self.cli_interface = report.InteractionInterface(kind='cli') self.api_interface = report.InteractionInterface(kind='api') self.resource = gce.Instance( 'project_id', { 'id': '123', 'name': 'test', 'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id' }) def test_invalid_interface(self): with self.assertRaises(AttributeError): report.InteractionInterface(kind='invalid') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.info') def test_info(self, mock_info): self.cli_interface.info('test message') mock_info.assert_called_with(message='test message', step_type='INFO') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.print_skipped') def test_add_skipped(self, mock_print_skipped): run_id = 'test_run' self.cli_interface.rm.reports[run_id] = report.Report(run_id, {}) step = Step(uuid='skipped.step') step_result = report.StepResult(step) self.cli_interface.rm.add_step_result(run_id, step_result) self.cli_interface.add_skipped(run_id, self.resource, 'reason', step.execution_id) mock_print_skipped.assert_called_once() self.assertEqual( self.cli_interface.rm.reports[run_id].results[ step.execution_id].results[0].status, 'skipped') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.print_ok') def test_add_ok(self, mock_print_ok): run_id = 'test_run' self.cli_interface.rm.reports[run_id] = report.Report(run_id, {}) step = Step(uuid='ok.step') step_result = report.StepResult(step) self.cli_interface.rm.add_step_result(run_id, step_result) self.cli_interface.add_ok(run_id, self.resource, step.execution_id, 'reason') mock_print_ok.assert_called_once() self.assertEqual( self.cli_interface.rm.reports[run_id].results[ step.execution_id].results[0].status, 'ok') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.prompt') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.print_failed') def test_add_failed(self, mock_print_failed, mock_prompt): run_id = 'test_run' self.cli_interface.rm.reports[run_id] = report.Report(run_id, {}) step = Step(uuid='failed.step') step_result = report.StepResult(step) self.cli_interface.rm.add_step_result(run_id, step_result) mock_prompt.return_value = report.constants.CONTINUE self.cli_interface.add_failed(run_id, self.resource, 'reason', 'remediation', step.execution_id) mock_print_failed.assert_called_once() self.assertEqual( self.cli_interface.rm.reports[run_id].results[ step.execution_id].results[0].status, 'failed') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.prompt') @patch( 'gcpdiag.runbook.output.terminal_output.TerminalOutput.print_uncertain') def test_add_uncertain(self, mock_print_uncertain, mock_prompt): run_id = 'test_run' self.cli_interface.rm.reports[run_id] = report.Report(run_id, {}) step = Step(uuid='uncertain.step') step_result = report.StepResult(step) self.cli_interface.rm.add_step_result(run_id, step_result) mock_prompt.return_value = report.constants.CONTINUE self.cli_interface.add_uncertain(run_id, step.execution_id, self.resource, 'reason', 'remediation') mock_print_uncertain.assert_called_once() self.assertEqual( self.cli_interface.rm.reports[run_id].results[ step.execution_id].results[0].status, 'uncertain') @patch('gcpdiag.runbook.util.render_template') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.info') def test_prepare_rca(self, mock_info, mock_render_template): run_id = 'test_run' self.cli_interface.rm.reports[run_id] = report.Report(run_id, {}) step = Step(uuid='rca.step') step_result = report.StepResult(step) self.cli_interface.rm.add_step_result(run_id, step_result) mock_render_template.return_value = 'rca message' self.cli_interface.prepare_rca(run_id, self.resource, 'template::prefix', 'suffix', step, {}) mock_info.assert_called_with(message='rca message') self.assertEqual( self.cli_interface.rm.reports[run_id].results[ step.execution_id].results[0].status, 'rca') @patch('importlib.import_module', side_effect=ImportError) @patch('logging.error') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.info') @patch('gcpdiag.runbook.util.render_template') def test_prepare_rca_import_error(self, mock_render_template, mock_info, mock_logging_error, unused_mock_import_module): run_id = 'test_run' self.cli_interface.rm.reports[run_id] = report.Report(run_id, {}) step = Step(uuid='rca.step') step_result = report.StepResult(step) self.cli_interface.rm.add_step_result(run_id, step_result) self.cli_interface.prepare_rca(run_id, self.resource, 'template::prefix', 'suffix', step, {}) # Check that logging.error was called with the exception mock_logging_error.assert_called_once() mock_info.assert_not_called() mock_render_template.assert_not_called() @patch('importlib.import_module') @patch('logging.error') @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.info') @patch('gcpdiag.runbook.util.render_template') def test_prepare_rca_attribute_error(self, mock_render_template, mock_info, mock_logging_error, mock_import_module): # Mock import_module to return a mock that raises AttributeError on __file__ mock_import_module.return_value = Mock(spec_set=['some_attribute']) run_id = 'test_run' self.cli_interface.rm.reports[run_id] = report.Report(run_id, {}) step = Step(uuid='rca.step') step_result = report.StepResult(step) self.cli_interface.rm.add_step_result(run_id, step_result) self.cli_interface.prepare_rca(run_id, self.resource, 'template::prefix', 'suffix', step, {}) # Verify the error was logged mock_logging_error.assert_called_once() self.assertEqual('failed to locate steps module %s', mock_logging_error.call_args[0][0]) mock_info.assert_not_called() mock_render_template.assert_not_called() ================================================ FILE: gcpdiag/runbook/runbook_test.py ================================================ # Copyright 2023 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. """Test code in runbook module""" import unittest from datetime import datetime, timedelta, timezone from unittest.mock import ANY, Mock, call, patch from gcpdiag import models, runbook from gcpdiag.runbook import (Bundle, DiagnosticEngine, Step, constants, exceptions) from gcpdiag.runbook.gcp import flags from gcpdiag.runbook.op import Operator class LegacyParamHandler(runbook.DiagnosticTree): """test runbook""" parameters = { 'new_param': { 'required': True }, 'deprecated_param': { 'new_parameter': 'new_param', 'deprecated': True } } # pylint: disable=unused-argument def legacy_parameter_handler(self, parameters): if 'deprecated_param' in parameters: parameters['new_param'] = True del parameters['deprecated_param'] class TestDiagnosticEngine(unittest.TestCase): """Test Diagnostic Engine""" def setUp(self): self.mock_report_manager = Mock(spec=runbook.report.ReportManager) self.mock_report_manager.reports = {} self.de = runbook.DiagnosticEngine() step = runbook.Step step.parameters = {} self.de.add_task((runbook.Bundle(), {})) self.de.add_task((runbook.DiagnosticTree(), {})) # pylint: disable=protected-access def test_run_diagnostic_tree_missing_required_parameters(self): with self.assertRaises(exceptions.MissingParameterError) as cm: dt = runbook.DiagnosticTree() dt.parameters = { 'missing_param': { 'required': True, 'help': 'Missing parameter help' }, } self.de._check_required_paramaters(parameter_def=dt.parameters, caller_args=models.Parameter()) self.assertEqual(cm.exception.missing_parameters_list, ['missing_param']) self.assertIn('Missing 1 required parameter', str(cm.exception)) self.assertIn('Parameter Explanation: Missing parameter help', str(cm.exception)) self.assertIn('-p missing_param=value', str(cm.exception)) @patch('logging.warning') def test_run_diagnostic_tree_deprecated_parameters(self, mock_logging_error): parameters = { 'deprecated_param': { 'deprecated': True, 'new_parameter': 'new_value' } } result = self.de._check_deprecated_paramaters( parameter_def=parameters, caller_args=models.Parameter({'deprecated_param': 'val'})) assert 'Deprecated parameters:\ndeprecated_param. Use: new_value=value' in result mock_logging_error.assert_called_once() # pylint: disable=protected-access def test_both_new_and_deprecated_missing(self): with self.assertRaises(exceptions.MissingParameterError): dt = LegacyParamHandler() user_supplied = models.Parameter({'random': 'value'}) dt.legacy_parameter_handler(user_supplied) self.de._check_required_paramaters(parameter_def=dt.parameters, caller_args=user_supplied) # pylint: disable=protected-access def test_backward_compatibility_for_deprecated_params(self): dt = LegacyParamHandler() user_supplied_param = models.Parameter({'deprecated_param': 'used_by_user'}) dt.legacy_parameter_handler(user_supplied_param) self.de._check_required_paramaters(parameter_def=dt.parameters, caller_args=user_supplied_param) def test_load_steps_missing_step(self): with self.assertRaisesRegex(ValueError, 'Step "MissingStep" not found'): self.de.load_steps({}, ['MissingStep']) @patch('gcpdiag.runbook.DiagnosticEngine.run_step') def test_find_path_dfs_normal_operation(self, mock_run_step): op = Operator(interface=None) current_step = Mock(execution_id='1') current_step.steps = [] visited = set() self.de.find_path_dfs(operator=op, step=current_step, executed_steps=visited) mock_run_step.assert_called() self.assertIn(current_step, visited) # Check if the current step was marked as visited @patch('gcpdiag.runbook.DiagnosticEngine.run_step') def test_find_path_dfs_finite_loop(self, mock_run_step): op = Operator(interface=None) current_step = Mock(execution_id='1', type=constants.StepType.AUTOMATED) current_step.steps = [current_step] visited = set() self.de.find_path_dfs(operator=op, step=current_step, executed_steps=visited) mock_run_step.assert_called() self.assertIn(current_step, visited) @patch('gcpdiag.runbook.DiagnosticEngine.run_step') def test_find_path_dfs_dynamically_added_child(self, mock_run_step): """Test that find_path_dfs executes dynamically added step as child.""" op = Operator(interface=None) step_root = Mock(execution_id='root_step') step_initial_a = Mock(execution_id='initial_child_A', steps=[]) step_initial_a._was_initially_defined = True step_initial_b = Mock(execution_id='initial_child_B', steps=[]) step_initial_b._was_initially_defined = True step_dynamic_b = Mock(execution_id='dynamic_child_B', steps=[]) del step_dynamic_b._was_initially_defined step_root.steps = [step_initial_a] step_initial_a.steps = [step_initial_b, step_dynamic_b] mock_run_step.return_value = None executed_steps = set() self.de.find_path_dfs( step=step_root, operator=op, executed_steps=executed_steps, ) expected_run_step_calls = [ call(step=step_root, operator=op), call(step=step_initial_a, operator=op), call(step=step_dynamic_b, operator=op), call(step=step_initial_b, operator=op), ] mock_run_step.assert_has_calls(expected_run_step_calls, any_order=False) self.assertIn(step_root, executed_steps) self.assertIn(step_initial_a, executed_steps) self.assertIn(step_dynamic_b, executed_steps) self.assertEqual(len(executed_steps), 4) @patch('gcpdiag.runbook.DiagnosticEngine.run_step') def test_find_path_dfs_dynamic_end_step_stops_execution(self, mock_run_step): op_instance = Operator(interface=None) root_step = Mock(execution_id='root') intermediate_step = Mock(execution_id='intermediate') finalize_step = Mock(execution_id='finalize_investigation', type=constants.StepType.END) should_not_run_step = Mock(execution_id='should_not_run') should_not_run_step._was_initially_defined = True root_step.steps = [intermediate_step, should_not_run_step] intermediate_step.steps = [finalize_step] def side_effect_for_run_step(step, operator): # pylint: disable=unused-argument if step.type == constants.StepType.END: # This step signals to stop the investigation return constants.FINALIZE_INVESTIGATION # Other steps just continue normally return None mock_run_step.side_effect = side_effect_for_run_step executed_steps_tracker = set() self.de.find_path_dfs( step=root_step, operator=op_instance, executed_steps=executed_steps_tracker, ) expected_calls = [ call(step=root_step, operator=op_instance), call(step=intermediate_step, operator=op_instance), call(step=finalize_step, operator=op_instance), ] mock_run_step.assert_has_calls(expected_calls, any_order=False) self.assertNotIn( call(step=should_not_run_step, operator=op_instance), mock_run_step.call_args_list, ) self.assertEqual(mock_run_step.call_count, 3) self.assertIn(root_step, executed_steps_tracker) self.assertIn(intermediate_step, executed_steps_tracker) self.assertIn(finalize_step, executed_steps_tracker) self.assertNotIn(should_not_run_step, executed_steps_tracker) self.assertTrue(self.de.finalize) @patch('gcpdiag.runbook.DiagnosticEngine.run_step') def test_find_path_all_child_step_executions(self, mock_run_step): op = Operator(interface=None) first_step = Mock(execution_id='1') intermidiate_step = Mock(execution_id='2') first_step.steps = [intermidiate_step] last_step = Mock(execution_id='3') last_step.steps = [] intermidiate_step.steps = [last_step, last_step, last_step, last_step] visited = set() self.de.find_path_dfs(operator=op, step=first_step, executed_steps=visited) self.assertIn(first_step, visited) self.assertIn(intermidiate_step, visited) self.assertIn(last_step, visited) self.assertEqual(mock_run_step.call_count, 3) @patch('gcpdiag.runbook.op.Operator') @patch('gcpdiag.runbook.DiagnosticEngine.run_step') def test_gateway_step_in_bundle(self, mock_run_step, mock_operator_class): """Dedicated test to ensure gateway steps in bundles execute child steps and report results.""" self.de.interface = Mock() self.de.interface.rm = self.mock_report_manager mock_op_instance = Mock() mock_operator_class.return_value = mock_op_instance # Create mock steps to track execution mock_child_execute = Mock() mock_gateway_execute = Mock() class MockChildStep(runbook.Step): template = 'mock_child' def execute(self, op): """Executes mock child step.""" mock_child_execute() op.add_ok(resource=Mock(spec=models.Resource), reason='Child step executed') class MockGatewayStep(runbook.Gateway): template = 'mock_gateway' def execute(self, op): # pylint: disable=unused-argument """Executes mock gateway step.""" mock_gateway_execute() self.add_child(MockChildStep()) bundle = runbook.Bundle() bundle.run_id = 'test_bundle_run' bundle.parameter = models.Parameter({}) bundle.steps = [MockGatewayStep] def run_step_side_effect(step, operator): # StartStep is an internal step and its execute method doesn't take any # arguments. The real run_step handles this, so our mock should too. if isinstance(step, runbook.StartStep): step.execute() else: step.execute(operator) mock_run_step.side_effect = run_step_side_effect self.de.run_bundles(bundles=[bundle]) # Assert that the gateway and the dynamically added child were executed mock_gateway_execute.assert_called_once() mock_child_execute.assert_called_once() mock_op_instance.add_ok.assert_called_once_with( resource=ANY, reason='Child step executed') @patch('gcpdiag.runbook.DiagnosticEngine.run_bundles') @patch('gcpdiag.runbook.DiagnosticEngine.run_diagnostic_tree') def test_run_operation(self, mock_run_bundle, mock_run_diagnostic_tree): self.de.run() assert mock_run_bundle.called assert mock_run_diagnostic_tree.called @patch('gcpdiag.runbook.DiagnosticEngine.run_step') def test_run_bundles(self, mock_run_step): bundle = runbook.Bundle() param = { 'param_one': 'test', 'param_two': True, 'param_three': datetime.now() } bundle.parameter = models.Parameter(param) bundle.steps.append(runbook.Step) self.de.run_bundles(bundles=[bundle]) _, kwargs = mock_run_step.call_args assert mock_run_step.called assert isinstance(kwargs['step'], runbook.Step) assert kwargs['step'].param_one == param['param_one'] assert kwargs['step'].param_two == param['param_two'] assert kwargs['step'].param_three == param['param_three'] def test_run_diagnostic_tree_missing_legacy_handler(self): with self.assertRaises(TypeError) as context: # pylint: disable=unused-variable class MissingLegacyHandler(runbook.DiagnosticTree): parameters = { 'deprecated_param': { 'type': str, 'help': 'Deprecated parameter', 'deprecated': True, # triggers Type error because of this field 'new_parameter': 'new_param' } } self.assertIn(( 'does not implement legacy_parameter_handler(). Implement this method to handle ' 'backward compatibility for deprecated parameters.'), str(context.exception)) @patch('gcpdiag.runbook.DiagnosticEngine.run_step') def test_run_multiple_bundles_consolidated_report(self, mock_run_step): # pylint: disable=unused-argument # Setup engine and bundles engine = DiagnosticEngine() bundle1 = Bundle() bundle1.parameter = models.Parameter({}) step1 = Mock(spec=Step) step1.parameters = {} step1.return_value.steps = [] bundle1.steps.append(step1) bundle2 = Bundle() bundle2.parameter = models.Parameter({}) step2 = Mock(spec=Step) step2.parameters = {} step2.return_value.steps = [] bundle2.steps.append(step2) # Add tasks and run engine.add_task((bundle1, bundle1.parameter)) engine.add_task((bundle2, bundle2.parameter)) engine.run() # Verify that only one report is created self.assertEqual(len(engine.interface.rm.reports), 1) class TestSetDefaultParameters(unittest.TestCase): """Test for Setting default date parameters""" def setUp(self): self.de = runbook.DiagnosticEngine() self.de.add_task((Mock(parent=runbook.DiagnosticTree), {})) def test_no_parameters_set(self): parameters = models.Parameter() self.de.parse_parameters(parameter_def={}, caller_args=parameters) self.assertIn(flags.END_TIME, parameters) self.assertIn(flags.START_TIME, parameters) end_time = parameters[flags.END_TIME] start_time = parameters[flags.START_TIME] # Assert end_time is recent and start_time is 8 hours before end_time self.assertTrue(isinstance(end_time, datetime)) self.assertTrue(isinstance(start_time, datetime)) self.assertAlmostEqual(end_time - start_time, timedelta(hours=8), delta=timedelta(seconds=10)) def test_end_time_provided_in_rfc3339(self): end_t_str = '2024-03-20T15:00:00Z' parameters = models.Parameter() parameters[flags.END_TIME] = end_t_str self.de.parse_parameters(parameter_def={}, caller_args=parameters) end_time = parameters[flags.END_TIME] start_time = parameters[flags.START_TIME] exp_end_time = datetime.strptime( end_t_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc) self.assertEqual(end_time, exp_end_time) self.assertEqual(start_time, exp_end_time - timedelta(hours=8)) def test_only_start_time_provided_in_rfc3339(self): start_t_str = '2024-03-20T07:00:00Z' parameters = models.Parameter() parameters[flags.START_TIME] = start_t_str self.de.parse_parameters(parameter_def={}, caller_args=parameters) start_time = parameters[flags.START_TIME] end_time = parameters[flags.END_TIME] exp_start_time = datetime.strptime( start_t_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc) self.assertEqual(start_time, exp_start_time) self.assertTrue(isinstance(end_time, datetime)) def test_both_times_provided_in_rfc3339(self): start_time_str = '2024-03-20T07:00:00Z' end_time_str = '2024-03-20T15:00:00Z' parameters = models.Parameter() parameters[flags.START_TIME] = start_time_str parameters[flags.END_TIME] = end_time_str self.de.parse_parameters(parameter_def={}, caller_args=parameters) start_time = parameters[flags.START_TIME] end_time = parameters[flags.END_TIME] expected_start_time = datetime.strptime( start_time_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc) expected_end_time = datetime.strptime( end_time_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc) self.assertEqual(start_time, expected_start_time) self.assertEqual(end_time, expected_end_time) def test_start_time_provided_in_utc_format(self): start_time_str = '2024-07-20' self.de.parameters = {} parameters = models.Parameter() parameters[flags.START_TIME] = start_time_str self.de.parse_parameters(self.de.parameters, parameters) start_time = parameters[flags.START_TIME] end_time = parameters[flags.END_TIME] self.assertEqual(str(start_time), '2024-07-20 00:00:00+00:00') self.assertTrue(str(end_time), isinstance(end_time, datetime)) def test_end_time_provided_in_utc_format(self): end_time_str = '2024-07-20' self.de.parameters = {} parameters = models.Parameter() parameters[flags.END_TIME] = end_time_str self.de.parse_parameters(self.de.parameters, parameters) start_time = parameters[flags.START_TIME] end_time = parameters[flags.END_TIME] self.assertEqual(str(start_time), '2024-07-19 16:00:00+00:00') self.assertEqual(str(end_time), '2024-07-20 00:00:00+00:00') def test_both_times_provided_in_utc_format(self): start_time_str = '2024-07-20' end_time_str = '2024-08-25' self.de.parameters = {} parameters = models.Parameter() parameters[flags.START_TIME] = start_time_str parameters[flags.END_TIME] = end_time_str self.de.parse_parameters(self.de.parameters, parameters) start_time = parameters[flags.START_TIME] end_time = parameters[flags.END_TIME] self.assertEqual(str(start_time), '2024-07-20 00:00:00+00:00') self.assertEqual(str(end_time), '2024-08-25 00:00:00+00:00') def test_both_times_provided_in_non_utc_format(self): start_time_str = '2024-07-20 00:00:00' # '2024-07-20T12:00:00-05:00' 12 PM EST (UTC-5) end_time_str = '2024-08-25 00:00:00' # '2024-08-25T15:00:00-07:00' 3 PM PDT (UTC-7) self.de.parameters = {} parameters = models.Parameter() parameters[flags.START_TIME] = start_time_str parameters[flags.END_TIME] = end_time_str self.de.parse_parameters(self.de.parameters, parameters) start_time = parameters[flags.START_TIME] end_time = parameters[flags.END_TIME] # Convert expected UTC times for the test case expected_start_time = '2024-07-20 00:00:00+00:00' # '2024-07-20 17:00:00+00:00' 12 PM EST is 5 PM UTC expected_end_time = '2024-08-25 00:00:00+00:00' # '2024-08-25 22:00:00+00:00' 3 PM PDT is 10 PM UTC self.assertEqual(str(start_time), expected_start_time) self.assertEqual(str(end_time), expected_end_time) def test_times_provided_in_epoch_format(self): start_time_epoch = '1601481600' # 2020-09-30 16:00:00 UTC end_time_epoch = '1601485200' # 2020-09-30 17:00:00 UTC parameters = models.Parameter() parameters[flags.START_TIME] = start_time_epoch parameters[flags.END_TIME] = end_time_epoch self.de.parse_parameters(parameter_def={}, caller_args=parameters) start_time = parameters[flags.START_TIME] end_time = parameters[flags.END_TIME] expected_start_time = datetime.fromtimestamp(float(start_time_epoch), tz=timezone.utc) expected_end_time = datetime.fromtimestamp(float(end_time_epoch), tz=timezone.utc) self.assertEqual(start_time, expected_start_time) self.assertEqual(end_time, expected_end_time) def test_invalid_format_provided(self): start_time_invalid = 'invalid_start_time' end_time_invalid = 'invalid_end_time' parameters = models.Parameter() parameters[flags.START_TIME] = start_time_invalid parameters[flags.END_TIME] = end_time_invalid with self.assertRaises(ValueError): self.de.parse_parameters(parameter_def={}, caller_args=parameters) class TestMetaStepRegistry(unittest.TestCase): """Test for meta step registry.""" def setUp(self): # Clear the registry before each test runbook.StepRegistry.clear() def test_register_step_subclass(self): class MyStep(runbook.Step): pass self.assertIn(MyStep.id, runbook.StepRegistry) self.assertIs(runbook.StepRegistry[MyStep.id], MyStep) def test_register_gateway_subclass(self): class MyGateway(runbook.Gateway): pass self.assertIn(MyGateway.id, runbook.StepRegistry) self.assertIs(runbook.StepRegistry[MyGateway.id], MyGateway) def test_register_composite_step_subclass(self): class MyCompositeStep(runbook.CompositeStep): pass self.assertIn(MyCompositeStep.id, runbook.StepRegistry) self.assertIs(runbook.StepRegistry[MyCompositeStep.id], MyCompositeStep) def test_dont_register_base_classes(self): self.assertNotIn(runbook.Step.id, runbook.StepRegistry) self.assertNotIn(runbook.Gateway.id, runbook.StepRegistry) def test_dont_register_other_classes(self): class NotAStep: pass not_a_step_id = '.'.join([NotAStep.__module__, NotAStep.__name__]) self.assertNotIn(not_a_step_id, runbook.StepRegistry) ================================================ FILE: gcpdiag/runbook/snapshot_test_base.py ================================================ # 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. """ Base class for snapshot tests """ import io import sys import textwrap from os import path from unittest import mock from gcpdiag import models, runbook from gcpdiag.queries import apis_stub, dns_stub, kubectl_stub from gcpdiag.runbook import command, util @mock.patch('gcpdiag.queries.apis.get_user_email', new=lambda: 'fake-user@google.com') @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub) @mock.patch('gcpdiag.queries.kubectl.verify_auth', new=kubectl_stub.verify_auth) @mock.patch('gcpdiag.queries.kubectl.check_gke_ingress', new=kubectl_stub.check_gke_ingress) @mock.patch('gcpdiag.queries.dns.find_dns_records', new=dns_stub.find_dns_records) class RulesSnapshotTestBase: """ Run snapshot test """ def test_all_rules(self, snapshot): self.de = runbook.DiagnosticEngine() tree = self.de.load_tree(self.runbook_name) snapshot.snapshot_dir = path.join(path.dirname(self.rule_pkg.__file__), 'snapshots') output_stream = io.StringIO() sys.stdout = _Tee(output_stream, sys.stdout) for parameter in self.rule_parameters: parameters = self._mk_parameters(parameter=parameter) print(textwrap.fill(str(parameters), 100), file=sys.stdout, end='\n\n') self.de.run_diagnostic_tree(tree(), parameter=parameters) print('\n') snapshot.assert_match( output_stream.getvalue(), path.join( snapshot.snapshot_dir, f'{util.pascal_case_to_snake_case(tree().__class__.__name__)}.txt')) def _mk_parameters(self, parameter): return models.Parameter(parameter) class _Tee: """Helper class to direct the same output to two file like objects at the same time.""" def __init__(self, string_io1, string_io2): self.string_io1 = string_io1 self.string_io2 = string_io2 def write(self, data): self.string_io1.write(data) self.string_io2.write(data) def flush(self): self.string_io1.flush() self.string_io2.flush() #pylint: disable=protected-access command._load_runbook_rules(runbook.__name__) ================================================ FILE: gcpdiag/runbook/util.py ================================================ # Copyright 2023 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. """Helpful functions used in different parts of the runbook command""" import importlib import os import re import string import uuid from datetime import datetime, timezone from dateutil import parser from jinja2 import Environment, FileSystemLoader, select_autoescape from gcpdiag.runbook import constants env = Environment(trim_blocks=True, lstrip_blocks=True, autoescape=select_autoescape()) step_outcomes = constants.StepConstants.keys() def generate_uuid(length: int = 10, separator_interval: int = 4, separator: str = '.'): """ Generates a UUID string with the specified length and separators. Args: length: The desired length of the final UUID string excluding separators. Default 8 separator_interval: The number of characters between separators. Default: 4 separator: uuid separator. Default `.` Returns: A UUID string formatted with the specified length and separators. """ uuid_str = uuid.uuid4().hex if len(uuid_str) > length: uuid_str = uuid_str[:length] else: uuid_str = uuid_str.ljust(length, '0') unique_id = separator.join( uuid_str[i:i + separator_interval] for i in range(0, len(uuid_str), separator_interval)) return unique_id def pascal_case_to_kebab_case(s): """ Converts a PascalCase string to kebab-case. Args: s (str): The string to convert from PascalCase to kebab-case. Returns: str: The converted string in kebab-case. """ s = re.sub('(.)([A-Z0-9][a-z]+)', r'\1-\2', s) s = re.sub('--([A-Z0-9])', r'-\1', s) s = re.sub('([a-z])([A-Z0-9])', r'\1-\2', s) return s.lower() def kebab_case_to_pascal_case(s): """ Converts a kebab-case string to PascalCase. Args: s (str): The string to convert Returns: str: The converted string in Pascal Case. """ words = s.split('-') pascal_str = ''.join(word.capitalize() for word in words) return pascal_str def pascal_case_to_snake_case(s): """ Converts a PascalCase string to snake_case. Args: s (str): The string to convert from PascalCase to snake_case. Returns: str: The converted string in snake_case. """ s = re.sub('(.)([A-Z0-9][a-z]+)', r'\1_\2', s) s = re.sub('__([A-Z0-9])', r'_\1', s) s = re.sub('([a-z])([A-Z0-9])', r'\1_\2', s) return s.lower() def runbook_name_parser(s): """ Converts a string from PascalCase or kebab-case. Args: s (str): The string to convert from PascalCase to kebab-case. Returns: str: The converted string in kebab-case """ s = s.replace('_', '-') parts = s.split('/') return '/'.join([pascal_case_to_kebab_case(part) for part in parts]) def pascal_case_to_title(s): """ Converts a PascalCase string to Title Case (each word's first letter is capitalized). Args: s (str): The string to convert from PascalCase to Title Case. Returns: str: The converted string in Title Case. """ s = re.sub('(.)([A-Z0-9][a-z]+)', r'\1 \2', s) s = re.sub('__([A-Z0-9])', r' \1', s) s = re.sub('([a-z])([A-Z0-9])', r'\1 \2', s) return string.capwords(s) def load_template_block(module_name, file_name, block_name): """ Load specified blocks from a Jinja2 template. block_name: Load blocks with this prefixf/ module_name: Ref to module """ module = importlib.import_module(module_name) current_dir = os.path.dirname(os.path.abspath(module.__file__)) template_file = os.path.join(current_dir, 'templates', f'{file_name}.jinja') env.loader = FileSystemLoader(os.path.dirname(template_file)) template = env.get_template(os.path.basename(template_file)) observations = {} for entry in step_outcomes: t_block_name = f'{block_name}_{entry}' # Attempt to load each sub-block if it exists within the main block if t_block_name in template.blocks: observations[entry] = ''.join(template.blocks[t_block_name]( template.new_context())) return observations def render_template(file_dir, file_name_with_ext, context, block_prefix=None, block_suffix=None): """ Load specified blocks from a Jinja2 template. template_path: Path to the Jinja2 template file. main_block_name: The main block name to load sub-blocks from. sub_block_names: A list of sub-block names to load. A dictionary with the loaded block contents. """ env.loader = FileSystemLoader(file_dir) context['render_block'] = f'{block_prefix}_{block_suffix}' content = env.get_template(f'{file_name_with_ext}').render(context) return content def parse_time_input(time_str): """Parse RFC3339, ISO 8601, or epoch time input to datetime object.""" # Try parsing as a float (epoch timestamp) first try: epoch = float(time_str) return datetime.fromtimestamp(epoch, tz=timezone.utc) except ValueError: pass # Not an epoch timestamp # Then, try parsing as ISO 8601 / RFC 3339 using dateutil for broader support try: return parser.isoparse(time_str) except ValueError: pass # Not an ISO 8601 / RFC 3339 formatted date # If none of the formats matched, raise an exception raise ValueError(f'Date format not recognized: {time_str}') def resolve_patterns(patterns_str: str, constants_module) -> list[str]: """Resolves a ';;' separated string of patterns, handling 'ref:' prefix.""" patterns = [] for pattern in patterns_str.split(';;'): pattern = pattern.strip() if pattern.startswith('ref:'): const_name = pattern[4:] resolved_value = getattr(constants_module, const_name, None) if resolved_value is None: raise ValueError( f"Could not resolve constant reference: '{pattern}'. " f"Ensure '{const_name}' is defined in {constants_module.__name__}.") if isinstance(resolved_value, list): patterns.extend(resolved_value) else: patterns.append(resolved_value) else: patterns.append(pattern) return patterns def get_operator_fn(op_str: str): """Maps an operator string to a function from the operator module.""" operators = { 'eq': re.match, 'ne': re.match, 'lt': re.match, 'le': re.match, 'gt': re.match, 'ge': re.match, } if op_str not in operators: raise ValueError( f"Unsupported operator: '{op_str}'. Supported operators are: {list(operators.keys())}" ) return operators[op_str] ================================================ FILE: gcpdiag/runbook/util_test.py ================================================ # Copyright 2023 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. """Contains Util related Tests""" import re import unittest from datetime import datetime, timezone from unittest import mock from jinja2 import Environment from gcpdiag.runbook import util class TestStringConversions(unittest.TestCase): """Test case type conversion used for Runbook and step name conversions.""" def test_pascal_case_to_kebab_case(self): self.assertEqual(util.pascal_case_to_kebab_case('PascalCase'), 'pascal-case') # should be able to handle camelcase too self.assertEqual(util.pascal_case_to_kebab_case('camelCase'), 'camel-case') self.assertEqual(util.pascal_case_to_kebab_case('Pascal'), 'pascal') self.assertNotEqual(util.pascal_case_to_kebab_case('Not Pascal'), 'not-pascal') def test_pascal_case_to_title(self): self.assertEqual(util.pascal_case_to_title('PascalCase'), 'Pascal Case') self.assertEqual(util.pascal_case_to_title('Errors5xx'), 'Errors 5xx') self.assertEqual(util.pascal_case_to_title('Errors5xxStart'), 'Errors 5xx Start') self.assertEqual(util.pascal_case_to_title('Errors503'), 'Errors 503') def test_pascal_case_to_snake_case(self): self.assertEqual(util.pascal_case_to_snake_case('PascalCase'), 'pascal_case') self.assertEqual(util.pascal_case_to_snake_case('Errors5xx'), 'errors_5xx') self.assertEqual(util.pascal_case_to_snake_case('Errors5xxStart'), 'errors_5xx_start') self.assertEqual(util.pascal_case_to_snake_case('Errors503'), 'errors_503') def test_kebab_case_to_pascal_case(self): self.assertEqual(util.kebab_case_to_pascal_case('kebab-case'), 'KebabCase') self.assertEqual(util.kebab_case_to_pascal_case('kebab-case-long'), 'KebabCaseLong') def test_runbook_name_parser(self): self.assertEqual(util.runbook_name_parser('product/word'), 'product/word') self.assertEqual(util.runbook_name_parser('product/kebab-case'), 'product/kebab-case') self.assertEqual( util.runbook_name_parser('product/kebab_case_name'), 'product/kebab-case-name', ) self.assertEqual(util.runbook_name_parser('Product/PascalCase'), 'product/pascal-case') self.assertEqual(util.runbook_name_parser('Product/PascalCase'), 'product/pascal-case') self.assertEqual( util.runbook_name_parser('Product/PascalCase5xx'), 'product/pascal-case-5xx', ) self.assertEqual( util.runbook_name_parser('Product/PascalCase5Test'), 'product/pascal-case-5-test', ) self.assertEqual(util.runbook_name_parser('PascalCase'), 'pascal-case') self.assertEqual(util.runbook_name_parser('snake_case'), 'snake-case') self.assertEqual(util.runbook_name_parser('pascal-snake_case'), 'pascal-snake-case') self.assertEqual( util.runbook_name_parser('MixAnd-Match_Examplev3'), 'mix-and-match-examplev-3', ) def test_parse_rfc3339_format(self): test_str = '2024-03-20T07:00:00Z' expected = datetime(2024, 3, 20, 7, 0, tzinfo=timezone.utc) result = util.parse_time_input(test_str) self.assertEqual(result, expected) def test_parse_epoch_format(self): test_str = '1601481600' # Corresponds to 2020-09-30 16:00:00 UTC expected = datetime(2020, 9, 30, 16, 0, tzinfo=timezone.utc) result = util.parse_time_input(test_str) self.assertEqual(result, expected) def test_invalid_format_raises_error(self): test_str = 'not-a-valid-time' with self.assertRaises(ValueError): util.parse_time_input(test_str) class TestGenerateUUID(unittest.TestCase): """Test UUID genertor for Runbook executions""" def test_uniqueness(self): """Test that generated UUIDs are unique.""" uuids = set() for _ in range(10000): # Generate a reasonable number of UUIDs uuids.add(util.generate_uuid()) self.assertEqual(len(uuids), 10000) # All should be unique def test_default_parameters(self): """Test with default length and separator.""" result = util.generate_uuid() self.assertEqual(len(result), 10 + result.count('.')) # Check length self.assertTrue('.' in result) # Check for separator def test_custom_length(self): """Test with a custom length.""" result = util.generate_uuid(length=12) self.assertEqual(len(result), 12 + result.count('.')) def test_custom_separator(self): """Test with a custom separator.""" result = util.generate_uuid(separator='-') self.assertTrue('-' in result) def test_custom_interval(self): """Test with a custom separator interval.""" result = util.generate_uuid(separator_interval=3) separator_count = result.count('.') self.assertEqual(separator_count, 3) def test_truncate(self): """Test truncation when length is shorter than UUID.""" result = util.generate_uuid(length=4) self.assertEqual(len(result), 4 + result.count('.')) def test_pad(self): """Test padding when length is longer than UUID.""" result = util.generate_uuid(length=40) self.assertEqual(len(result), 40 + result.count('.')) self.assertTrue(result.endswith('0')) class MockConstantsModule: SINGLE_PATTERN = 'single_pattern' LIST_PATTERN = ['list_pattern1', 'list_pattern2'] class TestResolvePatterns(unittest.TestCase): """Test resolve_patterns function.""" def test_no_references(self): patterns = util.resolve_patterns('pattern1;;pattern2', MockConstantsModule) self.assertEqual(patterns, ['pattern1', 'pattern2']) def test_single_string_reference(self): patterns = util.resolve_patterns('ref:SINGLE_PATTERN', MockConstantsModule) self.assertEqual(patterns, ['single_pattern']) def test_list_reference(self): patterns = util.resolve_patterns('ref:LIST_PATTERN', MockConstantsModule) self.assertEqual(patterns, ['list_pattern1', 'list_pattern2']) def test_mixed_patterns_and_references(self): patterns = util.resolve_patterns( 'pattern1;;ref:SINGLE_PATTERN;;pattern2;;ref:LIST_PATTERN', MockConstantsModule) self.assertEqual(patterns, [ 'pattern1', 'single_pattern', 'pattern2', 'list_pattern1', 'list_pattern2' ]) def test_invalid_reference(self): with self.assertRaises(ValueError): util.resolve_patterns('ref:INVALID_PATTERN', MockConstantsModule) class TestGetOperatorFn(unittest.TestCase): """Test get_operator_fn function.""" def test_get_operator_fn(self): self.assertEqual(util.get_operator_fn('eq'), re.match) self.assertEqual(util.get_operator_fn('ne'), re.match) self.assertEqual(util.get_operator_fn('lt'), re.match) self.assertEqual(util.get_operator_fn('le'), re.match) self.assertEqual(util.get_operator_fn('gt'), re.match) self.assertEqual(util.get_operator_fn('ge'), re.match) def test_get_operator_fn_invalid(self): with self.assertRaises(ValueError): util.get_operator_fn('invalid') class TestTemplateFunctions(unittest.TestCase): """Test load_template_block and render_template functions.""" def setUp(self): super().setUp() self.mock_env = mock.Mock(spec=Environment) self.mock_get_template = self.mock_env.get_template util.env = self.mock_env m = mock.MagicMock() m.__file__ = '/tmp/dummy/path/file.py' self.mock_importlib = self.enterContext( mock.patch('importlib.import_module', return_value=m)) # Use patch.object to ensure the correct module variable is patched self.mock_step_outcomes = self.enterContext( mock.patch.object(util, 'step_outcomes', ['ok', 'failed'])) def test_load_template_block(self): template_mock = mock.MagicMock() block_ok_mock = mock.Mock(return_value=['ok_content']) block_failed_mock = mock.Mock(return_value=['failed_content']) template_mock.blocks = { 'myblock_ok': block_ok_mock, 'myblock_failed': block_failed_mock, } template_mock.new_context.return_value = {} self.mock_get_template.return_value = template_mock result = util.load_template_block('dummy_module', 'dummy_template', 'myblock') self.assertEqual(result, {'ok': 'ok_content', 'failed': 'failed_content'}) self.mock_importlib.assert_called_once_with('dummy_module') self.mock_get_template.assert_called_once_with('dummy_template.jinja') block_ok_mock.assert_called_once_with({}) block_failed_mock.assert_called_once_with({}) def test_render_template(self): mock_template = mock.Mock() self.mock_get_template.return_value = mock_template mock_template.render.return_value = 'rendered_content' result = util.render_template('/tmp/dummy/path', 'template.jinja', {'data': 123}, 'p', 's') self.assertEqual(result, 'rendered_content') self.mock_get_template.assert_called_once_with('template.jinja') mock_template.render.assert_called_once_with({ 'data': 123, 'render_block': 'p_s' }) ================================================ FILE: gcpdiag/runbook/vertex/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/vertex/constants.py ================================================ # Copyright 2024 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. """Constants for Vertex AI Runbooks""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.constants import * WORKBENCH_INSTANCES_IMAGES_FAMILY = 'workbench-instances' WORKBENCH_INSTANCES_IMAGES_PROJECT = 'projects/cloud-notebooks-managed' DEEP_LEARNING_VM_IMAGES_PROJECT = 'projects/deeplearning-platform-release' WORKBENCH_INSTANCES_UPGRADABILITY_INVALID_STATE_INFO = 'invalid state' WORKBENCH_INSTANCES_UPGRADABILITY_CURRENT = 'image are the same' ================================================ FILE: gcpdiag/runbook/vertex/flags.py ================================================ # Copyright 2024 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. """Vertex AI Runbooks flags""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.iam.flags import * INSTANCE_NAME = 'instance_name' ================================================ FILE: gcpdiag/runbook/vertex/generalized_steps.py ================================================ # Copyright 2024 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. """Vertex AI Generalized Runbook Steps""" from gcpdiag import runbook from gcpdiag.queries import gce, logs, monitoring, notebooks from gcpdiag.runbook import op from gcpdiag.runbook.gce import flags as gce_flags from gcpdiag.runbook.gce import generalized_steps as gce_gs from gcpdiag.runbook.vertex import constants, flags class CheckWorkbenchInstanceCustomScripts(runbook.Step): """Check if the Workbench Instance is using custom scripts Users have the option to add scripts to a Workbench Instance via the metadata fields. However, scripts may change the default behaviour or install libraries that break dependencies """ template = 'workbench_scripts::custom' project_id: str = '' instance_name: str = '' zone: str = '' def execute(self): """Check if the Workbench Instance has custom scripts""" project_id: str = self.project_id or op.get(flags.PROJECT_ID) instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME) zone: str = self.zone or op.get(flags.ZONE) workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance( project_id=project_id, zone=zone, instance_name=instance_name) if (workbench_instance.post_startup_script or workbench_instance.startup_script or workbench_instance.startup_script_url): op.add_uncertain( resource=workbench_instance, reason=op.prep_msg( op.UNCERTAIN_REASON, instance_name=instance_name, post_startup_script=workbench_instance.post_startup_script, startup_script=workbench_instance.startup_script, startup_script_url=workbench_instance.startup_script_url), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.add_ok(resource=workbench_instance, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=instance_name)) class CheckWorkbenchInstanceUsingOfficialImage(runbook.Step): """Check if the Workbench Instance is using the official images Users have the option to create Workbench Instances with any image However, only 'workbench-instances' official images are supported """ template = 'workbench_images::official' project_id: str = '' instance_name: str = '' zone: str = '' def execute(self): """Check if Workbench Instance VM's boot disk image is one of the official images""" project_id: str = self.project_id or op.get(flags.PROJECT_ID) instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME) zone: str = self.zone or op.get(flags.ZONE) gce_instance = gce.get_instance(project_id=project_id, zone=zone, instance_name=instance_name) gce_instance_boot_disk_image = gce_instance.get_boot_disk_image() if (constants.WORKBENCH_INSTANCES_IMAGES_FAMILY in gce_instance_boot_disk_image and constants.WORKBENCH_INSTANCES_IMAGES_PROJECT in gce_instance_boot_disk_image): op.add_ok(resource=gce_instance, reason=op.prep_msg( op.SUCCESS_REASON, instance_name=instance_name, image_family=constants.WORKBENCH_INSTANCES_IMAGES_FAMILY, image=gce_instance_boot_disk_image)) elif constants.DEEP_LEARNING_VM_IMAGES_PROJECT in gce_instance_boot_disk_image: op.add_uncertain( resource=gce_instance, reason=op.prep_msg( op.UNCERTAIN_REASON, image=gce_instance_boot_disk_image, images_family=constants.DEEP_LEARNING_VM_IMAGES_PROJECT), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.add_failed( resource=gce_instance, reason=op.prep_msg( op.FAILURE_REASON, image=gce_instance_boot_disk_image, images_family=constants.WORKBENCH_INSTANCES_IMAGES_FAMILY), remediation=op.prep_msg( op.FAILURE_REMEDIATION, images_family=constants.WORKBENCH_INSTANCES_IMAGES_FAMILY)) # User will need to create a new Workbench Instance class CheckWorkbenchInstanceIsUsingLatestEnvVersion(runbook.Step): """Check if the Workbench Instance is using the latest environment version Workbench Instances can be upgraded regularly to have the latest fixes """ template = 'workbench_environment_version::upgradable' project_id: str = '' instance_name: str = '' zone: str = '' def execute(self): """Check if the Workbench Instance is using the latest environment version""" project_id: str = self.project_id or op.get(flags.PROJECT_ID) instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME) zone: str = self.zone or op.get(flags.ZONE) workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance( project_id=project_id, zone=zone, instance_name=instance_name) workbench_instance_upgradability: dict = notebooks.workbench_instance_check_upgradability( project_id=project_id, workbench_instance_name=workbench_instance.name) workbench_instance_upgradeable: bool = workbench_instance_upgradability.get( 'upgradeable', False) workbench_instance_upgrade_version: str = workbench_instance_upgradability.get( 'upgradeVersion', '').upper() workbench_instance_upgrade_info: str = workbench_instance_upgradability.get( 'upgradeInfo', '') workbench_instance_upgrade_image: str = workbench_instance_upgradability.get( 'upgradeImage', '') op.info(f'instance is upgradeable: {workbench_instance_upgradeable}') op.info(f'instance upgrade info: {workbench_instance_upgrade_info}') if workbench_instance_upgradeable: op.add_failed( resource=workbench_instance, reason=op.prep_msg( op.FAILURE_REASON, instance_name=instance_name, environment_version=workbench_instance.environment_version), remediation=op.prep_msg( op.FAILURE_REMEDIATION, upgrade_version=workbench_instance_upgrade_version, upgrade_image=workbench_instance_upgrade_image)) else: if constants.WORKBENCH_INSTANCES_UPGRADABILITY_CURRENT in workbench_instance_upgrade_info: op.add_ok( resource=workbench_instance, reason=op.prep_msg( op.SUCCESS_REASON, instance_name=instance_name, environment_version=workbench_instance.environment_version)) elif (constants.WORKBENCH_INSTANCES_UPGRADABILITY_INVALID_STATE_INFO in workbench_instance_upgrade_info and workbench_instance.state != notebooks.StateEnum.STOPPED): op.add_uncertain(resource=workbench_instance, reason=op.prep_msg( op.UNCERTAIN_REASON, instance_name=instance_name, upgrade_info=workbench_instance_upgrade_info), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) elif not workbench_instance.environment_version: # Environment version is 0 and upgradability False when the instance is new op.add_uncertain(resource=workbench_instance, reason=op.prep_msg( op.UNCERTAIN_REASON_ALT1, instance_name=instance_name, upgrade_info=workbench_instance_upgrade_info), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT1)) else: op.add_uncertain(resource=workbench_instance, reason=op.prep_msg( op.UNCERTAIN_REASON_ALT2, instance_name=instance_name, upgrade_info=workbench_instance_upgrade_info), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT2)) class CheckWorkbenchInstanceSyslogsJupyterRunningOnPort8080(runbook.Step): """Check Jupyter is running on port 127.0.0.1:8080 Jupyter should always run on port 127.0.0.1:8080 for the Workbench Instance to work correctly """ template = 'workbench_jupyter_port::running' project_id: str = '' instance_name: str = '' zone: str = '' def execute(self): """Verify Jupyter is running on port 127.0.0.1:8080""" start_time = op.get(flags.START_TIME) end_time = op.get(flags.END_TIME) project_id: str = self.project_id or op.get(flags.PROJECT_ID) instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME) zone: str = self.zone or op.get(flags.ZONE) workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance( project_id=project_id, zone=zone, instance_name=instance_name) filter_str = r'''severity=INFO AND resource.type="gce_instance" AND log_name=~"projects\/{project_id}\/logs\/serialconsole.googleapis.com.*" AND labels."compute.googleapis.com/resource_name"="{instance_name}" AND textPayload=~"ServerApp.*Jupyter Server.*running at.*"'''.format( project_id=project_id, instance_name=instance_name) serial_log_entries_jupyter_running = logs.realtime_query( project_id=project_id, filter_str=filter_str, start_time=start_time, end_time=end_time) if serial_log_entries_jupyter_running: op.info( 'Jupyter is running! Verifying if it\'s running on port 127.0.0.1:8080.' ) filter_str = r'''severity=INFO AND resource.type="gce_instance" AND log_name=~"projects\/{project_id}\/logs\/serialconsole.googleapis.com.*" AND labels."compute.googleapis.com/resource_name"="{instance_name}" AND NOT textPayload=~"ServerApp.*localhost:8080\/lab" AND textPayload=~"ServerApp.*localhost:[0-9]{{4}}\/lab"'''.format( project_id=project_id, instance_name=instance_name) serial_log_entries_jupyter_port = logs.realtime_query( project_id=project_id, filter_str=filter_str, start_time=start_time, end_time=end_time) if serial_log_entries_jupyter_port: #User will need to fix their instance o create a new one op.add_failed(resource=workbench_instance, reason=op.prep_msg(op.FAILURE_REASON_ALT1, instance_name=instance_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(resource=workbench_instance, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=instance_name)) else: #User needs to make sure their instance is not stopped to get logs op.add_failed(resource=workbench_instance, reason=op.prep_msg(op.FAILURE_REASON, instance_name=instance_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class CheckWorkbenchInstancePerformance(runbook.CompositeStep): """Checks performance of a Workbench Instance by evaluating its memory, CPU, and disk utilization. This composite diagnostic step sequentially checks for high memory utilization, high disk utilization, and CPU performance issues. It adds specific child steps designed to identify and report potential performance bottlenecks that could impact the instance's operation. """ project_id: str = '' instance_name: str = '' zone: str = '' def execute(self): """Evaluating Workbench Instance Compute Engine VM memory, CPU, and disk performance.""" within_hours = 8 within_str = 'within %dh, d\'%s\'' % (within_hours, monitoring.period_aligned_now(5)) project_id: str = self.project_id or op.get(flags.PROJECT_ID) instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME) zone: str = self.zone or op.get(flags.ZONE) op.put(gce_flags.PROJECT_ID, project_id) op.put(gce_flags.INSTANCE_NAME, instance_name) op.put(gce_flags.ZONE, zone) ops_agent_query = monitoring.query( op.get(flags.PROJECT_ID), """ fetch gce_instance | metric 'agent.googleapis.com/agent/uptime' | filter (metadata.system_labels.name == '{}') | align rate(5m) | every 5m | {} """.format(op.get(gce_flags.INSTANCE_NAME), within_str)) if ops_agent_query: op.info( 'Runbook will use ops agent metrics for VM performance investigation') vm_memory_utilization = gce_gs.HighVmMemoryUtilization() vm_memory_utilization.project_id = project_id vm_memory_utilization.zone = zone vm_memory_utilization.instance_name = instance_name vm_disk_utilization = gce_gs.HighVmDiskUtilization() vm_disk_utilization.project_id = project_id vm_disk_utilization.zone = zone vm_disk_utilization.instance_name = instance_name vm_cpu_utilization = gce_gs.HighVmCpuUtilization() vm_cpu_utilization.project_id = project_id vm_cpu_utilization.zone = zone vm_cpu_utilization.instance_name = instance_name self.add_child(child=vm_memory_utilization) self.add_child(child=vm_disk_utilization) self.add_child(child=vm_cpu_utilization) class CheckWorkbenchInstanceExternalIpDisabled(runbook.Step): """Check if the Workbench Instance has external IP disabled If the instance has external IP disabled, user must configure Private networking correctly """ template = 'workbench_ip::disabled' project_id: str = '' instance_name: str = '' zone: str = '' def execute(self): """Check if the Workbench Instance has external IP disabled""" project_id: str = self.project_id or op.get(flags.PROJECT_ID) instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME) zone: str = self.zone or op.get(flags.ZONE) workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance( project_id=project_id, zone=zone, instance_name=instance_name) if workbench_instance.disable_public_ip: op.add_uncertain(resource=workbench_instance, reason=op.prep_msg(op.UNCERTAIN_REASON, instance_name=instance_name, network=workbench_instance.network, subnetwork=workbench_instance.subnet), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.add_ok(resource=workbench_instance, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=instance_name)) ================================================ FILE: gcpdiag/runbook/vertex/generalized_steps_test.py ================================================ # Copyright 2024 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. """TODO: String doc""" ================================================ FILE: gcpdiag/runbook/vertex/snapshots/workbench_instance_stuck_in_provisioning.txt ================================================ instance_name=notebooks2instance-provisioning-stuck,project_id=gcpdiag-notebooks2-aaaa,zone=us- west1-a vertex/workbench-instance-stuck-in-provisioning: Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State This runbook investigates root causes for the Workbench Instance to be stuck in provisioning state Areas Examined: - Workbench Instance State: Checks the instance's current state ensuring that it is stuck in provisioning status and not stopped or active. - Workbench Instance Compute Engine VM Boot Disk Image: Checks if the instance has been created with a custom container, the official 'workbench-instances' images, deep learning VMs images, or unsupported images that might cause the instance to be stuck in provisioning state. - Workbench Instance Custom Scripts: Checks if the instance is not using custom scripts that may affect the default configuration of the instance by changing the Jupyter port or breaking dependencies that might cause the instance to be stuck in provisioning state. - Workbench Instance Environment Version: Checks if the instance is using the latest environment version by checking its upgradability. Old versions sometimes are the root cause for the instance to be stuck in provisioning state. - Workbench Instance Compute Engine VM Performance: Checks the VM's current performance, ensuring that it is not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt normal operations. - Workbench Instance Compute Engine Serial Port Logging: Checks if the instance has serial port logs which can be analyzed to ensure Jupyter is running on port 127.0.0.1:8080 which is mandatory. - Workbench Instance Compute Engine SSH and Terminal access: Checks if the instance's compute engine vm is running so the user can ssh and open a terminal to check for space usage in 'home/jupyter'. If no space is left, that may cause the instance to be stuck in provisioning state. - Workbench Instance External IP Disabled: Checks if the external IP disabled. Wrong networking configurations may cause the instance to be stuck in provisioning state. [START]: Sets values to be used and get resources from Notebooks and GCE APIs [INFO]: project id: gcpdiag-notebooks2-aaaa, project number: 12340012 [INFO]: product: vertex workbench instances [INFO]: instance name parameter: notebooks2instance-provisioning-stuck [INFO]: instance zone parameter: us-west1-a [INFO]: --- Workbench Instance --- [INFO]: instance name: projects/gcpdiag-notebooks2-aaaa/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck [INFO]: instance state: PROVISIONING [INFO]: instance environment version: 0 [INFO]: instance compute account: 12340012-compute@developer.gserviceaccount.com [INFO]: instance network: https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/wbi-test-default [INFO]: instance subnetwork: https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/wbi-test-default [INFO]: instance public ip disabled: True [INFO]: instance metadata disable-mixer: True [INFO]: instance metadata serial-port-logging-enable:True [INFO]: instance metadata post-startup-script: #! /bin/bash [INFO]: instance metadata startup-script: [INFO]: instance metadata startup-script-url: [INFO]: instance metadata report-event-health: True [INFO]: instance compute engine vm name: notebooks2instance-provisioning-stuck [INFO]: instance compute engine vm is running: True [INFO]: instance is upgradeable: False [INFO]: instance upgrade info: Current and latest available image are the same [INFO]: --- Workbench Instance Health State --- [INFO]: instance health - state: HEALTH_STATE_UNSPECIFIED [INFO]: instance health - jupyterlab status healthy:False [INFO]: instance health - jupyterlab api status healthy:False [INFO]: instance health - notebooks api dns healthy:False [INFO]: instance health - proxy registration dns healthy:False [INFO]: instance health - system healthy:False [INFO]: instance health - docker status healthy:False [INFO]: instance state: PROVISIONING - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [OK] [REASON] OK! Workbench Instance notebooks2instance-provisioning-stuck is in PROVISIONING, STARTING or INITIALIZING state. [AUTOMATED STEP]: Checking if the Workbench Instance is using a custom container. - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [OK] [REASON] OK! Workbench Instance notebooks2instance-provisioning-stuck is not using a custom container. [AUTOMATED STEP]: Verify Workbench Instance Compute Engine VM's boot disk image is part of the official family of images - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck [UNCERTAIN] [REASON] image: https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-11-cu113-notebooks-v20240613-debian-11-py310 'projects/deeplearning-platform-release' images might work with Workbench Instances, but are unsupported [1] [1] [REMEDIATION] Officially supported images are found in the Google Cloud Console: Vertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown. [AUTOMATED STEP]: Verify Workbench Instance has custom post-startup or startup scripts - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [UNCERTAIN] [REASON] Workbench Instance notebooks2instance-provisioning-stuck has custom post-startup or startup scripts: - post-startup-script: #! /bin/bash - startup-script: - startup-script-url: [REMEDIATION] Scripts must ensure: - Jupyter runs on port 127.0.0.1:8080 - If packages are installed they should not add breaking changes to the Jupyter configuration [AUTOMATED STEP]: Verify Workbench Instance is using the latest environment version [INFO]: instance is upgradeable: False [INFO]: instance upgrade info: Current and latest available image are the same - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [OK] [REASON] OK! Workbench Instance notebooks2instance-provisioning-stuck is using the latest environment version M0 [COMPOSITE STEP]: Evaluating Workbench Instance Compute Engine VM memory, CPU, and disk performance. [INFO]: Runbook will use ops agent metrics for VM performance investigation [AUTOMATED STEP]: Verify VM memory utilization is within optimal levels. - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck [FAIL] [REASON] Memory utilization on this VM has reached levels that may compromise its VM application performance. [REMEDIATION] Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: [AUTOMATED STEP]: Verify memory related errors in VM serial logs. - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck [UNCERTAIN] [REASON] Unable to investigate the high memory utilization error logs, likely due to the absence of logs. However, this does not eliminate the possibility of high memory usage. Manual verification of memory utilization on the Guest OS is recommended as a potential cause. [REMEDIATION] 1. Manually investigate memory usage by accessing the Guest OS: - Identify processes with consistently high memory consumption using `top` (press "M") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`. - Focus on processes with recent spikes or consistently high memory usage. - If SSH access is unavailable, troubleshoot via the serial console: 2. Review recent application or configuration changes: - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage. 3. Resolve identified bottlenecks: - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient. - Evaluate scaling up resources if high memory usage results from legitimate application demands. 4. Increase instance memory if necessary: - Stop the VM and change its machine type: - Consult the machine type documentation to select an appropriate configuration: **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items: - Support and maintenance policy: - Out-of-scope items: [AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels. - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck [FAIL] [REASON] Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. [REMEDIATION] To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: [AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels. - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck [FAIL] [REASON] CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. [REMEDIATION] Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: [GATEWAY]: Decision point to investigate Serial Port Logs [COMPOSITE STEP]: Check if user is able to SSH to the Workbench Instance Compute Engine VM [INFO]: Workbench Instance Compute Engine VM is Running! - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck [OK] [REASON] OK! User can SHH and open a terminal in the Workbench Instance notebooks2instance-provisioning-stuck's Compute Engine VM. [AUTOMATED STEP]: Check if Jupyter space in "home/jupyter" is below 85% [INFO]: In the Workbench Instance Compute Engine VM terminal run "df". Verify "home/jupyter" used space is below 85% - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck [OK] [REASON] OK! Workbench Instance notebooks2instance-provisioning-stuck's "/home/jupyter" space usage is below 85% [AUTOMATED STEP]: Verify Workbench Instance has external IP disabled - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [UNCERTAIN] [REASON] Workbench Instance notebooks2instance-provisioning-stuck has external IP disabled. - network: https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/wbi-test-default - subnetwork: https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/wbi-test-default This may cause networking issues if configuration was not done correctly. [REMEDIATION] Follow the public documentation to configure Private Networking for a Workbench Instance [1] [2] [3] [4] [1] [2] [3] [4] [END]: Check if the instance is now in ACTIVE state [INFO]: instance state: PROVISIONING - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [FAIL] [REASON] Workbench Instance notebooks2instance-provisioning-stuck still in PROVISIONING, STARTING or INITIALIZING state. [REMEDIATION] Restart the instance. If the issue persists: 1. Recover data by diagnosing the instance with the --enable-copy-home-files [1] 2. Inspect the diagnostics output logs to find issues 3. Create a new Instance and migrate your data [2] [1] [2] [INFO]: Before reaching out to Google Cloud Support: 1. Thoroughly investigate the issue with the most appropriate team within your organization. Many issues can be resolved internally and fall within the scope of your operational responsibilities:https://cloud.google.com/architecture/framework/security/shared-responsibility-shared-fate 2. If your internal investigation suggests that the issue is related to the Google Cloud Platform and requires intervention by Google engineers, please contact Google Cloud Support for further assistance. 3. View our Google Cloud Service Health Dashboard to know what issues are already knowand currently being resolved: https://cloud.google.com/support/docs/customer-care-procedures#view_known_issues 4. If you still need further assistance contact customer care: https://cloud.google.com/support/docs/customer-care-procedures#contact_customer_care Recommended Action: When submitting a support ticket, please include the generated report to facilitate a quicker resolution by the Google Cloud support team.For more information on how to get the best out of our support services visit: https://cloud.google.com/support/docs/customer-care-procedures ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_compute.jinja ================================================ {% block ssh_success_reason %} OK! User can SHH and open a terminal in the Workbench Instance {instance_name}'s Compute Engine VM. {% endblock ssh_success_reason %} {% block ssh_uncertain_reason %} Workbench Instance {instance_name}'s Compute Engine VM is not running. Status: {status} You cannot ssh to use terminal access and check for certain issues in the VM. For example, space in "/home/jupyter" directory should remain below 85% {% endblock ssh_uncertain_reason %} {% block ssh_uncertain_remediation %} Try restarting your instance or start your instance's VM via Compute Engine {% endblock ssh_uncertain_remediation %} {% block ssh_uncertain_reason_a1 %} Without terminal access to the Workbench Instance {instance_name}'s Compute Engine VM you cannot check for certain issues. For example, space in "/home/jupyter" should remain below 85% {% endblock ssh_uncertain_reason_a1 %} {% block ssh_uncertain_remediation_a1 %} Configure your instance to allow SSH access or contact the Compute Engine administrator. {% endblock ssh_uncertain_remediation_a1 %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_container.jinja ================================================ {% block custom_success_reason %} OK! Workbench Instance {instance_name} is not using a custom container. {% endblock custom_success_reason %} {% block custom_uncertain_reason %} WARNING: This runbook may not be applicable for Workbench Instances created with a custom container. {% endblock custom_uncertain_reason %} {% block custom_uncertain_remediation %} Follow the documentation to create a Workbench Instance with a custom container [1] [1] {% endblock custom_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_environment_version.jinja ================================================ {% block upgradable_step_name %} Verify Workbench Instance is using the latest environment version {% endblock upgradable_step_name %} {% block upgradable_success_reason %} OK! Workbench Instance {instance_name} is using the latest environment version M{environment_version} {% endblock upgradable_success_reason %} {% block upgradable_uncertain_reason %} Workbench Instance {instance_name} should be in STOPPED state to check its upgradability. Upgradability info: {upgrade_info} {% endblock upgradable_uncertain_reason %} {% block upgradable_uncertain_remediation %} Stop the instance. {% endblock upgradable_uncertain_remediation %} {% block upgradable_uncertain_reason_a1 %} Workbench Instance {instance_name} has not been assigned an environment version yet. Upgradability info: {upgrade_info} {% endblock upgradable_uncertain_reason_a1 %} {% block upgradable_uncertain_remediation_a1 %} Make sure instance was created with the latest environment version. {% endblock upgradable_uncertain_remediation_a1 %} {% block upgradable_uncertain_reason_a2 %} Workbench Instance {instance_name} upgradability info: {upgrade_info} {% endblock upgradable_uncertain_reason_a2 %} {% block upgradable_uncertain_remediation_a2 %} Make sure instance has the latest environment version. {% endblock upgradable_uncertain_remediation_a2 %} {% block upgradable_failure_reason %} Workbench Instance {instance_name} is using a previous environment version M{environment_version} {% endblock upgradable_failure_reason %} {% block upgradable_failure_remediation %} Upgrade the instance to use the latest version {upgrade_version} which has the latest updates and fixes [1] Upgrade version image: {upgrade_image} Remember to backup your data before an upgrade. [1] {% endblock upgradable_failure_remediation %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_images.jinja ================================================ {% block official_step_name %} Verify Workbench Instance Compute Engine VM's boot disk image is part of the official family of images {% endblock official_step_name %} {% block official_success_reason %} OK! Workbench Instance {instance_name} is using an official '{image_family}' image: {image} {% endblock official_success_reason %} {% block official_uncertain_reason %} image: {image} '{images_family}' images might work with Workbench Instances, but are unsupported [1] [1] {% endblock official_uncertain_reason %} {% block official_uncertain_remediation %} Officially supported images are found in the Google Cloud Console: Vertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown. {% endblock official_uncertain_remediation %} {% block official_failure_reason %} image: {image} images without '{images_family}' text in the image name are not supported but might work with Workbench Instances [1] [1] {% endblock official_failure_reason %} {% block official_failure_remediation %} Users are responsible for customizing unsupported images or custom containers Create a Workbench Instance with the official '{images_family}' family of images. Officially supported images are found in the Google Cloud Console: Vertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown. You may also follow the documentation [1] to use Custom Containers [1] {% endblock official_failure_remediation %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_ip.jinja ================================================ {% block disabled_step_name %} Verify Workbench Instance has external IP disabled {% endblock disabled_step_name %} {% block disabled_success_reason %} OK! Workbench Instance {instance_name} has an external IP {% endblock disabled_success_reason %} {% block disabled_uncertain_reason %} Workbench Instance {instance_name} has external IP disabled. - network: {network} - subnetwork: {subnetwork} This may cause networking issues if configuration was not done correctly. {% endblock disabled_uncertain_reason %} {% block disabled_uncertain_remediation %} Follow the public documentation to configure Private Networking for a Workbench Instance [1] [2] [3] [4] [1] [2] [3] [4] {% endblock disabled_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_jupyter_port.jinja ================================================ {% block running_step_name %} Verify Workbench Instance Jupyter is running on port 127.0.0.1:8080 {% endblock running_step_name %} {% block running_success_reason %} OK! Workbench Instance {instance_name} syslogs indicate Jupyter is running on port 127.0.0.1:8080 {% endblock running_success_reason %} {% block running_failure_reason %} Workbench Instance {instance_name} syslogs indicate Jupyter is NOT running on port 127.0.0.1:8080 {% endblock running_failure_reason %} {% block running_failure_reason_a1 %} Workbench Instance {instance_name} syslogs indicate Jupyter is running on a port different to 127.0.0.1:8080 {% endblock running_failure_reason_a1 %} {% block running_failure_remediation %} If the instance is stopped, start it and rerun this check. You may also need to extend the logging query start and end times. Only port 8080 is supported. Installed extensions, packages or custom scripts may cause the port to change. 1. Try following documentation [1] [2] [3] 2. If it doesn't work, recover data by diagnosing the instance with the --enable-copy-home-files [4] 3. Create a new Instance and migrate your data [5] [1] [2] [3] [4] [5] {% endblock running_failure_remediation %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_jupyter_space.jinja ================================================ {% block available_success_reason %} OK! Workbench Instance {instance_name}'s "/home/jupyter" space usage is below 85% {% endblock available_success_reason %} {% block available_failure_reason %} Workbench Instance {instance_name}'s space in "/home/jupyter" should remain below 85% This will allow the instance to start correctly. {% endblock available_failure_reason %} {% block available_failure_remediation %} Delete large files in "/home/jupyter" and restart the instance. You may also run the following command to list large cache files and then manually delete them. - "du -h /home/jupyter/.cache | sort -h" {% endblock available_failure_remediation %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_scripts.jinja ================================================ {% block custom_step_name %} Verify Workbench Instance has custom post-startup or startup scripts {% endblock custom_step_name %} {% block custom_success_reason %} OK! Workbench Instance {instance_name} is not using custom post-startup or startup scripts. {% endblock custom_success_reason %} {% block custom_uncertain_reason %} Workbench Instance {instance_name} has custom post-startup or startup scripts: - post-startup-script: {post_startup_script} - startup-script: {startup_script} - startup-script-url: {startup_script_url} {% endblock custom_uncertain_reason %} {% block custom_uncertain_remediation %} Scripts must ensure: - Jupyter runs on port 127.0.0.1:8080 - If packages are installed they should not add breaking changes to the Jupyter configuration {% endblock custom_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_state.jinja ================================================ {% block provisioning_stuck_success_reason %} OK! Workbench Instance {instance_name} is already in ACTIVE state. WARNING: This runbook is intended for instances that are stuck in PROVISIONING state. {% endblock provisioning_stuck_success_reason %} {% block provisioning_stuck_success_reason_a1 %} OK! Workbench Instance {instance_name} is in PROVISIONING, STARTING or INITIALIZING state. {% endblock provisioning_stuck_success_reason_a1 %} {% block provisioning_stuck_success_reason_a2 %} OK! Workbench Instance {instance_name} is already in ACTIVE state. The issue is solved!!! {% endblock provisioning_stuck_success_reason_a2 %} {% block provisioning_stuck_failure_reason %} Workbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state. {% endblock provisioning_stuck_failure_reason %} {% block provisioning_stuck_failure_remediation %} Try to start the instance. {% endblock provisioning_stuck_failure_remediation %} {% block provisioning_stuck_uncertain_reason %} Workbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state. {% endblock provisioning_stuck_uncertain_reason %} {% block provisioning_stuck_uncertain_remediation %} Try to start the instance. {% endblock provisioning_stuck_uncertain_remediation %} {% block provisioning_stuck_failure_reason_a1 %} Workbench Instance {instance_name} still in PROVISIONING, STARTING or INITIALIZING state. {% endblock provisioning_stuck_failure_reason_a1 %} {% block provisioning_stuck_failure_remediation_a1 %} Restart the instance. If the issue persists: 1. Recover data by diagnosing the instance with the --enable-copy-home-files [1] 2. Inspect the diagnostics output logs to find issues 3. Create a new Instance and migrate your data [2] [1] [2] {% endblock provisioning_stuck_failure_remediation_a1 %} ================================================ FILE: gcpdiag/runbook/vertex/templates/workbench_system_logs.jinja ================================================ {% block enabled_success_reason %} OK! Workbench Instance {instance_name} Serial Port Logging is enabled and instance is initializing. Checking Workbench Instance syslogs for issues {% endblock enabled_success_reason %} {% block enabled_uncertain_reason %} Workbench Instance {instance_name} Serial Port Logging is disabled by org constraint '{constraint}' {% endblock enabled_uncertain_reason %} {% block enabled_uncertain_remediation %} Remove org constraint '{constraint}' to analyze Workbench Instance system serial port logs. {% endblock enabled_uncertain_remediation %} {% block enabled_uncertain_reason_a1 %} Workbench Instance {instance_name} Serial Port Logging is disabled by metadata '{metadata}': '{metadata_value}' {% endblock enabled_uncertain_reason_a1 %} {% block enabled_uncertain_remediation_a1 %} Set '{metadata}' to 'True' to analyze Workbench Instance system serial port logs. {% endblock enabled_uncertain_remediation_a1 %} {% block enabled_uncertain_reason_a2 %} Workbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state. Current state: {state} {% endblock enabled_uncertain_reason_a2 %} {% block enabled_uncertain_remediation_a2 %} Try to start the instance. {% endblock enabled_uncertain_remediation_a2 %} ================================================ FILE: gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py ================================================ # # Copyright 2024 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. """Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State""" from datetime import datetime from gcpdiag import runbook from gcpdiag.queries import crm, gce, notebooks, orgpolicy from gcpdiag.runbook import op from gcpdiag.runbook.vertex import flags from gcpdiag.runbook.vertex import generalized_steps as vertex_gs PROVISIONING_STATES = [ notebooks.StateEnum.PROVISIONING, notebooks.StateEnum.STARTING, notebooks.StateEnum.INITIALIZING ] class WorkbenchInstanceStuckInProvisioning(runbook.DiagnosticTree): """Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State This runbook investigates root causes for the Workbench Instance to be stuck in provisioning state Areas Examined: - Workbench Instance State: Checks the instance's current state ensuring that it is stuck in provisioning status and not stopped or active. - Workbench Instance Compute Engine VM Boot Disk Image: Checks if the instance has been created with a custom container, the official 'workbench-instances' images, deep learning VMs images, or unsupported images that might cause the instance to be stuck in provisioning state. - Workbench Instance Custom Scripts: Checks if the instance is not using custom scripts that may affect the default configuration of the instance by changing the Jupyter port or breaking dependencies that might cause the instance to be stuck in provisioning state. - Workbench Instance Environment Version: Checks if the instance is using the latest environment version by checking its upgradability. Old versions sometimes are the root cause for the instance to be stuck in provisioning state. - Workbench Instance Compute Engine VM Performance: Checks the VM's current performance, ensuring that it is not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt normal operations. - Workbench Instance Compute Engine Serial Port Logging: Checks if the instance has serial port logs which can be analyzed to ensure Jupyter is running on port 127.0.0.1:8080 which is mandatory. - Workbench Instance Compute Engine SSH and Terminal access: Checks if the instance's compute engine vm is running so the user can ssh and open a terminal to check for space usage in 'home/jupyter'. If no space is left, that may cause the instance to be stuck in provisioning state. - Workbench Instance External IP Disabled: Checks if the external IP disabled. Wrong networking configurations may cause the instance to be stuck in provisioning state. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.INSTANCE_NAME: { 'type': str, 'help': 'Name of the Workbench Instance', 'default': '', 'required': True }, flags.ZONE: { 'type': str, 'help': 'Zone of the Workbench Instance. e.g. us-central1-a', 'default': 'us-central1-a', 'required': True }, flags.START_TIME: { 'type': datetime, 'help': 'Start time of the issue', }, flags.END_TIME: { 'type': datetime, 'help': 'End time of the issue', } } def build_tree(self): """Describes step relationships""" start = WorkbenchInstanceStuckInProvisioningStart() check_custom_container = CheckWorkbenchInstanceUsingCustomContainer() check_workbench_instance_image = vertex_gs.CheckWorkbenchInstanceUsingOfficialImage( ) check_workbench_instance_custom_scripts = vertex_gs.CheckWorkbenchInstanceCustomScripts( ) check_workbench_instance_version = vertex_gs.CheckWorkbenchInstanceIsUsingLatestEnvVersion( ) check_workbench_instance_performance = vertex_gs.CheckWorkbenchInstancePerformance( ) check_workbench_instance_logging = DecisionCheckWorkbenchInstanceSystemLogging( ) check_workbench_instance_compute_vm_ssh = CheckWorkbenchInstanceComputeEngineSSH( ) check_workbench_instance_ip_disabled = vertex_gs.CheckWorkbenchInstanceExternalIpDisabled( ) self.add_start(start) self.add_step(parent=start, child=check_custom_container) self.add_step(parent=check_custom_container, child=check_workbench_instance_image) self.add_step(parent=check_workbench_instance_image, child=check_workbench_instance_custom_scripts) self.add_step(parent=check_workbench_instance_custom_scripts, child=check_workbench_instance_version) self.add_step(parent=check_workbench_instance_version, child=check_workbench_instance_performance) self.add_step(parent=check_workbench_instance_version, child=check_workbench_instance_logging) self.add_step(parent=check_workbench_instance_version, child=check_workbench_instance_compute_vm_ssh) self.add_step(parent=check_workbench_instance_version, child=check_workbench_instance_ip_disabled) self.add_end(WorkbenchInstanceStuckInProvisioningEnd()) class WorkbenchInstanceStuckInProvisioningStart(runbook.StartStep): """Checking if the Workbench Instance is in PROVISIONING state and gathering its details. If the instance is stopped, user must try to start it to start the checks """ template = 'workbench_state::provisioning_stuck' def execute(self): """Sets values to be used and get resources from Notebooks and GCE APIs""" # === Get parameters and project information === project: str = crm.get_project(op.get(flags.PROJECT_ID)) if project: op.info(f'project id: {project.id}, project number: {project.number}') product: str = self.__module__.split('.')[-2] op.info(f'product: {product} workbench instances') instance_name: str = op.get(flags.INSTANCE_NAME) op.info(f'instance name parameter: {instance_name}') zone: str = op.get(flags.ZONE) op.info(f'instance zone parameter: {zone}') op.info('--- Workbench Instance ---') workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance( project_id=project.id, zone=zone, instance_name=instance_name) gce_instance: gce.Instance = gce.get_instance(project_id=project.id, zone=zone, instance_name=instance_name) self.print_workbench_instance_data(workbench_instance=workbench_instance) op.info(f'instance compute engine vm name: {gce_instance.name}') op.info(f'instance compute engine vm is running: {gce_instance.is_running}') workbench_instance_upgradability: dict = notebooks.workbench_instance_check_upgradability( project_id=project.id, workbench_instance_name=workbench_instance.name) workbench_instance_upgradeable: bool = workbench_instance_upgradability.get( 'upgradeable', False) workbench_instance_upgrade_version: str = workbench_instance_upgradability.get( 'upgradeVersion', '').upper() workbench_instance_upgrade_info: str = workbench_instance_upgradability.get( 'upgradeInfo', '') workbench_instance_upgrade_image: str = workbench_instance_upgradability.get( 'upgradeImage', '') op.info(f'instance is upgradeable: {workbench_instance_upgradeable}') op.info(f'instance upgrade info: {workbench_instance_upgrade_info}') if workbench_instance_upgradeable: op.info(f'instance upgrade version: {workbench_instance_upgrade_version}') op.info(f'instance upgrade image: {workbench_instance_upgrade_image}') if workbench_instance.report_event_health: op.info('--- Workbench Instance Health State ---') self.print_workbench_instance_health_data( workbench_instance=workbench_instance) op.info(f'instance state: {workbench_instance.state}') if workbench_instance.state == notebooks.StateEnum.ACTIVE: op.add_ok(resource=workbench_instance, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=instance_name)) elif workbench_instance.state not in PROVISIONING_STATES: op.add_failed(resource=workbench_instance, reason=op.prep_msg(op.FAILURE_REASON, instance_name=instance_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(resource=workbench_instance, reason=op.prep_msg(op.SUCCESS_REASON_ALT1, instance_name=instance_name)) def print_workbench_instance_data( self, workbench_instance: notebooks.WorkbenchInstance): op.info(f'instance name: {workbench_instance.name}') op.info(f'instance state: {workbench_instance.state}') op.info( f'instance environment version: {workbench_instance.environment_version}' ) op.info( f'instance compute account: {workbench_instance.gce_service_account_email}' ) op.info(f'instance network: {workbench_instance.network}') op.info(f'instance subnetwork: {workbench_instance.subnet}') op.info( f'instance public ip disabled: {workbench_instance.disable_public_ip}') op.info( f'instance metadata disable-mixer: {workbench_instance.disable_mixer}') op.info('instance metadata serial-port-logging-enable:' f'{workbench_instance.serial_port_logging_enabled}') op.info( f'instance metadata post-startup-script: {workbench_instance.post_startup_script}' ) op.info( f'instance metadata startup-script: {workbench_instance.startup_script}' ) op.info( f'instance metadata startup-script-url: {workbench_instance.startup_script_url}' ) op.info( f'instance metadata report-event-health: {workbench_instance.report_event_health}' ) def print_workbench_instance_health_data( self, workbench_instance: notebooks.WorkbenchInstance): op.info(f'instance health - state: {workbench_instance.health_state}') op.info('instance health - jupyterlab status healthy:' f'{workbench_instance.is_jupyterlab_status_healthy}') op.info('instance health - jupyterlab api status healthy:' f'{workbench_instance.is_jupyterlab_api_status_healthy}') op.info('instance health - notebooks api dns healthy:' f'{workbench_instance.is_notebooks_api_dns_healthy}') op.info('instance health - proxy registration dns healthy:' f'{workbench_instance.is_proxy_registration_dns_healthy}') op.info('instance health - system healthy:' f'{workbench_instance.is_system_healthy}') op.info('instance health - docker status healthy:' f'{workbench_instance.is_docker_status_healthy}') class CheckWorkbenchInstanceUsingCustomContainer(runbook.Step): """Check if the Workbench Instance is using a custom container Users have the option to use custom containers to create Workbench Instances If this is the case, this runbook doesn't apply """ template = 'workbench_container::custom' def execute(self): """Checking if the Workbench Instance is using a custom container.""" project_id: str = op.get(flags.PROJECT_ID) instance_name: str = op.get(flags.INSTANCE_NAME) zone: str = op.get(flags.ZONE) workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance( project_id=project_id, zone=zone, instance_name=instance_name) response = op.prompt( kind=op.CONFIRMATION, message='Is your Workbench Instance using a custom container?') if response == op.YES: op.add_uncertain(resource=workbench_instance, reason=op.prep_msg(op.UNCERTAIN_REASON), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.add_ok(resource=workbench_instance, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=instance_name)) class DecisionCheckWorkbenchInstanceSystemLogging(runbook.Gateway): """Decision point to investigate Serial Port Logs Decides whether its possible to check syslogs for the Workbench Instance """ template = 'workbench_system_logs::enabled' def execute(self): """Decision point to investigate Serial Port Logs""" project_id = op.get(flags.PROJECT_ID) instance_name: str = op.get(flags.INSTANCE_NAME) zone: str = op.get(flags.ZONE) workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance( project_id=project_id, zone=zone, instance_name=instance_name) constraint_name: str = 'constraints/compute.disableSerialPortLogging' constraint = orgpolicy.get_effective_org_policy(project_id, constraint_name) metadata_name = 'serial-port-logging-enabled' if constraint.is_enforced(): op.add_uncertain(resource=workbench_instance, reason=op.prep_msg(op.UNCERTAIN_REASON, instance_name=instance_name, constraint=constraint_name), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION, constraint=constraint_name)) elif not workbench_instance.serial_port_logging_enabled: op.add_uncertain( resource=workbench_instance, reason=op.prep_msg( op.UNCERTAIN_REASON_ALT1, instance_name=instance_name, metadata=metadata_name, metadata_value=workbench_instance.serial_port_logging_enabled), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT1, metadata=metadata_name)) elif (workbench_instance.state not in PROVISIONING_STATES and workbench_instance != notebooks.StateEnum.ACTIVE): op.add_uncertain(resource=workbench_instance, reason=op.prep_msg(op.UNCERTAIN_REASON_ALT2, instance_name=instance_name, state=workbench_instance.state), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT2)) else: self.add_child( vertex_gs.CheckWorkbenchInstanceSyslogsJupyterRunningOnPort8080()) op.add_ok(resource=workbench_instance, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=instance_name)) class CheckWorkbenchInstanceComputeEngineSSH(runbook.CompositeStep): """Check if user is able to SSH to the Workbench Instance Compute Engine VM Compute Engine might be running so the user can ssh to inspect the VM """ template = 'workbench_compute::ssh' def execute(self): """Check if user is able to SSH to the Workbench Instance Compute Engine VM""" #TO-DO change this to use the GCE SSH runbook or steps project_id = op.get(flags.PROJECT_ID) instance_name: str = op.get(flags.INSTANCE_NAME) zone: str = op.get(flags.ZONE) gce_instance: gce.Instance = gce.get_instance(project_id=project_id, zone=zone, instance_name=instance_name) if not gce_instance.is_running: op.add_uncertain(resource=gce_instance, reason=op.prep_msg(op.UNCERTAIN_REASON, instance_name=instance_name, status=gce_instance.status), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.info('Workbench Instance Compute Engine VM is Running!') response = op.prompt( kind=op.CONFIRMATION, message= ('Try to SSH to the instance via Compute Engine and open a terminal. ' 'Are you able to SSH and open a terminal?')) if response == op.NO: op.add_uncertain(resource=gce_instance, reason=op.prep_msg(op.UNCERTAIN_REASON_ALT1, instance_name=instance_name), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT1)) else: self.add_child(CheckWorkbenchInstanceJupyterSpace()) op.add_ok(resource=gce_instance, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=instance_name)) class CheckWorkbenchInstanceJupyterSpace(runbook.Step): """Check if Jupyter space in "home/jupyter" is below 85% If Jupyter has ran out of space, the Workbench Instance might not be able to start """ template = 'workbench_jupyter_space::available' def execute(self): """Check if Jupyter space in "home/jupyter" is below 85%""" project_id = op.get(flags.PROJECT_ID) instance_name: str = op.get(flags.INSTANCE_NAME) zone: str = op.get(flags.ZONE) gce_instance: gce.Instance = gce.get_instance(project_id=project_id, zone=zone, instance_name=instance_name) op.info('In the Workbench Instance Compute Engine VM terminal run "df". ' 'Verify "home/jupyter" used space is below 85%') response = op.prompt(kind=op.CONFIRMATION, message='Is "home/jupyter" space usage more than 85%?') if response == op.YES: op.add_failed(resource=gce_instance, reason=op.prep_msg(op.FAILURE_REASON, instance_name=instance_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) else: op.add_ok(resource=gce_instance, reason=op.prep_msg(op.SUCCESS_REASON, instance_name=instance_name)) class WorkbenchInstanceStuckInProvisioningEnd(runbook.EndStep): """Checking if the Workbench Instance is now in ACTIVE state. If Workbench Instance is still stuck in PROVISIONING state, then Diagnostic Logs should be captured and analyzed by the user or support """ template = 'workbench_state::provisioning_stuck' def execute(self): """Check if the instance is now in ACTIVE state""" project_id: str = op.get(flags.PROJECT_ID) instance_name: str = op.get(flags.INSTANCE_NAME) zone: str = op.get(flags.ZONE) workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance( project_id=project_id, zone=zone, instance_name=instance_name) op.info(f'instance state: {workbench_instance.state}') if workbench_instance.state == notebooks.StateEnum.ACTIVE: op.add_ok(resource=workbench_instance, reason=op.prep_msg(op.SUCCESS_REASON_ALT2, instance_name=instance_name)) elif workbench_instance.state not in PROVISIONING_STATES: op.add_uncertain(resource=workbench_instance, reason=op.prep_msg(op.UNCERTAIN_REASON, instance_name=instance_name), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.add_failed(resource=workbench_instance, reason=op.prep_msg(op.FAILURE_REASON_ALT1, instance_name=instance_name), remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1)) op.info(message=op.END_MESSAGE) ================================================ FILE: gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning_test.py ================================================ # Copyright 2024 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. """Test class for vertex/WorkbenchInstanceStuckInProvisioning""" from gcpdiag import config from gcpdiag.runbook import snapshot_test_base, vertex class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = vertex runbook_name = 'vertex/workbench-instance-stuck-in-provisioning' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-notebooks2-aaaa', 'instance_name': 'notebooks2instance-provisioning-stuck', 'zone': 'us-west1-a' }] ================================================ FILE: gcpdiag/runbook/vpc/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/vpc/constants.py ================================================ # Copyright 2024 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. """TODO: String doc""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.constants import * from gcpdiag.runbook.iam.constants import * ================================================ FILE: gcpdiag/runbook/vpc/flags.py ================================================ # Copyright 2024 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. """Flags used in the VPC runbook""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.flags import * from gcpdiag.runbook.gcp.flags import * PROJECT_ID = 'project_id' PROJECT_NUMBER = 'project_number' FOLDER_ID = 'folder_id' ORG_ID = 'org_id' NAME = 'name' ID = 'id' REGION = 'region' ZONE = 'zone' # unique flags belong to this runbook SRC_IP = 'src_ip' DEST_IP = 'dest_ip' SRC_NIC = 'src_nic' DEST_PORT = 'dest_port' PORT = 'port' PROTOCOL_TYPE = 'protocol_type' ================================================ FILE: gcpdiag/runbook/vpc/generalized_steps.py ================================================ # Copyright 2024 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. """Contains Reusable Steps for VPC related Diagnostic Trees""" import json from gcpdiag import runbook from gcpdiag.queries import gce, networkmanagement from gcpdiag.runbook import op from gcpdiag.runbook.vpc import flags, util class VpcFirewallCheck(runbook.Step): """Checks if ingress or egress traffic is allowed to a GCE Instance from a specified source IP. Evaluates VPC firewall rules to verify if a GCE Instance permits ingress or egress traffic from a designated source IP through a specified port and protocol. """ traffic = None def execute(self): """Evaluating VPC network firewall rules.""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) result = None if self.traffic == 'ingress': result = vm.network.firewall.check_connectivity_ingress( src_ip=op.get(flags.SRC_IP), ip_protocol=op.get(flags.PROTOCOL_TYPE), port=op.get(flags.PORT), target_service_account=vm.service_account, target_tags=vm.tags) if self.traffic == 'egress': result = vm.network.firewall.check_connectivity_egress( src_ip=op.get(flags.DEST_IP), ip_protocol=op.get(flags.PROTOCOL_TYPE), port=op.get(flags.DEST_PORT), target_service_account=vm.service_account, target_tags=vm.tags) if result.action == 'deny': op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, address=op.get(flags.DEST_IP), protocol=op.get(flags.PROTOCOL_TYPE), port=op.get(flags.PORT), name=vm.name, result=result.matched_by_str), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) elif result.action == 'allow': op.add_ok( vm, op.prep_msg(op.SUCCESS_REASON, address=op.get(flags.SRC_IP), protocol=op.get(flags.PROTOCOL_TYPE), port=op.get(flags.PORT), name=vm.name, result=result.matched_by_str)) class VpcRouteCheck(runbook.Step): """Checks VPC route for routing rule exists to the destination IP address. Evaluates the VPC routing rules for the most specific route that - matches the destination IP address on the VPC route selection order. """ def execute(self): """Evaluating the VPC routing rules.""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) # get project, network info from nic nic_info = util.get_nic_info(vm.get_network_interfaces, op.get(flags.SRC_NIC)) project, netwrk, dest_ip = nic_info['project'], nic_info['network'], op.get( flags.DEST_IP) # get the selected route for the destination selected_route = util.get_selected_route_for_dest_ip( project, netwrk, dest_ip) if selected_route: # check that the selected route has a next hop destination set to # default Internet Gateway if interface has an external IP next_hop = selected_route.get_next_hop() if next_hop['type'] == 'nextHopGateway': op.add_ok( vm, op.prep_msg(op.SUCCESS_REASON, route_name=selected_route.name)) else: next_hop_link = next_hop['link'] op.add_uncertain(vm, reason=op.prep_msg(op.UNCERTAIN_REASON, address=op.get(flags.DEST_IP), next_hop_link=next_hop_link, route_name=selected_route.name), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.add_failed(vm, reason=op.prep_msg(op.FAILURE_REASON, address=op.get(flags.DEST_IP)), remediation=op.prep_msg(op.FAILURE_REMEDIATION)) class VmExternalIpConnectivityTest(runbook.Step): """Runs a network connectivity test from VM to a destination endpoint. Evaluates the connectivity test for any issues and reports to the user.""" def execute(self): """Running a connectivity test to the external ip address.""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) dest_ip = op.get(flags.DEST_IP) dest_ip = dest_ip.exploded result = networkmanagement.run_connectivity_test( op.get(flags.PROJECT_ID), op.get(flags.SRC_IP), dest_ip, op.get(flags.DEST_PORT), op.get(flags.PROTOCOL_TYPE)) # if the VM has only a private IP address, check that there is a NATGW in # the traffic path and put the NATGW details if result and not util.is_external_ip_on_nic(vm.get_network_interfaces, op.get(flags.SRC_NIC)): steps = result['reachabilityDetails']['traces'][0]['steps'] if 'CLOUD_NAT' in str(steps): natgw_step = [ step for step in steps if step.get('nat', {}).get('type', {}) == 'CLOUD_NAT' ] op.put('nat_gateway_name', natgw_step[0]['nat']['natGatewayName']) op.put('nat_gateway_uri', natgw_step[0]['nat']['routerUri']) else: # the VM has only a private IP address but there is no NATGW in the traffic path # Notify the cx if a custom NAT GW is being used. op.add_uncertain(vm, reason=""" A NAT gateway is not found in the external traffic path for the VM: {}, connecting to the external IP address {}. """.format(op.get(flags.INSTANCE_NAME), dest_ip), remediation=""" If a VM instance or custom NAT is being used as a NAT Gateway, check that it is configured and functioning correctly. Otherwise, ensure that a public Cloud NAT is configured for the VPC Network [1]: Check that the destination IP is a Google Service IP address and Private Google Access is enabled 1. https://cloud.google.com/nat/docs/set-up-manage-network-address-translation#creating_nat """) # If there is no result from the connectivity test, prompt to rerun/retest if not result: response = op.prompt( kind=op.HUMAN_TASK, message='The connectivity test did not run successfully: No result ' 'returned. Do you want to rerun the connectivity test?', choice_msg='Enter an option: ') if response == op.STOP: op.add_skipped(vm, reason='Skipping the connectivity test.') # Report the connectivity test result result_status = result.get('reachabilityDetails', {}).get('result') # Clean up the connectivity test # Log the connectivity test steps description = 'description' state = 'state' for step in result['reachabilityDetails']['traces'][0]['steps']: op.info(f'{step[state]} -> {step[description]}') if result_status == 'REACHABLE': op.add_ok( vm, op.prep_msg(op.SUCCESS_REASON, address=op.get(flags.DEST_IP).exploded, result_status=result_status, trace=str(json.dumps(result['reachabilityDetails'])))) elif result_status in ('AMBIGUOUS', 'UNDETERMINED'): op.add_uncertain( vm, op.prep_msg(op.UNCERTAIN_REASON, address=op.get(flags.DEST_IP).exploded, result_status=result_status, trace=str(json.dumps(result['reachabilityDetails']))), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) else: op.add_failed(vm, op.prep_msg(op.FAILURE_REASON, address=op.get(flags.DEST_IP).exploded, result_status=result_status, trace=str( json.dumps(result['reachabilityDetails']))), remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION)) ================================================ FILE: gcpdiag/runbook/vpc/generalized_steps_test.py ================================================ # Copyright 2024 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. """TODO: String doc""" ================================================ FILE: gcpdiag/runbook/vpc/snapshots/vm_external_ip_connectivity.txt ================================================ dest_ip=151.101.3.5,dest_port=443,instance_name=public-linux-valid,project_id=gcpdiag- vpc2-runbook,src_nic=nic0,zone=us-central1-a vpc/vm-external-ip-connectivity: Troubleshooting for common issues which affect VM connectivity to external IP addresses. This runbook investigates components required for VMs to establish connectivity to external IP addresses Areas Examined: - VM Instance: - Verify that the VM exists and is running - VM Configuration: - Checks the source nic configuration on the VM if it has an External IP address or not. - VPC routes checks: - Checks the VPC routing rules are configured to allow external connectivity - VPC firewall and firewall policy checks: - Checks the VPC firewall and firewall policies allow external connectivity. - GCE Network Connectivity Tests: - Runs a VPC network connectivity test and reports the result. - NATGW Checks: - For source nics without an External IP address, verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW. [START]: Starting VM external connectivity diagnostics [AUTOMATED STEP]: Verify networkmanagement.googleapis.com API is ENABLED in project gcpdiag-vpc2-runbook. - gcpdiag-vpc2-runbook [OK] [REASON] The `networkmanagement.googleapis.com` service is currently in the expected state: `ENABLED`. [GATEWAY]: Checking if the source NIC has an associated external IP address. [INFO]: The source NIC nic0 on the VM has an External IP address,checking direct connectivity to external IP 151.101.3.5 [COMPOSITE STEP]: Checking for connectivity from NIC with external IP address. [AUTOMATED STEP]: Verify Firewall exists - gcpdiag-vpc2-runbook/public-linux-valid [OK] [REASON] No firewall rule blocking traffic [AUTOMATED STEP]: Evaluating the VPC routing rules. - gcpdiag-vpc2-runbook/public-linux-valid [OK] [REASON] Matching VPC route with nexthop gateway found [AUTOMATED STEP]: Running a connectivity test to the external ip address. [INFO]: START_FROM_INSTANCE -> Initial state: packet originating from a Compute Engine instance. [INFO]: APPLY_EGRESS_FIREWALL_RULE -> Config checking state: verify EGRESS firewall rule. [INFO]: APPLY_ROUTE -> Config checking state: verify route. [INFO]: NAT -> Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32]. [INFO]: DELIVER -> Final state: packet delivered to Internet. - gcpdiag-vpc2-runbook/public-linux-valid [OK] [REASON] The remote endpoint 151.101.3.5 is REACHABLE. CONNECTIVITY TEST RESULT: {"result": "REACHABLE", "verifyTime": "2024-06-04T00:31:09.450544252Z", "traces": [{"endpointInfo": {"sourceIp": "10.10.0.3", "destinationIp": "151.101.3.5", "protocol": "TCP", "sourcePort": 63951, "destinationPort": 443, "sourceNetworkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default"}, "steps": [{"description": "Initial state: packet originating from a Compute Engine instance.", "state": "START_FROM_INSTANCE", "projectId": "gcpdiag-vpc2-runbook", "instance": {"displayName": "private-linux-valid", "uri": "projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-valid", "interface": "nic0", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "internalIp": "10.10.0.3", "networkTags": ["valid-vpc-instance-private"]}}, {"description": "Config checking state: verify EGRESS firewall rule.", "state": "APPLY_EGRESS_FIREWALL_RULE", "projectId": "gcpdiag-vpc2-runbook", "firewall": {"displayName": "private-linux-egress-allow", "uri": "projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-allow", "direction": "EGRESS", "action": "ALLOW", "priority": 920, "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "targetTags": ["valid-vpc-instance-private"], "firewallRuleType": "VPC_FIREWALL_RULE"}}, {"description": "Config checking state: verify route.", "state": "APPLY_ROUTE", "projectId": "gcpdiag-vpc2-runbook", "route": {"displayName": "default-route-733dd203fb86133b", "uri": "projects/gcpdiag-vpc2-runbook/global/routes/default-route-733dd203fb86133b", "destIpRange": "0.0.0.0/0", "nextHop": "internet gateway", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 1000, "routeType": "STATIC", "nextHopType": "NEXT_HOP_INTERNET_GATEWAY", "routeScope": "NETWORK"}}, {"description": "Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].", "state": "NAT", "projectId": "gcpdiag-vpc2-runbook", "nat": {"type": "CLOUD_NAT", "protocol": "TCP", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "oldSourceIp": "10.10.0.3", "newSourceIp": "34.123.41.124", "oldDestinationIp": "151.101.3.5", "newDestinationIp": "151.101.3.5", "oldSourcePort": 63951, "newSourcePort": 49732, "oldDestinationPort": 443, "newDestinationPort": 443, "routerUri": "projects/gcpdiag-vpc2-runbook/regions/us-central1/routers/nat-router", "natGatewayName": "nat-gateway"}}, {"description": "Final state: packet delivered to Internet.", "state": "DELIVER", "deliver": {"target": "INTERNET", "ipAddress": "151.101.3.5"}}], "forwardTraceId": 1}]} [END]: Finalize VM external connectivity diagnostics. dest_ip=151.101.3.5,dest_port=443,name=public-linux-faulty,project_id=gcpdiag- vpc2-runbook,src_nic=nic0,zone=us-central1-a vpc/vm-external-ip-connectivity: Troubleshooting for common issues which affect VM connectivity to external IP addresses. This runbook investigates components required for VMs to establish connectivity to external IP addresses Areas Examined: - VM Instance: - Verify that the VM exists and is running - VM Configuration: - Checks the source nic configuration on the VM if it has an External IP address or not. - VPC routes checks: - Checks the VPC routing rules are configured to allow external connectivity - VPC firewall and firewall policy checks: - Checks the VPC firewall and firewall policies allow external connectivity. - GCE Network Connectivity Tests: - Runs a VPC network connectivity test and reports the result. - NATGW Checks: - For source nics without an External IP address, verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW. [START]: Starting VM external connectivity diagnostics [AUTOMATED STEP]: Verify networkmanagement.googleapis.com API is ENABLED in project gcpdiag-vpc2-runbook. - gcpdiag-vpc2-runbook [OK] [REASON] The `networkmanagement.googleapis.com` service is currently in the expected state: `ENABLED`. [GATEWAY]: Checking if the source NIC has an associated external IP address. [INFO]: The source NIC nic0 on the VM has an External IP address,checking direct connectivity to external IP 151.101.3.5 [COMPOSITE STEP]: Checking for connectivity from NIC with external IP address. [AUTOMATED STEP]: Verify Firewall exists - gcpdiag-vpc2-runbook/public-linux-faulty [FAIL] [REASON] A firewall rule or policy potentially denying egress traffic was found. Further steps will attempt to confirm the block via connectivity testing. [REMEDIATION] Refer to [1] to create or update VPC firewall rules. Refer to [2] for guidance on creating or modifying Firewall policies. [1] [2] [AUTOMATED STEP]: Evaluating the VPC routing rules. - gcpdiag-vpc2-runbook/public-linux-faulty [OK] [REASON] Matching VPC route with nexthop gateway found [AUTOMATED STEP]: Running a connectivity test to the external ip address. [INFO]: START_FROM_INSTANCE -> Initial state: packet originating from a Compute Engine instance. [INFO]: APPLY_EGRESS_FIREWALL_RULE -> Config checking state: verify EGRESS firewall rule. [INFO]: APPLY_ROUTE -> Config checking state: verify route. [INFO]: NAT -> Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32]. [INFO]: DELIVER -> Final state: packet delivered to Internet. - gcpdiag-vpc2-runbook/public-linux-faulty [OK] [REASON] The remote endpoint 151.101.3.5 is REACHABLE. CONNECTIVITY TEST RESULT: {"result": "REACHABLE", "verifyTime": "2024-06-04T00:31:09.450544252Z", "traces": [{"endpointInfo": {"sourceIp": "10.10.0.3", "destinationIp": "151.101.3.5", "protocol": "TCP", "sourcePort": 63951, "destinationPort": 443, "sourceNetworkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default"}, "steps": [{"description": "Initial state: packet originating from a Compute Engine instance.", "state": "START_FROM_INSTANCE", "projectId": "gcpdiag-vpc2-runbook", "instance": {"displayName": "private-linux-valid", "uri": "projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-valid", "interface": "nic0", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "internalIp": "10.10.0.3", "networkTags": ["valid-vpc-instance-private"]}}, {"description": "Config checking state: verify EGRESS firewall rule.", "state": "APPLY_EGRESS_FIREWALL_RULE", "projectId": "gcpdiag-vpc2-runbook", "firewall": {"displayName": "private-linux-egress-allow", "uri": "projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-allow", "direction": "EGRESS", "action": "ALLOW", "priority": 920, "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "targetTags": ["valid-vpc-instance-private"], "firewallRuleType": "VPC_FIREWALL_RULE"}}, {"description": "Config checking state: verify route.", "state": "APPLY_ROUTE", "projectId": "gcpdiag-vpc2-runbook", "route": {"displayName": "default-route-733dd203fb86133b", "uri": "projects/gcpdiag-vpc2-runbook/global/routes/default-route-733dd203fb86133b", "destIpRange": "0.0.0.0/0", "nextHop": "internet gateway", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 1000, "routeType": "STATIC", "nextHopType": "NEXT_HOP_INTERNET_GATEWAY", "routeScope": "NETWORK"}}, {"description": "Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].", "state": "NAT", "projectId": "gcpdiag-vpc2-runbook", "nat": {"type": "CLOUD_NAT", "protocol": "TCP", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "oldSourceIp": "10.10.0.3", "newSourceIp": "34.123.41.124", "oldDestinationIp": "151.101.3.5", "newDestinationIp": "151.101.3.5", "oldSourcePort": 63951, "newSourcePort": 49732, "oldDestinationPort": 443, "newDestinationPort": 443, "routerUri": "projects/gcpdiag-vpc2-runbook/regions/us-central1/routers/nat-router", "natGatewayName": "nat-gateway"}}, {"description": "Final state: packet delivered to Internet.", "state": "DELIVER", "deliver": {"target": "INTERNET", "ipAddress": "151.101.3.5"}}], "forwardTraceId": 1}]} [END]: Finalize VM external connectivity diagnostics. ================================================ FILE: gcpdiag/runbook/vpc/templates/rca.jinja ================================================ {% block vm_connectivity_reason %} Consider using our recommended methods for connecting Compute Engine virtual machine (VM) instance through its internal IP address: {% endblock vm_connectivity_reason %} ================================================ FILE: gcpdiag/runbook/vpc/templates/vm_external_ip_connectivity.jinja ================================================ {% block firewall_exists_success_reason %} No firewall rule blocking traffic {% endblock firewall_exists_success_reason %} {% block firewall_exists_failure_reason %} A firewall rule or policy potentially denying egress traffic was found. Further steps will attempt to confirm the block via connectivity testing. {% endblock firewall_exists_failure_reason %} {% block firewall_exists_failure_remediation %} Refer to [1] to create or update VPC firewall rules. Refer to [2] for guidance on creating or modifying Firewall policies. [1] [2] {% endblock firewall_exists_failure_remediation %} # `step_name` is mostly used when working with generalized step and prefer # a more customized introduction message for the step {% block firewall_exists_step_name %} Verify Firewall exists {% endblock firewall_exists_step_name %} ############################################################# # messages for the VPC route check for gateway nexthop step # ############################################################# {% block vpc_route_check_for_nexthop_gateway_success_reason %} Matching VPC route with nexthop gateway found {% endblock vpc_route_check_for_nexthop_gateway_success_reason %} # messages for the VPC route check for gateway nexthop {% block vpc_route_check_for_nexthop_gateway_failure_reason %} No matching VPC route found that forwards traffic to the external IP {address} {% endblock vpc_route_check_for_nexthop_gateway_failure_reason %} {% block vpc_route_check_for_nexthop_gateway_failure_remediation %} Refer to [1] or [2] to create a default route to the default internet gateway. [1] [2] {% endblock vpc_route_check_for_nexthop_gateway_failure_remediation %} {% block vpc_route_check_for_nexthop_gateway_uncertain_reason %} Matching VPC route {route_name} forwards traffic for the external IP {address} via the next hop {next_hop_link}, which is not the default internet gateway. Connectivity depends on the configured next hop having internet access. {% endblock vpc_route_check_for_nexthop_gateway_uncertain_reason %} {% block vpc_route_check_for_nexthop_gateway_uncertain_remediation %} Confirm that the next hop {next_hop_link} is correctly configured and provides the necessary internet connectivity. {% endblock vpc_route_check_for_nexthop_gateway_uncertain_remediation %} ############################################################# # Messages for Connectivity Tests Step # ############################################################# {% block connectivity_test_success_reason %} The remote endpoint {address} is {result_status}. CONNECTIVITY TEST RESULT: {trace} {% endblock connectivity_test_success_reason %} {% block connectivity_test_failure_reason %} Connectivity test to the remote endpoint {address} resulted in status: {result_status}. The connectivity test trace provides details on the failure points. CONNECTIVITY TEST RESULT: {trace} {% endblock connectivity_test_failure_reason %} {% block connectivity_test_uncertain_reason %} Connectivity test to the endpoint {address} is {result_status}. Review the connectivity test result output and resolve identified issues. CONNECTIVITY TEST RESULT: {trace} {% endblock connectivity_test_uncertain_reason %} {% block connectivity_test_uncertain_remediation %} Review the connectivity test output, resolve issues and retest. {% endblock connectivity_test_uncertain_remediation %} {% block connectivity_test_failure_remediation %} Review the connectivity test output, resolve issues and retest. {% endblock connectivity_test_failure_remediation %} ############################################################# # Messages for NAT IP Exhaustion Check # ############################################################# {% block nat_ip_exhaustion_check_success_reason %} No IP exhaustion issues found on the NAT GW {nat_gateway_name} {% endblock nat_ip_exhaustion_check_success_reason %} {% block nat_ip_exhaustion_check_failure_reason %} NAT IP allocation failure found on the NAT GW {nat_gateway_name} {% endblock nat_ip_exhaustion_check_failure_reason %} {% block nat_ip_exhaustion_check_failure_remediation %} Remediate IP exhaustion issues on {nat_gateway_name} by referring to [1]: [1] . {% endblock nat_ip_exhaustion_check_failure_remediation %} ############################################################# # Messages for Resource Exhaustion Check # ############################################################# {% block nat_resource_exhaustion_check_success_reason %} No {metric_reason} issues on the dropped_sent_packet metric for the NAT GW {nat_gateway_name} seen. {% endblock nat_resource_exhaustion_check_success_reason %} {% block nat_resource_exhaustion_check_failure_reason %} {metric_reason} issue found on the dropped_sent_packet metric on the NAT GW {nat_gateway_name} {% endblock nat_resource_exhaustion_check_failure_reason %} {% block nat_resource_exhaustion_check_failure_remediation %} Remediate resource exhaustion issues by referring to [1]: [1] {% endblock nat_resource_exhaustion_check_failure_remediation %} ############################################################# # Messages for NAT received packet drop check # ############################################################# {% block nat_dropped_received_packet_check_success_reason %} No received_packet_drop on NAT GW {nat_gateway_name} seen. {% endblock nat_dropped_received_packet_check_success_reason %} {% block nat_dropped_received_packet_check_uncertain_reason %} Elevated received_packet_drop_count metric noticed for NAT GW {nat_gateway_name} dropped_received_packet: {metric_value} {% endblock nat_dropped_received_packet_check_uncertain_reason %} {% block nat_dropped_received_packet_check_uncertain_remediation %} NAT gateways can drop packets for various reasons. Check received_packet_drop metrics at the VM level. Open a case with GCP Support for confirmation of the reason for the drops. Refer to [1] and [2] for troubleshooting Cloud NAT and reducing drops: [1] [2] {% endblock nat_dropped_received_packet_check_uncertain_remediation %} ############################################################# # Messages for VM received packet drop check # ############################################################# {% block vm_dropped_received_packet_check_success_reason %} No received_packet_drop on relevant VMs seen. {% endblock vm_dropped_received_packet_check_success_reason %} {% block vm_dropped_received_packet_check_uncertain_reason %} Elevated received_packet_drop_count metric noticed for following VMs {vm_drop_list} {% endblock vm_dropped_received_packet_check_uncertain_reason %} {% block vm_dropped_received_packet_check_uncertain_remediation %} VMs can drop packets for various reasons. Open a case with GCP Support for justification for the packet drops. Refer to [1] and [2] for troubleshooting Cloud NAT and reducing drops: [1] [2] {% endblock vm_dropped_received_packet_check_uncertain_remediation %} ================================================ FILE: gcpdiag/runbook/vpc/util.py ================================================ # Copyright 2023 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. """Helpful functions used in different parts of the VPC runbooks""" import ipaddress import re from gcpdiag.queries import network # check that nic is a valid nic def is_valid_nic(nic: str): pattern = r'^nic([0-7])$' return bool(re.match(pattern, nic)) # check if an external IP is associated to the nic def is_external_ip_on_nic(interfaces: list, nic: str): interface = [int for int in interfaces if nic == int['name']] return 'natIP' in str(interface) # get the project and network for the nic def get_nic_info(interfaces: list, nic: str): nic_info = {} pattern = r'/projects/([^/]+)/global/networks/([^/]+)' interface = [int for int in interfaces if nic == int['name']] nic_network_url = interface[0]['network'] match = re.search(pattern, nic_network_url) if match: nic_info['project'] = match.group(1) nic_info['network'] = match.group(2) else: raise ValueError('Could not get network, project info from the network URL') return nic_info # get network from url def get_network_from_url(url): pattern = r'/projects/([^/]+)/global/networks/([^/]+)' match = re.search(pattern, url) if match: return match.group(2) else: raise ValueError('Could not get network from the network URL') # get the routes for the nic sorted in descending order of destRange prefix length def get_selected_route_for_dest_ip(project, net, dest_ip): routes = network.get_routes(project) nic_routes = [ route for route in routes if get_network_from_url(route.network) == net ] # routes with destRange that matches the dest_ip matching_routes = [ route for route in nic_routes if dest_ip in ipaddress.IPv4Network(route.dest_range) ] # return None if there are no matching routes. if not matching_routes: return None # sort the matching routes based on the longest prefix, the longest prefix wins # based on GCP VPC selection https://cloud.google.com/vpc/docs/routes#routeselection sorted_routes = sorted( matching_routes, key=lambda r: ipaddress.IPv4Network(r.dest_range).prefixlen, reverse=True) return sorted_routes[0] ================================================ FILE: gcpdiag/runbook/vpc/vm_external_ip_connectivity.py ================================================ # Copyright 2024 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. """Module containing VM External IP connectivity debugging tree and custom steps""" import ipaddress import googleapiclient.errors from gcpdiag import config, runbook from gcpdiag.queries import crm, gce from gcpdiag.runbook import op from gcpdiag.runbook.gcp import generalized_steps as gcp_gs from gcpdiag.runbook.nat import generalized_steps as nat_gs from gcpdiag.runbook.vpc import flags from gcpdiag.runbook.vpc import generalized_steps as vpc_gs from gcpdiag.runbook.vpc import util SCOPE_TO_SINGLE_VM = 'vm_exists' class VmExternalIpConnectivity(runbook.DiagnosticTree): """Troubleshooting for common issues which affect VM connectivity to external IP addresses. This runbook investigates components required for VMs to establish connectivity to external IP addresses Areas Examined: - VM Instance: - Verify that the VM exists and is running - VM Configuration: - Checks the source nic configuration on the VM if it has an External IP address or not. - VPC routes checks: - Checks the VPC routing rules are configured to allow external connectivity - VPC firewall and firewall policy checks: - Checks the VPC firewall and firewall policies allow external connectivity. - GCE Network Connectivity Tests: - Runs a VPC network connectivity test and reports the result. - NATGW Checks: - For source nics without an External IP address, verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.NAME: { 'type': str, 'help': 'The name of the GCE Instance', 'group': 'instance', 'deprecated': True, 'new_parameter': 'instance_name' }, flags.INSTANCE_NAME: { 'type': str, 'help': 'The name of the GCE Instance', 'group': 'instance', 'required': True }, flags.DEST_IP: { 'type': ipaddress.IPv4Address, 'help': 'External IP the VM is connecting to', 'required': True }, flags.DEST_PORT: { 'type': int, 'help': 'External IP the VM is connecting to', 'default': 443 }, flags.PROTOCOL_TYPE: { 'type': str, 'help': 'Protocol used to connect to SSH', 'default': 'tcp', }, flags.SRC_NIC: { 'type': str, 'help': 'VM source NIC', 'required': True }, flags.ZONE: { 'type': str, 'help': 'The zone of the target GCE Instance', 'required': True } } def legacy_parameter_handler(self, parameters): if flags.NAME in parameters: parameters[flags.INSTANCE_NAME] = parameters.pop(flags.NAME) def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate step classes start = VmExternalIpConnectivityStart() has_external_ip = VmHasExternalIp() # Check that the networkmanagement api is enabled service_api_status_check = gcp_gs.ServiceApiStatusCheck() service_api_status_check.api_name = 'networkmanagement' service_api_status_check.project_id = op.get(flags.PROJECT_ID) service_api_status_check.expected_state = gcp_gs.constants.APIState.ENABLED # add to the debugging tree self.add_start(start) # Describe the step relationships self.add_step(parent=start, child=service_api_status_check) self.add_step(parent=service_api_status_check, child=has_external_ip) # Ending your runbook self.add_end(VmExternalIpConnectivityEnd()) class VmExternalIpConnectivityStart(runbook.StartStep): """Start VM external connectivity checks""" def execute(self): """Starting VM external connectivity diagnostics""" project = crm.get_project(op.get(flags.PROJECT_ID)) try: vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) except googleapiclient.errors.HttpError: op.add_skipped( project, reason=('Instance {} does not exist in zone {} or project {}').format( op.get(flags.INSTANCE_NAME), op.get(flags.ZONE), op.get(flags.PROJECT_ID))) else: if vm: # Check for instance id and instance name if not op.get(flags.ID): op.put(flags.ID, vm.id) # Check that the user passed in a valid source NIC on the VM if not util.is_valid_nic(op.get(flags.SRC_NIC)): op.add_failed( vm, reason= (f'{op.get(flags.SRC_NIC)} is not a valid nic on the the VM {vm.name}.' ), remediation='Run using a valid nic.') else: # get the networkIP of the NIC for interface in vm.get_network_interfaces: if interface['name'] == op.get(flags.SRC_NIC): network_ip = interface['networkIP'] op.put(flags.SRC_IP, network_ip) # Check that the user has provided a valid external IP address. if op.get(flags.DEST_IP): if ipaddress.IPv4Address(op.get(flags.DEST_IP)).is_private: op.add_failed( op.get(flags.DEST_IP), reason= f'{op.get(flags.DEST_IP)} is not a public/external ip address.', remediation='Run using a valid public/external ip address.') # Check that the user has provided a port number if not op.get(flags.DEST_PORT): op.add_failed( op.get(flags.DEST_PORT), reason=f'{op.get(flags.DEST_PORT)} is not a valid port address.', remediation='Run using a valid destination port.') class VmHasExternalIp(runbook.Gateway): """Checks if the source NIC provided has an external IP address or not. Based on the source NIC, IP address type, diagnostic process would be directed towards troubleshooting NATGW or direct external connectivity """ def execute(self): """Checking if the source NIC has an associated external IP address.""" vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID), zone=op.get(flags.ZONE), instance_name=op.get(flags.INSTANCE_NAME)) # If this an interface without an external IP address run checks for external interface if util.is_external_ip_on_nic(vm.get_network_interfaces, op.get(flags.SRC_NIC)): op.info( f'The source NIC {op.get(flags.SRC_NIC)} on the VM has an External IP address,' f'checking direct connectivity to external IP {op.get(flags.DEST_IP)}' ) self.add_child(ExternalInterfaceCheck()) else: op.info( f'The source NIC {op.get(flags.SRC_NIC)} on the VM does not have an External IP address,' f'checking connectivity to external IP {op.get(flags.DEST_IP)} via a NATGW' ) self.add_child(InternalInterfaceCheck()) class VmExternalIpConnectivityEnd(runbook.EndStep): """Concludes the VM External IP connectivity diagnostics process. If external connectivity issues persist, it directs the user to helpful resources and suggests contacting support with a detailed report. """ def execute(self): """Finalize VM external connectivity diagnostics.""" if not config.get(flags.INTERACTIVE_MODE): response = op.prompt(kind=op.CONFIRMATION, message=""" Are you able to connect to external IP from the VM {}: after taking the remediation steps outlined. """.format(op.get(flags.INSTANCE_NAME)), choice_msg='Enter an option: ') if response == op.NO: op.info(message=op.END_MESSAGE) class ExternalInterfaceCheck(runbook.CompositeStep): """Check connectivity to external endpoint when the VM has an external IP address. This step checks firewall and routing rules exist to allow for connectivity to the external IP address. It also runs and reports a connectivity test. """ def execute(self): """Checking for connectivity from NIC with external IP address.""" # Check there is egress rule permitting egress traffic to the destination/remote IP if op.get(flags.DEST_IP): dest_ip_egress_firewall_check = vpc_gs.VpcFirewallCheck() dest_ip_egress_firewall_check.traffic = 'egress' dest_ip_egress_firewall_check.template = 'vm_external_ip_connectivity::firewall_exists' self.add_child(dest_ip_egress_firewall_check) # Check VPC routes that routing rule to default internet gateway exists dest_route_check = vpc_gs.VpcRouteCheck() dest_route_check.template = 'vm_external_ip_connectivity::vpc_route_check_for_nexthop_gateway' self.add_child(dest_route_check) # run a connectivity test to the external IP address from the VM source IP address. connectivity_test = vpc_gs.VmExternalIpConnectivityTest() connectivity_test.template = 'vm_external_ip_connectivity::connectivity_test' self.add_child(connectivity_test) self.add_child(VmExternalIpConnectivityEnd()) class InternalInterfaceCheck(runbook.CompositeStep): """Check connectivity to external endpoint when the VM source NIC is an internal interface. This step checks firewall and routing rules exist to allow for connectivity to the external IP address. It also runs and reports a connectivity test. """ def execute(self): """Checking for connectivity from NIC with only a private IP address.""" # Check there is egress rule permitting egress traffic to the destination/remote IP. if op.get(flags.DEST_IP): # check the VPC Firewall rules. dest_ip_egress_firewall_check = vpc_gs.VpcFirewallCheck() dest_ip_egress_firewall_check.traffic = 'egress' dest_ip_egress_firewall_check.template = 'vm_external_ip_connectivity::firewall_exists' self.add_child(dest_ip_egress_firewall_check) # Check VPC routes that routing rule to default internet gateway exists. dest_route_check = vpc_gs.VpcRouteCheck() dest_route_check.template = 'vm_external_ip_connectivity::vpc_route_check_for_nexthop_gateway' self.add_child(dest_route_check) # run a connectivity test to the external IP address from the VM source IP address. connectivity_test = vpc_gs.VmExternalIpConnectivityTest() connectivity_test.template = 'vm_external_ip_connectivity::connectivity_test' self.add_child(connectivity_test) # run a connectivity test to the external IP address from the VM source IP address. nat_ip_exhaustion_check = nat_gs.NatIpExhaustionCheck() self.add_child(nat_ip_exhaustion_check) # run resource exhaustion check to for OUT_OF_RESOURCES or ENDPOINT_INDEPENDENCE_CONFLICT. nat_resource_exhaustion_check = nat_gs.NatResourceExhaustionCheck() self.add_child(nat_resource_exhaustion_check) # Check received packet dropped count metric on the NATGW level for elevated count. nat_dropped_received_packet_check = nat_gs.NatDroppedReceivedPacketCheck() self.add_child(nat_dropped_received_packet_check) # End the diagnostic tree. self.add_child(VmExternalIpConnectivityEnd()) ================================================ FILE: gcpdiag/runbook/vpc/vm_external_ip_connectivity_test.py ================================================ # Copyright 2024 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. """Test class for vpc/VmExternalIpConnectivity""" from gcpdiag import config from gcpdiag.runbook import snapshot_test_base, vpc class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = vpc runbook_name = 'vpc/vm-external-ip-connectivity' config.init({'auto': True, 'interface': 'cli'}) rule_parameters = [{ 'project_id': 'gcpdiag-vpc2-runbook', 'instance_name': 'public-linux-valid', 'zone': 'us-central1-a', 'dest_ip': '151.101.3.5', 'src_nic': 'nic0', 'dest_port': '443' }, { 'project_id': 'gcpdiag-vpc2-runbook', 'name': 'public-linux-faulty', 'zone': 'us-central1-a', 'dest_ip': '151.101.3.5', 'src_nic': 'nic0', 'dest_port': '443' }] ================================================ FILE: gcpdiag/runbook/vpn/__init__.py ================================================ ================================================ FILE: gcpdiag/runbook/vpn/constants.py ================================================ # Copyright 2025 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. """Constants for VPN Tunnel Check runbook.""" # pylint: disable=unused-wildcard-import, wildcard-import # https://docs.cloud.google.com/network-connectivity/docs/vpn/quotas#limits PACKET_PER_SECOND_LIMIT = 250000 ================================================ FILE: gcpdiag/runbook/vpn/flags.py ================================================ # Copyright 2025 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. """Flags used by VPN runbooks.""" # pylint: disable=unused-wildcard-import, wildcard-import from gcpdiag.runbook.gcp.flags import * TUNNEL = 'tunnel' ================================================ FILE: gcpdiag/runbook/vpn/generalized_steps.py ================================================ # Copyright 2025 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. """VPN Generalized Runbook Steps""" ================================================ FILE: gcpdiag/runbook/vpn/generalized_steps_test.py ================================================ # Copyright 2025 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. """Tests for generalized steps used in VPN runbooks.""" ================================================ FILE: gcpdiag/runbook/vpn/snapshots/vpn_tunnel_check.txt ================================================ custom_flag=vpn,name=vpn-tunnel-1,project_id=gcpdiag-vpn1-aaaa,region=europe-west4-a vpn/vpn-tunnel-check: Runbook for diagnosing issues with a Cloud VPN Tunnel. This runbook performs several checks on a specified Cloud VPN tunnel: - **VPN Tunnel Status Check**: Verifies if the VPN tunnel is in an 'ESTABLISHED' state. - **Tunnel Down Status Reason**: If the tunnel is not established, it queries Cloud Logging for specific error messages and provide remediations . - **Tunnel Packet Drop Check**: If the tunnel is established, it examines monitoring metrics for various types of packet drops (e.g., due to MTU, invalid SA, throttling) and provides remediation based on the drop reason. - **Tunnel Packet Utilization Check**: Analyzes packet rates to identify if the tunnel is hitting max packet per second limits. [START]: Start the tunnel status api call [INFO]: name: gcpdiag test - gce1, id: gcpdiag-vpn1-aaaa, number: 12340001 - gcpdiag-vpn1-aaaa/vpn-tunnel-1 [OK] [REASON] VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1' in project 'gcpdiag-vpn1-aaaa' is in status 'ESTABLISHED'. [AUTOMATED STEP]: Check VPN tunnel logs and status. - gcpdiag-vpn1-aaaa/vpn-tunnel-1 [OK] [REASON] VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1' in project 'gcpdiag-vpn1-aaaa' is in status 'ESTABLISHED': No relevant logs found during the chosen TimeFrame [AUTOMATED STEP]: Start the tunnel Packet drop api call - gcpdiag-vpn1-aaaa/vpn-tunnel-1 [OK] [REASON] VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1' in project 'gcpdiag-vpn1-aaaa' is in status 'ESTABLISHED': No Packet drop during the chosen TimeFrame [AUTOMATED STEP]: Start the tunnel Packet api call - gcpdiag-vpn1-aaaa/vpn-tunnel-1 [OK] [REASON] VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1' in project 'gcpdiag-vpn1-aaaa' is in status 'ESTABLISHED': Packet did not reach max value during the chosen TimeFrame [END]: Finalizing connectivity diagnostics. [INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting custom_flag=vpn,name=vpn-tunnel-down,project_id=gcpdiag-vpn1-aaaa,region=europe-west4-a vpn/vpn-tunnel-check: Runbook for diagnosing issues with a Cloud VPN Tunnel. This runbook performs several checks on a specified Cloud VPN tunnel: - **VPN Tunnel Status Check**: Verifies if the VPN tunnel is in an 'ESTABLISHED' state. - **Tunnel Down Status Reason**: If the tunnel is not established, it queries Cloud Logging for specific error messages and provide remediations . - **Tunnel Packet Drop Check**: If the tunnel is established, it examines monitoring metrics for various types of packet drops (e.g., due to MTU, invalid SA, throttling) and provides remediation based on the drop reason. - **Tunnel Packet Utilization Check**: Analyzes packet rates to identify if the tunnel is hitting max packet per second limits. [START]: Start the tunnel status api call [INFO]: name: gcpdiag test - gce1, id: gcpdiag-vpn1-aaaa, number: 12340001 [AUTOMATED STEP]: Check VPN tunnel logs and status. - gcpdiag-vpn1-aaaa/vpn-tunnel-down [FAIL] [REASON] VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-down' in project 'gcpdiag-vpn1-aaaa' is in status 'FIRST_HANDSHAKE': Tunnel is not established, but no specific error logs were found. [REMEDIATION] Try broadening the timeframe or checking the peer device logs. [AUTOMATED STEP]: Start the tunnel Packet drop api call - gcpdiag-vpn1-aaaa/vpn-tunnel-down [SKIP] [REASON] Check Skipped: Tunnel not Established [AUTOMATED STEP]: Start the tunnel Packet api call - gcpdiag-vpn1-aaaa/vpn-tunnel-down [SKIP] [REASON] Tunnel not Established [END]: Finalizing connectivity diagnostics. [INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting ================================================ FILE: gcpdiag/runbook/vpn/templates/vpn_check.jinja ================================================ {% block tunnel_success_reason%} VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}'. {% endblock tunnel_success_reason %} {% block log_explorer_success_reason%} VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': No relevant logs found during the chosen TimeFrame {% endblock log_explorer_success_reason %} {% block tunnel_failure_reason%} VPN tunnel '{tunnel}' in project '{project}': {issue} {% endblock tunnel_failure_reason%} {% block tunnel_failure_remediation%} {remediations} {% endblock tunnel_failure_remediation %} {% block log_explorer_failure_reason%} VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': {issue} {% endblock log_explorer_failure_reason %} {% block log_explorer_skipped_reason%} Please verify the tunnel and project details provided are accurate. {% endblock log_explorer_skipped_reason %} {% block log_explorer_failure_remediation%} {remediations} {% endblock log_explorer_failure_remediation %} {% block packet_drop_check_success_reason%} VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': No Packet drop during the chosen TimeFrame {% endblock packet_drop_check_success_reason %} {% block packet_drop_check_failure_reason%} {issue} {% endblock packet_drop_check_failure_reason%} {% block packet_drop_check_failure_remediation%} {remediations} {% endblock packet_drop_check_failure_remediation %} {% block packet_drop_check_skipped_reason%} {issue} {% endblock packet_drop_check_skipped_reason %} {% block packet_check_success_reason%} VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': Packet did not reach max value during the chosen TimeFrame {% endblock packet_check_success_reason %} {% block packet_check_failure_reason%} VPN tunnel '{tunnel}' in project '{project}': {issue} {% endblock packet_check_failure_reason%} {% block packet_check_failure_remediation%} {remediations} {% endblock packet_check_failure_remediation %} {% block packet_check_skipped_reason%} {issue} {% endblock packet_check_skipped_reason %} ================================================ FILE: gcpdiag/runbook/vpn/vpn_tunnel_check.py ================================================ # Copyright 2025 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. """Runbook for diagnosing issues with a Cloud VPN Tunnel.""" from datetime import datetime from googleapiclient import errors as gapi_errors from gcpdiag import runbook, utils from gcpdiag.queries import crm, logs, monitoring, vpn from gcpdiag.runbook import op from gcpdiag.runbook.vpn import constants, flags class VpnTunnelCheck(runbook.DiagnosticTree): """Runbook for diagnosing issues with a Cloud VPN Tunnel. This runbook performs several checks on a specified Cloud VPN tunnel: - **VPN Tunnel Status Check**: Verifies if the VPN tunnel is in an 'ESTABLISHED' state. - **Tunnel Down Status Reason**: If the tunnel is not established, it queries Cloud Logging for specific error messages and provide remediations . - **Tunnel Packet Drop Check**: If the tunnel is established, it examines monitoring metrics for various types of packet drops (e.g., due to MTU, invalid SA, throttling) and provides remediation based on the drop reason. - **Tunnel Packet Utilization Check**: Analyzes packet rates to identify if the tunnel is hitting max packet per second limits. """ parameters = { flags.PROJECT_ID: { 'type': str, 'help': 'The Project ID of the resource under investigation', 'required': True }, flags.REGION: { 'type': str, 'help': 'The region where the VPN Tunnel is located', 'required': True, }, flags.NAME: { 'type': str, 'help': 'Name of the VPN Tunnel', 'required': True, }, flags.START_TIME: { 'type': datetime, 'help': 'The start window to investigate BGP flap. Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.END_TIME: { 'type': datetime, 'help': 'The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ' }, flags.TUNNEL: { 'type': str, 'help': 'This Flag will be added Automatically', 'required': False, }, } def build_tree(self): """Construct the diagnostic tree with appropriate steps.""" # Instantiate your step classes start = VpnTunnelStatus() # add them to your tree self.add_start(start) self.add_step(parent=start, child=TunnelDownStatusReason()) self.add_step(parent=start, child=TunnelPacketsDropCheck()) self.add_step(parent=start, child=TunnelPacketsUtilizationCheck()) self.add_end(VpnTunnelCheckEnd()) class VpnTunnelStatus(runbook.StartStep): """Checking the VPN Tunnel status""" template = 'vpn_check::tunnel' def execute(self): """Start the tunnel status api call""" proj = crm.get_project(op.get(flags.PROJECT_ID)) if proj: op.info(f'name: {proj.name}, id: {proj.id}, number: {proj.number}') try: project_id = op.get(flags.PROJECT_ID) name = op.get(flags.NAME) region = op.get(flags.REGION) tunnel = vpn.get_vpn(project_id, name, region) op.put(flags.TUNNEL, tunnel.full_path) if tunnel.status == 'ESTABLISHED': op.add_ok(tunnel, reason=op.prep_msg(op.SUCCESS_REASON, tunnel=tunnel, project=project_id)) else: op.add_failed(tunnel, reason=op.prep_msg( op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue=f'Tunnel status is {tunnel.status}', status=tunnel.status), remediation=op.prep_msg(op.FAILURE_REMEDIATION, tunnel=tunnel, project=project_id, status=tunnel.status)) return True except (gapi_errors.HttpError, utils.GcpApiError) as e: op.add_skipped( proj, reason=op.prep_msg( op.SKIPPED_REASON, tunnel=name, project=project_id, issue=(f'API call failed {e} : Check that the provided ' 'tunnel and project information are correct'))) return False def _get_combined_metric_data(project_id, query_ingress, query_egress, start_time, end_time): """Helper to fetch and merge ingress/egress metrics by timestamp.""" try: m_ingress = monitoring.queryrange(project_id, query_ingress, start_time, end_time) except (gapi_errors.HttpError, monitoring.GcpApiError) as e: op.warning(f"Failed to query ingress metrics: {e}") m_ingress = {} try: m_egress = monitoring.queryrange(project_id, query_egress, start_time, end_time) except (gapi_errors.HttpError, monitoring.GcpApiError) as e: op.warning(f"Failed to query egress metrics: {e}") m_egress = {} def extract_values(response): results = response.get('data', {}).get('result', []) if not results or 'values' not in results[0]: return {} return {t: float(v) for t, v in results[0].get('values', [])} res_in = extract_values(m_ingress) res_out = extract_values(m_egress) if not res_in and not res_out: return [] all_timestamps = set(res_in.keys()).union(set(res_out.keys())) combined = [] for ts in all_timestamps: val_in = res_in.get(ts, 0.0) val_out = res_out.get(ts, 0.0) combined.append({ 'timestamp': datetime.fromtimestamp(ts).isoformat(), 'total': val_in + val_out }) return combined class TunnelPacketsUtilizationCheck(runbook.Step): """Checking the VPN Tunnel Packet Utilization""" template = 'vpn_check::packet_check' def execute(self): """Start the tunnel Packet api call""" # tunnel = op.get(flags.TUNNEL) project_id = op.get(flags.PROJECT_ID) name, region = op.get(flags.NAME), op.get(flags.REGION) try: tunnel = vpn.get_vpn(project_id, name, region) except utils.GcpApiError as e: op.add_skipped(None, reason=op.prep_msg(op.SKIPPED_REASON, project=project_id, issue=f'Failed to get tunnel: {e}')) return if tunnel.status != 'ESTABLISHED': op.add_skipped(tunnel, reason=op.prep_msg(op.SKIPPED_REASON, project=project_id, issue='Tunnel not Established')) return q_in = ( f'sum(rate({{"__name__"="vpn.googleapis.com/network/received_packets_count",' f'"tunnel_name"="{name}","region"="{region}"}}[1m]))') q_out = ( f'sum(rate({{"__name__"="vpn.googleapis.com/network/sent_packets_count",' f'"tunnel_name"="{name}","region"="{region}"}}[1m]))') combined_data = _get_combined_metric_data(project_id, q_in, q_out, op.get(flags.START_TIME), op.get(flags.END_TIME)) if not combined_data: op.add_failed(tunnel, reason=op.prep_msg(op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue='has no traffic'), remediation=op.prep_msg( op.FAILURE_REMEDIATION, remediations='Check route configuration')) return exceeded = [ d for d in combined_data if d['total'] >= constants.PACKET_PER_SECOND_LIMIT ] if exceeded: op.add_failed( tunnel, reason=op.prep_msg(op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue=f'Reached limit {len(exceeded)} times'), remediation=op.prep_msg(op.FAILURE_REMEDIATION, remediations='Reduce rate or add tunnels')) else: op.add_ok(tunnel, reason=op.prep_msg(op.SUCCESS_REASON, tunnel=tunnel, project=project_id)) class TunnelPacketsDropCheck(runbook.Step): """Checking the VPN Tunnel Packet Drop """ template = 'vpn_check::packet_drop_check' DROP_REASONS = { 'dont_fragment_icmp': { 'reason': 'Dropped ICMP packet larger than MTU with DF bit set (PMTUD).', 'remediation': 'Ensure ICMP packets for PMTUD do not exceed effective MTU.' }, 'dont_fragment_nonfirst_fragment': { 'reason': 'Non-first fragment of UDP/ESP packet exceeds MTU with DF bit set.', 'remediation': 'Verify application fragmentation handling or reduce IP packet size.' }, 'exceeds_mtu': { 'reason': 'First fragment of UDP/ESP packet exceeds MTU with DF bit set.', 'remediation': 'Reduce effective MTU (usually 1460 bytes) or permit fragmentation.' }, 'invalid': { 'reason': 'Dropped due to invalid state (corruption or unexpected sequence).', 'remediation': 'Review peer VPN config and capture traffic to check for corruption.' }, 'sa_expired': { 'reason': 'Packet used unknown or expired SA (negotiation failure).', 'remediation': 'Sync IKE/IPsec SA lifetimes on both peers; consider a tunnel reset.' }, 'sequence_number_lost': { 'reason': 'Sequence number significantly larger than expected (packet loss).', 'remediation': 'Investigate network path for congestion or connectivity issues.' }, 'suspected_replay': { 'reason': 'ESP packet received with a sequence number already processed.', 'remediation': 'Check for network devices (load balancers) duplicating or reordering packets.' }, 'throttled': { 'reason': 'Packet dropped due to excessive load on Cloud VPN gateway.', 'remediation': 'Reduce traffic or provision additional tunnels/Cloud Interconnect.' }, 'unknown': { 'reason': 'Packet dropped for an uncategorized reason.', 'remediation': 'Collect logs from both peers and contact Google Cloud support.' } } def execute(self): """Start the tunnel Packet drop api call""" # tunnel = op.get(flags.TUNNEL) project_id = op.get(flags.PROJECT_ID) name = op.get(flags.NAME) region = op.get(flags.REGION) end_time = op.get(flags.END_TIME) start_time = op.get(flags.START_TIME) try: tunnel = vpn.get_vpn(project_id, name, region) except utils.GcpApiError as e: op.add_skipped(None, reason=op.prep_msg(op.SKIPPED_REASON, project=project_id, issue=f'Failed to get tunnel: {e}')) return if tunnel.status != 'ESTABLISHED': op.add_skipped(tunnel, reason=op.prep_msg( op.SKIPPED_REASON, project=project_id, issue='Check Skipped: Tunnel not Established')) return issue_found = False flows = [('egress', 'sent_packets_count'), ('ingress', 'received_packets_count')] for direction_label, metric_suffix in flows: query = ( f'sum by (status) (rate({{"__name__" = "vpn.googleapis.com/network/{metric_suffix}",' f'"monitored_resource" = "vpn_gateway","tunnel_name" = "{name}",' f'"region" = "{region}"}}[1m]))') try: status_drop = monitoring.queryrange(project_id, query, start_time, end_time) except (gapi_errors.HttpError, monitoring.GcpApiError) as e: op.warning( f"Failed to query packet drop metrics for {direction_label}: {e}") continue for metric_data in status_drop.get('data', {}).get('result', []): status = metric_data['metric'].get('status') if status == 'successful' or status not in self.DROP_REASONS: continue drops = [[datetime.fromtimestamp(t).isoformat(), float(v)] for t, v in metric_data['values'] if float(v) >= 1] if drops: issue_found = True diag = self.DROP_REASONS[status] reason_msg = diag['reason'] base_issue = ( f'Project {project_id} on VPN {name} has {direction_label} drops ' f'({status}). Times: {drops}. Reason: {reason_msg}') op.add_failed(tunnel, reason=op.prep_msg(op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue=base_issue), remediation=op.prep_msg( op.FAILURE_REMEDIATION, tunnel=tunnel, project=project_id, remediations=diag['remediation'])) if not issue_found: op.add_ok(tunnel, reason=op.prep_msg(op.SUCCESS_REASON, tunnel=tunnel, project=project_id)) class TunnelDownStatusReason(runbook.Step): """Checks the status of the tunnel and provides reasons for failure.""" template = 'vpn_check::log_explorer' def execute(self): """Check VPN tunnel logs and status.""" project_id = op.get(flags.PROJECT_ID) name, region = op.get(flags.NAME), op.get(flags.REGION) end_time = op.get(flags.END_TIME) start_time = op.get(flags.START_TIME) try: tunnel = vpn.get_vpn(project_id, name, region) except utils.GcpApiError as e: op.add_skipped(None, reason=op.prep_msg(op.SKIPPED_REASON, project=project_id, issue=f'Failed to get tunnel: {e}')) return reasons = [ '"establishing IKE_SA failed, peer not responding"', '"Remote traffic selectors narrowed"', '"Local traffic selectors narrowed"', '"Proposal mismatch in CHILD SA"', '("Starting VPN Task maintenance" AND "VPN Task maintenance Completed")' ] filter_str = (f'resource.type = "vpn_gateway" AND ' f'labels.tunnel_id = "{tunnel.id}" AND ' f"({' OR '.join(reasons)})") fetched_logs = logs.realtime_query(project_id=project_id, filter_str=filter_str, start_time=start_time, end_time=end_time) log_text = ' '.join([l.message for l in fetched_logs]) found_issue = False if 'establishing IKE_SA failed' in log_text: found_issue = True op.add_failed( tunnel, reason=op.prep_msg( op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue= 'IKE_SA failure: Peer not responding. Possible firewall blocking traffic.' ), remediation=op.prep_msg( op.FAILURE_REMEDIATION, remediations= 'Ensure UDP ports 500/4500 are open, and check peer reachability.' )) if 'Remote traffic selectors narrowed' in log_text: found_issue = True op.add_failed( tunnel, reason=op.prep_msg( op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue='Remote traffic selectors narrowed by peer.'), remediation=op.prep_msg( op.FAILURE_REMEDIATION, remediations= 'Match Cloud VPN remote selectors with peer\'s local selectors.')) if 'Local traffic selectors narrowed' in log_text: found_issue = True op.add_failed( tunnel, reason=op.prep_msg(op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue='Local traffic selectors mismatch.'), remediation=op.prep_msg( op.FAILURE_REMEDIATION, remediations= 'Ensure Cloud VPN local selectors match peer\'s remote selectors.' )) if 'Proposal mismatch in CHILD SA' in log_text: found_issue = True op.add_failed( tunnel, reason=op.prep_msg(op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue='IPsec Phase 2 proposal mismatch.'), remediation=op.prep_msg( op.FAILURE_REMEDIATION, remediations= 'Align Phase 2 settings (Encryption/DH groups) on both ends.')) if 'VPN Task maintenance' in log_text: found_issue = True op.add_failed( tunnel, reason=op.prep_msg( op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue='VPN maintenance occurred during this window.'), remediation=op.prep_msg( op.FAILURE_REMEDIATION, remediations= 'Tunnels usually recover automatically. Contact Support if it stays down.' )) if not found_issue: if tunnel.status != 'ESTABLISHED': op.add_failed( tunnel, reason=op.prep_msg( op.FAILURE_REASON, tunnel=tunnel, project=project_id, issue= 'Tunnel is not established, but no specific error logs were found.' ), remediation=op.prep_msg( op.FAILURE_REMEDIATION, remediations= 'Try broadening the timeframe or checking the peer device logs.' )) else: op.add_ok(tunnel, reason=op.prep_msg(op.SUCCESS_REASON, tunnel=tunnel, project=project_id)) return True class VpnTunnelCheckEnd(runbook.EndStep): """Concludes the diagnostics process.""" def execute(self): """Finalizing connectivity diagnostics.""" op.info('If any further debugging is needed, ' 'consider please contact GCP support for further troubleshooting') ================================================ FILE: gcpdiag/runbook/vpn/vpn_tunnel_check_test.py ================================================ # Copyright 2025 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. """Test class for vpn/Vpn_tunnel_check""" from gcpdiag import config from gcpdiag.runbook import snapshot_test_base, vpn class Test(snapshot_test_base.RulesSnapshotTestBase): rule_pkg = vpn runbook_name = 'vpn/vpn_tunnel_check' project_id = 'gcpdiag-vpn1-aaaa' config.init({'auto': True, 'interface': 'cli'}, project_id) rule_parameters = [{ 'project_id': 'gcpdiag-vpn1-aaaa', 'region': 'europe-west4-a', 'name': 'vpn-tunnel-1', 'custom_flag': 'vpn' }, { 'project_id': 'gcpdiag-vpn1-aaaa', 'region': 'europe-west4-a', 'name': 'vpn-tunnel-down', 'custom_flag': 'vpn' }] ================================================ FILE: gcpdiag/search/__init__.py ================================================ ================================================ FILE: gcpdiag/search/command.py ================================================ # Copyright 2024 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. """Search command to look up gcpdiag rules""" import argparse import heapq import json import logging from typing import Any, Dict, Iterable, List, Tuple from blessings import Terminal from gcpdiag import config, lint, runbook from gcpdiag.lint import LintRule from gcpdiag.lint import command as lint_command from gcpdiag.runbook import DiagnosticTree from gcpdiag.runbook import command as runbook_command from gcpdiag.runbook.output import terminal_output def _init_search_args_parser() -> argparse.ArgumentParser: """Initialize and return the argument parser for the search command.""" parser = argparse.ArgumentParser( description= 'Find gcpdiag rules like runbook and lint rules related to search terms', prog='gcpdiag search') parser.add_argument( 'search', metavar='SEARCH_TERMS', type=str, nargs='+', help='Search terms to discover gcpdiag rules related to them') parser.add_argument('-l', '--limit-per-type', metavar='L', type=int, default=10, help='Limit output rules for each rule type') parser.add_argument('-t', '--rule-type', choices=['lint', 'runbook'], default=['lint', 'runbook'], help='Specify the type of rules to search and display') parser.add_argument('-p', '--product', metavar='PRODUCT', type=str, default=[], action='append', help='Search only rules in these products') parser.add_argument('-f', '--format', choices=['table', 'json'], default='table', help='Output format') return parser def _load_lint_rules(args) -> Iterable[LintRule]: """Load and return all lint rules from the repository.""" #pylint:disable=protected-access product_patterns = lint_command._parse_rule_pattern(args.product) repo = lint.LintRuleRepository(load_extended=True, include=product_patterns) #pylint:disable=protected-access lint_command._load_repository_rules(repo) return repo.rules_to_run def _load_runbook_rules() -> Dict[str, DiagnosticTree]: """Load and return all runbook rules. """ #pylint:disable=protected-access runbook_command._load_runbook_rules(runbook.__name__) return runbook.RunbookRegistry def run(argv=None): """Run the search command and return the report.""" # Initialize argument parser parser = _init_search_args_parser() args = parser.parse_args(argv) # Initialize configuration config.init(vars(args), terminal_output.is_cloud_shell()) # Setup logging logger = logging.getLogger() logger.handlers = [] if config.get('verbose') >= 2: logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) terminal = terminal_output.TerminalOutput() terminal.display_banner() _search_rules(args) def _rank_runbook_rules(rules: Dict, args) -> List[Tuple[int, str, DiagnosticTree]]: """Rank runbook rules based on the keywords and return a sorted list.""" ranked_rules: List[Tuple[int, str, DiagnosticTree]] = [] keywords = args.search keywords = [kw.lower() for kw in keywords] for name, obj in rules.items(): rule = obj(None) if args.product and rule.product not in args.product: continue rule_name = rule.id.lower() description = rule.__doc__.lower() kw_count = sum(rule.keywords.count(kw) for kw in keywords) if hasattr( rule, 'keywords') else 0 name_count = sum(rule_name.count(keyword) for keyword in keywords) description_count = sum(description.count(keyword) for keyword in keywords) score = (kw_count * 3) + (name_count * 2) + description_count if score > 0: # Use negative score to achieve a max-heap heapq.heappush(ranked_rules, (-score, name, rule)) return [ heapq.heappop(ranked_rules) for _ in range(min(len(ranked_rules), args.limit_per_type)) ] def _rank_lint_rules(rules: Iterable[LintRule], args) -> List[Tuple[int, str, LintRule]]: """Rank lint rules based on the keywords and return a sorted list """ ranked_rules: List[Tuple[int, str, LintRule]] = [] keywords = args.search keywords = [kw.lower() for kw in keywords] for rule in rules: name = f'{rule.product}/{rule.rule_class}/{rule.rule_id}'.lower() short_desc = rule.short_desc.lower() long_desc = rule.long_desc.lower() kw_count = sum(rule.keywords.count(keyword) for keyword in keywords) if rule.keywords else 0 short_desc_count = sum(short_desc.count(keyword) for keyword in keywords) long_desc_count = sum(long_desc.count(keyword) for keyword in keywords) score = (kw_count * 3) + (short_desc_count + long_desc_count) * 2 if score > 0: # Use negative score to achieve a max-heap heapq.heappush(ranked_rules, (-score, name, rule)) return [ heapq.heappop(ranked_rules) for _ in range(min(len(ranked_rules), args.limit_per_type)) ] def _search_rules(args) -> None: """Search and display rules based on the search arguments.""" matched_lint_rules = [] matched_runbook_rules = [] # Load the gcpdiag rules lint_rules = _load_lint_rules(args) if 'lint' in args.rule_type else [] runbook_rules = _load_runbook_rules() if 'runbook' in args.rule_type else {} if 'lint' in args.rule_type: matched_lint_rules = _rank_lint_rules(lint_rules, args) if 'runbook' in args.rule_type: matched_runbook_rules = _rank_runbook_rules(runbook_rules, args) all_rules: Dict[str, Any] = {} if matched_lint_rules: all_rules['lint'] = [{ 'id': r[1], 'type': 'lint', 'description': r[2].short_desc, 'full_description': r[2].__doc__, 'doc_url': r[2].doc_url } for r in matched_lint_rules] if matched_runbook_rules: all_rules['runbook'] = [] for r in matched_runbook_rules: # Make the type serializable for value in r[2].parameters.values(): value['type'] = value['type'].__name__ all_rules['runbook'].append({ 'id': r[1], 'type': 'runbook', 'description': r[2].short_desc, 'full_description': r[2].__doc__, 'doc_url': r[2].doc_url, 'parameters': r[2].parameters }) if args.format == 'json': print(json.dumps(all_rules, indent=2)) else: _print(all_rules) def _print(all_rules: dict) -> None: """Print the rules in a formatted table using native Python API and blessings for styling.""" term = Terminal() # Print headings print(term.bold + 'Filtered Rules' + term.normal) print('=' * 14) # Print rules for rule_type in all_rules.values(): for rule in rule_type: id_ = rule['id'] type_ = rule['type'] desc = rule['description'] doc_url = rule['doc_url'] params = '' print( f'Execution ID: {id_}\nRule Type: {type_}\nShort Description: {desc}\nDoc URL: {doc_url}' ) if rule['type'] == 'runbook': params = ', '.join(k for k, v in rule['parameters'].items() if v.get('required', False)) print(f'Required Parameters: {params}') params = ', '.join(k for k, v in rule['parameters'].items() if not v.get('required', False)) print(f'Optional Parameters: {params}') print('') ================================================ FILE: gcpdiag/search/command_test.py ================================================ # Copyright 2024 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. """ Test gcpdiag search command""" import unittest from argparse import Namespace from unittest import mock from gcpdiag.lint import LintRule from gcpdiag.runbook import DiagnosticTree from gcpdiag.search import command as search_cmd class TestGcpdiagSearchCommand(unittest.TestCase): """Unit tests for gcpdiag search command argument parsing and rule searching.""" # pylint: disable=protected-access def setUp(self): self.parser = search_cmd._init_search_args_parser() def test_no_search_terms(self): """Test case when no search terms are provided.""" with self.assertRaises(SystemExit): self.parser.parse_args([]) def test_single_search_term(self): """Test case with a single search term.""" args = self.parser.parse_args(['test-keyword']) self.assertEqual(args.search, ['test-keyword']) self.assertEqual(args.limit_per_type, 10) self.assertEqual(args.rule_type, ['lint', 'runbook']) self.assertEqual(args.product, []) self.assertEqual(args.format, 'table') def test_multiple_search_terms(self): """Test case with multiple search terms.""" args = self.parser.parse_args(['test-keyword', 'public']) self.assertEqual(args.search, ['test-keyword', 'public']) def test_limit_argument(self): """Test case with the limit argument.""" args = self.parser.parse_args(['test-keyword', '--limit-per-type', '5']) self.assertEqual(args.limit_per_type, 5) def test_rule_type_argument(self): """Test case with the rule-type argument.""" args = self.parser.parse_args(['test-keyword', '--rule-type', 'lint']) self.assertEqual(args.rule_type, 'lint') def test_product_argument(self): """Test case with the product argument.""" args = self.parser.parse_args(['test-keyword', '--product', 'prod']) self.assertEqual(args.product, ['prod']) def test_format_argument(self): """Test case with the format argument.""" args = self.parser.parse_args(['test-keyword', '--format', 'json']) self.assertEqual(args.format, 'json') def test_all_arguments(self): """Test case with all arguments.""" args = self.parser.parse_args([ 'test-keyword', 'public', '--limit-per-type', '2', '--rule-type', 'runbook', '--product', 'prod', '--format', 'json' ]) self.assertEqual(args.search, ['test-keyword', 'public']) self.assertEqual(args.limit_per_type, 2) self.assertEqual(args.rule_type, 'runbook') self.assertEqual(args.product, ['prod']) self.assertEqual(args.format, 'json') @mock.patch('gcpdiag.search.command._load_lint_rules') @mock.patch('gcpdiag.search.command._load_runbook_rules') def test_search_rules(self, mock_load_runbook_rules, mock_load_lint_rules): """Test case for search rules functionality.""" mock_load_lint_rules.return_value = [] mock_load_runbook_rules.return_value = {} args = self.parser.parse_args([ 'test-keyword', 'public', '--limit-per-type', '2', '--rule-type', 'runbook', '--product', 'prod' ]) search_cmd._search_rules(args) mock_load_lint_rules.assert_not_called() mock_load_runbook_rules.assert_called_once() @mock.patch('gcpdiag.search.command._print') @mock.patch('gcpdiag.search.command._rank_runbook_rules') @mock.patch('gcpdiag.search.command._rank_lint_rules') def test_search_rules_output(self, mock_rank_lint_rules, mock_rank_runbook_rules, mock_print): """Test case for search rules output functionality.""" mock_rank_lint_rules.return_value = [] mock_rank_runbook_rules.return_value = [] args = self.parser.parse_args([ 'test-keyword', 'public', '--limit-per-type', '2', '--rule-type', 'runbook', '--product', 'prod' ]) search_cmd._search_rules(args) mock_print.assert_called_once_with({}) class TestRankingFunctions(unittest.TestCase): """Unit tests for ranking functions in gcpdiag search command.""" # pylint: disable=protected-access class TestDT1(DiagnosticTree): id = 'rule1' product = 'prod' __doc__ = 'This is a test rule for test-issue' keywords = ['issue-kw', 'public'] class TestDT2(DiagnosticTree): id = 'rule2' product = 'prod' __doc__ = 'Another test rule for issue-kw2' keywords = ['issue-kw2', 'engine'] class TestDT3(DiagnosticTree): id = 'rule3' product = 'another-prod' __doc__ = 'Another test rule for storage' keywords = ['storage'] def setUp(self): self.runbook_rules = { 'rule1': self.TestDT1, 'rule2': self.TestDT2, 'rule3': self.TestDT3 } self.lint_rules = [ LintRule(product='prod', rule_class='class1', rule_id='rule1', short_desc='Test lint rule for SSH', long_desc='Detailed desc about SSH and issue-kw2', keywords=['issue-kw', 'issue-kw2', 'lint']), LintRule(product='prod', rule_class='class2', rule_id='rule2', short_desc='Another lint rule for engine', long_desc='Detailed desc about engine', keywords=['engine']), LintRule(product='another-prod', rule_class='class1', rule_id='rule3', short_desc='Rule for storage', long_desc='Detailed desc about storage', keywords=['storage', 'public']), ] def test_rank_runbook_rules_max_heap(self): """Test case for ensuring max-heap behavior in runbook rules ranking.""" args = Namespace(search=['test'], limit_per_type=2, product=['search']) ranked_rules = search_cmd._rank_runbook_rules(self.runbook_rules, args) self.assertEqual(len(ranked_rules), 2) # Ensure the highest score is first self.assertTrue(-ranked_rules[0][0] >= -ranked_rules[1][0]) def test_rank_runbook_rules_frequency(self): """Test case for ensuring correct frequency calculation in runbook rules ranking.""" args = Namespace(search=['issue-kw', 'public'], limit_per_type=2, product=['search']) ranked_rules = search_cmd._rank_runbook_rules(self.runbook_rules, args) self.assertEqual(len(ranked_rules), 2) score, name, _ = ranked_rules[0] self.assertEqual(name, 'rule1') self.assertEqual(-score, 6) # 3 for keyword 'issue-kw' and 3 for 'public' def test_rank_lint_rules_frequency(self): """Test case for ensuring correct frequency calculation in lint rules ranking.""" args = Namespace(search=['issue-kw', 'issue-kw2'], limit_per_type=2, product=['prod']) ranked_rules = search_cmd._rank_lint_rules(self.lint_rules, args) self.assertEqual(len(ranked_rules), 1) score, name, _ = ranked_rules[0] self.assertEqual(name, 'prod/class1/rule1') self.assertEqual( -score, 10 ) # 3 for keyword 'issue-kw', 'issue-kw2' and 2 for 'issue-kw2' in description def test_rank_lint_rules_max_heap(self): """Test case for ensuring max-heap behavior in lint rules ranking.""" args = Namespace(search=['lint', 'rule'], limit_per_type=3, product=['prod', 'another-prod']) ranked_rules = search_cmd._rank_lint_rules(self.lint_rules, args) self.assertEqual(len(ranked_rules), 3) # Ensure the highest score is first self.assertTrue(-ranked_rules[0][0] >= -ranked_rules[1][0]) self.assertTrue(-ranked_rules[1][0] >= -ranked_rules[2][0]) ================================================ FILE: gcpdiag/search/util.py ================================================ # Copyright 2024 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. ================================================ FILE: gcpdiag/search/util_test.py ================================================ # Copyright 2024 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. ================================================ FILE: gcpdiag/types.py ================================================ # Copyright 2025 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. """Custom datatype.""" import re class Email: """Custom datatype for validating GCP email addresses. This class provides functionality to validate email addresses using a regular expression. It ensures that the email address conforms to the standard email format. Attributes: EMAIL_REGEX (Pattern): A compiled regular expression for email validation. """ EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$') def __init__(self, email: str): """Initialize an Email object. Args: email (str): The email address to validate and store. """ if not self.is_valid(email): raise ValueError(f'Invalid email address: {email}') self.email = email @staticmethod def is_valid(email: str) -> bool: """Check if the provided email address is valid. Args: email (str): The email address to validate. Returns: bool: True if the email address is valid, False otherwise. """ return bool(Email.EMAIL_REGEX.match(email)) def __str__(self): """Return the string representation of the email address.""" return self.email def __eq__(self, other): """Check if two Email objects are equal.""" return isinstance(other, Email) and self.email == other.email def __repr__(self): """Return the official string representation of the Email object.""" return f'Email({self.email})' ================================================ FILE: gcpdiag/types_test.py ================================================ # Copyright 2025 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. """Unit tests for validating custom datatypes.""" import unittest from gcpdiag.queries.iam import (DEFAULT_SERVICE_ACCOUNT_DOMAINS, SERVICE_AGENT_DOMAINS) from gcpdiag.types import Email # Import the Email class REGULAR_EMAIL = ('example.com', 'example.com.gh', 'example.engineer') class TestServiceAccountDomains(unittest.TestCase): """Unit tests for validating service account and regular email domains. This test suite ensures that: - Service account domains from DEFAULT_SERVICE_ACCOUNT_DOMAINS and SERVICE_AGENT_DOMAINS can form valid email addresses. - Regular email domains also form valid email addresses. """ def test_default_service_account_domains(self): """Test that emails formed with DEFAULT_SERVICE_ACCOUNT_DOMAINS are valid.""" for domain in DEFAULT_SERVICE_ACCOUNT_DOMAINS: email = f'test@{domain}' self.assertTrue(Email.is_valid(email), f"Email '{email}' is not valid") def test_service_agent_domains(self): """Test that emails formed with SERVICE_AGENT_DOMAINS are valid.""" for domain in SERVICE_AGENT_DOMAINS: email = f'test@{domain}' self.assertTrue(Email.is_valid(email), f"Email '{email}' is not valid") def test_regular_email(self): """Test that emails formed with REGULAR_EMAIL domains are valid.""" for domain in REGULAR_EMAIL: email = f'test@{domain}' self.assertTrue(Email.is_valid(email), f"Email '{email}' is not valid") ================================================ FILE: gcpdiag/utils.py ================================================ # Copyright 2021 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. """Various utility functions.""" import json import re from typing import Any, Dict, List, Optional DOMAIN_RES_NAME_MATCH = r'(http(s)?:)?//([a-z0-9][-a-z0-9]{1,61}[a-z0-9]\.)+[a-z]{2,}/' RES_NAME_KEY = r'[a-z][-a-z0-9]*' RES_NAME_VALUE = r'[a-z0-9][-a-z0-9_?]*' REL_RES_NAME_MATCH = r'({key}/{value}/)*{key}/{value}'.format( key=RES_NAME_KEY, value=RES_NAME_VALUE) REGION_NAME_MATCH = r'^\w+-\w+$' ZONE_NAME_MATCH = r'^(\w+-\w+)-\w+$' FULL_RES_NAME_MATCH = DOMAIN_RES_NAME_MATCH + REL_RES_NAME_MATCH class VersionComponentsParser: """ Simple helper class to parse version string to components """ version_str: str def __init__(self, version_str: str): self.version_str = str(version_str) def get_components(self) -> List[int]: cs = [int(s) for s in self.extract_base_version().split('.')] # example: 1 -> 1.0.0, 1.2 -> 1.2.0 cs += [0] * (3 - len(cs)) return cs def extract_base_version(self) -> str: m = re.search(r'[\d\.]+', self.version_str) if m is None: raise ValueError(f'Can not parse version {self.version_str}') return m.group(0) class Version: """ Represents Version """ version_str: str major: int minor: int patch: int def __init__(self, version_str: str): # example: 1.19.13-gke.701 self.version_str = version_str self.major, self.minor, self.patch = \ VersionComponentsParser(version_str).get_components() def same_major(self, other_version: 'Version') -> bool: return self.major == other_version.major def diff_minor(self, other_version: 'Version') -> int: return abs(self.minor - other_version.minor) def __str__(self) -> str: return self.version_str def __add__(self, other: object) -> object: if isinstance(other, str): return self.version_str + other raise TypeError(f'Can not concatenate Version and {type(other)}') def __radd__(self, other: object) -> object: if isinstance(other, str): return other + self.version_str raise TypeError(f'Can not concatenate and {type(other)} Version') def __eq__(self, other: object) -> bool: if isinstance(other, str): return other == self.version_str if isinstance(other, Version): return self.version_str == other.version_str raise AttributeError('Can not compare Version object with {}'.format( type(other))) def __lt__(self, other): return self.major < other.major or self.minor < other.minor or self.patch < other.patch def __ge__(self, other): return self.major >= other.major and self.minor >= other.minor and self.patch >= other.patch class GcpApiError(Exception): """Exception raised for GCP API/HTTP errors. Attributes: response -- API/HTTP response """ @property def status(self) -> Optional[int]: try: return self.response.resp.status except (KeyError, AttributeError): return None def __init__(self, response='An error occurred during the GCP API call', reason=None, service=None): self.response = response self.reason = reason self.service = service # see also: https://github.com/googleapis/google-api-python-client/issues/662 try: content = json.loads(response.content) if hasattr(response, 'content') else response if isinstance( content, dict) and 'error' in content and 'message' in content['error']: self.message = content['error']['message'] try: for c in content['error']['details']: if c['@type'] == 'type.googleapis.com/google.rpc.ErrorInfo': self.reason = c['reason'] self.service = c['metadata']['service'] except KeyError: pass else: self.message = str(response) except json.decoder.JSONDecodeError: self.message = response.content if isinstance(self.message, bytes): self.message = self.message.decode('utf-8') super().__init__(self.message) def __str__(self): return self.message def extract_value_from_res_name(resource_name: str, key: str) -> str: """Extract a value by a key from a resource name. Example: resource_name: projects/testproject/zones/us-central1-c key: zones return value: us-central1-c """ if not is_valid_res_name(resource_name): raise ValueError(f'invalid resource name: {resource_name}') path_items = resource_name.split('/') for i, item in enumerate(path_items): if item == key: if i + 1 < len(path_items): return path_items[i + 1] else: break raise ValueError(f'invalid resource name: {resource_name}') def get_region_by_res_name(res_name: str) -> str: return extract_value_from_res_name(res_name, 'locations') def get_zone_by_res_name(res_name: str) -> str: return extract_value_from_res_name(res_name, 'zones') def get_project_by_res_name(res_name: str) -> str: return extract_value_from_res_name(res_name, 'projects') def is_region(name: str) -> bool: return bool(re.match(REGION_NAME_MATCH, name)) def is_zone(name: str) -> bool: return bool(re.match(ZONE_NAME_MATCH, name)) def zone_region(zone: str) -> str: """Get region name of a zone.""" m = re.match(ZONE_NAME_MATCH, zone) if not m: raise ValueError('can\'t parse zone name: <%s>' % zone) return m.group(1) def is_full_res_name(res_name: str) -> bool: return bool(re.fullmatch(FULL_RES_NAME_MATCH, res_name, flags=re.IGNORECASE)) def is_rel_res_name(res_name: str) -> bool: return bool(re.fullmatch(REL_RES_NAME_MATCH, res_name, flags=re.IGNORECASE)) def is_valid_res_name(res_name: str) -> bool: return is_rel_res_name(res_name) or is_full_res_name(res_name) def iter_dictlist(dictlist: Dict[Any, List[Any]]): """Given a dictionary of lists, iterate over the list elements returning tuples (dict_key, item), (dict_key, item), ...""" for (k, v) in dictlist.items(): for i in v: yield (k, i) def format_fault_list(fault_list) -> str: return '\n'.join(fault_list) ================================================ FILE: gcpdiag/utils_test.py ================================================ # Copyright 2021 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. # Lint as: python3 """Test code in utils.py.""" import httplib2 import pytest from googleapiclient import errors from gcpdiag import utils # https://github.com/googleapis/google-api-python-client/blob/master/tests/test_errors.py JSON_ERROR_CONTENT = b""" { "error": { "message": "country is required" } } """ class TestGcpApiError(): def test_exception(self): """GcpApiError correctly formats an error from a Google API JSON string.""" with pytest.raises(utils.GcpApiError) as api_error: resp = httplib2.Response({}) resp.reason = 'foobar' mocked_error = errors.HttpError(content=JSON_ERROR_CONTENT, resp=resp) raise utils.GcpApiError(mocked_error) assert 'country is required' in str(api_error.value) def test_is_region(): """is_region() should return correct result when presented with region or zone string.""" assert utils.is_region('us-central1') assert not utils.is_region('us-central1-b') def test_is_full_res_name(): """is_full_res_name() should return correct result for a valid/invalid full resource name.""" assert utils.is_full_res_name( 'https://library.googleapis.com/shelves/shelf1/books/book2') assert utils.is_full_res_name('//googleapis.com/shelves/shelf1/books/book2') assert not utils.is_full_res_name('shelves/shelf1/books/book2') def test_is_rel_res_name(): """is_rel_res_name() should return correct result for a valid/invalid relative resource name.""" assert not utils.is_rel_res_name( '//library.googleapis.com/shelves/shelf1/books/book2') assert utils.is_rel_res_name( 'projects/testproject/locations/us-central1/keyRings/usckr') def test_is_valid_res_name(): """is_valid_res_name() should return correct result for a valid/invalid resource name.""" assert utils.is_valid_res_name('//googleapis.com/shelves/shelf1/books/book2') assert utils.is_valid_res_name('//googleapis.com/shelves/shelf1/books/2') assert utils.is_valid_res_name('shelves/shelf1/books/book2') assert not utils.is_valid_res_name( 'googleapis.com/shelves/shelf1/books/book2') assert not utils.is_valid_res_name('//googleapis.com/shelves/shelf1/books/-') assert not utils.is_valid_res_name('//googleapis.com/shelves/shelf1/2/2') assert not utils.is_valid_res_name('shelves/shelf1/books') assert not utils.is_valid_res_name('googleapis.com/shelves') assert not utils.is_valid_res_name('googleapis') def test_get_region_by_res_name(): """get_region_by_res_name() should extract a region name from a resource name.""" result = utils.get_region_by_res_name( 'projects/testproject/locations/us-central1/keyRings/usckr') assert result == 'us-central1' def test_get_zone_by_res_name(): """get_zone_by_res_name() should extract a zone name from a resource name.""" result = utils.get_zone_by_res_name( 'projects/testproject/zones/us-central1-c/keyRings/usckr') assert result == 'us-central1-c' def test_get_project_by_res_name(): """get_project_by_res_name() should extract a project name from a resource name.""" result = utils.get_project_by_res_name( 'projects/testproject/locations/us-central1/keyRings/usckr') assert result == 'testproject' def test_extract_value_from_res_name(): """extract_value_from_res_name() should extract a value by a given key from a resource name.""" result = utils.extract_value_from_res_name( 'projects/testproject/locations/us-central1/keyRings/usckr', 'keyRings') assert result == 'usckr' with pytest.raises(ValueError): utils.extract_value_from_res_name('', 'keyRings') with pytest.raises(ValueError): utils.extract_value_from_res_name( 'projects/testproject/locations/us-central1', 'us-central1') result = utils.extract_value_from_res_name( 'projects/testproject/locations/us-east1/keyRings/testkeyring/cryptoKeys/test_key', 'projects') assert result == 'testproject' def test_iter_dictlist(): """Verify that test_iterdictlist iterates correctly.""" test_dict = {'a': [1, 2], 'b': [3]} assert list(utils.iter_dictlist(test_dict)) == [('a', 1), ('a', 2), ('b', 3)] class TestVersionComponentsParser(): """Test Class for Version Components Parser.""" def test_extract_base_version(self): """Verify that the base version can be extracted correctly from a version string.""" vcp1 = utils.VersionComponentsParser('1.14.3-asm.1') vcp2 = utils.VersionComponentsParser('release-1.3-20200214-10-15') vcp3 = utils.VersionComponentsParser('gkeVersion') vcp4 = utils.VersionComponentsParser('1.19.13-gke.701') assert vcp1.extract_base_version() == '1.14.3' assert vcp2.extract_base_version() == '1.3' with pytest.raises(Exception): vcp3.extract_base_version() assert vcp4.extract_base_version() == '1.19.13' ================================================ FILE: pyinstaller/hook-gcpdiag.lint.py ================================================ # Copyright 2021 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. """pyinstaller configuration for gcpdiag.lint.""" from PyInstaller.utils.hooks import collect_submodules # update also bin/precommit-required-files hiddenimports = \ collect_submodules('gcpdiag.lint.apigee') + \ collect_submodules('gcpdiag.lint.asm') + \ collect_submodules('gcpdiag.lint.bigquery') + \ collect_submodules('gcpdiag.lint.billing') + \ collect_submodules('gcpdiag.lint.cloudrun') + \ collect_submodules('gcpdiag.lint.cloudsql') + \ collect_submodules('gcpdiag.lint.composer') + \ collect_submodules('gcpdiag.lint.dataflow') + \ collect_submodules('gcpdiag.lint.datafusion') + \ collect_submodules('gcpdiag.lint.dataproc') + \ collect_submodules('gcpdiag.lint.gae') + \ collect_submodules('gcpdiag.lint.gcb') + \ collect_submodules('gcpdiag.lint.gce') + \ collect_submodules('gcpdiag.lint.gcf') + \ collect_submodules('gcpdiag.lint.gcs') + \ collect_submodules('gcpdiag.lint.gke') + \ collect_submodules('gcpdiag.lint.iam') + \ collect_submodules('gcpdiag.lint.interconnect') + \ collect_submodules('gcpdiag.lint.lb') + \ collect_submodules('gcpdiag.lint.notebooks') + \ collect_submodules('gcpdiag.lint.pubsub') + \ collect_submodules('gcpdiag.lint.tpu') + \ collect_submodules('gcpdiag.lint.vertex') + \ collect_submodules('gcpdiag.lint.vpc') ================================================ FILE: pyinstaller/hook-gcpdiag.queries.py ================================================ # Copyright 2021 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. """pyinstaller configuration for gcpdiag.queries.""" datas = [('gcpdiag/queries/client_secrets.json', 'gcpdiag/queries')] ================================================ FILE: pyinstaller/hook-gcpdiag.runbook.py ================================================ # Copyright 2024 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. """pyinstaller configuration for gcpdiag.runbook.""" from PyInstaller.utils.hooks import collect_submodules # update also bin/precommit-required-files # note: keep in sync with modules in bin/runbook-starter-code-generator hiddenimports = \ collect_submodules('gcpdiag.runbook.bigquery') + \ collect_submodules('gcpdiag.runbook.cloudrun') + \ collect_submodules('gcpdiag.runbook.composer') + \ collect_submodules('gcpdiag.runbook.crm') + \ collect_submodules('gcpdiag.runbook.dataflow') + \ collect_submodules('gcpdiag.runbook.dataproc') + \ collect_submodules('gcpdiag.runbook.gce') + \ collect_submodules('gcpdiag.runbook.gcp') + \ collect_submodules('gcpdiag.runbook.gke') + \ collect_submodules('gcpdiag.runbook.gce.util') + \ collect_submodules('gcpdiag.runbook.iam') + \ collect_submodules('gcpdiag.runbook.lb') + \ collect_submodules('gcpdiag.runbook.logs') + \ collect_submodules('gcpdiag.runbook.monitoring') + \ collect_submodules('gcpdiag.runbook.nat') + \ collect_submodules('gcpdiag.runbook.pubsub') + \ collect_submodules('gcpdiag.runbook.vertex') + \ collect_submodules('gcpdiag.runbook.vpc') + \ collect_submodules('gcpdiag.runbook.interconnect') + \ collect_submodules('gcpdiag.runbook.vpn') ================================================ FILE: pyinstaller/hook-googleapiclient.model.py ================================================ # Copyright 2021 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. """pyinstaller configuration for googleapiclient.""" from PyInstaller.utils.hooks import collect_data_files, copy_metadata # googleapiclient.model queries the library version via # pkg_resources.get_distribution("google-api-python-client").version, # so we need to collect that package's metadata datas = copy_metadata('google_api_python_client') datas += collect_data_files('googleapiclient.discovery', excludes=['*.txt', '**/__pycache__']) datas += collect_data_files('googleapiclient.discovery_cache', excludes=['*.txt', '**/__pycache__']) ================================================ FILE: pyinstaller.spec ================================================ # -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['bin/gcpdiag'], binaries=[], datas=[], hiddenimports=[], hookspath=['pyinstaller'], runtime_hooks=[], excludes=['django'], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) # add runbook templates as data for root, dirs, files in os.walk("gcpdiag/runbook"): for f in files: if f.endswith("jinja"): path = os.path.join(root, f) a.datas.append((path, path, 'DATA')) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='gcpdiag', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True ) ================================================ FILE: requirements.in ================================================ # To ensure secure and reproducible builds, we use dependency pinning with hash verification for our build tools (like pipenv and wheel). # requirements.in: This is the source file. It lists our direct top-level dependencies. Edit this file if you need to add or change a package. # # requirements.txt: This is the generated lockfile. It contains the exact versions and cryptographic hashes for all packages and their sub-dependencies. Do not edit this file manually. # # How to Update Dependencies # If you need to add a package or update versions, follow these steps: # # Prerequisite: Install pip-tools if you haven't already: # command: pip install pip-tools # # Edit Source: If adding a new package, add it to requirements.in. # # Compile & Generate Hashes: Run the following command in the project root. This will resolve dependencies, fetch the latest hashes from PyPI, and update requirements.txt: # command: pip-compile --generate-hashes --allow-unsafe requirements.in # flag --allow-unsafe flag tells pip-tools to treat "unsafe" packages (like setuptools) as normal packages that must be pinned. # # Commit: Commit both requirements.in and the updated requirements.txt. pipenv wheel setuptools safety ================================================ FILE: requirements.txt ================================================ # # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile --allow-unsafe --generate-hashes --index-url=https://pypi.org/simple requirements.in # annotated-types==0.7.0 \ --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 # via pydantic anyio==4.12.0 \ --hash=sha256:73c693b567b0c55130c104d0b43a9baf3aa6a31fc6110116509f27bf75e21ec0 \ --hash=sha256:dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb # via httpx authlib==1.6.5 \ --hash=sha256:3e0e0507807f842b02175507bdee8957a1d5707fd4afb17c32fb43fee90b6e3a \ --hash=sha256:6aaf9c79b7cc96c900f0b284061691c5d4e61221640a948fe690b556a6d6d10b # via safety certifi==2025.11.12 \ --hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \ --hash=sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316 # via # httpcore # httpx # pipenv # requests cffi==2.0.0 \ --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf # via cryptography charset-normalizer==3.4.4 \ --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 # via requests click==8.3.1 \ --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 # via # nltk # safety # typer cryptography==46.0.3 \ --hash=sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217 \ --hash=sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d \ --hash=sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc \ --hash=sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71 \ --hash=sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971 \ --hash=sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a \ --hash=sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926 \ --hash=sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc \ --hash=sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d \ --hash=sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b \ --hash=sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20 \ --hash=sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044 \ --hash=sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3 \ --hash=sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715 \ --hash=sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4 \ --hash=sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506 \ --hash=sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f \ --hash=sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0 \ --hash=sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683 \ --hash=sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3 \ --hash=sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21 \ --hash=sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91 \ --hash=sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c \ --hash=sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8 \ --hash=sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df \ --hash=sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c \ --hash=sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb \ --hash=sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7 \ --hash=sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04 \ --hash=sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db \ --hash=sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459 \ --hash=sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea \ --hash=sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914 \ --hash=sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717 \ --hash=sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9 \ --hash=sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac \ --hash=sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32 \ --hash=sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec \ --hash=sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1 \ --hash=sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb \ --hash=sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac \ --hash=sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665 \ --hash=sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e \ --hash=sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb \ --hash=sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5 \ --hash=sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936 \ --hash=sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de \ --hash=sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372 \ --hash=sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54 \ --hash=sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422 \ --hash=sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849 \ --hash=sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c \ --hash=sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963 \ --hash=sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018 # via authlib distlib==0.4.0 \ --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d # via virtualenv dparse==0.6.4 \ --hash=sha256:90b29c39e3edc36c6284c82c4132648eaf28a01863eb3c231c2512196132201a \ --hash=sha256:fbab4d50d54d0e739fbb4dedfc3d92771003a5b9aa8545ca7a7045e3b174af57 # via # safety # safety-schemas filelock==3.20.0 \ --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \ --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4 # via # safety # virtualenv h11==0.16.0 \ --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 # via httpcore httpcore==1.0.9 \ --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 # via httpx httpx==0.28.1 \ --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad # via safety idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 # via # anyio # httpx # requests jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 # via safety joblib==1.5.2 \ --hash=sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55 \ --hash=sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241 # via nltk markdown-it-py==4.0.0 \ --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 # via rich markupsafe==3.0.3 \ --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 # via jinja2 marshmallow==4.1.1 \ --hash=sha256:550aa14b619072f0a8d8184911b3f1021c5c32587fb27318ddf81ce0d0029c9d \ --hash=sha256:9038db4cceb849ce2b8676ccf3d8e5b5e634ac499e291397efa260aa796c385a # via safety mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py nltk==3.9.2 \ --hash=sha256:0f409e9b069ca4177c1903c3e843eef90c7e92992fa4931ae607da6de49e1419 \ --hash=sha256:1e209d2b3009110635ed9709a67a1a3e33a10f799490fa71cf4bec218c11c88a # via safety packaging==25.0 \ --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \ --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f # via # dparse # pipenv # safety # safety-schemas pipenv==2025.1.3 \ --hash=sha256:b746bc56685ff92598b52c97788e3f5187eef1eacea370cef59450ec0565f9b7 \ --hash=sha256:fbdb4740aba05c007ddd4f841f569778b0cc28304dbc7d2071cb22b74e08586b # via -r requirements.in platformdirs==4.5.1 \ --hash=sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda \ --hash=sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31 # via virtualenv pycparser==2.23 \ --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 # via cffi pydantic==2.12.5 \ --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d # via # safety # safety-schemas pydantic-core==2.41.5 \ --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 # via pydantic pygments==2.19.2 \ --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b # via rich regex==2025.11.3 \ --hash=sha256:04d2765516395cf7dda331a244a3282c0f5ae96075f728629287dfa6f76ba70a \ --hash=sha256:087511f5c8b7dfbe3a03f5d5ad0c2a33861b1fc387f21f6f60825a44865a385a \ --hash=sha256:08b884f4226602ad40c5d55f52bf91a9df30f513864e0054bad40c0e9cf1afb7 \ --hash=sha256:0d31e08426ff4b5b650f68839f5af51a92a5b51abd8554a60c2fbc7c71f25d0b \ --hash=sha256:0f9397d561a4c16829d4e6ff75202c1c08b68a3bdbfe29dbfcdb31c9830907c6 \ --hash=sha256:10483eefbfb0adb18ee9474498c9a32fcf4e594fbca0543bb94c48bac6183e2e \ --hash=sha256:149eb0bba95231fb4f6d37c8f760ec9fa6fabf65bab555e128dde5f2475193ec \ --hash=sha256:1e00ec2970aab10dc5db34af535f21fcf32b4a31d99e34963419636e2f85ae39 \ --hash=sha256:1eb1ebf6822b756c723e09f5186473d93236c06c579d2cc0671a722d2ab14281 \ --hash=sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01 \ --hash=sha256:1ff0d190c7f68ae7769cd0313fe45820ba07ffebfddfaa89cc1eb70827ba0ddc \ --hash=sha256:2292cd5a90dab247f9abe892ac584cb24f0f54680c73fcb4a7493c66c2bf2467 \ --hash=sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36 \ --hash=sha256:22c12d837298651e5550ac1d964e4ff57c3f56965fc1812c90c9fb2028eaf267 \ --hash=sha256:22dd622a402aad4558277305350699b2be14bc59f64d64ae1d928ce7d072dced \ --hash=sha256:22e7d1cdfa88ef33a2ae6aa0d707f9255eb286ffbd90045f1088246833223aee \ --hash=sha256:28ba4d69171fc6e9896337d4fc63a43660002b7da53fc15ac992abcf3410917c \ --hash=sha256:2ab815eb8a96379a27c3b6157fcb127c8f59c36f043c1678110cea492868f1d5 \ --hash=sha256:2b441a4ae2c8049106e8b39973bfbddfb25a179dda2bdb99b0eeb60c40a6a3af \ --hash=sha256:2fa2eed3f76677777345d2f81ee89f5de2f5745910e805f7af7386a920fa7313 \ --hash=sha256:32f74f35ff0f25a5021373ac61442edcb150731fbaa28286bbc8bb1582c89d02 \ --hash=sha256:3809988f0a8b8c9dcc0f92478d6501fac7200b9ec56aecf0ec21f4a2ec4b6009 \ --hash=sha256:3839967cf4dc4b985e1570fd8d91078f0c519f30491c60f9ac42a8db039be204 \ --hash=sha256:38af559ad934a7b35147716655d4a2f79fcef2d695ddfe06a06ba40ae631fa7e \ --hash=sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1 \ --hash=sha256:3b30bc921d50365775c09a7ed446359e5c0179e9e2512beec4a60cbcef6ddd50 \ --hash=sha256:3b3a5f320136873cc5561098dfab677eea139521cb9a9e8db98b7e64aef44cbc \ --hash=sha256:3bf28b1873a8af8bbb58c26cc56ea6e534d80053b41fb511a35795b6de507e6a \ --hash=sha256:3e0b11b2b2433d1c39c7c7a30e3f3d0aeeea44c2a8d0bae28f6b95f639927a69 \ --hash=sha256:3e816cc9aac1cd3cc9a4ec4d860f06d40f994b5c7b4d03b93345f44e08cc68bf \ --hash=sha256:3f8bf11a4827cc7ce5a53d4ef6cddd5ad25595d3c1435ef08f76825851343154 \ --hash=sha256:435bbad13e57eb5606a68443af62bed3556de2f46deb9f7d4237bc2f1c9fb3a0 \ --hash=sha256:43b4fb020e779ca81c1b5255015fe2b82816c76ec982354534ad9ec09ad7c9e3 \ --hash=sha256:442d86cf1cfe4faabf97db7d901ef58347efd004934da045c745e7b5bd57ac49 \ --hash=sha256:44f264d4bf02f3176467d90b294d59bf1db9fe53c141ff772f27a8b456b2a9ed \ --hash=sha256:454d9b4ae7881afbc25015b8627c16d88a597479b9dea82b8c6e7e2e07240dc7 \ --hash=sha256:4aecb6f461316adf9f1f0f6a4a1a3d79e045f9b71ec76055a791affa3b285850 \ --hash=sha256:4bf146dca15cdd53224a1bf46d628bd7590e4a07fbb69e720d561aea43a32b38 \ --hash=sha256:4c5238d32f3c5269d9e87be0cf096437b7622b6920f5eac4fd202468aaeb34d2 \ --hash=sha256:4e1e592789704459900728d88d41a46fe3969b82ab62945560a31732ffc19a6d \ --hash=sha256:509dc827f89c15c66a0c216331260d777dd6c81e9a4e4f830e662b0bb296c313 \ --hash=sha256:51c1c1847128238f54930edb8805b660305dca164645a9fd29243f5610beea34 \ --hash=sha256:5cf77eac15bd264986c4a2c63353212c095b40f3affb2bc6b4ef80c4776c1a28 \ --hash=sha256:5d9903ca42bfeec4cebedba8022a7c97ad2aab22e09573ce9976ba01b65e4361 \ --hash=sha256:61a08bcb0ec14ff4e0ed2044aad948d0659604f824cbd50b55e30b0ec6f09c73 \ --hash=sha256:62ba394a3dda9ad41c7c780f60f6e4a70988741415ae96f6d1bf6c239cf01379 \ --hash=sha256:639431bdc89d6429f6721625e8129413980ccd62e9d3f496be618a41d205f160 \ --hash=sha256:64350685ff08b1d3a6fff33f45a9ca183dc1d58bbfe4981604e70ec9801bbc26 \ --hash=sha256:6538241f45eb5a25aa575dbba1069ad786f68a4f2773a29a2bd3dd1f9de787be \ --hash=sha256:669dcfb2e38f9e8c69507bace46f4889e3abbfd9b0c29719202883c0a603598f \ --hash=sha256:66d559b21d3640203ab9075797a55165d79017520685fb407b9234d72ab63c62 \ --hash=sha256:6dd329a1b61c0ee95ba95385fb0c07ea0d3fe1a21e1349fa2bec272636217118 \ --hash=sha256:728a9d2d173a65b62bdc380b7932dd8e74ed4295279a8fe1021204ce210803e7 \ --hash=sha256:732aea6de26051af97b94bc98ed86448821f839d058e5d259c72bf6d73ad0fc0 \ --hash=sha256:74d04244852ff73b32eeede4f76f51c5bcf44bc3c207bc3e6cf1c5c45b890708 \ --hash=sha256:7521684c8c7c4f6e88e35ec89680ee1aa8358d3f09d27dfbdf62c446f5d4c695 \ --hash=sha256:75fa6f0056e7efb1f42a1c34e58be24072cb9e61a601340cc1196ae92326a4f9 \ --hash=sha256:78c2d02bb6e1da0720eedc0bad578049cad3f71050ef8cd065ecc87691bed2b0 \ --hash=sha256:795ea137b1d809eb6836b43748b12634291c0ed55ad50a7d72d21edf1cd565c4 \ --hash=sha256:7a50cd39f73faa34ec18d6720ee25ef10c4c1839514186fcda658a06c06057a2 \ --hash=sha256:7a7c7fdf755032ffdd72c77e3d8096bdcb0eb92e89e17571a196f03d88b11b3c \ --hash=sha256:7be0277469bf3bd7a34a9c57c1b6a724532a0d235cd0dc4e7f4316f982c28b19 \ --hash=sha256:7eb542fd347ce61e1321b0a6b945d5701528dca0cd9759c2e3bb8bd57e47964d \ --hash=sha256:7fe6e5440584e94cc4b3f5f4d98a25e29ca12dccf8873679a635638349831b98 \ --hash=sha256:81519e25707fc076978c6143b81ea3dc853f176895af05bf7ec51effe818aeec \ --hash=sha256:838441333bc90b829406d4a03cb4b8bf7656231b84358628b0406d803931ef32 \ --hash=sha256:849202cd789e5f3cf5dcc7822c34b502181b4824a65ff20ce82da5524e45e8e9 \ --hash=sha256:856a25c73b697f2ce2a24e7968285579e62577a048526161a2c0f53090bea9f9 \ --hash=sha256:87eb52a81ef58c7ba4d45c3ca74e12aa4b4e77816f72ca25258a85b3ea96cb48 \ --hash=sha256:885b26aa3ee56433b630502dc3d36ba78d186a00cc535d3806e6bfd9ed3c70ab \ --hash=sha256:8a3d571bd95fade53c86c0517f859477ff3a93c3fde10c9e669086f038e0f207 \ --hash=sha256:8e026094aa12b43f4fd74576714e987803a315c76edb6b098b9809db5de58f74 \ --hash=sha256:9697a52e57576c83139d7c6f213d64485d3df5bf84807c35fa409e6c970801c6 \ --hash=sha256:9b5aca4d5dfd7fbfbfbdaf44850fcc7709a01146a797536a8f84952e940cca76 \ --hash=sha256:9ddc42e68114e161e51e272f667d640f97e84a2b9ef14b7477c53aac20c2d59a \ --hash=sha256:9f95fbaa0ee1610ec0fc6b26668e9917a582ba80c52cc6d9ada15e30aa9ab9ad \ --hash=sha256:a12ab1f5c29b4e93db518f5e3872116b7e9b1646c9f9f426f777b50d44a09e8c \ --hash=sha256:a295ca2bba5c1c885826ce3125fa0b9f702a1be547d821c01d65f199e10c01e2 \ --hash=sha256:a4cb042b615245d5ff9b3794f56be4138b5adc35a4166014d31d1814744148c7 \ --hash=sha256:adad1a1bcf1c9e76346e091d22d23ac54ef28e1365117d99521631078dfec9de \ --hash=sha256:b4774ff32f18e0504bfc4e59a3e71e18d83bc1e171a3c8ed75013958a03b2f14 \ --hash=sha256:b6f78f98741dcc89607c16b1e9426ee46ce4bf31ac5e6b0d40e81c89f3481ea5 \ --hash=sha256:b7f9ee819f94c6abfa56ec7b1dbab586f41ebbdc0a57e6524bd5e7f487a878c7 \ --hash=sha256:ba0d8a5d7f04f73ee7d01d974d47c5834f8a1b0224390e4fe7c12a3a92a78ecc \ --hash=sha256:bac4200befe50c670c405dc33af26dad5a3b6b255dd6c000d92fe4629f9ed6a5 \ --hash=sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41 \ --hash=sha256:bce22519c989bb72a7e6b36a199384c53db7722fe669ba891da75907fe3587db \ --hash=sha256:bf3490bcbb985a1ae97b2ce9ad1c0f06a852d5b19dde9b07bdf25bf224248c95 \ --hash=sha256:c1e448051717a334891f2b9a620fe36776ebf3dd8ec46a0b877c8ae69575feb4 \ --hash=sha256:c54f768482cef41e219720013cd05933b6f971d9562544d691c68699bf2b6801 \ --hash=sha256:c56b4d162ca2b43318ac671c65bd4d563e841a694ac70e1a976ac38fcf4ca1d2 \ --hash=sha256:c9c30003b9347c24bcc210958c5d167b9e4f9be786cb380a7d32f14f9b84674f \ --hash=sha256:cc4076a5b4f36d849fd709284b4a3b112326652f3b0466f04002a6c15a0c96c1 \ --hash=sha256:cfe6d3f0c9e3b7e8c0c694b24d25e677776f5ca26dce46fd6b0489f9c8339391 \ --hash=sha256:d6c2d5919075a1f2e413c00b056ea0c2f065b3f5fe83c3d07d325ab92dce51d6 \ --hash=sha256:d8b4a27eebd684319bdf473d39f1d79eed36bf2cd34bd4465cdb4618d82b3d56 \ --hash=sha256:dbe6095001465294f13f1adcd3311e50dd84e5a71525f20a10bd16689c61ce0b \ --hash=sha256:dd16e78eb18ffdb25ee33a0682d17912e8cc8a770e885aeee95020046128f1ce \ --hash=sha256:ddd76a9f58e6a00f8772e72cff8ebcff78e022be95edf018766707c730593e1e \ --hash=sha256:df9eb838c44f570283712e7cff14c16329a9f0fb19ca492d21d4b7528ee6821e \ --hash=sha256:dfec44d532be4c07088c3de2876130ff0fbeeacaa89a137decbbb5f665855a0f \ --hash=sha256:e18bc3f73bd41243c9b38a6d9f2366cd0e0137a9aebe2d8ff76c5b67d4c0a3f4 \ --hash=sha256:e43586ce5bd28f9f285a6e729466841368c4a0353f6fd08d4ce4630843d3648a \ --hash=sha256:e6b49cd2aad93a1790ce9cffb18964f6d3a4b0b3dbdbd5de094b65296fce6e58 \ --hash=sha256:e6c7a21dffba883234baefe91bc3388e629779582038f75d2a5be918e250f0ed \ --hash=sha256:e721d1b46e25c481dc5ded6f4b3f66c897c58d2e8cfdf77bbced84339108b0b9 \ --hash=sha256:eadade04221641516fa25139273505a1c19f9bf97589a05bc4cfcd8b4a618031 \ --hash=sha256:ee3a83ce492074c35a74cc76cf8235d49e77b757193a5365ff86e3f2f93db9fd \ --hash=sha256:f117efad42068f9715677c8523ed2be1518116d1c49b1dd17987716695181efe \ --hash=sha256:f3b5a391c7597ffa96b41bd5cbd2ed0305f515fcbb367dfa72735679d5502364 \ --hash=sha256:f4ff94e58e84aedb9c9fce66d4ef9f27a190285b451420f297c9a09f2b9abee9 \ --hash=sha256:f99be08cfead2020c7ca6e396c13543baea32343b7a9a5780c462e323bd8872f \ --hash=sha256:fd0a5e563c756de210bb964789b5abe4f114dacae9104a47e1a649b910361536 \ --hash=sha256:feff9e54ec0dd3833d659257f5c3f5322a12eee58ffa360984b716f8b92983f4 \ --hash=sha256:ffcca5b9efe948ba0661e9df0fa50d2bc4b097c70b9810212d6b62f05d83b2dd # via nltk requests==2.32.5 \ --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf # via safety rich==14.2.0 \ --hash=sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4 \ --hash=sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd # via typer ruamel-yaml==0.18.16 \ --hash=sha256:048f26d64245bae57a4f9ef6feb5b552a386830ef7a826f235ffb804c59efbba \ --hash=sha256:a6e587512f3c998b2225d68aa1f35111c29fad14aed561a26e73fab729ec5e5a # via # safety # safety-schemas ruamel-yaml-clib==0.2.15 \ --hash=sha256:014181cdec565c8745b7cbc4de3bf2cc8ced05183d986e6d1200168e5bb59490 \ --hash=sha256:04d21dc9c57d9608225da28285900762befbb0165ae48482c15d8d4989d4af14 \ --hash=sha256:05c70f7f86be6f7bee53794d80050a28ae7e13e4a0087c1839dcdefd68eb36b6 \ --hash=sha256:0ba6604bbc3dfcef844631932d06a1a4dcac3fee904efccf582261948431628a \ --hash=sha256:11e5499db1ccbc7f4b41f0565e4f799d863ea720e01d3e99fa0b7b5fcd7802c9 \ --hash=sha256:1b45498cc81a4724a2d42273d6cfc243c0547ad7c6b87b4f774cb7bcc131c98d \ --hash=sha256:1bb7b728fd9f405aa00b4a0b17ba3f3b810d0ccc5f77f7373162e9b5f0ff75d5 \ --hash=sha256:1f66f600833af58bea694d5892453f2270695b92200280ee8c625ec5a477eed3 \ --hash=sha256:27dc656e84396e6d687f97c6e65fb284d100483628f02d95464fd731743a4afe \ --hash=sha256:2812ff359ec1f30129b62372e5f22a52936fac13d5d21e70373dbca5d64bb97c \ --hash=sha256:2b216904750889133d9222b7b873c199d48ecbb12912aca78970f84a5aa1a4bc \ --hash=sha256:331fb180858dd8534f0e61aa243b944f25e73a4dae9962bd44c46d1761126bbf \ --hash=sha256:3cb75a3c14f1d6c3c2a94631e362802f70e83e20d1f2b2ef3026c05b415c4900 \ --hash=sha256:3eb199178b08956e5be6288ee0b05b2fb0b5c1f309725ad25d9c6ea7e27f962a \ --hash=sha256:424ead8cef3939d690c4b5c85ef5b52155a231ff8b252961b6516ed7cf05f6aa \ --hash=sha256:45702dfbea1420ba3450bb3dd9a80b33f0badd57539c6aac09f42584303e0db6 \ --hash=sha256:468858e5cbde0198337e6a2a78eda8c3fb148bdf4c6498eaf4bc9ba3f8e780bd \ --hash=sha256:46895c17ead5e22bea5e576f1db7e41cb273e8d062c04a6a49013d9f60996c25 \ --hash=sha256:46e4cc8c43ef6a94885f72512094e482114a8a706d3c555a34ed4b0d20200600 \ --hash=sha256:480894aee0b29752560a9de46c0e5f84a82602f2bc5c6cde8db9a345319acfdf \ --hash=sha256:4b293a37dc97e2b1e8a1aec62792d1e52027087c8eea4fc7b5abd2bdafdd6642 \ --hash=sha256:4be366220090d7c3424ac2b71c90d1044ea34fca8c0b88f250064fd06087e614 \ --hash=sha256:4d1032919280ebc04a80e4fb1e93f7a738129857eaec9448310e638c8bccefcf \ --hash=sha256:4d3b58ab2454b4747442ac76fab66739c72b1e2bb9bd173d7694b9f9dbc9c000 \ --hash=sha256:4dcec721fddbb62e60c2801ba08c87010bd6b700054a09998c4d09c08147b8fb \ --hash=sha256:512571ad41bba04eac7268fe33f7f4742210ca26a81fe0c75357fa682636c690 \ --hash=sha256:542d77b72786a35563f97069b9379ce762944e67055bea293480f7734b2c7e5e \ --hash=sha256:56ea19c157ed8c74b6be51b5fa1c3aff6e289a041575f0556f66e5fb848bb137 \ --hash=sha256:5d3c9210219cbc0f22706f19b154c9a798ff65a6beeafbf77fc9c057ec806f7d \ --hash=sha256:5fea0932358e18293407feb921d4f4457db837b67ec1837f87074667449f9401 \ --hash=sha256:617d35dc765715fa86f8c3ccdae1e4229055832c452d4ec20856136acc75053f \ --hash=sha256:64da03cbe93c1e91af133f5bec37fd24d0d4ba2418eaf970d7166b0a26a148a2 \ --hash=sha256:65f48245279f9bb301d1276f9679b82e4c080a1ae25e679f682ac62446fac471 \ --hash=sha256:6f1d38cbe622039d111b69e9ca945e7e3efebb30ba998867908773183357f3ed \ --hash=sha256:713cd68af9dfbe0bb588e144a61aad8dcc00ef92a82d2e87183ca662d242f524 \ --hash=sha256:71845d377c7a47afc6592aacfea738cc8a7e876d586dfba814501d8c53c1ba60 \ --hash=sha256:753faf20b3a5906faf1fc50e4ddb8c074cb9b251e00b14c18b28492f933ac8ef \ --hash=sha256:7e74ea87307303ba91073b63e67f2c667e93f05a8c63079ee5b7a5c8d0d7b043 \ --hash=sha256:88eea8baf72f0ccf232c22124d122a7f26e8a24110a0273d9bcddcb0f7e1fa03 \ --hash=sha256:923816815974425fbb1f1bf57e85eca6e14d8adc313c66db21c094927ad01815 \ --hash=sha256:9b6f7d74d094d1f3a4e157278da97752f16ee230080ae331fcc219056ca54f77 \ --hash=sha256:a8220fd4c6f98485e97aea65e1df76d4fed1678ede1fe1d0eed2957230d287c4 \ --hash=sha256:ab0df0648d86a7ecbd9c632e8f8d6b21bb21b5fc9d9e095c796cacf32a728d2d \ --hash=sha256:ac9b8d5fa4bb7fd2917ab5027f60d4234345fd366fe39aa711d5dca090aa1467 \ --hash=sha256:badd1d7283f3e5894779a6ea8944cc765138b96804496c91812b2829f70e18a7 \ --hash=sha256:bdc06ad71173b915167702f55d0f3f027fc61abd975bd308a0968c02db4a4c3e \ --hash=sha256:bf0846d629e160223805db9fe8cc7aec16aaa11a07310c50c8c7164efa440aec \ --hash=sha256:bfd309b316228acecfa30670c3887dcedf9b7a44ea39e2101e75d2654522acd4 \ --hash=sha256:c583229f336682b7212a43d2fa32c30e643d3076178fb9f7a6a14dde85a2d8bd \ --hash=sha256:cb15a2e2a90c8475df45c0949793af1ff413acfb0a716b8b94e488ea95ce7cff \ --hash=sha256:d290eda8f6ada19e1771b54e5706b8f9807e6bb08e873900d5ba114ced13e02c \ --hash=sha256:da3d6adadcf55a93c214d23941aef4abfd45652110aed6580e814152f385b862 \ --hash=sha256:dcc7f3162d3711fd5d52e2267e44636e3e566d1e5675a5f0b30e98f2c4af7974 \ --hash=sha256:def5663361f6771b18646620fca12968aae730132e104688766cf8a3b1d65922 \ --hash=sha256:e5e9f630c73a490b758bf14d859a39f375e6999aea5ddd2e2e9da89b9953486a \ --hash=sha256:e9fde97ecb7bb9c41261c2ce0da10323e9227555c674989f8d9eb7572fc2098d \ --hash=sha256:ef71831bd61fbdb7aa0399d5c4da06bea37107ab5c79ff884cc07f2450910262 \ --hash=sha256:f4421ab780c37210a07d138e56dd4b51f8642187cdfb433eb687fe8c11de0144 \ --hash=sha256:f6d3655e95a80325b84c4e14c080b2470fe4f33b6846f288379ce36154993fb1 \ --hash=sha256:fd4c928ddf6bce586285daa6d90680b9c291cfd045fc40aad34e445d57b1bf51 \ --hash=sha256:fe239bdfdae2302e93bd6e8264bd9b71290218fff7084a9db250b55caaccf43f # via ruamel-yaml safety==3.7.0 \ --hash=sha256:65e71db45eb832e8840e3456333d44c23927423753d5610596a09e909a66d2bf \ --hash=sha256:daec15a393cafc32b846b7ef93f9c952a1708863e242341ab5bde2e4beabb54e # via -r requirements.in safety-schemas==0.0.16 \ --hash=sha256:3bb04d11bd4b5cc79f9fa183c658a6a8cf827a9ceec443a5ffa6eed38a50a24e \ --hash=sha256:6760515d3fd1e6535b251cd73014bd431d12fe0bfb8b6e8880a9379b5ab7aa44 # via safety shellingham==1.5.4 \ --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \ --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de # via typer tenacity==9.1.2 \ --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 # via safety tomlkit==0.13.3 \ --hash=sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1 \ --hash=sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0 # via safety tqdm==4.67.1 \ --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 # via nltk typer==0.20.0 \ --hash=sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37 \ --hash=sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a # via safety typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 # via # anyio # pydantic # pydantic-core # safety # safety-schemas # typer # typing-inspection typing-inspection==0.4.2 \ --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 # via pydantic urllib3==2.6.1 \ --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \ --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b # via requests virtualenv==20.35.4 \ --hash=sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c \ --hash=sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b # via pipenv wheel==0.45.1 \ --hash=sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729 \ --hash=sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248 # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: setuptools==80.9.0 \ --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \ --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c # via # -r requirements.in # pipenv ================================================ FILE: test-data/Makefile.inc ================================================ # This makefile include file assumes that the following variables are set: # - PROJECT_ID # - PROJECT_ID_SUFFIX # - PROJECT_NR # - ORG_ID # - FAKE_PROJECT_ID_SUFFIX # - FAKE_PROJECT_NR # - FAKE_ORG_ID BASEDIR := ../.. JSON_CLEANER = $(BASEDIR)/bin/json-cleaner CURL = $(BASEDIR)/bin/curl-wrap.sh SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ $(if $(FOLDER_ID_1),-e "s/$(FOLDER_ID_1)/$(FAKE_FOLDER_ID_1)/") \ $(if $(FOLDER_ID_2),-e "s/$(FOLDER_ID_2)/$(FAKE_FOLDER_ID_2)/") ZONE_EMPTY = europe-west2-b ACCESS_TOKEN := $(shell gcloud auth application-default print-access-token) export ACCESS_TOKEN # compute.googleapis.com json-dumps/compute-effective-firewalls-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/$*/getEffectiveFirewalls' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-igs-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/instanceGroups' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-igs-empty.json: json-dumps/compute-igs-$(ZONE_EMPTY).json ln -sf $(notdir $<) $@ json-dumps/compute-negs-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/networkEndpointGroups' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-nes-empty.json: json-dumps/compute-negs-$(ZONE_EMPTY).json ln -sf $(notdir $<) $@ COMPUTE_INSTANCES_MAXRESULTS ?= 10 json-dumps/compute-instances-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/instances?maxResults=$(COMPUTE_INSTANCES_MAXRESULTS)' \ | $(JSON_CLEANER) instances \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-%-2.json: json-dumps/compute-instances-%.json $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/instances?maxResults=$(COMPUTE_INSTANCES_MAXRESULTS)&pageToken=$(shell cat json-dumps/compute-instances-$*.json | jq -r '.nextPageToken')' \ | $(JSON_CLEANER) instances \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-empty.json: json-dumps/compute-instances-$(ZONE_EMPTY).json ln -sf $(notdir $<) $@ json-dumps/compute-migs-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/instanceGroupManagers' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-migs-empty.json: json-dumps/compute-migs-$(ZONE_EMPTY).json ln -sf $(notdir $<) $@ json-dumps/compute-disks-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/disks' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-disks-empty.json: json-dumps/compute-disks-$(ZONE_EMPTY).json ln -sf $(notdir $<) $@ json-dumps/compute-interconnects.json: 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/interconnects' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-network-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/$*' \ | $(JSON_CLEANER) compute-network \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-sslCertificates.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/sslCertificates/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-forwardingRules.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/forwardingRules/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-forwardingRules-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$*/forwardingRules/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-aggregated-forwardingRules.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/forwardingRules/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-backendServices.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/backendServices/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-backendServices-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$*/backendServices/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-aggregated-backendServices.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/backendServices/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-aggregated-targetHttpsProxies.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/targetHttpsProxies/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-targetHttpsProxies.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/targetHttpsProxies/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-targetSslProxies.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/targetSslProxies/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-project.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)' \ | $(JSON_CLEANER) compute-project \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-regions.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-subnetworks-aggregated.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/subnetworks' \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-templates.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/instanceTemplates' \ | $(JSON_CLEANER) compute-templates \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-zones.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-aggregated.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/instances' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-igs-aggregated.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/instanceGroups' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-migs-aggregated.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/instanceGroupManagers' \ | $(SED_SUBST_FAKE) >$@ # cloudresourcemanager.googleapis.com json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/org-constraint-%.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getEffectiveOrgPolicy' \ -X POST --header "Content-Type:text/json" \ -d "{\"constraint\": \"constraints/$*\"}" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/org-policies.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):listOrgPolicies' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/org-constraints.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):listAvailableOrgPolicyConstraints' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # iam.googleapis.com json-dumps/iam-roles-custom.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/roles?view=FULL&pageSize=500' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ # serviceusage.googleapis.com json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/README.md ================================================ # Test data Many of the tests in gcpdiag are implemented using real API responses that are fetched with curl and stored in this directory. The API is then mocked and returns data from the response files (in JSON format). In order to create the response data, we use real GCP projects. We setup everything using Terraform, and fetch the responses with curl. We create ephemeral projects only for the purprose of generating those API responses, and delete the projects afterwards. Every directory has a different project template, based on the test use case. In order to run terraform, you will need to supply the organization id and billing account id as variables: ``` $ export TF_VAR_billing_account_id=0123456-ABCDEF-987654 $ export TF_VAR_org_id=123456789012 $ export TF_VAR_folder_id=123456789012 # optional $ cd projectdir $ terraform init $ terraform apply ``` The API responses are generated using curl commands started with make: ``` $ make all ``` ### Creating new projects If you need to create a project template for a new use case, proceed as follows: 1. Create a new directory 1. Copy the following files as starting point: - gce1/Makefile - gce1/project.tf - gce1/variables.tf 1. Create a Makefile file that looks as follows: ``` PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340001 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ ``` 1. Search and replace the following strings: - `gce1`: use your own short project template name. - `12340001`: this is the fake project number. Use a number that is not yet used in any other template (keep the same '123400' prefix). 1. Create .tf files with all the resources that you need. 1. Add curl calls to the Makefile for all json files that you need. ================================================ FILE: test-data/apigee1/Makefile ================================================ PROJECT_ID := $(shell terraform output project_id | sed -e 's|"||g') PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) APIGEE_ORG_ID := $(shell terraform output apigee_org_id | sed -e 's|"||g') APIGEE_INSTANCE_ID := $(shell terraform output apigee_instance_id | sed -e 's|"||g') LOCATION_1 = us-central1 KEYRING_1 = apigee-keyring CYRPTOKEY_1 = apigee-key COMPUTE_NETWORK_1=apigee-network COMPUTE_SUBNETWORK_1=apigee-subnetwork ENVIRONMENT_GROUP = gcpdiag-demo-envgroup ENVIRONMENT_GROUP_1 = gcpdiag-demo-envgroup-1 CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340005 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/apigee-organizations.json \ json-dumps/apigee-organization.json \ json-dumps/compute-regions.json \ json-dumps/compute-subnetworks-aggregated.json \ json-dumps/compute-effective-firewalls-apigee-network.json \ json-dumps/compute-network-$(COMPUTE_NETWORK_1).json \ json-dumps/compute-subnetworks-$(COMPUTE_SUBNETWORK_1).json \ json-dumps/apigee-instances.json \ json-dumps/compute-templates.json \ json-dumps/compute-migs-$(LOCATION_1).json \ json-dumps/apigee-instances-gcpdiag-apigee1-inst1-aaaa-attachments.json \ json-dumps/apigee-envgroups.json \ json-dumps/apigee-envgroups-attachments-empty.json \ json-dumps/apigee-envgroups-gcpdiag-demo-envgroup-1-attachments.json \ json-dumps/project.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/services.json \ json-dumps/kms-key-iam-policy.json \ json-dumps/apigee-key.json include ../Makefile.inc # compute.googleapis.com json-dumps/compute-migs-$(LOCATION_1).json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(LOCATION_1)/instanceGroupManagers' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-subnetworks-$(COMPUTE_SUBNETWORK_1).json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(LOCATION_1)/subnetworks/$(COMPUTE_SUBNETWORK_1)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-effective-firewalls-apigee-network.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/$(COMPUTE_NETWORK_1)/getEffectiveFirewalls' \ | $(SED_SUBST_FAKE) >$@ # cloudkms.googleapis.com json-dumps/kms-key-iam-policy.json: $(CURL) -fsS \ 'https://cloudkms.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(LOCATION_1)/keyRings/$(KEYRING_1)/cryptoKeys/$(CYRPTOKEY_1):getIamPolicy' \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/apigee-key.json: $(CURL) -fsS \ 'https://cloudkms.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(LOCATION_1)/keyRings/$(KEYRING_1)/cryptoKeys/$(CYRPTOKEY_1)' \ | $(SED_SUBST_FAKE) >$@ # apigee.googleapis.com json-dumps/apigee-organizations.json: $(CURL) -fsS \ 'https://apigee.googleapis.com/v1/organizations' \ | $(SED_SUBST_FAKE) >$@ json-dumps/apigee-organization.json: $(CURL) -fsS \ 'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)' \ | $(JSON_CLEANER) apigee \ | $(SED_SUBST_FAKE) >$@ json-dumps/apigee-instances.json: $(CURL) -fsS \ 'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)/instances' \ | $(SED_SUBST_FAKE) >$@ json-dumps/apigee-instances-gcpdiag-apigee1-inst1-aaaa-attachments.json: $(CURL) -fsS \ 'https://apigee.googleapis.com/v1/$(APIGEE_INSTANCE_ID)/attachments' \ | $(SED_SUBST_FAKE) >$@ json-dumps/apigee-envgroups.json: $(CURL) -fsS \ 'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)/envgroups' \ | $(SED_SUBST_FAKE) >$@ json-dumps/apigee-envgroups-attachments-empty.json: $(CURL) -fsS \ 'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)/envgroups/$(ENVIRONMENT_GROUP)/attachments' \ | $(SED_SUBST_FAKE) >$@ json-dumps/apigee-envgroups-gcpdiag-demo-envgroup-1-attachments.json: $(CURL) -fsS \ 'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)/envgroups/$(ENVIRONMENT_GROUP_1)/attachments' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/apigee1/apigee1.tf ================================================ resource "google_compute_network" "apigee_network" { project = google_project.project.project_id name = "apigee-network" auto_create_subnetworks = false depends_on = [google_project_service.compute] } resource "google_compute_subnetwork" "apigee_subnetwork" { project = google_project.project.project_id name = "apigee-subnetwork" region = "us-central1" ip_cidr_range = "10.128.0.0/20" network = google_compute_network.apigee_network.id private_ip_google_access = true depends_on = [google_project_service.compute, google_compute_network.apigee_network] } resource "google_compute_global_address" "apigee_range" { project = google_project.project.project_id name = "apigee-range" purpose = "VPC_PEERING" address_type = "INTERNAL" prefix_length = 22 network = google_compute_network.apigee_network.id } resource "google_service_networking_connection" "apigee_vpc_connection" { network = google_compute_network.apigee_network.id service = "servicenetworking.googleapis.com" reserved_peering_ranges = [google_compute_global_address.apigee_range.name] depends_on = [google_project_service.servicenetworking] } resource "google_kms_key_ring" "apigee_keyring" { provider = google project = google_project.project.project_id name = "apigee-keyring" location = "us-central1" depends_on = [google_project_service.kms] lifecycle { prevent_destroy = true } } resource "google_kms_crypto_key" "apigee_key" { provider = google name = "apigee-key" key_ring = google_kms_key_ring.apigee_keyring.id lifecycle { prevent_destroy = true } } resource "google_project_service_identity" "apigee_sa" { provider = google-beta project = google_project.project.project_id service = google_project_service.apigee.service } resource "google_kms_crypto_key_iam_binding" "apigee_sa_keyuser" { provider = google crypto_key_id = google_kms_crypto_key.apigee_key.id role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" members = [ "serviceAccount:${google_project_service_identity.apigee_sa.email}", ] } resource "google_apigee_organization" "apigee_org" { project_id = google_project.project.project_id analytics_region = "us-central1" description = "Test Apigee Org for gcpdiag" authorized_network = google_compute_network.apigee_network.id runtime_database_encryption_key_name = google_kms_crypto_key.apigee_key.id depends_on = [ google_service_networking_connection.apigee_vpc_connection, google_project_service.apigee ] } resource "google_apigee_instance" "apigee_instance" { name = "gcpdiag-apigee1-inst1-${random_string.project_id_suffix.id}" location = "us-central1" description = "Test Apigee Runtime Instance for gcpdiag" org_id = google_apigee_organization.apigee_org.id disk_encryption_key_name = google_kms_crypto_key.apigee_key.id } resource "google_apigee_environment" "apigee_env" { org_id = google_apigee_organization.apigee_org.id name = "gcpdiag-demo-env" depends_on = [google_project_service.apigee] } resource "google_apigee_environment" "apigee_env_1" { org_id = google_apigee_organization.apigee_org.id name = "gcpdiag-demo-env-1" depends_on = [google_project_service.apigee] } resource "google_apigee_instance_attachment" "env_to_instance_attachment" { instance_id = google_apigee_instance.apigee_instance.id environment = google_apigee_environment.apigee_env.name } resource "google_apigee_envgroup" "apigee_envgroup" { org_id = google_apigee_organization.apigee_org.id name = "gcpdiag-demo-envgroup" hostnames = ["gcpdiag.apigee.example.com"] depends_on = [google_project_service.apigee] } resource "google_apigee_envgroup" "apigee_envgroup_1" { org_id = google_apigee_organization.apigee_org.id name = "gcpdiag-demo-envgroup-1" hostnames = ["1.gcpdiag.apigee.example.com"] depends_on = [google_project_service.apigee] } resource "google_apigee_envgroup_attachment" "env_to_envgroup_attachment" { envgroup_id = google_apigee_envgroup.apigee_envgroup_1.id environment = google_apigee_environment.apigee_env_1.name depends_on = [google_project_service.apigee] } resource "google_compute_instance_template" "mig_bridge_template" { project = google_project.project.project_id name_prefix = "mig-bridge-us-central1-" machine_type = "e2-small" tags = ["https-server", "mig-bridge"] disk { source_image = "centos-cloud/centos-7" boot = true disk_size_gb = 20 } network_interface { network = google_compute_network.apigee_network.id subnetwork = google_compute_subnetwork.apigee_subnetwork.id } metadata = { ENDPOINT = google_apigee_instance.apigee_instance.host startup-script-url = "gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh" } service_account { scopes = ["storage-ro"] } lifecycle { create_before_destroy = true } } resource "google_compute_region_instance_group_manager" "mig_bridge_manager" { name = "mig-bridge-manager-us-central1" project = google_project.project.project_id base_instance_name = "mig-bridge-us-central1" region = "us-central1" version { instance_template = google_compute_instance_template.mig_bridge_template.id } named_port { name = "apigee-https" port = 443 } } resource "google_compute_region_autoscaler" "mig_bridge_autoscaler" { name = "mig-autoscaler-us-central1" project = google_project.project.project_id region = "us-central1" target = google_compute_region_instance_group_manager.mig_bridge_manager.id autoscaling_policy { max_replicas = 10 min_replicas = 2 cooldown_period = 90 cpu_utilization { target = 0.75 } } } output "apigee_org_id" { value = google_apigee_organization.apigee_org.id } output "apigee_instance_id" { value = google_apigee_instance.apigee_instance.id } ================================================ FILE: test-data/apigee1/json-dumps/apigee-envgroups-attachments-empty.json ================================================ {} ================================================ FILE: test-data/apigee1/json-dumps/apigee-envgroups-gcpdiag-demo-envgroup-1-attachments.json ================================================ { "environmentGroupAttachments": [ { "name": "eee79bf3-6ee0-488c-aafa-352b560cc54a", "environment": "gcpdiag-demo-env-1", "createdAt": "1660444215777", "environmentGroupId": "gcpdiag-demo-envgroup-1" } ] } ================================================ FILE: test-data/apigee1/json-dumps/apigee-envgroups.json ================================================ { "environmentGroups": [ { "name": "gcpdiag-demo-envgroup", "hostnames": [ "gcpdiag.apigee.example.com" ], "createdAt": "1660444204349", "lastModifiedAt": "1660444204349", "state": "ACTIVE" }, { "name": "gcpdiag-demo-envgroup-1", "hostnames": [ "1.gcpdiag.apigee.example.com" ], "createdAt": "1660444204383", "lastModifiedAt": "1660444204383", "state": "ACTIVE" } ] } ================================================ FILE: test-data/apigee1/json-dumps/apigee-instances-gcpdiag-apigee1-inst1-aaaa-attachments.json ================================================ { "attachments": [ { "name": "98a36882-8123-45db-aa20-35b3e541c568", "environment": "gcpdiag-demo-env", "createdAt": "1660445875160" } ] } ================================================ FILE: test-data/apigee1/json-dumps/apigee-instances.json ================================================ { "instances": [ { "name": "gcpdiag-apigee1-inst1-aaaa", "location": "us-central1", "host": "10.25.116.2", "port": "443", "description": "Test Apigee Runtime Instance for gcpdiag", "createdAt": "1660444205860", "lastModifiedAt": "1660445744739", "diskEncryptionKeyName": "projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key", "state": "ACTIVE", "peeringCidrRange": "SLASH_22", "runtimeVersion": "1-8-0-apigee-23", "ipRange": "10.25.116.0/28,10.25.116.16/28", "consumerAcceptList": [ "gcpdiag-apigee1-aaaa" ], "serviceAttachment": "projects/u97a71f019e4d6615-tp/regions/us-central1/serviceAttachments/apigee-us-central1-41me" } ] } ================================================ FILE: test-data/apigee1/json-dumps/apigee-key.json ================================================ { "name": "projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key", "primary": { "name": "projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key/cryptoKeyVersions/1", "state": "ENABLED", "createTime": "2022-08-14T01:58:59.902530077Z", "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION", "generateTime": "2022-08-14T01:58:59.902530077Z" }, "purpose": "ENCRYPT_DECRYPT", "createTime": "2022-08-14T01:58:59.902530077Z", "versionTemplate": { "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION" }, "destroyScheduledDuration": "86400s" } ================================================ FILE: test-data/apigee1/json-dumps/apigee-organization.json ================================================ { "addonsConfig": { "advancedApiOpsConfig": { "enabled": true }, "connectorsPlatformConfig": { "enabled": true }, "integrationConfig": { "enabled": true } }, "analyticsRegion": "us-central1", "apigeeProjectId": "REDACTED", "authorizedNetwork": "projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network", "billingType": "EVALUATION", "caCertificate": "REDACTED", "createdAt": "1660444169636", "description": "Test Apigee Org for gcpdiag", "environments": [ "gcpdiag-demo-env", "gcpdiag-demo-env-1" ], "expiresAt": "1665627913747", "lastModifiedAt": "1660444192352", "name": "gcpdiag-apigee1-aaaa", "projectId": "gcpdiag-apigee1-aaaa", "properties": { "property": [ { "name": "features.hybrid.enabled", "value": "true" }, { "name": "features.mart.connect.enabled", "value": "true" } ] }, "runtimeDatabaseEncryptionKeyName": "projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key", "runtimeType": "CLOUD", "state": "ACTIVE", "subscriptionType": "TRIAL" } ================================================ FILE: test-data/apigee1/json-dumps/apigee-organizations.json ================================================ { "organizations": [ { "organization": "apigee-hybrid-support-apac-03", "projectIds": [ "apigee-hybrid-support-apac-03" ], "projectId": "apigee-hybrid-support-apac-03" }, { "organization": "apigee-x-support-apac-03", "projectIds": [ "apigee-x-support-apac-03" ], "projectId": "apigee-x-support-apac-03" }, { "organization": "gcpdiag-apigee1-aaaa", "projectIds": [ "gcpdiag-apigee1-aaaa" ], "projectId": "gcpdiag-apigee1-aaaa" } ] } ================================================ FILE: test-data/apigee1/json-dumps/compute-effective-firewalls-apigee-network.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "1474978006922447998", "creationTimestamp": "2023-06-17T10:51:13.563-07:00", "name": "k8s-allow-lb-to-apigee-proxy", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network", "priority": 900, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "gke-apigee-proxy" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "443" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/firewalls/k8s-allow-lb-to-apigee-proxy" } ], "firewallPolicys": [ { "name": "902824820698", "type": "HIERARCHY", "shortName": "default-firewall-policy", "displayName": "default-firewall-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 0, "match": { "srcIpRanges": [ "34.82.66.0/24", "34.82.90.0/24", "34.82.98.0/24", "34.82.160.0/24", "34.82.166.128/25" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 1, "match": { "destIpRanges": [ "34.83.160.25/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2, "match": { "destIpRanges": [ "34.66.22.47/32", "34.66.157.124/32", "34.66.164.57/32", "34.66.184.118/32", "34.66.236.234/32", "34.73.86.171/32", "34.73.183.215/32", "34.76.42.179/32", "34.76.71.13/32", "34.76.143.192/32", "34.76.244.236/32", "35.184.49.127/32", "35.184.70.255/32", "35.184.144.234/32", "35.184.228.49/32", "35.185.65.36/32", "35.185.252.238/32", "35.186.160.196/32", "35.186.167.183/32", "35.186.182.184/32", "35.187.2.178/32", "35.187.82.234/32", "35.187.121.21/32", "35.187.169.157/32", "35.187.189.105/32", "35.188.28.255/32", "35.188.58.237/32", "35.188.97.47/32", "35.188.225.200/32", "35.188.244.131/32", "35.189.66.48/32", "35.189.85.77/32", "35.189.87.27/32", "35.189.87.89/32", "35.189.88.203/32", "35.189.93.96/32", "35.189.99.57/32", "35.189.109.1/32", "35.189.114.89/32", "35.189.228.0/32", "35.189.236.145/32", "35.190.139.214/32", "35.190.154.170/32", "35.190.196.20/32", "35.192.2.32/32", "35.192.62.107/32", "35.192.160.155/32", "35.192.233.245/32", "35.192.235.233/32", "35.193.56.224/32", "35.193.76.157/32", "35.193.123.0/32", "35.193.195.38/32", "35.193.200.222/32", "35.193.229.109/32", "35.193.242.255/32", "35.194.66.217/32", "35.194.70.28/32", "35.195.3.83/32", "35.195.53.78/32", "35.195.68.98/32", "35.195.101.29/32", "35.195.113.177/32", "35.195.114.253/32", "35.195.123.113/32", "35.195.140.251/32", "35.195.156.23/32", "35.195.206.55/32", "35.196.5.130/32", "35.196.20.59/32", "35.196.89.212/32", "35.196.115.11/32", "35.196.138.125/32", "35.196.140.152/32", "35.196.217.248/32", "35.196.220.144/32", "35.197.30.80/32", "35.197.38.28/32", "35.197.50.103/32", "35.197.53.127/32", "35.197.55.215/32", "35.197.56.191/32", "35.197.65.24/32", "35.197.75.108/32", "35.197.85.13/32", "35.197.107.117/32", "35.197.108.157/32", "35.197.112.50/32", "35.197.115.114/32", "35.197.125.130/32", "35.197.192.22/32", "35.197.205.253/32", "35.197.210.140/32", "35.197.226.207/32", "35.197.233.133/32", "35.197.246.39/32", "35.197.252.73/32", "35.197.252.248/32", "35.197.254.244/32", "35.198.78.35/32", "35.198.79.98/32", "35.198.84.172/32", "35.198.106.28/32", "35.198.140.217/32", "35.198.158.161/32", "35.198.159.26/32", "35.199.12.20/32", "35.199.27.54/32", "35.199.39.165/32", "35.199.40.52/32", "35.199.54.197/32", "35.199.56.100/32", "35.199.58.90/32", "35.199.154.123/32", "35.199.162.95/32", "35.199.162.137/32", "35.199.175.152/32", "35.202.32.145/32", "35.202.62.128/32", "35.202.98.132/32", "35.202.118.10/32", "35.202.240.183/32", "35.203.142.250/32", "35.203.145.190/32", "35.203.151.233/32", "35.203.155.169/32", "35.203.161.173/32", "35.203.175.233/32", "35.203.184.97/32", "35.203.191.135/32", "35.204.1.221/32", "35.204.12.60/32", "35.204.14.12/32", "35.204.15.55/32", "35.204.15.122/32", "35.204.24.135/32", "35.204.37.76/32", "35.204.46.52/32", "35.204.50.90/32", "35.204.52.86/32", "35.204.60.99/32", "35.204.66.9/32", "35.204.66.56/32", "35.204.74.72/32", "35.204.78.201/32", "35.204.88.26/32", "35.204.98.108/32", "35.204.105.22/32", "35.204.108.151/32", "35.204.115.3/32", "35.204.119.162/32", "35.204.122.243/32", "35.204.123.133/32", "35.204.126.58/32", "35.204.126.80/32", "35.204.129.200/32", "35.204.130.59/32", "35.204.131.109/32", "35.204.141.187/32", "35.204.142.195/32", "35.204.152.168/32", "35.204.162.183/32", "35.204.167.122/32", "35.204.169.211/32", "35.204.172.80/32", "35.204.178.217/32", "35.204.179.111/32", "35.204.190.183/32", "35.204.195.27/32", "35.204.195.49/32", "35.204.196.11/32", "35.204.201.70/32", "35.204.203.109/32", "35.204.207.219/32", "35.204.208.228/32", "35.204.215.87/32", "35.204.217.46/32", "35.204.223.176/32", "35.204.225.30/32", "35.204.225.143/32", "35.204.231.201/32", "35.204.241.10/32", "35.204.251.54/32", "35.204.255.0/32", "35.205.72.232/32", "35.205.138.68/32", "35.205.159.40/32", "35.205.227.167/32", "35.205.228.216/32", "35.221.0.61/32", "35.221.3.121/32", "35.221.3.125/32", "35.221.5.200/32", "35.221.6.218/32", "35.221.13.23/32", "35.221.13.133/32", "35.221.15.163/32", "35.221.16.189/32", "35.221.23.24/32", "35.221.24.229/32", "35.221.24.236/32", "35.221.28.149/32", "35.221.32.150/32", "35.221.32.171/32", "35.221.48.160/32", "35.221.51.129/32", "35.221.55.211/32", "35.221.57.195/32", "35.222.15.64/32", "35.222.245.253/32", "35.224.62.254/32", "35.224.106.23/32", "35.224.115.137/32", "35.224.231.238/32", "35.225.8.27/32", "35.225.39.39/32", "35.225.49.103/32", "35.225.181.33/32", "35.225.226.221/32", "35.226.0.100/32", "35.226.37.22/32", "35.226.94.146/32", "35.226.134.67/32", "35.226.227.112/32", "35.227.24.50/32", "35.227.63.36/32", "35.227.148.154/32", "35.227.164.46/32", "35.227.166.150/32", "35.227.169.20/32", "35.227.185.153/32", "35.228.12.151/32", "35.228.23.19/32", "35.228.24.225/32", "35.228.24.253/32", "35.228.43.115/32", "35.228.46.55/32", "35.228.50.150/32", "35.228.61.168/32", "35.228.62.248/32", "35.228.73.69/32", "35.228.126.203/32", "35.228.133.241/32", "35.228.136.253/32", "35.228.141.80/32", "35.228.151.221/32", "35.228.153.106/32", "35.228.153.173/32", "35.228.165.20/32", "35.228.182.144/32", "35.228.194.236/32", "35.228.207.201/32", "35.228.211.51/32", "35.228.225.15/32", "35.228.240.231/32", "35.228.241.74/32", "35.228.243.184/32", "35.228.247.232/32", "35.228.248.131/32", "35.228.248.202/32", "35.229.32.120/32", "35.229.40.166/32", "35.229.98.55/32", "35.229.121.90/32", "35.230.1.88/32", "35.230.9.24/32", "35.230.25.200/32", "35.230.49.71/32", "35.230.81.240/32", "35.230.85.180/32", "35.230.108.26/32", "35.230.119.89/32", "35.230.125.171/32", "35.230.130.62/32", "35.230.133.130/32", "35.230.136.123/32", "35.230.136.172/32", "35.230.137.112/32", "35.230.138.244/32", "35.230.144.1/32", "35.230.149.124/32", "35.230.150.81/32", "35.230.150.240/32", "35.230.154.90/32", "35.230.174.232/32", "35.230.177.25/32", "35.230.177.73/32", "35.230.182.231/32", "35.230.189.18/32", "35.231.27.146/32", "35.231.37.13/32", "35.231.76.215/32", "35.231.79.129/32", "35.231.92.50/32", "35.231.193.144/32", "35.231.200.66/32", "35.231.205.62/32", "35.231.250.82/32", "35.232.45.232/32", "35.232.94.168/32", "35.232.103.119/32", "35.232.127.101/32", "35.232.139.151/32", "35.232.180.7/32", "35.233.28.18/32", "35.233.40.72/32", "35.233.72.242/32", "35.233.89.166/32", "35.233.99.60/32", "35.233.123.101/32", "35.233.131.47/32", "35.233.132.228/32", "35.233.135.75/32", "35.233.136.180/32", "35.233.139.203/32", "35.233.139.255/32", "35.233.141.127/32", "35.233.146.241/32", "35.233.152.253/32", "35.233.155.27/32", "35.233.159.73/32", "35.233.160.114/32", "35.233.170.137/32", "35.233.177.225/32", "35.233.181.13/32", "35.233.209.158/32", "35.233.211.146/32", "35.233.215.174/32", "35.233.230.10/32", "35.233.237.249/32", "35.233.240.97/32", "35.233.242.76/32", "35.233.243.235/32", "35.233.248.120/32", "35.233.251.200/32", "35.234.74.152/32", "35.234.76.60/32", "35.234.82.93/32", "35.234.97.50/32", "35.234.101.43/32", "35.234.113.47/32", "35.234.124.92/32", "35.234.131.84/32", "35.234.133.222/32", "35.234.141.85/32", "35.234.145.128/32", "35.234.149.213/32", "35.234.150.44/32", "35.234.154.126/32", "35.234.156.114/32", "35.235.66.156/32", "35.235.67.142/32", "35.235.70.49/32", "35.235.77.169/32", "35.235.78.149/32", "35.235.79.199/32", "35.235.82.180/32", "35.235.87.249/32", "35.235.91.184/32", "35.235.92.0/32", "35.235.93.225/32", "35.235.96.28/32", "35.235.100.190/32", "35.235.103.216/32", "35.235.109.42/32", "35.235.110.23/32", "35.235.111.166/32", "35.235.114.124/32", "35.235.114.133/32", "35.235.115.36/32", "35.235.119.204/32", "35.235.120.50/32", "35.235.122.190/32", "35.235.123.217/32", "35.235.124.32/32", "35.235.127.151/32", "35.236.3.134/32", "35.236.6.28/32", "35.236.8.4/32", "35.236.9.102/32", "35.236.10.36/32", "35.236.11.136/32", "35.236.13.104/32", "35.236.16.239/32", "35.236.17.90/32", "35.236.18.17/32", "35.236.23.120/32", "35.236.23.130/32", "35.236.24.148/32", "35.236.27.126/32", "35.236.30.92/32", "35.236.32.83/32", "35.236.41.7/32", "35.236.45.102/32", "35.236.48.119/32", "35.236.48.252/32", "35.236.49.204/32", "35.236.50.63/32", "35.236.50.98/32", "35.236.52.137/32", "35.236.52.183/32", "35.236.54.197/32", "35.236.54.236/32", "35.236.54.249/32", "35.236.66.213/32", "35.236.68.82/32", "35.236.69.183/32", "35.236.72.182/32", "35.236.76.220/32", "35.236.77.63/32", "35.236.77.180/32", "35.236.80.100/32", "35.236.82.58/32", "35.236.83.60/32", "35.236.84.168/32", "35.236.86.111/32", "35.236.87.95/32", "35.236.90.57/32", "35.236.94.222/32", "35.236.97.24/32", "35.236.100.13/32", "35.236.103.215/32", "35.236.107.110/32", "35.236.109.101/32", "35.236.110.188/32", "35.236.111.104/32", "35.236.113.26/32", "35.236.114.139/32", "35.236.116.189/32", "35.236.118.35/32", "35.236.120.14/32", "35.236.123.127/32", "35.236.124.70/32", "35.236.125.16/32", "35.236.126.78/32", "35.236.194.140/32", "35.236.196.78/32", "35.236.204.22/32", "35.236.207.204/32", "35.236.209.10/32", "35.236.219.57/32", "35.236.225.160/32", "35.236.226.16/32", "35.236.228.33/32", "35.236.228.41/32", "35.236.241.145/32", "35.236.242.169/32", "35.237.6.119/32", "35.237.16.252/32", "35.237.32.116/32", "35.237.33.255/32", "35.237.61.35/32", "35.237.129.145/32", "35.237.134.39/32", "35.237.182.230/32", "35.237.209.128/32", "35.237.210.45/32", "35.237.222.50/32", "35.237.235.241/32", "35.237.241.81/32", "35.237.241.194/32", "35.237.245.143/32", "35.237.248.171/32", "35.239.35.153/32", "35.239.51.8/32", "35.239.54.20/32", "35.239.68.63/32", "35.240.58.39/32", "35.240.104.231/32", "35.241.144.57/32", "35.241.145.54/32", "35.241.197.193/32", "35.241.216.166/32", "35.241.229.156/32", "35.241.233.190/32", "35.242.129.249/32", "35.242.129.253/32", "35.242.138.94/32", "35.242.140.69/32", "35.242.142.106/32", "35.242.152.55/32", "35.242.154.29/32", "35.242.154.92/32", "35.242.158.36/32", "35.242.164.105/32", "35.242.166.56/32", "35.242.170.95/32", "35.242.173.23/32", "35.242.175.90/32", "35.242.175.97/32", "35.242.180.151/32", "35.242.181.42/32", "35.242.185.45/32", "35.242.204.141/32", "35.242.205.212/32", "35.242.207.188/32", "35.242.214.46/32", "35.242.217.158/32", "35.242.241.237/32", "35.242.245.200/32", "35.242.248.79/32", "35.242.254.63/32", "35.243.170.35/32", "35.243.182.120/32", "35.243.196.214/32", "35.243.220.101/32", "35.245.1.43/32", "35.245.9.122/32", "35.245.22.62/32", "35.245.24.132/32", "35.245.27.85/32", "35.245.30.90/32", "35.245.34.81/32", "35.245.42.72/32", "35.245.45.3/32", "35.245.57.50/32", "35.245.75.145/32", "35.245.78.59/32", "35.245.88.198/32", "35.245.93.125/32", "35.245.96.171/32", "35.245.98.28/32", "35.245.110.144/32", "35.245.120.13/32", "35.245.145.56/32", "35.245.159.53/32", "35.245.170.193/32", "35.245.174.162/32", "35.245.189.22/32", "35.245.216.119/32", "35.245.237.81/32", "35.245.246.95/32", "35.245.247.140/32", "35.245.248.36/32", "35.246.2.43/32", "35.246.4.121/32", "35.246.7.114/32", "35.246.10.143/32", "35.246.10.171/32", "35.246.37.189/32", "35.246.42.142/32", "35.246.43.190/32", "35.246.48.237/32", "35.246.49.124/32", "35.246.52.251/32", "35.246.54.37/32", "35.246.54.181/32", "35.246.63.228/32", "35.246.66.175/32", "35.246.68.114/32", "35.246.70.66/32", "35.246.71.83/32", "35.246.73.137/32", "35.246.73.145/32", "35.246.75.188/32", "35.246.77.251/32", "35.246.85.156/32", "35.246.87.183/32", "35.246.90.190/32", "35.246.94.110/32", "35.246.97.150/32", "35.246.105.99/32", "35.246.111.223/32", "35.247.1.109/32", "35.247.43.108/32", "35.247.43.209/32", "35.247.50.154/32", "35.247.65.167/32", "35.247.118.218/32", "104.154.113.115/32", "104.154.208.253/32", "104.154.209.62/32", "104.155.18.24/32", "104.155.21.175/32", "104.155.33.97/32", "104.155.105.38/32", "104.155.111.169/32", "104.155.121.201/32", "104.155.143.151/32", "104.196.4.14/32", "104.196.46.139/32", "104.196.49.118/32", "104.196.100.39/32", "104.196.171.139/32", "104.196.231.87/32", "104.196.241.37/32", "104.196.244.23/32", "104.196.246.50/32", "104.197.115.25/32", "104.197.119.104/32", "104.197.181.96/32", "104.197.193.37/32", "104.197.239.95/32", "104.198.14.68/32", "104.198.99.186/32", "104.198.179.193/32", "104.198.223.59/32", "104.198.228.146/32", "104.198.255.246/32", "104.199.4.115/32", "146.148.12.186/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 600, "match": { "srcIpRanges": [ "35.235.240.0/20" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "22", "3389", "5900-5901" ] } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 601, "match": { "srcIpRanges": [ "35.191.0.0/16", "130.211.0.0/22", "209.85.152.0/22", "209.85.204.0/22", "169.254.169.254", "108.170.220.0/23" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 602, "match": { "srcIpRanges": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 603, "match": { "srcIpRanges": [ "35.199.192.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "53" ] }, { "ipProtocol": "udp", "ports": [ "53" ] } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 604, "match": { "srcIpRanges": [ "107.178.230.64/26", "35.199.224.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "667" ] }, { "ipProtocol": "udp", "ports": [ "665-666" ] }, { "ipProtocol": "icmp" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 700, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "deny", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false } ] } ] } ================================================ FILE: test-data/apigee1/json-dumps/compute-migs-us-central1.json ================================================ { "kind": "compute#regionInstanceGroupManagerList", "id": "projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "1113081953745275068", "creationTimestamp": "2023-04-30T20:47:31.305-07:00", "name": "mig-bridge-manager-us-central1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1", "distributionPolicy": { "zones": [ { "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-c" }, { "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-b" }, { "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-f" } ], "targetShape": "EVEN" }, "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/instanceTemplates/mig-bridge-us-central1-20230501034633253400000001", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/instanceTemplates/mig-bridge-us-central1-20230501034633253400000001", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroups/mig-bridge-manager-us-central1", "baseInstanceName": "mig-bridge-us-central1", "fingerprint": "Gjs4KcJJIwA=", "currentActions": { "none": 2, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } }, "autoscaler": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/autoscalers/mig-autoscaler-us-central1" }, "targetSize": 2, "listManagedInstancesResults": "PAGELESS", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers/mig-bridge-manager-us-central1", "updatePolicy": { "type": "OPPORTUNISTIC", "instanceRedistributionType": "PROACTIVE", "minimalAction": "REPLACE", "maxSurge": { "fixed": 3, "calculated": 3 }, "maxUnavailable": { "fixed": 3, "calculated": 3 }, "replacementMethod": "SUBSTITUTE" }, "namedPorts": [ { "name": "apigee-https", "port": 443 } ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers" } ================================================ FILE: test-data/apigee1/json-dumps/compute-network-apigee-network.json ================================================ { "autoCreateSubnetworks": false, "creationTimestamp": "2023-02-15T22:23:14.098-08:00", "id": "6378627999444530493", "kind": "compute#network", "name": "apigee-network", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "peerings": [ { "autoCreateRoutes": true, "exchangeSubnetRoutes": true, "exportCustomRoutes": false, "exportSubnetRoutesWithPublicIp": false, "importCustomRoutes": false, "importSubnetRoutesWithPublicIp": false, "name": "servicenetworking-googleapis-com", "network": "https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/servicenetworking", "stackType": "IPV4_ONLY", "state": "ACTIVE", "stateDetails": "[2023-04-27T12:13:45.847-07:00]: Connected." } ], "routingConfig": { "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/6378627999444530493", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/subnetworks/apigee-subnetwork" ] } ================================================ FILE: test-data/apigee1/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-apigee1-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-northeast3", "supportsPzs": false }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-southeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-southwest1", "supportsPzs": false }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12", "description": "europe-west12", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west12-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west12-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west12-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west12", "supportsPzs": true }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west6", "supportsPzs": false }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west8", "supportsPzs": false }, { "kind": "compute#region", "id": "1520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9", "description": "europe-west9", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west9-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west9-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west9-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west9", "supportsPzs": false }, { "kind": "compute#region", "id": "1580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1", "description": "me-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-central1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/me-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1", "description": "me-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/me-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 2 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 40 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 2 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 1 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 1 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-east5", "supportsPzs": false }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions" } ================================================ FILE: test-data/apigee1/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-apigee1-aaaa/aggregated/subnetworks", "items": { "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east1" } ], "message": "There are no results for scope 'regions/asia-east1' on this page." } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east2" } ], "message": "There are no results for scope 'regions/asia-east2' on this page." } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ], "message": "There are no results for scope 'regions/asia-northeast1' on this page." } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ], "message": "There are no results for scope 'regions/asia-northeast2' on this page." } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ], "message": "There are no results for scope 'regions/asia-northeast3' on this page." } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-south1" } ], "message": "There are no results for scope 'regions/asia-south1' on this page." } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-south2" } ], "message": "There are no results for scope 'regions/asia-south2' on this page." } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ], "message": "There are no results for scope 'regions/asia-southeast1' on this page." } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ], "message": "There are no results for scope 'regions/asia-southeast2' on this page." } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ], "message": "There are no results for scope 'regions/australia-southeast1' on this page." } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ], "message": "There are no results for scope 'regions/australia-southeast2' on this page." } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-central2" } ], "message": "There are no results for scope 'regions/europe-central2' on this page." } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-north1" } ], "message": "There are no results for scope 'regions/europe-north1' on this page." } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ], "message": "There are no results for scope 'regions/europe-southwest1' on this page." } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west1" } ], "message": "There are no results for scope 'regions/europe-west1' on this page." } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west12" } ], "message": "There are no results for scope 'regions/europe-west12' on this page." } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west2" } ], "message": "There are no results for scope 'regions/europe-west2' on this page." } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west3" } ], "message": "There are no results for scope 'regions/europe-west3' on this page." } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west4" } ], "message": "There are no results for scope 'regions/europe-west4' on this page." } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west6" } ], "message": "There are no results for scope 'regions/europe-west6' on this page." } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west8" } ], "message": "There are no results for scope 'regions/europe-west8' on this page." } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west9" } ], "message": "There are no results for scope 'regions/europe-west9' on this page." } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-central1" } ], "message": "There are no results for scope 'regions/me-central1' on this page." } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-west1" } ], "message": "There are no results for scope 'regions/me-west1' on this page." } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ], "message": "There are no results for scope 'regions/northamerica-northeast1' on this page." } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ], "message": "There are no results for scope 'regions/northamerica-northeast2' on this page." } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ], "message": "There are no results for scope 'regions/southamerica-east1' on this page." } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ], "message": "There are no results for scope 'regions/southamerica-west1' on this page." } }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2023-04-30T20:40:09.697-07:00", "enableFlowLogs": false, "fingerprint": "pT4VVtoPFRA=", "gatewayAddress": "10.128.0.1", "id": "8347197685109000822", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "logConfig": { "aggregationInterval": "INTERVAL_5_SEC", "enable": false, "flowSampling": 0.5, "metadata": "INCLUDE_ALL_METADATA" }, "name": "apigee-subnetwork", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/subnetworks/apigee-subnetwork", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east1" } ], "message": "There are no results for scope 'regions/us-east1' on this page." } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east4" } ], "message": "There are no results for scope 'regions/us-east4' on this page." } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east5" } ], "message": "There are no results for scope 'regions/us-east5' on this page." } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-south1" } ], "message": "There are no results for scope 'regions/us-south1' on this page." } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west1" } ], "message": "There are no results for scope 'regions/us-west1' on this page." } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west2" } ], "message": "There are no results for scope 'regions/us-west2' on this page." } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west3" } ], "message": "There are no results for scope 'regions/us-west3' on this page." } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west4" } ], "message": "There are no results for scope 'regions/us-west4' on this page." } } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/aggregated/subnetworks" } ================================================ FILE: test-data/apigee1/json-dumps/compute-subnetworks-apigee-subnetwork.json ================================================ { "kind": "compute#subnetwork", "id": "8347197685109000822", "creationTimestamp": "2023-04-30T20:40:09.697-07:00", "name": "apigee-subnetwork", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network", "ipCidrRange": "10.128.0.0/20", "gatewayAddress": "10.128.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/subnetworks/apigee-subnetwork", "privateIpGoogleAccess": true, "fingerprint": "k7qIdBCe3Ew=", "enableFlowLogs": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "logConfig": { "enable": false }, "stackType": "IPV4_ONLY" } ================================================ FILE: test-data/apigee1/json-dumps/compute-templates.json ================================================ { "id": "projects/gcpdiag-apigee1-aaaa/global/instanceTemplates", "items": [ { "creationTimestamp": "2023-04-30T20:46:33.855-07:00", "description": "", "id": "3650966283431872758", "kind": "compute#instanceTemplate", "name": "mig-bridge-us-central1-20230501034633253400000001", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "20", "diskType": "pd-standard", "sourceImage": "projects/centos-cloud/global/images/family/centos-7" }, "interface": "SCSI", "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "machineType": "e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "ENDPOINT", "value": "10.25.116.2" }, { "key": "startup-script-url", "value": "gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/subnetworks/apigee-subnetwork" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only" ] } ], "tags": { "items": [ "https-server", "mig-bridge" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/instanceTemplates/mig-bridge-us-central1-20230501034633253400000001" } ], "kind": "compute#instanceTemplateList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/instanceTemplates" } ================================================ FILE: test-data/apigee1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12340005@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:12340005-compute@developer.gserviceaccount.com", "serviceAccount:12340005@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:test@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12340005@service-networking.iam.gserviceaccount.com" ], "role": "roles/servicenetworking.serviceAgent" } ], "etag": "BwXc5HTQmKE=", "version": 1 } ================================================ FILE: test-data/apigee1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "name": "projects/gcpdiag-apigee1-aaaa/serviceAccounts/12340005-compute@developer.gserviceaccount.com", "projectId": "gcpdiag-apigee1-aaaa", "uniqueId": "110933271309447752400", "email": "12340005-compute@developer.gserviceaccount.com", "displayName": "Compute Engine default service account", "etag": "MDEwMjE5MjA=", "oauth2ClientId": "110933271309447752400" } ] } ================================================ FILE: test-data/apigee1/json-dumps/kms-key-iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12340005@gcp-sa-apigee.iam.gserviceaccount.com" ], "role": "roles/cloudkms.cryptoKeyEncrypterDecrypter" } ], "etag": "BwXmKjXAWYM=", "version": 1 } ================================================ FILE: test-data/apigee1/json-dumps/project.json ================================================ { "name": "projects/12340005", "parent": "folders/373737373737", "projectId": "gcpdiag-apigee1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - apigee1", "createTime": "2022-04-15T07:57:45.772Z", "updateTime": "2022-04-15T07:57:47.522Z", "etag": "dTwm6ePUckc4Y+dgi3Yg1g==" } ================================================ FILE: test-data/apigee1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340005/services/apigee.googleapis.com", "config": { "name": "apigee.googleapis.com", "title": "Apigee API", "documentation": { "summary": "Use the Apigee API to programmatically develop and manage APIs\nwith a set of RESTful operations. Develop and secure API proxies,\ndeploy and undeploy API proxy revisions, monitor APIs, configure\nenvironments, manage users, and more.\n\nNote: This product is available as a free trial\nfor a time period of 60 days." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "apigee.googleapis.com/Proxy", "displayName": "Apigee proxy", "description": "Monitored resource for Apigee API proxy.", "labels": [ { "key": "resource_container", "description": "The GCP project ID that writes to this monitored resource." }, { "key": "org", "description": "An organization is a container for all the objects in an Apigee account." }, { "key": "env", "description": "An environment is a runtime execution context for the proxies in an organization." }, { "key": "location", "description": "Location where the Apigee infrastructure is provisioned." }, { "key": "proxy_name", "description": "A proxy is your interface to developers that want to use your backend services." }, { "key": "revision", "description": "Revisions let you manage API proxy updates as you create and deploy them to an environment." }, { "key": "host", "description": "Host is the runtime container/vm that the proxy is deployed on." } ], "launchStage": "BETA" }, { "type": "apigee.googleapis.com/ProxyV2", "displayName": "Apigee proxy (v2)", "description": "Monitored resource for Apigee API proxy (v2).", "labels": [ { "key": "resource_container", "description": "The GCP project ID that writes to this monitored resource." }, { "key": "org", "description": "An organization is a container for all the objects in an Apigee account." }, { "key": "env", "description": "An environment is a runtime execution context for the proxies in an organization." }, { "key": "location", "description": "Location where the Apigee infrastructure is provisioned." }, { "key": "proxy_name", "description": "A proxy is your interface to developers that want to use your backend services." }, { "key": "runtime_version", "description": "Version of the Apigee Runtime for the proxy." }, { "key": "instance_id", "description": "Instance ID of the Apigee application." } ], "launchStage": "ALPHA" }, { "type": "apigee.googleapis.com/Environment", "displayName": "Apigee environment", "description": "Monitored resource for Apigee environment.", "labels": [ { "key": "resource_container", "description": "The GCP project ID that writes to this monitored resource." }, { "key": "org", "description": "An organization is a container for all the objects in an Apigee account." }, { "key": "env", "description": "An environment is a runtime execution context for the proxies in an organization." }, { "key": "location", "description": "Location where the Apigee infrastructure is provisioned." } ], "launchStage": "BETA" }, { "type": "apigee.googleapis.com/TargetV2", "displayName": "Apigee target (v2)", "description": "Monitored resource for Apigee target (v2) with the host endpoint label.", "labels": [ { "key": "resource_container", "description": "The GCP project ID that writes to this monitored resource." }, { "key": "org", "description": "An organization is a container for all the objects in an Apigee account." }, { "key": "env", "description": "An environment is a runtime execution context for the proxies in an organization." }, { "key": "location", "description": "Location where the Apigee infrastructure is provisioned." }, { "key": "proxy_name", "description": "A proxy is your interface to developers that want to use your backend services." }, { "key": "type", "description": "Type of target such as service callout." }, { "key": "endpoint", "description": "Target endpoint URL." }, { "key": "runtime_version", "description": "Version of the Apigee Runtime for the proxy." }, { "key": "instance_id", "description": "Instance ID of the Apigee application." } ], "launchStage": "ALPHA" }, { "type": "k8s_container", "displayName": "Kubernetes Container", "description": "A Kubernetes container instance.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The physical location of the cluster that contains the container." }, { "key": "cluster_name", "description": "The name of the cluster that the container is running in." }, { "key": "namespace_name", "description": "The name of the namespace that the container is running in." }, { "key": "pod_name", "description": "The name of the pod that the container is running in." }, { "key": "container_name", "description": "The name of the container." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "apigee.googleapis.com/Proxy", "metrics": [ "apigee.googleapis.com/internal/proxy/response_count_delta", "apigee.googleapis.com/internal/proxy/response_latencies_double", "apigee.googleapis.com/proxy/request_count", "apigee.googleapis.com/proxy/response_count", "apigee.googleapis.com/proxy/latencies", "apigee.googleapis.com/internal/target/response_count_delta", "apigee.googleapis.com/internal/target/response_latencies_double", "apigee.googleapis.com/target/request_count", "apigee.googleapis.com/target/response_count", "apigee.googleapis.com/target/latencies", "apigee.googleapis.com/policy/latencies" ] }, { "monitoredResource": "apigee.googleapis.com/ProxyV2", "metrics": [ "apigee.googleapis.com/mint/request_count", "apigee.googleapis.com/mint/response_count", "apigee.googleapis.com/mint/latencies_percentile", "apigee.googleapis.com/internal/proxyv2/response_count_delta", "apigee.googleapis.com/internal/proxyv2/response_latencies_double", "apigee.googleapis.com/proxyv2/request_count", "apigee.googleapis.com/proxyv2/response_count", "apigee.googleapis.com/internal/proxyv2/latencies_bucket", "apigee.googleapis.com/internal/proxyv2/latencies_count", "apigee.googleapis.com/internal/proxyv2/latencies_sum", "apigee.googleapis.com/proxyv2/latencies_percentile", "apigee.googleapis.com/proxyv2/latencies", "apigee.googleapis.com/internal/proxyv2/heartbeat", "apigee.googleapis.com/policyv2/latencies", "apigee.googleapis.com/policyv2/latencies_percentile", "apigee.googleapis.com/internal/targetv2/response_count_delta", "apigee.googleapis.com/internal/targetv2/response_latencies_double", "apigee.googleapis.com/targetv2/request_count", "apigee.googleapis.com/targetv2/response_count", "apigee.googleapis.com/targetv2/latencies", "apigee.googleapis.com/targetv2/latencies_percentile", "apigee.googleapis.com/proxyv2/release/response_count", "apigee.googleapis.com/proxyv2/release/latencies_percentile" ] }, { "monitoredResource": "k8s_container", "metrics": [ "apigee.googleapis.com/server/fault_count", "apigee.googleapis.com/internal/server/prometheus_remote_storage_succeeded_samples_total", "apigee.googleapis.com/server/nio", "apigee.googleapis.com/server/num_threads", "apigee.googleapis.com/server/request_count", "apigee.googleapis.com/server/response_count", "apigee.googleapis.com/server/latencies", "apigee.googleapis.com/upstream/request_count", "apigee.googleapis.com/upstream/response_count", "apigee.googleapis.com/upstream/latencies", "apigee.googleapis.com/udca/server/local_file_oldest_ts", "apigee.googleapis.com/udca/server/local_file_latest_ts", "apigee.googleapis.com/udca/server/local_file_count", "apigee.googleapis.com/udca/server/total_latencies", "apigee.googleapis.com/udca/server/upload_latencies", "apigee.googleapis.com/udca/upstream/http_error_count", "apigee.googleapis.com/udca/upstream/http_latencies", "apigee.googleapis.com/udca/upstream/uploaded_file_sizes", "apigee.googleapis.com/udca/upstream/uploaded_file_count", "apigee.googleapis.com/udca/disk/used_bytes", "apigee.googleapis.com/udca/server/pruned_file_count", "apigee.googleapis.com/udca/server/retry_cache_size", "apigee.googleapis.com/cassandra/process_max_fds", "apigee.googleapis.com/cassandra/process_open_fds", "apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_max", "apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_init", "apigee.googleapis.com/cassandra/jvm_memory_bytes_max", "apigee.googleapis.com/cassandra/process_cpu_seconds_total", "apigee.googleapis.com/cassandra/jvm_memory_bytes_used", "apigee.googleapis.com/cassandra/compaction_pendingtasks", "apigee.googleapis.com/cassandra/jvm_memory_bytes_init", "apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_used", "apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_committed", "apigee.googleapis.com/cassandra/clientrequest_latency", "apigee.googleapis.com/cassandra/tablerequests_rate", "apigee.googleapis.com/cassandra/tablerequests_latency", "apigee.googleapis.com/cassandra/jvm_memory_bytes_committed", "apigee.googleapis.com/internal/cluster/ready_replicas", "apigee.googleapis.com/internal/cluster/total_replicas", "apigee.googleapis.com/internal/accesslog/input_records_total_count", "apigee.googleapis.com/internal/accesslog/output_records_total_count", "apigee.googleapis.com/internal/accesslog/output_buffer_queue_length", "apigee.googleapis.com/internal/accesslog/output_buffer_total_bytes", "apigee.googleapis.com/internal/accesslog/output_emit_count_current", "apigee.googleapis.com/internal/accesslog/output_errors_count_current", "apigee.googleapis.com/internal/accesslog/output_retry_count_current", "apigee.googleapis.com/connectagent/sent_bytes", "apigee.googleapis.com/connectagent/received_bytes", "apigee.googleapis.com/connectagent/sent_messages", "apigee.googleapis.com/connectagent/received_messages", "apigee.googleapis.com/connectagent/completed_rpcs_count", "apigee.googleapis.com/connectagent/stream_liveness_time", "apigee.googleapis.com/connectagent/dropped_requests", "apigee.googleapis.com/connectagent/dropped_responses", "apigee.googleapis.com/envoy/redis/downstream_rq_total", "apigee.googleapis.com/envoy/redis/downstream_rq_active", "apigee.googleapis.com/envoy/redis/downstream_cx_total", "apigee.googleapis.com/envoy/redis/downstream_cx_active", "apigee.googleapis.com/envoy/redis/commands/evalsha/total", "apigee.googleapis.com/envoy/redis/commands/evalsha/success", "apigee.googleapis.com/envoy/redis/commands/evalsha/error", "apigee.googleapis.com/envoy/redis/commands/evalsha/latency", "apigee.googleapis.com/envoy/redis/commands/get/total", "apigee.googleapis.com/envoy/redis/commands/get/success", "apigee.googleapis.com/envoy/redis/commands/get/error", "apigee.googleapis.com/envoy/redis/commands/get/latency", "apigee.googleapis.com/internal/server/google_token_generation_latencies", "apigee.googleapis.com/internal/server/google_token_generation_count", "apigee.googleapis.com/internal/envoy/gateway/downstream_request_count", "apigee.googleapis.com/internal/envoy/gateway/downstream_latencies", "apigee.googleapis.com/internal/envoy/gateway/downstream_response_count", "apigee.googleapis.com/internal/envoy/gateway/upstream_request_count", "apigee.googleapis.com/internal/envoy/gateway/upstream_latencies", "apigee.googleapis.com/internal/envoy/gateway/grpc_access_logs_written_count", "apigee.googleapis.com/internal/envoy/gateway/grpc_access_logs_dropped_count", "apigee.googleapis.com/internal/envoy/adapter/request_count", "apigee.googleapis.com/internal/envoy/adapter/auth_request_latencies", "apigee.googleapis.com/internal/envoy/adapter/apigee_request_latencies", "apigee.googleapis.com/internal/envoy/adapter/products_cached", "apigee.googleapis.com/internal/envoy/adapter/analytics_records_batch_size" ] }, { "monitoredResource": "apigee.googleapis.com/Environment", "metrics": [ "apigee.googleapis.com/environment/anomaly_count" ] }, { "monitoredResource": "apigee.googleapis.com/TargetV2", "metrics": [ "apigee.googleapis.com/internal/targetv2/response_count_delta", "apigee.googleapis.com/internal/targetv2/response_latencies_double", "apigee.googleapis.com/targetv2/request_count", "apigee.googleapis.com/targetv2/response_count", "apigee.googleapis.com/targetv2/latencies", "apigee.googleapis.com/targetv2/latencies_percentile", "apigee.googleapis.com/targetv2/release/response_count", "apigee.googleapis.com/targetv2/release/latencies_percentile" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/cloudkms.googleapis.com", "config": { "name": "cloudkms.googleapis.com", "title": "Cloud Key Management Service (KMS) API", "documentation": { "summary": "Manages keys and performs cryptographic operations in a central cloud service, for direct use by other cloud resources and applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudkms.googleapis.com/Project", "displayName": "KMS project", "description": "KMS project.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource." }, { "key": "location", "description": "The location of the resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudkms.googleapis.com/Project", "metrics": [ "cloudkms.googleapis.com/ekm/external/request_count", "cloudkms.googleapis.com/ekm/external/request_latencies", "cloudkms.googleapis.com/external_kms_multiregion_requests", "cloudkms.googleapis.com/hsm_multiregion_asymmetric_requests", "cloudkms.googleapis.com/hsm_multiregion_symmetric_requests", "cloudkms.googleapis.com/peak_qps", "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/exceeded", "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/usage", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/exceeded", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/usage", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/exceeded", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/usage", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/exceeded", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/usage", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/exceeded", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/usage" ] }, { "monitoredResource": "cloudkms.googleapis.com/Project", "metrics": [ "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/limit", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/limit", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/limit", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/limit", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/servicenetworking.googleapis.com", "config": { "name": "servicenetworking.googleapis.com", "title": "Service Networking API", "documentation": { "summary": "Provides automatic management of network configurations necessary for certain services." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" } ] } ================================================ FILE: test-data/apigee1/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - apigee1" project_id = "gcpdiag-apigee1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id } resource "google_project_service" "apigee" { project = google_project.project.project_id service = "apigee.googleapis.com" } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "servicenetworking" { project = google_project.project.project_id service = "servicenetworking.googleapis.com" } resource "google_project_service" "kms" { project = google_project.project.project_id service = "cloudkms.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/apigee1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/bigquery1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340007 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/services.json \ json-dumps/project.json json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/bigquery1/job.tf ================================================ resource "google_bigquery_table" "test_table" { project = "gcpdiag-bigquery1-aaaa" dataset_id = "test_dataset" table_id = "test_table" } resource "google_bigquery_dataset" "test_dataset" { project = "gcpdiag-bigquery1-aaaa" dataset_id = "test_dataset" friendly_name = "test" description = "This is a test description" location = "US" } resource "google_bigquery_job" "job" { project = "gcpdiag-bigquery1-aaaa" job_id = "job_query_1" query { query = "SELECT * FROM [bigquery-public-data.america_health_rankings.ahr] LIMIT 10" destination_table { project_id = "gcpdiag-bigquery1-aaaa" dataset_id = "test_dataset" table_id = "test_table" } allow_large_results = true flatten_results = true script_options { key_result_statement = "LAST" } } } ================================================ FILE: test-data/bigquery1/json-dumps/ancestor.json ================================================ { "ancestor": [ { "resourceId": { "type": "project", "id": "gcpdiag-bigquery1-aaaa" } }, { "resourceId": { "type": "folder", "id": "123456789012" } }, { "resourceId": { "type": "organization", "id": "987654321098" } } ] } ================================================ FILE: test-data/bigquery1/json-dumps/bigquery-failed-job.json ================================================ { "kind": "bigquery#job", "etag": "N0ge4qTBNooQUmVCoxGG8g==", "id": "gcpdiag-bigquery1-aaaa:US.bquxjob_12d56171_191bd834486", "selfLink": "https://content-bigquery.googleapis.com/bigquery/v2/projects/gcpdiag-bigquery1-aaaa/jobs/bquxjob_12d56171_191bd834486?location=US", "user_email": "pschnayder@google.com", "configuration": { "query": { "query": "-- Find the top 100 names from the year 2017.\nCREATE TEMP TABLE top_names_1(name STRING) CLUSTER BY name\nAS\n SELECT name\n FROM `bigquery-public-data`.usa_names.usa_1910_current\n WHERE year = 2017\n ORDER BY number DESC LIMIT 100\n;\n-- Which names appear as words in Shakespeare's plays?\nSELECT\n name AS shakespeare_name\nFROM top_names_1\nWHERE name IN (\n SELECT word\n FROM `bigquery-public-data`.samples.shakespeare\n);", "priority": "INTERACTIVE", "useLegacySql": false }, "jobType": "QUERY" }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "bquxjob_12d56171_191bd834486", "location": "US" }, "statistics": { "creationTime": "1725461382806", "startTime": "1725461382902", "endTime": "1725461383642", "totalBytesProcessed": "0", "query": { "totalBytesProcessed": "0", "totalBytesBilled": "0", "totalSlotMs": "0", "statementType": "SCRIPT" }, "totalSlotMs": "0", "numChildJobs": "1" }, "status": { "errorResult": { "reason": "invalidQuery", "location": "query", "debugInfo": "[INVALID_INPUT] message=QUERY_ERROR: [Result of ORDER BY queries cannot be clustered.] debug=code: \t BAD_QUERY\ndescription: \"Result of ORDER BY queries cannot be clustered.\"\ncause: USER_ERROR\naddress: \"http://ovpe12.prod.google.com:4901/task?handle=logs.344.serving.mixer.0.cloud-dataengine.3845348967303\"\nstatus_proto {\n code: 3\n space: \"generic\"\n message: \"Result of ORDER BY queries cannot be clustered.\"\n}\nerror_details {\n argument_error {\n query_error {\n }\n }\n debug_info {\n error_message_template: \"Result of ORDER BY queries cannot be clustered.\"\n error_id: 2257563603\n }\n}\n errorProto=code: \"QUERY_ERROR\"\nargument: \"Result of ORDER BY queries cannot be clustered.\"\nlocation_type: OTHER\nlocation: \"query\"\n\n\tat com.google.cloud.helix.common.Exceptions.fromProto(Exceptions.java:2091)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl.mapDremelErrorsTohelixException(QueryExecutorImpl.java:1117)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:714)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:642)\n\tat com.google.net.rpc3.stream.RpcMessageCallback$Internal$Adapter.onMessage(RpcMessageCallback.java:96)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.processMessageUnlocked(RpcStreamInternalContext.java:1747)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksInternalUnlocked(RpcStreamInternalContext.java:2756)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksUnlocked(RpcStreamInternalContext.java:2680)\n\tat com.google.net.eventmanager.AbstractFutureTask$Sync.innerRun(AbstractFutureTask.java:259)\n\tat com.google.net.eventmanager.AbstractFutureTask.run(AbstractFutureTask.java:120)\n\tat com.google.net.eventmanager.EventManagerImpl.runTaskTraced(EventManagerImpl.java:901)\n\tat com.google.net.eventmanager.EventManagerImpl.runTask(EventManagerImpl.java:893)\n\tat com.google.net.eventmanager.EventManagerImpl.internalRunWorkerLoop(EventManagerImpl.java:1320)\n\tat com.google.net.eventmanager.EventManagerImpl.runWorkerLoop(EventManagerImpl.java:1211)\n\tat com.google.net.eventmanager.WorkerThreadInfo.runWorkerLoop(WorkerThreadInfo.java:153)\n\tat com.google.net.eventmanager.EventManagerImpl$WorkerThread.run(EventManagerImpl.java:2000)\n", "message": "Query error: Result of ORDER BY queries cannot be clustered. at [2:1]" }, "state": "DONE" }, "principal_subject": "user:pschnayder@google.com", "jobCreationReason": { "code": "REQUESTED" } } ================================================ FILE: test-data/bigquery1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "user:testuser@example.com" ], "role": "roles/owner" } ], "etag": "BwXXim1ZMUM=", "version": 1 } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_invalid-region_id.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:invalid-region.any_id", "status": { "state": "DONE", "errorResult": { "reason": "invalid", "message": "Invalid value for location: invalid-region is not a valid value" } }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "any_id", "location": "invalid-region" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_IS.json ================================================ { "kind": "bigquery#job", "etag": "lBg4aOpx3Gc1+nHTj6N6Ug==", "id": "gcpdiag-bigquery1-aaaa:US.information_schema_job1", "selfLink": "https://content-bigquery.googleapis.com/bigquery/v2/projects/gcpdiag-bigquery1-aaaa/jobs/information_schema_job1?location=US", "user_email": "test@example.com", "configuration": { "query": { "query": " SELECT\n job_id,\n user_email,\n CAST(start_time AS STRING) as start_time_str,\n CAST(end_time AS STRING) as end_time_str,\n query\n FROM\n `gcpdiag-bigquery1-aaaa`.`region-US`.INFORMATION_SCHEMA.JOBS\n ORDER BY\n creation_time DESC\nLIMIT 3;\n", "destinationTable": { "projectId": "gcpdiag-bigquery1-aaaa", "datasetId": "_11c155205196a0e73322cbd54ea20431b103d392", "tableId": "anone4907f0f_68b8_4fd1_9ab7_8a634b72e336" }, "writeDisposition": "WRITE_TRUNCATE", "priority": "INTERACTIVE", "useLegacySql": false, "systemVariables": { "types": { "time_zone": { "typeKind": "STRING" } }, "values": { "time_zone": "America/Los_Angeles" } } }, "jobType": "QUERY" }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "information_schema_job1", "location": "US" }, "statistics": { "creationTime": "1744544630658", "startTime": "1744544630778", "endTime": "1744544709589", "totalBytesProcessed": "23985834934", "query": { "queryPlan": [ { "name": "S00: Input", "id": "0", "startMs": "1744544650808", "endMs": "1744544699676", "waitRatioAvg": 0.753929010841052, "waitMsAvg": "32477", "waitRatioMax": 1, "waitMsMax": "43077", "readRatioAvg": 0.0078696288042342782, "readMsAvg": "339", "readRatioMax": 0.19353715439793859, "readMsMax": "8337", "computeRatioAvg": 0.00083571279337001179, "computeMsAvg": "36", "computeRatioMax": 0.12681941639389929, "computeMsMax": "5463", "writeRatioAvg": 6.9642732780834325e-05, "writeMsAvg": "3", "writeRatioMax": 0.08649627411379622, "writeMsMax": "3726", "shuffleOutputBytes": "1069596", "shuffleOutputBytesSpilled": "0", "recordsRead": "3106", "recordsWritten": "2681", "parallelInputs": "2345811", "completedParallelInputs": "2345811", "status": "COMPLETE", "steps": [ { "kind": "READ", "substeps": [ "$10:creation_time, $11:change_timestamp, $12:organization_number, $13:project_id, $14:user_email, $15:job_id, $16:job.$is_not_null, $17:job.statistics.start_time, $18:job.statistics.end_time, $19:job.configuration.query.query", "FROM gcpdiag-bigquery1-aaaa.region-US.INFORMATION_SCHEMA.JOBS", "WHERE equal($13, 'gcpdiag-bigquery1-aaaa')" ] }, { "kind": "AGGREGATE", "substeps": [ "GROUP BY $60 := $10, $61 := $12, $62 := $13, $63 := $15", "$40 := ANY_VALUE($14)", "$41 := SHARD_ARRAY_AGG($16 ORDER BY $50 ASC, $11 DESC LIMIT 1)", "$42 := SHARD_ARRAY_AGG($17 ORDER BY $50 ASC, $11 DESC LIMIT 1)", "$43 := SHARD_ARRAY_AGG($18 ORDER BY $50 ASC, $11 DESC LIMIT 1)", "$44 := SHARD_ARRAY_AGG($19 ORDER BY $50 ASC, $11 DESC LIMIT 1)" ] }, { "kind": "COMPUTE", "substeps": [ "$50 := is_null($16)" ] }, { "kind": "WRITE", "substeps": [ "$60, $61, $62, $63, $40, $41, $42, $43, $44", "TO __stage00_output", "BY HASH($60, $61, $62, $63)" ] } ], "slotMs": "93254539", "computeMode": "BIGQUERY" }, { "name": "S01: Input", "id": "1", "startMs": "1744544699698", "endMs": "1744544700040", "waitRatioAvg": 2.3214244260278106e-05, "waitMsAvg": "1", "waitRatioMax": 2.3214244260278106e-05, "waitMsMax": "1", "readRatioAvg": 0.00773034333867261, "readMsAvg": "333", "readRatioMax": 0.00773034333867261, "readMsMax": "333", "computeRatioAvg": 0.00020892819834250295, "computeMsAvg": "9", "computeRatioMax": 0.00020892819834250295, "computeMsMax": "9", "writeRatioAvg": 4.6428488520556212e-05, "writeMsAvg": "2", "writeRatioMax": 4.6428488520556212e-05, "writeMsMax": "2", "shuffleOutputBytes": "0", "shuffleOutputBytesSpilled": "0", "recordsRead": "0", "recordsWritten": "0", "parallelInputs": "8", "completedParallelInputs": "8", "status": "COMPLETE", "steps": [ { "kind": "READ", "substeps": [ "$1:creation_time, $2:job_id, $3:project_id, $4:deletion_time, $5:replacement_job_id", "FROM gcpdiag-bigquery1-aaaa.region-US.INFORMATION_SCHEMA.JOBS", "WHERE equal($3, 'gcpdiag-bigquery1-aaaa')" ] }, { "kind": "WRITE", "substeps": [ "$1, $2, $3, $4, $5", "TO __stage01_output" ] } ], "slotMs": "739", "computeMode": "BIGQUERY" }, { "name": "S02: Join+", "id": "2", "startMs": "1744544700113", "endMs": "1744544700390", "inputStages": [ "0", "1" ], "waitRatioAvg": 0.0041785639668500589, "waitMsAvg": "180", "waitRatioMax": 0.0057571325765489708, "waitMsMax": "248", "readRatioAvg": 0, "readMsAvg": "0", "readRatioMax": 0, "readMsMax": "0", "computeRatioAvg": 0.0015785686096989112, "computeMsAvg": "68", "computeRatioMax": 0.0023214244260278106, "computeMsMax": "100", "writeRatioAvg": 2.3214244260278106e-05, "writeMsAvg": "1", "writeRatioMax": 0.00013928546556166865, "writeMsMax": "6", "shuffleOutputBytes": "656695", "shuffleOutputBytesSpilled": "0", "recordsRead": "2681", "recordsWritten": "2169", "parallelInputs": "1000", "completedParallelInputs": "1000", "status": "COMPLETE", "steps": [ { "kind": "READ", "substeps": [ "$60, $61, $62, $63, $40, $41, $42, $43, $44", "FROM __stage00_output" ] }, { "kind": "READ", "substeps": [ "$1, $2, $3, $4, $5", "FROM __stage01_output" ] }, { "kind": "COMPUTE", "substeps": [ "$20 := CAST(timestamp_millis(array_at_offset($95, 0)) AS STRING)", "$21 := CAST(timestamp_millis(array_at_offset($96, 0)) AS STRING)", "$22 := if(not(is_null($90)), NULL, if(starts_with($94, 'principal://'), '', $94))", "$23 := if(is_null($90), $93, $91)", "$24 := if(is_null($90), array_at_offset($97, 0), NULL)" ] }, { "kind": "SORT", "substeps": [ "$80 DESC", "LIMIT 3" ] }, { "kind": "JOIN", "substeps": [ "$80 := $70, $81 := $73, $82 := $30, $83 := $32, $84 := $33, $85 := $34, $86 := $4, $87 := $5", "LEFT OUTER HASH JOIN EACH WITH ALL ON $70 = $1, $73 = $2, $72 = $3" ] }, { "kind": "FILTER", "substeps": [ "not(is_null(array_at_offset($31, 0)))" ] }, { "kind": "AGGREGATE", "substeps": [ "GROUP BY $70 := $60, $71 := $61, $72 := $62, $73 := $63", "$30 := ANY_VALUE($40)", "$31 := ROOT_ARRAY_AGG($41 ORDER BY ASC, DESC LIMIT 1)", "$32 := ROOT_ARRAY_AGG($42 ORDER BY ASC, DESC LIMIT 1)", "$33 := ROOT_ARRAY_AGG($43 ORDER BY ASC, DESC LIMIT 1)", "$34 := ROOT_ARRAY_AGG($44 ORDER BY ASC, DESC LIMIT 1)" ] }, { "kind": "WRITE", "substeps": [ "$92, $20, $21, $22, $23, $24", "TO __stage02_output" ] } ], "slotMs": "125882", "computeMode": "BIGQUERY" }, { "name": "S03: Output", "id": "3", "startMs": "1744544700292", "endMs": "1744544700397", "inputStages": [ "2" ], "waitRatioAvg": 0.005710704088028414, "waitMsAvg": "246", "waitRatioMax": 0.005710704088028414, "waitMsMax": "246", "readRatioAvg": 0, "readMsAvg": "0", "readRatioMax": 0, "readMsMax": "0", "computeRatioAvg": 0.00039464215242472779, "computeMsAvg": "17", "computeRatioMax": 0.00039464215242472779, "computeMsMax": "17", "writeRatioAvg": 0.00016249970982194675, "writeMsAvg": "7", "writeRatioMax": 0.00016249970982194675, "writeMsMax": "7", "shuffleOutputBytes": "1236", "shuffleOutputBytesSpilled": "0", "recordsRead": "2169", "recordsWritten": "3", "parallelInputs": "1", "completedParallelInputs": "1", "status": "COMPLETE", "steps": [ { "kind": "READ", "substeps": [ "$92, $20, $21, $22, $23, $24", "FROM __stage02_output" ] }, { "kind": "SORT", "substeps": [ "$92 DESC", "LIMIT 3" ] }, { "kind": "WRITE", "substeps": [ "$100, $101, $102, $103, $104", "TO __stage03_output" ] } ], "slotMs": "107", "computeMode": "BIGQUERY" } ], "estimatedBytesProcessed": "590823461618180", "timeline": [ { "elapsedMs": "20222", "totalSlotMs": "500586", "pendingUnits": "2345811", "completedUnits": "0", "activeUnits": "13", "estimatedRunnableUnits": "0" }, { "elapsedMs": "21222", "totalSlotMs": "1105525", "pendingUnits": "2345810", "completedUnits": "1", "activeUnits": "81", "estimatedRunnableUnits": "0" }, { "elapsedMs": "22222", "totalSlotMs": "1609604", "pendingUnits": "2345806", "completedUnits": "5", "activeUnits": "1373", "estimatedRunnableUnits": "0" }, { "elapsedMs": "37222", "totalSlotMs": "11300509", "pendingUnits": "2345806", "completedUnits": "5", "activeUnits": "1373", "estimatedRunnableUnits": "0" }, { "elapsedMs": "38222", "totalSlotMs": "12895419", "pendingUnits": "2344982", "completedUnits": "829", "activeUnits": "1547", "estimatedRunnableUnits": "763" }, { "elapsedMs": "39222", "totalSlotMs": "14895419", "pendingUnits": "2344980", "completedUnits": "831", "activeUnits": "2447", "estimatedRunnableUnits": "274" }, { "elapsedMs": "41222", "totalSlotMs": "18895419", "pendingUnits": "2343866", "completedUnits": "1945", "activeUnits": "2335", "estimatedRunnableUnits": "338" }, { "elapsedMs": "42222", "totalSlotMs": "20895419", "pendingUnits": "2343528", "completedUnits": "2283", "activeUnits": "2335", "estimatedRunnableUnits": "338" }, { "elapsedMs": "43222", "totalSlotMs": "22895419", "pendingUnits": "2343489", "completedUnits": "2322", "activeUnits": "3261", "estimatedRunnableUnits": "0" }, { "elapsedMs": "45222", "totalSlotMs": "26895419", "pendingUnits": "2342545", "completedUnits": "3266", "activeUnits": "3918", "estimatedRunnableUnits": "0" }, { "elapsedMs": "47222", "totalSlotMs": "30895419", "pendingUnits": "2342545", "completedUnits": "3266", "activeUnits": "3918", "estimatedRunnableUnits": "0" }, { "elapsedMs": "48222", "totalSlotMs": "32895419", "pendingUnits": "2341207", "completedUnits": "4604", "activeUnits": "4472", "estimatedRunnableUnits": "136" }, { "elapsedMs": "51222", "totalSlotMs": "38895419", "pendingUnits": "2339285", "completedUnits": "6526", "activeUnits": "3699", "estimatedRunnableUnits": "211" }, { "elapsedMs": "52222", "totalSlotMs": "40895419", "pendingUnits": "2337737", "completedUnits": "8074", "activeUnits": "2938", "estimatedRunnableUnits": "0" }, { "elapsedMs": "54222", "totalSlotMs": "44895419", "pendingUnits": "2337496", "completedUnits": "8315", "activeUnits": "3151", "estimatedRunnableUnits": "826" }, { "elapsedMs": "55222", "totalSlotMs": "46895419", "pendingUnits": "2336264", "completedUnits": "9547", "activeUnits": "2493", "estimatedRunnableUnits": "826" }, { "elapsedMs": "56222", "totalSlotMs": "48895419", "pendingUnits": "2335237", "completedUnits": "10574", "activeUnits": "2044", "estimatedRunnableUnits": "329" }, { "elapsedMs": "57222", "totalSlotMs": "50895419", "pendingUnits": "2334351", "completedUnits": "11460", "activeUnits": "2156", "estimatedRunnableUnits": "466" }, { "elapsedMs": "58222", "totalSlotMs": "52895419", "pendingUnits": "2334332", "completedUnits": "11479", "activeUnits": "2156", "estimatedRunnableUnits": "466" }, { "elapsedMs": "59222", "totalSlotMs": "54895419", "pendingUnits": "2333780", "completedUnits": "12031", "activeUnits": "2605", "estimatedRunnableUnits": "398" }, { "elapsedMs": "60222", "totalSlotMs": "56895419", "pendingUnits": "2333357", "completedUnits": "12454", "activeUnits": "2764", "estimatedRunnableUnits": "110" }, { "elapsedMs": "61222", "totalSlotMs": "58895419", "pendingUnits": "2333099", "completedUnits": "12712", "activeUnits": "2993", "estimatedRunnableUnits": "49" }, { "elapsedMs": "62222", "totalSlotMs": "60895419", "pendingUnits": "2330543", "completedUnits": "15268", "activeUnits": "2372", "estimatedRunnableUnits": "49" }, { "elapsedMs": "63222", "totalSlotMs": "62895419", "pendingUnits": "1769", "completedUnits": "2344042", "activeUnits": "2482", "estimatedRunnableUnits": "990" }, { "elapsedMs": "64222", "totalSlotMs": "64895419", "pendingUnits": "14", "completedUnits": "2345797", "activeUnits": "2362", "estimatedRunnableUnits": "998" }, { "elapsedMs": "65222", "totalSlotMs": "66895419", "pendingUnits": "10", "completedUnits": "2345801", "activeUnits": "2141", "estimatedRunnableUnits": "0" }, { "elapsedMs": "66222", "totalSlotMs": "68895419", "pendingUnits": "9", "completedUnits": "2345802", "activeUnits": "1936", "estimatedRunnableUnits": "0" }, { "elapsedMs": "67222", "totalSlotMs": "70895419", "pendingUnits": "3", "completedUnits": "2345808", "activeUnits": "1641", "estimatedRunnableUnits": "0" }, { "elapsedMs": "68222", "totalSlotMs": "72895419", "pendingUnits": "2", "completedUnits": "2345809", "activeUnits": "1490", "estimatedRunnableUnits": "0" }, { "elapsedMs": "69222", "totalSlotMs": "74895419", "pendingUnits": "1", "completedUnits": "2345818", "activeUnits": "1", "estimatedRunnableUnits": "115" }, { "elapsedMs": "70222", "totalSlotMs": "76895419", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" }, { "elapsedMs": "71222", "totalSlotMs": "78895419", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" }, { "elapsedMs": "72222", "totalSlotMs": "80895419", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" }, { "elapsedMs": "73222", "totalSlotMs": "82895419", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" }, { "elapsedMs": "74222", "totalSlotMs": "84895419", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" }, { "elapsedMs": "75222", "totalSlotMs": "86895419", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" }, { "elapsedMs": "76222", "totalSlotMs": "88895419", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" }, { "elapsedMs": "77222", "totalSlotMs": "90895419", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" }, { "elapsedMs": "78473", "totalSlotMs": "93381269", "pendingUnits": "0", "completedUnits": "2346820", "activeUnits": "0", "estimatedRunnableUnits": "0" } ], "totalPartitionsProcessed": "192", "totalBytesProcessed": "23985834934", "totalBytesBilled": "23986176000", "billingTier": 1, "totalSlotMs": "93381269", "cacheHit": false, "referencedTables": [ { "projectId": "gcpdiag-bigquery1-aaaa", "datasetId": "region-US", "tableId": "INFORMATION_SCHEMA.JOBS" } ], "statementType": "SELECT", "searchStatistics": { "indexUsageMode": "UNUSED", "indexUnusedReasons": [ { "code": "OTHER_REASON", "message": "Search indexes cannot be used in the search query." } ] }, "performanceInsights": { "stagePerformanceStandaloneInsights": [ { "slotContention": true, "insufficientShuffleQuota": false } ] }, "transferredBytes": "0", "metadataCacheStatistics": { "tableMetadataCacheUsage": [ { "tableReference": { "projectId": "gcpdiag-bigquery1-aaaa", "datasetId": "region-US", "tableId": "INFORMATION_SCHEMA.JOBS_DELETE" }, "unusedReason": "OTHER_REASON", "explanation": "Table does not have CMETA." }, { "tableReference": { "projectId": "gcpdiag-bigquery1-aaaa", "datasetId": "region-US", "tableId": "INFORMATION_SCHEMA.JOBS" }, "unusedReason": "OTHER_REASON", "explanation": "Table does not have CMETA." } ] } }, "totalSlotMs": "93381269", "finalExecutionDurationMs": "58493" }, "status": { "state": "DONE" }, "principal_subject": "user:test@example.com", "jobCreationReason": { "code": "REQUESTED" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_csv.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_csv_error", "status": { "state": "DONE", "errorResult": { "reason": "invalid", "message": "CSV processing encountered too many errors." } }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_csv_error", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_duplicate.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_duplicate", "status": { "state": "DONE", "errorResult": { "message": "some_error" }, "errors": [{"message": "some_error"}] }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_duplicate", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_error.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_csv_error", "status": { "state": "DONE", "errorResult": { "message": "Not found: table gcpdiag-bigquery1-aaaa:dataset.table" }, "errors": [] }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_csv_error", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_errors.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_job_errors", "status": { "state": "DONE", "errorResult": { "message": "some error" }, "errors": [{"message": "Not found: table gcpdiag-bigquery1-aaaa:dataset.table"}] }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_job_errors", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_job.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_no_error_message_in_job", "status": { "state": "DONE", "errorResult": { "message": null }, "errors": [] }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_no_error_message_in_job", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_job1.json ================================================ { "kind": "bigquery#job", "etag": "N0ge4qTBNooQUmVCoxGG8g==", "id": "gcpdiag-bigquery1-aaaa:US.job1", "selfLink": "https://content-bigquery.googleapis.com/bigquery/v2/projects/gcpdiag-bigquery1-aaaa/jobs/job1?location=US", "user_email": "test@example.com", "configuration": { "query": { "query": "-- Find the top 100 names from the year 2017.\nCREATE TEMP TABLE top_names_1(name STRING) CLUSTER BY name\nAS\n SELECT name\n FROM `bigquery-public-data`.usa_names.usa_1910_current\n WHERE year = 2017\n ORDER BY number DESC LIMIT 100\n;\n-- Which names appear as words in Shakespeare's plays?\nSELECT\n name AS shakespeare_name\nFROM top_names_1\nWHERE name IN (\n SELECT word\n FROM `bigquery-public-data`.samples.shakespeare\n);", "priority": "INTERACTIVE", "useLegacySql": false }, "jobType": "QUERY" }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "job1", "location": "US" }, "statistics": { "creationTime": "1725461382806", "startTime": "1725461382902", "endTime": "1725461383642", "totalBytesProcessed": "0", "query": { "totalBytesProcessed": "0", "totalBytesBilled": "0", "totalSlotMs": "0", "statementType": "SCRIPT" }, "totalSlotMs": "0", "numChildJobs": "1" }, "status": { "errorResult": { "reason": "invalidQuery", "location": "query", "debugInfo": "[INVALID_INPUT] message=QUERY_ERROR: [Result of ORDER BY queries cannot be clustered.] debug=code: \t BAD_QUERY\ndescription: \"Result of ORDER BY queries cannot be clustered.\"\ncause: USER_ERROR\naddress: \"http://ovpe12.prod.google.com:4901/task?handle=logs.344.serving.mixer.0.cloud-dataengine.3845348967303\"\nstatus_proto {\n code: 3\n space: \"generic\"\n message: \"Result of ORDER BY queries cannot be clustered.\"\n}\nerror_details {\n argument_error {\n query_error {\n }\n }\n debug_info {\n error_message_template: \"Result of ORDER BY queries cannot be clustered.\"\n error_id: 2257563603\n }\n}\n errorProto=code: \"QUERY_ERROR\"\nargument: \"Result of ORDER BY queries cannot be clustered.\"\nlocation_type: OTHER\nlocation: \"query\"\n\n\tat com.google.cloud.helix.common.Exceptions.fromProto(Exceptions.java:2091)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl.mapDremelErrorsTohelixException(QueryExecutorImpl.java:1117)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:714)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:642)\n\tat com.google.net.rpc3.stream.RpcMessageCallback$Internal$Adapter.onMessage(RpcMessageCallback.java:96)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.processMessageUnlocked(RpcStreamInternalContext.java:1747)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksInternalUnlocked(RpcStreamInternalContext.java:2756)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksUnlocked(RpcStreamInternalContext.java:2680)\n\tat com.google.net.eventmanager.AbstractFutureTask$Sync.innerRun(AbstractFutureTask.java:259)\n\tat com.google.net.eventmanager.AbstractFutureTask.run(AbstractFutureTask.java:120)\n\tat com.google.net.eventmanager.EventManagerImpl.runTaskTraced(EventManagerImpl.java:901)\n\tat com.google.net.eventmanager.EventManagerImpl.runTask(EventManagerImpl.java:893)\n\tat com.google.net.eventmanager.EventManagerImpl.internalRunWorkerLoop(EventManagerImpl.java:1320)\n\tat com.google.net.eventmanager.EventManagerImpl.runWorkerLoop(EventManagerImpl.java:1211)\n\tat com.google.net.eventmanager.WorkerThreadInfo.runWorkerLoop(WorkerThreadInfo.java:153)\n\tat com.google.net.eventmanager.EventManagerImpl$WorkerThread.run(EventManagerImpl.java:2000)\n", "message": "Query error: Result of ORDER BY queries cannot be clustered. at [2:1]" }, "state": "DONE" }, "principal_subject": "user:test@example.com", "jobCreationReason": { "code": "REQUESTED" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_job2.json ================================================ { "kind": "bigquery#job", "etag": "N0ge4qTBNooQUmVCoxGG8g==", "id": "gcpdiag-bigquery1-aaaa:US.job2", "selfLink": "https://content-bigquery.googleapis.com/bigquery/v2/projects/gcpdiag-bigquery1-aaaa/jobs/job1?location=US", "user_email": "test@example.com", "configuration": { "query": { "query": "-- Find the top 100 names from the year 2017.\nCREATE TEMP TABLE top_names_1(name STRING) CLUSTER BY name\nAS\n SELECT name\n FROM `bigquery-public-data`.usa_names.usa_1910_current\n WHERE year = 2017\n ORDER BY number DESC LIMIT 100\n;\n-- Which names appear as words in Shakespeare's plays?\nSELECT\n name AS shakespeare_name\nFROM top_names_1\nWHERE name IN (\n SELECT word\n FROM `bigquery-public-data`.samples.shakespeare\n);", "priority": "INTERACTIVE", "useLegacySql": false }, "jobType": "QUERY" }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "job1", "location": "US" }, "statistics": { "creationTime": "1725461382806", "startTime": "1725461382902", "endTime": "1725461383642", "totalBytesProcessed": "0", "query": { "totalBytesProcessed": "0", "totalBytesBilled": "0", "totalSlotMs": "0", "statementType": "SCRIPT" }, "totalSlotMs": "0", "numChildJobs": "1" }, "status": { "errorResult": { "reason": "invalidQuery", "location": "query", "debugInfo": "[INVALID_INPUT] message=QUERY_ERROR: [Result of ORDER BY queries cannot be clustered.] debug=code: \t BAD_QUERY\ndescription: \"Result of ORDER BY queries cannot be clustered.\"\ncause: USER_ERROR\naddress: \"http://ovpe12.prod.google.com:4901/task?handle=logs.344.serving.mixer.0.cloud-dataengine.3845348967303\"\nstatus_proto {\n code: 3\n space: \"generic\"\n message: \"Result of ORDER BY queries cannot be clustered.\"\n}\nerror_details {\n argument_error {\n query_error {\n }\n }\n debug_info {\n error_message_template: \"Result of ORDER BY queries cannot be clustered.\"\n error_id: 2257563603\n }\n}\n errorProto=code: \"QUERY_ERROR\"\nargument: \"Result of ORDER BY queries cannot be clustered.\"\nlocation_type: OTHER\nlocation: \"query\"\n\n\tat com.google.cloud.helix.common.Exceptions.fromProto(Exceptions.java:2091)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl.mapDremelErrorsTohelixException(QueryExecutorImpl.java:1117)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:714)\n\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:642)\n\tat com.google.net.rpc3.stream.RpcMessageCallback$Internal$Adapter.onMessage(RpcMessageCallback.java:96)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.processMessageUnlocked(RpcStreamInternalContext.java:1747)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksInternalUnlocked(RpcStreamInternalContext.java:2756)\n\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksUnlocked(RpcStreamInternalContext.java:2680)\n\tat com.google.net.eventmanager.AbstractFutureTask$Sync.innerRun(AbstractFutureTask.java:259)\n\tat com.google.net.eventmanager.AbstractFutureTask.run(AbstractFutureTask.java:120)\n\tat com.google.net.eventmanager.EventManagerImpl.runTaskTraced(EventManagerImpl.java:901)\n\tat com.google.net.eventmanager.EventManagerImpl.runTask(EventManagerImpl.java:893)\n\tat com.google.net.eventmanager.EventManagerImpl.internalRunWorkerLoop(EventManagerImpl.java:1320)\n\tat com.google.net.eventmanager.EventManagerImpl.runWorkerLoop(EventManagerImpl.java:1211)\n\tat com.google.net.eventmanager.WorkerThreadInfo.runWorkerLoop(WorkerThreadInfo.java:153)\n\tat com.google.net.eventmanager.EventManagerImpl$WorkerThread.run(EventManagerImpl.java:2000)\n", "message": "Query error: Result of ORDER BY queries cannot be clustered. at [2:1]" }, "state": "DONE" }, "principal_subject": "user:test@example.com", "jobCreationReason": { "code": "REQUESTED" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_notfound.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_notfound", "status": { "state": "DONE", "errorResult": { "reason": "notFound", "message": "Not found: Job gcpdiag-bigquery1-aaaa:us.test_notfound" } }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_notfound", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_running.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_running", "status": { "state": "RUNNING" }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_running", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_success.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_success", "status": { "state": "DONE" }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_success", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_get_us_unknown.json ================================================ { "id": "gcpdiag-bigquery1-aaaa:us.test_unknown", "status": { "state": "DONE", "errorResult": { "reason": "internalError", "message": "An internal error occurred." } }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "test_unknown", "location": "us" } } ================================================ FILE: test-data/bigquery1/json-dumps/job_results_us_IS_.json ================================================ { "kind": "bigquery#getQueryResultsResponse", "etag": "KnMpAXh+mTBFcY6apEUfRw==", "schema": { "fields": [ { "name": "job_id", "type": "STRING", "mode": "NULLABLE" }, { "name": "user_email", "type": "STRING", "mode": "NULLABLE" }, { "name": "start_time_str", "type": "STRING", "mode": "NULLABLE" }, { "name": "end_time_str", "type": "STRING", "mode": "NULLABLE" }, { "name": "query", "type": "STRING", "mode": "NULLABLE" } ] }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "bquxjob_3b44b580_1962ef6851c", "location": "US" }, "totalRows": "3", "rows": [ { "f": [ { "v": "bquxjob_48eeafd0_1962ef45483" }, { "v": "test@example.com" }, { "v": "2025-04-13 04:41:27.340-07" }, { "v": "2025-04-13 04:41:55.221-07" }, { "v": " SELECT\n job_id,\n user_email,\n CAST(start_time AS STRING) as start_time_str,\n CAST(end_time AS STRING) as end_time_str,\n query\n FROM\n `gcpdiag-bigquery1-aaaa`.`region-US`.INFORMATION_SCHEMA.JOBS\n WHERE CAST(start_time AS STRING) \u003e \"2025-04-12\"\n ORDER BY end_time DESC\n LIMIT 2" } ] }, { "f": [ { "v": "bquxjob_452cc6c1_1962ef0116e" }, { "v": "test@example.com" }, { "v": "2025-04-13 04:36:48.039-07" }, { "v": "2025-04-13 04:37:48.031-07" }, { "v": " SELECT\n job_id,\n user_email,\n CAST(start_time AS STRING) as start_time_str,\n CAST(end_time AS STRING) as end_time_str,\n query\n FROM\n `gcpdiag-bigquery1-aaaa`.`region-US`.INFORMATION_SCHEMA.JOBS\n ORDER BY end_time DESC\n LIMIT 1" } ] }, { "f": [ { "v": "bquxjob_3e454a13_1962eef9f2a" }, { "v": "test@example.com" }, { "v": "2025-04-13 04:36:18.806-07" }, { "v": "2025-04-13 04:36:18.806-07" }, { "v": " SELECT\n job_id,\n user_email,\n CAST(start_time AS STRING) as start_time_str,\n CAST(end_time AS STRING) as end_time_str,\n query\n FROM\n `gcpdiag-bigquery1-aaaa`.US.INFORMATION_SCHEMA.JOBS\n ORDER BY end_time DESC\n LIMIT 1" } ] } ], "totalBytesProcessed": "23985834934", "jobComplete": true, "cacheHit": false } ================================================ FILE: test-data/bigquery1/json-dumps/job_results_us_mockresult1.json ================================================ { "kind": "bigquery#getQueryResultsResponse", "etag": "\"some_etag_results\"", "schema": { "fields": [ { "name": "col1", "type": "STRING", "mode": "NULLABLE" }, { "name": "col2", "type": "INTEGER", "mode": "NULLABLE" } ] }, "jobReference": { "projectId": "gcpdiag-bigquery1-aaaa", "jobId": "gcpdiag_query_mockresult1", "location": "us" }, "totalRows": "2", "rows": [ { "f": [ { "v": "value1" }, { "v": "100" } ] }, { "f": [ { "v": "value2" }, { "v": "200" } ] } ], "totalBytesProcessed": "0", "jobComplete": true, "cacheHit": false } ================================================ FILE: test-data/bigquery1/json-dumps/project.json ================================================ { "name": "projects/12340007", "parent": "folders/373737373737", "projectId": "gcpdiag-cloudsql1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - bigquery1", "createTime": "2022-05-16T14:13:57.361Z", "updateTime": "2022-05-16T14:13:59.217Z", "etag": "31b906Z1OU8v9THp2PCdbw==" } ================================================ FILE: test-data/bigquery1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340007/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340007" }, { "name": "projects/12340007/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340007" }, { "name": "projects/12340007/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API" }, "state": "ENABLED", "parent": "projects/12340007" } ] } ================================================ FILE: test-data/bigquery1/project.tf ================================================ resource "random_string" "project_id" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - bigquery1" project_id = "gcpdiag-cloudsql1-${random_string.project_id.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id } resource "google_project_service" "bigquery" { project = google_project.project.project_id service = "compute.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/bigquery1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/billing1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) BILLING_ACCOUNT_ID := $(shell terraform output -raw billing_account_id) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340092 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/cost_insights.json \ json-dumps/all_projects.json \ json-dumps/all_billing_account_projects.json \ json-dumps/billing_account.json \ json-dumps/all_billing_accounts.json \ json-dumps/project_billing_info.json json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cost_insights.json: $(CURL) -fv \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: $(PROJECT_ID)" \ 'https://recommender.googleapis.com/v1/projects/$(PROJECT_ID)/locations/global/insightTypes/google.billing.CostInsight/insights' \ | $(SED_SUBST_FAKE) >$@ json-dumps/projects.json: $(CURL) -v \ 'https://cloudresourcemanager.googleapis.com/v1/projects' \ | $(SED_SUBST_FAKE) >$@ json-dumps/all_billing_account_projects.json: $(CURL) -fv\ 'https://cloudbilling.googleapis.com/v1/{billingAccounts/$(BILLING_ACCOUNT_ID)}/projects' \ | $(SED_SUBST_FAKE) >$@ json-dumps/billing_account.json: $(CURL) -fv \ 'https://cloudbilling.googleapis.com/v1/{billingAccounts/$(BILLING_ACCOUNT_ID)}' \ | $(SED_SUBST_FAKE) >$@ json-dumps/all_billing_accounts.json: $(CURL) -v \ 'https://cloudbilling.googleapis.com/v1/billingAccounts' \ | $(SED_SUBST_FAKE) >$@ json-dumps/project_billing_info.json: $(CURL) -fv \ 'https://cloudbilling.googleapis.com/v1/{projects/$(PROJECT_ID)}/billingInfo' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/billing1/json-dumps/all_billing_account_projects.json ================================================ { "projectBillingInfo": [ { "name": "projects/gcpdiag-billing1-aaaa/billingInfo", "projectId": "gcpdiag-billing1-aaaa", "billingAccountName": "billingAccounts/005E32-00FAKE-123456", "billingEnabled": true }, { "name": "projects/gcpdiag-billing2-aaaa/billingInfo", "projectId": "gcpdiag-billing2-aaaa", "billingAccountName": "billingAccounts/005E32-00FAKE-123456", "billingEnabled": true }, { "name": "projects/gcpdiag-billing3-aaaa/billingInfo", "projectId": "gcpdiag-billing3-aaaa", "billingAccountName": "billingAccounts/005E32-00FAKE-123456", "billingEnabled": true } ], "nextPageToken": "" } ================================================ FILE: test-data/billing1/json-dumps/all_billing_accounts.json ================================================ { "billingAccounts": [ { "name": "billingAccounts/00262B-00FAKE-123456", "open": true, "displayName": "Monitoring billing account", "masterBillingAccount": "" }, { "name": "billingAccounts/005E32-00FAKE-123456", "open": true, "displayName": "Cloud Billing Support billing account", "masterBillingAccount": "" }, { "name": "billingAccounts/0072A3-00FAKE-123456", "open": true, "displayName": "BAId for Cloud Support (xxx and others)", "masterBillingAccount": "" }, { "name": "billingAccounts/00C931-00FAKE-123456", "open": false, "displayName": "TEST WILL BE DELETED", "masterBillingAccount": "" } ], "nextPageToken": "" } ================================================ FILE: test-data/billing1/json-dumps/billing_account.json ================================================ { "name": "billingAccounts/005E32-00FAKE-123456", "open": true, "displayName": "Cloud Billing Support billing account", "masterBillingAccount": "" } ================================================ FILE: test-data/billing1/json-dumps/cost_insights.json ================================================ { "insights": [ { "category": "COST", "content": { "additionalDetails": { "link": "" }, "anomalyDetails": { "actualCostData": { "cost": { "currencyCode": "USD", "nanos": 945932000, "units": "16" } }, "costSlice": { "endTime": "2021-04-21T07:00:00Z", "startTime": "2021-04-20T07:00:00Z" }, "forecastedCostData": { "cost": { "currencyCode": "USD", "nanos": 693342000, "units": "80" } }, "forecastedCostDataLowerBound": { "cost": { "currencyCode": "USD", "nanos": 517253115, "units": "60" } }, "forecastedCostDataUpperBound": { "cost": { "currencyCode": "USD", "nanos": 869430885, "units": "100" } } } }, "description": "This is a cost anomaly. The aggregated gross cost for the specified target resource list and cost slice is significantly different from the aggregated forecasted cost.", "etag": "\"6cb9b8034bb8dc7e\"", "insightSubtype": "COST_BELOW_FORECASTED", "lastRefreshTime": "2022-05-06T17:30:09.666556402Z", "name": "projects/12340092/locations/global/insightTypes/google.billing.CostInsight/insights/32ac0d4e-8235-42e2-b34e-384fc2256b3e", "observationPeriod": "7776000s", "severity": "MEDIUM", "stateInfo": { "state": "ACTIVE" }, "targetResources": [ "//cloudresourcemanager.googleapis.com/projects/12340092" ] } ], "nextPageToken": "" } ================================================ FILE: test-data/billing1/json-dumps/project.json ================================================ { "name": "projects/12340092", "parent": "organizations/11112222", "projectId": "gcpdiag-billing1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - billing1", "createTime": "2022-12-05T21:35:36.712Z", "updateTime": "2022-12-05T21:35:38.442Z", "etag": "FklYEDTFd9WSIT9EB76gSg==" } ================================================ FILE: test-data/billing1/json-dumps/project_billing_info.json ================================================ { "name": "projects/gcpdiag-billing1-aaaa/billingInfo", "projectId": "gcpdiag-billing1-aaaa", "billingAccountName": "billingAccounts/005E32-00FAKE-123456", "billingEnabled": true } ================================================ FILE: test-data/billing1/json-dumps/projects.json ================================================ { "projects": [ { "projectNumber": "123456872873", "projectId": "gcpdiag-billing1-aaaa", "lifecycleState": "ACTIVE", "name": "FAKE123f20406d77dp-tp", "createTime": "2022-12-05T21:35:17.970Z", "parent": { "type": "folder", "id": "1234569776913" } } ], "nextPageToken": "" } ================================================ FILE: test-data/billing1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340092/services/cloudbilling.googleapis.com", "config": { "name": "cloudbilling.googleapis.com", "title": "Cloud Billing API", "documentation": { "summary": "Allows developers to manage billing for their Google Cloud Platform projects programmatically." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340092" } ] } ================================================ FILE: test-data/cloudasset1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_NR := $(shell terraform output -raw project_nr) FOLDER_ID := $(shell terraform output -raw folder_id) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner LOCATION = us-central1 FAKE_PROJECT_ID = cloudasset1-test-project FAKE_PROJECT_NR = 12340071 FAKE_FOLDER_ID = 9898989 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID)/$(FAKE_PROJECT_ID)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ -e "s/$(FOLDER_ID)/$(FAKE_FOLDER_ID)/" all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/search-all-resources-$(LOCATION).json \ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/search-all-resources-$(LOCATION).json: $(CURL) -fsS \ --header "x-goog-user-project: $(PROJECT_ID)" \ 'https://cloudasset.googleapis.com/v1/projects/$(PROJECT_ID):searchAllResources?query=$(LOCATION)' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/cloudasset1/json-dumps/project.json ================================================ { "name": "projects/12340071", "parent": "folders/9898989", "projectId": "cloudasset1-test-project", "state": "ACTIVE", "displayName": "cloudasset1-test-project", "createTime": "2023-07-18T20:25:39.577755Z", "updateTime": "2023-07-18T20:25:39.577755Z", "etag": "W/\"feb340dd15e087d6\"" } ================================================ FILE: test-data/cloudasset1/json-dumps/search-all-resources-us-central1.json ================================================ { "results": [ { "name": "//compute.googleapis.com/projects/cloudasset1-test-project/regions/us-central1/subnetworks/b", "assetType": "compute.googleapis.com/Subnetwork", "project": "projects/12340071", "displayName": "b", "location": "us-central1", "additionalAttributes": { "gatewayAddress": "10.0.0.1" }, "createTime": "2024-08-30T05:57:37Z", "state": "READY", "folders": [ "folders/9898989", "folders/37663766" ], "organization": "organizations/11112222", "parentFullResourceName": "//cloudresourcemanager.googleapis.com/projects/cloudasset1-test-project", "parentAssetType": "cloudresourcemanager.googleapis.com/Project" }, { "name": "//compute.googleapis.com/projects/cloudasset1-test-project/regions/us-central1/addresses/cross-lb-reserve-ip", "assetType": "compute.googleapis.com/Address", "project": "projects/12340071", "displayName": "cross-lb-reserve-ip", "location": "us-central1", "additionalAttributes": { "address": "10.1.2.99" }, "createTime": "2024-08-27T09:40:04Z", "state": "RESERVED", "folders": [ "folders/9898989", "folders/37663766" ], "organization": "organizations/11112222", "parentFullResourceName": "//cloudresourcemanager.googleapis.com/projects/cloudasset1-test-project", "parentAssetType": "cloudresourcemanager.googleapis.com/Project" }, { "name": "//compute.googleapis.com/projects/cloudasset1-test-project/zones/us-central1-a/autoscalers/gl7-ilb-mig-a", "assetType": "compute.googleapis.com/Autoscaler", "project": "projects/12340071", "displayName": "gl7-ilb-mig-a", "location": "us-central1-a", "createTime": "2024-08-27T09:33:12Z", "state": "ACTIVE", "folders": [ "folders/9898989", "folders/37663766" ], "organization": "organizations/11112222", "parentFullResourceName": "//cloudresourcemanager.googleapis.com/projects/cloudasset1-test-project", "parentAssetType": "cloudresourcemanager.googleapis.com/Project" }, { "name": "//compute.googleapis.com/projects/cloudasset1-test-project/zones/us-central1-a/disks/gl7-ilb-mig-a-27j7", "assetType": "compute.googleapis.com/Disk", "project": "projects/12340071", "displayName": "gl7-ilb-mig-a-27j7", "location": "us-central1-a", "additionalAttributes": { "sizeGb": 10, "type": "pd-balanced", "users": [ "https://www.googleapis.com/compute/v1/projects/cloudasset1-test-project/zones/us-central1-a/instances/gl7-ilb-mig-a-27j7" ] }, "createTime": "2024-08-27T09:33:10Z", "state": "READY", "folders": [ "folders/9898989", "folders/37663766" ], "organization": "organizations/11112222", "parentFullResourceName": "//cloudresourcemanager.googleapis.com/projects/cloudasset1-test-project", "parentAssetType": "cloudresourcemanager.googleapis.com/Project" } ] } ================================================ FILE: test-data/cloudasset1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340071/services/aiplatform.googleapis.com", "config": { "name": "aiplatform.googleapis.com", "title": "Vertex AI API", "documentation": { "summary": "Train high-quality custom machine learning models with minimal machine learning expertise and effort." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "aiplatform.googleapis.com/DeploymentResourcePool", "displayName": "Vertex AI Deployment Resource Pool", "description": "A Vertex AI Deployment Resource Pool.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Deployment Resource Pool." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "deployment_resource_pool_id", "description": "The ID of the Deployment Resource Pool." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Endpoint", "displayName": "Vertex AI Endpoint", "description": "A Vertex AI API Endpoint where Models are deployed into it.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Endpoint." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "endpoint_id", "description": "The ID of the Endpoint." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/ServingCluster", "displayName": "Vertex AI Serving Cluster", "description": "A Vertex AI Serving Cluster.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP User Project owning the cluster." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "cluster", "description": "The GKE name of the cluster." } ], "launchStage": "PRELAUNCH" }, { "type": "aiplatform.googleapis.com/Featurestore", "displayName": "Vertex AI Feature Store", "description": "A Vertex AI Feature Store.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Featurestore." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "featurestore_id", "description": "The ID of the Featurestore." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/FeatureOnlineStore", "displayName": "Vertex AI Feature Online Store", "description": "A Vertex AI Feature Online Store.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the FeatureOnlineStore." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "feature_online_store_id", "description": "The ID of the Feature Online Store." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Index", "displayName": "Matching Engine Index", "description": "An Index built through the cloud Matching Engine service.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Index." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "index_id", "description": "The ID of the Index." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/IndexEndpoint", "displayName": "Matching Engine Index Endpoint", "description": "An Endpoint to which Matching Engine Indexes are deployed.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Index." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "index_endpoint_id", "description": "The ID of the index endpoint." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/PipelineJob", "displayName": "Vertex Pipelines Job", "description": "A Vertex Pipelines Job.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "pipeline_job_id", "description": "The ID of the PipelineJob." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Location", "displayName": "Location", "description": "A Google Cloud Project and region where a job is running.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The region in which the service is running." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Model", "displayName": "Vertex AI Model", "description": "A Vertex AI Model.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Model." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "model", "description": "The identifier of the Model." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/NotebookRuntime", "displayName": "Vertex AI Notebook Runtime", "description": "A Vertex AI Notebook Runtime.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Notebook Runtime." }, { "key": "location", "description": "The region in which the notebook exists." }, { "key": "notebook_runtime_id", "description": "The identifier of the Notebook Runtime." } ], "launchStage": "ALPHA" }, { "type": "aiplatform.googleapis.com/PublisherModel", "displayName": "Vertex AI Model Garden Publisher Model", "description": "A Vertex AI Model Garden Publisher Model.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Endpoint." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "publisher", "description": "The publisher of the model." }, { "key": "model_user_id", "description": "The resource ID of the PublisherModel." }, { "key": "model_version_id", "description": "The version ID of the PublisherModel." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/TenantProject", "displayName": "Tenant project", "description": "A Google Cloud tenant project's information.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Tenant Project." }, { "key": "resource_category", "description": "The name of the provisioned resource category." }, { "key": "environment", "description": "Environment that the tenant project belongs to." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "project_number", "description": "The number of a tenant project." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/ReservedResourcePool", "displayName": "Vertex AI Reserved Resource Pool", "description": "A Vertex AI Reserved Resource Pool.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Reserved Resource Pool." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "pool_id", "description": "The ID of the Reserved Resource Pool." } ], "launchStage": "EARLY_ACCESS" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "aiplatform.googleapis.com/Endpoint", "metrics": [ "aiplatform.googleapis.com/prediction/internal/online/cmle_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/component_latencies", "aiplatform.googleapis.com/prediction/internal/online/core_infra_latencies", "aiplatform.googleapis.com/prediction/internal/online/custom/istio_request_duration_milliseconds", "aiplatform.googleapis.com/prediction/internal/online/custom/istio_requests_total", "aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_exit_total", "aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_launch_total", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_latencies", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_count", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_cache_lookup_count", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_states", "aiplatform.googleapis.com/prediction/internal/online/directpath_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/harpoon_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/llm_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/internal_error_count", "aiplatform.googleapis.com/prediction/internal/online/prediction_latencies", "aiplatform.googleapis.com/prediction/internal/online/request_byte_count", "aiplatform.googleapis.com/prediction/internal/online/response_count", "aiplatform.googleapis.com/prediction/internal/online/concurrent_requests", "aiplatform.googleapis.com/prediction/internal/online/throttled_request_count", "aiplatform.googleapis.com/prediction/internal/online/resource_usage_error_count", "aiplatform.googleapis.com/prediction/internal/online/lm_response_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_error_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_input_token_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_input_character_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_output_token_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_output_character_count", "aiplatform.googleapis.com/prediction/internal/online/lm_prediction_latencies", "aiplatform.googleapis.com/prediction/internal/online/lvm_request_count", "aiplatform.googleapis.com/prediction/online/streaming_message_overhead_latencies", "aiplatform.googleapis.com/prediction/online/streaming_message_count", "aiplatform.googleapis.com/prediction/online/streaming_message_bytes_count", "aiplatform.googleapis.com/prediction/online/open_streams", "aiplatform.googleapis.com/prediction/online/error_count", "aiplatform.googleapis.com/prediction/online/prediction_count", "aiplatform.googleapis.com/prediction/online/prediction_latencies", "aiplatform.googleapis.com/prediction/online/response_count", "aiplatform.googleapis.com/prediction/online/replicas", "aiplatform.googleapis.com/prediction/online/target_replicas", "aiplatform.googleapis.com/prediction/internal/online/cpu/utilization", "aiplatform.googleapis.com/prediction/internal/online/memory/bytes_used", "aiplatform.googleapis.com/prediction/internal/online/accelerator/duty_cycle", "aiplatform.googleapis.com/prediction/internal/online/accelerator/memory/bytes_used", "aiplatform.googleapis.com/prediction/internal/online/network/received_bytes_count", "aiplatform.googleapis.com/prediction/internal/online/network/sent_bytes_count", "aiplatform.googleapis.com/prediction/internal/online/l2_operator_reconcile_latencies", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_weighted_input_output_token_count", "aiplatform.googleapis.com/prediction/internal/online/streaming_message_count", "aiplatform.googleapis.com/prediction/internal/online/streaming_message_bytes_count", "aiplatform.googleapis.com/prediction/internal/online/first_message_latencies", "aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_server_call_started_total", "aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_server_call_duration_seconds", "aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_server_call_rcvd_total_compressed_message_size_bytes", "aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_server_call_sent_total_compressed_message_size_bytes", "aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_client_attempt_started_total", "aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_client_attempt_duration_seconds", "aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_client_attempt_sent_total_compressed_message_size_bytes", "aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_client_attempt_rcvd_total_compressed_message_size_bytes", "aiplatform.googleapis.com/prediction/internal/online/cloud_endpoint_overhead_latencies", "aiplatform.googleapis.com/prediction/internal/online/qmt/deployed_model_source" ] }, { "monitoredResource": "aiplatform.googleapis.com/DeploymentResourcePool", "metrics": [ "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/replicas", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/target_replicas", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/cpu/utilization", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/memory/bytes_used", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/duty_cycle", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/memory/bytes_used", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/received_bytes_count", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/sent_bytes_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/IndexEndpoint", "metrics": [ "aiplatform.googleapis.com/scann/query/request_count", "aiplatform.googleapis.com/scann/query/latencies", "aiplatform.googleapis.com/scann/internal/query/latency_bucketized", "aiplatform.googleapis.com/matching_engine/query/request_count", "aiplatform.googleapis.com/matching_engine/query/query_count", "aiplatform.googleapis.com/matching_engine/query/request_count_v2", "aiplatform.googleapis.com/matching_engine/internal/query/request_count", "aiplatform.googleapis.com/matching_engine/query/latencies", "aiplatform.googleapis.com/matching_engine/query/query_latencies", "aiplatform.googleapis.com/matching_engine/internal/query/latency_bucketized", "aiplatform.googleapis.com/matching_engine/internal/query/match_server_request_count", "aiplatform.googleapis.com/matching_engine/internal/query/match_server_latencies", "aiplatform.googleapis.com/matching_engine/internal/router/index_version" ] }, { "monitoredResource": "aiplatform.googleapis.com/IndexEndpoint", "metrics": [ "aiplatform.googleapis.com/scann/current_shards", "aiplatform.googleapis.com/scann/current_replicas", "aiplatform.googleapis.com/matching_engine/current_shards", "aiplatform.googleapis.com/matching_engine/current_replicas", "aiplatform.googleapis.com/matching_engine/internal/current_replicas", "aiplatform.googleapis.com/matching_engine/cpu/request_cores", "aiplatform.googleapis.com/matching_engine/cpu/request_utilization", "aiplatform.googleapis.com/matching_engine/memory/used_bytes", "aiplatform.googleapis.com/matching_engine/memory/request_bytes" ] }, { "monitoredResource": "aiplatform.googleapis.com/Index", "metrics": [ "aiplatform.googleapis.com/matching_engine/empty_index/request_count", "aiplatform.googleapis.com/matching_engine/index/embeddings", "aiplatform.googleapis.com/matching_engine/index/last_batch_update_time", "aiplatform.googleapis.com/matching_engine/index/last_compaction_time", "aiplatform.googleapis.com/matching_engine/index/size", "aiplatform.googleapis.com/matching_engine/internal/stream_update/catchup_latency", "aiplatform.googleapis.com/matching_engine/report_index_shard_stats_to_gcs/request_count", "aiplatform.googleapis.com/matching_engine/stream_update/datapoint_count", "aiplatform.googleapis.com/matching_engine/stream_update/latencies", "aiplatform.googleapis.com/matching_engine/stream_update/latency", "aiplatform.googleapis.com/matching_engine/stream_update/request_count", "aiplatform.googleapis.com/matching_engine_stream_update_requests_per_index", "aiplatform.googleapis.com/matching_engine_stream_update_throughput_per_index", "aiplatform.googleapis.com/quota/matching_engine_stream_update_requests_per_index/exceeded", "aiplatform.googleapis.com/quota/matching_engine_stream_update_requests_per_index/usage", "aiplatform.googleapis.com/quota/matching_engine_stream_update_throughput_per_index/exceeded", "aiplatform.googleapis.com/quota/matching_engine_stream_update_throughput_per_index/usage" ] }, { "monitoredResource": "aiplatform.googleapis.com/Featurestore", "metrics": [ "aiplatform.googleapis.com/featurestore/online_entities_updated", "aiplatform.googleapis.com/featurestore/online_serving/request_count", "aiplatform.googleapis.com/featurestore/online_serving/latencies", "aiplatform.googleapis.com/featurestore/online_serving/response_size", "aiplatform.googleapis.com/featurestore/online_serving/request_bytes_count", "aiplatform.googleapis.com/featurestore/streaming_write/offline_processed_count", "aiplatform.googleapis.com/featurestore/streaming_write/offline_write_delays" ] }, { "monitoredResource": "aiplatform.googleapis.com/Featurestore", "metrics": [ "aiplatform.googleapis.com/featurestore/storage/stored_bytes", "aiplatform.googleapis.com/featurestore/storage/billable_processed_bytes", "aiplatform.googleapis.com/featurestore/node_count", "aiplatform.googleapis.com/featurestore/cpu_load", "aiplatform.googleapis.com/featurestore/cpu_load_hottest_node" ] }, { "monitoredResource": "aiplatform.googleapis.com/FeatureOnlineStore", "metrics": [ "aiplatform.googleapis.com/featureonlinestore/online_serving/request_count", "aiplatform.googleapis.com/featureonlinestore/online_serving/serving_bytes_count", "aiplatform.googleapis.com/featureonlinestore/online_serving/serving_latencies", "aiplatform.googleapis.com/featureonlinestore/serving_data_ages", "aiplatform.googleapis.com/featureonlinestore/serving_data_by_sync_time", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/serving_latencies", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/request_count", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/serving_bytes_count", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/latencies" ] }, { "monitoredResource": "aiplatform.googleapis.com/FeatureOnlineStore", "metrics": [ "aiplatform.googleapis.com/featureonlinestore/storage/stored_bytes", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load_hottest_node", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_nodes", "aiplatform.googleapis.com/featureonlinestore/storage/optimized_nodes", "aiplatform.googleapis.com/featureonlinestore/running_sync", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/memory/request_bytes", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/memory/used_bytes", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/cpu/request_utilization", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/cpu/request_cores", "aiplatform.googleapis.com/featureonlinestore/storage/multi_region_bigtable_cpu_load", "aiplatform.googleapis.com/featureonlinestore/storage/multi_region_bigtable_cpu_load_hottest_node", "aiplatform.googleapis.com/featureonlinestore/storage/multi_region_bigtable_nodes", "aiplatform.googleapis.com/featureonlinestore/storage/multi_region_stored_bytes", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_replication_latency", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_replication_max_delay", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_multi_clusters_failover_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/bidi_gen_concurrent_reqs_per_project_per_base_model", "aiplatform.googleapis.com/bidi_gen_input_tokens_per_project_per_base_model", "aiplatform.googleapis.com/generate_content_audio_gen_per_project_per_base_model", "aiplatform.googleapis.com/generate_content_image_gen_per_project_per_base_model", "aiplatform.googleapis.com/generate_content_input_tokens_per_minute_per_base_model", "aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model", "aiplatform.googleapis.com/online_prediction_requests_per_base_model", "aiplatform.googleapis.com/online_prediction_tokens_per_minute_per_base_model", "aiplatform.googleapis.com/quota/bidi_gen_input_tokens_per_project_per_base_model/exceeded", "aiplatform.googleapis.com/quota/bidi_gen_input_tokens_per_project_per_base_model/usage", "aiplatform.googleapis.com/quota/concurrent/bidi_gen_concurrent_reqs_per_project_per_base_model/exceeded", "aiplatform.googleapis.com/quota/concurrent/internal/bidi_gen_concurrent_reqs_per_project_per_base_model/combined_units", "aiplatform.googleapis.com/quota/concurrent/internal/online_prediction_concurrent_requests_per_base_model/combined_units", "aiplatform.googleapis.com/quota/concurrent/online_prediction_concurrent_requests_per_base_model/exceeded", "aiplatform.googleapis.com/quota/generate_content_audio_gen_per_project_per_base_model/exceeded", "aiplatform.googleapis.com/quota/generate_content_audio_gen_per_project_per_base_model/usage", "aiplatform.googleapis.com/quota/generate_content_image_gen_per_project_per_base_model/exceeded", "aiplatform.googleapis.com/quota/generate_content_image_gen_per_project_per_base_model/usage", "aiplatform.googleapis.com/quota/generate_content_input_tokens_per_minute_per_base_model/exceeded", "aiplatform.googleapis.com/quota/generate_content_input_tokens_per_minute_per_base_model/usage", "aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/exceeded", "aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/usage", "aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/exceeded", "aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/usage", "aiplatform.googleapis.com/quota/long_running_online_prediction_requests_per_base_model/exceeded", "aiplatform.googleapis.com/quota/long_running_online_prediction_requests_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/exceeded", "aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/usage", "aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/exceeded", "aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/usage", "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_requests_against_cap_per_base_model_version/exceeded", "aiplatform.googleapis.com/quota/online_prediction_requests_against_cap_per_base_model_version/usage", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_tokens_per_minute_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_tokens_per_minute_per_base_model/usage", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/exceeded", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/usage", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/exceeded", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/usage", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/exceeded", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/usage", "aiplatform.googleapis.com/quota/shared_online_prediction_tokens_per_base_model/exceeded", "aiplatform.googleapis.com/quota/shared_online_prediction_tokens_per_base_model/usage" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/executing_vertexai_pipeline_jobs", "aiplatform.googleapis.com/executing_vertexai_pipeline_tasks" ] }, { "monitoredResource": "aiplatform.googleapis.com/Model", "metrics": [ "aiplatform.googleapis.com/model_monitoring/feature_drift_deviation", "aiplatform.googleapis.com/model_monitoring/prediction_output_drift_deviation", "aiplatform.googleapis.com/model_monitoring/feature_attribution_deviation", "aiplatform.googleapis.com/model_monitoring/model_performance", "aiplatform.googleapis.com/model_monitoring/gen_ai_evaluation", "aiplatform.googleapis.com/model_monitoring/gen_ai_safety", "aiplatform.googleapis.com/model_monitoring/gen_ai_input_output", "aiplatform.googleapis.com/model_monitoring/gen_ai_grounding", "aiplatform.googleapis.com/model_monitoring/gen_ai_recitation" ] }, { "monitoredResource": "aiplatform.googleapis.com/PipelineJob", "metrics": [ "aiplatform.googleapis.com/pipelinejob/duration", "aiplatform.googleapis.com/pipelinejob/task_completed_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/PublisherModel", "metrics": [ "aiplatform.googleapis.com/publisher/online_serving/model_invocation_count", "aiplatform.googleapis.com/publisher/online_serving/model_invocation_latencies", "aiplatform.googleapis.com/publisher/online_serving/first_token_latencies", "aiplatform.googleapis.com/publisher/online_serving/tokens", "aiplatform.googleapis.com/publisher/online_serving/token_count", "aiplatform.googleapis.com/publisher/online_serving/characters", "aiplatform.googleapis.com/publisher/online_serving/character_count", "aiplatform.googleapis.com/publisher/online_serving/consumed_throughput", "aiplatform.googleapis.com/publisher/online_serving/internal/error_count", "aiplatform.googleapis.com/publisher/online_serving/internal/model_invocation_count", "aiplatform.googleapis.com/publisher/online_serving/internal/success_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/ServingCluster", "metrics": [ "aiplatform.googleapis.com/serving/controlplane/operator_reconcile_latency_seconds", "aiplatform.googleapis.com/serving/controlplane/operator_workqueue_unfinished_work_seconds", "aiplatform.googleapis.com/serving/controlplane/operator_workqueue_depth", "aiplatform.googleapis.com/serving/controlplane/operator_version", "aiplatform.googleapis.com/serving/controlplane/release_stage", "aiplatform.googleapis.com/serving/controlplane/qmt/hotmodelpool_hit_count", "aiplatform.googleapis.com/serving/controlplane/qmt/hotmodelpool_replicas", "aiplatform.googleapis.com/serving/controlplane/qmt/hotmodelpool_target_replicas" ] }, { "monitoredResource": "aiplatform.googleapis.com/NotebookRuntime", "metrics": [ "aiplatform.googleapis.com/colab/internal/runtime/startup_duration", "aiplatform.googleapis.com/colab/internal/runtime/health", "aiplatform.googleapis.com/colab/internal/runtime/image_version", "aiplatform.googleapis.com/colab/internal/runtime/uptime", "aiplatform.googleapis.com/colab/internal/runtime/cpu/usage_time", "aiplatform.googleapis.com/colab/internal/runtime/memory/limit", "aiplatform.googleapis.com/colab/internal/runtime/memory/usage", "aiplatform.googleapis.com/colab/internal/runtime/container/memory/usage", "aiplatform.googleapis.com/colab/internal/runtime/disk/used_bytes", "aiplatform.googleapis.com/colab/internal/runtime/disk/reserved_bytes", "aiplatform.googleapis.com/colab/internal/runtime/disk/free_bytes", "aiplatform.googleapis.com/colab/internal/runtime/network/received_bytes_count", "aiplatform.googleapis.com/colab/internal/runtime/network/sent_bytes_count", "aiplatform.googleapis.com/colab/internal/runtime/container/restart_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/quota/bidi_gen_input_tokens_per_project_per_base_model/limit", "aiplatform.googleapis.com/quota/concurrent/bidi_gen_concurrent_reqs_per_project_per_base_model/limit", "aiplatform.googleapis.com/quota/concurrent/online_prediction_concurrent_requests_per_base_model/limit", "aiplatform.googleapis.com/quota/generate_content_audio_gen_per_project_per_base_model/limit", "aiplatform.googleapis.com/quota/generate_content_image_gen_per_project_per_base_model/limit", "aiplatform.googleapis.com/quota/generate_content_input_tokens_per_minute_per_base_model/limit", "aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/limit", "aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/limit", "aiplatform.googleapis.com/quota/long_running_online_prediction_requests_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/limit", "aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/limit", "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_requests_against_cap_per_base_model_version/limit", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_tokens_per_minute_per_base_model/limit", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/limit", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/limit", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/limit", "aiplatform.googleapis.com/quota/shared_online_prediction_tokens_per_base_model/limit" ] }, { "monitoredResource": "aiplatform.googleapis.com/TenantProject", "metrics": [ "aiplatform.googleapis.com/matching_engine/internal/index/project_mapping" ] }, { "monitoredResource": "aiplatform.googleapis.com/ReservedResourcePool", "metrics": [ "aiplatform.googleapis.com/prediction/online/reserved_resource_pool/accelerator/count" ] }, { "monitoredResource": "aiplatform.googleapis.com/Index", "metrics": [ "aiplatform.googleapis.com/quota/matching_engine_stream_update_requests_per_index/limit", "aiplatform.googleapis.com/quota/matching_engine_stream_update_throughput_per_index/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/analyticshub.googleapis.com", "config": { "name": "analyticshub.googleapis.com", "title": "Analytics Hub API", "documentation": { "summary": "Exchange data and analytics assets securely and efficiently." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/appengineflex.googleapis.com", "config": { "name": "appengineflex.googleapis.com", "title": "Google App Engine Flexible Environment", "documentation": { "summary": "This service enables App Engine's Flexible Environment, which gives you the benefits of App Engine's managed services and the flexibility to run any software you need." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/appenginereporting.googleapis.com", "config": { "name": "appenginereporting.googleapis.com", "title": "App Engine", "documentation": { "summary": "Google App Engine Reporting Service" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "artifactregistry.googleapis.com/Location", "displayName": "Artifact Registry Location", "description": "A location in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "artifactregistry.googleapis.com/Project", "displayName": "Artifact Registry Project", "description": "A Cloud project in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "artifactregistry.googleapis.com/Repository", "displayName": "Artifact Registry Repository", "description": "A repository in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "repository_id", "description": "The identifier of the Artifact Registry repository, such as \"my_repository\"." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_region_upstream_host_reads", "artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/region_upstream_host_reads", "artifactregistry.googleapis.com/us_multi_region_upstream_host_reads" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Project", "metrics": [ "artifactregistry.googleapis.com/project/api/request_count", "artifactregistry.googleapis.com/project/api/request_latencies", "artifactregistry.googleapis.com/project/request_count", "artifactregistry.googleapis.com/project/request_latencies" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Repository", "metrics": [ "artifactregistry.googleapis.com/repository/api/request_count", "artifactregistry.googleapis.com/repository/api/request_latencies", "artifactregistry.googleapis.com/repository/request_count", "artifactregistry.googleapis.com/repository/request_latencies", "artifactregistry.googleapis.com/repository/size" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/artifactstorage-pa.googleapis.com", "config": { "name": "artifactstorage-pa.googleapis.com", "title": "Artifact Storage Private API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/universal" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/beyondcorp.googleapis.com", "config": { "name": "beyondcorp.googleapis.com", "title": "BeyondCorp API", "documentation": { "summary": "Beyondcorp Enterprise provides identity and context aware access controls for enterprise resources and enables zero-trust access. Using the Beyondcorp Enterprise APIs, enterprises can set up multi-cloud and on-prem connectivity solutions." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "beyondcorp.googleapis.com/InternalAppConnectorEngine", "displayName": "AppConnector Gateway Engine", "description": "Engine gateway.", "labels": [ { "key": "resource_container", "description": "The consumer project that this engine corresponds to." }, { "key": "location", "description": "The region in which the gateway engine is running." }, { "key": "engine_id", "description": "Unique identifier for the gateway engine." }, { "key": "tenant_project", "description": "Tenant project where this gateway engine runs." }, { "key": "beyondcorp_service_name", "description": "The beyondcorp service name this engine corresponds to." } ], "launchStage": "EARLY_ACCESS" }, { "type": "beyondcorp.googleapis.com/InternalClientGatewayVM", "displayName": "Internal Client Gateway VM", "description": "A VM deployed inside a Client Gateway.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the VM." }, { "key": "org_id", "description": "The organization id the resource container (project) is associated with." }, { "key": "location", "description": "The region this VM is deployed in." }, { "key": "beyondcorp_service_name", "description": "The beyondcorp service name this VM was deployed in." }, { "key": "client_connector_service_id", "description": "The ID of the client connector service associated with the client gateway." }, { "key": "client_gateway_id", "description": "The ID of the client gateway deploying this VM." }, { "key": "vm_id", "description": "The id of the deployed VM instance." } ], "launchStage": "EARLY_ACCESS" }, { "type": "saas_instance", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "saasaccelerator.googleapis.com/service_name" }, { "key": "cloud.googleapis.com/location" }, { "key": "saasaccelerator.googleapis.com/consumer_project" }, { "key": "saasaccelerator.googleapis.com/instance_id" }, { "key": "cloud.googleapis.com/uid" } ] }, { "type": "saas_instance_node", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "saasaccelerator.googleapis.com/service_name" }, { "key": "cloud.googleapis.com/location" }, { "key": "saasaccelerator.googleapis.com/consumer_project" }, { "key": "saasaccelerator.googleapis.com/instance_id" }, { "key": "saasaccelerator.googleapis.com/node_id" }, { "key": "cloud.googleapis.com/uid" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "beyondcorp.googleapis.com/InternalAppConnectorEngine", "metrics": [ "beyondcorp.googleapis.com/internal/appconnector/engine/latency", "beyondcorp.googleapis.com/internal/appconnector/engine/ingress_byte_count", "beyondcorp.googleapis.com/internal/appconnector/engine/flows", "beyondcorp.googleapis.com/internal/appconnector/engine/recv_buffer_size_units", "beyondcorp.googleapis.com/internal/appconnector/engine/flow_average_latency", "beyondcorp.googleapis.com/internal/appconnector/engine/flow_max_latency", "beyondcorp.googleapis.com/internal/appconnector/engine/flow_rcvd_bytes", "beyondcorp.googleapis.com/internal/appconnector/engine/flow_sent_bytes", "beyondcorp.googleapis.com/internal/appconnector/engine/flow_rcvd_throughput", "beyondcorp.googleapis.com/internal/appconnector/engine/flow_sent_throughput" ] }, { "monitoredResource": "beyondcorp.googleapis.com/InternalClientGatewayVM", "metrics": [ "beyondcorp.googleapis.com/internal/clientconnector/server/connected_devices_count", "beyondcorp.googleapis.com/internal/clientconnector/server/connected_users_count", "beyondcorp.googleapis.com/internal/clientconnector/server/auth_request_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquery.googleapis.com/Table", "displayName": "BigQuery Table Resource.", "description": "BigQuery Table Resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The cloud location of the BigQuery table." }, { "key": "table_reference", "description": "The table reference in the format of project_id:dataset_id.table_id for the BigQuery table." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/Location", "displayName": "CheckIamPolicy Request Location", "description": "A BigQuery Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget", "description": "Differential Privacy Budget.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." }, { "key": "multi_region", "description": "The multi-region identifier for the associated resource (e.g \"us\", \"eu\"). Used only for multi-region quota metrics." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget External", "description": "Differential Privacy Budget exposed externally to provide privacy budget metrics.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." } ], "launchStage": "BETA" }, { "type": "bigquery.googleapis.com/ContinuousJob", "displayName": "BigQuery Continuous Job", "description": "Metrics from BigQuery Continuous Jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The Cloud location of the continuous job." }, { "key": "job_id", "description": "The ID of the continuous job." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded", "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget", "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/privacybudget/dp_delta_budget", "bigquery.googleapis.com/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/ContinuousJob", "metrics": [ "bigquery.googleapis.com/job/continuous/backlog_records", "bigquery.googleapis.com/job/continuous/records_read_count", "bigquery.googleapis.com/job/continuous/records_written_count", "bigquery.googleapis.com/job/continuous/estimated_backlog_logical_bytes", "bigquery.googleapis.com/job/continuous/estimated_bytes_processed_count", "bigquery.googleapis.com/job/continuous/output_watermark", "bigquery.googleapis.com/job/continuous/slots/allocated", "bigquery.googleapis.com/job/continuous/end_to_end_latencies", "bigquery.googleapis.com/job/continuous/records_read", "bigquery.googleapis.com/job/continuous/records_written", "bigquery.googleapis.com/job/continuous/estimated_bytes_processed", "bigquery.googleapis.com/job/continuous/slots/used_time" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit" ] }, { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/bigqueryconnection.googleapis.com", "config": { "name": "bigqueryconnection.googleapis.com", "title": "BigQuery Connection API", "documentation": { "summary": "Allows users to manage BigQuery connections to external data sources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/bigquerydatapolicy.googleapis.com", "config": { "name": "bigquerydatapolicy.googleapis.com", "title": "BigQuery Data Policy API", "documentation": { "summary": "Allows users to manage BigQuery data policies." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/bigquerydatatransfer.googleapis.com", "config": { "name": "bigquerydatatransfer.googleapis.com", "title": "BigQuery Data Transfer API", "documentation": { "summary": "Schedule queries or transfer external data from SaaS applications to Google BigQuery on a regular basis." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/bigqueryreservation.googleapis.com", "config": { "name": "bigqueryreservation.googleapis.com", "title": "BigQuery Reservation API", "documentation": { "summary": "A service to modify your BigQuery flat-rate reservations." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquerystorage.googleapis.com/DataflowWrite", "displayName": "BigQuery Storage Write API metrics for Dataflow jobs.", "description": "BigQuery Storage Write API metrics for Dataflow jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job." }, { "key": "location", "description": "The BigQuery region in which the Storage API server locates." }, { "key": "job_name", "description": "The name of the Dataflow job this worker belongs to." }, { "key": "job_id", "description": "The id of the dataflow job the worker belongs to." }, { "key": "worker_id", "description": "The ID of the worker, unique for this job_id." }, { "key": "destination_project", "description": "The project of BigQuery destination table of the Dataflow job." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquerystorage.googleapis.com/DataflowWrite", "metrics": [ "bigquerystorage.googleapis.com/dataflow_write/request_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/connection_results_count", "bigquerystorage.googleapis.com/dataflow_write/server_side_latencies", "bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies", "bigquerystorage.googleapis.com/dataflow_write/concurrent_connections" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudaicompanion.googleapis.com", "config": { "name": "cloudaicompanion.googleapis.com", "title": "Gemini for Google Cloud API", "documentation": { "summary": "The AI-powered assistant for Google Cloud.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudaicompanion.googleapis.com/Instance", "displayName": "Gemini for Google Cloud Instance", "description": "An instance resource that represents a Gemini for Google Cloud configuration.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container associated with this resource." }, { "key": "location", "description": "The location of the resource." }, { "key": "instance_id", "description": "The ID of the instance resource." } ], "launchStage": "BETA" }, { "type": "cloudaicompanion.googleapis.com/InternalInstance", "displayName": "Internal Gemini for Google Cloud Instance", "description": "An internal instance resource that represents a Gemini for Google Cloud configuration.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container associated with this resource." }, { "key": "location", "description": "The location of the resource." }, { "key": "instance_id", "description": "The ID of the instance resource." }, { "key": "user_id", "description": "The user identifier, for example, 123456789012." } ], "launchStage": "PRELAUNCH" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudaicompanion.googleapis.com/InternalInstance", "metrics": [ "cloudaicompanion.googleapis.com/internal/usage/responses/active_user_count", "cloudaicompanion.googleapis.com/internal/usage/code_assist/code_suggestions_count", "cloudaicompanion.googleapis.com/internal/usage/code_assist/code_lines_suggested_count", "cloudaicompanion.googleapis.com/internal/usage/code_assist/code_suggestions_accepted_count", "cloudaicompanion.googleapis.com/internal/usage/code_assist/code_lines_accepted_count", "cloudaicompanion.googleapis.com/internal/usage/code_assist/user_activity_count" ] }, { "monitoredResource": "cloudaicompanion.googleapis.com/Instance", "metrics": [ "cloudaicompanion.googleapis.com/usage/responses/daily_active_users", "cloudaicompanion.googleapis.com/usage/responses/seven_day_active_users", "cloudaicompanion.googleapis.com/usage/responses/twenty_eight_day_active_users", "cloudaicompanion.googleapis.com/usage/response_count", "cloudaicompanion.googleapis.com/usage/code_assist/code_suggestions_count", "cloudaicompanion.googleapis.com/usage/code_assist/code_suggestions_accepted_count", "cloudaicompanion.googleapis.com/usage/code_assist/code_lines_accepted_count", "cloudaicompanion.googleapis.com/usage/code_assist/chat_responses_count", "cloudaicompanion.googleapis.com/usage/code_assist/daily_active_user_count", "cloudaicompanion.googleapis.com/usage/code_assist/twenty_eight_day_active_user_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudapis.googleapis.com", "config": { "name": "cloudapis.googleapis.com", "title": "Google Cloud APIs", "documentation": { "summary": "This is a meta service for Google Cloud APIs for convenience. Enabling this service enables all commonly used Google Cloud APIs for the project. By default, it is enabled for all projects created through Google Cloud Console and Google Cloud SDK, and should be manually enabled for all other projects that intend to use Google Cloud APIs. Note: disabling this service has no effect on other services.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudasset.googleapis.com", "config": { "name": "cloudasset.googleapis.com", "title": "Cloud Asset API", "documentation": { "summary": "The Cloud Asset API manages the history and inventory of Google Cloud resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudbilling.googleapis.com", "config": { "name": "cloudbilling.googleapis.com", "title": "Cloud Billing API", "documentation": { "summary": "Allows developers to manage billing for their Google Cloud Platform projects\n programmatically." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "cloudbuild.googleapis.com/Location", "displayName": "Cloud Build Location", "description": "A location in the Cloud Build API.", "labels": [ { "key": "resource_container", "description": "The identified of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "cloudbuild.googleapis.com/GkeInstance", "displayName": "GKE instance", "description": "GKE instance.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "gke_instance_id", "description": "The identifier of the GKE instance." } ], "launchStage": "ALPHA" }, { "type": "cloudbuild.googleapis.com/PrivatePool", "displayName": "Private Worker Pool", "description": "Private Worker Pool.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "worker_pool_uuid", "description": "The UUID of the worker pool." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudbuild.googleapis.com/GkeInstance", "metrics": [ "cloudbuild.googleapis.com/internal/gke_instance/pod", "cloudbuild.googleapis.com/internal/gke_instance/node" ] }, { "monitoredResource": "cloudbuild.googleapis.com/PrivatePool", "metrics": [ "cloudbuild.googleapis.com/internal/private_pool_ready_worker_replicas" ] }, { "monitoredResource": "cloudbuild.googleapis.com/Location", "metrics": [ "cloudbuild.googleapis.com/concurrent_private_pool_build_cpus", "cloudbuild.googleapis.com/concurrent_public_pool_build_cpus", "cloudbuild.googleapis.com/quota/concurrent_private_pool_build_cpus/exceeded", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/exceeded" ] }, { "monitoredResource": "cloudbuild.googleapis.com/Location", "metrics": [ "cloudbuild.googleapis.com/quota/concurrent_private_pool_build_cpus/limit", "cloudbuild.googleapis.com/quota/concurrent_private_pool_build_cpus/usage", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/limit", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudfunctions.googleapis.com", "config": { "name": "cloudfunctions.googleapis.com", "title": "Cloud Functions API", "documentation": { "summary": "Manages lightweight user-provided functions executed in response to events." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudfunctions.googleapis.com/function", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloudfunctions.googleapis.com/function_name" } ] }, { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudfunctions.googleapis.com/function", "metrics": [ "cloudfunctions.googleapis.com/function/execution_times", "cloudfunctions.googleapis.com/function/execution_count", "cloudfunctions.googleapis.com/function/user_memory_bytes", "cloudfunctions.googleapis.com/function/network_egress", "cloudfunctions.googleapis.com/function/active_instances", "cloudfunctions.googleapis.com/function/execution_delays", "cloudfunctions.googleapis.com/function/execution_count_internal", "cloudfunctions.googleapis.com/function/supervisor_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_memory_bytes", "cloudfunctions.googleapis.com/function/user_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count", "cloudfunctions.googleapis.com/function/supervisor_controlled_death_count", "cloudfunctions.googleapis.com/function/supervisor_report_count", "cloudfunctions.googleapis.com/function/supervisor_report_latencies", "cloudfunctions.googleapis.com/function/supervisor_phase_latencies" ] }, { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudkms.googleapis.com", "config": { "name": "cloudkms.googleapis.com", "title": "Cloud Key Management Service (KMS) API", "documentation": { "summary": "Manages keys and performs cryptographic operations in a central cloud service, for direct use by other cloud resources and applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudkms.googleapis.com/Project", "displayName": "KMS project", "description": "KMS project.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource." }, { "key": "location", "description": "The location of the resource." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudkms.googleapis.com/Project", "metrics": [ "cloudkms.googleapis.com/ekm/external/request_count", "cloudkms.googleapis.com/ekm/external/request_latencies", "cloudkms.googleapis.com/external_kms_multiregion_requests", "cloudkms.googleapis.com/hsm_multiregion_asymmetric_requests", "cloudkms.googleapis.com/hsm_multiregion_symmetric_requests", "cloudkms.googleapis.com/peak_qps", "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/exceeded", "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/usage", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/exceeded", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/usage", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/exceeded", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/usage", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/exceeded", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/usage", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/exceeded", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/usage" ] }, { "monitoredResource": "cloudkms.googleapis.com/Project", "metrics": [ "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/limit", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/limit", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/limit", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/limit", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudresourcemanager.googleapis.com", "config": { "name": "cloudresourcemanager.googleapis.com", "title": "Cloud Resource Manager API", "documentation": { "summary": "Creates, reads, and updates metadata for Google Cloud Platform resource containers." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/cloudtrace.googleapis.com", "config": { "name": "cloudtrace.googleapis.com", "title": "Cloud Trace API", "documentation": { "summary": "Sends application trace data to Cloud Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Cloud Trace API directly. If you are looking to instrument your application for Cloud Trace, we recommend using OpenTelemetry.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudtrace.googleapis.com/charged_project", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "monitoring.googleapis.com/service" }, { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" } ] }, { "type": "cloudtrace.googleapis.com/ChargedProject", "displayName": "Cloud trace target", "description": "A cloud trace specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "api_service", "description": "The name of the API service with which the data is associated (e.g.,'cloudtrace.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "cloudtrace.googleapis.com/CloudtraceProject", "displayName": "Cloud Trace", "description": "Cloud trace resource, e.g. project.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container associated with the resource." }, { "key": "location", "description": "The location that the Cloud Trace service recording the metrics is running." } ], "launchStage": "EARLY_ACCESS" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudtrace.googleapis.com/ChargedProject", "metrics": [ "cloudtrace.googleapis.com/billing/ingested_spans", "cloudtrace.googleapis.com/billing/ingested_bytes" ] }, { "monitoredResource": "cloudtrace.googleapis.com/charged_project", "metrics": [ "cloudtrace.googleapis.com/billing/retrieved_spans" ] }, { "monitoredResource": "cloudtrace.googleapis.com/CloudtraceProject", "metrics": [ "cloudtrace.googleapis.com/internal/plugin_server_span_count", "cloudtrace.googleapis.com/internal/reader_root_query_count", "cloudtrace.googleapis.com/internal/reader_root_query_latencies", "cloudtrace.googleapis.com/bigquery_export/exported_span_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/composer.googleapis.com", "config": { "name": "composer.googleapis.com", "title": "Cloud Composer API", "documentation": { "summary": "Manages Apache Airflow environments on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/NetworkPathQuotasResource", "displayName": "Network Path Quotas Resource.", "description": "Network Path Quotas Resource.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "network_path_id", "description": "The network path custom dimension." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded", "compute.googleapis.com/tpus_per_tpu_family" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded", "compute.googleapis.com/quota/wire_groups_per_interconnect/exceeded", "compute.googleapis.com/wire_groups_per_interconnect" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage", "compute.googleapis.com/quota/wire_groups_per_interconnect/limit", "compute.googleapis.com/quota/wire_groups_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/NetworkPathQuotasResource", "metrics": [ "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/NetworkPathQuotasResource", "metrics": [ "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/usage", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/usage", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/computescanning.googleapis.com", "config": { "name": "computescanning.googleapis.com", "title": "Compute Scanning API", "documentation": { "summary": "A service to scan compute resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "container.googleapis.com/Cluster", "displayName": "Kubernetes Cluster Limits", "description": "Kubernetes Cluster.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." } ], "launchStage": "BETA" }, { "type": "container.googleapis.com/NodePool", "displayName": "GKE Node Pool", "description": "GKE Node Pool.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." }, { "key": "node_pool_name", "description": "Node pool name." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/containers_per_cluster_autopilot", "container.googleapis.com/quota/containers_per_cluster_standard", "container.googleapis.com/quota/etcd_database_size_bytes", "container.googleapis.com/quota/nodes_per_cluster", "container.googleapis.com/quota/operations_per_regional_cluster/exceeded", "container.googleapis.com/quota/operations_per_zonal_cluster/exceeded", "container.googleapis.com/quota/pods_per_cluster_autopilot", "container.googleapis.com/quota/pods_per_cluster_standard", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded", "container.googleapis.com/quota/quota/nodes_per_cluster/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/nodes_per_node_pool", "container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded" ] }, { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/operations_per_regional_cluster/limit", "container.googleapis.com/quota/operations_per_regional_cluster/usage", "container.googleapis.com/quota/operations_per_zonal_cluster/limit", "container.googleapis.com/quota/operations_per_zonal_cluster/usage", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/containers_per_cluster_standard/limit", "container.googleapis.com/quota/quota/containers_per_cluster_standard/usage", "container.googleapis.com/quota/quota/etcd_database_size_bytes/limit", "container.googleapis.com/quota/quota/etcd_database_size_bytes/usage", "container.googleapis.com/quota/quota/nodes_per_cluster/limit", "container.googleapis.com/quota/quota/nodes_per_cluster/usage", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/pods_per_cluster_standard/limit", "container.googleapis.com/quota/quota/pods_per_cluster_standard/usage" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/quota/nodes_per_node_pool/limit", "container.googleapis.com/quota/quota/nodes_per_node_pool/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/containeranalysis.googleapis.com", "config": { "name": "containeranalysis.googleapis.com", "title": "Container Analysis API", "documentation": { "summary": "This API is a prerequisite for leveraging Artifact Analysis scanning\ncapabilities in both Artifact Registry and with Advanced Vulnerability\nInsights (runtime scanning) in GKE.\n\nIn addition, the Container Analysis API is an implementation of the Grafeas\nAPI, which enables storing, querying, and retrieval of critical metadata\nabout all of your software artifacts." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": { "summary": "Stream images stored in Artifact Registry to GKE\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/containerscanning.googleapis.com", "config": { "name": "containerscanning.googleapis.com", "title": "Container Scanning API", "documentation": { "summary": "A service to scan containers for vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/datacatalog.googleapis.com", "config": { "name": "datacatalog.googleapis.com", "title": "Google Cloud Data Catalog API", "documentation": { "summary": "A fully managed and highly scalable data discovery and metadata management service.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/dataflow.googleapis.com", "config": { "name": "dataflow.googleapis.com", "title": "Dataflow API", "documentation": { "summary": "Manages Google Cloud Dataflow projects on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataflow.googleapis.com/Project", "displayName": "Dataflow Project", "description": "A project level monitored resource for Dataflow.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The location where Dataflow jobs are running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataflow.googleapis.com/Project", "metrics": [ "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/exceeded", "dataflow.googleapis.com/region_endpoint_shuffle_slot" ] }, { "monitoredResource": "dataflow.googleapis.com/Project", "metrics": [ "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/limit", "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/dataform.googleapis.com", "config": { "name": "dataform.googleapis.com", "title": "Dataform API", "documentation": { "summary": "Service to develop, version control, and operationalize SQL pipelines in BigQuery." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/datafusion.googleapis.com", "config": { "name": "datafusion.googleapis.com", "title": "Cloud Data Fusion API", "documentation": { "summary": "Cloud Data Fusion is a fully-managed, cloud native, enterprise data integration service for\n quickly building and managing data pipelines. It provides a graphical interface to increase\n time efficiency and reduce complexity, and allows business users, developers, and data\n scientists to easily and reliably build scalable data integration solutions to cleanse,\n prepare, blend, transfer and transform data without having to wrestle with infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "datafusion.googleapis.com/Pipeline", "displayName": "Pipeline", "description": "A deployed Pipeline in a Cloud Data Fusion instance.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "compute_engine", "description": "The compute engine used for this Pipeline (MapReduce or Spark)." }, { "key": "pipeline_id", "description": "The Pipeline ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/Instance", "displayName": "Instance", "description": "An instance of Cloud Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/Plugin", "displayName": "Plugin", "description": "An instance of a plugin in a deployed pipeline.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "plugin_type", "description": "The type of the plugin." }, { "key": "plugin_name", "description": "The name of the plugin." }, { "key": "plugin_version", "description": "The version of the plugin." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/MonitoringAgent", "displayName": "MonitoringAgent", "description": "An instance of Monitoring Agent in Cloud Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalPipeline", "displayName": "Pipeline", "description": "A deployed Pipeline in an external (not in GCP) Data Fusion instance.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The GCP region where to store metrics." }, { "key": "cluster_id", "description": "Cluster ID that the instance is hosted in." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "pipeline_id", "description": "The Pipeline ID." }, { "key": "version", "description": "The data plane version of the instance." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalInstance", "displayName": "Instance", "description": "An instance of external (not in GCP) Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The GCP region where to store metrics." }, { "key": "cluster_id", "description": "Cluster ID that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalPlugin", "displayName": "Plugin", "description": "An instance of a plugin in a deployed pipeline in an external (not in GCP) Data Fusion instance.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "plugin_type", "description": "The type of the plugin." }, { "key": "plugin_name", "description": "The name of the plugin." }, { "key": "plugin_version", "description": "The version of the plugin." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalMonitoringAgent", "displayName": "MonitoringAgent", "description": "An instance of external Monitoring Agent (not in GCP).", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "datafusion.googleapis.com/Pipeline", "metrics": [ "datafusion.googleapis.com/pipeline/runs_completed_count", "datafusion.googleapis.com/pipeline/plugin/records_in_count", "datafusion.googleapis.com/pipeline/plugin/records_out_count", "datafusion.googleapis.com/pipeline/plugin/bytes_in_count", "datafusion.googleapis.com/pipeline/plugin/bytes_out_count", "datafusion.googleapis.com/pipeline/dataproc/provisioning_latency", "datafusion.googleapis.com/pipeline/dataproc/api_request_count", "datafusion.googleapis.com/pipeline/pipeline_run_time", "datafusion.googleapis.com/pipeline/preview_run_time", "datafusion.googleapis.com/pipeline/bytes_read_count", "datafusion.googleapis.com/pipeline/bytes_shuffled_count", "datafusion.googleapis.com/pipeline/bytes_written_count", "datafusion.googleapis.com/pipeline/plugin_count", "datafusion.googleapis.com/instance/tms_persist_count", "datafusion.googleapis.com/instance/tms_subscriber_fetch_count", "datafusion.googleapis.com/instance/tms_subscriber_fetch_time", "datafusion.googleapis.com/instance/tms_subscriber_process_delay", "datafusion.googleapis.com/instance/tms_subscriber_process_duration", "datafusion.googleapis.com/pipeline/pipeline_start_latency", "datafusion.googleapis.com/pipeline/logs_count", "datafusion.googleapis.com/pipeline/failed_runs_classified_count", "datafusion.googleapis.com/pipeline/schedule_job_count", "datafusion.googleapis.com/pipeline/schedule_job_latency", "datafusion.googleapis.com/pipeline/schedule_job_notification_failure_count", "datafusion.googleapis.com/pipeline/bqpushdown/engine_bytes_billed_count", "datafusion.googleapis.com/pipeline/bqpushdown/engine_bytes_processed_count", "datafusion.googleapis.com/pipeline/bqpushdown/engine_slot_count", "datafusion.googleapis.com/pipeline/bqpushdown/records_in_count", "datafusion.googleapis.com/pipeline/bqpushdown/records_out_count", "datafusion.googleapis.com/pipeline/bqpushdown/records_pulled_count", "datafusion.googleapis.com/pipeline/bqpushdown/records_pushed_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_join_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_transform_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_pulled_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_pushed_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_spark_pulled_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_spark_pushed_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_read_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_write_count", "datafusion.googleapis.com/pipeline/streaming_multi_source_count", "datafusion.googleapis.com/pipeline/streaming_atleastonce_count", "datafusion.googleapis.com/pipeline/state_store_access_count", "datafusion.googleapis.com/pipeline/state_store_access_latency", "datafusion.googleapis.com/pipeline/program_status_event_published_count", "datafusion.googleapis.com/pipeline/program_status_event_spark_metrics_fetch_latency", "datafusion.googleapis.com/pipeline/create_deploy_event_count", "datafusion.googleapis.com/pipeline/edit_deploy_event_count", "datafusion.googleapis.com/pipeline/upgrade_deploy_event_count", "datafusion.googleapis.com/pipeline/wrangler_directive_count", "datafusion.googleapis.com/pipeline/wrangler_jexl_category_count", "datafusion.googleapis.com/pipeline/wrangler_hash_algo_count", "datafusion.googleapis.com/pipeline/lineage/attempted_calls_count", "datafusion.googleapis.com/pipeline/lineage/failed_calls_count", "datafusion.googleapis.com/pipeline/lineage/processes_count", "datafusion.googleapis.com/pipeline/lineage/runs_count", "datafusion.googleapis.com/pipeline/lineage/lineage_events_count", "datafusion.googleapis.com/pipeline/bytes_processed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/Instance", "metrics": [ "datafusion.googleapis.com/instance/api_request_count", "datafusion.googleapis.com/instance/api_request_received_count", "datafusion.googleapis.com/instance/metric_emitted_count", "datafusion.googleapis.com/instance/service_available", "datafusion.googleapis.com/instance/pipeline_count", "datafusion.googleapis.com/instance/concurrent_pipeline_launches_count", "datafusion.googleapis.com/instance/concurrent_pipeline_running_count", "datafusion.googleapis.com/instance/draft_count", "datafusion.googleapis.com/instance/namespace_count", "datafusion.googleapis.com/instance/pod_restart_count", "datafusion.googleapis.com/instance/pod_status", "datafusion.googleapis.com/instance/api_response_times", "datafusion.googleapis.com/instance/system_logs_count", "datafusion.googleapis.com/instance/log_event_queue_size", "datafusion.googleapis.com/instance/log_process_min_delay", "datafusion.googleapis.com/instance/log_process_max_delay", "datafusion.googleapis.com/instance/log_process_count", "datafusion.googleapis.com/instance/authorization_check_count", "datafusion.googleapis.com/instance/authorization_check_time", "datafusion.googleapis.com/instance/pipeline_connection_request_count", "datafusion.googleapis.com/instance/heap_memory_used", "datafusion.googleapis.com/instance/heap_memory_max", "datafusion.googleapis.com/instance/cpu_load_per_processor_scaled", "datafusion.googleapis.com/instance/total_thread_count", "datafusion.googleapis.com/instance/source_control_management/git_operation_times", "datafusion.googleapis.com/instance/source_control_management/repository_sizes", "datafusion.googleapis.com/instance/workload_identity_namespaces", "datafusion.googleapis.com/instance/credential_identities", "datafusion.googleapis.com/instance/credential_profiles", "datafusion.googleapis.com/instance/source_control_management/total_operation_count", "datafusion.googleapis.com/instance/source_control_management/total_app_count" ] }, { "monitoredResource": "datafusion.googleapis.com/Plugin", "metrics": [ "datafusion.googleapis.com/plugin/deployed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/MonitoringAgent", "metrics": [ "datafusion.googleapis.com/monitoring_agent/workers", "datafusion.googleapis.com/monitoring_agent/pipeline_logs_count", "datafusion.googleapis.com/monitoring_agent/system_logs_count", "datafusion.googleapis.com/monitoring_agent/logs_process_duration" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalPipeline", "metrics": [ "datafusion.googleapis.com/external_pipeline/runs_completed_count", "datafusion.googleapis.com/external_pipeline/failed_runs_classified_count", "datafusion.googleapis.com/external_pipeline/pipeline_run_time", "datafusion.googleapis.com/external_pipeline/preview_run_time", "datafusion.googleapis.com/external_pipeline/plugin_count", "datafusion.googleapis.com/external_pipeline/provisioner/provisioning_latency", "datafusion.googleapis.com/external_pipeline/streaming_multi_source_count", "datafusion.googleapis.com/external_pipeline/streaming_atleastonce_count", "datafusion.googleapis.com/external_pipeline/state_store_access_count", "datafusion.googleapis.com/external_pipeline/state_store_access_latency", "datafusion.googleapis.com/external_pipeline/create_deploy_event_count", "datafusion.googleapis.com/external_pipeline/edit_deploy_event_count", "datafusion.googleapis.com/external_pipeline/upgrade_deploy_event_count", "datafusion.googleapis.com/external_pipeline/bytes_processed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalInstance", "metrics": [ "datafusion.googleapis.com/external_instance/api_request_count", "datafusion.googleapis.com/external_instance/heap_memory_used", "datafusion.googleapis.com/external_instance/heap_memory_max", "datafusion.googleapis.com/external_instance/cpu_load_per_processor_scaled", "datafusion.googleapis.com/external_instance/total_thread_count", "datafusion.googleapis.com/external_instance/service_available", "datafusion.googleapis.com/external_instance/pipeline_count", "datafusion.googleapis.com/external_instance/draft_count", "datafusion.googleapis.com/external_instance/namespace_count", "datafusion.googleapis.com/external_instance/pod_restart_count", "datafusion.googleapis.com/external_instance/pod_status", "datafusion.googleapis.com/external_instance/metric_emitted_count" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalPlugin", "metrics": [ "datafusion.googleapis.com/external_plugin/deployed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalMonitoringAgent", "metrics": [ "datafusion.googleapis.com/external_monitoring_agent/workers", "datafusion.googleapis.com/external_monitoring_agent/pipeline_logs_count", "datafusion.googleapis.com/external_monitoring_agent/system_logs_count", "datafusion.googleapis.com/external_monitoring_agent/logs_process_duration" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/dataplex.googleapis.com", "config": { "name": "dataplex.googleapis.com", "title": "Cloud Dataplex API", "documentation": { "summary": "Dataplex API is used to manage the lifecycle of data lakes." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataplex.googleapis.com/Lake", "displayName": "Cloud Dataplex Lake", "description": "A Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of this Lake resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Zone", "displayName": "Cloud Dataplex Zone", "description": "A Zone within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of this Zone resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Asset", "displayName": "Cloud Dataplex Asset", "description": "An Asset within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of the Zone resource containing this resource." }, { "key": "asset_id", "description": "The identifier of this Asset resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Environment", "displayName": "Cloud Dataplex Environment", "description": "An Environment within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "environment_id", "description": "The identifier of this Environment resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataplex.googleapis.com/Lake", "metrics": [ "dataplex.googleapis.com/lake/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Zone", "metrics": [ "dataplex.googleapis.com/zone/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Asset", "metrics": [ "dataplex.googleapis.com/asset/requires_action", "dataplex.googleapis.com/asset/active", "dataplex.googleapis.com/asset/data_items", "dataplex.googleapis.com/asset/data_size", "dataplex.googleapis.com/asset/tables", "dataplex.googleapis.com/asset/filesets", "dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates", "dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/dataproc-control.googleapis.com", "config": { "name": "dataproc-control.googleapis.com", "title": "Cloud Dataproc Control API", "documentation": { "summary": "Manages internal resources for Google Cloud Dataproc." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/dataproc.googleapis.com", "config": { "name": "dataproc.googleapis.com", "title": "Cloud Dataproc API", "documentation": { "summary": "Manages Hadoop-based clusters and jobs on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/datastore.googleapis.com", "config": { "name": "datastore.googleapis.com", "title": "Cloud Datastore API", "documentation": { "summary": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/deploymentmanager.googleapis.com", "config": { "name": "deploymentmanager.googleapis.com", "title": "Cloud Deployment Manager V2 API", "documentation": { "summary": "The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\nresources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/dns.googleapis.com", "config": { "name": "dns.googleapis.com", "title": "Cloud DNS API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/essentialcontacts.googleapis.com", "config": { "name": "essentialcontacts.googleapis.com", "title": "Essential Contacts API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/gkebackup.googleapis.com", "config": { "name": "gkebackup.googleapis.com", "title": "Backup for GKE API", "documentation": { "summary": "Backup for GKE is a managed Kubernetes workload backup and restore service\nfor GKE clusters." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "gkebackup.googleapis.com/BackupPlan", "displayName": "GKE Backup Plan", "description": "A backup plan provides configuration, location, and management functions for a sequence of backups.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this backupPlan resides." }, { "key": "backup_plan_id", "description": "The name of the backupPlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/RestorePlan", "displayName": "GKE Restore Plan", "description": "A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this restorePlan resides." }, { "key": "restore_plan_id", "description": "The name of the restorePlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/Project", "displayName": "Backup for GKE Project", "description": "A Project in the Backup for GKE API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource." }, { "key": "location", "description": "The Google Cloud location of the resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "gkebackup.googleapis.com/BackupPlan", "metrics": [ "gkebackup.googleapis.com/backup_created_count", "gkebackup.googleapis.com/backup_deleted_count", "gkebackup.googleapis.com/backup_completion_times" ] }, { "monitoredResource": "gkebackup.googleapis.com/RestorePlan", "metrics": [ "gkebackup.googleapis.com/restore_created_count" ] }, { "monitoredResource": "gkebackup.googleapis.com/Project", "metrics": [ "gkebackup.googleapis.com/internal/backup_plan_existence" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" }, { "type": "iam.googleapis.com/WorkforcePoolProvider", "displayName": "Workforce Identity Pool Provider", "description": "A workforce identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud organization associated with this resource." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workforce pool parent resource." }, { "key": "provider_id", "description": "The ID of the workforce pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkforcePoolProvider", "metrics": [ "iam.googleapis.com/workforce_identity_federation/count" ] }, { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/iap.googleapis.com", "config": { "name": "iap.googleapis.com", "title": "Cloud Identity-Aware Proxy API", "documentation": { "summary": "Controls access to cloud applications running on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes", "logging.googleapis.com/billing/stored_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" }, { "name": "projects/12340071/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" and \"cluster\" are supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested", "monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested", "monitoring.googleapis.com/internal/stats/filtered_sample_count", "monitoring.googleapis.com/internal/stats/filtered_byte_count", "monitoring.googleapis.com/internal/stats/metrics_queried_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340071" } ], "nextPageToken": "ch0KG0IZbW9uaXRvcmluZy5nb29nbGVhcGlzLmNvbQ==" } ================================================ FILE: test-data/cloudasset1/project.tf ================================================ /** * Copyright 2024 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. */ locals { project_id = var.project_id } provider "google" { project = local.project_id } resource "google_project_service" "cloudasset" { project = var.project_id service = "cloudasset.googleapis.com" } output "project_nr" { value = var.project_nr } output "org_id" { value = var.org_id } output "project_id" { value = local.project_id } output "folder_id" { value = var.folder_id } ================================================ FILE: test-data/cloudasset1/variable.tf ================================================ variable "billing_account_id" { default = "" } variable "org_id" { default = "" } variable "folder_id" { default = "" } variable "project_id" { default = "" } variable "project_nr" { default = " " } ================================================ FILE: test-data/cloudrun1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = us-central1 FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 123400010 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/locations.json \ json-dumps/cloudrun_services.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/project.json \ json-dumps/services.json json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudrun_services.json: $(CURL) -fsS \ 'https://run.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/services' \ | $(JSON_CLEANER) cloudrun \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/locations.json: $(CURL) -fsS \ 'https://run.googleapis.com/v1/projects/$(PROJECT_ID)/locations' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/cloudrun1/cloudrun1.tf ================================================ resource "google_cloud_run_service" "default" { project = google_project.project.project_id name = "cloudrun1" location = "us-central1" template { spec { containers { image = "us-docker.pkg.dev/cloudrun/container/hello" } } } traffic { percent = 100 latest_revision = true } } ================================================ FILE: test-data/cloudrun1/json-dumps/cloudrun_services.json ================================================ { "services": [ { "conditions": [ { "lastTransitionTime": "2022-08-12T11:55:27.598596Z", "state": "CONDITION_SUCCEEDED", "type": "RoutesReady" }, { "lastTransitionTime": "2022-08-12T11:55:26.536145Z", "state": "CONDITION_SUCCEEDED", "type": "ConfigurationsReady" } ], "createTime": "2022-08-12T11:55:14.685868Z", "creator": "REDACTED", "etag": "\"CKL_2JcGEOCHhscC/cHJvamVjdHMvZ2NwZGlhZy1jbG91ZHJ1bjEtNWFlY2xtbHQvbG9jYXRpb25zL3VzLWNlbnRyYWwxL3NlcnZpY2VzL2Nsb3VkcnVuMQ\"", "generation": "1", "ingress": "INGRESS_TRAFFIC_ALL", "lastModifier": "testuser@example.com", "latestCreatedRevision": "projects/gcpdiag-cloudrun1-aaaa/locations/us-central1/services/cloudrun1/revisions/cloudrun1-fzzds", "latestReadyRevision": "projects/gcpdiag-cloudrun1-aaaa/locations/us-central1/services/cloudrun1/revisions/cloudrun1-fzzds", "launchStage": "GA", "name": "projects/gcpdiag-cloudrun1-aaaa/locations/us-central1/services/cloudrun1", "observedGeneration": "1", "template": { "containers": [ { "image": "us-docker.pkg.dev/cloudrun/container/hello", "ports": [ { "containerPort": 8080, "name": "http1" } ], "resources": { "cpuIdle": true, "limits": { "cpu": "1000m", "memory": "512Mi" } } } ], "maxInstanceRequestConcurrency": 80, "scaling": { "maxInstanceCount": 100 }, "serviceAccount": "123400010-compute@developer.gserviceaccount.com", "timeout": "300s" }, "terminalCondition": { "lastTransitionTime": "2022-08-12T11:55:27.598596Z", "state": "CONDITION_SUCCEEDED", "type": "Ready" }, "traffic": [ { "percent": 100, "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION" } ], "trafficStatuses": [ { "percent": 100, "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST" } ], "uid": "4d9c2cd0-a23c-499a-adaf-844db1fc7350", "updateTime": "2022-08-12T11:55:14.685868Z", "uri": "https://cloudrun1-vavezhxkqq-uc.a.run.app" } ] } ================================================ FILE: test-data/cloudrun1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:123400010@cloudbuild.gserviceaccount.com" ], "role": "roles/cloudbuild.builds.builder" }, { "members": [ "serviceAccount:service-123400010@gcp-sa-cloudbuild.iam.gserviceaccount.com" ], "role": "roles/cloudbuild.serviceAgent" }, { "members": [ "serviceAccount:service-123400010@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:123400010-compute@developer.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-123400010@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" }, { "members": [ "serviceAccount:service-123400010@serverless-robot-prod.iam.gserviceaccount.com" ], "role": "roles/run.serviceAgent" } ], "etag": "BwXmCdbeyfA=", "version": 1 } ================================================ FILE: test-data/cloudrun1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Default compute service account", "email": "123400010-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-cloudrun1-aaaa/serviceAccounts/123400010-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-cloudrun1-aaaa", "uniqueId": "115693944847802201137" } ] } ================================================ FILE: test-data/cloudrun1/json-dumps/locations.json ================================================ { "locations": [ { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-east1", "locationId": "asia-east1", "displayName": "Taiwan" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-east2", "locationId": "asia-east2", "displayName": "Hong Kong" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-northeast1", "locationId": "asia-northeast1", "displayName": "Tokyo" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-northeast2", "locationId": "asia-northeast2", "displayName": "Osaka" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-northeast3", "locationId": "asia-northeast3", "displayName": "Seoul" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-south1", "locationId": "asia-south1", "displayName": "Mumbai" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-south2", "locationId": "asia-south2", "displayName": "Delhi" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-southeast1", "locationId": "asia-southeast1", "displayName": "Singapore" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/asia-southeast2", "locationId": "asia-southeast2", "displayName": "Jakarta" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/australia-southeast1", "locationId": "australia-southeast1", "displayName": "Sydney" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/australia-southeast2", "locationId": "australia-southeast2", "displayName": "Melbourne" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-central2", "locationId": "europe-central2", "displayName": "Warsaw" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-north1", "locationId": "europe-north1", "displayName": "Finland" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-southwest1", "locationId": "europe-southwest1", "displayName": "Madrid" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-west1", "locationId": "europe-west1", "displayName": "Belgium" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-west2", "locationId": "europe-west2", "displayName": "London" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-west3", "locationId": "europe-west3", "displayName": "Frankfurt" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-west4", "locationId": "europe-west4", "displayName": "Netherlands" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-west6", "locationId": "europe-west6", "displayName": "Zurich" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-west8", "locationId": "europe-west8", "displayName": "Milan" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/europe-west9", "locationId": "europe-west9", "displayName": "Paris" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/northamerica-northeast1", "locationId": "northamerica-northeast1", "displayName": "Montréal" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/northamerica-northeast2", "locationId": "northamerica-northeast2", "displayName": "Toronto" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/southamerica-east1", "locationId": "southamerica-east1", "displayName": "São Paulo" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/southamerica-west1", "locationId": "southamerica-west1", "displayName": "Santiago" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-central1", "locationId": "us-central1", "displayName": "Iowa" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-east1", "locationId": "us-east1", "displayName": "South Carolina" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-east4", "locationId": "us-east4", "displayName": "Northern Virginia" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-east5", "locationId": "us-east5", "displayName": "Columbus" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-south1", "locationId": "us-south1", "displayName": "Dallas" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-west1", "locationId": "us-west1", "displayName": "Oregon" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-west2", "locationId": "us-west2", "displayName": "Los Angeles" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-west3", "locationId": "us-west3", "displayName": "Salt Lake City" }, { "name": "gcpdiag-cloudrun1-aaaa/locations/us-west4", "locationId": "us-west4", "displayName": "Las Vegas" } ] } ================================================ FILE: test-data/cloudrun1/json-dumps/project.json ================================================ { "name": "projects/123400010", "parent": "folders/373737373737", "projectId": "gcpdiag-cloudrun1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - cloudrun1", "createTime": "2022-08-12T11:45:50.484Z", "updateTime": "2022-08-12T11:45:51.971Z", "etag": "O/fr9Ol/yE2tzfNqR7HTow==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/cloudrun1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/123400010/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/run.googleapis.com", "config": { "name": "run.googleapis.com", "title": "Cloud Run Admin API", "documentation": { "summary": "Deploy and manage user provided container images that scale automatically based on incoming requests. The Cloud Run Admin API v1 follows the Knative Serving API specification, while v2 is aligned with Google Cloud AIP-based API standards, as described in https://google.aip.dev/." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "run.googleapis.com/revision", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "run.googleapis.com/service_name" }, { "key": "run.googleapis.com/revision_name" }, { "key": "cloud.googleapis.com/location" }, { "key": "run.googleapis.com/configuration_name" }, { "key": "cloud.googleapis.com/uid" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "run.googleapis.com/revision", "metrics": [ "run.googleapis.com/request_count", "run.googleapis.com/request_latencies", "run.googleapis.com/container/instance_time", "run.googleapis.com/container/cpu/allocation_time", "run.googleapis.com/container/memory/allocation_time", "run.googleapis.com/container/labelled_instance_time", "run.googleapis.com/container/cpu/scaled_usage", "run.googleapis.com/container/memory/utilization", "run.googleapis.com/tenant_project", "run.googleapis.com/internal/eventflow_filter/cloudevent_recordedtime_latencies", "run.googleapis.com/internal/eventflow_filter/cloudevent_time_latencies", "run.googleapis.com/internal/eventflow_filter/transformation_count", "run.googleapis.com/internal/eventflow_filter/transformation_latencies", "run.googleapis.com/internal/pod_service_client/request_count", "run.googleapis.com/internal/pod_service_client/request_latencies" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" } ] } ================================================ FILE: test-data/cloudrun1/project.tf ================================================ /** * 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - cloudrun1" project_id = "gcpdiag-cloudrun1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "cloudbuild" { project = google_project.project.project_id service = "cloudbuild.googleapis.com" } resource "google_project_service" "run" { project = google_project.project.project_id service = "run.googleapis.com" depends_on = [google_project_service.cloudbuild] } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/cloudrun1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/cloudrun2/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = us-central1 FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 123400010 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/locations.json \ json-dumps/cloudrun_services.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/project.json \ json-dumps/services.json json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudrun_services.json: $(CURL) -fsS \ 'https://run.googleapis.com/v2/projects/$(PROJECT_ID)/locations/$(REGION_1)/services' \ | $(JSON_CLEANER) cloudrun \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/locations.json: $(CURL) -fsS \ 'https://run.googleapis.com/v1/projects/$(PROJECT_ID)/locations' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/cloudrun2/artifact_registry.tf ================================================ data "google_client_config" "default" { } data "google_client_openid_userinfo" "me" { } resource "google_artifact_registry_repository" "cloudrun_repo" { project = google_project.project.project_id location = "us-central1" repository_id = "cloudrun-repository" format = "DOCKER" } locals { repository_url = "${google_artifact_registry_repository.cloudrun_repo.location}-docker.pkg.dev/${google_project.project.project_id}/${google_artifact_registry_repository.cloudrun_repo.repository_id}" } ================================================ FILE: test-data/cloudrun2/build_configs/deploy_run_with_bad_container/Dockerfile ================================================ FROM ubuntu:24.04@sha256:a08e551cb33850e4740772b38217fc1796a66da2506d312abe51acda354ff061 ================================================ FILE: test-data/cloudrun2/build_configs/deploy_run_with_bad_container/cloudbuild.yaml ================================================ steps: - name: gcr.io/cloud-builders/docker args: - build - -t - ${_IMAGE} - . - name: gcr.io/cloud-builders/docker args: - push - ${_IMAGE} - name: gcr.io/cloud-builders/gcloud args: - run - deploy - invalid-container - --region - us-central1 - --image - ${_IMAGE} - --no-allow-unauthenticated allowFailure: true ================================================ FILE: test-data/cloudrun2/cloud_run.tf ================================================ # We are not using cloud run terraform resource in this file since we want to make the service to fail to deploy which would break resource "null_resource" "failed_deployment1" { provisioner "local-exec" { command = <<-EOT cd build_configs/deploy_run_with_bad_container gcloud builds submit --project ${google_project.project.project_id} --config cloudbuild.yaml \ --substitutions _IMAGE=${local.repository_url}/not_http_image EOT } depends_on = [google_artifact_registry_repository.cloudrun_repo] } resource "null_resource" "failed_deployment2" { provisioner "local-exec" { command = <<-EOT gcloud run deploy no-image-permission \ --project ${google_project.project.project_id} \ --region us-central1 \ --image gcr.io/private-project/image \ --no-allow-unauthenticated \ || true EOT } depends_on = [google_artifact_registry_repository.cloudrun_repo] } resource "null_resource" "failed_deployment3" { provisioner "local-exec" { command = <<-EOT gcloud run deploy image-does-not-exist \ --project ${google_project.project.project_id} \ --region us-central1 \ --image ${local.repository_url}/missing-image \ --no-allow-unauthenticated \ || true EOT } depends_on = [google_artifact_registry_repository.cloudrun_repo] } ================================================ FILE: test-data/cloudrun2/json-dumps/cloudrun_services.json ================================================ { "services": [ { "client": "gcloud", "clientVersion": "481.0.0", "conditions": [ { "lastTransitionTime": "2024-06-28T14:22:04.115832Z", "message": "Revision 'invalid-container-00001-glb' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.\n\nLogs URL: https://console.cloud.google.com/logs/viewer?project=gcpdiag-cloudrun2-aaaa&resource=cloud_run_revision/service_name/invalid-container/revision_name/invalid-container-00001-glb&advancedFilter=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22invalid-container%22%0Aresource.labels.revision_name%3D%22invalid-container-00001-glb%22 \nFor more troubleshooting guidance, see https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start", "revisionReason": "HEALTH_CHECK_CONTAINER_ERROR", "state": "CONDITION_FAILED", "type": "RoutesReady" }, { "lastTransitionTime": "2024-06-28T14:21:58.515179Z", "state": "CONDITION_SUCCEEDED", "type": "ConfigurationsReady" } ], "createTime": "2024-06-28T14:21:58.431731Z", "creator": "REDACTED", "etag": "\"CIaO-7MGELji7s0B/cHJvamVjdHMvZ2NwZGlhZy1jbG91ZHJ1bjItNGZvYXMzbWovbG9jYXRpb25zL3VzLWNlbnRyYWwxL3NlcnZpY2VzL2ludmFsaWQtY29udGFpbmVy\"", "generation": "1", "ingress": "INGRESS_TRAFFIC_ALL", "lastModifier": "123400010-compute@developer.gserviceaccount.com", "latestCreatedRevision": "projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/invalid-container/revisions/invalid-container-00001-glb", "latestReadyRevision": "projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/invalid-container/revisions/invalid-container-00001-glb", "launchStage": "GA", "name": "projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/invalid-container", "observedGeneration": "1", "template": { "containers": [ { "image": "us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/not_http_image", "ports": [ { "containerPort": 8080, "name": "http1" } ], "resources": { "cpuIdle": true, "limits": { "cpu": "1000m", "memory": "512Mi" }, "startupCpuBoost": true }, "startupProbe": { "failureThreshold": 1, "periodSeconds": 240, "tcpSocket": { "port": 8080 }, "timeoutSeconds": 240 } } ], "maxInstanceRequestConcurrency": 80, "scaling": { "maxInstanceCount": 100 }, "serviceAccount": "123400010-compute@developer.gserviceaccount.com", "timeout": "300s" }, "terminalCondition": { "lastTransitionTime": "2024-06-28T14:22:04.115832Z", "message": "Revision 'invalid-container-00001-glb' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.\n\nLogs URL: https://console.cloud.google.com/logs/viewer?project=gcpdiag-cloudrun2-aaaa&resource=cloud_run_revision/service_name/invalid-container/revision_name/invalid-container-00001-glb&advancedFilter=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22invalid-container%22%0Aresource.labels.revision_name%3D%22invalid-container-00001-glb%22 \nFor more troubleshooting guidance, see https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start", "revisionReason": "HEALTH_CHECK_CONTAINER_ERROR", "state": "CONDITION_FAILED", "type": "Ready" }, "traffic": [ { "percent": 100, "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST" } ], "uid": "4ca2c930-7962-4fce-9470-987642372120", "updateTime": "2024-06-28T14:21:58.431731Z" }, { "client": "gcloud", "clientVersion": "482.0.0", "conditions": [ { "lastTransitionTime": "2024-06-28T14:21:38.354602Z", "message": "Revision 'no-image-permission-00001-fst' is not ready and cannot serve traffic. Google Cloud Run Service Agent service-123400010@serverless-robot-prod.iam.gserviceaccount.com must have permission to read the image, gcr.io/private-project/image. Ensure that the provided container image URL is correct and that the above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that the image is from project [private-project], which is not the same as this project [gcpdiag-cloudrun2-aaaa]. Permission must be granted to the Google Cloud Run Service Agent service-1076942843663@serverless-robot-prod.iam.gserviceaccount.com from this project. See https://cloud.google.com/run/docs/deploying#other-projects", "reason": "CONTAINER_PERMISSION_DENIED", "state": "CONDITION_FAILED", "type": "RoutesReady" }, { "lastTransitionTime": "2024-06-28T14:21:38.119970Z", "state": "CONDITION_SUCCEEDED", "type": "ConfigurationsReady" } ], "createTime": "2024-06-28T14:21:38.037709Z", "creator": "REDACTED", "etag": "\"CPKN-7MGEMjJ_RE/cHJvamVjdHMvZ2NwZGlhZy1jbG91ZHJ1bjItNGZvYXMzbWovbG9jYXRpb25zL3VzLWNlbnRyYWwxL3NlcnZpY2VzL25vLWltYWdlLXBlcm1pc3Npb24\"", "generation": "1", "ingress": "INGRESS_TRAFFIC_ALL", "lastModifier": "testuser@example.com", "latestCreatedRevision": "projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/no-image-permission/revisions/no-image-permission-00001-fst", "launchStage": "GA", "name": "projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/no-image-permission", "observedGeneration": "1", "template": { "containers": [ { "image": "gcr.io/private-project/image", "ports": [ { "containerPort": 8080, "name": "http1" } ], "resources": { "cpuIdle": true, "limits": { "cpu": "1000m", "memory": "512Mi" }, "startupCpuBoost": true }, "startupProbe": { "failureThreshold": 1, "periodSeconds": 240, "tcpSocket": { "port": 8080 }, "timeoutSeconds": 240 } } ], "maxInstanceRequestConcurrency": 80, "scaling": { "maxInstanceCount": 100 }, "serviceAccount": "123400010-compute@developer.gserviceaccount.com", "timeout": "300s" }, "terminalCondition": { "lastTransitionTime": "2024-06-28T14:21:38.354602Z", "message": "Revision 'no-image-permission-00001-fst' is not ready and cannot serve traffic. Google Cloud Run Service Agent service-123400010@serverless-robot-prod.iam.gserviceaccount.com must have permission to read the image, gcr.io/private-project/image. Ensure that the provided container image URL is correct and that the above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that the image is from project [private-project], which is not the same as this project [gcpdiag-cloudrun2-aaaa]. Permission must be granted to the Google Cloud Run Service Agent service-1076942843663@serverless-robot-prod.iam.gserviceaccount.com from this project. See https://cloud.google.com/run/docs/deploying#other-projects", "reason": "CONTAINER_PERMISSION_DENIED", "state": "CONDITION_FAILED", "type": "Ready" }, "traffic": [ { "percent": 100, "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST" } ], "uid": "7af8a1c8-8758-48d4-9476-024c0f62c4d7", "updateTime": "2024-06-28T14:21:38.037709Z" }, { "client": "gcloud", "clientVersion": "482.0.0", "conditions": [ { "lastTransitionTime": "2024-06-28T14:21:38.873277Z", "message": "Revision 'image-does-not-exist-00001-5w5' is not ready and cannot serve traffic. Image 'us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/missing-image' not found.", "reason": "REVISION_FAILED", "state": "CONDITION_FAILED", "type": "RoutesReady" }, { "lastTransitionTime": "2024-06-28T14:21:37.988614Z", "state": "CONDITION_SUCCEEDED", "type": "ConfigurationsReady" } ], "createTime": "2024-06-28T14:21:37.899709Z", "creator": "REDACTED", "etag": "\"CPGN-7MGEMjwga0D/cHJvamVjdHMvZ2NwZGlhZy1jbG91ZHJ1bjItNGZvYXMzbWovbG9jYXRpb25zL3VzLWNlbnRyYWwxL3NlcnZpY2VzL2ltYWdlLWRvZXMtbm90LWV4aXN0\"", "generation": "1", "ingress": "INGRESS_TRAFFIC_ALL", "lastModifier": "testuser@example.com", "latestCreatedRevision": "projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/image-does-not-exist/revisions/image-does-not-exist-00001-5w5", "launchStage": "GA", "name": "projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/image-does-not-exist", "observedGeneration": "1", "template": { "containers": [ { "image": "us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/missing-image", "ports": [ { "containerPort": 8080, "name": "http1" } ], "resources": { "cpuIdle": true, "limits": { "cpu": "1000m", "memory": "512Mi" }, "startupCpuBoost": true }, "startupProbe": { "failureThreshold": 1, "periodSeconds": 240, "tcpSocket": { "port": 8080 }, "timeoutSeconds": 240 } } ], "maxInstanceRequestConcurrency": 80, "scaling": { "maxInstanceCount": 100 }, "serviceAccount": "123400010-compute@developer.gserviceaccount.com", "timeout": "300s" }, "terminalCondition": { "lastTransitionTime": "2024-06-28T14:21:38.873277Z", "message": "Revision 'image-does-not-exist-00001-5w5' is not ready and cannot serve traffic. Image 'us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/missing-image' not found.", "reason": "REVISION_FAILED", "state": "CONDITION_FAILED", "type": "Ready" }, "traffic": [ { "percent": 100, "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST" } ], "uid": "37324495-a964-42ce-a080-2995f68c8f35", "updateTime": "2024-06-28T14:21:37.899709Z" } ] } ================================================ FILE: test-data/cloudrun2/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-123400010@gcp-sa-artifactregistry.iam.gserviceaccount.com" ], "role": "roles/artifactregistry.serviceAgent" }, { "members": [ "serviceAccount:123400010@cloudbuild.gserviceaccount.com" ], "role": "roles/cloudbuild.builds.builder" }, { "members": [ "serviceAccount:service-123400010@gcp-sa-cloudbuild.iam.gserviceaccount.com" ], "role": "roles/cloudbuild.serviceAgent" }, { "members": [ "serviceAccount:service-123400010@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:123400010-compute@developer.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-123400010@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" }, { "members": [ "serviceAccount:service-123400010@serverless-robot-prod.iam.gserviceaccount.com" ], "role": "roles/run.serviceAgent" }, { "members": [ "serviceAccount:service-123400010@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ], "role": "roles/websecurityscanner.serviceAgent" } ], "etag": "BwYbovlVX5c=", "version": 1 } ================================================ FILE: test-data/cloudrun2/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Default compute service account", "email": "123400010-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-cloudrun2-aaaa/serviceAccounts/123400010-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-cloudrun2-aaaa", "uniqueId": "106786160591595959857" } ] } ================================================ FILE: test-data/cloudrun2/json-dumps/locations.json ================================================ { "locations": [ { "name": "gcpdiag-cloudrun2-aaaa/locations/africa-south1", "locationId": "africa-south1", "displayName": "Johannesburg" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-east1", "locationId": "asia-east1", "displayName": "Taiwan" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-east2", "labels": { "run.googleapis.com/supportsPzs": "true" }, "locationId": "asia-east2", "displayName": "Hong Kong" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-northeast1", "locationId": "asia-northeast1", "displayName": "Tokyo" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-northeast2", "locationId": "asia-northeast2", "displayName": "Osaka" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-northeast3", "locationId": "asia-northeast3", "displayName": "Seoul" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-south1", "locationId": "asia-south1", "displayName": "Mumbai" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-south2", "locationId": "asia-south2", "displayName": "Delhi" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-southeast1", "locationId": "asia-southeast1", "displayName": "Singapore" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/asia-southeast2", "locationId": "asia-southeast2", "displayName": "Jakarta" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/australia-southeast1", "labels": { "run.googleapis.com/supportsPzs": "true" }, "locationId": "australia-southeast1", "displayName": "Sydney" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/australia-southeast2", "locationId": "australia-southeast2", "displayName": "Melbourne" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-central2", "locationId": "europe-central2", "displayName": "Warsaw" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-north1", "locationId": "europe-north1", "displayName": "Finland" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-southwest1", "locationId": "europe-southwest1", "displayName": "Madrid" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west1", "locationId": "europe-west1", "displayName": "Belgium" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west10", "locationId": "europe-west10", "displayName": "Berlin" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west12", "locationId": "europe-west12", "displayName": "Turin" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west2", "labels": { "run.googleapis.com/supportsPzs": "true" }, "locationId": "europe-west2", "displayName": "London" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west3", "labels": { "run.googleapis.com/supportsPzs": "true" }, "locationId": "europe-west3", "displayName": "Frankfurt" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west4", "locationId": "europe-west4", "displayName": "Netherlands" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west6", "locationId": "europe-west6", "displayName": "Zurich" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west8", "locationId": "europe-west8", "displayName": "Milan" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/europe-west9", "locationId": "europe-west9", "displayName": "Paris" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/me-central1", "locationId": "me-central1", "displayName": "Doha" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/me-central2", "locationId": "me-central2", "displayName": "Dammam" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/me-west1", "locationId": "me-west1", "displayName": "Tel Aviv" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/northamerica-northeast1", "locationId": "northamerica-northeast1", "displayName": "Montréal" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/northamerica-northeast2", "locationId": "northamerica-northeast2", "displayName": "Toronto" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/southamerica-east1", "locationId": "southamerica-east1", "displayName": "São Paulo" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/southamerica-west1", "locationId": "southamerica-west1", "displayName": "Santiago" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-central1", "labels": { "initialized": "true" }, "locationId": "us-central1", "displayName": "Iowa" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-east1", "locationId": "us-east1", "displayName": "South Carolina" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-east4", "labels": { "run.googleapis.com/supportsPzs": "true" }, "locationId": "us-east4", "displayName": "Northern Virginia" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-east5", "locationId": "us-east5", "displayName": "Columbus" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-south1", "locationId": "us-south1", "displayName": "Dallas" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-west1", "locationId": "us-west1", "displayName": "Oregon" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-west2", "locationId": "us-west2", "displayName": "Los Angeles" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-west3", "labels": { "run.googleapis.com/supportsPzs": "true" }, "locationId": "us-west3", "displayName": "Salt Lake City" }, { "name": "gcpdiag-cloudrun2-aaaa/locations/us-west4", "locationId": "us-west4", "displayName": "Las Vegas" } ] } ================================================ FILE: test-data/cloudrun2/json-dumps/project.json ================================================ { "name": "projects/123400010", "parent": "folders/373737373737", "projectId": "gcpdiag-cloudrun2-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - cloudrun2 ", "createTime": "2024-06-20T14:48:05.952136Z", "updateTime": "2024-06-20T14:55:46.631667Z", "etag": "W/\"77494eee40d241da\"", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/cloudrun2/json-dumps/services.json ================================================ { "services": [ { "name": "projects/123400010/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "artifactregistry.googleapis.com/Location", "displayName": "Artifact Registry Location", "description": "A location in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "artifactregistry.googleapis.com/Project", "displayName": "Artifact Registry Project", "description": "A Cloud project in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "BETA" }, { "type": "artifactregistry.googleapis.com/Repository", "displayName": "Artifact Registry Repository", "description": "A repository in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "repository_id", "description": "The identifier of the Artifact Registry repository, such as \"my_repository\"." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_region_upstream_host_reads", "artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/region_upstream_host_reads", "artifactregistry.googleapis.com/us_multi_region_upstream_host_reads" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Project", "metrics": [ "artifactregistry.googleapis.com/project/api/request_count", "artifactregistry.googleapis.com/project/api/request_latencies", "artifactregistry.googleapis.com/project/request_count", "artifactregistry.googleapis.com/project/request_latencies" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Repository", "metrics": [ "artifactregistry.googleapis.com/repository/api/request_count", "artifactregistry.googleapis.com/repository/api/request_latencies", "artifactregistry.googleapis.com/repository/request_count", "artifactregistry.googleapis.com/repository/request_latencies", "artifactregistry.googleapis.com/repository/size" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "cloudbuild.googleapis.com/Location", "displayName": "Cloud Build Location", "description": "A location in the Cloud Build API.", "labels": [ { "key": "resource_container", "description": "The identified of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "cloudbuild.googleapis.com/GkeInstance", "displayName": "GKE instance", "description": "GKE instance.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "gke_instance_id", "description": "The identifier of the GKE instance." } ], "launchStage": "ALPHA" }, { "type": "cloudbuild.googleapis.com/PrivatePool", "displayName": "Private Worker Pool", "description": "Private Worker Pool.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "worker_pool_uuid", "description": "The UUID of the worker pool." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudbuild.googleapis.com/GkeInstance", "metrics": [ "cloudbuild.googleapis.com/internal/gke_instance/pod", "cloudbuild.googleapis.com/internal/gke_instance/node" ] }, { "monitoredResource": "cloudbuild.googleapis.com/PrivatePool", "metrics": [ "cloudbuild.googleapis.com/internal/private_pool_ready_worker_replicas" ] }, { "monitoredResource": "cloudbuild.googleapis.com/Location", "metrics": [ "cloudbuild.googleapis.com/concurrent_public_pool_build_cpus", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/exceeded" ] }, { "monitoredResource": "cloudbuild.googleapis.com/Location", "metrics": [ "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/limit", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" }, { "type": "iam.googleapis.com/WorkforcePoolProvider", "displayName": "Workforce Identity Pool Provider", "description": "A workforce identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud organization associated with this resource." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workforce pool parent resource." }, { "key": "provider_id", "description": "The ID of the workforce pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] }, { "monitoredResource": "iam.googleapis.com/WorkforcePoolProvider", "metrics": [ "iam.googleapis.com/workforce_identity_federation/count" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes", "logging.googleapis.com/billing/stored_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/run.googleapis.com", "config": { "name": "run.googleapis.com", "title": "Cloud Run Admin API", "documentation": { "summary": "Deploy and manage user provided container images that scale automatically based on incoming requests. The Cloud Run Admin API v1 follows the Knative Serving API specification, while v2 is aligned with Google Cloud AIP-based API standards, as described in https://google.aip.dev/." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "run.googleapis.com/revision", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "run.googleapis.com/service_name" }, { "key": "run.googleapis.com/revision_name" }, { "key": "cloud.googleapis.com/location" }, { "key": "run.googleapis.com/configuration_name" }, { "key": "cloud.googleapis.com/uid" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "run.googleapis.com/revision", "metrics": [ "run.googleapis.com/request_count", "run.googleapis.com/request_latencies", "run.googleapis.com/container/instance_time", "run.googleapis.com/container/cpu/allocation_time", "run.googleapis.com/container/memory/allocation_time", "run.googleapis.com/container/labelled_instance_time", "run.googleapis.com/container/cpu/scaled_usage", "run.googleapis.com/container/memory/utilization", "run.googleapis.com/tenant_project", "run.googleapis.com/internal/eventflow_filter/cloudevent_recordedtime_latencies", "run.googleapis.com/internal/eventflow_filter/cloudevent_time_latencies", "run.googleapis.com/internal/eventflow_filter/transformation_count", "run.googleapis.com/internal/eventflow_filter/transformation_latencies", "run.googleapis.com/internal/pod_service_client/request_count", "run.googleapis.com/internal/pod_service_client/request_latencies" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" } ] } ================================================ FILE: test-data/cloudrun2/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - cloudrun2 " project_id = var.project_id != "" ? var.project_id : "gcpdiag-cloudrun2-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "cloudbuild" { project = google_project.project.project_id service = "cloudbuild.googleapis.com" } resource "google_project_service" "artifactregistry" { project = google_project.project.project_id service = "artifactregistry.googleapis.com" } resource "google_project_service" "run" { project = google_project.project.project_id service = "run.googleapis.com" depends_on = [google_project_service.cloudbuild] } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/cloudrun2/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } variable "project_id" { default = "" } ================================================ FILE: test-data/cloudsql1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340006 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/services.json \ json-dumps/project.json \ json-dumps/cloudsql-instances.json json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudsql-instances.json: $(CURL) -fsS \ 'https://sqladmin.googleapis.com/v1/projects/$(PROJECT_ID)/instances' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/cloudsql1/json-dumps/cloudsql-instances.json ================================================ { "items": [ { "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "MYSQL_8_0", "settings": { "authorizedGaeApplications": [], "tier": "db-f1-micro", "kind": "sql#settings", "availabilityType": "ZONAL", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "activationPolicy": "ALWAYS", "ipConfiguration": { "privateNetwork": "projects/gcpdiag-cloudsql1-aaaa/global/networks/private-network", "authorizedNetworks": [], "ipv4Enabled": false, "requireSsl": false }, "locationPreference": { "zone": "us-central1-a", "kind": "sql#locationPreference" }, "dataDiskType": "PD_SSD", "backupConfiguration": { "startTime": "06:00", "kind": "sql#backupConfiguration", "backupRetentionSettings": { "retentionUnit": "COUNT", "retainedBackups": 7 }, "enabled": false, "transactionLogRetentionDays": 7 }, "settingsVersion": "1", "storageAutoResizeLimit": "0", "storageAutoResize": true, "dataDiskSizeGb": "10" }, "etag": "c4c69a19f017f91e28c66158a50b9a752d85b6aa8f5dbdd4ba018f656d96933b", "ipAddresses": [ { "type": "PRIVATE", "ipAddress": "172.17.0.3" } ], "serverCaCert": { "kind": "sql#sslCert", "certSerialNumber": "0", "cert": "-----BEGIN CERTIFICATE-----\nMIIDfzCCAmegAwIBAgIBADANBgkqhkiG9w0BAQsFADB3MS0wKwYDVQQuEyQzZTFm\nYTc5OC0wYzc1LTRjMWEtYmRkZi00ZGZjZDVhY2YwNjQxIzAhBgNVBAMTGkdvb2ds\nZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUsIEluYzELMAkG\nA1UEBhMCVVMwHhcNMjIwNTEwMDg0MDA2WhcNMzIwNTA3MDg0MTA2WjB3MS0wKwYD\nVQQuEyQzZTFmYTc5OC0wYzc1LTRjMWEtYmRkZi00ZGZjZDVhY2YwNjQxIzAhBgNV\nBAMTGkdvb2dsZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUs\nIEluYzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQDGV9bVV88MjegjzE4iZyP1GjxK4ahSffXDI5CwqIA+XYEFeA5JYY/5D3Amka9M\nS/mgI/6Rhe9C46JPqG2vIkUsjrs1AZPWS7qJyQN2SZXqfl+vaMJHtHh88fQUjru4\nixE/5W+PonhCUS6Amq3xm0rW929FuuVdzzTC5PC8ShCaprjEw0o6y0sa7fpS8vlp\nGNrYwZdDViLIm+OuoIRIm7eVLx09GSpk5O0UTzqyPqNOXa1CB4bGYxuTlHCk+m32\ntiKapH6Ee+vdhw1YppJVk9DDFn2EjcAjf+jxda1nBUxmX1uxHn8RsZUnztVdytxJ\nHN3vy7t3q7Rmq/LF+djEODJ3AgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQAw\nDQYJKoZIhvcNAQELBQADggEBABZjnPfPAFw/TP0nFnUbGMKgy6gwc30rdsAXS0qB\n8H25ZUor6IXfCiQzmmMQYfyIG5T6/JuY83PKgRxew0XjKBYaCVa+GcOogzPrLCl4\nLcfyJeGLJVZ5dqYaK9Qcm4Qp2KoN3iaEyX9q6Dbrw8owo28VFjBMULeNglh5Kb7/\nZgv7vIV8R8Z04GQteeHk8y/OJwrA0i0v9gZSy+prZzqr8LXbIH59kziSf8IEfAQc\n4LFXaQjxHYMQfGqcH8bZEqGzA/sL9wHMDUoUqNybKI7BacRiV2tdad0xUGDyEqUj\nbSTk1IzCCWNwqwtWWTr10O118ezIk12hwNxC1VrQ8+pCNug=\n-----END CERTIFICATE-----", "commonName": "C=US,O=Google\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=3e1fa798-0c75-4c1a-bddf-4dfcd5acf064", "sha1Fingerprint": "0502e192d2b9abe562a339192263ad9b3c26198c", "instance": "sql1", "createTime": "2022-05-10T08:40:06.232Z", "expirationTime": "2032-05-07T08:41:06.232Z" }, "instanceType": "CLOUD_SQL_INSTANCE", "project": "gcpdiag-cloudsql1-aaaa", "serviceAccountEmailAddress": "p12340006-4lw5u9@gcp-sa-cloud-sql.iam.gserviceaccount.com", "backendType": "SECOND_GEN", "selfLink": "https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1", "connectionName": "gcpdiag-cloudsql1-aaaa:us-central1:sql1", "name": "sql1", "region": "us-central1", "gceZone": "us-central1-a", "databaseInstalledVersion": "MYSQL_8_0_26", "createTime": "2022-05-10T08:37:30.089Z" } ] } ================================================ FILE: test-data/cloudsql1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "user:testuser@example.com" ], "role": "roles/owner" } ], "etag": "BwXXim1ZMUM=", "version": 1 } ================================================ FILE: test-data/cloudsql1/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": {} } ================================================ FILE: test-data/cloudsql1/json-dumps/project.json ================================================ { "name": "projects/12340006", "parent": "folders/373737373737", "projectId": "gcpdiag-cloudsql1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - cloudsql1", "createTime": "2022-05-10T06:02:40.497Z", "updateTime": "2022-05-10T06:02:42.299Z", "etag": "ud0/Jmo6QENQzBQk9e7x4g==" } ================================================ FILE: test-data/cloudsql1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340006/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340006" }, { "name": "projects/12340006/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340006" }, { "name": "projects/12340006/services/servicenetworking.googleapis.com", "config": { "name": "servicenetworking.googleapis.com", "title": "Service Networking API", "documentation": { "summary": "Provides automatic management of network configurations necessary for certain services." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340006" }, { "name": "projects/12340006/services/sqladmin.googleapis.com", "config": { "name": "sqladmin.googleapis.com", "title": "Cloud SQL Admin API", "documentation": { "summary": "API for Cloud SQL database instance management" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340006" } ] } ================================================ FILE: test-data/cloudsql1/project.tf ================================================ resource "random_string" "project_id" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - cloudsql1" project_id = "gcpdiag-cloudsql1-${random_string.project_id.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "servicenetworking" { project = google_project.project.project_id service = "servicenetworking.googleapis.com" } resource "google_project_service" "sqladmin" { project = google_project.project.project_id service = "sqladmin.googleapis.com" disable_on_destroy = false } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/cloudsql1/sql1.tf ================================================ resource "google_compute_network" "private_network" { project = google_project.project.project_id name = "private-network" auto_create_subnetworks = "false" } resource "google_compute_global_address" "private_ip_address" { project = google_project.project.project_id name = "private-ip-address" purpose = "VPC_PEERING" address_type = "INTERNAL" prefix_length = 20 network = google_compute_network.private_network.id address = "172.17.0.0" depends_on = [google_project_service.compute, google_compute_network.private_network] } resource "google_service_networking_connection" "private_vpc_connection" { network = google_compute_network.private_network.id service = "servicenetworking.googleapis.com" reserved_peering_ranges = [google_compute_global_address.private_ip_address.name] depends_on = [google_project_service.servicenetworking, google_compute_global_address.private_ip_address] } resource "google_sql_database_instance" "sql1" { project = google_project.project.project_id name = "sql1" region = "us-central1" database_version = "MYSQL_8_0" depends_on = [google_project_service.sqladmin, google_service_networking_connection.private_vpc_connection] settings { tier = "db-f1-micro" ip_configuration { ipv4_enabled = false private_network = google_compute_network.private_network.id } } } provider "google-beta" { region = "us-central1" zone = "us-central1-a" } ================================================ FILE: test-data/cloudsql1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/composer1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) ENV2_SA := $(shell terraform output -raw env2_sa) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = us-central1 FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340005 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/compute-regions.json \ json-dumps/services.json \ json-dumps/composer-environments-$(REGION_1).json \ json-dumps/project.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/iam-service-account-policy.json json-dumps/compute-regions.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/composer-environments-$(REGION_1).json: $(CURL) -fsS \ 'https://composer.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/environments' \ | $(SED_SUBST_FAKE) >$@ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-account-policy.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/$(ENV2_SA):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/composer1/README.md ================================================ Create terraform project ``` terraform plan -var="billing_account_id=0123456-ABCDEF-987654" -var="org_id=123456789012" terraform apply -var="billing_account_id=0123456-ABCDEF-987654" -var="org_id=123456789012" ``` Refresh json dumps: ``` make all ``` ================================================ FILE: test-data/composer1/composer-env1.tf ================================================ resource "google_composer_environment" "env1" { name = "env1" region = "us-central1" project = google_project.project.project_id depends_on = [google_project_service.composer] } ================================================ FILE: test-data/composer1/composer-env2.tf ================================================ resource "google_service_account" "env2_sa" { project = google_project.project.project_id account_id = "env2sa" display_name = "Composer Environment 2 Service Account" } resource "google_project_iam_member" "env2_sa" { project = google_project.project.project_id role = "roles/composer.worker" member = "serviceAccount:${google_service_account.env2_sa.email}" } resource "google_composer_environment" "env2" { name = "env2" region = "us-central1" project = google_project.project.project_id config { node_config { service_account = google_service_account.env2_sa.name ip_allocation_policy { use_ip_aliases = true } } private_environment_config { enable_private_endpoint = true } } depends_on = [google_project_service.composer] } ================================================ FILE: test-data/composer1/json-dumps/composer-environments-us-central1.json ================================================ { "environments": [ { "name": "projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2", "config": { "gkeCluster": "projects/gcpdiag-composer1-aaaa/zones/us-central1-c/clusters/us-central1-env2-941355a9-gke", "dagGcsPrefix": "gs://us-central1-env2-941355a9-bucket/dags", "nodeCount": 3, "softwareConfig": { "imageVersion": "composer-1.17.10-airflow-1.10.15", "pythonVersion": "3", "schedulerCount": 1 }, "nodeConfig": { "location": "projects/gcpdiag-composer1-aaaa/zones/us-central1-c", "machineType": "projects/gcpdiag-composer1-aaaa/zones/us-central1-c/machineTypes/n1-standard-1", "network": "projects/gcpdiag-composer1-aaaa/global/networks/default", "diskSizeGb": 100, "oauthScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "serviceAccount": "env2sa@gcpdiag-composer1-aaaa.iam.gserviceaccount.com", "ipAllocationPolicy": { "useIpAliases": true } }, "airflowUri": "https://dbf98c0de9a7bf17dp-tp.appspot.com", "privateEnvironmentConfig": { "enablePrivateEnvironment": true, "privateClusterConfig": { "enablePrivateEndpoint": true, "masterIpv4CidrBlock": "172.16.20.0/23", "masterIpv4ReservedRange": "172.16.20.0/28" }, "webServerIpv4CidrBlock": "172.31.245.0/24", "cloudSqlIpv4CidrBlock": "10.0.0.0/12", "webServerIpv4ReservedRange": "172.31.245.0/29" }, "webServerNetworkAccessControl": { "allowedIpRanges": [ { "value": "0.0.0.0/0", "description": "Allows access from all IPv4 addresses (default value)" }, { "value": "::0/0", "description": "Allows access from all IPv6 addresses (default value)" } ] }, "databaseConfig": { "machineType": "db-n1-standard-2" }, "webServerConfig": { "machineType": "composer-n1-webserver-2" }, "encryptionConfig": {}, "maintenanceWindow": { "startTime": "1970-01-01T00:00:00Z", "endTime": "1970-01-01T04:00:00Z", "recurrence": "FREQ=WEEKLY;BYDAY=FR,SA,SU" }, "workloadsConfig": {} }, "uuid": "64f43466-ae3a-4cf3-b749-da9e9fd7fb89", "state": "RUNNING", "createTime": "2022-02-15T13:43:01.942Z", "updateTime": "2022-02-15T14:08:07.055420Z" }, { "name": "projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1", "config": { "gkeCluster": "projects/gcpdiag-composer1-aaaa/zones/us-central1-c/clusters/us-central1-env1-83babad2-gke", "dagGcsPrefix": "gs://us-central1-env1-83babad2-bucket/dags", "nodeCount": 3, "softwareConfig": { "imageVersion": "composer-1.17.10-airflow-1.10.15", "pythonVersion": "3", "schedulerCount": 1 }, "nodeConfig": { "location": "projects/gcpdiag-composer1-aaaa/zones/us-central1-c", "machineType": "projects/gcpdiag-composer1-aaaa/zones/us-central1-c/machineTypes/n1-standard-1", "network": "projects/gcpdiag-composer1-aaaa/global/networks/default", "diskSizeGb": 100, "oauthScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "serviceAccount": "12340005-compute@developer.gserviceaccount.com", "ipAllocationPolicy": {} }, "airflowUri": "https://h5e4e6d46fe855ee0p-tp.appspot.com", "privateEnvironmentConfig": { "privateClusterConfig": {}, "webServerIpv4CidrBlock": "172.31.245.0/24", "cloudSqlIpv4CidrBlock": "10.0.0.0/12" }, "webServerNetworkAccessControl": { "allowedIpRanges": [ { "value": "0.0.0.0/0", "description": "Allows access from all IPv4 addresses (default value)" }, { "value": "::0/0", "description": "Allows access from all IPv6 addresses (default value)" } ] }, "databaseConfig": { "machineType": "db-n1-standard-2" }, "webServerConfig": { "machineType": "composer-n1-webserver-2" }, "encryptionConfig": {}, "maintenanceWindow": { "startTime": "1970-01-01T00:00:00Z", "endTime": "1970-01-01T04:00:00Z", "recurrence": "FREQ=WEEKLY;BYDAY=FR,SA,SU" }, "workloadsConfig": {} }, "uuid": "f56c0072-c520-46ff-98c7-a2af4c703782", "state": "RUNNING", "createTime": "2022-02-15T13:08:11.626Z", "updateTime": "2022-02-15T13:28:16.349130Z" } ] } ================================================ FILE: test-data/composer1/json-dumps/compute-regions.json ================================================ { "id": "projects/gcpdiag-composer1-aaaa/regions", "items": [ { "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-east1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-east2", "supportsPzs": true, "kind": "compute#region" }, { "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-northeast1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-northeast2", "supportsPzs": false, "kind": "compute#region" }, { "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-northeast3", "supportsPzs": false, "kind": "compute#region" }, { "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-south1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-south2", "supportsPzs": false, "kind": "compute#region" }, { "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-southeast1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-southeast2", "supportsPzs": false, "kind": "compute#region" }, { "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/australia-southeast1", "supportsPzs": true, "kind": "compute#region" }, { "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/australia-southeast2", "supportsPzs": false, "kind": "compute#region" }, { "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-central2", "supportsPzs": false, "kind": "compute#region" }, { "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-north1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west2", "supportsPzs": true, "kind": "compute#region" }, { "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west3", "supportsPzs": true, "kind": "compute#region" }, { "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west4", "supportsPzs": false, "kind": "compute#region" }, { "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west6", "supportsPzs": false, "kind": "compute#region" }, { "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/northamerica-northeast1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/northamerica-northeast2", "supportsPzs": false, "kind": "compute#region" }, { "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/southamerica-east1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/southamerica-west1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 6 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 604 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 3 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 2 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 2 }, { "metric": "INSTANCES", "limit": 6000, "usage": 6 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-central1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-east1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-east4", "supportsPzs": true, "kind": "compute#region" }, { "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-west1", "supportsPzs": false, "kind": "compute#region" }, { "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-west2", "supportsPzs": false, "kind": "compute#region" }, { "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-west3", "supportsPzs": false, "kind": "compute#region" }, { "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-west4", "supportsPzs": false, "kind": "compute#region" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions", "kind": "compute#regionList" } ================================================ FILE: test-data/composer1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12340005@gcp-sa-artifactregistry.iam.gserviceaccount.com" ], "role": "roles/artifactregistry.serviceAgent" }, { "members": [ "serviceAccount:12340005@cloudbuild.gserviceaccount.com" ], "role": "roles/cloudbuild.builds.builder" }, { "members": [ "serviceAccount:service-12340005@gcp-sa-cloudbuild.iam.gserviceaccount.com" ], "role": "roles/cloudbuild.serviceAgent" }, { "members": [ "serviceAccount:service-12340005@cloudcomposer-accounts.iam.gserviceaccount.com" ], "role": "roles/composer.serviceAgent" }, { "members": [ "serviceAccount:env2sa@gcpdiag-composer1-aaaa.iam.gserviceaccount.com" ], "role": "roles/composer.worker" }, { "members": [ "serviceAccount:service-12340005@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-12340005@container-engine-robot.iam.gserviceaccount.com" ], "role": "roles/container.serviceAgent" }, { "members": [ "serviceAccount:service-12340005@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:service-12340005@gcp-sa-ktd-control.iam.gserviceaccount.com" ], "role": "roles/containerthreatdetection.serviceAgent" }, { "members": [ "serviceAccount:12340005-compute@developer.gserviceaccount.com", "serviceAccount:12340005@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "serviceAccount:service-12340005@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" } ], "etag": "BwXYDrZkJbI=", "version": 1 } ================================================ FILE: test-data/composer1/json-dumps/iam-service-account-policy.json ================================================ { "etag": "ACAB" } ================================================ FILE: test-data/composer1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Composer Environment 2 Service Account", "email": "env2sa@gcpdiag-composer1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-composer1-aaaa/serviceAccounts/env2sa@gcpdiag-composer1-0j67y05x.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-composer1-aaaa", "uniqueId": "102376921990513050343" }, { "displayName": "Compute Engine default service account", "email": "12340005-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-composer1-aaaa/serviceAccounts/12340005-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-composer1-aaaa", "uniqueId": "116364707018337704682" } ] } ================================================ FILE: test-data/composer1/json-dumps/logging-entries-1.json ================================================ { "entries": [ ] } ================================================ FILE: test-data/composer1/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.project_id" }, { "key": "resource.location" }, { "key": "resource.cluster_name" } ], "pointDescriptors": [ { "key": "value_utilization_max", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "1" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "gcpdiag-composer1-aaaa" }, { "stringValue": "us-central1" }, { "stringValue": "us-central1-env2-941355a9-gke" } ], "pointData": [ { "values": [ { "doubleValue":0.06922396810093948 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] } ] } ================================================ FILE: test-data/composer1/json-dumps/project.json ================================================ { "name": "projects/12340005", "parent": "organizations/11112222", "projectId": "gcpdiag-composer1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - composer1", "createTime": "2022-02-15T13:06:30.006Z", "updateTime": "2022-02-15T13:06:31.796Z", "etag": "Q7kuUzNEqrwCj/KHaetQyg==" } ================================================ FILE: test-data/composer1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340005/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/cloudresourcemanager.googleapis.com", "config": { "name": "cloudresourcemanager.googleapis.com", "title": "Cloud Resource Manager API", "documentation": { "summary": "Creates, reads, and updates metadata for Google Cloud Platform resource containers." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/composer.googleapis.com", "config": { "name": "composer.googleapis.com", "title": "Cloud Composer API", "documentation": { "summary": "Manages Apache Airflow environments on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/containerthreatdetection.googleapis.com", "config": { "name": "containerthreatdetection.googleapis.com", "title": "Container Threat Detection API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/deploymentmanager.googleapis.com", "config": { "name": "deploymentmanager.googleapis.com", "title": "Cloud Deployment Manager V2 API", "documentation": { "summary": "The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\nresources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" is supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/sqladmin.googleapis.com", "config": { "name": "sqladmin.googleapis.com", "title": "Cloud SQL Admin API", "documentation": { "summary": "API for Cloud SQL database instance management" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" } ] } ================================================ FILE: test-data/composer1/project.tf ================================================ resource "random_string" "project_id" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - composer1" project_id = "gcpdiag-composer1-${random_string.project_id.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id } resource "google_project_service" "composer" { project = google_project.project.project_id service = "composer.googleapis.com" disable_on_destroy = false } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } output "env2_sa" { value = google_service_account.env2_sa.name } ================================================ FILE: test-data/composer1/provider.tf ================================================ provider "google" {} ================================================ FILE: test-data/composer1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/dataflow1/Makefile ================================================ PROJECT_ID := $(shell /google/data/ro/teams/terraform/bin/terraform output project_id) PROJECT_ID_SUFFIX := $(shell terraform output project_id_suffix) PROJECT_NR := $(shell terraform output project_nr) ORG_ID := $(shell terraform output org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION = us-central1 STREAMING_JOB := $(shell terraform output job_id) FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340010 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/services.json \ json-dumps/dataflow-jobs-${REGION}.json \ json-dumps/dataflow-jobs-${REGION}-streaming.json \ json-dumps/log-exclusions.json \ json-dumps/dataflow-jobs-aggregated include ../Makefile.inc json-dumps/dataflow-jobs-${REGION}.json: $(CURL) -fsS \ "https://dataflow.googleapis.com/v1b3/projects/${PROJECT_ID}/locations/${REGION}/jobs" \ | $(SED_SUBST_FAKE) >$@ json-dumps/dataflow-jobs-${REGION}-streaming.json: $(CURL) -fsS \ "https://dataflow.googleapis.com/v1b3/projects/${PROJECT_ID}/locations/${REGION}/jobs/${STREAMING_JOB}" \ | $(SED_SUBST_FAKE) >$@ json-dumps/log-exclusions.json: $(CURL) -fsS \ "https://logging.googleapis.com/v2/projects/${PROJECT_ID}/exclusions" \ | $(SED_SUBST_FAKE) >$@ json-dumps/dataflow-jobs-aggregated.json: $(CURL) -fsS \ "https://dataflow.googleapis.com/v1b3/projects/${PROJECT_ID}/jobs:aggregated" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/dataflow1/bucket.tf ================================================ resource "google_storage_bucket" "dataflow_out" { name = "dataflow_out_${random_string.project_id_suffix.id}" location = "US" force_destroy = true project = google_project.project.project_id } resource "google_storage_bucket" "dataflow_streaming" { name = "dataflow_streaming_${random_string.project_id_suffix.id}" location = "US" force_destroy = true project = google_project.project.project_id } ================================================ FILE: test-data/dataflow1/job.tf ================================================ resource "google_dataflow_job" "wordcount" { project = google_project.project.project_id region = "us-central1" zone = "us-central1-a" name = "wordcount" template_gcs_path = "gs://dataflow-templates-us-central1/latest/Word_Count" temp_gcs_location = "gs://${google_storage_bucket.dataflow_out.name}/temp" parameters = { inputFile = "gs://dataflow-samples/shakespeare/kinglear.txt" output = "gs://${google_storage_bucket.dataflow_out.name}/wordcount/output" } } ================================================ FILE: test-data/dataflow1/json-dumps/dataflow-jobs-aggregated.json ================================================ { "jobs": [ { "id": "2025-07-22_22_34_10-17451985144539182981", "projectId": "gcpdiag-datafusion1-aaaa", "name": "job4", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2025-07-23T05:38:11.317430Z", "createTime": "2025-07-23T05:34:10.924396Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.66.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2025-07-23T05:34:10.924396Z" }, { "id": "2025-07-22_21_52_11-3966210819828600312", "projectId": "gcpdiag-datafusion1-aaaa", "name": "job3", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2025-07-23T04:58:47.825097Z", "createTime": "2025-07-23T04:52:14.529770Z", "location": "southamerica-west1", "jobMetadata": { "sdkVersion": { "version": "2.66.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2025-07-23T04:52:14.529770Z" }, { "id": "2025-07-22_21_51_15-11871078573741836091", "projectId": "gcpdiag-datafusion1-aaaa", "name": "job2", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2025-07-23T04:56:03.680855Z", "createTime": "2025-07-23T04:51:17.831890Z", "location": "europe-west1", "jobMetadata": { "sdkVersion": { "version": "2.66.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2025-07-23T04:51:17.831890Z" }, { "id": "2025-07-22_21_47_07-15366228931864371363", "projectId": "gcpdiag-datafusion1-aaaa", "name": "job1", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2025-07-23T04:50:48.311811Z", "createTime": "2025-07-23T04:47:08.425668Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.66.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2025-07-23T04:47:08.425668Z" } ] } ================================================ FILE: test-data/dataflow1/json-dumps/dataflow-jobs-us-central1-2024-06-19_09_43_07-14927685200167458422.json ================================================ { "id": "2024-06-19_09_43_07-14927685200167458422", "projectId": "gcpdiag-dataflow1-aaaa", "name": "gcs_to_pubsub", "type": "JOB_TYPE_STREAMING", "environment": { "userAgent": { "os.version": "5.15.0-1058-gcp", "legacy.container.version": "2.56.0", "fnapi.environment.major.version": "8", "java.version": "11.0.23", "name": "Apache Beam SDK for Java", "fnapi.container.version": "2.56.0", "legacy.environment.major.version": "8", "java.vendor": "Eclipse Adoptium", "os.arch": "amd64", "container.base_repository": "gcr.io/cloud-dataflow/v1beta3", "os.name": "Linux", "version": "2.56.0" }, "version": { "job_type": "STREAMING", "major": "8" } }, "currentState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.116816Z", "createTime": "2024-06-19T16:43:08.018899Z", "labels": { "goog-dataflow-provided-template-type": "legacy", "goog-dataflow-provided-template-version": "2024-06-11-00_rc00", "goog-dataflow-provided-template-name": "stream_gcs_text_to_cloud_pubsub" }, "location": "us-central1", "stageStates": [ { "executionStageName": "move_stop_computation_step39", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "move_attach_disks_step41", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "topology_move_out_disk_input_step", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "F27", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.254Z" }, { "executionStageName": "init_attach_disk_step36", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "pause_stop_computation_step43", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "setup_resource_global_gce_worker_pool31", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.393Z" }, { "executionStageName": "init_start_computation_step37", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "move_detach_disks_step40", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "move_wait_windmill_setup_step38", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "F26", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.227Z" }, { "executionStageName": "move_start_computation_step42", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "setup_resource_disks_harness33", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.476Z" }, { "executionStageName": "teardown_resource_disks_harness34", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.509Z" }, { "executionStageName": "failure46", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "pause_detach_disk_step44", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "topology_move_in_disk_input_step", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "F29", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.305Z" }, { "executionStageName": "teardown_resource_global_gce_worker_pool32", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.445Z" }, { "executionStageName": "F28", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.278Z" }, { "executionStageName": "F30", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.332Z" }, { "executionStageName": "topology_init_attach_disk_input_step", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "setup_windmill35", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.414Z" }, { "executionStageName": "start47", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.212Z" }, { "executionStageName": "topology_pause_input_step", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "success45", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" } ], "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T16:43:08.018899Z" } ================================================ FILE: test-data/dataflow1/json-dumps/dataflow-jobs-us-central1-streaming.json ================================================ { "id": "2024-06-19_09_43_07-14927685200167458422", "projectId": "gcpdiag-dataflow1-aaaa", "name": "gcs_to_pubsub", "type": "JOB_TYPE_STREAMING", "environment": { "userAgent": { "fnapi.environment.major.version": "8", "fnapi.container.version": "2.56.0", "container.base_repository": "gcr.io/cloud-dataflow/v1beta3", "os.arch": "amd64", "os.name": "Linux", "os.version": "5.15.0-1058-gcp", "java.vendor": "Eclipse Adoptium", "version": "2.56.0", "name": "Apache Beam SDK for Java", "legacy.container.version": "2.56.0", "legacy.environment.major.version": "8", "java.version": "11.0.23" }, "version": { "major": "8", "job_type": "STREAMING" } }, "currentState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.116816Z", "createTime": "2024-06-19T16:43:08.018899Z", "labels": { "goog-dataflow-provided-template-name": "stream_gcs_text_to_cloud_pubsub", "goog-dataflow-provided-template-type": "legacy", "goog-dataflow-provided-template-version": "2024-06-11-00_rc00" }, "location": "us-central1", "stageStates": [ { "executionStageName": "topology_init_attach_disk_input_step", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "success45", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "move_stop_computation_step39", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "setup_resource_disks_harness33", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.476Z" }, { "executionStageName": "init_attach_disk_step36", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "failure46", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "F27", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.254Z" }, { "executionStageName": "topology_move_in_disk_input_step", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "teardown_resource_disks_harness34", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.509Z" }, { "executionStageName": "pause_stop_computation_step43", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "setup_resource_global_gce_worker_pool31", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.393Z" }, { "executionStageName": "teardown_resource_global_gce_worker_pool32", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.445Z" }, { "executionStageName": "topology_move_out_disk_input_step", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "F30", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.332Z" }, { "executionStageName": "F29", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.305Z" }, { "executionStageName": "move_detach_disks_step40", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "init_start_computation_step37", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "F26", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.227Z" }, { "executionStageName": "setup_windmill35", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.414Z" }, { "executionStageName": "move_attach_disks_step41", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "start47", "executionStageState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T16:43:28.212Z" }, { "executionStageName": "topology_pause_input_step", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "F28", "executionStageState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.278Z" }, { "executionStageName": "move_wait_windmill_setup_step38", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "move_start_computation_step42", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" }, { "executionStageName": "pause_detach_disk_step44", "executionStageState": "JOB_STATE_PENDING", "currentStateTime": "2024-06-19T16:43:28.105Z" } ], "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T16:43:08.018899Z" } ================================================ FILE: test-data/dataflow1/json-dumps/dataflow-jobs-us-central1.json ================================================ { "jobs": [ { "id": "2024-06-19_09_43_07-14927685200167458422", "projectId": "gcpdiag-dataflow1-aaaa", "name": "gcs_to_pubsub", "type": "JOB_TYPE_STREAMING", "currentState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:43:28.116816Z", "createTime": "2024-06-19T16:43:08.018899Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T16:43:08.018899Z" }, { "id": "2024-06-19_09_41_43-15216240402532481212", "projectId": "gcpdiag-dataflow1-aaaa", "name": "wordcount", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_RUNNING", "currentStateTime": "2024-06-19T16:42:05.007311Z", "createTime": "2024-06-19T16:41:44.282745Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T16:41:44.282745Z" }, { "id": "2024-06-19_08_10_38-15531843170089278179", "projectId": "gcpdiag-dataflow1-aaaa", "name": "wordcount", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T15:14:14.365221Z", "createTime": "2024-06-19T15:10:38.936010Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T15:10:38.936010Z" }, { "id": "2024-06-19_07_59_26-766567214503751731", "projectId": "gcpdiag-dataflow1-aaaa", "name": "wordcount", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T15:03:16.392683Z", "createTime": "2024-06-19T14:59:27.276728Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T14:59:27.276728Z" }, { "id": "2024-06-19_07_51_58-13902424742190346031", "projectId": "gcpdiag-dataflow1-aaaa", "name": "wordcount", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T14:55:38.822058Z", "createTime": "2024-06-19T14:51:58.893292Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T14:51:58.893292Z" }, { "id": "2024-06-19_07_42_27-12921783906907618720", "projectId": "gcpdiag-dataflow1-aaaa", "name": "wordcount", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T14:45:58.411614Z", "createTime": "2024-06-19T14:42:28.343181Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T14:42:28.343181Z" }, { "id": "2024-06-19_07_37_46-7047804751824995263", "projectId": "gcpdiag-dataflow1-aaaa", "name": "wordcount", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T14:41:25.220041Z", "createTime": "2024-06-19T14:37:46.585152Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T14:37:46.585152Z" }, { "id": "2024-06-19_07_33_03-9867569406752004768", "projectId": "gcpdiag-dataflow1-aaaa", "name": "wordcount", "type": "JOB_TYPE_BATCH", "currentState": "JOB_STATE_DONE", "currentStateTime": "2024-06-19T14:37:09.875218Z", "createTime": "2024-06-19T14:33:04.923545Z", "location": "us-central1", "jobMetadata": { "sdkVersion": { "version": "2.56.0", "versionDisplayName": "Apache Beam SDK for Java", "sdkSupportStatus": "SUPPORTED" } }, "startTime": "2024-06-19T14:33:04.923545Z" } ] } ================================================ FILE: test-data/dataflow1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12340005@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-12340005@dataproc-accounts.iam.gserviceaccount.com" ], "role": "roles/dataproc.serviceAgent" }, { "members": [ "serviceAccount:saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com" ], "role": "roles/dataproc.worker" }, { "members": [ "serviceAccount:12340005@cloudservices.gserviceaccount.com", "serviceAccount:12340005-compute@developer.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" } ], "etag": "BwXpl3K8tAs=", "version": 1 } ================================================ FILE: test-data/dataflow1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Dataproc VM Service account with Dataproc Worker role", "email": "saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-dataproc1-aaaa/serviceAccounts/saworker@gcpdiag-dataproc1-kn5j5rip.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-dataproc1-aaaa", "uniqueId": "105281637601268155015" }, { "displayName": "Compute Engine default service account", "email": "12340005-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-dataproc1-aaaa/serviceAccounts/12340005-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-dataproc1-aaaa", "uniqueId": "117777538759795875305" } ] } ================================================ FILE: test-data/dataflow1/json-dumps/log-exclusions.json ================================================ {} ================================================ FILE: test-data/dataflow1/json-dumps/logging-entries-1.json ================================================ { "entries": [ ] } ================================================ FILE: test-data/dataflow1/json-dumps/project.json ================================================ { "name": "projects/12340010", "parent": "folders/373737373737", "projectId": "gcpdiag-datafusion1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - datafusion1", "createTime": "2022-08-22T00:30:38.739Z", "updateTime": "2022-08-22T00:30:40.979Z", "etag": "GR9oFf6Dr8RG0RV6c2fhYg==" } ================================================ FILE: test-data/dataflow1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340010/services/cloudresourcemanager.googleapis.com", "config": { "name": "cloudresourcemanager.googleapis.com", "title": "Cloud Resource Manager API", "documentation": { "summary": "Creates, reads, and updates metadata for Google Cloud Platform resource containers." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/dataflow.googleapis.com", "config": { "name": "dataflow.googleapis.com", "title": "Dataflow API", "documentation": { "summary": "Manages Google Cloud Dataflow projects on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataflow.googleapis.com/Project", "displayName": "Dataflow Project", "description": "A project level monitored resource for Dataflow.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The location where Dataflow jobs are running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataflow.googleapis.com/Project", "metrics": [ "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/exceeded", "dataflow.googleapis.com/region_endpoint_shuffle_slot" ] }, { "monitoredResource": "dataflow.googleapis.com/Project", "metrics": [ "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/limit", "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/deploymentmanager.googleapis.com", "config": { "name": "deploymentmanager.googleapis.com", "title": "Cloud Deployment Manager V2 API", "documentation": { "summary": "The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\nresources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" } ] } ================================================ FILE: test-data/dataflow1/project.tf ================================================ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - dataflow1" project_id = "gcpdiag-dataflow1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null # billing_account = var.billing_account_id labels = { gcpdiag : "test" } lifecycle { ignore_changes = all } } resource "google_project_service" "dataflow" { project = google_project.project.project_id service = "dataflow.googleapis.com" } resource "google_project_service" "iam" { project = google_project.project.project_id service = "iam.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } output "job_id" { value = google_dataflow_job.gcs_to_pubsub_dataflow_streaming.id } ================================================ FILE: test-data/dataflow1/streaming_job.tf ================================================ # https://cloud.google.com/dataflow/docs/guides/templates/provided-templates # https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates resource "google_dataflow_job" "gcs_to_pubsub_dataflow_streaming" { project = google_project.project.project_id region = "us-central1" zone = "us-central1-a" name = "gcs_to_pubsub" template_gcs_path = "gs://dataflow-templates-europe-north1/latest/Stream_GCS_Text_to_Cloud_PubSub" temp_gcs_location = "gs://${google_storage_bucket.dataflow_streaming.name}/gcs_to_pubsub/temp" parameters = { inputFilePattern = "${google_storage_bucket.dataflow_streaming.url}/input/*.json" outputTopic = google_pubsub_topic.topic.id } transform_name_mapping = { name = "test_job" env = "test" } on_delete = "cancel" } resource "google_pubsub_topic" "topic" { name = "dataflow-job-streaming" project = google_project.project.project_id } # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/dataflow_job ================================================ FILE: test-data/dataflow1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/datafusion1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = us-central1 ZONE_1 = us-central1-b ZONE_2 = us-central1-a FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340010 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/datafusion-instances.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/iam-service-account-policy.json \ json-dumps/compute-network-default.json \ json-dumps/compute-subnetworks-europe-west4.json \ json-dumps/compute-subnetworks-us-central1.json \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-subnetworks-aggregated.json \ include ../Makefile.inc json-dumps/datafusion-instances.json: $(CURL) -fsS \ 'https://datafusion.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/instances' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-account-policy.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts/$(SERVICE_ACCOUNT):getIamPolicy' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/datafusion1/README.md ================================================ Create terraform project ``` terraform plan -var="billing_account_id=0123456-ABCDEF-987654" -var="org_id=123456789012" terraform apply -var="billing_account_id=0123456-ABCDEF-987654" -var="org_id=123456789012" ``` Refresh json dumps: ``` make all ``` ================================================ FILE: test-data/datafusion1/datafusion.tf ================================================ /** * Copyright 2021 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. */ resource "google_data_fusion_instance" "datafusion1" { # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/data_fusion_instance project = google_project.project.project_id name = "datafusion1" description = "gcpdiag Test Data Fusion instance" region = "us-central1" type = "BASIC" enable_stackdriver_logging = true enable_stackdriver_monitoring = true labels = { gcpdiag = "test" } private_instance = true network_config { network = "default" ip_allocation = "10.89.48.0/22" } } ================================================ FILE: test-data/datafusion1/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "6309553779892444789", "creationTimestamp": "2022-09-09T17:55:54.139-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "7541653105385299573", "creationTimestamp": "2022-09-09T17:55:54.259-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "647222287308054133", "creationTimestamp": "2022-09-09T17:55:54.079-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "6949887662324342389", "creationTimestamp": "2022-09-09T17:55:54.199-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/firewalls/default-allow-rdp" } ], "firewallPolicys": [ { "name": "902824820698", "type": "HIERARCHY", "shortName": "default-firewall-policy", "displayName": "default-firewall-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 0, "match": { "srcIpRanges": [ "34.82.66.0/24", "34.82.90.0/24", "34.82.98.0/24", "34.82.160.0/24", "34.82.166.128/25" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 1, "match": { "destIpRanges": [ "34.83.160.25/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2, "match": { "destIpRanges": [ "34.66.22.47/32", "34.66.157.124/32", "34.66.164.57/32", "34.66.184.118/32", "34.66.236.234/32", "34.73.86.171/32", "34.73.183.215/32", "34.76.42.179/32", "34.76.71.13/32", "34.76.143.192/32", "34.76.244.236/32", "35.184.49.127/32", "35.184.70.255/32", "35.184.144.234/32", "35.184.228.49/32", "35.185.65.36/32", "35.185.252.238/32", "35.186.160.196/32", "35.186.167.183/32", "35.186.182.184/32", "35.187.2.178/32", "35.187.82.234/32", "35.187.121.21/32", "35.187.169.157/32", "35.187.189.105/32", "35.188.28.255/32", "35.188.58.237/32", "35.188.97.47/32", "35.188.225.200/32", "35.188.244.131/32", "35.189.66.48/32", "35.189.85.77/32", "35.189.87.27/32", "35.189.87.89/32", "35.189.88.203/32", "35.189.93.96/32", "35.189.99.57/32", "35.189.109.1/32", "35.189.114.89/32", "35.189.228.0/32", "35.189.236.145/32", "35.190.139.214/32", "35.190.154.170/32", "35.190.196.20/32", "35.192.2.32/32", "35.192.62.107/32", "35.192.160.155/32", "35.192.233.245/32", "35.192.235.233/32", "35.193.56.224/32", "35.193.76.157/32", "35.193.123.0/32", "35.193.195.38/32", "35.193.200.222/32", "35.193.229.109/32", "35.193.242.255/32", "35.194.66.217/32", "35.194.70.28/32", "35.195.3.83/32", "35.195.53.78/32", "35.195.68.98/32", "35.195.101.29/32", "35.195.113.177/32", "35.195.114.253/32", "35.195.123.113/32", "35.195.140.251/32", "35.195.156.23/32", "35.195.206.55/32", "35.196.5.130/32", "35.196.20.59/32", "35.196.89.212/32", "35.196.115.11/32", "35.196.138.125/32", "35.196.140.152/32", "35.196.217.248/32", "35.196.220.144/32", "35.197.30.80/32", "35.197.38.28/32", "35.197.50.103/32", "35.197.53.127/32", "35.197.55.215/32", "35.197.56.191/32", "35.197.65.24/32", "35.197.75.108/32", "35.197.85.13/32", "35.197.107.117/32", "35.197.108.157/32", "35.197.112.50/32", "35.197.115.114/32", "35.197.125.130/32", "35.197.192.22/32", "35.197.205.253/32", "35.197.210.140/32", "35.197.226.207/32", "35.197.233.133/32", "35.197.246.39/32", "35.197.252.73/32", "35.197.252.248/32", "35.197.254.244/32", "35.198.78.35/32", "35.198.79.98/32", "35.198.84.172/32", "35.198.106.28/32", "35.198.140.217/32", "35.198.158.161/32", "35.198.159.26/32", "35.199.12.20/32", "35.199.27.54/32", "35.199.39.165/32", "35.199.40.52/32", "35.199.54.197/32", "35.199.56.100/32", "35.199.58.90/32", "35.199.154.123/32", "35.199.162.95/32", "35.199.162.137/32", "35.199.175.152/32", "35.202.32.145/32", "35.202.62.128/32", "35.202.98.132/32", "35.202.118.10/32", "35.202.240.183/32", "35.203.142.250/32", "35.203.145.190/32", "35.203.151.233/32", "35.203.155.169/32", "35.203.161.173/32", "35.203.175.233/32", "35.203.184.97/32", "35.203.191.135/32", "35.204.1.221/32", "35.204.12.60/32", "35.204.14.12/32", "35.204.15.55/32", "35.204.15.122/32", "35.204.24.135/32", "35.204.37.76/32", "35.204.46.52/32", "35.204.50.90/32", "35.204.52.86/32", "35.204.60.99/32", "35.204.66.9/32", "35.204.66.56/32", "35.204.74.72/32", "35.204.78.201/32", "35.204.88.26/32", "35.204.98.108/32", "35.204.105.22/32", "35.204.108.151/32", "35.204.115.3/32", "35.204.119.162/32", "35.204.122.243/32", "35.204.123.133/32", "35.204.126.58/32", "35.204.126.80/32", "35.204.129.200/32", "35.204.130.59/32", "35.204.131.109/32", "35.204.141.187/32", "35.204.142.195/32", "35.204.152.168/32", "35.204.162.183/32", "35.204.167.122/32", "35.204.169.211/32", "35.204.172.80/32", "35.204.178.217/32", "35.204.179.111/32", "35.204.190.183/32", "35.204.195.27/32", "35.204.195.49/32", "35.204.196.11/32", "35.204.201.70/32", "35.204.203.109/32", "35.204.207.219/32", "35.204.208.228/32", "35.204.215.87/32", "35.204.217.46/32", "35.204.223.176/32", "35.204.225.30/32", "35.204.225.143/32", "35.204.231.201/32", "35.204.241.10/32", "35.204.251.54/32", "35.204.255.0/32", "35.205.72.232/32", "35.205.138.68/32", "35.205.159.40/32", "35.205.227.167/32", "35.205.228.216/32", "35.221.0.61/32", "35.221.3.121/32", "35.221.3.125/32", "35.221.5.200/32", "35.221.6.218/32", "35.221.13.23/32", "35.221.13.133/32", "35.221.15.163/32", "35.221.16.189/32", "35.221.23.24/32", "35.221.24.229/32", "35.221.24.236/32", "35.221.28.149/32", "35.221.32.150/32", "35.221.32.171/32", "35.221.48.160/32", "35.221.51.129/32", "35.221.55.211/32", "35.221.57.195/32", "35.222.15.64/32", "35.222.245.253/32", "35.224.62.254/32", "35.224.106.23/32", "35.224.115.137/32", "35.224.231.238/32", "35.225.8.27/32", "35.225.39.39/32", "35.225.49.103/32", "35.225.181.33/32", "35.225.226.221/32", "35.226.0.100/32", "35.226.37.22/32", "35.226.94.146/32", "35.226.134.67/32", "35.226.227.112/32", "35.227.24.50/32", "35.227.63.36/32", "35.227.148.154/32", "35.227.164.46/32", "35.227.166.150/32", "35.227.169.20/32", "35.227.185.153/32", "35.228.12.151/32", "35.228.23.19/32", "35.228.24.225/32", "35.228.24.253/32", "35.228.43.115/32", "35.228.46.55/32", "35.228.50.150/32", "35.228.61.168/32", "35.228.62.248/32", "35.228.73.69/32", "35.228.126.203/32", "35.228.133.241/32", "35.228.136.253/32", "35.228.141.80/32", "35.228.151.221/32", "35.228.153.106/32", "35.228.153.173/32", "35.228.165.20/32", "35.228.182.144/32", "35.228.194.236/32", "35.228.207.201/32", "35.228.211.51/32", "35.228.225.15/32", "35.228.240.231/32", "35.228.241.74/32", "35.228.243.184/32", "35.228.247.232/32", "35.228.248.131/32", "35.228.248.202/32", "35.229.32.120/32", "35.229.40.166/32", "35.229.98.55/32", "35.229.121.90/32", "35.230.1.88/32", "35.230.9.24/32", "35.230.25.200/32", "35.230.49.71/32", "35.230.81.240/32", "35.230.85.180/32", "35.230.108.26/32", "35.230.119.89/32", "35.230.125.171/32", "35.230.130.62/32", "35.230.133.130/32", "35.230.136.123/32", "35.230.136.172/32", "35.230.137.112/32", "35.230.138.244/32", "35.230.144.1/32", "35.230.149.124/32", "35.230.150.81/32", "35.230.150.240/32", "35.230.154.90/32", "35.230.174.232/32", "35.230.177.25/32", "35.230.177.73/32", "35.230.182.231/32", "35.230.189.18/32", "35.231.27.146/32", "35.231.37.13/32", "35.231.76.215/32", "35.231.79.129/32", "35.231.92.50/32", "35.231.193.144/32", "35.231.200.66/32", "35.231.205.62/32", "35.231.250.82/32", "35.232.45.232/32", "35.232.94.168/32", "35.232.103.119/32", "35.232.127.101/32", "35.232.139.151/32", "35.232.180.7/32", "35.233.28.18/32", "35.233.40.72/32", "35.233.72.242/32", "35.233.89.166/32", "35.233.99.60/32", "35.233.123.101/32", "35.233.131.47/32", "35.233.132.228/32", "35.233.135.75/32", "35.233.136.180/32", "35.233.139.203/32", "35.233.139.255/32", "35.233.141.127/32", "35.233.146.241/32", "35.233.152.253/32", "35.233.155.27/32", "35.233.159.73/32", "35.233.160.114/32", "35.233.170.137/32", "35.233.177.225/32", "35.233.181.13/32", "35.233.209.158/32", "35.233.211.146/32", "35.233.215.174/32", "35.233.230.10/32", "35.233.237.249/32", "35.233.240.97/32", "35.233.242.76/32", "35.233.243.235/32", "35.233.248.120/32", "35.233.251.200/32", "35.234.74.152/32", "35.234.76.60/32", "35.234.82.93/32", "35.234.97.50/32", "35.234.101.43/32", "35.234.113.47/32", "35.234.124.92/32", "35.234.131.84/32", "35.234.133.222/32", "35.234.141.85/32", "35.234.145.128/32", "35.234.149.213/32", "35.234.150.44/32", "35.234.154.126/32", "35.234.156.114/32", "35.235.66.156/32", "35.235.67.142/32", "35.235.70.49/32", "35.235.77.169/32", "35.235.78.149/32", "35.235.79.199/32", "35.235.82.180/32", "35.235.87.249/32", "35.235.91.184/32", "35.235.92.0/32", "35.235.93.225/32", "35.235.96.28/32", "35.235.100.190/32", "35.235.103.216/32", "35.235.109.42/32", "35.235.110.23/32", "35.235.111.166/32", "35.235.114.124/32", "35.235.114.133/32", "35.235.115.36/32", "35.235.119.204/32", "35.235.120.50/32", "35.235.122.190/32", "35.235.123.217/32", "35.235.124.32/32", "35.235.127.151/32", "35.236.3.134/32", "35.236.6.28/32", "35.236.8.4/32", "35.236.9.102/32", "35.236.10.36/32", "35.236.11.136/32", "35.236.13.104/32", "35.236.16.239/32", "35.236.17.90/32", "35.236.18.17/32", "35.236.23.120/32", "35.236.23.130/32", "35.236.24.148/32", "35.236.27.126/32", "35.236.30.92/32", "35.236.32.83/32", "35.236.41.7/32", "35.236.45.102/32", "35.236.48.119/32", "35.236.48.252/32", "35.236.49.204/32", "35.236.50.63/32", "35.236.50.98/32", "35.236.52.137/32", "35.236.52.183/32", "35.236.54.197/32", "35.236.54.236/32", "35.236.54.249/32", "35.236.66.213/32", "35.236.68.82/32", "35.236.69.183/32", "35.236.72.182/32", "35.236.76.220/32", "35.236.77.63/32", "35.236.77.180/32", "35.236.80.100/32", "35.236.82.58/32", "35.236.83.60/32", "35.236.84.168/32", "35.236.86.111/32", "35.236.87.95/32", "35.236.90.57/32", "35.236.94.222/32", "35.236.97.24/32", "35.236.100.13/32", "35.236.103.215/32", "35.236.107.110/32", "35.236.109.101/32", "35.236.110.188/32", "35.236.111.104/32", "35.236.113.26/32", "35.236.114.139/32", "35.236.116.189/32", "35.236.118.35/32", "35.236.120.14/32", "35.236.123.127/32", "35.236.124.70/32", "35.236.125.16/32", "35.236.126.78/32", "35.236.194.140/32", "35.236.196.78/32", "35.236.204.22/32", "35.236.207.204/32", "35.236.209.10/32", "35.236.219.57/32", "35.236.225.160/32", "35.236.226.16/32", "35.236.228.33/32", "35.236.228.41/32", "35.236.241.145/32", "35.236.242.169/32", "35.237.6.119/32", "35.237.16.252/32", "35.237.32.116/32", "35.237.33.255/32", "35.237.61.35/32", "35.237.129.145/32", "35.237.134.39/32", "35.237.182.230/32", "35.237.209.128/32", "35.237.210.45/32", "35.237.222.50/32", "35.237.235.241/32", "35.237.241.81/32", "35.237.241.194/32", "35.237.245.143/32", "35.237.248.171/32", "35.239.35.153/32", "35.239.51.8/32", "35.239.54.20/32", "35.239.68.63/32", "35.240.58.39/32", "35.240.104.231/32", "35.241.144.57/32", "35.241.145.54/32", "35.241.197.193/32", "35.241.216.166/32", "35.241.229.156/32", "35.241.233.190/32", "35.242.129.249/32", "35.242.129.253/32", "35.242.138.94/32", "35.242.140.69/32", "35.242.142.106/32", "35.242.152.55/32", "35.242.154.29/32", "35.242.154.92/32", "35.242.158.36/32", "35.242.164.105/32", "35.242.166.56/32", "35.242.170.95/32", "35.242.173.23/32", "35.242.175.90/32", "35.242.175.97/32", "35.242.180.151/32", "35.242.181.42/32", "35.242.185.45/32", "35.242.204.141/32", "35.242.205.212/32", "35.242.207.188/32", "35.242.214.46/32", "35.242.217.158/32", "35.242.241.237/32", "35.242.245.200/32", "35.242.248.79/32", "35.242.254.63/32", "35.243.170.35/32", "35.243.182.120/32", "35.243.196.214/32", "35.243.220.101/32", "35.245.1.43/32", "35.245.9.122/32", "35.245.22.62/32", "35.245.24.132/32", "35.245.27.85/32", "35.245.30.90/32", "35.245.34.81/32", "35.245.42.72/32", "35.245.45.3/32", "35.245.57.50/32", "35.245.75.145/32", "35.245.78.59/32", "35.245.88.198/32", "35.245.93.125/32", "35.245.96.171/32", "35.245.98.28/32", "35.245.110.144/32", "35.245.120.13/32", "35.245.145.56/32", "35.245.159.53/32", "35.245.170.193/32", "35.245.174.162/32", "35.245.189.22/32", "35.245.216.119/32", "35.245.237.81/32", "35.245.246.95/32", "35.245.247.140/32", "35.245.248.36/32", "35.246.2.43/32", "35.246.4.121/32", "35.246.7.114/32", "35.246.10.143/32", "35.246.10.171/32", "35.246.37.189/32", "35.246.42.142/32", "35.246.43.190/32", "35.246.48.237/32", "35.246.49.124/32", "35.246.52.251/32", "35.246.54.37/32", "35.246.54.181/32", "35.246.63.228/32", "35.246.66.175/32", "35.246.68.114/32", "35.246.70.66/32", "35.246.71.83/32", "35.246.73.137/32", "35.246.73.145/32", "35.246.75.188/32", "35.246.77.251/32", "35.246.85.156/32", "35.246.87.183/32", "35.246.90.190/32", "35.246.94.110/32", "35.246.97.150/32", "35.246.105.99/32", "35.246.111.223/32", "35.247.1.109/32", "35.247.43.108/32", "35.247.43.209/32", "35.247.50.154/32", "35.247.65.167/32", "35.247.118.218/32", "104.154.113.115/32", "104.154.208.253/32", "104.154.209.62/32", "104.155.18.24/32", "104.155.21.175/32", "104.155.33.97/32", "104.155.105.38/32", "104.155.111.169/32", "104.155.121.201/32", "104.155.143.151/32", "104.196.4.14/32", "104.196.46.139/32", "104.196.49.118/32", "104.196.100.39/32", "104.196.171.139/32", "104.196.231.87/32", "104.196.241.37/32", "104.196.244.23/32", "104.196.246.50/32", "104.197.115.25/32", "104.197.119.104/32", "104.197.181.96/32", "104.197.193.37/32", "104.197.239.95/32", "104.198.14.68/32", "104.198.99.186/32", "104.198.179.193/32", "104.198.223.59/32", "104.198.228.146/32", "104.198.255.246/32", "104.199.4.115/32", "146.148.12.186/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 307, "match": { "srcIpRanges": [ "99.250.130.235" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "allow", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 480, "match": { "srcIpRanges": [ "201.110.0.0/16" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 600, "match": { "srcIpRanges": [ "35.235.240.0/20" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "22", "3389" ] } ] }, "action": "allow", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 601, "match": { "srcIpRanges": [ "35.191.0.0/16", "130.211.0.0/22", "209.85.152.0/22", "209.85.204.0/22", "169.254.169.254", "108.170.220.0/23" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 602, "match": { "srcIpRanges": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 603, "match": { "srcIpRanges": [ "35.199.192.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "53" ] }, { "ipProtocol": "udp", "ports": [ "53" ] } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 604, "match": { "srcIpRanges": [ "107.178.230.64/26", "35.199.224.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "667" ] }, { "ipProtocol": "udp", "ports": [ "665-666" ] }, { "ipProtocol": "icmp" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483645, "match": { "srcIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" } ] } ] } ================================================ FILE: test-data/datafusion1/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "6108781384702516881", "creationTimestamp": "2022-09-09T17:55:26.430-07:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/6108781384702516881", "autoCreateSubnetworks": true, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west3/subnetworks/default" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/datafusion1/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-datafusion1-aaaa/aggregated/subnetworks", "items": { "regions/asia-east1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.985-08:00", "fingerprint": "UIxmIBDKcHM=", "gatewayAddress": "10.140.0.1", "id": "3554300412316967422", "ipCidrRange": "10.140.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.951-08:00", "fingerprint": "C42zHzfLj4Q=", "gatewayAddress": "10.170.0.1", "id": "5234306127464587775", "ipCidrRange": "10.170.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:15.870-08:00", "fingerprint": "YMaJ92Slock=", "gatewayAddress": "10.146.0.1", "id": "2436880755191538144", "ipCidrRange": "10.146.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.828-08:00", "fingerprint": "A932OYYtMwg=", "gatewayAddress": "10.174.0.1", "id": "3941435767807369727", "ipCidrRange": "10.174.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast3": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.966-08:00", "fingerprint": "PWN48R8SZds=", "gatewayAddress": "10.178.0.1", "id": "2901987561153847807", "ipCidrRange": "10.178.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.167-08:00", "fingerprint": "uWKtkLiouX8=", "gatewayAddress": "10.160.0.1", "id": "580777193314804222", "ipCidrRange": "10.160.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.120-08:00", "fingerprint": "5EEsJtTci4E=", "gatewayAddress": "10.190.0.1", "id": "6176295745145889278", "ipCidrRange": "10.190.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.883-08:00", "fingerprint": "mkoVDvnnqsU=", "gatewayAddress": "10.148.0.1", "id": "8697845300593517055", "ipCidrRange": "10.148.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.923-08:00", "fingerprint": "ZGru5uwSu3M=", "gatewayAddress": "10.184.0.1", "id": "2547807532675326463", "ipCidrRange": "10.184.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.991-08:00", "fingerprint": "1dxOPdNKE5c=", "gatewayAddress": "10.152.0.1", "id": "5860266871775650303", "ipCidrRange": "10.152.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.958-08:00", "fingerprint": "5Ok7m17FtOw=", "gatewayAddress": "10.192.0.1", "id": "1103279219211592191", "ipCidrRange": "10.192.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-central2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.739-08:00", "fingerprint": "47-ceOVcrDU=", "gatewayAddress": "10.186.0.1", "id": "297360852731650558", "ipCidrRange": "10.186.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.642-08:00", "fingerprint": "qYfAq8zCcL0=", "gatewayAddress": "10.166.0.1", "id": "5472143407519195647", "ipCidrRange": "10.166.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-north1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-southwest1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.688-08:00", "fingerprint": "uSpWExLsC00=", "gatewayAddress": "10.204.0.1", "id": "8792979977251152382", "ipCidrRange": "10.204.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-southwest1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:15.916-08:00", "fingerprint": "A0gpQMJuUOw=", "gatewayAddress": "10.132.0.1", "id": "1679755935908454880", "ipCidrRange": "10.132.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.347-08:00", "fingerprint": "JW0ii1T1tZI=", "gatewayAddress": "10.154.0.1", "id": "2198868661378048511", "ipCidrRange": "10.154.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west3": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.463-08:00", "fingerprint": "p8P8kReXUq8=", "gatewayAddress": "10.156.0.1", "id": "6946174229296275967", "ipCidrRange": "10.156.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west4": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.562-08:00", "fingerprint": "uu4wqHFsaWo=", "gatewayAddress": "10.164.0.1", "id": "2989708711941726718", "ipCidrRange": "10.164.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west6": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.755-08:00", "fingerprint": "gRlFw6GPUyI=", "gatewayAddress": "10.172.0.1", "id": "8741485097488572927", "ipCidrRange": "10.172.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west6/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west8": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.668-08:00", "fingerprint": "5iN1Yf4gl0E=", "gatewayAddress": "10.198.0.1", "id": "682099749614871038", "ipCidrRange": "10.198.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west9": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.551-08:00", "fingerprint": "4N7yZP0o7b8=", "gatewayAddress": "10.200.0.1", "id": "5749714911792816638", "ipCidrRange": "10.200.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west9/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-west1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.092-08:00", "fingerprint": "lJY2KLYo9go=", "gatewayAddress": "10.208.0.1", "id": "191962033165263358", "ipCidrRange": "10.208.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/me-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.065-08:00", "fingerprint": "M5anJRIOlcQ=", "gatewayAddress": "10.162.0.1", "id": "3668864597603738110", "ipCidrRange": "10.162.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.890-08:00", "fingerprint": "GJla43qJ78g=", "gatewayAddress": "10.188.0.1", "id": "72283392232481279", "ipCidrRange": "10.188.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-east1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:15.972-08:00", "fingerprint": "jC4c917UM5I=", "gatewayAddress": "10.158.0.1", "id": "2484548578575213024", "ipCidrRange": "10.158.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-west1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.999-08:00", "fingerprint": "ewH6dhEJmVs=", "gatewayAddress": "10.194.0.1", "id": "7521484591789335039", "ipCidrRange": "10.194.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:15.674-08:00", "fingerprint": "eb-vO3jKaYQ=", "gatewayAddress": "10.128.0.1", "id": "1942447882467369440", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.930-08:00", "fingerprint": "9anWMHKuPVI=", "gatewayAddress": "10.142.0.1", "id": "8554359952291750399", "ipCidrRange": "10.142.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east4": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:15.779-08:00", "fingerprint": "cVlKGwsFjfo=", "gatewayAddress": "10.150.0.1", "id": "5751599680881254880", "ipCidrRange": "10.150.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east5": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.904-08:00", "fingerprint": "6dSUAEtRJg0=", "gatewayAddress": "10.202.0.1", "id": "5068731758064525823", "ipCidrRange": "10.202.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east5/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-south1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.871-08:00", "fingerprint": "1e9Oc9lTWo0=", "gatewayAddress": "10.206.0.1", "id": "3397158463878291967", "ipCidrRange": "10.206.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west1": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:15.886-08:00", "fingerprint": "TU4rTtsp6QU=", "gatewayAddress": "10.138.0.1", "id": "871923470008410592", "ipCidrRange": "10.138.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west2": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.228-08:00", "fingerprint": "1mdf4p1jjF4=", "gatewayAddress": "10.168.0.1", "id": "4810812087107150334", "ipCidrRange": "10.168.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west3": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:16.932-08:00", "fingerprint": "AYNkvHJU9JY=", "gatewayAddress": "10.180.0.1", "id": "5850991546302554623", "ipCidrRange": "10.180.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west4": { "subnetworks": [ { "creationTimestamp": "2022-11-25T07:28:17.073-08:00", "fingerprint": "PZgA2lwEJ0w=", "gatewayAddress": "10.182.0.1", "id": "7734757003962966526", "ipCidrRange": "10.182.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/aggregated/subnetworks" } ================================================ FILE: test-data/datafusion1/json-dumps/compute-subnetworks-europe-west4.json ================================================ { "kind": "compute#subnetworkList", "id": "projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks", "items": [ { "kind": "compute#subnetwork", "id": "7558389635160104551", "creationTimestamp": "2022-09-09T17:55:36.770-07:00", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "ipCidrRange": "10.164.0.0/20", "gatewayAddress": "10.164.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks/default", "privateIpGoogleAccess": false, "fingerprint": "mCmeH1kUbwA=", "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "stackType": "IPV4_ONLY" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks" } ================================================ FILE: test-data/datafusion1/json-dumps/compute-subnetworks-us-central1.json ================================================ { "kind": "compute#subnetworkList", "id": "projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks", "items": [ { "kind": "compute#subnetwork", "id": "1229138953747455592", "creationTimestamp": "2022-09-09T17:55:35.900-07:00", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default", "ipCidrRange": "10.128.0.0/20", "gatewayAddress": "10.128.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks/default", "privateIpGoogleAccess": false, "fingerprint": "G6chyEnHoHE=", "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "stackType": "IPV4_ONLY" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks" } ================================================ FILE: test-data/datafusion1/json-dumps/datafusion-default-application-pipeline1-preferences.json ================================================ { "system.profile.properties.imageVersion": "2.2" } ================================================ FILE: test-data/datafusion1/json-dumps/datafusion-default-applications.json ================================================ [ { "type": "App", "name": "pipeline1", "version": "0ced9d03-6aad-11ef-bb93-4ee099d66111", "description": "Data Pipeline Application", "artifact": { "name": "cdap-data-pipeline", "version": "6.10.1", "scope": "SYSTEM" }, "change": { "author": "cdap", "creationTimeMillis": 1725447695199, "latest": true } } ] ================================================ FILE: test-data/datafusion1/json-dumps/datafusion-default-namespace-preferences.json ================================================ { "system.profile.properties.imageVersion": "2.1" } ================================================ FILE: test-data/datafusion1/json-dumps/datafusion-default-user-compute-profile.json ================================================ [ { "name": "namespace_profile", "label": "namespace_profile", "description": "namespace_profile", "scope": "USER", "status": "ENABLED", "provisioner": { "name": "gcp-dataproc", "properties": [ { "name": "accountKey", "value": "", "isEditable": true }, { "name": "autoScalingPolicy", "value": "projects/gcpdiag-dataproc1-aaaa/regions/us-central1/autoscalingPolicies/CDF_AUTOSCALING_POLICY_V1", "isEditable": true }, { "name": "region", "value": "us-east1", "isEditable": true }, { "name": "zone", "value": "", "isEditable": true }, { "name": "network", "value": "default", "isEditable": true }, { "name": "networkHostProjectId", "value": "", "isEditable": true }, { "name": "subnet", "value": "", "isEditable": true }, { "name": "serviceAccount", "value": "", "isEditable": true }, { "name": "masterNumNodes", "value": "1", "isEditable": true }, { "name": "masterMachineType", "value": "e2", "isEditable": true }, { "name": "masterCPUs", "value": "2", "isEditable": true }, { "name": "masterMemoryMB", "value": "8192", "isEditable": true }, { "name": "masterDiskGB", "value": "1000", "isEditable": true }, { "name": "masterDiskType", "value": "pd-standard", "isEditable": true }, { "name": "workerMachineType", "value": "e2", "isEditable": true }, { "name": "workerCPUs", "value": "2", "isEditable": true }, { "name": "workerMemoryMB", "value": "8192", "isEditable": true }, { "name": "workerDiskGB", "value": "1000", "isEditable": true }, { "name": "workerDiskType", "value": "pd-standard", "isEditable": true }, { "name": "enablePredefinedAutoScaling", "value": "false", "isEditable": true }, { "name": "clusterMetaData", "value": "", "isEditable": true }, { "name": "networkTags", "value": "", "isEditable": true }, { "name": "secureBootEnabled", "value": "false", "isEditable": true }, { "name": "vTpmEnabled", "value": "false", "isEditable": true }, { "name": "integrityMonitoringEnabled", "value": "false", "isEditable": true }, { "name": "imageVersion", "value": "2.0", "isEditable": true }, { "name": "customImageUri", "value": "", "isEditable": true }, { "name": "gcsBucket", "value": "", "isEditable": true }, { "name": "tempBucket", "value": "", "isEditable": true }, { "name": "encryptionKeyName", "value": "", "isEditable": true }, { "name": "scopes", "value": "", "isEditable": true }, { "name": "initActions", "value": "", "isEditable": true }, { "name": "clusterProperties", "value": "", "isEditable": true }, { "name": "labels", "value": "", "isEditable": true }, { "name": "clusterLabels", "value": "", "isEditable": true }, { "name": "idleTTL", "value": "30", "isEditable": true }, { "name": "skipDelete", "value": "false", "isEditable": true }, { "name": "stackdriverLoggingEnabled", "value": "true", "isEditable": true }, { "name": "stackdriverMonitoringEnabled", "value": "true", "isEditable": true }, { "name": "componentGatewayEnabled", "value": "false", "isEditable": true }, { "name": "launchMode", "value": "cluster", "isEditable": true }, { "name": "preferExternalIP", "value": "false", "isEditable": true }, { "name": "pollCreateDelay", "value": "60", "isEditable": true }, { "name": "pollCreateJitter", "value": "20", "isEditable": true }, { "name": "pollDeleteDelay", "value": "30", "isEditable": true }, { "name": "pollInterval", "value": "2", "isEditable": true } ], "totalProcessingCpusLabel": "Up to 84" }, "created": 1710745601 } ] ================================================ FILE: test-data/datafusion1/json-dumps/datafusion-instances.json ================================================ { "instances": [ { "name": "projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance", "description": "My Data Fusion instance", "type": "BASIC", "enableStackdriverLogging": true, "enableStackdriverMonitoring": true, "privateInstance": true, "networkConfig": { "network": "default", "ipAllocation": "10.89.48.0/22" }, "labels": { "gcpdiag": "test" }, "createTime": "2022-08-22T01:02:51.254892028Z", "updateTime": "2022-08-22T01:18:39.219561056Z", "state": "ACTIVE", "serviceEndpoint": "https://my-instance-gcpdiag-datafusion1-aaaa-dot-usc1.datafusion.googleusercontent.com", "version": "6.7.1", "serviceAccount": "cloud-datafusion-management-sa@fd736090192f24d58-tp.iam.gserviceaccount.com", "availableVersion": [ { "versionNumber": "latest" } ], "apiEndpoint": "https://my-instance-gcpdiag-datafusion1-aaaa-dot-usc1.datafusion.googleusercontent.com/api", "gcsBucket": "gs://df-10083849341129831474-pnatxkzbw4i63fqxaizbbqaaaa", "p4ServiceAccount": "service-12340010@gcp-sa-datafusion.iam.gserviceaccount.com", "tenantProjectId": "fd736090192f24d58-tp", "dataprocServiceAccount": "12340010-compute@developer.gserviceaccount.com" } ] } ================================================ FILE: test-data/datafusion1/json-dumps/datafusion-instances1.json ================================================ { "instances": [ { "name": "projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/bug-244411025-instance", "description": "datafusion instance created for b/244411025", "type": "BASIC", "enableStackdriverLogging": true, "enableStackdriverMonitoring": true, "privateInstance": true, "networkConfig": { "network": "default", "ipAllocation": "10.89.48.0/22" }, "labels": { "gcpdiag": "test" }, "createTime": "2022-09-24T08:55:01.910558135Z", "updateTime": "2022-09-24T09:11:48.951872261Z", "state": "ACTIVE", "serviceEndpoint": "https://bug-244411025-instance-gcpdiag-datafusion1-aaaa-dot-usc1.datafusion.googleusercontent.com", "version": "6.7.1", "serviceAccount": "cloud-datafusion-management-sa@r1718446da669444c-tp.iam.gserviceaccount.com", "apiEndpoint": "https://bug-244411025-instance-gcpdiag-datafusion1-aaaa-dot-usc1.datafusion.googleusercontent.com/api", "gcsBucket": "gs://df-3858180334335634755-7nugtmb344i63jb4aizbbqaaaa", "p4ServiceAccount": "service-12340018@gcp-sa-datafusion.iam.gserviceaccount.com", "tenantProjectId": "r1718446da669444c-tp", "dataprocServiceAccount": "12340018-compute@developer.gserviceaccount.com" } ] } ================================================ FILE: test-data/datafusion1/json-dumps/datafusion-system-compute-profile.json ================================================ [ { "name": "autoscaling-dataproc", "label": "Autoscaling Dataproc", "description": "Creates Autoscaling Dataproc clusters for program runs", "scope": "SYSTEM", "status": "ENABLED", "provisioner": { "name": "gcp-dataproc", "properties": [ { "name": "masterMachineType", "value": "e2", "isEditable": true }, { "name": "masterNumNodes", "value": "1", "isEditable": true }, { "name": "masterCPUs", "value": "2", "isEditable": true }, { "name": "masterMemoryMB", "value": "8192", "isEditable": true }, { "name": "masterDiskGB", "value": "1000", "isEditable": true }, { "name": "workerCPUs", "value": "2", "isEditable": true }, { "name": "workerMemoryMB", "value": "8192", "isEditable": true }, { "name": "workerDiskGB", "value": "200", "isEditable": true }, { "name": "workerMachineType", "value": "e2", "isEditable": true }, { "name": "enablePredefinedAutoScaling", "value": "true", "isEditable": true } ], "totalProcessingCpusLabel": "Up to 84" }, "created": 1709651868 }, { "name": "dataproc", "label": "Dataproc", "description": "Creates Dataproc clusters for program runs", "scope": "SYSTEM", "status": "ENABLED", "provisioner": { "name": "gcp-dataproc", "properties": [ { "name": "masterMachineType", "value": "e2", "isEditable": true }, { "name": "masterNumNodes", "value": "1", "isEditable": true }, { "name": "masterCPUs", "value": "2", "isEditable": true }, { "name": "masterMemoryMB", "value": "8192", "isEditable": true }, { "name": "masterDiskGB", "value": "1000", "isEditable": true }, { "name": "workerMachineType", "value": "e2", "isEditable": true }, { "name": "workerNumNodes", "value": "2", "isEditable": true }, { "name": "workerCPUs", "value": "2", "isEditable": true }, { "name": "workerMemoryMB", "value": "8192", "isEditable": true }, { "name": "workerDiskGB", "value": "1000", "isEditable": true } ], "totalProcessingCpusLabel": "4" }, "created": 1709651868 }, { "name": "native", "label": "native", "description": "Runs programs locally on the cluster", "scope": "SYSTEM", "status": "ENABLED", "provisioner": { "name": "native", "properties": [], "totalProcessingCpusLabel": "Custom" }, "created": 1709651867 } ] ================================================ FILE: test-data/datafusion1/json-dumps/datafusion-system-preferences.json ================================================ { "system.profile.name": "SYSTEM:dataproc", "system.profile.properties.imageVersion": "2.1" } ================================================ FILE: test-data/datafusion1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12340010@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-12340010@container-engine-robot.iam.gserviceaccount.com" ], "role": "roles/container.serviceAgent" }, { "members": [ "serviceAccount:service-12340010@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:12340010-compute@developer.gserviceaccount.com" ], "role": "roles/datafusion.runner" }, { "members": [ "serviceAccount:12340010-compute@developer.gserviceaccount.com", "serviceAccount:service-12340010@gcp-sa-datafusion.iam.gserviceaccount.com" ], "role": "roles/datafusion.serviceAgent" }, { "members": [ "serviceAccount:service-12340010@dataproc-accounts.iam.gserviceaccount.com" ], "role": "roles/dataproc.serviceAgent" }, { "members": [ "serviceAccount:12340010-compute@developer.gserviceaccount.com" ], "role": "roles/dataproc.worker" }, { "members": [ "serviceAccount:12340010-compute@developer.gserviceaccount.com", "serviceAccount:12340010@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:bhargavak@premium-cloud-support.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12340010@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" }, { "members": [ "serviceAccount:12340010-compute@developer.gserviceaccount.com" ], "role": "roles/storage.admin" } ], "etag": "BwXpbfPrzIQ=", "version": 1 } ================================================ FILE: test-data/datafusion1/json-dumps/iam-service-account-policy.json ================================================ { "version": 1, "etag": "BwXpaky4imI=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:service-12340010@gcp-sa-datafusion.iam.gserviceaccount.com" ] } ] } ================================================ FILE: test-data/datafusion1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Compute Engine default service account", "email": "12340010-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-datafusion1-aaaa/serviceAccounts/12340010-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-datafusion1-aaaa", "uniqueId": "114930481874391279974" } ] } ================================================ FILE: test-data/datafusion1/json-dumps/logging-entries-1.json ================================================ { "entries": [ ] } ================================================ FILE: test-data/datafusion1/json-dumps/namespaces.json ================================================ [ { "name": "default", "description": "This is the default namespace, which is automatically created, and is always available.", "generation": 0, "config": { "scheduler.queue.name": "" } } ] ================================================ FILE: test-data/datafusion1/json-dumps/project.json ================================================ { "name": "projects/12340010", "parent": "folders/373737373737", "projectId": "gcpdiag-datafusion1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - datafusion1", "createTime": "2022-08-22T00:30:38.739Z", "updateTime": "2022-08-22T00:30:40.979Z", "etag": "GR9oFf6Dr8RG0RV6c2fhYg==" } ================================================ FILE: test-data/datafusion1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340001/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/datafusion.googleapis.com", "config": { "name": "datafusion.googleapis.com", "title": "Cloud Data Fusion API", "documentation": { "summary": "Cloud Data Fusion is a fully-managed, cloud native, enterprise data integration service for\n quickly building and managing data pipelines. It provides a graphical interface to increase\n time efficiency and reduce complexity, and allows business users, developers, and data\n scientists to easily and reliably build scalable data integration solutions to cleanse,\n prepare, blend, transfer and transform data without having to wrestle with infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "datafusion.googleapis.com/Pipeline", "displayName": "Pipeline", "description": "A deployed Pipeline in a Cloud Data Fusion instance.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "compute_engine", "description": "The compute engine used for this Pipeline (MapReduce or Spark)." }, { "key": "pipeline_id", "description": "The Pipeline ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/Instance", "displayName": "Instance", "description": "An instance of Cloud Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/Plugin", "displayName": "Plugin", "description": "An instance of a plugin in a deployed pipeline.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "plugin_type", "description": "The type of the plugin." }, { "key": "plugin_name", "description": "The name of the plugin." }, { "key": "plugin_version", "description": "The version of the plugin." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/MonitoringAgent", "displayName": "MonitoringAgent", "description": "An instance of Monitoring Agent in Cloud Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalPipeline", "displayName": "Pipeline", "description": "A deployed Pipeline in an external (not in GCP) Data Fusion instance.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The GCP region where to store metrics." }, { "key": "cluster_id", "description": "Cluster ID that the instance is hosted in." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "pipeline_id", "description": "The Pipeline ID." }, { "key": "version", "description": "The data plane version of the instance." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalInstance", "displayName": "Instance", "description": "An instance of external (not in GCP) Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The GCP region where to store metrics." }, { "key": "cluster_id", "description": "Cluster ID that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "datafusion.googleapis.com/Pipeline", "metrics": [ "datafusion.googleapis.com/pipeline/runs_completed_count", "datafusion.googleapis.com/pipeline/plugin/records_in_count", "datafusion.googleapis.com/pipeline/plugin/records_out_count", "datafusion.googleapis.com/pipeline/plugin/bytes_in_count", "datafusion.googleapis.com/pipeline/plugin/bytes_out_count", "datafusion.googleapis.com/pipeline/dataproc/provisioning_latency", "datafusion.googleapis.com/pipeline/dataproc/api_request_count", "datafusion.googleapis.com/pipeline/pipeline_run_time", "datafusion.googleapis.com/pipeline/preview_run_time", "datafusion.googleapis.com/pipeline/bytes_read_count", "datafusion.googleapis.com/pipeline/bytes_shuffled_count", "datafusion.googleapis.com/pipeline/bytes_written_count", "datafusion.googleapis.com/pipeline/plugin_count", "datafusion.googleapis.com/instance/tms_persist_count", "datafusion.googleapis.com/instance/tms_subscriber_fetch_count", "datafusion.googleapis.com/instance/tms_subscriber_fetch_time", "datafusion.googleapis.com/instance/tms_subscriber_process_delay", "datafusion.googleapis.com/instance/tms_subscriber_process_duration", "datafusion.googleapis.com/pipeline/pipeline_start_latency", "datafusion.googleapis.com/pipeline/logs_count", "datafusion.googleapis.com/pipeline/failed_runs_classified_count" ] }, { "monitoredResource": "datafusion.googleapis.com/Instance", "metrics": [ "datafusion.googleapis.com/instance/api_request_count", "datafusion.googleapis.com/instance/metric_emitted_count", "datafusion.googleapis.com/instance/service_available", "datafusion.googleapis.com/instance/pipeline_count", "datafusion.googleapis.com/instance/draft_count", "datafusion.googleapis.com/instance/namespace_count", "datafusion.googleapis.com/instance/pod_restart_count", "datafusion.googleapis.com/instance/pod_status", "datafusion.googleapis.com/instance/system_logs_count", "datafusion.googleapis.com/instance/log_event_queue_size", "datafusion.googleapis.com/instance/log_process_min_delay", "datafusion.googleapis.com/instance/log_process_max_delay", "datafusion.googleapis.com/instance/log_process_count", "datafusion.googleapis.com/instance/concurrent_pipeline_launches_count", "datafusion.googleapis.com/instance/concurrent_pipeline_runs_count", "datafusion.googleapis.com/instance/api_response_times", "datafusion.googleapis.com/instance/concurrent_pipeline_running_count", "datafusion.googleapis.com/instance/authorization_internal_check_success_count", "datafusion.googleapis.com/instance/authorization_internal_check_failure_count", "datafusion.googleapis.com/instance/authorization_internal_visibility_count", "datafusion.googleapis.com/instance/authorization_extension_check_success_count", "datafusion.googleapis.com/instance/authorization_extension_check_failure_count", "datafusion.googleapis.com/instance/authorization_extension_visibility_count", "datafusion.googleapis.com/instance/authorization_extension_bypass_count", "datafusion.googleapis.com/instance/authorization_extension_check_time", "datafusion.googleapis.com/instance/authorization_extension_visibility_time", "datafusion.googleapis.com/instance/api_request_received_count", "datafusion.googleapis.com/instance/authorization_check_count", "datafusion.googleapis.com/instance/authorization_check_time", "datafusion.googleapis.com/instance/pipeline_connection_request_count", "datafusion.googleapis.com/instance/heap_memory_used", "datafusion.googleapis.com/instance/heap_memory_max", "datafusion.googleapis.com/instance/cpu_load_per_processor_scaled", "datafusion.googleapis.com/instance/total_thread_count" ] }, { "monitoredResource": "datafusion.googleapis.com/Plugin", "metrics": [ "datafusion.googleapis.com/plugin/deployed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/MonitoringAgent", "metrics": [ "datafusion.googleapis.com/monitoring_agent/workers", "datafusion.googleapis.com/monitoring_agent/pipeline_logs_count", "datafusion.googleapis.com/monitoring_agent/system_logs_count", "datafusion.googleapis.com/monitoring_agent/logs_process_duration" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalPipeline", "metrics": [ "datafusion.googleapis.com/external_pipeline/runs_completed_count", "datafusion.googleapis.com/external_pipeline/pipeline_run_time", "datafusion.googleapis.com/external_pipeline/preview_run_time", "datafusion.googleapis.com/external_pipeline/plugin_count", "datafusion.googleapis.com/external_pipeline/provisioner/provisioning_latency" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalInstance", "metrics": [ "datafusion.googleapis.com/external_instance/api_request_count", "datafusion.googleapis.com/external_instance/heap_memory_used", "datafusion.googleapis.com/external_instance/heap_memory_max", "datafusion.googleapis.com/external_instance/cpu_load_per_processor_scaled", "datafusion.googleapis.com/external_instance/total_thread_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/dataproc-control.googleapis.com", "config": { "name": "dataproc-control.googleapis.com", "title": "Cloud Dataproc Control API", "documentation": { "summary": "Manages internal resources for Google Cloud Dataproc." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/dataproc.googleapis.com", "config": { "name": "dataproc.googleapis.com", "title": "Cloud Dataproc API", "documentation": { "summary": "Manages Hadoop-based clusters and jobs on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/deploymentmanager.googleapis.com", "config": { "name": "deploymentmanager.googleapis.com", "title": "Cloud Deployment Manager V2 API", "documentation": { "summary": "The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\nresources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" and \"cluster\" are supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" } ] } ================================================ FILE: test-data/datafusion1/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - datafusion1" project_id = "gcpdiag-datafusion1-${random_string.project_id.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id } resource "google_project_service" "datafusion" { project = google_project.project.project_id service = "datafusion.googleapis.com" disable_on_destroy = false } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/datafusion1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/dataproc1/Makefile ================================================ PROJECT_ID := $(shell terraform output project_id) PROJECT_ID_SUFFIX := $(shell terraform output project_id_suffix) PROJECT_NR := $(shell terraform output project_nr) ORG_ID := $(shell terraform output org_id) SUCCESS_JOB_ID := $(shell terraform output job-success-id) FAILED_JOB_ID := $(shell terraform output job-failed-id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = us-central1 REGION = europe-west4 ZONE = us-central1-a ZONE_1 = us-central1-b ZONE_2 = us-central1-c ZONE_3 = us-central1-f FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340005 FAKE_ORG_ID = 11112222 FAKE_SUCCESS_JOB_ID = 1234567890 FAKE_FAILED_JOB_ID = 1234567891 SED_JOB_FAKE = sed -e "s/$(SUCCESS_JOB_ID)/$(FAKE_SUCCESS_JOB_ID)/" \ -e "s/$(FAILED_JOB_ID)/$(FAKE_FAILED_JOB_ID)/" all: \ json-dumps/project.json \ json-dumps/compute-regions.json \ json-dumps/dataproc-clusters-$(REGION_1).json \ json-dumps/dataproc-job-failed.json \ json-dumps/dataproc-job-success.json \ json-dumps/services.json \ json-dumps/iam-service-accounts.json \ json-dumps/iam-policy.json \ json-dumps/compute-instances-$(ZONE).json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-instances-$(ZONE_2).json \ json-dumps/compute-instances-$(ZONE_3).json \ json-dumps/compute-subnetworks-aggregated.json \ json-dumps/logging-entries-1.json \ json-dumps/compute-network-test-bad-network.json \ include ../Makefile.inc json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-regions.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \ | $(SED_SUBST_FAKE) >$@ json-dumps/dataproc-clusters-$(REGION_1).json: $(CURL) -fsS \ 'https://dataproc.googleapis.com/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/clusters' \ | $(SED_SUBST_FAKE) >$@ json-dumps/dataproc-job-failed.json: $(CURL) -fsS \ 'https://dataproc.googleapis.com/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/jobs/$(FAILED_JOB_ID)' \ | $(SED_SUBST_FAKE) \ | $(SED_JOB_FAKE) >$@ json-dumps/dataproc-job-success.json: $(CURL) -fsS \ 'https://dataproc.googleapis.com/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/jobs/$(SUCCESS_JOB_ID)' \ | $(SED_SUBST_FAKE) \ | $(SED_JOB_FAKE) >$@ json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found. define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " timestamp > \"2024-06-24T00:00:00+00:00\" AND timestamp < \"2024-06-26T00:00:00+00:00\" AND resource.type=\"cloud_dataproc_cluster\" AND log_id(\"cloudaudit.googleapis.com%2Factivity\") " } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/dataproc1/README.md ================================================ Create terraform project ``` terraform plan -var="billing_account_id=0123456-ABCDEF-987654" -var="org_id=123456789012" terraform apply -var="billing_account_id=0123456-ABCDEF-987654" -var="org_id=123456789012" ``` Refresh json dumps: ``` make all ``` ================================================ FILE: test-data/dataproc1/dataproc_cluster.tf ================================================ resource "google_dataproc_cluster" "good" { depends_on = [google_project_service.dataproc] project = google_project.project.project_id name = "good" region = "us-central1" cluster_config { gce_cluster_config { internal_ip_only = false } master_config { num_instances = 1 machine_type = "e2-medium" disk_config { boot_disk_size_gb = 30 } } worker_config { num_instances = 2 machine_type = "e2-medium" disk_config { boot_disk_size_gb = 30 } } } } resource "google_dataproc_cluster" "test-best-practices-enabled" { depends_on = [google_project_service.dataproc] project = google_project.project.project_id name = "test-best-practices-enabled" region = "us-central1" cluster_config { gce_cluster_config { service_account = google_service_account.sa_worker.email zone = "us-central1-b" internal_ip_only = false } master_config { num_instances = 1 machine_type = "e2-medium" disk_config { boot_disk_size_gb = 30 } } worker_config { num_instances = 2 machine_type = "e2-medium" disk_config { boot_disk_size_gb = 30 } } # Override or set some custom properties software_config { override_properties = { # enable cloud monitoring "dataproc:dataproc.monitoring.stackdriver.enable" = "true" } } } } resource "google_service_account" "sa_worker" { project = google_project.project.project_id account_id = "saworker" display_name = "Dataproc VM Service account with Dataproc Worker role" } resource "google_project_iam_member" "sa_worker" { project = google_project.project.project_id role = "roles/dataproc.worker" member = "serviceAccount:${google_service_account.sa_worker.email}" } resource "google_dataproc_cluster" "test-best-practices-disabled" { depends_on = [google_project_service.dataproc] project = google_project.project.project_id name = "test-best-practices-disabled" region = "us-central1" cluster_config { gce_cluster_config { internal_ip_only = false } master_config { num_instances = 1 machine_type = "e2-medium" disk_config { boot_disk_size_gb = 30 } } worker_config { num_instances = 2 machine_type = "e2-medium" disk_config { boot_disk_size_gb = 30 } } # Override or set some custom properties software_config { override_properties = { "dataproc:dataproc.logging.stackdriver.enable" = "false" } } } } # Expected to fail on apply, run terraform untaint google_dataproc_cluster.test-deny-icmp then terraform apply again resource "google_dataproc_cluster" "test-deny-icmp" { depends_on = [google_project_service.dataproc] project = google_project.project.project_id name = "test-deny-icmp" region = "us-central1" cluster_config { gce_cluster_config { zone = "us-central1-a" subnetwork = google_compute_subnetwork.test-bad-subnet.name tags = ["icmp-deny"] internal_ip_only = false } } } resource "google_dataproc_cluster" "job-failed" { depends_on = [google_project_service.dataproc] project = google_project.project.project_id name = "job-failed" region = "us-central1" cluster_config { gce_cluster_config { internal_ip_only = false } master_config { num_instances = 1 machine_type = "e2-medium" disk_config { boot_disk_size_gb = 30 } } worker_config { num_instances = 2 machine_type = "e2-medium" disk_config { boot_disk_size_gb = 30 } } } } resource "google_dataproc_cluster" "job-success" { depends_on = [google_project_service.dataproc] project = google_project.project.project_id name = "job-success" region = "us-central1" cluster_config { gce_cluster_config { internal_ip_only = false } master_config { num_instances = 1 machine_type = "n2-standard-4" disk_config { boot_disk_size_gb = 30 } } worker_config { num_instances = 2 machine_type = "n2-standard-4" disk_config { boot_disk_size_gb = 30 } } } } ================================================ FILE: test-data/dataproc1/job.tf ================================================ resource "google_dataproc_job" "job-failed" { region = google_dataproc_cluster.job-failed.region project = google_dataproc_cluster.job-failed.project force_delete = true placement { cluster_name = google_dataproc_cluster.job-failed.name } spark_config { main_class = "org.apache.spark.examples.SparkPi" jar_file_uris = ["file:///usr/lib/spark/examples/jars/spark-examples.jar"] args = ["10000"] properties = { "spark.logConf" = "true" } logging_config { driver_log_levels = { "root" = "INFO" } } } } resource "google_dataproc_job" "job-success" { region = google_dataproc_cluster.job-success.region project = google_dataproc_cluster.job-success.project force_delete = true placement { cluster_name = google_dataproc_cluster.job-success.name } spark_config { main_class = "org.apache.spark.examples.SparkPi" jar_file_uris = ["file:///usr/lib/spark/examples/jars/spark-examples.jar"] args = ["10"] properties = { "spark.logConf" = "true" } logging_config { driver_log_levels = { "root" = "INFO" } } } } output "job-failed-id" { value = google_dataproc_job.job-failed.reference[0].job_id } output "job-success-id" { value = google_dataproc_job.job-success.reference[0].job_id } ================================================ FILE: test-data/dataproc1/json-dumps/autoscaling-policy.json ================================================ { "id": "CDF_AUTOSCALING_POLICY_V1", "name": "projects/gcpdiag-dataproc1-aaaa/regions/us-central1/autoscalingPolicies/CDF_AUTOSCALING_POLICY_V1", "basicAlgorithm": { "yarnConfig": { "scaleUpFactor": 0.2, "scaleDownFactor": 1.0, "scaleUpMinWorkerFraction": 0.75, "gracefulDecommissionTimeout": "86400s" }, "cooldownPeriod": "120s" }, "workerConfig": { "minInstances": 2, "maxInstances": 2, "weight": 1 }, "secondaryWorkerConfig": { "maxInstances": 40, "weight": 1 } } ================================================ FILE: test-data/dataproc1/json-dumps/compute-instances-us-central1-a.json ================================================ { "id": "projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances", "items": [ { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:33:19.158-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "1000", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/disks/test-deny-icmp-m", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3441797725372236946", "kind": "compute#instance", "labelFingerprint": "tjiU9HDVBJ4=", "labels": { "goog-dataproc-cluster-name": "test-deny-icmp", "goog-dataproc-cluster-uuid": "f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:24.200-07:00", "lastStopTimestamp": "2024-10-30T23:19:32.090-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/" }, { "key": "dataproc-cluster-name", "value": "test-deny-icmp" }, { "key": "dataproc-cluster-uuid", "value": "f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-deny-icmp-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/test-deny-icmp-m" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWNtOIzkQfecrkOZ1beVCLkTqhwyEhV1IUJrZ3VkhRU63k3jwpdd2h8l8/Zb7EtKJm3AREiH0OVXl8nFVub9c8NRYqk8TrRKqLaPm5MvfND6dRPa03ThtNQbt9qDZO72/fIAvrbOTiCQkYnaDTLSiccqpfhxsiJZ4+x2XEKypUamOKIoIj1JOrNKB0kvsnq8oXpFYqQRn7NQyvsXjSyWYJNJOi39cbPnv86+UxTFdkJRbrHRMNZNLlCjOok2wIAysKU0fBwuDlwbPuYqesGG/aNBsn7WavV6rXwEIaklMLAEHLnwqyZxTsMMNLXDFiozhxdMYQ2KtihQ3wcNtuG7+lv3G5WfrxBkETPQ4IEsqLTYJ0U841mwNK6EigWX8IDqwOqW7WAGGmSB6M1OSb4ogXp6Xf2HyTJhFkj6jZ6WfqDbIUL1msCeaLpmxmlimZD0/yvWBVpRwu8KwEE4jiyIlEiUhXiRVTJEkgpr9GA9sQP40i8zWiNu2nF8+KZJ21JK1TiyJ0oURElm2hh2vJ5bxGmQVEkoy0JI/Fat4YU6dVb8daSK9Sazb1zWL3R7lMqj3LK1WHCWcSIpiCpEIZgx4Ai0eX3DOxkXEjlIEDYeIvZluiXnCTK4JZ3G2SvgCeYTvWDDOmQk6jUbjqAVN/0upsR8jQ4IpyDZO8zzDOqKg6+eB2LSdU2KxIG6/8SLzLKNNxmofIeVK3yOhpo/0Q81xKb4ixy+ryyP00YqwIlCjEkBgFjsJgjjASkyD6bfx7OvoajIdzcLR9K+bi1HoNVN4dmcgL4PuL0EklAKNiyN3RF87yigrXfU0fYRpNrA+8Q4DLo/ZAt7v21gSPZX1brekemguPUut0sTtjZIx1L9aF1vsS1mptQutb6E0JB7OVbkCELalchtU/SF7aTyC/ITKKKNUa1caISkmaLaOcwQVSm9QasBLA5/7CIWmP6i4TNISJF0UUExSq5y+XqlBW06mTkGY29wsTtfSaOYcVfbtUybsCrr/SvEYP7F50O102t33Wipy9JlgChOfD+YzURxx787aCsQJJAzNbFnfNw0TCWcLBmOIiXY3ex+YHV2ulogsl9AMiWcF4DBKHgcCGKBcd05IApPJmmCVWBOgf8TPXrcvaoD5GrGYB003RB6Cio83GSztVm3msxeicv04uB5eTib3s8vhw3A8uRzNJvcPYWax02yJE9fh4WjBUOcykG0EiWNIuYHTl/08Ds773a4PuLI28aLP6tDGC+/44CyJvODeDtiNWrltIuNs2lWptEGr4cWAf+Sx2KtFGy+86YODsihoCvYjibYsC/MBTDlyg1gkEiQeB/1Gx+ttW8Fro+z2j/O88XbP/cR8cKomrlkTXIY9urLmSS7Liuz+mHydXd+ED5Ppd1eLR9PZ9Wh4H978OwrO3KSUU3YVnY0hJDFBq1nztPjTcPUMDVPbbKLl1NI440HX6LzKNEHP/7ysJBrSCnUYhiX4SqFREFjz4WXthbtu4ZXB1zk9hHxRfUvXlMfz0BJLQ2cmzNPo8eyKQpSkeO0uTtAlayDVetDqNaAg+JEv1aDd7nc9oOLjiFNvHarze1CIalzn47fCBi4sDtbqvKCy0kuS3czClOxuCSBTVBOCn7S9PsMa0cEaj3DK6LP7Zy7n8H44/ROK6OhuMp7dwe/p90zAIgdBf8nvqtu7Zrx2E1QM48nCzd+M2/127CeWo5YJYN14qdSSOwWqNC6uw7vz2WXBusvntNuCW2Pa/MdB5UxeQM1grq1NafYi4C1hOS5X0DixJhKCSM0qVs/yrVTYOybYL/DlAsCL1Bx01beQOV1YQwXLjEDpg3P2MUNuBCDwkc7hWgR6fV9A8B+g2QJ+pWBY0ReuMviI+UgHo+2UGrhXhO6dSqtx1t9XToHLzg9I67y7B6A/aZS6O1ku5lbNUyahJsroFUThotvs9GpcjOQaT+5H46+3w3A2/nY3e7iejoaXIZygCj7h6RL8lVcmJ79D1W4zV4o1dNz7jFo1t3MRcGP81fBmugeA3Edz9co2VXdZQ1Njgrq3WUpc5Ucwk05CrBs9XzGUMuxeqQSN6r/zwiG2OTyDApC9dcmKxPfhdDxzQ9bdcDz8fbfXNbvt/j5wOgon36YXh+CsMe6BH27uRrc345G3iTpsUdR2L80H00C/0erWgX0F8+wouJjX3dzZ7pxV8CWm5Oy97sledhn0TCzsevUpYgt4iswqXSw4RU5A+Q69Yn0nOrTUJKKLlFfeMCGnBJVaBDOTCWBGreatcgllIhWIcFfvspuQb3k7BLiBeggn/wMsmjgT" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "false" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Master" }, { "key": "node-group-roles", "value": "MASTER" } ], "kind": "compute#metadata" }, "name": "test-deny-icmp-m", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network", "networkIP": "10.128.0.4", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances/test-deny-icmp-m", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED", "items": [ "icmp-deny" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:33:18.034-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "1000", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/disks/test-deny-icmp-w-0", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "5459908484446241938", "kind": "compute#instance", "labelFingerprint": "tjiU9HDVBJ4=", "labels": { "goog-dataproc-cluster-name": "test-deny-icmp", "goog-dataproc-cluster-uuid": "f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:26.580-07:00", "lastStopTimestamp": "2024-10-30T23:20:52.153-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/" }, { "key": "dataproc-cluster-name", "value": "test-deny-icmp" }, { "key": "dataproc-cluster-uuid", "value": "f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-deny-icmp-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/test-deny-icmp-w-0" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWNtOIzkQfecrkOZ1beVCLkTqhwyEhV1IUJrZ3VkhRU63k3jwpdd2h8l8/Zb7EtKJm3AREiH0OVXl8nFVub9c8NRYqk8TrRKqLaPm5MvfND6dRPa03ThtNQbt9qDZO72/fIAvrbOTiCQkYnaDTLSiccqpfhxsiJZ4+x2XEKypUamOKIoIj1JOrNKB0kvsnq8oXpFYqQRn7NQyvsXjSyWYJNJOi39cbPnv86+UxTFdkJRbrHRMNZNLlCjOok2wIAysKU0fBwuDlwbPuYqesGG/aNBsn7WavV6rXwEIaklMLAEHLnwqyZxTsMMNLXDFiozhxdMYQ2KtihQ3wcNtuG7+lv3G5WfrxBkETPQ4IEsqLTYJ0U841mwNK6EigWX8IDqwOqW7WAGGmSB6M1OSb4ogXp6Xf2HyTJhFkj6jZ6WfqDbIUL1msCeaLpmxmlimZD0/yvWBVpRwu8KwEE4jiyIlEiUhXiRVTJEkgpr9GA9sQP40i8zWiNu2nF8+KZJ21JK1TiyJ0oURElm2hh2vJ5bxGmQVEkoy0JI/Fat4YU6dVb8daSK9Sazb1zWL3R7lMqj3LK1WHCWcSIpiCpEIZgx4Ai0eX3DOxkXEjlIEDYeIvZluiXnCTK4JZ3G2SvgCeYTvWDDOmQk6jUbjqAVN/0upsR8jQ4IpyDZO8zzDOqKg6+eB2LSdU2KxIG6/8SLzLKNNxmofIeVK3yOhpo/0Q81xKb4ixy+ryyP00YqwIlCjEkBgFjsJgjjASkyD6bfx7OvoajIdzcLR9K+bi1HoNVN4dmcgL4PuL0EklAKNiyN3RF87yigrXfU0fYRpNrA+8Q4DLo/ZAt7v21gSPZX1brekemguPUut0sTtjZIx1L9aF1vsS1mptQutb6E0JB7OVbkCELalchtU/SF7aTyC/ITKKKNUa1caISkmaLaOcwQVSm9QasBLA5/7CIWmP6i4TNISJF0UUExSq5y+XqlBW06mTkGY29wsTtfSaOYcVfbtUybsCrr/SvEYP7F50O102t33Wipy9JlgChOfD+YzURxx787aCsQJJAzNbFnfNw0TCWcLBmOIiXY3ex+YHV2ulogsl9AMiWcF4DBKHgcCGKBcd05IApPJmmCVWBOgf8TPXrcvaoD5GrGYB003RB6Cio83GSztVm3msxeicv04uB5eTib3s8vhw3A8uRzNJvcPYWax02yJE9fh4WjBUOcykG0EiWNIuYHTl/08Ds773a4PuLI28aLP6tDGC+/44CyJvODeDtiNWrltIuNs2lWptEGr4cWAf+Sx2KtFGy+86YODsihoCvYjibYsC/MBTDlyg1gkEiQeB/1Gx+ttW8Fro+z2j/O88XbP/cR8cKomrlkTXIY9urLmSS7Liuz+mHydXd+ED5Ppd1eLR9PZ9Wh4H978OwrO3KSUU3YVnY0hJDFBq1nztPjTcPUMDVPbbKLl1NI440HX6LzKNEHP/7ysJBrSCnUYhiX4SqFREFjz4WXthbtu4ZXB1zk9hHxRfUvXlMfz0BJLQ2cmzNPo8eyKQpSkeO0uTtAlayDVetDqNaAg+JEv1aDd7nc9oOLjiFNvHarze1CIalzn47fCBi4sDtbqvKCy0kuS3czClOxuCSBTVBOCn7S9PsMa0cEaj3DK6LP7Zy7n8H44/ROK6OhuMp7dwe/p90zAIgdBf8nvqtu7Zrx2E1QM48nCzd+M2/127CeWo5YJYN14qdSSOwWqNC6uw7vz2WXBusvntNuCW2Pa/MdB5UxeQM1grq1NafYi4C1hOS5X0DixJhKCSM0qVs/yrVTYOybYL/DlAsCL1Bx01beQOV1YQwXLjEDpg3P2MUNuBCDwkc7hWgR6fV9A8B+g2QJ+pWBY0ReuMviI+UgHo+2UGrhXhO6dSqtx1t9XToHLzg9I67y7B6A/aZS6O1ku5lbNUyahJsroFUThotvs9GpcjOQaT+5H46+3w3A2/nY3e7iejoaXIZygCj7h6RL8lVcmJ79D1W4zV4o1dNz7jFo1t3MRcGP81fBmugeA3Edz9co2VXdZQ1Njgrq3WUpc5Ucwk05CrBs9XzGUMuxeqQSN6r/zwiG2OTyDApC9dcmKxPfhdDxzQ9bdcDz8fbfXNbvt/j5wOgon36YXh+CsMe6BH27uRrc345G3iTpsUdR2L80H00C/0erWgX0F8+wouJjX3dzZ7pxV8CWm5Oy97sledhn0TCzsevUpYgt4iswqXSw4RU5A+Q69Yn0nOrTUJKKLlFfeMCGnBJVaBDOTCWBGreatcgllIhWIcFfvspuQb3k7BLiBeggn/wMsmjgT" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "true" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Worker" }, { "key": "node-group-roles", "value": "PRIMARY_WORKER" } ], "kind": "compute#metadata" }, "name": "test-deny-icmp-w-0", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network", "networkIP": "10.128.0.2", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances/test-deny-icmp-w-0", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED", "items": [ "icmp-deny" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:33:18.781-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "1000", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/disks/test-deny-icmp-w-1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "9021823956504495250", "kind": "compute#instance", "labelFingerprint": "tjiU9HDVBJ4=", "labels": { "goog-dataproc-cluster-name": "test-deny-icmp", "goog-dataproc-cluster-uuid": "f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:25.604-07:00", "lastStopTimestamp": "2024-10-30T23:20:50.922-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/" }, { "key": "dataproc-cluster-name", "value": "test-deny-icmp" }, { "key": "dataproc-cluster-uuid", "value": "f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-deny-icmp-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/test-deny-icmp-w-1" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWNtOIzkQfecrkOZ1beVCLkTqhwyEhV1IUJrZ3VkhRU63k3jwpdd2h8l8/Zb7EtKJm3AREiH0OVXl8nFVub9c8NRYqk8TrRKqLaPm5MvfND6dRPa03ThtNQbt9qDZO72/fIAvrbOTiCQkYnaDTLSiccqpfhxsiJZ4+x2XEKypUamOKIoIj1JOrNKB0kvsnq8oXpFYqQRn7NQyvsXjSyWYJNJOi39cbPnv86+UxTFdkJRbrHRMNZNLlCjOok2wIAysKU0fBwuDlwbPuYqesGG/aNBsn7WavV6rXwEIaklMLAEHLnwqyZxTsMMNLXDFiozhxdMYQ2KtihQ3wcNtuG7+lv3G5WfrxBkETPQ4IEsqLTYJ0U841mwNK6EigWX8IDqwOqW7WAGGmSB6M1OSb4ogXp6Xf2HyTJhFkj6jZ6WfqDbIUL1msCeaLpmxmlimZD0/yvWBVpRwu8KwEE4jiyIlEiUhXiRVTJEkgpr9GA9sQP40i8zWiNu2nF8+KZJ21JK1TiyJ0oURElm2hh2vJ5bxGmQVEkoy0JI/Fat4YU6dVb8daSK9Sazb1zWL3R7lMqj3LK1WHCWcSIpiCpEIZgx4Ai0eX3DOxkXEjlIEDYeIvZluiXnCTK4JZ3G2SvgCeYTvWDDOmQk6jUbjqAVN/0upsR8jQ4IpyDZO8zzDOqKg6+eB2LSdU2KxIG6/8SLzLKNNxmofIeVK3yOhpo/0Q81xKb4ixy+ryyP00YqwIlCjEkBgFjsJgjjASkyD6bfx7OvoajIdzcLR9K+bi1HoNVN4dmcgL4PuL0EklAKNiyN3RF87yigrXfU0fYRpNrA+8Q4DLo/ZAt7v21gSPZX1brekemguPUut0sTtjZIx1L9aF1vsS1mptQutb6E0JB7OVbkCELalchtU/SF7aTyC/ITKKKNUa1caISkmaLaOcwQVSm9QasBLA5/7CIWmP6i4TNISJF0UUExSq5y+XqlBW06mTkGY29wsTtfSaOYcVfbtUybsCrr/SvEYP7F50O102t33Wipy9JlgChOfD+YzURxx787aCsQJJAzNbFnfNw0TCWcLBmOIiXY3ex+YHV2ulogsl9AMiWcF4DBKHgcCGKBcd05IApPJmmCVWBOgf8TPXrcvaoD5GrGYB003RB6Cio83GSztVm3msxeicv04uB5eTib3s8vhw3A8uRzNJvcPYWax02yJE9fh4WjBUOcykG0EiWNIuYHTl/08Ds773a4PuLI28aLP6tDGC+/44CyJvODeDtiNWrltIuNs2lWptEGr4cWAf+Sx2KtFGy+86YODsihoCvYjibYsC/MBTDlyg1gkEiQeB/1Gx+ttW8Fro+z2j/O88XbP/cR8cKomrlkTXIY9urLmSS7Liuz+mHydXd+ED5Ppd1eLR9PZ9Wh4H978OwrO3KSUU3YVnY0hJDFBq1nztPjTcPUMDVPbbKLl1NI440HX6LzKNEHP/7ysJBrSCnUYhiX4SqFREFjz4WXthbtu4ZXB1zk9hHxRfUvXlMfz0BJLQ2cmzNPo8eyKQpSkeO0uTtAlayDVetDqNaAg+JEv1aDd7nc9oOLjiFNvHarze1CIalzn47fCBi4sDtbqvKCy0kuS3czClOxuCSBTVBOCn7S9PsMa0cEaj3DK6LP7Zy7n8H44/ROK6OhuMp7dwe/p90zAIgdBf8nvqtu7Zrx2E1QM48nCzd+M2/127CeWo5YJYN14qdSSOwWqNC6uw7vz2WXBusvntNuCW2Pa/MdB5UxeQM1grq1NafYi4C1hOS5X0DixJhKCSM0qVs/yrVTYOybYL/DlAsCL1Bx01beQOV1YQwXLjEDpg3P2MUNuBCDwkc7hWgR6fV9A8B+g2QJ+pWBY0ReuMviI+UgHo+2UGrhXhO6dSqtx1t9XToHLzg9I67y7B6A/aZS6O1ku5lbNUyahJsroFUThotvs9GpcjOQaT+5H46+3w3A2/nY3e7iejoaXIZygCj7h6RL8lVcmJ79D1W4zV4o1dNz7jFo1t3MRcGP81fBmugeA3Edz9co2VXdZQ1Njgrq3WUpc5Ucwk05CrBs9XzGUMuxeqQSN6r/zwiG2OTyDApC9dcmKxPfhdDxzQ9bdcDz8fbfXNbvt/j5wOgon36YXh+CsMe6BH27uRrc345G3iTpsUdR2L80H00C/0erWgX0F8+wouJjX3dzZ7pxV8CWm5Oy97sledhn0TCzsevUpYgt4iswqXSw4RU5A+Q69Yn0nOrTUJKKLlFfeMCGnBJVaBDOTCWBGreatcgllIhWIcFfvspuQb3k7BLiBeggn/wMsmjgT" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "true" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Worker" }, { "key": "node-group-roles", "value": "PRIMARY_WORKER" } ], "kind": "compute#metadata" }, "name": "test-deny-icmp-w-1", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network", "networkIP": "10.128.0.3", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances/test-deny-icmp-w-1", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED", "items": [ "icmp-deny" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances" } ================================================ FILE: test-data/dataproc1/json-dumps/compute-instances-us-central1-b.json ================================================ { "id": "projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances", "items": [ { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:34:25.136-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/disks/test-best-practices-enabled-m", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3152771036514042960", "kind": "compute#instance", "labelFingerprint": "MyeLZ2zkVRM=", "labels": { "goog-dataproc-cluster-name": "test-best-practices-enabled", "goog-dataproc-cluster-uuid": "30695901-ea88-41e7-9c97-bb55067a4540", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:34:43.346-07:00", "lastStopTimestamp": "2024-10-30T23:19:37.166-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/" }, { "key": "dataproc-cluster-name", "value": "test-best-practices-enabled" }, { "key": "dataproc-cluster-uuid", "value": "30695901-ea88-41e7-9c97-bb55067a4540" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-best-practices-enabled-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/test-best-practices-enabled-m" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1P4zgQ/s6vQNqvZ6tNaYFK+dCFcnAHLWrZu9sTUuUmbuvFLznbKdv99Td2ktIXh/IiJErJ88yMx49nxvlywXNjqT7OtMqotoyaoy9/0/R4mNjjVuM4anRbJ92odXx/+QBfopOjhGQkYXaFTLKgac6pfuyuiJZ4/R1XEKypUblOKEoIT3JOrNKx0nPsni8oXpBUqQx7dm4ZX+PxpRJMEmlH5T8u1vz3+VfK4pTOSM4tVjqlmsk5yhRnySqeEQbWlKaP3ZnBc4OnXCVP2LBfNG62TqLm6Wl0tgUQ1JKUWAIOXPhUkimnYIcbWuLKFRnDy6cphsRalShu4ofb8bL5m/+Nq8/oyBkETPLYJXMqLTYZ0U841WwJK6Eig2X8IDq2OqebWAGGmSB6NVGSr8ogXp5Xf2HyTJhFkj6jZ6WfqDbIUL1ksCeazpmxmlimZD0/KfSBFpRwu8CwEE4TixIlMiUhXiRVSpEkgprdGPdsQP40S8zaiNu2gl89KZN20JK1TiyZ0qURkli2hB2vJ1bxGmQVEkoy0FI4FYt0Zo6d1bAdaRK9yqzb1yVL3R4VMqj3LK1WHGWcSIpSCpEIZgx4Ai0eXnDBxmXEjlIGDYeIvZluiXnCTC4JZ6lfJXyBPMJ3LBjnzMTtRqNx0IKm/+XU2I+RIcEUZJvmRZ5hHUncCfNAbNpOKbFYELffeOY9y2TlWa0DpELpOyTUDJF+qCmuxFfm+GV1RYQhWhlWAmpUAgjMYidBEAdYSWk8+jaYfO1fDUf9ybg/+uvmoj8Omik9uzNQlEH3lyASSoHG5ZE7oK8NZVSVbvs0fYRpVrA+8Q4DLo9+Ae/3bSxJnqp69zrLZWeuVZ65rVEyhfJ3GPtSVWqLHHS+mdKQdzhW1QJA15bKdUz1Z+yl7wjyEwqjTHKtXWWEnMDROEwRVCi9QrkBJw18HiKUiv6g3rygJQi6LJ+Y5FY5db1SgdYcr01BmNtaH6draNQ7R1u79ikTdgG9f6F4ip/YNO60263Oey2VOfpMMKWJzwfzmSgOuHcnbQHaBBKGVjav75qGiYyzGYMhxCSbm70L9AeXqzki8zm0QhJYAThMsseuAAYo1x0TksFcsiRYZdbE6B/xs33aETXAYo1YTOPTzlkAU368yV5ldstkMXchKpeP3eve5XB4P7nsPfQGw8v+ZHj/MC4MNiNx5Lo7HCwY6Nz6/TaQNIWEGzh7/uexe37W6YSAC2uzIPqkDm2C8HYIzrIkCD7dALsxq7BNZOonXZVLG0eNIAb8o4DF01q0CcKbITjoioKiYDuyZM2yMBugqfuVaVeeEmpQKSMkHrtnjXbQ9bqW14bsdvgQLxh85zxMLCao7Sw2a4Lz2Pcts3lU6HVLkH8Mv06ub8YPw9F3V6P7o8l1v3c/vvm3D67hYlVQNqXuhxOSmfi85mH5p+HqGbqotn7M5dTS1NOgmbRfZZq4GX5eFRgNKYbyDBMUfKXQPwisf/8G98JdRnhh8HVBH0PuqL6lS8rT6dgSS8fOzLhIacCzqxVJluOlu02Fg9uvO81WsylqkC9VotlphbJYfmw4jepR236jThSF/O4VqFZ0ehbAFTO5wgZuMQ4WtTtrlK/IJNvMLIzO7uoAkkU1Sw+T1ndqWCPaS+wBTpU4fykt1Dy+743+hOravxsOJnfwe/Td61cUIGg7xQV2fQFNl26uSmFqmbmhnHG726XDxGoAMzGsG8+VmnOnQJWn5R15c2q7LFl3xfR2W3JrTJv/OKicyQuoH8x1uxH1bwfeEpbjcgX9FGsiIYjcLFL1LN9Khb1jgv0CXy4APMvNXrN9C5nTmTVUMG8EyiCcs48ZcpMBgY98Cncl0Ov7AoL/AM2W8CsFM4y+cJUhRCwmPZh4R9TAZWPsXrT4nhyE+eMTUhb9SZPc3dMqLYefMgklUSb+RIcRlYuo3a5x0ZdLPLzvD77e9saTwbe7ycP1qN+7HO86zXg+B3/VNcqpb1+068RVWh077r2nbpvbuB644f6qdzPaAUDqk6l6ZZe2N1lDf2OCujdcSlwVJ9ArJyPWDaSvGMoZdq9Z4sb2v4u6Iaocdk4a4si/ifE14ntvNJi44euuN+j9vtnpThrnu7hRfzz8NrrYx/quuAN+uLnr394M+sEO6rBlSdu8R+/NBWeNqFMHDpXL6CC4HOKrYr8BryAVZecFkH/9ZdAzsbDn208Rm8FTZBb5bMYpcvIp9ucV6xvBoTkMJ3SW8613TsjpQOUWwfBkYphcG41Ne1sXUyZygQh3xc7fjgKr28DDpXQf3zz6H1t9QEo=" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "false" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Master" }, { "key": "node-group-roles", "value": "MASTER" } ], "kind": "compute#metadata" }, "name": "test-best-practices-enabled-m", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.13", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances/test-best-practices-enabled-m", "serviceAccounts": [ { "email": "saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:34:23.942-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/disks/test-best-practices-enabled-w-0", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "2717493207919182928", "kind": "compute#instance", "labelFingerprint": "MyeLZ2zkVRM=", "labels": { "goog-dataproc-cluster-name": "test-best-practices-enabled", "goog-dataproc-cluster-uuid": "30695901-ea88-41e7-9c97-bb55067a4540", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:34:38.033-07:00", "lastStopTimestamp": "2024-10-30T23:19:37.334-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/" }, { "key": "dataproc-cluster-name", "value": "test-best-practices-enabled" }, { "key": "dataproc-cluster-uuid", "value": "30695901-ea88-41e7-9c97-bb55067a4540" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-best-practices-enabled-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/test-best-practices-enabled-w-0" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1P4zgQ/s6vQNqvZ6tNaYFK+dCFcnAHLWrZu9sTUuUmbuvFLznbKdv99Td2ktIXh/IiJErJ88yMx49nxvlywXNjqT7OtMqotoyaoy9/0/R4mNjjVuM4anRbJ92odXx/+QBfopOjhGQkYXaFTLKgac6pfuyuiJZ4/R1XEKypUblOKEoIT3JOrNKx0nPsni8oXpBUqQx7dm4ZX+PxpRJMEmlH5T8u1vz3+VfK4pTOSM4tVjqlmsk5yhRnySqeEQbWlKaP3ZnBc4OnXCVP2LBfNG62TqLm6Wl0tgUQ1JKUWAIOXPhUkimnYIcbWuLKFRnDy6cphsRalShu4ofb8bL5m/+Nq8/oyBkETPLYJXMqLTYZ0U841WwJK6Eig2X8IDq2OqebWAGGmSB6NVGSr8ogXp5Xf2HyTJhFkj6jZ6WfqDbIUL1ksCeazpmxmlimZD0/KfSBFpRwu8CwEE4TixIlMiUhXiRVSpEkgprdGPdsQP40S8zaiNu2gl89KZN20JK1TiyZ0qURkli2hB2vJ1bxGmQVEkoy0FI4FYt0Zo6d1bAdaRK9yqzb1yVL3R4VMqj3LK1WHGWcSIpSCpEIZgx4Ai0eXnDBxmXEjlIGDYeIvZluiXnCTC4JZ6lfJXyBPMJ3LBjnzMTtRqNx0IKm/+XU2I+RIcEUZJvmRZ5hHUncCfNAbNpOKbFYELffeOY9y2TlWa0DpELpOyTUDJF+qCmuxFfm+GV1RYQhWhlWAmpUAgjMYidBEAdYSWk8+jaYfO1fDUf9ybg/+uvmoj8Omik9uzNQlEH3lyASSoHG5ZE7oK8NZVSVbvs0fYRpVrA+8Q4DLo9+Ae/3bSxJnqp69zrLZWeuVZ65rVEyhfJ3GPtSVWqLHHS+mdKQdzhW1QJA15bKdUz1Z+yl7wjyEwqjTHKtXWWEnMDROEwRVCi9QrkBJw18HiKUiv6g3rygJQi6LJ+Y5FY5db1SgdYcr01BmNtaH6draNQ7R1u79ikTdgG9f6F4ip/YNO60263Oey2VOfpMMKWJzwfzmSgOuHcnbQHaBBKGVjav75qGiYyzGYMhxCSbm70L9AeXqzki8zm0QhJYAThMsseuAAYo1x0TksFcsiRYZdbE6B/xs33aETXAYo1YTOPTzlkAU368yV5ldstkMXchKpeP3eve5XB4P7nsPfQGw8v+ZHj/MC4MNiNx5Lo7HCwY6Nz6/TaQNIWEGzh7/uexe37W6YSAC2uzIPqkDm2C8HYIzrIkCD7dALsxq7BNZOonXZVLG0eNIAb8o4DF01q0CcKbITjoioKiYDuyZM2yMBugqfuVaVeeEmpQKSMkHrtnjXbQ9bqW14bsdvgQLxh85zxMLCao7Sw2a4Lz2Pcts3lU6HVLkH8Mv06ub8YPw9F3V6P7o8l1v3c/vvm3D67hYlVQNqXuhxOSmfi85mH5p+HqGbqotn7M5dTS1NOgmbRfZZq4GX5eFRgNKYbyDBMUfKXQPwisf/8G98JdRnhh8HVBH0PuqL6lS8rT6dgSS8fOzLhIacCzqxVJluOlu02Fg9uvO81WsylqkC9VotlphbJYfmw4jepR236jThSF/O4VqFZ0ehbAFTO5wgZuMQ4WtTtrlK/IJNvMLIzO7uoAkkU1Sw+T1ndqWCPaS+wBTpU4fykt1Dy+743+hOravxsOJnfwe/Td61cUIGg7xQV2fQFNl26uSmFqmbmhnHG726XDxGoAMzGsG8+VmnOnQJWn5R15c2q7LFl3xfR2W3JrTJv/OKicyQuoH8x1uxH1bwfeEpbjcgX9FGsiIYjcLFL1LN9Khb1jgv0CXy4APMvNXrN9C5nTmTVUMG8EyiCcs48ZcpMBgY98Cncl0Ov7AoL/AM2W8CsFM4y+cJUhRCwmPZh4R9TAZWPsXrT4nhyE+eMTUhb9SZPc3dMqLYefMgklUSb+RIcRlYuo3a5x0ZdLPLzvD77e9saTwbe7ycP1qN+7HO86zXg+B3/VNcqpb1+068RVWh077r2nbpvbuB644f6qdzPaAUDqk6l6ZZe2N1lDf2OCujdcSlwVJ9ArJyPWDaSvGMoZdq9Z4sb2v4u6Iaocdk4a4si/ifE14ntvNJi44euuN+j9vtnpThrnu7hRfzz8NrrYx/quuAN+uLnr394M+sEO6rBlSdu8R+/NBWeNqFMHDpXL6CC4HOKrYr8BryAVZecFkH/9ZdAzsbDn208Rm8FTZBb5bMYpcvIp9ucV6xvBoTkMJ3SW8613TsjpQOUWwfBkYphcG41Ne1sXUyZygQh3xc7fjgKr28DDpXQf3zz6H1t9QEo=" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "true" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Worker" }, { "key": "node-group-roles", "value": "PRIMARY_WORKER" } ], "kind": "compute#metadata" }, "name": "test-best-practices-enabled-w-0", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.11", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances/test-best-practices-enabled-w-0", "serviceAccounts": [ { "email": "saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:34:24.953-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/disks/test-best-practices-enabled-w-1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1874862079468323920", "kind": "compute#instance", "labelFingerprint": "MyeLZ2zkVRM=", "labels": { "goog-dataproc-cluster-name": "test-best-practices-enabled", "goog-dataproc-cluster-uuid": "30695901-ea88-41e7-9c97-bb55067a4540", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:34:40.297-07:00", "lastStopTimestamp": "2024-10-30T23:19:52.766-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/" }, { "key": "dataproc-cluster-name", "value": "test-best-practices-enabled" }, { "key": "dataproc-cluster-uuid", "value": "30695901-ea88-41e7-9c97-bb55067a4540" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-best-practices-enabled-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/test-best-practices-enabled-w-1" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1P4zgQ/s6vQNqvZ6tNaYFK+dCFcnAHLWrZu9sTUuUmbuvFLznbKdv99Td2ktIXh/IiJErJ88yMx49nxvlywXNjqT7OtMqotoyaoy9/0/R4mNjjVuM4anRbJ92odXx/+QBfopOjhGQkYXaFTLKgac6pfuyuiJZ4/R1XEKypUblOKEoIT3JOrNKx0nPsni8oXpBUqQx7dm4ZX+PxpRJMEmlH5T8u1vz3+VfK4pTOSM4tVjqlmsk5yhRnySqeEQbWlKaP3ZnBc4OnXCVP2LBfNG62TqLm6Wl0tgUQ1JKUWAIOXPhUkimnYIcbWuLKFRnDy6cphsRalShu4ofb8bL5m/+Nq8/oyBkETPLYJXMqLTYZ0U841WwJK6Eig2X8IDq2OqebWAGGmSB6NVGSr8ogXp5Xf2HyTJhFkj6jZ6WfqDbIUL1ksCeazpmxmlimZD0/KfSBFpRwu8CwEE4TixIlMiUhXiRVSpEkgprdGPdsQP40S8zaiNu2gl89KZN20JK1TiyZ0qURkli2hB2vJ1bxGmQVEkoy0FI4FYt0Zo6d1bAdaRK9yqzb1yVL3R4VMqj3LK1WHGWcSIpSCpEIZgx4Ai0eXnDBxmXEjlIGDYeIvZluiXnCTC4JZ6lfJXyBPMJ3LBjnzMTtRqNx0IKm/+XU2I+RIcEUZJvmRZ5hHUncCfNAbNpOKbFYELffeOY9y2TlWa0DpELpOyTUDJF+qCmuxFfm+GV1RYQhWhlWAmpUAgjMYidBEAdYSWk8+jaYfO1fDUf9ybg/+uvmoj8Omik9uzNQlEH3lyASSoHG5ZE7oK8NZVSVbvs0fYRpVrA+8Q4DLo9+Ae/3bSxJnqp69zrLZWeuVZ65rVEyhfJ3GPtSVWqLHHS+mdKQdzhW1QJA15bKdUz1Z+yl7wjyEwqjTHKtXWWEnMDROEwRVCi9QrkBJw18HiKUiv6g3rygJQi6LJ+Y5FY5db1SgdYcr01BmNtaH6draNQ7R1u79ikTdgG9f6F4ip/YNO60263Oey2VOfpMMKWJzwfzmSgOuHcnbQHaBBKGVjav75qGiYyzGYMhxCSbm70L9AeXqzki8zm0QhJYAThMsseuAAYo1x0TksFcsiRYZdbE6B/xs33aETXAYo1YTOPTzlkAU368yV5ldstkMXchKpeP3eve5XB4P7nsPfQGw8v+ZHj/MC4MNiNx5Lo7HCwY6Nz6/TaQNIWEGzh7/uexe37W6YSAC2uzIPqkDm2C8HYIzrIkCD7dALsxq7BNZOonXZVLG0eNIAb8o4DF01q0CcKbITjoioKiYDuyZM2yMBugqfuVaVeeEmpQKSMkHrtnjXbQ9bqW14bsdvgQLxh85zxMLCao7Sw2a4Lz2Pcts3lU6HVLkH8Mv06ub8YPw9F3V6P7o8l1v3c/vvm3D67hYlVQNqXuhxOSmfi85mH5p+HqGbqotn7M5dTS1NOgmbRfZZq4GX5eFRgNKYbyDBMUfKXQPwisf/8G98JdRnhh8HVBH0PuqL6lS8rT6dgSS8fOzLhIacCzqxVJluOlu02Fg9uvO81WsylqkC9VotlphbJYfmw4jepR236jThSF/O4VqFZ0ehbAFTO5wgZuMQ4WtTtrlK/IJNvMLIzO7uoAkkU1Sw+T1ndqWCPaS+wBTpU4fykt1Dy+743+hOravxsOJnfwe/Td61cUIGg7xQV2fQFNl26uSmFqmbmhnHG726XDxGoAMzGsG8+VmnOnQJWn5R15c2q7LFl3xfR2W3JrTJv/OKicyQuoH8x1uxH1bwfeEpbjcgX9FGsiIYjcLFL1LN9Khb1jgv0CXy4APMvNXrN9C5nTmTVUMG8EyiCcs48ZcpMBgY98Cncl0Ov7AoL/AM2W8CsFM4y+cJUhRCwmPZh4R9TAZWPsXrT4nhyE+eMTUhb9SZPc3dMqLYefMgklUSb+RIcRlYuo3a5x0ZdLPLzvD77e9saTwbe7ycP1qN+7HO86zXg+B3/VNcqpb1+068RVWh077r2nbpvbuB644f6qdzPaAUDqk6l6ZZe2N1lDf2OCujdcSlwVJ9ArJyPWDaSvGMoZdq9Z4sb2v4u6Iaocdk4a4si/ifE14ntvNJi44euuN+j9vtnpThrnu7hRfzz8NrrYx/quuAN+uLnr394M+sEO6rBlSdu8R+/NBWeNqFMHDpXL6CC4HOKrYr8BryAVZecFkH/9ZdAzsbDn208Rm8FTZBb5bMYpcvIp9ucV6xvBoTkMJ3SW8613TsjpQOUWwfBkYphcG41Ne1sXUyZygQh3xc7fjgKr28DDpXQf3zz6H1t9QEo=" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "true" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Worker" }, { "key": "node-group-roles", "value": "PRIMARY_WORKER" } ], "kind": "compute#metadata" }, "name": "test-best-practices-enabled-w-1", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.12", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances/test-best-practices-enabled-w-1", "serviceAccounts": [ { "email": "saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances" } ================================================ FILE: test-data/dataproc1/json-dumps/compute-instances-us-central1-c.json ================================================ { "id": "projects/gcpdiag-dataproc1-aaaa/zones/us-central1-c/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-c/instances" } ================================================ FILE: test-data/dataproc1/json-dumps/compute-instances-us-central1-f.json ================================================ { "id": "projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances", "items": [ { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:32:54.062-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/good-m", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "7985437924094067850", "kind": "compute#instance", "labelFingerprint": "i07p_VesMMc=", "labels": { "goog-dataproc-autozone": "enabled", "goog-dataproc-cluster-name": "good", "goog-dataproc-cluster-uuid": "ae0a9260-f4a1-49ad-9593-8451a2536e59", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:06.277-07:00", "lastStopTimestamp": "2024-10-30T23:19:32.290-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/" }, { "key": "dataproc-cluster-name", "value": "good" }, { "key": "dataproc-cluster-uuid", "value": "ae0a9260-f4a1-49ad-9593-8451a2536e59" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "good-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/good-m" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSqU0zzMzHj+eGefLBc+1oeo4UzKjyjCqj778TZPjcWyOO63joNXvBP1ucHx/+QBfgpOjmGQkZmaNdLykSc6peuyviUrx5juuIFhRLXMVUxQTHuecGKlCqRbYPl9SvCSJlBl27NwwvsHjSylYSlIzKf9xseG/z7+UBid0TnJusFQJVSxdoExyFq/DOWFgTSr62J9rvNB4xmX8hDX7RcN25yRon54GZ1sAQQ1JiCHgwIZPUzLjFOxwTUtcuSKtefk0wZBYI2PJdfhwG63av7nfuPoMjqxBwMSPfbKgqcE6I+oJJ4qtYCVUZLCMH0SFRuW0jhVgmAmi1lOZ8nUZxMvz6i9MngkzKKXP6FmqJ6o00lStGOyJogumjSKGybSZHxf6QEtKuFliWAinsUGxFJlMIV6UyoSilAiqd2PcswH5UyzWGyN22wp+9aRM2kFLxlixZFKVRkhs2Ap2vJlYxauRkUjIlIGW/KlYJnN9bK367aQ6VuvM2H1dscTuUSGDZs+pUZKjjJOUooRCJIJpDZ5Ai4cXXLBxGbGllEHDIWJvphuinzBLV4SzxK0SvkAe4TsWjHOmw26r1TpoQdH/cqrNx8iQYAqyTfIiz7COOOz5eSA2ZWaUGCyI3W88d57TeO1YnQOkQuk7JNT2kX7IGa7EV+b4ZXVFhD5aGVYMapQCCMxgK0EQB1hJaDj5Npp+HV6NJ8NpNJz8dXMxjLxmSs/2DBRl0P4lSAqlQOHyyB3QV00ZVaXbPk0fYeo1rE+8w4DNo1vA+31rQ+Knqt7VS6qHZtOzUDLP7N7INIH61+hig30pK412ofXNpYLEw7mqVgDCNjTdBNV8yF4ajyA/oTKmca6ULY2QFDgbhymCCqnWKNfgpIXPfYRS0h8UnFN0Coou6ycmuZFWXq+UoA3HiVMQZvfWxWk7GnXO0da2fcqEWULzX0qe4Cc2C3vdbqf3Xktljj4TTGni88F8JooD7u1RW4I2gYShly2a26ZmIuNszmAK0XF9s3eB7uRyuUBksYBeSDwrAIdx9tgXwADl2mNCMhhMVgTLzOgQ/SN+dk97ogFYrBGLWXjaO/Ngyo832avMbpksBi9E09Vj/3pwOR7fTy8HD4PR+HI4Hd8/RIXBdiCObHuHgwUTnV2/2waSJJBwDWfP/Tz2z896PR9waUzmRZ80obUX3vXBWRZ7wac1sJ2zCtskTdyoK/PUhEHLiwH/yGPxtBGtvfC2Dw66oqAo2I4s3rAWUiZIPPbPWl2vj03RbozNbuUhnjfK3rmfWMxK2+lqNwTnsA3raR8VCtyS2B/jr9Prm+hhPPluq+5wMr0eDu6jm3+H4APuSgWlLl43b5BMh+cND8s/NZfP0BiVcZMrp4YmjgbtofsqU4dt//OqZCjIJRRcGIrgK4WOQGCh+5eyF+4qwEuNrwt6BEmi6pauKE9mkSGGRtZMVOTO49me/jjL8cpekPzB7VeSdqfdFg3Il3Pf7nV8WSw/ak6DZtS236AXBD6/eyWnE5yeeXDFmC2xhouJhQXd3gblaizJ6pmFadjeBkCbqGHpftLmmgxrRHuJPcCpEufumYWao/vB5E+ol8O78Wh6B78n351+RQGCRlLcSTd3ymRlJ6UE5pC5nbMZN7t910+sRiodwroxnK4FtwqUeVJee+tz2GXJuivmsduS22Ba/8dB5Sy9gELBbP+aUHfhf0tYlgt3f+jKiqQQRK6XiXxO30qFvWOC/QJfNgA8z/Ve+3wLmdO50VQwZwTqHZyzjxmyvZ7ARz6D6w/o9X0BwX+AZkr4lYSpRF3YyuAjFrMbzLATquH+ENl3J67LemHu+PiURX/SOLdXr0rL/qcshZKYxu5E+xGVi6DbbXAxTFd4fD8cfb0dRNPRt7vpw/VkOLiMdp1mPF+Av+pmZNW3L9pN4iqtRpZ776jb5moDvx3XrwY3kx0ApD6eyVd2aXuTFTQyJqh9aSXFVXECnXIyYuyI+YqhnGH75iRsbf+7qBuiymHvpCWO3MsVVyO+DyajqR2n7gajwe/1TnfSOt/FTYbR+NvkYh/ruuIO+OHmbnh7Mxp6O6jFliWtfjXeGwDOWkGvCewrl8FBcDmWV8W+Bq8gFWXnnY57o6XRMzGw59tPEZvDU6SX+XzOKbLyKfbnFeu14NBCkZjOc771GglZHcjcIJiSdAizaKtVt7d11WQiF4hwW+zcfcezuhoerpn7+PbR/3KYLus=" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "false" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Master" }, { "key": "node-group-roles", "value": "MASTER" } ], "kind": "compute#metadata" }, "name": "good-m", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.7", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/good-m", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:32:54.823-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/good-w-0", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4718619462986581130", "kind": "compute#instance", "labelFingerprint": "i07p_VesMMc=", "labels": { "goog-dataproc-autozone": "enabled", "goog-dataproc-cluster-name": "good", "goog-dataproc-cluster-uuid": "ae0a9260-f4a1-49ad-9593-8451a2536e59", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:06.358-07:00", "lastStopTimestamp": "2024-10-30T23:19:27.106-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/" }, { "key": "dataproc-cluster-name", "value": "good" }, { "key": "dataproc-cluster-uuid", "value": "ae0a9260-f4a1-49ad-9593-8451a2536e59" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "good-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/good-w-0" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSqU0zzMzHj+eGefLBc+1oeo4UzKjyjCqj778TZPjcWyOO63joNXvBP1ucHx/+QBfgpOjmGQkZmaNdLykSc6peuyviUrx5juuIFhRLXMVUxQTHuecGKlCqRbYPl9SvCSJlBl27NwwvsHjSylYSlIzKf9xseG/z7+UBid0TnJusFQJVSxdoExyFq/DOWFgTSr62J9rvNB4xmX8hDX7RcN25yRon54GZ1sAQQ1JiCHgwIZPUzLjFOxwTUtcuSKtefk0wZBYI2PJdfhwG63av7nfuPoMjqxBwMSPfbKgqcE6I+oJJ4qtYCVUZLCMH0SFRuW0jhVgmAmi1lOZ8nUZxMvz6i9MngkzKKXP6FmqJ6o00lStGOyJogumjSKGybSZHxf6QEtKuFliWAinsUGxFJlMIV6UyoSilAiqd2PcswH5UyzWGyN22wp+9aRM2kFLxlixZFKVRkhs2Ap2vJlYxauRkUjIlIGW/KlYJnN9bK367aQ6VuvM2H1dscTuUSGDZs+pUZKjjJOUooRCJIJpDZ5Ai4cXXLBxGbGllEHDIWJvphuinzBLV4SzxK0SvkAe4TsWjHOmw26r1TpoQdH/cqrNx8iQYAqyTfIiz7COOOz5eSA2ZWaUGCyI3W88d57TeO1YnQOkQuk7JNT2kX7IGa7EV+b4ZXVFhD5aGVYMapQCCMxgK0EQB1hJaDj5Npp+HV6NJ8NpNJz8dXMxjLxmSs/2DBRl0P4lSAqlQOHyyB3QV00ZVaXbPk0fYeo1rE+8w4DNo1vA+31rQ+Knqt7VS6qHZtOzUDLP7N7INIH61+hig30pK412ofXNpYLEw7mqVgDCNjTdBNV8yF4ajyA/oTKmca6ULY2QFDgbhymCCqnWKNfgpIXPfYRS0h8UnFN0Coou6ycmuZFWXq+UoA3HiVMQZvfWxWk7GnXO0da2fcqEWULzX0qe4Cc2C3vdbqf3Xktljj4TTGni88F8JooD7u1RW4I2gYShly2a26ZmIuNszmAK0XF9s3eB7uRyuUBksYBeSDwrAIdx9tgXwADl2mNCMhhMVgTLzOgQ/SN+dk97ogFYrBGLWXjaO/Ngyo832avMbpksBi9E09Vj/3pwOR7fTy8HD4PR+HI4Hd8/RIXBdiCObHuHgwUTnV2/2waSJJBwDWfP/Tz2z896PR9waUzmRZ80obUX3vXBWRZ7wac1sJ2zCtskTdyoK/PUhEHLiwH/yGPxtBGtvfC2Dw66oqAo2I4s3rAWUiZIPPbPWl2vj03RbozNbuUhnjfK3rmfWMxK2+lqNwTnsA3raR8VCtyS2B/jr9Prm+hhPPluq+5wMr0eDu6jm3+H4APuSgWlLl43b5BMh+cND8s/NZfP0BiVcZMrp4YmjgbtofsqU4dt//OqZCjIJRRcGIrgK4WOQGCh+5eyF+4qwEuNrwt6BEmi6pauKE9mkSGGRtZMVOTO49me/jjL8cpekPzB7VeSdqfdFg3Il3Pf7nV8WSw/ak6DZtS236AXBD6/eyWnE5yeeXDFmC2xhouJhQXd3gblaizJ6pmFadjeBkCbqGHpftLmmgxrRHuJPcCpEufumYWao/vB5E+ol8O78Wh6B78n351+RQGCRlLcSTd3ymRlJ6UE5pC5nbMZN7t910+sRiodwroxnK4FtwqUeVJee+tz2GXJuivmsduS22Ba/8dB5Sy9gELBbP+aUHfhf0tYlgt3f+jKiqQQRK6XiXxO30qFvWOC/QJfNgA8z/Ve+3wLmdO50VQwZwTqHZyzjxmyvZ7ARz6D6w/o9X0BwX+AZkr4lYSpRF3YyuAjFrMbzLATquH+ENl3J67LemHu+PiURX/SOLdXr0rL/qcshZKYxu5E+xGVi6DbbXAxTFd4fD8cfb0dRNPRt7vpw/VkOLiMdp1mPF+Av+pmZNW3L9pN4iqtRpZ776jb5moDvx3XrwY3kx0ApD6eyVd2aXuTFTQyJqh9aSXFVXECnXIyYuyI+YqhnGH75iRsbf+7qBuiymHvpCWO3MsVVyO+DyajqR2n7gajwe/1TnfSOt/FTYbR+NvkYh/ruuIO+OHmbnh7Mxp6O6jFliWtfjXeGwDOWkGvCewrl8FBcDmWV8W+Bq8gFWXnnY57o6XRMzGw59tPEZvDU6SX+XzOKbLyKfbnFeu14NBCkZjOc771GglZHcjcIJiSdAizaKtVt7d11WQiF4hwW+zcfcezuhoerpn7+PbR/3KYLus=" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "true" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Worker" }, { "key": "node-group-roles", "value": "PRIMARY_WORKER" } ], "kind": "compute#metadata" }, "name": "good-w-0", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.10", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/good-w-0", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:32:54.051-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/good-w-1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "7950912623326741642", "kind": "compute#instance", "labelFingerprint": "i07p_VesMMc=", "labels": { "goog-dataproc-autozone": "enabled", "goog-dataproc-cluster-name": "good", "goog-dataproc-cluster-uuid": "ae0a9260-f4a1-49ad-9593-8451a2536e59", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:05.323-07:00", "lastStopTimestamp": "2024-10-30T23:19:27.078-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/" }, { "key": "dataproc-cluster-name", "value": "good" }, { "key": "dataproc-cluster-uuid", "value": "ae0a9260-f4a1-49ad-9593-8451a2536e59" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "good-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/good-w-1" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSqU0zzMzHj+eGefLBc+1oeo4UzKjyjCqj778TZPjcWyOO63joNXvBP1ucHx/+QBfgpOjmGQkZmaNdLykSc6peuyviUrx5juuIFhRLXMVUxQTHuecGKlCqRbYPl9SvCSJlBl27NwwvsHjSylYSlIzKf9xseG/z7+UBid0TnJusFQJVSxdoExyFq/DOWFgTSr62J9rvNB4xmX8hDX7RcN25yRon54GZ1sAQQ1JiCHgwIZPUzLjFOxwTUtcuSKtefk0wZBYI2PJdfhwG63av7nfuPoMjqxBwMSPfbKgqcE6I+oJJ4qtYCVUZLCMH0SFRuW0jhVgmAmi1lOZ8nUZxMvz6i9MngkzKKXP6FmqJ6o00lStGOyJogumjSKGybSZHxf6QEtKuFliWAinsUGxFJlMIV6UyoSilAiqd2PcswH5UyzWGyN22wp+9aRM2kFLxlixZFKVRkhs2Ap2vJlYxauRkUjIlIGW/KlYJnN9bK367aQ6VuvM2H1dscTuUSGDZs+pUZKjjJOUooRCJIJpDZ5Ai4cXXLBxGbGllEHDIWJvphuinzBLV4SzxK0SvkAe4TsWjHOmw26r1TpoQdH/cqrNx8iQYAqyTfIiz7COOOz5eSA2ZWaUGCyI3W88d57TeO1YnQOkQuk7JNT2kX7IGa7EV+b4ZXVFhD5aGVYMapQCCMxgK0EQB1hJaDj5Npp+HV6NJ8NpNJz8dXMxjLxmSs/2DBRl0P4lSAqlQOHyyB3QV00ZVaXbPk0fYeo1rE+8w4DNo1vA+31rQ+Knqt7VS6qHZtOzUDLP7N7INIH61+hig30pK412ofXNpYLEw7mqVgDCNjTdBNV8yF4ajyA/oTKmca6ULY2QFDgbhymCCqnWKNfgpIXPfYRS0h8UnFN0Coou6ycmuZFWXq+UoA3HiVMQZvfWxWk7GnXO0da2fcqEWULzX0qe4Cc2C3vdbqf3Xktljj4TTGni88F8JooD7u1RW4I2gYShly2a26ZmIuNszmAK0XF9s3eB7uRyuUBksYBeSDwrAIdx9tgXwADl2mNCMhhMVgTLzOgQ/SN+dk97ogFYrBGLWXjaO/Ngyo832avMbpksBi9E09Vj/3pwOR7fTy8HD4PR+HI4Hd8/RIXBdiCObHuHgwUTnV2/2waSJJBwDWfP/Tz2z896PR9waUzmRZ80obUX3vXBWRZ7wac1sJ2zCtskTdyoK/PUhEHLiwH/yGPxtBGtvfC2Dw66oqAo2I4s3rAWUiZIPPbPWl2vj03RbozNbuUhnjfK3rmfWMxK2+lqNwTnsA3raR8VCtyS2B/jr9Prm+hhPPluq+5wMr0eDu6jm3+H4APuSgWlLl43b5BMh+cND8s/NZfP0BiVcZMrp4YmjgbtofsqU4dt//OqZCjIJRRcGIrgK4WOQGCh+5eyF+4qwEuNrwt6BEmi6pauKE9mkSGGRtZMVOTO49me/jjL8cpekPzB7VeSdqfdFg3Il3Pf7nV8WSw/ak6DZtS236AXBD6/eyWnE5yeeXDFmC2xhouJhQXd3gblaizJ6pmFadjeBkCbqGHpftLmmgxrRHuJPcCpEufumYWao/vB5E+ol8O78Wh6B78n351+RQGCRlLcSTd3ymRlJ6UE5pC5nbMZN7t910+sRiodwroxnK4FtwqUeVJee+tz2GXJuivmsduS22Ba/8dB5Sy9gELBbP+aUHfhf0tYlgt3f+jKiqQQRK6XiXxO30qFvWOC/QJfNgA8z/Ve+3wLmdO50VQwZwTqHZyzjxmyvZ7ARz6D6w/o9X0BwX+AZkr4lYSpRF3YyuAjFrMbzLATquH+ENl3J67LemHu+PiURX/SOLdXr0rL/qcshZKYxu5E+xGVi6DbbXAxTFd4fD8cfb0dRNPRt7vpw/VkOLiMdp1mPF+Av+pmZNW3L9pN4iqtRpZ776jb5moDvx3XrwY3kx0ApD6eyVd2aXuTFTQyJqh9aSXFVXECnXIyYuyI+YqhnGH75iRsbf+7qBuiymHvpCWO3MsVVyO+DyajqR2n7gajwe/1TnfSOt/FTYbR+NvkYh/ruuIO+OHmbnh7Mxp6O6jFliWtfjXeGwDOWkGvCewrl8FBcDmWV8W+Bq8gFWXnnY57o6XRMzGw59tPEZvDU6SX+XzOKbLyKfbnFeu14NBCkZjOc771GglZHcjcIJiSdAizaKtVt7d11WQiF4hwW+zcfcezuhoerpn7+PbR/3KYLus=" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "true" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Worker" }, { "key": "node-group-roles", "value": "PRIMARY_WORKER" } ], "kind": "compute#metadata" }, "name": "good-w-1", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.6", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/good-w-1", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:32:53.664-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/test-best-practices-disabled-m", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "5758764777191982218", "kind": "compute#instance", "labelFingerprint": "PykIPoZ7O6s=", "labels": { "goog-dataproc-autozone": "enabled", "goog-dataproc-cluster-name": "test-best-practices-disabled", "goog-dataproc-cluster-uuid": "fa7689da-2c32-4258-af4b-571af491f0bd", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:05.720-07:00", "lastStopTimestamp": "2024-10-30T23:19:32.422-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/" }, { "key": "dataproc-cluster-name", "value": "test-best-practices-disabled" }, { "key": "dataproc-cluster-uuid", "value": "fa7689da-2c32-4258-af4b-571af491f0bd" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-best-practices-disabled-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/test-best-practices-disabled-m" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSkDq55kZj2fGM/lywXNtqDrOlMyoMozqoy9/0+R4HJvjTus4aPU7Qb8bHN9fPsBDcHIUk4zEzKyRjpc0yTlVj/01USnePOMKghXVMlcxRTHhcc6JkSqUaoHt+pLiJUmkzLBj54bxDR5fSsFSkppJ+Y+LDf99+qU0OKFzknODpUqoYukCZZKzeB3OCQNpUtHH/lzjhcYzLuMnrNkvGrY7J0H79DQ42wIIakhCDAEF1nyakhmnIIdrWuLKHWnNy9UEg2ONjCXX4cNttGr/5j5x9R0cWYGAiR/7ZEFTg3VG1BNOFFvBTqjIYBs/iAqNymkdK0AwE0StpzLl69KIl/XqFybPhBmU0mf0LNUTVRppqlYMzkTRBdNGEcNk2syPi/hAS0q4WWLYCKexQbEUmUzBXpTKhKKUCKp3bdyTAf5TLNYbIfbYCn61UjrtoCRjbLBkUpVCSGzYCk68mVjZq5GRSMiUQSz5XbFM5vrYSvXLSXWs1pmx57piiT2jIgyaNadGSY4yTlKKEgqWCKY1aIJYPLzhgo1Liy2lNBqSiL2Zboh+wixdEc4St0t4AD/CMxaMc6bDbqvVOihB0f9yqs3HyOBgCmGb5IWfYR9x2PPzINiUmVFisCD2vPHcaU7jtWN1DpCKSN8hobaP9EPOcBV8pY9fdldY6KNxuVi4szAkfqpytV4OPJxyKzFEsBSghBlswxYCCjQnNJx8G02/Dq/Gk+E0Gk7+urkYRl4xpbU2b4rSaX8JkkL5ULhM0wMxWYumqjpuZ+BHmHoN+xPvEGB97zbwft3v8bt1z0LJPLPnKdMEamajig32pRQ1yoXrci4VOB5ysdoBJIOh6cao5sR8uawE+QnVNI1zpWw5BadAPh2mCCqkWqNcg5IWPvcRyjT4YMC5LEghC8qai0lupA2vV8rWhuOCUxBmz9bZaW9B6pSjrWP7lAizhIZhKXmCn9gs7HW7nd57JZU++owxpYjPG/MZKw6ot6m2hNgEEob7b9F81WomMs7mDDoXHdcPexfoMhfqICKLBdyfxLMDUBhnj30BDIhcmyYkg2ZmRbDMjA7RP+Jn97QnGoDFHrGYhae9Mw+m/HqTvErslsiiWUM0XT32rweX4/H99HLwMBiNL4fT8f1DVAhsB+LItgSQWNAF2v27YyBJAg7XkHvu77F/ftbr+YBLYzIv+qQJrb3wrg/OstgLPq2BbW9WyCZp4tpjmacmDFpeDOhHHomnjWjthbd9cIgrChEFx5HFG5aBhgLN7EembHmKqUZwgC6OkHjsn7W6Xt2bYt5osz3iQzyv9b1zP7Hou7bd2G4wzmHfuc/2URGxWyH5x/jr9PomehhPvtsqPZxMr4eD++jm3yHohnmsoNSD3fU0JNPhecNi+VNz+QwXqTKuO+bU0MTR4DrpvsrUYdu/XpUYBT6GAg2NFzxSuEEIOGB/8HvhrgK81Pi6oEfgPKpu6YryZBYZYmhkxUSFTz2abbWIsxyv7BDmN26/8rQ77bZoQL7UiXav4/Ni+VVTGjSjtvUGvSDw6d0rUZ3g9MyDK1p5iTUMPxYWdHsblKvJJKt7FjpuO3FAzKKGrftJm1Ec9oj2HHuAUznOzbJFNEf3g8mfUF+Hd+PR9A4+J99d/IoCBBdPMfdu5tZkZTurBPqWue3lGTe797SfWLVgOoR944WUC24jUOZJOVrX+7bLknVX9G+3JbdBtP6PQ5Sz9AIKCLP33YS6lwpvMctyuYQbFSuSghG5XibyOX0rFc6OCfYLdFkD8DzXe9ftW8iczo2mgjkhUAchzz4myPYGBL7yGYxYEK/vMwj+AzRTwq8kdDHqwlYGH7Ho9aDnnVAN80Zk38+4W9kLc+njiyz6k8a5He+qWPavshRKYhq7jPYjKhVBt9ugYpiu8Ph+OPp6O4imo29304fryXBwGe0qzXgOU6SuJikbfftBu3FcFauR5d476ra42oBg2/urwc1kBwCuj2fylVPaPmQFFxwT1L4Yk+KqyEAXORkxtiV9RVDOsH07E7a2/13UDVH5sHfSEkfuBY6rEd8Hk9HUtl93g9Hg9/pNd9I638VNhtH42+RiH+tuxR3ww83d8PZmNPTeoBZblrT6KL3XGJy1gl4T2Fcug4Pgso2vin0NXkEqys57I/fWTKNnYuDMt1cRm8Mq0st8PucU2fApzucV6TXj0AK6EzrP+darKmTjQOYGQfekQ+hdW626vK3RlIlcIMJtsXPzkWd3NTyMpfv49tH/nIpVbQ==" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "false" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Master" }, { "key": "node-group-roles", "value": "MASTER" } ], "kind": "compute#metadata" }, "name": "test-best-practices-disabled-m", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.5", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/test-best-practices-disabled-m", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:32:54.642-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/test-best-practices-disabled-w-0", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "7719999315884590218", "kind": "compute#instance", "labelFingerprint": "PykIPoZ7O6s=", "labels": { "goog-dataproc-autozone": "enabled", "goog-dataproc-cluster-name": "test-best-practices-disabled", "goog-dataproc-cluster-uuid": "fa7689da-2c32-4258-af4b-571af491f0bd", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:05.562-07:00", "lastStopTimestamp": "2024-10-30T23:19:27.444-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/" }, { "key": "dataproc-cluster-name", "value": "test-best-practices-disabled" }, { "key": "dataproc-cluster-uuid", "value": "fa7689da-2c32-4258-af4b-571af491f0bd" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-best-practices-disabled-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/test-best-practices-disabled-w-0" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSkDq55kZj2fGM/lywXNtqDrOlMyoMozqoy9/0+R4HJvjTus4aPU7Qb8bHN9fPsBDcHIUk4zEzKyRjpc0yTlVj/01USnePOMKghXVMlcxRTHhcc6JkSqUaoHt+pLiJUmkzLBj54bxDR5fSsFSkppJ+Y+LDf99+qU0OKFzknODpUqoYukCZZKzeB3OCQNpUtHH/lzjhcYzLuMnrNkvGrY7J0H79DQ42wIIakhCDAEF1nyakhmnIIdrWuLKHWnNy9UEg2ONjCXX4cNttGr/5j5x9R0cWYGAiR/7ZEFTg3VG1BNOFFvBTqjIYBs/iAqNymkdK0AwE0StpzLl69KIl/XqFybPhBmU0mf0LNUTVRppqlYMzkTRBdNGEcNk2syPi/hAS0q4WWLYCKexQbEUmUzBXpTKhKKUCKp3bdyTAf5TLNYbIfbYCn61UjrtoCRjbLBkUpVCSGzYCk68mVjZq5GRSMiUQSz5XbFM5vrYSvXLSXWs1pmx57piiT2jIgyaNadGSY4yTlKKEgqWCKY1aIJYPLzhgo1Liy2lNBqSiL2Zboh+wixdEc4St0t4AD/CMxaMc6bDbqvVOihB0f9yqs3HyOBgCmGb5IWfYR9x2PPzINiUmVFisCD2vPHcaU7jtWN1DpCKSN8hobaP9EPOcBV8pY9fdldY6KNxuVi4szAkfqpytV4OPJxyKzFEsBSghBlswxYCCjQnNJx8G02/Dq/Gk+E0Gk7+urkYRl4xpbU2b4rSaX8JkkL5ULhM0wMxWYumqjpuZ+BHmHoN+xPvEGB97zbwft3v8bt1z0LJPLPnKdMEamajig32pRQ1yoXrci4VOB5ysdoBJIOh6cao5sR8uawE+QnVNI1zpWw5BadAPh2mCCqkWqNcg5IWPvcRyjT4YMC5LEghC8qai0lupA2vV8rWhuOCUxBmz9bZaW9B6pSjrWP7lAizhIZhKXmCn9gs7HW7nd57JZU++owxpYjPG/MZKw6ot6m2hNgEEob7b9F81WomMs7mDDoXHdcPexfoMhfqICKLBdyfxLMDUBhnj30BDIhcmyYkg2ZmRbDMjA7RP+Jn97QnGoDFHrGYhae9Mw+m/HqTvErslsiiWUM0XT32rweX4/H99HLwMBiNL4fT8f1DVAhsB+LItgSQWNAF2v27YyBJAg7XkHvu77F/ftbr+YBLYzIv+qQJrb3wrg/OstgLPq2BbW9WyCZp4tpjmacmDFpeDOhHHomnjWjthbd9cIgrChEFx5HFG5aBhgLN7EembHmKqUZwgC6OkHjsn7W6Xt2bYt5osz3iQzyv9b1zP7Hou7bd2G4wzmHfuc/2URGxWyH5x/jr9PomehhPvtsqPZxMr4eD++jm3yHohnmsoNSD3fU0JNPhecNi+VNz+QwXqTKuO+bU0MTR4DrpvsrUYdu/XpUYBT6GAg2NFzxSuEEIOGB/8HvhrgK81Pi6oEfgPKpu6YryZBYZYmhkxUSFTz2abbWIsxyv7BDmN26/8rQ77bZoQL7UiXav4/Ni+VVTGjSjtvUGvSDw6d0rUZ3g9MyDK1p5iTUMPxYWdHsblKvJJKt7FjpuO3FAzKKGrftJm1Ec9oj2HHuAUznOzbJFNEf3g8mfUF+Hd+PR9A4+J99d/IoCBBdPMfdu5tZkZTurBPqWue3lGTe797SfWLVgOoR944WUC24jUOZJOVrX+7bLknVX9G+3JbdBtP6PQ5Sz9AIKCLP33YS6lwpvMctyuYQbFSuSghG5XibyOX0rFc6OCfYLdFkD8DzXe9ftW8iczo2mgjkhUAchzz4myPYGBL7yGYxYEK/vMwj+AzRTwq8kdDHqwlYGH7Ho9aDnnVAN80Zk38+4W9kLc+njiyz6k8a5He+qWPavshRKYhq7jPYjKhVBt9ugYpiu8Ph+OPp6O4imo29304fryXBwGe0qzXgOU6SuJikbfftBu3FcFauR5d476ra42oBg2/urwc1kBwCuj2fylVPaPmQFFxwT1L4Yk+KqyEAXORkxtiV9RVDOsH07E7a2/13UDVH5sHfSEkfuBY6rEd8Hk9HUtl93g9Hg9/pNd9I638VNhtH42+RiH+tuxR3ww83d8PZmNPTeoBZblrT6KL3XGJy1gl4T2Fcug4Pgso2vin0NXkEqys57I/fWTKNnYuDMt1cRm8Mq0st8PucU2fApzucV6TXj0AK6EzrP+darKmTjQOYGQfekQ+hdW626vK3RlIlcIMJtsXPzkWd3NTyMpfv49tH/nIpVbQ==" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "true" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Worker" }, { "key": "node-group-roles", "value": "PRIMARY_WORKER" } ], "kind": "compute#metadata" }, "name": "test-best-practices-disabled-w-0", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.8", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/test-best-practices-disabled-w-0", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f" }, { "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2024-10-30T20:32:54.720-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "30", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/test-best-practices-disabled-w-1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "7331144418697626762", "kind": "compute#instance", "labelFingerprint": "PykIPoZ7O6s=", "labels": { "goog-dataproc-autozone": "enabled", "goog-dataproc-cluster-name": "test-best-practices-disabled", "goog-dataproc-cluster-uuid": "fa7689da-2c32-4258-af4b-571af491f0bd", "goog-dataproc-location": "us-central1" }, "lastStartTimestamp": "2024-10-30T20:33:07.665-07:00", "lastStopTimestamp": "2024-10-30T23:19:22.404-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "dataproc-bucket", "value": "dataproc-staging-us-central1-12340005-9v6173vh" }, { "key": "dataproc-cloud-logging-enabled", "value": "false" }, { "key": "dataproc-cluster-configuration-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/" }, { "key": "dataproc-cluster-name", "value": "test-best-practices-disabled" }, { "key": "dataproc-cluster-uuid", "value": "fa7689da-2c32-4258-af4b-571af491f0bd" }, { "key": "dataproc-exclude-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_exclude.xml" }, { "key": "dataproc-include-file-location", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_include" }, { "key": "dataproc-initialization-script-count", "value": "0" }, { "key": "dataproc-master", "value": "test-best-practices-disabled-m" }, { "key": "dataproc-master-additional", "value": "" }, { "key": "dataproc-region", "value": "us-central1" }, { "key": "dataproc-temp-bucket", "value": "dataproc-temp-us-central1-12340005-xslkmij6" }, { "key": "dataproc-worker-agent-runner-daemon-timeout", "value": "60" }, { "key": "dataproc-worker-count", "value": "2" }, { "key": "has-driver-pool", "value": "false" }, { "key": "master-run-driver-location", "value": "LOCAL" }, { "key": "dataproc-agent-output-directory", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/test-best-practices-disabled-w-1" }, { "key": "dataproc-cluster-properties", "value": "ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSkDq55kZj2fGM/lywXNtqDrOlMyoMozqoy9/0+R4HJvjTus4aPU7Qb8bHN9fPsBDcHIUk4zEzKyRjpc0yTlVj/01USnePOMKghXVMlcxRTHhcc6JkSqUaoHt+pLiJUmkzLBj54bxDR5fSsFSkppJ+Y+LDf99+qU0OKFzknODpUqoYukCZZKzeB3OCQNpUtHH/lzjhcYzLuMnrNkvGrY7J0H79DQ42wIIakhCDAEF1nyakhmnIIdrWuLKHWnNy9UEg2ONjCXX4cNttGr/5j5x9R0cWYGAiR/7ZEFTg3VG1BNOFFvBTqjIYBs/iAqNymkdK0AwE0StpzLl69KIl/XqFybPhBmU0mf0LNUTVRppqlYMzkTRBdNGEcNk2syPi/hAS0q4WWLYCKexQbEUmUzBXpTKhKKUCKp3bdyTAf5TLNYbIfbYCn61UjrtoCRjbLBkUpVCSGzYCk68mVjZq5GRSMiUQSz5XbFM5vrYSvXLSXWs1pmx57piiT2jIgyaNadGSY4yTlKKEgqWCKY1aIJYPLzhgo1Liy2lNBqSiL2Zboh+wixdEc4St0t4AD/CMxaMc6bDbqvVOihB0f9yqs3HyOBgCmGb5IWfYR9x2PPzINiUmVFisCD2vPHcaU7jtWN1DpCKSN8hobaP9EPOcBV8pY9fdldY6KNxuVi4szAkfqpytV4OPJxyKzFEsBSghBlswxYCCjQnNJx8G02/Dq/Gk+E0Gk7+urkYRl4xpbU2b4rSaX8JkkL5ULhM0wMxWYumqjpuZ+BHmHoN+xPvEGB97zbwft3v8bt1z0LJPLPnKdMEamajig32pRQ1yoXrci4VOB5ysdoBJIOh6cao5sR8uawE+QnVNI1zpWw5BadAPh2mCCqkWqNcg5IWPvcRyjT4YMC5LEghC8qai0lupA2vV8rWhuOCUxBmz9bZaW9B6pSjrWP7lAizhIZhKXmCn9gs7HW7nd57JZU++owxpYjPG/MZKw6ot6m2hNgEEob7b9F81WomMs7mDDoXHdcPexfoMhfqICKLBdyfxLMDUBhnj30BDIhcmyYkg2ZmRbDMjA7RP+Jn97QnGoDFHrGYhae9Mw+m/HqTvErslsiiWUM0XT32rweX4/H99HLwMBiNL4fT8f1DVAhsB+LItgSQWNAF2v27YyBJAg7XkHvu77F/ftbr+YBLYzIv+qQJrb3wrg/OstgLPq2BbW9WyCZp4tpjmacmDFpeDOhHHomnjWjthbd9cIgrChEFx5HFG5aBhgLN7EembHmKqUZwgC6OkHjsn7W6Xt2bYt5osz3iQzyv9b1zP7Hou7bd2G4wzmHfuc/2URGxWyH5x/jr9PomehhPvtsqPZxMr4eD++jm3yHohnmsoNSD3fU0JNPhecNi+VNz+QwXqTKuO+bU0MTR4DrpvsrUYdu/XpUYBT6GAg2NFzxSuEEIOGB/8HvhrgK81Pi6oEfgPKpu6YryZBYZYmhkxUSFTz2abbWIsxyv7BDmN26/8rQ77bZoQL7UiXav4/Ni+VVTGjSjtvUGvSDw6d0rUZ3g9MyDK1p5iTUMPxYWdHsblKvJJKt7FjpuO3FAzKKGrftJm1Ec9oj2HHuAUznOzbJFNEf3g8mfUF+Hd+PR9A4+J99d/IoCBBdPMfdu5tZkZTurBPqWue3lGTe797SfWLVgOoR944WUC24jUOZJOVrX+7bLknVX9G+3JbdBtP6PQ5Sz9AIKCLP33YS6lwpvMctyuYQbFSuSghG5XibyOX0rFc6OCfYLdFkD8DzXe9ftW8iczo2mgjkhUAchzz4myPYGBL7yGYxYEK/vMwj+AzRTwq8kdDHqwlYGH7Ho9aDnnVAN80Zk38+4W9kLc+njiyz6k8a5He+qWPavshRKYhq7jPYjKhVBt9ugYpiu8Ph+OPp6O4imo29304fryXBwGe0qzXgOU6SuJikbfftBu3FcFauR5d476ra42oBg2/urwc1kBwCuj2fylVPaPmQFFxwT1L4Yk+KqyEAXORkxtiV9RVDOsH07E7a2/13UDVH5sHfSEkfuBY6rEd8Hk9HUtl93g9Hg9/pNd9I638VNhtH42+RiH+tuxR3ww83d8PZmNPTeoBZblrT6KL3XGJy1gl4T2Fcug4Pgso2vin0NXkEqys57I/fWTKNnYuDMt1cRm8Mq0st8PucU2fApzucV6TXj0AK6EzrP+darKmTjQOYGQfekQ+hdW626vK3RlIlcIMJtsXPzkWd3NTyMpfv49tH/nIpVbQ==" }, { "key": "dataproc-cluster-properties-file", "value": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/cluster.properties" }, { "key": "dataproc-datanode-enabled", "value": "true" }, { "key": "dataproc-option-run-init-actions-early", "value": "true" }, { "key": "dataproc-protocol-spec", "value": "EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t" }, { "key": "dataproc-role", "value": "Worker" }, { "key": "node-group-roles", "value": "PRIMARY_WORKER" } ], "kind": "compute#metadata" }, "name": "test-best-practices-disabled-w-1", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "External NAT", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "networkIP": "10.128.0.9", "nicType": "GVNIC", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/test-best-practices-disabled-w-1", "serviceAccounts": [ { "email": "12340005-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances" } ================================================ FILE: test-data/dataproc1/json-dumps/compute-network-test-bad-network.json ================================================ { "autoCreateSubnetworks": false, "creationTimestamp": "2024-10-30T20:32:48.143-07:00", "description": "VPC network without Dataproc specific firewall rules", "id": "8268092079780873359", "kind": "compute#network", "name": "test-bad-network", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "routingConfig": { "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/8268092079780873359", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet" ] } ================================================ FILE: test-data/dataproc1/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-dataproc1-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1", "description": "africa-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/africa-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/africa-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/africa-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/africa-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast3", "supportsPzs": true }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-southwest1", "supportsPzs": true }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 1000, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10", "description": "europe-west10", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west10-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west10-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west10-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west10", "supportsPzs": true }, { "kind": "compute#region", "id": "1570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12", "description": "europe-west12", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west12-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west12-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west12-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west12", "supportsPzs": true }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west6", "supportsPzs": true }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west8", "supportsPzs": true }, { "kind": "compute#region", "id": "1520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9", "description": "europe-west9", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west9-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west9-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west9-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west9", "supportsPzs": true }, { "kind": "compute#region", "id": "1580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1", "description": "me-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2", "description": "me-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1", "description": "me-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-west1", "supportsPzs": true }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 3270 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 12 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 1000, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 1000, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 1000, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east5", "supportsPzs": true }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 4, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions" } ================================================ FILE: test-data/dataproc1/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-dataproc1-aaaa/aggregated/subnetworks", "items": { "regions/africa-south1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.578-07:00", "fingerprint": "K_TjomHZjl4=", "gatewayAddress": "10.218.0.1", "id": "2036526087303810029", "ipCidrRange": "10.218.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/africa-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.410-07:00", "fingerprint": "rjs1ykuo3tw=", "gatewayAddress": "10.140.0.1", "id": "3951707731790875629", "ipCidrRange": "10.140.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.383-07:00", "fingerprint": "0rDL9-q9GaE=", "gatewayAddress": "10.170.0.1", "id": "1183485530085477357", "ipCidrRange": "10.170.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.413-07:00", "fingerprint": "IhO0OWYpHwc=", "gatewayAddress": "10.146.0.1", "id": "8204009831989726189", "ipCidrRange": "10.146.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.427-07:00", "fingerprint": "eOIJIvzkq0U=", "gatewayAddress": "10.174.0.1", "id": "8390895116147969005", "ipCidrRange": "10.174.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast3": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.457-07:00", "fingerprint": "1ifQDQNTLeo=", "gatewayAddress": "10.178.0.1", "id": "7400179343601650669", "ipCidrRange": "10.178.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.768-07:00", "fingerprint": "aBuFpAtP0lo=", "gatewayAddress": "10.160.0.1", "id": "611661916532591597", "ipCidrRange": "10.160.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.885-07:00", "fingerprint": "pEMV2GosmqE=", "gatewayAddress": "10.190.0.1", "id": "6010033145830657005", "ipCidrRange": "10.190.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.427-07:00", "fingerprint": "RxxAabKP9Hc=", "gatewayAddress": "10.148.0.1", "id": "8664585932786060269", "ipCidrRange": "10.148.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.591-07:00", "fingerprint": "VttTaCLJKp4=", "gatewayAddress": "10.184.0.1", "id": "3500018798798261229", "ipCidrRange": "10.184.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:55.911-07:00", "fingerprint": "SKI1QPTXWkI=", "gatewayAddress": "10.152.0.1", "id": "4147067261302033388", "ipCidrRange": "10.152.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.768-07:00", "fingerprint": "roDvcwyK4o0=", "gatewayAddress": "10.192.0.1", "id": "6144531807641488365", "ipCidrRange": "10.192.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-central2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.230-07:00", "fingerprint": "CzW-IgT2D9c=", "gatewayAddress": "10.186.0.1", "id": "7956940605631712237", "ipCidrRange": "10.186.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.272-07:00", "fingerprint": "zL79HscHFno=", "gatewayAddress": "10.166.0.1", "id": "2647689251940944877", "ipCidrRange": "10.166.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north2": { "subnetworks": [ { "creationTimestamp": "2024-10-31T11:19:42.403-07:00", "fingerprint": "ZYmDX0TlqDE=", "gatewayAddress": "10.226.0.1", "id": "284515129474577617", "ipCidrRange": "10.226.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north2/subnetworks/default" } ] }, "regions/europe-southwest1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.237-07:00", "fingerprint": "u6btqjgh5-w=", "gatewayAddress": "10.204.0.1", "id": "3269305898825108461", "ipCidrRange": "10.204.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-southwest1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.224-07:00", "fingerprint": "FkOS5NL5I4w=", "gatewayAddress": "10.132.0.1", "id": "8179850731144039405", "ipCidrRange": "10.132.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west10": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.251-07:00", "fingerprint": "kB0nmLE2Wbg=", "gatewayAddress": "10.214.0.1", "id": "6379349064262044653", "ipCidrRange": "10.214.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west10/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west12": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.261-07:00", "fingerprint": "9lS_X59YyYs=", "gatewayAddress": "10.210.0.1", "id": "6874450714933808109", "ipCidrRange": "10.210.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west12/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.242-07:00", "fingerprint": "zBIHvxFbsx4=", "gatewayAddress": "10.154.0.1", "id": "3213715802105531373", "ipCidrRange": "10.154.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west3": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.248-07:00", "fingerprint": "iF2usLrfY7s=", "gatewayAddress": "10.156.0.1", "id": "3344984691459443693", "ipCidrRange": "10.156.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west4": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.261-07:00", "fingerprint": "GcAa-AJ5MeA=", "gatewayAddress": "10.164.0.1", "id": "6790712910089767917", "ipCidrRange": "10.164.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west6": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.280-07:00", "fingerprint": "ttRYNmaXVRE=", "gatewayAddress": "10.172.0.1", "id": "644308323726740461", "ipCidrRange": "10.172.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west6/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west8": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.232-07:00", "fingerprint": "y4G90a6rbwI=", "gatewayAddress": "10.198.0.1", "id": "2760645573270785005", "ipCidrRange": "10.198.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west9": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.221-07:00", "fingerprint": "e0_OX9F989g=", "gatewayAddress": "10.200.0.1", "id": "5545354372014099437", "ipCidrRange": "10.200.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west9/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-central1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.984-07:00", "fingerprint": "ymImy2WxDJY=", "gatewayAddress": "10.212.0.1", "id": "3586886990555991021", "ipCidrRange": "10.212.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-central2" } ], "message": "There are no results for scope 'regions/me-central2' on this page." } }, "regions/me-west1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.824-07:00", "fingerprint": "nL9f780Q4D4=", "gatewayAddress": "10.208.0.1", "id": "7957203337371143149", "ipCidrRange": "10.208.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.093-07:00", "fingerprint": "zLDvqvSbnf8=", "gatewayAddress": "10.162.0.1", "id": "4803467985028074477", "ipCidrRange": "10.162.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.194-07:00", "fingerprint": "pXSmxJVG2lg=", "gatewayAddress": "10.188.0.1", "id": "8515223535920040941", "ipCidrRange": "10.188.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-south1": { "subnetworks": [ { "creationTimestamp": "2024-10-31T06:34:58.775-07:00", "fingerprint": "qiunGmbBzvg=", "gatewayAddress": "10.224.0.1", "id": "573987558628669805", "ipCidrRange": "10.224.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-east1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.330-07:00", "fingerprint": "YxKOSMVqxe4=", "gatewayAddress": "10.158.0.1", "id": "5590051289209719789", "ipCidrRange": "10.158.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-west1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:55.991-07:00", "fingerprint": "qEV74lNDNVQ=", "gatewayAddress": "10.194.0.1", "id": "592496428133075948", "ipCidrRange": "10.194.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.091-07:00", "fingerprint": "ep6a2XTTwjo=", "gatewayAddress": "10.128.0.1", "id": "360743471764425709", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default", "stackType": "IPV4_ONLY" }, { "creationTimestamp": "2024-10-30T20:33:01.295-07:00", "enableFlowLogs": false, "fingerprint": "Z7sFiSXz21Q=", "gatewayAddress": "10.128.0.1", "id": "760717609784001666", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "logConfig": { "enable": false }, "name": "test-bad-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.035-07:00", "fingerprint": "aled3BHClzE=", "gatewayAddress": "10.142.0.1", "id": "1399812742043356141", "ipCidrRange": "10.142.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east4": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.051-07:00", "fingerprint": "gFWfnsIodm4=", "gatewayAddress": "10.150.0.1", "id": "2785278774081440749", "ipCidrRange": "10.150.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east5": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.196-07:00", "fingerprint": "kVNcfjD2LRs=", "gatewayAddress": "10.202.0.1", "id": "8813624914319723501", "ipCidrRange": "10.202.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east5/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east7": { "subnetworks": [ { "creationTimestamp": "2024-10-31T00:19:52.943-07:00", "fingerprint": "Wn-jOZomxFk=", "gatewayAddress": "10.196.0.1", "id": "6483456266903392631", "ipCidrRange": "10.196.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east7/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-south1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.114-07:00", "fingerprint": "07LhpxVkTl0=", "gatewayAddress": "10.206.0.1", "id": "8688637599319804909", "ipCidrRange": "10.206.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west1": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.194-07:00", "fingerprint": "7274CF_uPYc=", "gatewayAddress": "10.138.0.1", "id": "3135513119184341997", "ipCidrRange": "10.138.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west2": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.610-07:00", "fingerprint": "TQw4X4emfCg=", "gatewayAddress": "10.168.0.1", "id": "3941601411750382573", "ipCidrRange": "10.168.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west3": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.157-07:00", "fingerprint": "mo0aGmQD-1w=", "gatewayAddress": "10.180.0.1", "id": "1913782755277097965", "ipCidrRange": "10.180.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west4": { "subnetworks": [ { "creationTimestamp": "2024-10-30T20:09:54.355-07:00", "fingerprint": "Hsp8Z3Q-kQc=", "gatewayAddress": "10.182.0.1", "id": "6977273284267035629", "ipCidrRange": "10.182.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west8": { "subnetworks": [ { "creationTimestamp": "2024-10-31T02:11:02.902-07:00", "fingerprint": "v-TCDZnMAX4=", "gatewayAddress": "10.220.0.1", "id": "5081724102793688905", "ipCidrRange": "10.220.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/aggregated/subnetworks" } ================================================ FILE: test-data/dataproc1/json-dumps/connectivity-test.json ================================================ { "name": "projects/gcpdiag-dataproc1-aaaa/locations/global/connectivityTests/vmexternalipconnectivitytest", "source": { "ipAddress": "10.10.0.3", "network": "projects/gcpdiag-dataproc1-aaaa/global/networks/default", "projectId": "gcpdiag-dataproc1-aaaa", "cloudFunction": {}, "appEngineVersion": {}, "cloudRunRevision": {} }, "destination": { "ipAddress": "151.101.3.5", "port": 443, "networkType": "NON_GCP_NETWORK", "cloudFunction": {}, "appEngineVersion": {}, "cloudRunRevision": {} }, "protocol": "TCP", "displayName": "vmexternalipconnectivitytest", "createTime": "2024-05-31T16:02:44.883795965Z", "updateTime": "2024-06-04T00:31:09.639861810Z", "reachabilityDetails": { "result": "REACHABLE", "verifyTime": "2024-06-04T00:31:09.450544252Z", "traces": [ { "endpointInfo": { "sourceIp": "10.10.0.3", "destinationIp": "151.101.3.5", "protocol": "TCP", "sourcePort": 63951, "destinationPort": 443, "sourceNetworkUri": "projects/gcpdiag-dataproc1-aaaa/global/networks/default" }, "steps": [ { "description": "Initial state: packet originating from a Compute Engine instance.", "state": "START_FROM_INSTANCE", "projectId": "gcpdiag-dataproc1-aaaa", "instance": { "displayName": "private-linux-valid", "uri": "projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances/private-linux-valid", "interface": "nic0", "networkUri": "projects/gcpdiag-dataproc1-aaaa/global/networks/default", "internalIp": "10.10.0.3", "networkTags": [ "valid-vpc-instance-private" ] } }, { "description": "Config checking state: verify EGRESS firewall rule.", "state": "APPLY_EGRESS_FIREWALL_RULE", "projectId": "gcpdiag-dataproc1-aaaa", "firewall": { "displayName": "private-linux-egress-allow", "uri": "projects/gcpdiag-dataproc1-aaaa/global/firewalls/private-linux-egress-allow", "direction": "EGRESS", "action": "ALLOW", "priority": 920, "networkUri": "projects/gcpdiag-dataproc1-aaaa/global/networks/default", "targetTags": [ "valid-vpc-instance-private" ], "firewallRuleType": "VPC_FIREWALL_RULE" } }, { "description": "Config checking state: verify route.", "state": "APPLY_ROUTE", "projectId": "gcpdiag-dataproc1-aaaa", "route": { "displayName": "default-route-733dd203fb86133b", "uri": "projects/gcpdiag-dataproc1-aaaa/global/routes/default-route-733dd203fb86133b", "destIpRange": "0.0.0.0/0", "nextHop": "internet gateway", "networkUri": "projects/gcpdiag-dataproc1-aaaa/global/networks/default", "priority": 1000, "routeType": "STATIC", "nextHopType": "NEXT_HOP_INTERNET_GATEWAY", "routeScope": "NETWORK" } }, { "description": "Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].", "state": "NAT", "projectId": "gcpdiag-dataproc1-aaaa", "nat": { "type": "CLOUD_NAT", "protocol": "TCP", "networkUri": "projects/gcpdiag-dataproc1-aaaa/global/networks/default", "oldSourceIp": "10.10.0.3", "newSourceIp": "34.123.41.124", "oldDestinationIp": "151.101.3.5", "newDestinationIp": "151.101.3.5", "oldSourcePort": 63951, "newSourcePort": 49732, "oldDestinationPort": 443, "newDestinationPort": 443, "routerUri": "projects/gcpdiag-dataproc1-aaaa/regions/us-central1/routers/nat-router", "natGatewayName": "nat-gateway" } }, { "description": "Final state: packet delivered to Internet.", "state": "DELIVER", "deliver": { "target": "INTERNET", "ipAddress": "151.101.3.5" } } ], "forwardTraceId": 1 } ] }, "probingDetails": { "result": "REACHABLE", "verifyTime": "2024-06-04T00:30:59.820702Z", "sentProbeCount": 50, "successfulProbeCount": 50, "probingLatency": { "latencyPercentiles": [ { "percent": 50, "latencyMicros": "4940" }, { "percent": 95, "latencyMicros": "5094" } ] }, "destinationEgressLocation": { "metropolitanArea": "Chicago, IL, US" } } } ================================================ FILE: test-data/dataproc1/json-dumps/dataproc-clusters-us-central1.json ================================================ { "clusters": [ { "projectId": "gcpdiag-dataproc1-aaaa", "clusterName": "good", "config": { "configBucket": "dataproc-staging-us-central1-12340005-9v6173vh", "tempBucket": "dataproc-temp-us-central1-12340005-xslkmij6", "gceClusterConfig": { "zoneUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f", "networkUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "serviceAccountScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "internalIpOnly": false, "shieldedInstanceConfig": { "enableSecureBoot": true, "enableVtpm": true, "enableIntegrityMonitoring": true } }, "masterConfig": { "numInstances": 1, "instanceNames": [ "good-m" ], "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01", "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "minCpuPlatform": "AUTOMATIC", "preemptibility": "NON_PREEMPTIBLE" }, "workerConfig": { "numInstances": 2, "instanceNames": [ "good-w-0", "good-w-1" ], "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01", "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "minCpuPlatform": "AUTOMATIC", "preemptibility": "NON_PREEMPTIBLE" }, "softwareConfig": { "imageVersion": "2.2.38-debian12", "properties": { "capacity-scheduler:yarn.scheduler.capacity.resource-calculator": "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator", "capacity-scheduler:yarn.scheduler.capacity.root.default.ordering-policy": "fair", "core:fs.gs.block.size": "134217728", "core:fs.gs.metadata.cache.enable": "false", "core:hadoop.ssl.enabled.protocols": "TLSv1,TLSv1.1,TLSv1.2", "distcp:mapreduce.map.java.opts": "-Xmx576m", "distcp:mapreduce.map.memory.mb": "768", "distcp:mapreduce.reduce.java.opts": "-Xmx576m", "distcp:mapreduce.reduce.memory.mb": "768", "hadoop-env:HADOOP_DATANODE_OPTS": "-Xmx512m", "hdfs:dfs.datanode.address": "0.0.0.0:9866", "hdfs:dfs.datanode.http.address": "0.0.0.0:9864", "hdfs:dfs.datanode.https.address": "0.0.0.0:9865", "hdfs:dfs.datanode.ipc.address": "0.0.0.0:9867", "hdfs:dfs.namenode.handler.count": "20", "hdfs:dfs.namenode.http-address": "0.0.0.0:9870", "hdfs:dfs.namenode.https-address": "0.0.0.0:9871", "hdfs:dfs.namenode.lifeline.rpc-address": "good-m:8050", "hdfs:dfs.namenode.secondary.http-address": "0.0.0.0:9868", "hdfs:dfs.namenode.secondary.https-address": "0.0.0.0:9869", "hdfs:dfs.namenode.service.handler.count": "10", "hdfs:dfs.namenode.servicerpc-address": "good-m:8051", "mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE": "1024", "mapred:mapreduce.job.maps": "9", "mapred:mapreduce.job.reduce.slowstart.completedmaps": "0.95", "mapred:mapreduce.job.reduces": "1", "mapred:mapreduce.jobhistory.recovery.store.class": "org.apache.hadoop.mapreduce.v2.hs.HistoryServerLeveldbStateStoreService", "mapred:mapreduce.map.cpu.vcores": "1", "mapred:mapreduce.map.java.opts": "-Xmx1311m", "mapred:mapreduce.map.memory.mb": "1639", "mapred:mapreduce.reduce.cpu.vcores": "2", "mapred:mapreduce.reduce.java.opts": "-Xmx2622m", "mapred:mapreduce.reduce.memory.mb": "3278", "mapred:mapreduce.task.io.sort.mb": "256", "mapred:yarn.app.mapreduce.am.command-opts": "-Xmx1311m", "mapred:yarn.app.mapreduce.am.resource.cpu-vcores": "1", "mapred:yarn.app.mapreduce.am.resource.mb": "1639", "spark-env:SPARK_DAEMON_MEMORY": "1024m", "spark:spark.driver.maxResultSize": "512m", "spark:spark.driver.memory": "1024m", "spark:spark.executor.cores": "1", "spark:spark.executor.instances": "2", "spark:spark.executor.memory": "1255m", "spark:spark.executorEnv.OPENBLAS_NUM_THREADS": "1", "spark:spark.plugins.defaultList": "com.google.cloud.dataproc.DataprocSparkPlugin", "spark:spark.scheduler.mode": "FAIR", "spark:spark.sql.cbo.enabled": "true", "spark:spark.sql.optimizer.runtime.bloomFilter.join.pattern.enabled": "true", "spark:spark.ui.port": "0", "spark:spark.yarn.am.memory": "640m", "yarn-env:YARN_NODEMANAGER_HEAPSIZE": "409", "yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE": "1024", "yarn-env:YARN_TIMELINESERVER_HEAPSIZE": "1024", "yarn:yarn.nodemanager.address": "0.0.0.0:8026", "yarn:yarn.nodemanager.resource.cpu-vcores": "2", "yarn:yarn.nodemanager.resource.memory-mb": "3278", "yarn:yarn.resourcemanager.decommissioning-nodes-watcher.decommission-if-no-shuffle-data": "true", "yarn:yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs": "86400", "yarn:yarn.scheduler.maximum-allocation-mb": "3278", "yarn:yarn.scheduler.minimum-allocation-mb": "1" } }, "endpointConfig": {} }, "status": { "state": "RUNNING", "stateStartTime": "2024-10-31T03:38:22.167627Z" }, "clusterUuid": "ae0a9260-f4a1-49ad-9593-8451a2536e59", "statusHistory": [ { "state": "CREATING", "stateStartTime": "2024-10-31T03:32:52.365558Z" } ], "labels": { "goog-dataproc-cluster-name": "good", "goog-dataproc-cluster-uuid": "ae0a9260-f4a1-49ad-9593-8451a2536e59", "goog-dataproc-location": "us-central1", "goog-dataproc-autozone": "enabled" }, "metrics": { "hdfsMetrics": { "dfs-capacity-used": "57344", "dfs-nodes-running": "2", "dfs-capacity-total": "62920859648", "dfs-blocks-missing-repl-one": "0", "dfs-nodes-decommissioned": "0", "dfs-capacity-present": "29422120960", "dfs-capacity-remaining": "29422063616", "dfs-nodes-decommissioning": "0", "dfs-blocks-missing": "0", "dfs-blocks-pending-deletion": "0", "dfs-blocks-under-replication": "0", "dfs-blocks-corrupt": "0", "dfs-blocks-default-replication-factor": "2" }, "yarnMetrics": { "yarn-nodes-shutdown": "0", "yarn-nodes-unhealthy": "0", "yarn-memory-mb-available": "6556", "yarn-containers-reserved": "0", "yarn-memory-mb-pending": "0", "yarn-nodes-rebooted": "0", "yarn-memory-mb-total": "6556", "yarn-containers-pending": "0", "yarn-apps-completed": "0", "yarn-apps-running": "0", "yarn-vcores-allocated": "0", "yarn-vcores-reserved": "0", "yarn-memory-mb-reserved": "0", "yarn-nodes-active": "2", "yarn-apps-pending": "0", "yarn-apps-failed": "0", "yarn-containers-allocated": "0", "yarn-memory-mb-allocated": "0", "yarn-apps-killed": "0", "yarn-vcores-pending": "0", "yarn-nodes-lost": "0", "yarn-nodes-decommissioned": "0", "yarn-nodes-new": "0", "yarn-vcores-available": "4", "yarn-vcores-total": "4", "yarn-nodes-decommissioning": "0", "yarn-apps-submitted": "0" } } }, { "projectId": "gcpdiag-dataproc1-aaaa", "clusterName": "test-best-practices-disabled", "config": { "configBucket": "dataproc-staging-us-central1-12340005-9v6173vh", "tempBucket": "dataproc-temp-us-central1-12340005-xslkmij6", "gceClusterConfig": { "zoneUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f", "networkUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "serviceAccountScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "internalIpOnly": false, "shieldedInstanceConfig": { "enableSecureBoot": true, "enableVtpm": true, "enableIntegrityMonitoring": true } }, "masterConfig": { "numInstances": 1, "instanceNames": [ "test-best-practices-disabled-m" ], "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01", "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "minCpuPlatform": "AUTOMATIC", "preemptibility": "NON_PREEMPTIBLE" }, "workerConfig": { "numInstances": 2, "instanceNames": [ "test-best-practices-disabled-w-0", "test-best-practices-disabled-w-1" ], "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01", "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium", "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "minCpuPlatform": "AUTOMATIC", "preemptibility": "NON_PREEMPTIBLE" }, "softwareConfig": { "imageVersion": "2.2.38-debian12", "properties": { "capacity-scheduler:yarn.scheduler.capacity.resource-calculator": "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator", "capacity-scheduler:yarn.scheduler.capacity.root.default.ordering-policy": "fair", "core:fs.gs.block.size": "134217728", "core:fs.gs.metadata.cache.enable": "false", "core:hadoop.ssl.enabled.protocols": "TLSv1,TLSv1.1,TLSv1.2", "dataproc:dataproc.logging.stackdriver.enable": "false", "distcp:mapreduce.map.java.opts": "-Xmx576m", "distcp:mapreduce.map.memory.mb": "768", "distcp:mapreduce.reduce.java.opts": "-Xmx576m", "distcp:mapreduce.reduce.memory.mb": "768", "hadoop-env:HADOOP_DATANODE_OPTS": "-Xmx512m", "hdfs:dfs.datanode.address": "0.0.0.0:9866", "hdfs:dfs.datanode.http.address": "0.0.0.0:9864", "hdfs:dfs.datanode.https.address": "0.0.0.0:9865", "hdfs:dfs.datanode.ipc.address": "0.0.0.0:9867", "hdfs:dfs.namenode.handler.count": "20", "hdfs:dfs.namenode.http-address": "0.0.0.0:9870", "hdfs:dfs.namenode.https-address": "0.0.0.0:9871", "hdfs:dfs.namenode.lifeline.rpc-address": "test-best-practices-disabled-m:8050", "hdfs:dfs.namenode.secondary.http-address": "0.0.0.0:9868", "hdfs:dfs.namenode.secondary.https-address": "0.0.0.0:9869", "hdfs:dfs.namenode.service.handler.count": "10", "hdfs:dfs.namenode.servicerpc-address": "test-best-practices-disabled-m:8051", "mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE": "1024", "mapred:mapreduce.job.maps": "9", "mapred:mapreduce.job.reduce.slowstart.completedmaps": "0.95", "mapred:mapreduce.job.reduces": "1", "mapred:mapreduce.jobhistory.recovery.store.class": "org.apache.hadoop.mapreduce.v2.hs.HistoryServerLeveldbStateStoreService", "mapred:mapreduce.map.cpu.vcores": "1", "mapred:mapreduce.map.java.opts": "-Xmx1311m", "mapred:mapreduce.map.memory.mb": "1639", "mapred:mapreduce.reduce.cpu.vcores": "2", "mapred:mapreduce.reduce.java.opts": "-Xmx2622m", "mapred:mapreduce.reduce.memory.mb": "3278", "mapred:mapreduce.task.io.sort.mb": "256", "mapred:yarn.app.mapreduce.am.command-opts": "-Xmx1311m", "mapred:yarn.app.mapreduce.am.resource.cpu-vcores": "1", "mapred:yarn.app.mapreduce.am.resource.mb": "1639", "spark-env:SPARK_DAEMON_MEMORY": "1024m", "spark:spark.driver.maxResultSize": "512m", "spark:spark.driver.memory": "1024m", "spark:spark.executor.cores": "1", "spark:spark.executor.instances": "2", "spark:spark.executor.memory": "1255m", "spark:spark.executorEnv.OPENBLAS_NUM_THREADS": "1", "spark:spark.plugins.defaultList": "com.google.cloud.dataproc.DataprocSparkPlugin", "spark:spark.scheduler.mode": "FAIR", "spark:spark.sql.cbo.enabled": "true", "spark:spark.sql.optimizer.runtime.bloomFilter.join.pattern.enabled": "true", "spark:spark.ui.port": "0", "spark:spark.yarn.am.memory": "640m", "yarn-env:YARN_NODEMANAGER_HEAPSIZE": "409", "yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE": "1024", "yarn-env:YARN_TIMELINESERVER_HEAPSIZE": "1024", "yarn:yarn.nodemanager.address": "0.0.0.0:8026", "yarn:yarn.nodemanager.resource.cpu-vcores": "2", "yarn:yarn.nodemanager.resource.memory-mb": "3278", "yarn:yarn.resourcemanager.decommissioning-nodes-watcher.decommission-if-no-shuffle-data": "true", "yarn:yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs": "86400", "yarn:yarn.scheduler.maximum-allocation-mb": "3278", "yarn:yarn.scheduler.minimum-allocation-mb": "1" } }, "endpointConfig": {} }, "status": { "state": "RUNNING", "stateStartTime": "2024-10-31T03:37:34.753007Z" }, "clusterUuid": "fa7689da-2c32-4258-af4b-571af491f0bd", "statusHistory": [ { "state": "CREATING", "stateStartTime": "2024-10-31T03:32:52.067616Z" } ], "labels": { "goog-dataproc-cluster-name": "test-best-practices-disabled", "goog-dataproc-cluster-uuid": "fa7689da-2c32-4258-af4b-571af491f0bd", "goog-dataproc-location": "us-central1", "goog-dataproc-autozone": "enabled" }, "metrics": { "hdfsMetrics": { "dfs-capacity-used": "57344", "dfs-nodes-running": "2", "dfs-capacity-total": "62920859648", "dfs-blocks-missing-repl-one": "0", "dfs-nodes-decommissioned": "0", "dfs-capacity-present": "15304220672", "dfs-capacity-remaining": "15304163328", "dfs-nodes-decommissioning": "0", "dfs-blocks-missing": "0", "dfs-blocks-pending-deletion": "0", "dfs-blocks-under-replication": "0", "dfs-blocks-corrupt": "0", "dfs-blocks-default-replication-factor": "2" }, "yarnMetrics": { "yarn-nodes-shutdown": "0", "yarn-nodes-unhealthy": "0", "yarn-memory-mb-available": "6556", "yarn-containers-reserved": "0", "yarn-memory-mb-pending": "0", "yarn-nodes-rebooted": "0", "yarn-memory-mb-total": "6556", "yarn-containers-pending": "0", "yarn-apps-completed": "0", "yarn-apps-running": "0", "yarn-vcores-allocated": "0", "yarn-vcores-reserved": "0", "yarn-memory-mb-reserved": "0", "yarn-nodes-active": "2", "yarn-apps-pending": "0", "yarn-apps-failed": "0", "yarn-containers-allocated": "0", "yarn-memory-mb-allocated": "0", "yarn-apps-killed": "0", "yarn-vcores-pending": "0", "yarn-nodes-lost": "0", "yarn-nodes-decommissioned": "0", "yarn-nodes-new": "0", "yarn-vcores-available": "4", "yarn-vcores-total": "4", "yarn-nodes-decommissioning": "0", "yarn-apps-submitted": "0" } } }, { "projectId": "gcpdiag-dataproc1-aaaa", "clusterName": "test-best-practices-enabled", "config": { "configBucket": "dataproc-staging-us-central1-12340005-9v6173vh", "tempBucket": "dataproc-temp-us-central1-12340005-xslkmij6", "gceClusterConfig": { "zoneUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b", "networkUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default", "serviceAccountScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "internalIpOnly": false, "serviceAccount": "saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com", "shieldedInstanceConfig": { "enableSecureBoot": true, "enableVtpm": true, "enableIntegrityMonitoring": true } }, "masterConfig": { "numInstances": 1, "instanceNames": [ "test-best-practices-enabled-m" ], "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01", "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium", "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "minCpuPlatform": "AUTOMATIC", "preemptibility": "NON_PREEMPTIBLE" }, "workerConfig": { "numInstances": 2, "instanceNames": [ "test-best-practices-enabled-w-0", "test-best-practices-enabled-w-1" ], "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01", "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium", "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "minCpuPlatform": "AUTOMATIC", "preemptibility": "NON_PREEMPTIBLE" }, "softwareConfig": { "imageVersion": "2.2.38-debian12", "properties": { "capacity-scheduler:yarn.scheduler.capacity.resource-calculator": "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator", "capacity-scheduler:yarn.scheduler.capacity.root.default.ordering-policy": "fair", "core:fs.gs.block.size": "134217728", "core:fs.gs.metadata.cache.enable": "false", "core:hadoop.ssl.enabled.protocols": "TLSv1,TLSv1.1,TLSv1.2", "dataproc:dataproc.monitoring.stackdriver.enable": "true", "distcp:mapreduce.map.java.opts": "-Xmx576m", "distcp:mapreduce.map.memory.mb": "768", "distcp:mapreduce.reduce.java.opts": "-Xmx576m", "distcp:mapreduce.reduce.memory.mb": "768", "hadoop-env:HADOOP_DATANODE_OPTS": "-Xmx512m", "hdfs:dfs.datanode.address": "0.0.0.0:9866", "hdfs:dfs.datanode.http.address": "0.0.0.0:9864", "hdfs:dfs.datanode.https.address": "0.0.0.0:9865", "hdfs:dfs.datanode.ipc.address": "0.0.0.0:9867", "hdfs:dfs.namenode.handler.count": "20", "hdfs:dfs.namenode.http-address": "0.0.0.0:9870", "hdfs:dfs.namenode.https-address": "0.0.0.0:9871", "hdfs:dfs.namenode.lifeline.rpc-address": "test-best-practices-enabled-m:8050", "hdfs:dfs.namenode.secondary.http-address": "0.0.0.0:9868", "hdfs:dfs.namenode.secondary.https-address": "0.0.0.0:9869", "hdfs:dfs.namenode.service.handler.count": "10", "hdfs:dfs.namenode.servicerpc-address": "test-best-practices-enabled-m:8051", "mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE": "1024", "mapred:mapreduce.job.maps": "9", "mapred:mapreduce.job.reduce.slowstart.completedmaps": "0.95", "mapred:mapreduce.job.reduces": "1", "mapred:mapreduce.jobhistory.recovery.store.class": "org.apache.hadoop.mapreduce.v2.hs.HistoryServerLeveldbStateStoreService", "mapred:mapreduce.map.cpu.vcores": "1", "mapred:mapreduce.map.java.opts": "-Xmx1311m", "mapred:mapreduce.map.memory.mb": "1639", "mapred:mapreduce.reduce.cpu.vcores": "2", "mapred:mapreduce.reduce.java.opts": "-Xmx2622m", "mapred:mapreduce.reduce.memory.mb": "3278", "mapred:mapreduce.task.io.sort.mb": "256", "mapred:yarn.app.mapreduce.am.command-opts": "-Xmx1311m", "mapred:yarn.app.mapreduce.am.resource.cpu-vcores": "1", "mapred:yarn.app.mapreduce.am.resource.mb": "1639", "spark-env:SPARK_DAEMON_MEMORY": "1024m", "spark:spark.driver.maxResultSize": "512m", "spark:spark.driver.memory": "1024m", "spark:spark.executor.cores": "1", "spark:spark.executor.instances": "2", "spark:spark.executor.memory": "1255m", "spark:spark.executorEnv.OPENBLAS_NUM_THREADS": "1", "spark:spark.plugins.defaultList": "com.google.cloud.dataproc.DataprocSparkPlugin", "spark:spark.scheduler.mode": "FAIR", "spark:spark.sql.cbo.enabled": "true", "spark:spark.sql.optimizer.runtime.bloomFilter.join.pattern.enabled": "true", "spark:spark.ui.port": "0", "spark:spark.yarn.am.memory": "640m", "yarn-env:YARN_NODEMANAGER_HEAPSIZE": "409", "yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE": "1024", "yarn-env:YARN_TIMELINESERVER_HEAPSIZE": "1024", "yarn:yarn.nodemanager.address": "0.0.0.0:8026", "yarn:yarn.nodemanager.resource.cpu-vcores": "2", "yarn:yarn.nodemanager.resource.memory-mb": "3278", "yarn:yarn.resourcemanager.decommissioning-nodes-watcher.decommission-if-no-shuffle-data": "true", "yarn:yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs": "86400", "yarn:yarn.scheduler.maximum-allocation-mb": "3278", "yarn:yarn.scheduler.minimum-allocation-mb": "1" } }, "endpointConfig": {} }, "status": { "state": "RUNNING", "stateStartTime": "2024-10-31T03:40:37.410555Z" }, "clusterUuid": "30695901-ea88-41e7-9c97-bb55067a4540", "statusHistory": [ { "state": "CREATING", "stateStartTime": "2024-10-31T03:34:22.567338Z" } ], "labels": { "goog-dataproc-cluster-name": "test-best-practices-enabled", "goog-dataproc-cluster-uuid": "30695901-ea88-41e7-9c97-bb55067a4540", "goog-dataproc-location": "us-central1" }, "metrics": { "hdfsMetrics": { "dfs-capacity-used": "57344", "dfs-nodes-running": "2", "dfs-capacity-total": "62920859648", "dfs-blocks-missing-repl-one": "0", "dfs-nodes-decommissioned": "0", "dfs-capacity-present": "29054734336", "dfs-capacity-remaining": "29054676992", "dfs-nodes-decommissioning": "0", "dfs-blocks-missing": "0", "dfs-blocks-pending-deletion": "0", "dfs-blocks-under-replication": "0", "dfs-blocks-corrupt": "0", "dfs-blocks-default-replication-factor": "2" }, "yarnMetrics": { "yarn-nodes-shutdown": "0", "yarn-nodes-unhealthy": "0", "yarn-memory-mb-available": "6556", "yarn-containers-reserved": "0", "yarn-memory-mb-pending": "0", "yarn-nodes-rebooted": "0", "yarn-memory-mb-total": "6556", "yarn-containers-pending": "0", "yarn-apps-completed": "0", "yarn-apps-running": "0", "yarn-vcores-allocated": "0", "yarn-vcores-reserved": "0", "yarn-memory-mb-reserved": "0", "yarn-nodes-active": "2", "yarn-apps-pending": "0", "yarn-apps-failed": "0", "yarn-containers-allocated": "0", "yarn-memory-mb-allocated": "0", "yarn-apps-killed": "0", "yarn-vcores-pending": "0", "yarn-nodes-lost": "0", "yarn-nodes-decommissioned": "0", "yarn-nodes-new": "0", "yarn-vcores-available": "4", "yarn-vcores-total": "4", "yarn-nodes-decommissioning": "0", "yarn-apps-submitted": "0" } } }, { "projectId": "gcpdiag-dataproc1-aaaa", "clusterName": "test-deny-icmp", "config": { "configBucket": "dataproc-staging-us-central1-12340005-9v6173vh", "tempBucket": "dataproc-temp-us-central1-12340005-xslkmij6", "gceClusterConfig": { "zoneUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a", "serviceAccountScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "tags": [ "icmp-deny" ], "subnetworkUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet", "internalIpOnly": false, "shieldedInstanceConfig": { "enableSecureBoot": true, "enableVtpm": true, "enableIntegrityMonitoring": true } }, "masterConfig": { "numInstances": 1, "instanceNames": [ "test-deny-icmp-m" ], "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01", "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4", "diskConfig": { "bootDiskSizeGb": 1000, "bootDiskType": "pd-standard" }, "minCpuPlatform": "AUTOMATIC", "preemptibility": "NON_PREEMPTIBLE" }, "workerConfig": { "numInstances": 2, "instanceNames": [ "test-deny-icmp-w-0", "test-deny-icmp-w-1" ], "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01", "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4", "diskConfig": { "bootDiskSizeGb": 1000, "bootDiskType": "pd-standard" }, "minCpuPlatform": "AUTOMATIC", "preemptibility": "NON_PREEMPTIBLE" }, "softwareConfig": { "imageVersion": "2.2.38-debian12", "properties": { "capacity-scheduler:yarn.scheduler.capacity.resource-calculator": "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator", "capacity-scheduler:yarn.scheduler.capacity.root.default.ordering-policy": "fair", "core:fs.gs.block.size": "134217728", "core:fs.gs.metadata.cache.enable": "false", "core:hadoop.ssl.enabled.protocols": "TLSv1,TLSv1.1,TLSv1.2", "distcp:mapreduce.map.java.opts": "-Xmx768m", "distcp:mapreduce.map.memory.mb": "1024", "distcp:mapreduce.reduce.java.opts": "-Xmx768m", "distcp:mapreduce.reduce.memory.mb": "1024", "hadoop-env:HADOOP_DATANODE_OPTS": "-Xmx512m", "hdfs:dfs.datanode.address": "0.0.0.0:9866", "hdfs:dfs.datanode.http.address": "0.0.0.0:9864", "hdfs:dfs.datanode.https.address": "0.0.0.0:9865", "hdfs:dfs.datanode.ipc.address": "0.0.0.0:9867", "hdfs:dfs.namenode.handler.count": "20", "hdfs:dfs.namenode.http-address": "0.0.0.0:9870", "hdfs:dfs.namenode.https-address": "0.0.0.0:9871", "hdfs:dfs.namenode.lifeline.rpc-address": "test-deny-icmp-m:8050", "hdfs:dfs.namenode.secondary.http-address": "0.0.0.0:9868", "hdfs:dfs.namenode.secondary.https-address": "0.0.0.0:9869", "hdfs:dfs.namenode.service.handler.count": "10", "hdfs:dfs.namenode.servicerpc-address": "test-deny-icmp-m:8051", "mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE": "4000", "mapred:mapreduce.job.maps": "21", "mapred:mapreduce.job.reduce.slowstart.completedmaps": "0.95", "mapred:mapreduce.job.reduces": "7", "mapred:mapreduce.jobhistory.recovery.store.class": "org.apache.hadoop.mapreduce.v2.hs.HistoryServerLeveldbStateStoreService", "mapred:mapreduce.map.cpu.vcores": "1", "mapred:mapreduce.map.java.opts": "-Xmx2708m", "mapred:mapreduce.map.memory.mb": "3386", "mapred:mapreduce.reduce.cpu.vcores": "1", "mapred:mapreduce.reduce.java.opts": "-Xmx2708m", "mapred:mapreduce.reduce.memory.mb": "3386", "mapred:mapreduce.task.io.sort.mb": "256", "mapred:yarn.app.mapreduce.am.command-opts": "-Xmx2708m", "mapred:yarn.app.mapreduce.am.resource.cpu-vcores": "1", "mapred:yarn.app.mapreduce.am.resource.mb": "3386", "spark-env:SPARK_DAEMON_MEMORY": "4000m", "spark:spark.driver.maxResultSize": "2048m", "spark:spark.driver.memory": "4096m", "spark:spark.executor.cores": "2", "spark:spark.executor.instances": "2", "spark:spark.executor.memory": "6157m", "spark:spark.executorEnv.OPENBLAS_NUM_THREADS": "1", "spark:spark.plugins.defaultList": "com.google.cloud.dataproc.DataprocSparkPlugin", "spark:spark.scheduler.mode": "FAIR", "spark:spark.sql.cbo.enabled": "true", "spark:spark.sql.optimizer.runtime.bloomFilter.join.pattern.enabled": "true", "spark:spark.ui.port": "0", "spark:spark.yarn.am.memory": "640m", "yarn-env:YARN_NODEMANAGER_HEAPSIZE": "1638", "yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE": "4000", "yarn-env:YARN_TIMELINESERVER_HEAPSIZE": "4000", "yarn:yarn.nodemanager.address": "0.0.0.0:8026", "yarn:yarn.nodemanager.resource.cpu-vcores": "4", "yarn:yarn.nodemanager.resource.memory-mb": "13544", "yarn:yarn.resourcemanager.decommissioning-nodes-watcher.decommission-if-no-shuffle-data": "true", "yarn:yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs": "86400", "yarn:yarn.scheduler.maximum-allocation-mb": "13544", "yarn:yarn.scheduler.minimum-allocation-mb": "1" } }, "endpointConfig": {} }, "status": { "state": "ERROR", "stateStartTime": "2024-10-31T03:45:16.984234Z" }, "clusterUuid": "f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4", "statusHistory": [ { "state": "CREATING", "stateStartTime": "2024-10-31T03:33:16.561835Z" } ], "labels": { "goog-dataproc-cluster-name": "test-deny-icmp", "goog-dataproc-cluster-uuid": "f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4", "goog-dataproc-location": "us-central1" } } ] } ================================================ FILE: test-data/dataproc1/json-dumps/dataproc-job-failed.json ================================================ { "reference": { "projectId": "gcpdiag-dataproc1-aaaa", "jobId": "1234567891" }, "placement": { "clusterName": "job-failed", "clusterUuid": "94b9d209-dbd2-49bf-a1fb-cb15348cc0fb" }, "sparkJob": { "mainClass": "org.apache.spark.examples.SparkPi", "args": [ "10000" ], "jarFileUris": [ "file:///usr/lib/spark/examples/jars/spark-examples.jar" ], "properties": { "spark.logConf": "true" }, "loggingConfig": { "driverLogLevels": { "root": "INFO" } } }, "status": { "state": "ERROR", "details": "Driver received SIGTERM/SIGKILL signal and exited with 143 code, which potentially signifies a memory pressure.\nGoogle Cloud Dataproc Agent reports job failure. If logs are available, they can be found at:\nhttps://console.cloud.google.com/dataproc/jobs/1234567891?project=gcpdiag-dataproc1-aaaa®ion=us-central1\ngcloud dataproc jobs wait 'afea8b77-c4b5-413d-b853-6c30b1c601de' --region 'us-central1' --project 'gcpdiag-dataproc1-f914htnn'\nhttps://console.cloud.google.com/storage/browser/dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/94b9d209-dbd2-49bf-a1fb-cb15348cc0fb/jobs/afea8b77-c4b5-413d-b853-6c30b1c601de/\ngs://dataproc-staging-us-central1-867564666308-9v6173vh/google-cloud-dataproc-metainfo/94b9d209-dbd2-49bf-a1fb-cb15348cc0fb/jobs/afea8b77-c4b5-413d-b853-6c30b1c601de/driveroutput.*", "stateStartTime": "2024-11-01T03:13:26.981926Z" }, "statusHistory": [ { "state": "PENDING", "stateStartTime": "2024-11-01T03:12:34.648195Z" }, { "state": "SETUP_DONE", "stateStartTime": "2024-11-01T03:12:34.680296Z" }, { "state": "RUNNING", "stateStartTime": "2024-11-01T03:12:35.635169Z" } ], "driverControlFilesUri": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/94b9d209-dbd2-49bf-a1fb-cb15348cc0fb/jobs/1234567891/", "driverOutputResourceUri": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/94b9d209-dbd2-49bf-a1fb-cb15348cc0fb/jobs/1234567891/driveroutput", "labels": { "goog-terraform-provisioned": "true" }, "jobUuid": "1234567891", "done": true } ================================================ FILE: test-data/dataproc1/json-dumps/dataproc-job-success.json ================================================ { "reference": { "projectId": "gcpdiag-dataproc1-aaaa", "jobId": "1234567890" }, "placement": { "clusterName": "job-success", "clusterUuid": "02eb914f-566d-4e20-a23b-895ebcadfa54" }, "sparkJob": { "mainClass": "org.apache.spark.examples.SparkPi", "args": [ "10" ], "jarFileUris": [ "file:///usr/lib/spark/examples/jars/spark-examples.jar" ], "properties": { "spark.logConf": "true" }, "loggingConfig": { "driverLogLevels": { "root": "INFO" } } }, "status": { "state": "DONE", "stateStartTime": "2024-11-01T02:58:57.465011Z" }, "yarnApplications": [ { "name": "Spark Pi", "state": "FINISHED", "progress": 1, "trackingUrl": "http://job-success-m.c.gcpdiag-dataproc1-aaaa.internal.:8088/proxy/application_1730429847891_0001/" } ], "statusHistory": [ { "state": "PENDING", "stateStartTime": "2024-11-01T02:58:22.207045Z" }, { "state": "SETUP_DONE", "stateStartTime": "2024-11-01T02:58:22.240406Z" }, { "state": "RUNNING", "details": "Agent reported job success", "stateStartTime": "2024-11-01T02:58:22.604010Z" } ], "driverControlFilesUri": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/02eb914f-566d-4e20-a23b-895ebcadfa54/jobs/1234567890/", "driverOutputResourceUri": "gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/02eb914f-566d-4e20-a23b-895ebcadfa54/jobs/1234567890/driveroutput", "labels": { "goog-terraform-provisioned": "true" }, "jobUuid": "1234567890", "done": true } ================================================ FILE: test-data/dataproc1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12340005@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-12340005@dataproc-accounts.iam.gserviceaccount.com" ], "role": "roles/dataproc.serviceAgent" }, { "members": [ "serviceAccount:saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com" ], "role": "roles/dataproc.worker" }, { "members": [ "serviceAccount:12340005-compute@developer.gserviceaccount.com", "serviceAccount:12340005@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12340005@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ], "role": "roles/websecurityscanner.serviceAgent" } ], "etag": "BwYlyYOz+hk=", "version": 1 } ================================================ FILE: test-data/dataproc1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Compute Engine default service account", "email": "12340005-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-dataproc1-aaaa/serviceAccounts/12340005-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-dataproc1-aaaa", "uniqueId": "105677253164431506005" }, { "displayName": "Dataproc VM Service account with Dataproc Worker role", "email": "saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-dataproc1-aaaa/serviceAccounts/saworker@gcpdiag-dataproc1-f914htnn.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-dataproc1-aaaa", "uniqueId": "112855465650618767611" } ] } ================================================ FILE: test-data/dataproc1/json-dumps/logging-entries-1.json ================================================ {} ================================================ FILE: test-data/dataproc1/json-dumps/project.json ================================================ { "name": "projects/12340005", "parent": "folders/348077457356", "projectId": "gcpdiag-dataproc1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - dataproc1", "createTime": "2024-10-31T03:04:58.584562Z", "updateTime": "2024-10-31T06:18:28.441603Z", "etag": "W/\"520c285328f06d6d\"", "labels": { "gcpdiag": "test", "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/dataproc1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340005/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded", "compute.googleapis.com/tpus_per_tpu_family" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/dataproc-control.googleapis.com", "config": { "name": "dataproc-control.googleapis.com", "title": "Cloud Dataproc Control API", "documentation": { "summary": "Manages internal resources for Google Cloud Dataproc." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/dataproc.googleapis.com", "config": { "name": "dataproc.googleapis.com", "title": "Cloud Dataproc API", "documentation": { "summary": "Manages Hadoop-based clusters and jobs on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" } ] } ================================================ FILE: test-data/dataproc1/network.tf ================================================ resource "google_compute_network" "test-bad-network" { name = "test-bad-network" description = "VPC network without Dataproc specific firewall rules" auto_create_subnetworks = false project = google_project.project.project_id } resource "google_compute_subnetwork" "test-bad-subnet" { name = "test-bad-subnet" ip_cidr_range = "10.128.0.0/20" region = "us-central1" network = google_compute_network.test-bad-network.id project = google_project.project.project_id } resource "google_compute_firewall" "deny-icmp" { name = "deny-icmp" network = google_compute_network.test-bad-network.name project = google_project.project.project_id deny { protocol = "icmp" } source_tags = ["icmp-deny"] } ================================================ FILE: test-data/dataproc1/project.tf ================================================ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - dataproc1" project_id = "gcpdiag-dataproc1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "dataproc" { project = google_project.project.project_id service = "dataproc.googleapis.com" disable_on_destroy = false } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/dataproc1/provider.tf ================================================ provider "google" {} ================================================ FILE: test-data/dataproc1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/dataproc2/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "insertId": "nwjwc8e2b9ir", "logName": "projects/gcpdiag-dataproc2-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com", "principalSubject": "user:testuser@example.com" }, "authorizationInfo": [ { "granted": true, "permission": "dataproc.clusters.create", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-dataproc2-aaaa/regions/us-central1/clusters/cluster-quota-issues", "resourceAttributes": { "name": "projects/gcpdiag-dataproc2-aaaa/regions/us-central1/clusters/cluster-quota-issues", "service": "dataproc.googleapis.com", "type": "dataproc.googleapis.com/Cluster" } } ], "methodName": "google.cloud.dataproc.v1.ClusterController.CreateCluster", "request": { "@type": "type.googleapis.com/google.cloud.dataproc.v1.CreateClusterRequest", "cluster": { "clusterName": "cluster-quota-issues", "config": { "gceClusterConfig": { "internalIpOnly": false }, "masterConfig": { "accelerators": [ { "acceleratorCount": 1, "acceleratorTypeUri": "nvidia-a100-80gb" } ], "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "machineTypeUri": "a2-ultragpu-1g" }, "workerConfig": { "accelerators": [ { "acceleratorCount": 4, "acceleratorTypeUri": "nvidia-a100-80gb" } ], "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "machineTypeUri": "a2-ultragpu-1g", "numInstances": 4 } }, "projectId": "gcpdiag-dataproc2-aaaa" }, "projectId": "gcpdiag-dataproc2-aaaa", "region": "us-central1" }, "requestMetadata": { "callerIp": "gce-internal-ip", "callerSuppliedUserAgent": "google-api-go-client/0.5 Terraform/1.5.7 (+https://www.terraform.io) Terraform-Plugin-SDK/2.36.0 terraform-provider-google/6.38.0,gzip(gfe)", "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-06-13T16:14:55.949855486Z" } }, "resourceLocation": { "currentLocations": [ "us-central1" ] }, "resourceName": "projects/gcpdiag-dataproc2-aaaa/regions/us-central1/clusters/cluster-quota-issues", "serviceName": "dataproc.googleapis.com", "status": { "code": 3, "message": "Insufficient 'NVIDIA_A100_80GB_GPUS' quota. Requested 5.0, available 0.0. Your resource request exceeds your available quota. See https://cloud.google.com/compute/resource-usage. Use https://cloud.google.com/docs/quotas/view-manage#requesting_higher_quota to request additional quota." } }, "receiveTimestamp": "2025-06-13T16:14:58.745087897Z", "resource": { "labels": { "cluster_name": "cluster-quota-issues", "cluster_uuid": "", "project_id": "gcpdiag-dataproc2-aaaa", "region": "us-central1" }, "type": "cloud_dataproc_cluster" }, "severity": "ERROR", "timestamp": "2025-06-13T16:14:55.930548627Z" } ] } ================================================ FILE: test-data/dataproc2/json-dumps/project.json ================================================ { "name": "projects/12340099", "parent": "folders/348077457356", "projectId": "gcpdiag-dataproc2-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - dataproc2", "createTime": "2024-10-31T03:04:58.584562Z", "updateTime": "2024-10-31T06:18:28.441603Z", "etag": "W/\"520c285328f06d6d\"", "labels": { "gcpdiag": "test", "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/dataproc2/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340099/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded", "compute.googleapis.com/tpus_per_tpu_family" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340099" }, { "name": "projects/12340099/services/dataproc-control.googleapis.com", "config": { "name": "dataproc-control.googleapis.com", "title": "Cloud Dataproc Control API", "documentation": { "summary": "Manages internal resources for Google Cloud Dataproc." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340099" }, { "name": "projects/12340099/services/dataproc.googleapis.com", "config": { "name": "dataproc.googleapis.com", "title": "Cloud Dataproc API", "documentation": { "summary": "Manages Hadoop-based clusters and jobs on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340099" }, { "name": "projects/12340099/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340099" }, { "name": "projects/12340099/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340099" }, { "name": "projects/12340099/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340099" }, { "name": "projects/12340099/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340099" } ] } ================================================ FILE: test-data/dataproc3/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "insertId": "nwjwc8e2b9iz", "logName": "projects/gcpdiag-dataproc3-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com", "principalSubject": "user:testuser@example.com" }, "authorizationInfo": [ { "granted": true, "permission": "dataproc.clusters.create", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-dataproc3-aaaa/regions/us-central1/clusters/cluster-stockout-issues", "resourceAttributes": { "name": "projects/gcpdiag-dataproc3-aaaa/regions/us-central1/clusters/cluster-stockout-issues", "service": "dataproc.googleapis.com", "type": "dataproc.googleapis.com/Cluster" } } ], "methodName": "google.cloud.dataproc.v1.ClusterController.CreateCluster", "request": { "@type": "type.googleapis.com/google.cloud.dataproc.v1.CreateClusterRequest", "cluster": { "clusterName": "cluster-stockout-issues", "config": { "gceClusterConfig": { "internalIpOnly": false }, "masterConfig": { "accelerators": [ { "acceleratorCount": 1, "acceleratorTypeUri": "nvidia-a100-80gb" } ], "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "machineTypeUri": "a2-ultragpu-1g" }, "workerConfig": { "accelerators": [ { "acceleratorCount": 4, "acceleratorTypeUri": "nvidia-a100-80gb" } ], "diskConfig": { "bootDiskSizeGb": 30, "bootDiskType": "pd-standard" }, "machineTypeUri": "a2-ultragpu-1g", "numInstances": 4 } }, "projectId": "gcpdiag-dataproc3-aaaa" }, "projectId": "gcpdiag-dataproc3-aaaa", "region": "us-central1" }, "requestMetadata": { "callerIp": "gce-internal-ip", "callerSuppliedUserAgent": "google-api-go-client/0.5 Terraform/1.5.7 (+https://www.terraform.io) Terraform-Plugin-SDK/2.36.0 terraform-provider-google/6.38.0,gzip(gfe)", "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-06-13T16:14:55.949855486Z" } }, "resourceLocation": { "currentLocations": [ "us-central1" ] }, "resourceName": "projects/gcpdiag-dataproc3-aaaa/regions/us-central1/clusters/cluster-stockout-issues", "serviceName": "dataproc.googleapis.com", "status": { "code": 3, "message": "The zone 'projects/gcpdiag-dataproc3-aaaa/zones/us-central1-b' does not have enough resources available to fulfill the request. '(resource type:compute)'." } }, "receiveTimestamp": "2025-06-13T16:14:58.745087897Z", "resource": { "labels": { "cluster_name": "cluster-stockout-issues", "cluster_uuid": "", "project_id": "gcpdiag-dataproc3-aaaa", "region": "us-central1" }, "type": "cloud_dataproc_cluster" }, "severity": "ERROR", "timestamp": "2025-06-13T16:14:55.930548627Z" } ] } ================================================ FILE: test-data/dataproc3/json-dumps/project.json ================================================ { "name": "projects/12340098", "parent": "folders/348077457356", "projectId": "gcpdiag-dataproc3-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - dataproc3", "createTime": "2024-10-31T03:04:58.584562Z", "updateTime": "2024-10-31T06:18:28.441603Z", "etag": "W/\"520c285328f06d6d\"", "labels": { "gcpdiag": "test", "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/dataproc3/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340098/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded", "compute.googleapis.com/tpus_per_tpu_family" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340098" }, { "name": "projects/12340098/services/dataproc-control.googleapis.com", "config": { "name": "dataproc-control.googleapis.com", "title": "Cloud Dataproc Control API", "documentation": { "summary": "Manages internal resources for Google Cloud Dataproc." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340098" }, { "name": "projects/12340098/services/dataproc.googleapis.com", "config": { "name": "dataproc.googleapis.com", "title": "Cloud Dataproc API", "documentation": { "summary": "Manages Hadoop-based clusters and jobs on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340098" }, { "name": "projects/12340098/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340098" }, { "name": "projects/12340098/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340098" }, { "name": "projects/12340098/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340098" }, { "name": "projects/12340098/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340098" } ] } ================================================ FILE: test-data/fw-policy/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) FOLDER_ID_1 := $(shell terraform output -raw folder_id_1) FOLDER_ID_2 := $(shell terraform output -raw folder_id_2) FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340004 FAKE_ORG_ID = 11112222 FAKE_FOLDER_ID_1 = 100001 FAKE_FOLDER_ID_2 = 100002 ORG_POLICY_CONSTRAINTS = \ json-dumps/org-constraint-compute.disableSerialPortAccess.json \ json-dumps/org-constraint-compute.requireOsLogin.json \ json-dumps/org-constraint-compute.requireShieldedVm.json \ json-dumps/org-constraints.json \ json-dumps/org-constraint-custom.arEnforceImmutableTags.json all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-europe-west1-b.json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-migs-europe-west1-b.json \ json-dumps/compute-migs-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-subnetworks-aggregated.json \ json-dumps/compute-zones.json \ json-dumps/iam-policy.json \ json-dumps/iam-roles-custom.json \ json-dumps/iam-service-accounts.json \ json-dumps/project.json \ json-dumps/services.json \ $(ORG_POLICY_CONSTRAINTS) \ json-dumps/org-policies.json \ include ../Makefile.inc ================================================ FILE: test-data/fw-policy/README.md ================================================ This project is used to test firewall security policies configured in a folder hierarchy. ================================================ FILE: test-data/fw-policy/firewall.tf ================================================ resource "google_compute_firewall" "fw-test-800" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-test-800" network = "default" priority = 800 source_ranges = ["10.100.0.0/24"] deny { protocol = "tcp" ports = ["1001-1002"] } } resource "google_compute_firewall" "fw-test-900" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-test-900" network = "default" priority = 900 source_ranges = ["10.100.0.0/24"] source_tags = ["foobar", "foo", "bar"] allow { protocol = "tcp" ports = ["1234", "1000-2000", "2033"] } } resource "google_compute_firewall" "fw-test-901" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-test-901" network = "default" priority = 901 source_service_accounts = ["service-12340002@compute-system.iam.gserviceaccount.com"] allow { protocol = "tcp" ports = ["4000"] } } resource "google_compute_firewall" "fw-test-902" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-test-902" network = "default" priority = 902 source_ranges = ["0.0.0.0/0"] target_service_accounts = ["service-12340002@compute-system.iam.gserviceaccount.com"] allow { protocol = "tcp" ports = ["4001"] } } resource "google_compute_firewall" "fw-test-903" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-test-903" network = "default" priority = 903 source_ranges = ["0.0.0.0/0"] target_tags = ["bar"] allow { protocol = "tcp" ports = ["1234"] } } resource "google_compute_firewall" "fw-test-950" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-test-950" network = "default" priority = 950 source_ranges = ["0.0.0.0/0"] deny { protocol = "tcp" ports = ["1006"] } } ================================================ FILE: test-data/fw-policy/fw-policy.tf ================================================ resource "google_compute_firewall_policy" "parent" { provider = google-beta short_name = "parent-folder-policy" parent = "folders/422810093603" } resource "google_compute_firewall_policy" "sub" { provider = google-beta short_name = "sub-folder-policy" parent = "folders/392556968391" } resource "google_compute_firewall_policy_association" "parent" { name = "parent-association" firewall_policy = google_compute_firewall_policy.parent.id attachment_target = google_compute_firewall_policy.parent.parent } resource "google_compute_firewall_policy_association" "sub" { name = "sub-association" firewall_policy = google_compute_firewall_policy.sub.id attachment_target = google_compute_firewall_policy.sub.parent } resource "google_compute_firewall_policy_rule" "parent-1" { firewall_policy = google_compute_firewall_policy.parent.id description = "parent-1-rule" priority = 9000 action = "allow" direction = "INGRESS" match { src_ip_ranges = ["10.101.0.1/32"] layer4_configs { ip_protocol = "tcp" ports = ["2000-2002"] } } } resource "google_compute_firewall_policy_rule" "sub-1" { firewall_policy = google_compute_firewall_policy.sub.id description = "sub-1-rule" priority = 9000 action = "allow" direction = "INGRESS" target_resources = [data.google_compute_network.default.self_link] match { src_ip_ranges = ["10.101.0.1/32"] layer4_configs { ip_protocol = "tcp" ports = ["2003"] } } } resource "google_compute_firewall_policy_rule" "sub-2" { firewall_policy = google_compute_firewall_policy.sub.id description = "sub-1-rule" priority = 8999 action = "allow" direction = "INGRESS" target_service_accounts = ["service-12340002@compute-system.iam.gserviceaccount.com"] match { src_ip_ranges = ["10.102.0.1/32"] layer4_configs { ip_protocol = "all" } } } resource "google_compute_firewall_policy_rule" "disabled" { firewall_policy = google_compute_firewall_policy.sub.id description = "sub-1-rule" priority = 7000 action = "allow" direction = "INGRESS" disabled = true target_service_accounts = ["service-12340002@compute-system.iam.gserviceaccount.com"] match { src_ip_ranges = ["0.0.0.0/32"] layer4_configs { ip_protocol = "all" } } } ================================================ FILE: test-data/fw-policy/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "1586287710887445984", "creationTimestamp": "2021-12-06T08:32:15.983-08:00", "name": "fw-test-900", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 900, "sourceRanges": [ "10.100.0.0/24" ], "sourceTags": [ "bar", "foo", "foobar" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "1234", "1000-2000", "2033" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-900" }, { "kind": "compute#firewall", "id": "4374547412497434080", "creationTimestamp": "2021-12-06T08:32:15.958-08:00", "name": "fw-test-950", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 950, "sourceRanges": [ "0.0.0.0/0" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "1006" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-950" }, { "kind": "compute#firewall", "id": "3934489538667891704", "creationTimestamp": "2022-04-26T06:35:19.380-07:00", "name": "gke-gke1-c8fb19cb-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gke1-c8fb19cb-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/gke-gke1-c8fb19cb-vms" }, { "kind": "compute#firewall", "id": "2493080101642798591", "creationTimestamp": "2021-12-06T08:32:16.212-08:00", "name": "fw-test-901", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 901, "sourceServiceAccounts": [ "service-12340002@compute-system.iam.gserviceaccount.com" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "4000" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-901" }, { "kind": "compute#firewall", "id": "4090334076307997726", "creationTimestamp": "2021-12-06T08:31:45.288-08:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "3146660543683884546", "creationTimestamp": "2021-12-06T09:31:25.256-08:00", "name": "fw-test-903", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 903, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "bar" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "1234" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-903" }, { "kind": "compute#firewall", "id": "294281872312337888", "creationTimestamp": "2021-12-06T08:32:15.943-08:00", "name": "fw-test-800", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 800, "sourceRanges": [ "10.100.0.0/24" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "1001-1002" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-800" }, { "kind": "compute#firewall", "id": "41078775488334840", "creationTimestamp": "2022-04-26T06:35:19.625-07:00", "name": "gke-gke1-c8fb19cb-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.4.0.0/14" ], "targetTags": [ "gke-gke1-c8fb19cb-node" ], "allowed": [ { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" }, { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/gke-gke1-c8fb19cb-all" }, { "kind": "compute#firewall", "id": "8722045246608999454", "creationTimestamp": "2021-12-06T08:31:45.223-08:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "5657786582871278622", "creationTimestamp": "2021-12-06T08:31:45.245-08:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "7387195472873780738", "creationTimestamp": "2021-12-06T09:31:25.228-08:00", "name": "fw-test-902", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 902, "sourceRanges": [ "0.0.0.0/0" ], "targetServiceAccounts": [ "service-12340002@compute-system.iam.gserviceaccount.com" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "4001" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-902" }, { "kind": "compute#firewall", "id": "1583992647830883321", "creationTimestamp": "2022-04-26T06:35:19.012-07:00", "name": "gke-gke1-c8fb19cb-ssh", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "34.77.103.187/32" ], "targetTags": [ "gke-gke1-c8fb19cb-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/gke-gke1-c8fb19cb-ssh" }, { "kind": "compute#firewall", "id": "3709819709257122846", "creationTimestamp": "2021-12-06T08:31:45.266-08:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/default-allow-rdp" } ], "firewallPolicys": [ { "name": "856256210981", "type": "HIERARCHY", "shortName": "parent-folder-policy", "displayName": "parent-folder-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 9000, "match": { "srcIpRanges": [ "10.101.0.1/32" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "2000-2002" ] } ] }, "action": "allow", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483645, "match": { "srcIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" } ] }, { "name": "203310830110", "type": "HIERARCHY", "shortName": "sub-folder-policy", "displayName": "sub-folder-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 8999, "match": { "srcIpRanges": [ "10.102.0.1/32" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "allow", "direction": "INGRESS", "targetServiceAccounts": [ "service-12340002@compute-system.iam.gserviceaccount.com" ] }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 9000, "match": { "srcIpRanges": [ "10.101.0.1/32" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "2003" ] } ] }, "action": "allow", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483645, "match": { "srcIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" } ] }, { "name": "test-sorting-policy-same-ip", "type": "HIERARCHY", "shortName": "test-sorting-same-ip-policy", "displayName": "test-sorting-same-ip-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "allow rule with priority 1000 and same src ip range", "priority": 1000, "match": { "srcIpRanges": [ "10.104.0.1/32" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "80" ] } ] }, "action": "allow", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "deny rule with priority 1000 and same src ip range", "priority": 1000, "match": { "srcIpRanges": [ "10.104.0.1/32" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "80" ] } ] }, "action": "deny", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" } ] } ] } ================================================ FILE: test-data/fw-policy/json-dumps/compute-instances-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b/instances" } ================================================ FILE: test-data/fw-policy/json-dumps/compute-migs-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b/instanceGroupManagers", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/fw-policy/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "8490460086022669371", "creationTimestamp": "2021-12-06T08:31:16.305-08:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/8490460086022669371", "autoCreateSubnetworks": true, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2/subnetworks/default" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/fw-policy/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "O3sXwEaEuMA=", "items": [ { "key": "gke-gke1-c8fb19cb-secondary-ranges", "value": "services:default:default:gke-gke1-services-c8fb19cb,pods:default:default:gke-gke1-pods-c8fb19cb" } ], "kind": "compute#metadata" }, "creationTimestamp": "2021-12-06T08:31:05.630-08:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12340004-compute@developer.gserviceaccount.com", "id": "6021859261062284326", "kind": "compute#project", "name": "gcpdiag-fw-policy-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 13 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 1 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 500, "metric": "HEALTH_CHECKS", "usage": 0 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 1 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 34 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/fw-policy/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-fw-policy-aaaa/aggregated/subnetworks", "items": { "regions/asia-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.146-07:00", "fingerprint": "1YYNoopRKE0=", "gatewayAddress": "10.140.0.1", "id": "6852052907234216674", "ipCidrRange": "10.140.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.333-07:00", "fingerprint": "MK6q8_sLJJc=", "gatewayAddress": "10.170.0.1", "id": "1125525225671281378", "ipCidrRange": "10.170.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.247-07:00", "fingerprint": "3cfh-73ffVA=", "gatewayAddress": "10.146.0.1", "id": "820665281610304226", "ipCidrRange": "10.146.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.330-07:00", "fingerprint": "9Tp1AbsCmMo=", "gatewayAddress": "10.174.0.1", "id": "6054847225511594722", "ipCidrRange": "10.174.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast3": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.324-07:00", "fingerprint": "JehCxwfsXB0=", "gatewayAddress": "10.178.0.1", "id": "4459529744225979106", "ipCidrRange": "10.178.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.347-07:00", "fingerprint": "8tYGaYiNY3o=", "gatewayAddress": "10.160.0.1", "id": "869720697258167010", "ipCidrRange": "10.160.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.433-07:00", "fingerprint": "fv0Mm4bip0U=", "gatewayAddress": "10.190.0.1", "id": "6746956599394355938", "ipCidrRange": "10.190.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.319-07:00", "fingerprint": "JnzO3Hi7eqM=", "gatewayAddress": "10.148.0.1", "id": "9070806327716006626", "ipCidrRange": "10.148.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.384-07:00", "fingerprint": "k9KEDcmlCMs=", "gatewayAddress": "10.184.0.1", "id": "7620656477587426018", "ipCidrRange": "10.184.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.348-07:00", "fingerprint": "D8uKEE8gYDM=", "gatewayAddress": "10.152.0.1", "id": "1489494304956140258", "ipCidrRange": "10.152.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.378-07:00", "fingerprint": "AO6HqZDHx5Q=", "gatewayAddress": "10.192.0.1", "id": "3580328777430911714", "ipCidrRange": "10.192.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-central2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.312-07:00", "fingerprint": "Y54Lf0vqqc4=", "gatewayAddress": "10.186.0.1", "id": "3365031953897147106", "ipCidrRange": "10.186.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:06.293-07:00", "fingerprint": "6urF6-w4Ayg=", "gatewayAddress": "10.166.0.1", "id": "5830023752198441697", "ipCidrRange": "10.166.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-southwest1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.357-07:00", "fingerprint": "ncbzqTUZf1c=", "gatewayAddress": "10.204.0.1", "id": "2060615459427896034", "ipCidrRange": "10.204.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-southwest1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.256-07:00", "fingerprint": "ypgP-7I6ZPI=", "gatewayAddress": "10.132.0.1", "id": "7538294393717967586", "ipCidrRange": "10.132.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.909-07:00", "fingerprint": "S7Er80MBb9Q=", "gatewayAddress": "10.154.0.1", "id": "112506061618989794", "ipCidrRange": "10.154.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:06.063-07:00", "fingerprint": "b5VFFPF2eII=", "gatewayAddress": "10.156.0.1", "id": "8197671525485169377", "ipCidrRange": "10.156.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:06.005-07:00", "fingerprint": "ukoy6ccv6EM=", "gatewayAddress": "10.164.0.1", "id": "4841845905892100833", "ipCidrRange": "10.164.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west6": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.200-07:00", "fingerprint": "vUQsVq30FzQ=", "gatewayAddress": "10.172.0.1", "id": "7701367193776212706", "ipCidrRange": "10.172.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west8": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.263-07:00", "fingerprint": "Ax9fjZDfznM=", "gatewayAddress": "10.198.0.1", "id": "3641025706229549794", "ipCidrRange": "10.198.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west9": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.225-07:00", "fingerprint": "9wMs1TOjwS4=", "gatewayAddress": "10.200.0.1", "id": "5461192301783075554", "ipCidrRange": "10.200.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west9/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.320-07:00", "fingerprint": "a7Ep2qiL77Q=", "gatewayAddress": "10.208.0.1", "id": "1672344055022930658", "ipCidrRange": "10.208.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/me-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.135-07:00", "fingerprint": "vVxCaMhS8Y4=", "gatewayAddress": "10.162.0.1", "id": "7587754571378772706", "ipCidrRange": "10.162.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.247-07:00", "fingerprint": "6joNUA4iKb4=", "gatewayAddress": "10.188.0.1", "id": "2622110728900889314", "ipCidrRange": "10.188.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.311-07:00", "fingerprint": "ej0aDE8R868=", "gatewayAddress": "10.158.0.1", "id": "6807818940268464866", "ipCidrRange": "10.158.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.246-07:00", "fingerprint": "CWfv3RPrHOE=", "gatewayAddress": "10.194.0.1", "id": "3876390708619299554", "ipCidrRange": "10.194.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.046-07:00", "fingerprint": "DGMHzKEyKbE=", "gatewayAddress": "10.128.0.1", "id": "1093382094154943202", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.277-07:00", "fingerprint": "BPggPaul-ZQ=", "gatewayAddress": "10.142.0.1", "id": "5201598787581168354", "ipCidrRange": "10.142.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east4": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.317-07:00", "fingerprint": "OPh44V64snQ=", "gatewayAddress": "10.150.0.1", "id": "8682586312594737890", "ipCidrRange": "10.150.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east5": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.192-07:00", "fingerprint": "mBkXJMiNnAM=", "gatewayAddress": "10.202.0.1", "id": "1181975329462340322", "ipCidrRange": "10.202.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east5/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east7": { "subnetworks": [ { "creationTimestamp": "2022-10-18T02:53:11.884-07:00", "fingerprint": "AZ566ykbny8=", "gatewayAddress": "10.196.0.1", "id": "5314748717446973800", "ipCidrRange": "10.196.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east7/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.124-07:00", "fingerprint": "OWloc4TdZFw=", "gatewayAddress": "10.206.0.1", "id": "8098556131403680482", "ipCidrRange": "10.206.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.135-07:00", "fingerprint": "oPGT2mYa-7Q=", "gatewayAddress": "10.138.0.1", "id": "7256027175929826018", "ipCidrRange": "10.138.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.193-07:00", "fingerprint": "KkbwtA-tzTk=", "gatewayAddress": "10.168.0.1", "id": "2918242483372608226", "ipCidrRange": "10.168.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.425-07:00", "fingerprint": "ykcQm_iZ3e0=", "gatewayAddress": "10.180.0.1", "id": "5655741620073581282", "ipCidrRange": "10.180.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-17T08:26:05.582-07:00", "fingerprint": "2HTuQEZecws=", "gatewayAddress": "10.182.0.1", "id": "7895999026978409186", "ipCidrRange": "10.182.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/aggregated/subnetworks" } ================================================ FILE: test-data/fw-policy/json-dumps/compute-subnetworks-europe-west4.json ================================================ { "kind": "compute#subnetworkList", "id": "projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks", "items": [ { "kind": "compute#subnetwork", "id": "1510756175501820978", "creationTimestamp": "2021-12-06T08:31:25.950-08:00", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default", "ipCidrRange": "10.164.0.0/20", "gatewayAddress": "10.164.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks/default", "privateIpGoogleAccess": false, "fingerprint": "Zuro06Cq_IY=", "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "stackType": "IPV4_ONLY" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks" } ================================================ FILE: test-data/fw-policy/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-fw-policy-aaaa/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-central1-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-central1-f", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-central1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west4-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west4-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west4-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones" } ================================================ FILE: test-data/fw-policy/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12340004@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-12340004@container-engine-robot.iam.gserviceaccount.com" ], "role": "roles/container.serviceAgent" }, { "members": [ "serviceAccount:service-12340004@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:12340004-compute@developer.gserviceaccount.com", "serviceAccount:12340004@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12340004@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" } ], "etag": "BwXdjsAMxlc=", "version": 1 } ================================================ FILE: test-data/fw-policy/json-dumps/iam-roles-custom.json ================================================ {} ================================================ FILE: test-data/fw-policy/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Compute Engine default service account", "email": "12340004-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-fw-policy-aaaa/serviceAccounts/12340004-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-fw-policy-aaaa", "uniqueId": "101256181481776388736" } ] } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraint-compute.disableSerialPortAccess.json ================================================ { "booleanPolicy": { "enforced": true }, "constraint": "constraints/compute.disableSerialPortAccess" } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraint-compute.disableSerialPortLogging.json ================================================ { "booleanPolicy":{}, "constraint": "constraints/compute.disableSerialPortLogging" } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraint-compute.disableSshInBrowser.json ================================================ { "booleanPolicy": { "enforced": true }, "constraint": "constraints/compute.disableSshInBrowser" } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraint-compute.requireOsLogin.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireOsLogin" } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraint-compute.requireShieldedVm.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireShieldedVm" } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraint-custom.arEnforceImmutableTags.json ================================================ { "constraint": "customConstraints/custom.arEnforceImmutableTags", "booleanPolicy": {} } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json ================================================ { "booleanPolicy":{}, "constraint": "constraints/iam.automaticIamGrantsForDefaultServiceAccounts" } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/iam.disableCrossProjectServiceAccountUsage" } ================================================ FILE: test-data/fw-policy/json-dumps/org-constraints.json ================================================ { "constraints": [ { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables serial port access to Compute Engine VMs belonging to the organization, project, or folder where this constraint is set to True. By default, customers can enable serial port access for Compute Engine VMs on a per-VM or per-project basis using metadata attributes. Enforcing this constraint will disable serial port access for Compute Engine VMs, regardless of the metadata attributes.", "displayName": "Disable VM serial port access", "name": "constraints/compute.disableSerialPortAccess" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables serial port logging to Stackdriver from Compute Engine VMs belonging to the organization, project, or folder where this constraint is being enforced. By default, serial port logging for Compute Engine VMs is disabled, and can be selectively enabled on a per-VM or per-project basis using metadata attributes. When enforced, this constraint disables serial port logging for new Compute Engine VMs whenever a new VM is created, as well as preventing users from changing the metadata attribute of any VMs (old or new) to True. Disabling serial port logging can cause certain services that rely on it, such as Google Kubernetes Engine clusters, to not function correctly. Before you enforce this constraint, verify that the products in your project do not rely on serial port logging.", "displayName": "Disable VM serial port logging to Stackdriver", "name": "constraints/compute.disableSerialPortLogging" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables the SSH-in-browser tool in the Cloud Console for VMs that use OS Login and App Engine flexible environment VMs. When enforced, the SSH-in-browser button is disabled. By default, using the SSH-in-browser tool is allowed.", "displayName": "Disable SSH-in-browser", "name": "constraints/compute.disableSshInBrowser" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when set to true, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. By default, the OS Login feature is disabled on Compute Engine projects.GKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.", "displayName": "Require OS Login", "name": "constraints/compute.requireOsLogin" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when set to True, requires that all new Compute Engine VM instances use Shielded disk images with Secure Boot, vTPM, and Integrity Monitoring options enabled. Secure Boot can be disabled after creation, if desired. Existing running instances will continue to work as usual. By default, Shielded VM features do not need to be enabled in order to create Compute Engine VM instances. Shielded VM features add verifiable integrity and exfiltration resistance to your VMs.", "displayName": "Shielded VMs", "name": "constraints/compute.requireShieldedVm" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when enforced, prevents the default App Engine and Compute Engine service accounts that are created in your projects from being automatically granted any IAM role on the project when the accounts are created. By default, these service accounts automatically receive the Editor role when they are created. To learn about default service accounts, see https://cloud.google.com/iam/help/service-accounts/default. To learn which roles to grant instead of the Editor role, see https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.", "displayName": "Disable Automatic IAM Grants for Default Service Accounts", "name": "constraints/iam.automaticIamGrantsForDefaultServiceAccounts" }, { "booleanConstraint": {}, "constraintDefault": "DENY", "description": "When enforced, service accounts can only be deployed (using ServiceAccountUser role) to jobs (vms, functions, etc) running in the same project as the service account.", "displayName": "Disable Cross-Project Service Account Usage", "name": "constraints/iam.disableCrossProjectServiceAccountUsage" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "All new Docker repositories must have tag immutability enabled.", "displayName": "Enforce Immutable Tags", "name": "customConstraints/custom.arEnforceImmutableTags" } ] } ================================================ FILE: test-data/fw-policy/json-dumps/org-policies.json ================================================ { "policies": [ { "version": 2, "constraint": "constraints/cloudbuild.allowedWorkerPools", "etag": "CNmNp74GEPCmnzw=", "updateTime": "2025-03-06T16:01:29.126342Z", "listPolicy": { "allowedValues": [ "projects/12340004/locations/us-central1/workerPools/test-pool" ] } }, { "constraint": "constraints/compute.skipDefaultNetworkCreation", "etag": "CL2Kp74GENDg7McD", "updateTime": "2025-03-06T15:54:37.955986Z", "booleanPolicy": {} } ] } ================================================ FILE: test-data/fw-policy/json-dumps/project.json ================================================ { "name": "projects/12340004", "parent": "folders/100002", "projectId": "gcpdiag-fw-policy-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - fw-policy", "createTime": "2021-12-06T16:30:26.953Z", "updateTime": "2022-04-25T16:06:00.374Z", "etag": "+uU+KxzozpwgpdToJJzXew==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/fw-policy/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340004/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" is supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" }, { "name": "projects/12340004/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340004" } ] } ================================================ FILE: test-data/fw-policy/org-policy.tf ================================================ resource "google_org_policy_policy" "disable_serial_port_access" { name = "${data.google_folder.parent.name}/policies/compute.disableSerialPortAccess" parent = data.google_folder.parent.name spec { rules { enforce = "TRUE" } } } ================================================ FILE: test-data/fw-policy/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - fw-policy" project_id = "gcpdiag-fw-policy-${random_string.project_id_suffix.id}" billing_account = var.billing_account_id folder_id = "folders/${var.sub_folder_id}" labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "container" { project = google_project.project.project_id service = "container.googleapis.com" depends_on = [google_project_service.compute] } data "google_folder" "parent" { folder = "folders/${var.parent_folder_id}" lookup_organization = true } data "google_folder" "sub" { folder = "folders/${var.sub_folder_id}" } data "google_compute_network" "default" { project = google_project.project.project_id name = "default" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = regex("organizations/(\\d+)", data.google_folder.parent.organization)[0] } output "folder_id_1" { value = regex("folders/(\\d+)", data.google_folder.parent.id)[0] } output "folder_id_2" { value = regex("folders/(\\d+)", data.google_folder.sub.id)[0] } ================================================ FILE: test-data/fw-policy/variables.tf ================================================ variable "billing_account_id" {} variable "parent_folder_id" {} variable "sub_folder_id" {} ================================================ FILE: test-data/gaes1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = us-central1 REGION_2 = europe-west1 FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 123400010 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/versions.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/appengine_services.json \ json-dumps/logging-entries-1.json json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/versions.json: $(CURL) -fsS \ 'https://appengine.googleapis.com/v1/apps/$(PROJECT_ID)/services/default/versions' \ | $(JSON_CLEANER) appengine_versions \ | $(SED_SUBST_FAKE) >$@ json-dumps/appengine_services.json: $(CURL) -fsS \ 'https://appengine.googleapis.com/v1/apps/$(PROJECT_ID)/services' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gaes1/gaes1-bucket-object.tf ================================================ resource "google_storage_bucket_object" "hello_world" { name = "hello_world.zip" source = "hello_world.zip" bucket = "gaes1-bucket" } ================================================ FILE: test-data/gaes1/gaes1-bucket.tf ================================================ resource "google_storage_bucket" "gaes1-bucket" { name = "gaes1-bucket" location = "EU" project = "gcpdiag-gaes1-vvdo0yn5" } ================================================ FILE: test-data/gaes1/gaes1.tf ================================================ resource "google_app_engine_standard_app_version" "version1" { version_id = "v1" service = "default" runtime = "python39" project = "gcpdiag-gaes1-vvdo0yn5" entrypoint { shell = "python ./main.py" } deployment { zip { source_url = "https://storage.googleapis.com/gaes1-bucket/hello_world.zip" } } env_variables = { port = "8080" } automatic_scaling { min_idle_instances = 0 max_idle_instances = 1 } delete_service_on_destroy = true } ================================================ FILE: test-data/gaes1/json-dumps/appengine_services.json ================================================ { "services": [ { "name": "apps/gcpdiag-gaes1-aaaa/services/default", "id": "default", "split": { "allocations": { "v1": 1 } } } ] } ================================================ FILE: test-data/gaes1/json-dumps/logging-entries-1.json ================================================ { "entries": [] } ================================================ FILE: test-data/gaes1/json-dumps/project.json ================================================ { "name": "projects/123400010", "parent": "organizations/11112222", "projectId": "gcpdiag-gaes1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - gaes1", "createTime": "2022-01-16T15:01:44.243Z", "updateTime": "2022-01-16T15:01:46.204Z", "etag": "+KU/oa5enHLJr4zqmCD/8w==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gaes1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/123400010/services/appengine.googleapis.com", "config": { "name": "appengine.googleapis.com", "title": "App Engine Admin API", "documentation": { "summary": "Provisions and manages developers' App Engine applications." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" }, { "name": "projects/123400010/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123400010" } ] } ================================================ FILE: test-data/gaes1/json-dumps/versions.json ================================================ { "versions": [ { "automaticScaling": { "maxIdleInstances": 1 }, "createTime": "2022-01-16T15:24:02Z", "createdBy": "REDACTED", "diskUsageBytes": "2488636", "env": "standard", "id": "v1", "instanceClass": "F1", "name": "apps/gcpdiag-gaes1-aaaa/services/default/versions/v1", "network": {}, "runtime": "python39", "runtimeChannel": "default", "servingStatus": "SERVING", "threadsafe": true, "versionUrl": "https://v1-dot-gcpdiag-gaes1-aaaa.appspot.com" } ] } ================================================ FILE: test-data/gaes1/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - gaes1" project_id = "gcpdiag-gaes1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "cloudbuild" { project = google_project.project.project_id service = "cloudbuild.googleapis.com" } resource "google_project_service" "appengine" { project = google_project.project.project_id service = "appengine.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gaes1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/gcb1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) BUILD1_CONFIG := $(shell terraform output -raw build1_config) BUILD1B_CONFIG := $(shell terraform output -raw build1b_config) BUILD2_CONFIG := $(shell terraform output -raw build2_config) BUILD3_CONFIG := $(shell terraform output -raw build3_config) BUILD4_CONFIG := $(shell terraform output -raw build4_config) BUCKET_WITH_RETENTION := $(shell terraform output -raw bucket_with_retention) ARTIFACT_REGISTRY := $(shell terraform output -raw artifact_registry) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = us-central1 REGION_2 = europe-west1 FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340005 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/cloudbuild.json \ json-dumps/cloudbuild-$(REGION_1).json \ json-dumps/cloudbuild-empty.json \ json-dumps/cloudbuild-triggers.json \ json-dumps/bucket-gcpdiag-gcb1-bucket1-aaaa.json \ json-dumps/artifact-registry-policy.json \ json-dumps/artifact-registry-project-settings.json \ json-dumps/iam-service-accounts.json \ json-dumps/project.json \ json-dumps/services.json run-builds: gcloud builds submit --no-source --config $(BUILD1_CONFIG) \ --project $(PROJECT_ID) || true gcloud builds submit --no-source --config $(BUILD1B_CONFIG) \ --project $(PROJECT_ID) || true gcloud builds submit --no-source --config $(BUILD2_CONFIG) \ --project $(PROJECT_ID) || true gcloud builds submit --no-source --config $(BUILD3_CONFIG) \ --project $(PROJECT_ID) || true gcloud builds submit --no-source --config $(BUILD4_CONFIG) \ --project $(PROJECT_ID) || true gcloud builds submit --no-source --region $(REGION_1) --config $(BUILD3_CONFIG) \ --project $(PROJECT_ID) || true json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudbuild.json: $(CURL) -fsS \ 'https://cloudbuild.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/builds' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudbuild-$(REGION_1).json: $(CURL) -fsS \ 'https://cloudbuild.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/builds' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudbuild-empty.json: $(CURL) -fsS \ 'https://cloudbuild.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_2)/builds' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudbuild-triggers.json: $(CURL) -fsS \ 'https://cloudbuild.googleapis.com/v1/projects/$(PROJECT_ID)/triggers' \ | $(SED_SUBST_FAKE) >$@ json-dumps/bucket-gcpdiag-gcb1-bucket1-aaaa.json: $(CURL) -fv \ 'https://storage.googleapis.com/storage/v1/b/${BUCKET_WITH_RETENTION}' \ | $(SED_SUBST_FAKE) >$@ json-dumps/artifact-registry-policy.json: $(CURL) -fv \ 'https://artifactregistry.googleapis.com/v1/$(ARTIFACT_REGISTRY):getIamPolicy' \ | $(SED_SUBST_FAKE) >$@ json-dumps/artifact-registry-project-settings.json: $(CURL) -fv \ 'https://artifactregistry.googleapis.com/v1/projects/$(PROJECT_ID)/projectSettings' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gcb1/README.md ================================================ # Generating builds history data. ## TLDR After initializing the repository to generate build history run `make run-builds` once and only once. ## Explanation Terraform does not allow to run builds since it is not a resource, but imperative procedure. Also there is no way to clear builds history, so it is important that running builds happens only once. If you want to add some data to build history, and you need to retry build several times to get desired outcome, then after you got to desired effect either run `terraform destroy` and initialize a new project or manually remove older builds from json dump. ================================================ FILE: test-data/gcb1/artifact_registry.tf ================================================ data "google_client_config" "default" { } data "google_client_openid_userinfo" "me" { } resource "google_artifact_registry_repository" "gcb1_repo" { provider = google-beta project = google_project.project.project_id location = "us-central1" repository_id = "gcb1-repository" description = "example docker repository" format = "DOCKER" } // https://cloud.google.com/artifact-registry/docs/transition/setup-gcr-repo#redirect-enable resource "google_artifact_registry_repository" "legacy" { location = "us" project = google_project.project.project_id description = "gcr.io repository" format = "DOCKER" repository_id = "gcr.io" } resource "google_project_iam_binding" "storageAdmin" { project = google_project.project.project_id role = "roles/storage.admin" members = [ "user:${data.google_client_openid_userinfo.me.email}", ] } resource "null_resource" "ar-redirect" { provisioner "local-exec" { command = <<-EOT curl -H 'Authorization: Bearer nonsensitive(${data.google_client_config.default.access_token})' \ -H 'Content-type: application/json' \ https://artifactregistry.googleapis.com/v1/projects/${google_project.project.project_id}/projectSettings?updateMask=legacyRedirectionState \ -X PATCH \ --data '{ "legacyRedirectionState": "REDIRECTION_FROM_GCR_IO_ENABLED" }' EOT } depends_on = [ google_project_iam_binding.storageAdmin ] } resource "google_artifact_registry_repository_iam_binding" "binding" { provider = google-beta project = google_artifact_registry_repository.gcb1_repo.project location = google_artifact_registry_repository.gcb1_repo.location repository = google_artifact_registry_repository.gcb1_repo.name role = "roles/artifactregistry.admin" members = [ "serviceAccount:${google_service_account.service_account_custom2.email}", ] } locals { repository_url = "${google_artifact_registry_repository.gcb1_repo.location}-docker.pkg.dev/${google_project.project.project_id}/${google_artifact_registry_repository.gcb1_repo.repository_id}" legacy_repository_url = "${google_artifact_registry_repository.legacy.repository_id}/${google_project.project.project_id}" } output "artifact_registry" { value = google_artifact_registry_repository.gcb1_repo.id } output "legacy_artifact_registry" { value = google_artifact_registry_repository.legacy.repository_id } ================================================ FILE: test-data/gcb1/buckets.tf ================================================ resource "google_storage_bucket" "bucket_with_retention" { project = google_project.project.project_id name = "gcpdiag-gcb1-bucket1-${random_string.project_id_suffix.id}" location = "US" storage_class = "STANDARD" retention_policy { retention_period = 10 } } output "bucket_with_retention" { value = google_storage_bucket.bucket_with_retention.name } ================================================ FILE: test-data/gcb1/build_configs/.gitignore ================================================ *.yaml ================================================ FILE: test-data/gcb1/build_configs/cloudbuild1.yaml.tpl ================================================ # Builds an image but errors on uploading it to artifact registry due to lack of # permissions. steps: - name: gcr.io/cloud-builders/docker args: ["tag", "gcr.io/cloud-builders/docker", "${image}"] images: - ${image} serviceAccount: '${sa}' options: logging: CLOUD_LOGGING_ONLY ================================================ FILE: test-data/gcb1/build_configs/cloudbuild2.yaml.tpl ================================================ # Errors on uploading logs to bucket with retention policy. steps: - name: gcr.io/cloud-builders/docker args: ["ps"] logsBucket: 'gs://${bucket}' ================================================ FILE: test-data/gcb1/build_configs/cloudbuild3.yaml.tpl ================================================ # Errors in one of the steps. steps: - name: ubuntu args: [bash, -c, "[ 1 == 2 ]"] ================================================ FILE: test-data/gcb1/build_configs/cloudbuild4.yaml.tpl ================================================ # Successfully uploads logs to bucket with retention policy. steps: - name: gcr.io/cloud-builders/docker args: ["ps"] logsBucket: 'gs://${bucket}' options: logging: GCS_ONLY logStreamingOption: STREAM_OFF ================================================ FILE: test-data/gcb1/build_configs.tf ================================================ resource "local_file" "build1_config" { content = templatefile( "${path.module}/build_configs/cloudbuild1.yaml.tpl", { image = "${local.repository_url}/image", sa = google_service_account.service_account_custom1.name }) filename = "${path.module}/build_configs/cloudbuild1.yaml" } resource "local_file" "build1b_config" { content = templatefile( "${path.module}/build_configs/cloudbuild1.yaml.tpl", { image = "${local.legacy_repository_url}/image", sa = google_service_account.service_account_custom1.name }) filename = "${path.module}/build_configs/cloudbuild1b.yaml" } resource "local_file" "build2_config" { content = templatefile( "${path.module}/build_configs/cloudbuild2.yaml.tpl", { bucket = google_storage_bucket.bucket_with_retention.name, }) filename = "${path.module}/build_configs/cloudbuild2.yaml" } resource "local_file" "build3_config" { content = templatefile( "${path.module}/build_configs/cloudbuild3.yaml.tpl", {}) filename = "${path.module}/build_configs/cloudbuild3.yaml" } resource "local_file" "build4_config" { content = templatefile( "${path.module}/build_configs/cloudbuild4.yaml.tpl", { bucket = google_storage_bucket.bucket_with_retention.name, }) filename = "${path.module}/build_configs/cloudbuild4.yaml" } output "build1_config" { value = local_file.build1_config.filename } output "build1b_config" { value = local_file.build1b_config.filename } output "build2_config" { value = local_file.build2_config.filename } output "build3_config" { value = local_file.build3_config.filename } output "build4_config" { value = local_file.build4_config.filename } ================================================ FILE: test-data/gcb1/json-dumps/artifact-registry-policy.json ================================================ { "version": 1, "etag": "BwXb+QqqmFg=", "bindings": [ { "role": "roles/artifactregistry.admin", "members": [ "serviceAccount:gcb-custom2@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com" ] } ] } ================================================ FILE: test-data/gcb1/json-dumps/artifact-registry-project-settings.json ================================================ { "legacyRedirectionState": "REDIRECTION_FROM_GCR_IO_ENABLED" } ================================================ FILE: test-data/gcb1/json-dumps/bucket-gcpdiag-gcb1-bucket1-aaaa.json ================================================ { "kind": "storage#bucket", "selfLink": "https://www.googleapis.com/storage/v1/b/gcpdiag-gcb1-bucket1-aaaa", "id": "gcpdiag-gcb1-bucket1-aaaa", "name": "gcpdiag-gcb1-bucket1-aaaa", "projectNumber": "12340005", "metageneration": "2", "location": "US", "storageClass": "STANDARD", "etag": "CAI=", "timeCreated": "2022-04-05T10:41:00.004Z", "updated": "2022-04-05T11:19:01.187Z", "retentionPolicy": { "retentionPeriod": "10", "effectiveTime": "2022-04-05T11:20:01.062Z" }, "iamConfiguration": { "bucketPolicyOnly": { "enabled": false }, "uniformBucketLevelAccess": { "enabled": false }, "publicAccessPrevention": "inherited" }, "locationType": "multi-region", "rpo": "DEFAULT" } ================================================ FILE: test-data/gcb1/json-dumps/cloudbuild-empty.json ================================================ {} ================================================ FILE: test-data/gcb1/json-dumps/cloudbuild-triggers.json ================================================ { "triggers": [ { "id": "1affbb4f-7b0b-4ebe-bb44-c440b574279d", "build": { "steps": [ { "name": "gcr.io/cloud-builders/gsutil" } ], "timeout": "600s" }, "createTime": "2022-04-03T14:02:31.203612089Z", "triggerTemplate": { "projectId": "gcpdiag-gcb1-aaaa", "repoName": "test-repo", "branchName": "main" }, "name": "trigger" } ] } ================================================ FILE: test-data/gcb1/json-dumps/cloudbuild-us-central1.json ================================================ { "builds": [ { "id": "f055f209-21ef-4fa1-84f8-8509d24b0fae", "status": "FAILURE", "createTime": "2022-06-19T13:07:41.315702640Z", "startTime": "2022-06-19T13:07:41.853968180Z", "finishTime": "2022-06-19T13:07:47.857781608Z", "results": { "buildStepImages": [ "sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac" ], "buildStepOutputs": [ "" ] }, "steps": [ { "name": "ubuntu", "args": [ "bash", "-c", "[ 1 == 2 ]" ], "timing": { "startTime": "2022-06-19T13:07:42.855671750Z", "endTime": "2022-06-19T13:07:47.371799580Z" }, "status": "FAILURE", "pullTiming": { "startTime": "2022-06-19T13:07:42.855671750Z", "endTime": "2022-06-19T13:07:46.729940784Z" } } ], "timeout": "1800s", "projectId": "gcpdiag-gcb1-aaaa", "logsBucket": "gs://12340005.cloudbuild-logs.googleusercontent.com", "sourceProvenance": {}, "options": { "logging": "LEGACY", "pool": {} }, "logUrl": "https://console.cloud.google.com/cloud-build/builds;region=us-central1/f055f209-21ef-4fa1-84f8-8509d24b0fae?project=12340005", "timing": { "BUILD": { "startTime": "2022-06-19T13:07:42.252766500Z", "endTime": "2022-06-19T13:07:47.371926312Z" } }, "queueTtl": "3600s", "name": "projects/12340005/locations/us-central1/builds/f055f209-21ef-4fa1-84f8-8509d24b0fae", "failureInfo": { "type": "USER_BUILD_STEP", "detail": "Build step failure: build step 0 \"ubuntu\" failed: step exited with non-zero status: 1" } } ] } ================================================ FILE: test-data/gcb1/json-dumps/cloudbuild.json ================================================ { "builds": [ { "id": "4b040094-4204-4f00-a7bd-302639dd6785", "status": "SUCCESS", "createTime": "2022-05-20T12:34:10.791863494Z", "startTime": "2022-05-20T12:34:11.439000115Z", "finishTime": "2022-05-20T12:34:13.628759Z", "results": { "buildStepImages": [ "sha256:0917313aa0c9da1bfe297c502bc09af4fd75950b81cd761169ff0f3f544cc68d" ], "buildStepOutputs": [ "" ] }, "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "ps" ], "timing": { "startTime": "2022-05-20T12:34:12.234187301Z", "endTime": "2022-05-20T12:34:13.280971897Z" }, "status": "SUCCESS", "pullTiming": { "startTime": "2022-05-20T12:34:12.234187301Z", "endTime": "2022-05-20T12:34:12.237976136Z" } } ], "timeout": "1800s", "projectId": "gcpdiag-gcb1-aaaa", "logsBucket": "gs://gcpdiag-gcb1-bucket1-aaaa", "sourceProvenance": {}, "options": { "logStreamingOption": "STREAM_OFF", "logging": "GCS_ONLY", "pool": {} }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/4b040094-4204-4f00-a7bd-302639dd6785?project=12340005", "timing": { "BUILD": { "startTime": "2022-05-20T12:34:11.696110664Z", "endTime": "2022-05-20T12:34:13.281028898Z" } }, "queueTtl": "3600s", "name": "projects/12340005/locations/global/builds/4b040094-4204-4f00-a7bd-302639dd6785" }, { "id": "01ff384c-d7f2-4295-ad68-5c32529d8b85", "status": "FAILURE", "createTime": "2022-04-05T11:54:05.438831262Z", "startTime": "2022-04-05T11:54:06.585702187Z", "finishTime": "2022-04-05T11:54:10.754613900Z", "results": { "buildStepImages": [ "sha256:bea6d19168bbfd6af8d77c2cc3c572114eb5d113e6f422573c93cb605a0e2ffb" ], "buildStepOutputs": [ "" ] }, "steps": [ { "name": "ubuntu", "args": [ "bash", "-c", "[ 1 == 2 ]" ], "timing": { "startTime": "2022-04-05T11:54:07.804641745Z", "endTime": "2022-04-05T11:54:10.169720241Z" }, "status": "FAILURE", "pullTiming": { "startTime": "2022-04-05T11:54:07.804641745Z", "endTime": "2022-04-05T11:54:09.312828516Z" } } ], "timeout": "1800s", "projectId": "gcpdiag-gcb1-aaaa", "logsBucket": "gs://12340005.cloudbuild-logs.googleusercontent.com", "sourceProvenance": {}, "options": { "logging": "LEGACY", "pool": {} }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/32ca4219-dc76-4ab7-bb6f-f183facf73ed?project=12340005", "timing": { "BUILD": { "startTime": "2022-04-05T11:54:07.097181515Z", "endTime": "2022-04-05T11:54:10.169908787Z" } }, "queueTtl": "3600s", "name": "projects/12340005/locations/global/builds/32ca4219-dc76-4ab7-bb6f-f183facf73ed", "failureInfo": { "type": "USER_BUILD_STEP", "detail": "Build step failure: build step 0 \"ubuntu\" failed: step exited with non-zero status: 1" } }, { "id": "58c22070-5629-480e-b822-cd8eff7befb8", "status": "FAILURE", "createTime": "2022-04-05T11:53:57.024283109Z", "startTime": "2022-04-05T11:53:58.105300833Z", "finishTime": "2022-04-05T11:54:02.526820640Z", "results": { "buildStepImages": [ "sha256:ace8974a1cadb3dfb95653973af926e01755613afb943d5deab41539cde70051" ], "buildStepOutputs": [ "" ] }, "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "ps" ], "timing": { "startTime": "2022-04-05T11:53:59.371129057Z", "endTime": "2022-04-05T11:54:00.490704415Z" }, "status": "SUCCESS", "pullTiming": { "startTime": "2022-04-05T11:53:59.371129057Z", "endTime": "2022-04-05T11:53:59.378457305Z" } } ], "timeout": "1800s", "projectId": "gcpdiag-gcb1-aaaa", "logsBucket": "gs://gcpdiag-gcb1-bucket1-aaaa", "sourceProvenance": {}, "options": { "logging": "LEGACY", "pool": {} }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/58c22070-5629-480e-b822-cd8eff7befb8?project=12340005", "timing": { "BUILD": { "startTime": "2022-04-05T11:53:58.663154626Z", "endTime": "2022-04-05T11:54:00.490785587Z" } }, "queueTtl": "3600s", "name": "projects/12340005/locations/global/builds/58c22070-5629-480e-b822-cd8eff7befb8", "failureInfo": { "type": "LOGGING_FAILURE", "detail": "Cloud Storage logging failed. Try again in a few minutes." } }, { "id": "db540598-5a45-46f3-a716-39d834e884c6", "status": "FAILURE", "createTime": "2022-04-05T11:53:16.584630234Z", "startTime": "2022-04-05T11:53:17.567161242Z", "finishTime": "2022-04-05T11:53:53.826458203Z", "results": { "buildStepImages": [ "sha256:ace8974a1cadb3dfb95653973af926e01755613afb943d5deab41539cde70051" ], "buildStepOutputs": [ "" ] }, "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "tag", "gcr.io/cloud-builders/docker", "us-central1-docker.pkg.dev/gcpdiag-gcb1-aaaa/gcb1-repository/image" ], "timing": { "startTime": "2022-04-05T11:53:18.508651083Z", "endTime": "2022-04-05T11:53:19.553011555Z" }, "status": "SUCCESS", "pullTiming": { "startTime": "2022-04-05T11:53:18.508651083Z", "endTime": "2022-04-05T11:53:18.512797521Z" } } ], "timeout": "1800s", "images": [ "us-central1-docker.pkg.dev/gcpdiag-gcb1-aaaa/gcb1-repository/image" ], "projectId": "gcpdiag-gcb1-aaaa", "sourceProvenance": {}, "options": { "logging": "CLOUD_LOGGING_ONLY", "pool": {} }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/db540598-5a45-46f3-a716-39d834e884c6?project=12340005", "timing": { "BUILD": { "startTime": "2022-04-05T11:53:17.864543307Z", "endTime": "2022-04-05T11:53:19.594071402Z" }, "PUSH": { "startTime": "2022-04-05T11:53:19.594176772Z", "endTime": "2022-04-05T11:53:53.639779579Z" } }, "artifacts": { "images": [ "us-central1-docker.pkg.dev/gcpdiag-gcb1-aaaa/gcb1-repository/image" ] }, "queueTtl": "3600s", "serviceAccount": "projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com", "name": "projects/12340005/locations/global/builds/db540598-5a45-46f3-a716-39d834e884c6", "warnings": [ { "text": "The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.", "priority": "INFO" } ] }, { "artifacts": { "images": [ "gcr.io/gcpdiag-gcb1-aaaa/image" ] }, "createTime": "2023-03-09T10:37:31.359018970Z", "failureInfo": { "detail": "Docker image push failure (\"The push refers to repository [gcr.io/gcpdiag-gcb1-aaaa/image]\n71ab6bbb10b7: Preparing\n0517ac42801f: Preparing\n84ff92691f90: Preparing\n90d624ea42b1: Preparing\n0d7cb9e02e7b: Preparing\ndenied: Token exchange failed for project 'gcpdiag-gcb1-aaaa'. Caller does not have permission 'storage.buckets.create'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control\n\"): You are not authorized to use project gcpdiag-gcb1-aaaa. Request a project owner of gcpdiag-gcb1-aaaa to grant ‘Cloud Build Editor’ IAM role to your 'user' account.", "type": "PUSH_NOT_AUTHORIZED" }, "finishTime": "2023-03-09T10:38:12.131615289Z", "id": "d2a2f7f0-f660-40cb-8cb1-574d29832e74", "images": [ "gcr.io/gcpdiag-gcb1-aaaa/image" ], "logUrl": "https://console.cloud.google.com/cloud-build/builds/d2a2f7f0-f660-40cb-8cb1-574d29832e74?project=86947272951", "name": "projects/86947272951/locations/global/builds/d2a2f7f0-f660-40cb-8cb1-574d29832e74", "options": { "logging": "CLOUD_LOGGING_ONLY", "pool": {} }, "projectId": "gcpdiag-gcb1-aaaa", "queueTtl": "3600s", "results": { "buildStepImages": [ "sha256:57a455a66834d73eb387c54bb92fddd707c877ef33863f089b56f86945960afe" ], "buildStepOutputs": [ "" ] }, "serviceAccount": "projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com", "sourceProvenance": {}, "startTime": "2023-03-09T10:37:32.033586269Z", "status": "FAILURE", "steps": [ { "args": [ "tag", "gcr.io/cloud-builders/docker", "gcr.io/gcpdiag-gcb1-aaaa/image" ], "name": "gcr.io/cloud-builders/docker", "pullTiming": { "endTime": "2023-03-09T10:37:33.023325973Z", "startTime": "2023-03-09T10:37:33.020467099Z" }, "status": "SUCCESS", "timing": { "endTime": "2023-03-09T10:37:33.986570836Z", "startTime": "2023-03-09T10:37:33.020467099Z" } } ], "timeout": "3600s", "timing": { "BUILD": { "endTime": "2023-03-09T10:37:34.020105149Z", "startTime": "2023-03-09T10:37:32.465794969Z" }, "PUSH": { "endTime": "2023-03-09T10:38:11.956215143Z", "startTime": "2023-03-09T10:37:34.020186956Z" } }, "warnings": [ { "priority": "INFO", "text": "The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account." } ] } ] } ================================================ FILE: test-data/gcb1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "user:testuser@example.com" ], "role": "roles/owner" } ], "etag": "BwXXikLqmJg=", "version": 1 } ================================================ FILE: test-data/gcb1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "name": "projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom1@gcpdiag-gcb1-xczqvxgx.iam.gserviceaccount.com", "projectId": "gcpdiag-gcb1-aaaa", "uniqueId": "103329727439765904040", "email": "gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com", "displayName": "Custom Service Account 1", "etag": "MDEwMjE5MjA=", "oauth2ClientId": "103329727439765904040" }, { "name": "projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom2@gcpdiag-gcb1-xczqvxgx.iam.gserviceaccount.com", "projectId": "gcpdiag-gcb1-aaaa", "uniqueId": "110794748159318559011", "email": "gcb-custom2@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com", "displayName": "Custom Service Account 2", "etag": "MDEwMjE5MjA=", "oauth2ClientId": "110794748159318559011" } ] } ================================================ FILE: test-data/gcb1/json-dumps/project.json ================================================ { "name": "projects/12340005", "parent": "organizations/11112222", "projectId": "gcpdiag-gcb1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - gcb1", "createTime": "2022-01-03T12:54:55.918Z", "updateTime": "2022-01-03T12:54:57.836Z", "etag": "+v5vT5jPhqSQRHfTtWvuWQ==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gcb1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340005/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/sourcerepo.googleapis.com", "config": { "name": "sourcerepo.googleapis.com", "title": "Cloud Source Repositories API", "documentation": { "summary": "Accesses source code repositories hosted by Google." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340005" }, { "name": "projects/12340005/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340005" } ] } ================================================ FILE: test-data/gcb1/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - gcb1" project_id = "gcpdiag-gcb1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "cloudbuild" { project = google_project.project.project_id service = "cloudbuild.googleapis.com" } resource "google_project_service" "sourcerepo" { project = google_project.project.project_id service = "sourcerepo.googleapis.com" } resource "google_project_service" "iam" { project = google_project.project.project_id service = "iam.googleapis.com" } resource "google_project_service" "artifactregistry" { project = google_project.project.project_id service = "artifactregistry.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gcb1/service_accounts.tf ================================================ resource "google_service_account" "service_account_custom1" { account_id = "gcb-custom1" display_name = "Custom Service Account 1" project = google_project.project.project_id } resource "google_service_account" "service_account_custom2" { account_id = "gcb-custom2" display_name = "Custom Service Account 2" project = google_project.project.project_id } output "service_account_custom1_email" { value = google_service_account.service_account_custom1.email } ================================================ FILE: test-data/gcb1/source_repository.tf ================================================ resource "google_sourcerepo_repository" "test-repo" { name = "test-repo" project = google_project.project.project_id depends_on = [google_project_service.sourcerepo] } ================================================ FILE: test-data/gcb1/trigger.tf ================================================ resource "google_cloudbuild_trigger" "trigger" { project = google_project.project.project_id trigger_template { branch_name = "main" repo_name = "test-repo" } build { step { name = "gcr.io/cloud-builders/gcloud" } } depends_on = [google_project_service.cloudbuild] } ================================================ FILE: test-data/gcb1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/gce-image-license/Makefile ================================================ CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner CENTOS_CLOUD= centos-cloud COS_CLOUD= cos-cloud DEBIAN_CLOUD= debian-cloud FEDORA_CLOUD= fedora-cloud FEDORA_CORECOS_CLOUD= fedora-coreos-cloud OPENSUSE_CLOUD= opensuse-cloud RHEL_CLOUD= rhel-cloud RHEL_SAP_CLOUD= rhel-sap-cloud ROCKY_LINUX_CLOUD= rocky-linux-cloud SUSE_CLOUD= suse-cloud SUSE_SAP_CLOUD= suse-sap-cloud UBUNTU_OS_CLOUD= ubuntu-os-cloud UBUNTU_OS_PRO_CLOUD= ubuntu-os-pro-cloud WINDOW_CLOUD= windows-cloud WINDOWS_SQL_CLOUD= windows-sql-cloud all: \ json-dumps/${CENTOS_CLOUD}-licenses.json \ json-dumps/${COS_CLOUD}-licenses.json \ json-dumps/${DEBIAN_CLOUD}-licenses.json \ json-dumps/${FEDORA_CLOUD}-licenses.json \ json-dumps/${FEDORA_CORECOS_CLOUD}-licenses.json \ json-dumps/${OPENSUSE_CLOUD}-licenses.json \ json-dumps/${RHEL_CLOUD}-licenses.json \ json-dumps/${RHEL_SAP_CLOUD}-licenses.json \ json-dumps/${ROCKY_LINUX_CLOUD}-licenses.json \ json-dumps/${SUSE_CLOUD}-licenses.json \ json-dumps/${SUSE_SAP_CLOUD}-licenses.json \ json-dumps/${UBUNTU_OS_CLOUD}-licenses.json \ json-dumps/${UBUNTU_OS_PRO_CLOUD}-licenses.json \ json-dumps/${WINDOW_CLOUD}-licenses.json \ json-dumps/${WINDOWS_SQL_CLOUD}-licenses.json json-dumps/%-licenses.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$*/global/licenses' \ --header "Content-Type:text/json" > $@ ================================================ FILE: test-data/gce-image-license/json-dumps/centos-cloud-licenses.json ================================================ { "id": "projects/centos-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "centos-6", "chargesUseFee": true, "id": "6261635378630811686", "licenseCode": "1000206", "creationTimestamp": "2016-02-09T14:08:14.000-08:00", "description": "CentOS 6", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-6" }, { "kind": "compute#license", "name": "centos-7", "chargesUseFee": true, "id": "1590725888655155238", "licenseCode": "1000207", "creationTimestamp": "2016-02-09T14:08:14.000-08:00", "description": "CentOS 7", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-7" }, { "kind": "compute#license", "name": "centos-8", "chargesUseFee": false, "id": "3549388059678600306", "licenseCode": "5731035067256925298", "creationTimestamp": "2019-09-24T10:30:05.016-07:00", "description": "CentOS 8", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-8" }, { "kind": "compute#license", "name": "centos-stream", "chargesUseFee": false, "id": "2847851129470332745", "licenseCode": "3197331720697687881", "creationTimestamp": "2020-12-29T12:29:26.821-08:00", "description": "CentOS Stream", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-stream" }, { "kind": "compute#license", "name": "centos-stream-9", "chargesUseFee": false, "id": "8153611294265844894", "licenseCode": "2587764519704208542", "creationTimestamp": "2022-02-01T12:39:13.879-08:00", "description": "CentOS Stream 9", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-stream-9" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/cos-cloud-licenses.json ================================================ { "id": "projects/cos-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "cos", "chargesUseFee": false, "id": "1860921057156066203", "licenseCode": "1001010", "creationTimestamp": "2017-01-13T12:51:38.000-08:00", "description": "Container-Optimized OS from Google", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos" }, { "kind": "compute#license", "name": "cos-gpu", "chargesUseFee": false, "id": "7123420343221295763", "licenseCode": "146969651383835282", "creationTimestamp": "2017-10-02T13:41:33.043-07:00", "description": "Container-Optimized OS from Google, with GPU drivers", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-gpu" }, { "kind": "compute#license", "name": "cos-pcid", "chargesUseFee": false, "id": "9020039035948176868", "licenseCode": "6880041984096540132", "creationTimestamp": "2018-08-15T15:36:59.739-07:00", "description": "Container-Optimized OS - PCID Whitelisted", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" }, { "kind": "compute#license", "name": "cos-st", "chargesUseFee": false, "id": "7258840043588497590", "licenseCode": "9084803053990260918", "creationTimestamp": "2017-10-04T00:31:37.769-07:00", "description": "Container-Optimized OS from Google, with Snaggletooth drivers", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-st" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/debian-cloud-licenses.json ================================================ { "id": "projects/debian-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "debian-10-buster", "chargesUseFee": false, "id": "7165099968554055853", "licenseCode": "5543610867827062957", "creationTimestamp": "2018-08-22T17:56:34.778-07:00", "description": "Debian 10 Buster", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-10-buster" }, { "kind": "compute#license", "name": "debian-11-bullseye", "chargesUseFee": false, "id": "8474191643257863115", "licenseCode": "3853522013536123851", "creationTimestamp": "2021-03-23T12:44:36.568-07:00", "description": "Debian 11 Bullseye", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" }, { "kind": "compute#license", "name": "debian-12-bookworm", "chargesUseFee": false, "id": "50032240371219040", "licenseCode": "2147286739765738111", "creationTimestamp": "2023-03-08T13:56:32.072-08:00", "description": "Debian 12 Bookworm", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm" }, { "kind": "compute#license", "name": "debian-7-wheezy", "chargesUseFee": true, "id": "5548643783560585255", "licenseCode": "1000203", "creationTimestamp": "2016-02-09T14:08:14.000-08:00", "description": "Debian 7 Wheezy", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-7-wheezy" }, { "kind": "compute#license", "name": "debian-8-jessie", "chargesUseFee": true, "id": "4583190536202936358", "licenseCode": "1000204", "creationTimestamp": "2016-02-09T14:08:14.000-08:00", "description": "Debian 8 Jessie", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-8-jessie" }, { "kind": "compute#license", "name": "debian-9-stretch", "chargesUseFee": true, "id": "422202477258924070", "licenseCode": "1000205", "creationTimestamp": "2016-02-09T14:08:14.000-08:00", "description": "Debian 9 Stretch", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/fedora-cloud-licenses.json ================================================ { "id": "projects/fedora-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "fedora-33-cloud-base", "chargesUseFee": false, "id": "646646099248634613", "licenseCode": "8809591208937216757", "creationTimestamp": "2020-11-19T13:31:06.831-08:00", "description": "Fedora 33 Cloud Base", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-33-cloud-base" }, { "kind": "compute#license", "name": "fedora-34-cloud-base", "chargesUseFee": false, "id": "4865478576897108243", "licenseCode": "2706998670158047507", "creationTimestamp": "2021-05-06T09:23:24.362-07:00", "description": "Fedora 34 Cloud Base", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-34-cloud-base" }, { "kind": "compute#license", "name": "fedora-35-cloud-base", "chargesUseFee": false, "id": "3861096437478587519", "licenseCode": "1001413950881922175", "creationTimestamp": "2021-12-21T13:09:36.291-08:00", "description": "Fedora 35 Cloud Base", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-35-cloud-base" }, { "kind": "compute#license", "name": "fedora-36-cloud-base", "chargesUseFee": false, "id": "2979243289693777887", "licenseCode": "4937629199917248478", "creationTimestamp": "2022-08-22T21:01:53.021-07:00", "description": "Fedora 36 Cloud Base", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-36-cloud-base" }, { "kind": "compute#license", "name": "fedora-37-beta-cloud-base", "chargesUseFee": false, "id": "7460591022215304124", "licenseCode": "7842126891402957754", "creationTimestamp": "2022-09-25T21:40:53.208-07:00", "description": "Fedora 37 Beta Cloud Base", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-37-beta-cloud-base" }, { "kind": "compute#license", "name": "fedora-37-cloud-base", "chargesUseFee": false, "id": "8530529652626673835", "licenseCode": "6298964164312289450", "creationTimestamp": "2023-03-15T18:17:57.197-07:00", "description": "Fedora 37 Cloud Base", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-37-cloud-base" }, { "kind": "compute#license", "name": "fedora-38-cloud-base", "chargesUseFee": false, "id": "8626823085690963723", "licenseCode": "5898834260713785099", "creationTimestamp": "2023-03-15T19:07:32.800-07:00", "description": "Fedora 38 Cloud Base", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-38-cloud-base" }, { "kind": "compute#license", "name": "fedora-39-cloud-base", "chargesUseFee": false, "id": "4256409977573932653", "licenseCode": "725690115706912365", "creationTimestamp": "2023-09-28T01:59:46.561-07:00", "description": "Fedora 39 Cloud Base", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-39-cloud-base" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/fedora-coreos-cloud-licenses.json ================================================ { "id": "projects/fedora-coreos-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "fedora-coreos-branched", "chargesUseFee": false, "id": "7090747570141108142", "licenseCode": "1137282471016634286", "creationTimestamp": "2021-05-06T10:37:05.779-07:00", "description": "Fedora CoreOS Branched", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-branched" }, { "kind": "compute#license", "name": "fedora-coreos-next", "chargesUseFee": false, "id": "556917158607495357", "licenseCode": "8565510459461902525", "creationTimestamp": "2020-05-06T13:30:10.447-07:00", "description": "Fedora CoreOS Next", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-next" }, { "kind": "compute#license", "name": "fedora-coreos-next-devel", "chargesUseFee": false, "id": "1767594780660769675", "licenseCode": "3659048100932002699", "creationTimestamp": "2020-05-06T13:26:12.829-07:00", "description": "Fedora CoreOS Next-Devel", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-next-devel" }, { "kind": "compute#license", "name": "fedora-coreos-rawhide", "chargesUseFee": false, "id": "5967584498063875084", "licenseCode": "6563587759585991692", "creationTimestamp": "2021-05-06T10:09:55.444-07:00", "description": "Fedora CoreOS Rawhide", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-rawhide" }, { "kind": "compute#license", "name": "fedora-coreos-stable", "chargesUseFee": false, "id": "1225811452571328641", "licenseCode": "3474194821636071553", "creationTimestamp": "2020-05-06T13:30:38.353-07:00", "description": "Fedora CoreOS Stable", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-stable" }, { "kind": "compute#license", "name": "fedora-coreos-testing", "chargesUseFee": false, "id": "6129359340783444110", "licenseCode": "3779260279882162318", "creationTimestamp": "2020-05-06T13:30:25.861-07:00", "description": "Fedora CoreOS Testing", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-testing" }, { "kind": "compute#license", "name": "fedora-coreos-testing-devel", "chargesUseFee": false, "id": "4589800477849198811", "licenseCode": "844225830482518235", "creationTimestamp": "2020-05-06T13:29:40.400-07:00", "description": "Fedora CoreOS Testing-Devel", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-testing-devel" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/opensuse-cloud-licenses.json ================================================ { "id": "projects/opensuse-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "opensuse-13", "chargesUseFee": true, "id": "6264275645351518247", "licenseCode": "1000211", "creationTimestamp": "2016-02-09T14:08:14.000-08:00", "description": "OpenSUSE 13", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/licenses/opensuse-13" }, { "kind": "compute#license", "name": "opensuse-leap-42", "chargesUseFee": true, "id": "8399628480346513446", "licenseCode": "1000212", "creationTimestamp": "2016-02-09T14:08:14.000-08:00", "description": "OpenSUSE Leap 42", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/licenses/opensuse-leap-42" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/rhel-cloud-licenses.json ================================================ { "id": "projects/rhel-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "rhel-6-byol", "chargesUseFee": false, "id": "2285321382868516082", "licenseCode": "2862452038400965874", "creationTimestamp": "2017-10-05T16:37:01.816-07:00", "description": "Red Hat Enterprise Linux 6 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-6-byol" }, { "kind": "compute#license", "name": "rhel-6-byos", "chargesUseFee": false, "id": "8599870313857478211", "licenseCode": "4720191914037931587", "creationTimestamp": "2019-08-07T15:29:00.736-07:00", "description": "Red Hat Enterprise Linux 6 BYOS", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-6-byos" }, { "kind": "compute#license", "name": "rhel-6-els", "chargesUseFee": false, "id": "349077510725721113", "licenseCode": "1176308840663243801", "creationTimestamp": "2020-09-02T11:22:46.089-07:00", "description": "Red Hat Enterprise Linux 6 Extended Life Cycle Support", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-6-els" }, { "kind": "compute#license", "name": "rhel-6-server", "chargesUseFee": true, "id": "6080198141787314983", "licenseCode": "1000002", "creationTimestamp": "2013-08-19T17:17:57.000-07:00", "description": "RedHat Enterprise Linux 6", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-6-server" }, { "kind": "compute#license", "name": "rhel-7-byol", "chargesUseFee": false, "id": "5226391214801780519", "licenseCode": "4621277670514851623", "creationTimestamp": "2017-10-05T16:35:36.053-07:00", "description": "Red Hat Enterprise Linux 7 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-7-byol" }, { "kind": "compute#license", "name": "rhel-7-byos", "chargesUseFee": false, "id": "242324105752669770", "licenseCode": "1492188837615955530", "creationTimestamp": "2019-08-07T15:28:53.703-07:00", "description": "Red Hat Enterprise Linux 7 BYOS", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-7-byos" }, { "kind": "compute#license", "name": "rhel-7-els", "chargesUseFee": false, "id": "1277727991743525253", "licenseCode": "4646774207868449156", "creationTimestamp": "2024-02-28T11:54:18.289-08:00", "description": "Red Hat Enterprise Linux 7 Extended Life Cycle Support", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-7-els" }, { "kind": "compute#license", "name": "rhel-7-server", "chargesUseFee": true, "id": "6080198135500386054", "licenseCode": "1000006", "creationTimestamp": "2013-08-19T17:17:57.000-07:00", "description": "RedHat Enterprise Linux 7", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-7-server" }, { "kind": "compute#license", "name": "rhel-8-byos", "chargesUseFee": false, "id": "7836451121217859165", "licenseCode": "8475125252192923229", "creationTimestamp": "2019-08-07T15:29:06.897-07:00", "description": "Red Hat Enterprise Linux 8 BYOS", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-8-byos" }, { "kind": "compute#license", "name": "rhel-8-server", "chargesUseFee": false, "id": "3637965609761428989", "licenseCode": "601259152637613565", "creationTimestamp": "2019-01-22T11:12:19.065-08:00", "description": "RedHat Enterprise Linux 8", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-8-server" }, { "kind": "compute#license", "name": "rhel-9-byos", "chargesUseFee": false, "id": "1643200137801707630", "licenseCode": "3837518230911135854", "creationTimestamp": "2022-03-07T15:00:17.359-08:00", "description": "Red Hat Enterprise Linux 9 BYOS", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-9-byos" }, { "kind": "compute#license", "name": "rhel-9-server", "chargesUseFee": false, "id": "7600336033804923015", "licenseCode": "7883559014960410759", "creationTimestamp": "2022-03-07T14:59:52.389-08:00", "description": "Red Hat Enterprise Linux 9", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-9-server" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/rhel-sap-cloud-licenses.json ================================================ { "id": "projects/rhel-sap-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "rhel-7-sap", "chargesUseFee": false, "id": "5604538286035877319", "licenseCode": "8555687517154622919", "creationTimestamp": "2018-09-07T16:00:56.178-07:00", "description": "Red Hat Enterprise Linux for SAP with High Availability and Update Services", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap" }, { "kind": "compute#license", "name": "rhel-7-sap-apps", "chargesUseFee": false, "id": "240630458432039891", "licenseCode": "5955710252559838163", "creationTimestamp": "2018-01-10T14:35:40.112-08:00", "description": "RHEL 7 for SAP Applications", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap-apps" }, { "kind": "compute#license", "name": "rhel-7-sap-hana", "chargesUseFee": false, "id": "1819405748623059915", "licenseCode": "996690525257673675", "creationTimestamp": "2018-01-10T14:35:16.300-08:00", "description": "RHEL 7 for SAP HANA", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap-hana" }, { "kind": "compute#license", "name": "rhel-7-sap-solutions", "chargesUseFee": false, "id": "7327934045737262966", "licenseCode": "1785892118823772022", "creationTimestamp": "2018-05-22T16:02:49.771-07:00", "description": "Red Hat Enterprise Linux for SAP with High Availability and Update Services", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap-solutions" }, { "kind": "compute#license", "name": "rhel-7-sap-us", "chargesUseFee": false, "id": "7350733497329754778", "licenseCode": "5882583258875011738", "creationTimestamp": "2019-01-24T12:13:41.931-08:00", "description": "Red Hat Enterprise Linux for SAP with Update Services", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap-us" }, { "kind": "compute#license", "name": "rhel-8-sap", "chargesUseFee": false, "id": "4048768305189858476", "licenseCode": "1270685562947480748", "creationTimestamp": "2020-01-14T11:10:59.082-08:00", "description": "Red Hat Enterprise Linux for SAP with High Availability and Update Services", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-8-sap" }, { "kind": "compute#license", "name": "rhel-8-sap-byos", "chargesUseFee": false, "id": "4694240906525046332", "licenseCode": "489291035512960571", "creationTimestamp": "2023-10-10T14:57:40.183-07:00", "description": "Red Hat Enterprise Linux 8 for SAP BYOS", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-8-sap-byos" }, { "kind": "compute#license", "name": "rhel-9-sap", "chargesUseFee": false, "id": "5536778078288293918", "licenseCode": "8291906032809750558", "creationTimestamp": "2022-03-07T15:02:09.839-08:00", "description": "Red Hat Enterprise Linux 9 for SAP with High Availability and Update Services", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-9-sap" }, { "kind": "compute#license", "name": "rhel-9-sap-byos", "chargesUseFee": false, "id": "6784251256380093966", "licenseCode": "6753525580035552782", "creationTimestamp": "2023-10-10T14:57:53.794-07:00", "description": "Red Hat Enterprise Linux 9 for SAP BYOS", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-9-sap-byos" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/rocky-linux-cloud-licenses.json ================================================ { "id": "projects/rocky-linux-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "rocky-linux-8", "chargesUseFee": false, "id": "292266368701429789", "licenseCode": "4496053841174591517", "creationTimestamp": "2021-05-03T11:54:42.661-07:00", "description": "Rocky Linux 8", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses/rocky-linux-8" }, { "kind": "compute#license", "name": "rocky-linux-8-optimized-gcp", "chargesUseFee": false, "id": "8825802357826528356", "licenseCode": "6558362506632242275", "creationTimestamp": "2022-06-10T12:24:59.793-07:00", "description": "Rocky Linux 8 Optimized for GCP", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses/rocky-linux-8-optimized-gcp" }, { "kind": "compute#license", "name": "rocky-linux-9", "chargesUseFee": false, "id": "8997780373141070933", "licenseCode": "1393672665428796501", "creationTimestamp": "2022-06-10T12:25:46.595-07:00", "description": "Rocky Linux 9", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses/rocky-linux-9" }, { "kind": "compute#license", "name": "rocky-linux-9-optimized-gcp", "chargesUseFee": false, "id": "3606573183652471876", "licenseCode": "3313713657389392963", "creationTimestamp": "2022-06-10T12:25:32.158-07:00", "description": "Rocky Linux 9 Optimized for GCP", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses/rocky-linux-9-optimized-gcp" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/suse-cloud-licenses.json ================================================ { "id": "projects/suse-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "sles-11", "chargesUseFee": true, "id": "6080198140089510959", "licenseCode": "1000004", "creationTimestamp": "2013-08-19T17:17:57.000-07:00", "description": "SUSE Enterprise Linux 11", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses/sles-11" }, { "kind": "compute#license", "name": "sles-12", "chargesUseFee": true, "id": "6080198141760474759", "licenseCode": "1000008", "creationTimestamp": "2014-10-13T16:11:00.000-07:00", "description": "SUSE Linux Enterprise 12", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses/sles-12" }, { "kind": "compute#license", "name": "sles-15", "chargesUseFee": false, "id": "3729649224393683136", "licenseCode": "5422776498422280384", "creationTimestamp": "2018-01-22T12:48:47.760-08:00", "description": "SUSE Linux Enterprise Server 15", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses/sles-15" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/suse-sap-cloud-licenses.json ================================================ { "id": "projects/suse-sap-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "sles-sap-12", "chargesUseFee": false, "id": "7819209786793516810", "licenseCode": "4079932016749305610", "creationTimestamp": "2017-03-02T10:18:13.971-08:00", "description": "SLES 12 for SAP", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/suse-sap-cloud/global/licenses/sles-sap-12" }, { "kind": "compute#license", "name": "sles-sap-15", "chargesUseFee": false, "id": "6924394672531508922", "licenseCode": "4764125400812555962", "creationTimestamp": "2018-02-02T10:39:17.468-08:00", "description": "SLES 15 For SAP", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/suse-sap-cloud/global/licenses/sles-sap-15" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/suse-sap-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/ubuntu-os-cloud-licenses.json ================================================ { "id": "projects/ubuntu-os-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "ubuntu-1204-precise", "chargesUseFee": true, "id": "6080198136355458115", "licenseCode": "1000009", "creationTimestamp": "2014-10-23T08:51:25.000-07:00", "description": "Ubuntu 12.04 LTS (Precise Pangolin)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1204-precise" }, { "kind": "compute#license", "name": "ubuntu-1404-trusty", "chargesUseFee": true, "id": "6080198139190250694", "licenseCode": "1000010", "creationTimestamp": "2014-10-23T08:51:25.000-07:00", "description": "Ubuntu 14.04 LTS (Trusty Tahr)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1404-trusty" }, { "kind": "compute#license", "name": "ubuntu-1410-utopic", "chargesUseFee": true, "id": "6080198139293189152", "licenseCode": "1000011", "creationTimestamp": "2014-10-23T08:51:25.000-07:00", "description": "Ubuntu 14.10 (Utopic Unicorn)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1410-utopic" }, { "kind": "compute#license", "name": "ubuntu-1504-vivid", "chargesUseFee": true, "id": "6093160693684590177", "licenseCode": "1000012", "creationTimestamp": "2014-12-09T12:30:00.000-08:00", "description": "Ubuntu 15.04 (Vivid Vervet)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1504-vivid" }, { "kind": "compute#license", "name": "ubuntu-1510-wily", "chargesUseFee": true, "id": "6089610342019049344", "licenseCode": "1000200", "creationTimestamp": "2015-10-28T15:14:24.000-07:00", "description": "Ubuntu 15.10 (Wily Werewolf)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1510-wily" }, { "kind": "compute#license", "name": "ubuntu-1604-xenial", "chargesUseFee": true, "id": "2152070885817132928", "licenseCode": "1000201", "creationTimestamp": "2015-10-28T15:14:24.000-07:00", "description": "Ubuntu 16.04 (Xenial Xerus)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1604-xenial" }, { "kind": "compute#license", "name": "ubuntu-1610-yakkety", "chargesUseFee": true, "id": "834065896528093185", "licenseCode": "1000221", "creationTimestamp": "2015-10-28T15:14:24.000-07:00", "description": "Ubuntu 16.10 (Yakkety Yak)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1610-yakkety" }, { "kind": "compute#license", "name": "ubuntu-1704-zesty", "chargesUseFee": false, "id": "3665852604842439566", "licenseCode": "1000227", "creationTimestamp": "2016-11-29T13:32:44.000-08:00", "description": "Ubuntu 17.04 (Zesty Zapus)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1704-zesty" }, { "kind": "compute#license", "name": "ubuntu-1710", "chargesUseFee": false, "id": "3417580439768898142", "licenseCode": "3533844014765677150", "creationTimestamp": "2017-05-09T13:21:05.208-07:00", "description": "Ubuntu 17.10 (Artful Aardvark)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1710" }, { "kind": "compute#license", "name": "ubuntu-1804-lts", "chargesUseFee": false, "id": "7416677643538051184", "licenseCode": "5926592092274602096", "creationTimestamp": "2017-11-11T06:52:15.073-08:00", "description": "Ubuntu 18.04 LTS (Bionic Beaver)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1804-lts" }, { "kind": "compute#license", "name": "ubuntu-1810", "chargesUseFee": false, "id": "5189792346744345861", "licenseCode": "3900875328389436677", "creationTimestamp": "2018-06-01T08:53:14.479-07:00", "description": "Ubuntu 18.10 (Cosmic Cuttlefish)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1810" }, { "kind": "compute#license", "name": "ubuntu-1904", "chargesUseFee": false, "id": "7040385920840434261", "licenseCode": "8810085950586290773", "creationTimestamp": "2018-11-22T06:27:06.728-08:00", "description": "Ubuntu 19.04 (Disco Dingo)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1904" }, { "kind": "compute#license", "name": "ubuntu-1910", "chargesUseFee": false, "id": "6141392688134340342", "licenseCode": "1171116710542819062", "creationTimestamp": "2019-04-23T23:20:09.171-07:00", "description": "Ubuntu 19.10 (Eoan)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1910" }, { "kind": "compute#license", "name": "ubuntu-2004-lts", "chargesUseFee": false, "id": "7845324931658182311", "licenseCode": "2211838267635035815", "creationTimestamp": "2019-10-21T08:35:36.181-07:00", "description": "Ubuntu 20.04 LTS (Focal Fossa)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2004-lts" }, { "kind": "compute#license", "name": "ubuntu-2010", "chargesUseFee": false, "id": "2446970658841342615", "licenseCode": "769514169992655511", "creationTimestamp": "2020-04-27T09:46:48.045-07:00", "description": "Ubuntu 20.10 (Groovy Gorilla)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2010" }, { "kind": "compute#license", "name": "ubuntu-2104", "chargesUseFee": false, "id": "5897560342383784471", "licenseCode": "7272665912576537111", "creationTimestamp": "2020-10-29T07:08:56.464-07:00", "description": "Ubuntu 21.04 LTS (Hirsute Hippo)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2104" }, { "kind": "compute#license", "name": "ubuntu-2110", "chargesUseFee": false, "id": "8902766118812014259", "licenseCode": "1732575731494180531", "creationTimestamp": "2021-04-22T14:19:24.492-07:00", "description": "Ubuntu 21.10 (Impish Indri)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2110" }, { "kind": "compute#license", "name": "ubuntu-2204-lts", "chargesUseFee": false, "id": "9222026843429805123", "licenseCode": "5511465778777431107", "creationTimestamp": "2021-10-18T09:37:00.877-07:00", "description": "Ubuntu 22.04 LTS (Jammy Jellyfish)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" }, { "kind": "compute#license", "name": "ubuntu-2210", "chargesUseFee": false, "id": "2755274802620387700", "licenseCode": "3210324663486239092", "creationTimestamp": "2022-04-26T15:18:03.644-07:00", "description": "Ubuntu 22.10 (Kinetic Kudu)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2210" }, { "kind": "compute#license", "name": "ubuntu-2304", "chargesUseFee": false, "id": "3127688745403688989", "licenseCode": "870135758600939548", "creationTimestamp": "2022-11-09T04:02:59.227-08:00", "description": "Ubuntu 23.04 (Lunar Lobster)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2304" }, { "kind": "compute#license", "name": "ubuntu-2310", "chargesUseFee": false, "id": "3316313456908559106", "licenseCode": "3279655455770665730", "creationTimestamp": "2023-04-28T16:59:41.796-07:00", "description": "Ubuntu 23.10 (Mantic Minotaur)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2310" }, { "kind": "compute#license", "name": "ubuntu-2404-lts", "chargesUseFee": false, "id": "237675062287091321", "licenseCode": "3242930272766215801", "creationTimestamp": "2023-10-26T16:39:02.390-07:00", "description": "Ubuntu 24.04 LTS (Noble Numbat)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2404-lts" }, { "kind": "compute#license", "name": "ubuntu-2410", "chargesUseFee": false, "id": "1848982427593022524", "licenseCode": "5563637729949850684", "creationTimestamp": "2024-05-01T13:15:15.822-07:00", "description": "Ubuntu 24.10 (Oracular Oriole)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2410" }, { "kind": "compute#license", "name": "ubuntu-core-16", "chargesUseFee": false, "id": "4480268362245049223", "licenseCode": "6379422142266182535", "creationTimestamp": "2017-02-15T03:03:04.172-08:00", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-core-16" }, { "kind": "compute#license", "name": "ubuntu-core-devel", "chargesUseFee": true, "id": "6093160695016832855", "licenseCode": "1000014", "creationTimestamp": "2014-12-10T17:03:26.000-08:00", "description": "Ubuntu Core (devel)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-core-devel" }, { "kind": "compute#license", "name": "ubuntu-devel", "chargesUseFee": true, "id": "6093160694174928674", "licenseCode": "1000013", "creationTimestamp": "2014-12-10T17:03:26.000-08:00", "description": "Ubuntu Development (devel)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-devel" }, { "kind": "compute#license", "name": "ubuntu-minimal-1604-lts", "chargesUseFee": false, "id": "4009076425138393981", "licenseCode": "1221576520422937469", "creationTimestamp": "2018-08-07T12:05:54.362-07:00", "description": "Ubuntu Minimal 16.04 LTS (Xenial Xerus)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1604-lts" }, { "kind": "compute#license", "name": "ubuntu-minimal-1804-lts", "chargesUseFee": false, "id": "2111994026239742826", "licenseCode": "5378856944553710442", "creationTimestamp": "2018-08-07T12:05:41.978-07:00", "description": "Ubuntu Minimal 18.04 LTS (Bionic Beaver)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1804-lts" }, { "kind": "compute#license", "name": "ubuntu-minimal-1810", "chargesUseFee": false, "id": "5164736619936502740", "licenseCode": "7419213078715454420", "creationTimestamp": "2018-08-07T12:04:27.422-07:00", "description": "Ubuntu Minimal 18.10 (Cosmic Cuttlefish)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1810" }, { "kind": "compute#license", "name": "ubuntu-minimal-1904", "chargesUseFee": false, "id": "8618803990011511401", "licenseCode": "715112593892246121", "creationTimestamp": "2018-11-22T06:26:14.989-08:00", "description": "Ubuntu Minimal 19.04 (Disco Dingo)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1904" }, { "kind": "compute#license", "name": "ubuntu-minimal-1910", "chargesUseFee": false, "id": "1465136496451107883", "licenseCode": "7538805764411735083", "creationTimestamp": "2019-04-23T23:31:32.434-07:00", "description": "Ubuntu Minimal 19.10 (Eoan)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1910" }, { "kind": "compute#license", "name": "ubuntu-minimal-2004-lts", "chargesUseFee": false, "id": "6035068921600568960", "licenseCode": "4650988716595113600", "creationTimestamp": "2019-10-21T08:36:15.877-07:00", "description": "Ubuntu Minimal 20.04 LTS (Focal Fossa)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2004-lts" }, { "kind": "compute#license", "name": "ubuntu-minimal-2010", "chargesUseFee": false, "id": "4889654405597147750", "licenseCode": "8143918599989015142", "creationTimestamp": "2020-04-27T09:47:05.752-07:00", "description": "Ubuntu Minimal 20.10 (Groovy Gorilla)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2010" }, { "kind": "compute#license", "name": "ubuntu-minimal-2104", "chargesUseFee": false, "id": "218721005558264795", "licenseCode": "4947589846537827291", "creationTimestamp": "2020-10-29T07:09:56.767-07:00", "description": "Ubuntu Minimal 21.04 LTS (Hirsute Hippo)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2104" }, { "kind": "compute#license", "name": "ubuntu-minimal-2110", "chargesUseFee": false, "id": "4892576431804798616", "licenseCode": "4116013191835440792", "creationTimestamp": "2021-04-22T14:19:51.199-07:00", "description": "Ubuntu Minimal 21.10 (Impish Indri)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2110" }, { "kind": "compute#license", "name": "ubuntu-minimal-2204-lts", "chargesUseFee": false, "id": "30277383760125210", "licenseCode": "591260547102547226", "creationTimestamp": "2021-10-18T09:42:30.042-07:00", "description": "Ubuntu Minimal 22.04 LTS (Jammy Jellyfish)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2204-lts" }, { "kind": "compute#license", "name": "ubuntu-minimal-2210", "chargesUseFee": false, "id": "2970203014880940354", "licenseCode": "2314222210107429186", "creationTimestamp": "2022-04-26T15:18:21.378-07:00", "description": "Ubuntu Minimal 22.10 (Kinetic Kudu)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2210" }, { "kind": "compute#license", "name": "ubuntu-minimal-2304", "chargesUseFee": false, "id": "7737788817092258286", "licenseCode": "8188837469245286894", "creationTimestamp": "2022-11-09T04:03:13.304-08:00", "description": "Ubuntu Minimal 23.04 (Lunar Lobster)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2304" }, { "kind": "compute#license", "name": "ubuntu-minimal-2310", "chargesUseFee": false, "id": "5399070251245756586", "licenseCode": "9148128026895179945", "creationTimestamp": "2023-04-28T17:01:10.106-07:00", "description": "Ubuntu Minimal 23.10 (Mantic Minotaur)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2310" }, { "kind": "compute#license", "name": "ubuntu-minimal-2404-lts", "chargesUseFee": false, "id": "3936467139159344734", "licenseCode": "6508311393003325021", "creationTimestamp": "2023-10-26T16:39:29.979-07:00", "description": "Ubuntu Minimal 24.04 LTS (Noble Numbat)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2404-lts" }, { "kind": "compute#license", "name": "ubuntu-minimal-2410", "chargesUseFee": false, "id": "3174199534576147923", "licenseCode": "7255279009718541779", "creationTimestamp": "2024-05-01T13:17:00.704-07:00", "description": "Ubuntu Minimal 24.10 (Oracular Oriole)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2410" }, { "kind": "compute#license", "name": "ubuntu-snappy-1604", "chargesUseFee": true, "id": "6925504719776851840", "licenseCode": "1000202", "creationTimestamp": "2015-10-28T15:14:24.000-07:00", "description": "Ubuntu Snappy 16.04", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-snappy-1604" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/ubuntu-os-pro-cloud-licenses.json ================================================ { "id": "projects/ubuntu-os-pro-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "ubuntu-pro-1604-lts", "chargesUseFee": false, "id": "3941006390333842763", "licenseCode": "8045211386737108299", "creationTimestamp": "2020-12-03T09:08:52.513-08:00", "description": "Ubuntu Pro 16.04 LTS (Xenial Xerus)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-1604-lts" }, { "kind": "compute#license", "name": "ubuntu-pro-1804-bionic-arm64", "chargesUseFee": false, "id": "7326263841230969689", "licenseCode": "3631530139086248793", "creationTimestamp": "2024-03-13T10:43:18.670-07:00", "description": "ubuntu-pro-1804-bionic-arm64", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-1804-bionic-arm64" }, { "kind": "compute#license", "name": "ubuntu-pro-1804-lts", "chargesUseFee": false, "id": "5618755422289962359", "licenseCode": "6022427724719891830", "creationTimestamp": "2020-12-03T09:08:41.124-08:00", "description": "Ubuntu Pro 18.04 LTS (Bionic Beaver)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-1804-lts" }, { "kind": "compute#license", "name": "ubuntu-pro-2004-focal-arm64", "chargesUseFee": false, "id": "8677376590236900130", "licenseCode": "8885648217368976162", "creationTimestamp": "2024-03-13T10:43:41.581-07:00", "description": "ubuntu-pro-2004-focal-arm64", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2004-focal-arm64" }, { "kind": "compute#license", "name": "ubuntu-pro-2004-lts", "chargesUseFee": false, "id": "8936529431231768014", "licenseCode": "599959289349842382", "creationTimestamp": "2020-12-03T09:06:41.907-08:00", "description": "Ubuntu Pro 20.04 LTS (Focal Fossa)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2004-lts" }, { "kind": "compute#license", "name": "ubuntu-pro-2204-jammy-arm64", "chargesUseFee": false, "id": "2278827998777727759", "licenseCode": "3644693775761824526", "creationTimestamp": "2024-03-13T10:44:00.907-07:00", "description": "ubuntu-pro-2204-jammy-arm64", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2204-jammy-arm64" }, { "kind": "compute#license", "name": "ubuntu-pro-2204-lts", "chargesUseFee": false, "id": "1661165809961015888", "licenseCode": "2592866803419978320", "creationTimestamp": "2021-10-18T09:45:51.910-07:00", "description": "Ubuntu Pro 22.04 LTS (Jammy Jellyfish)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2204-lts" }, { "kind": "compute#license", "name": "ubuntu-pro-2404-lts", "chargesUseFee": false, "id": "7234930073195138986", "licenseCode": "2176054482269786025", "creationTimestamp": "2023-10-27T10:20:05.914-07:00", "description": "Ubuntu Pro 24.04 LTS (Noble Numbat)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2404-lts" }, { "kind": "compute#license", "name": "ubuntu-pro-fips-1804-lts", "chargesUseFee": false, "id": "3014414184157572334", "licenseCode": "2609515522535746798", "creationTimestamp": "2022-03-16T05:03:13.515-07:00", "description": "Ubuntu Pro FIPS 18.04 LTS (Bionic Beaver)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-fips-1804-lts" }, { "kind": "compute#license", "name": "ubuntu-pro-fips-2004-lts", "chargesUseFee": false, "id": "4638035787686636796", "licenseCode": "892251481491401980", "creationTimestamp": "2022-03-16T05:03:31.188-07:00", "description": "Ubuntu Pro FIPS 20.04 LTS (Focal Fossa)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-fips-2004-lts" }, { "kind": "compute#license", "name": "ubuntu-pro-fips-2204-lts", "chargesUseFee": false, "id": "3480614574692789277", "licenseCode": "4663571520039971869", "creationTimestamp": "2022-03-16T05:07:14.303-07:00", "description": "Ubuntu Pro FIPS 22.04 LTS (Jammy Jellyfish)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-fips-2204-lts" }, { "kind": "compute#license", "name": "ubuntu-pro-fips-2404-lts", "chargesUseFee": false, "id": "4890027961376722813", "licenseCode": "8575064881497526141", "creationTimestamp": "2023-10-27T10:21:22.731-07:00", "description": "Ubuntu Pro FIPS 24.04 LTS (Noble Numbat)", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-fips-2404-lts" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/windows-cloud-licenses.json ================================================ { "id": "projects/windows-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "mirantis-container-runtime", "chargesUseFee": false, "id": "3607075093511293736", "licenseCode": "879005342760323879", "creationTimestamp": "2023-04-28T09:35:20.284-07:00", "description": "Mirantis Container Runtime", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/mirantis-container-runtime" }, { "kind": "compute#license", "name": "windows-10-enterprise-byol", "chargesUseFee": false, "id": "5769580143916819783", "licenseCode": "2089835370828997959", "creationTimestamp": "2018-11-07T00:00:40.302-08:00", "description": "Windows 10 Enterprise BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-10-enterprise-byol" }, { "kind": "compute#license", "name": "windows-10-x64-byol", "chargesUseFee": false, "id": "5572284649276248982", "licenseCode": "8727879116868096918", "creationTimestamp": "2019-11-19T19:05:29.677-08:00", "description": "Windows 10 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-10-x64-byol" }, { "kind": "compute#license", "name": "windows-10-x86-byol", "chargesUseFee": false, "id": "1279231564365501289", "licenseCode": "3732182829874353001", "creationTimestamp": "2019-11-19T19:05:42.089-08:00", "description": "Windows 10 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-10-x86-byol" }, { "kind": "compute#license", "name": "windows-11-x64-byol", "chargesUseFee": false, "id": "3804262737275203477", "licenseCode": "5378533650449772437", "creationTimestamp": "2021-08-25T11:52:42.711-07:00", "description": "Windows 11 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-11-x64-byol" }, { "kind": "compute#license", "name": "windows-7-enterprise-byol", "chargesUseFee": false, "id": "2913052624331679126", "licenseCode": "752112173778412950", "creationTimestamp": "2018-11-06T23:59:53.727-08:00", "description": "Windows 7 Enterprise BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-7-enterprise-byol" }, { "kind": "compute#license", "name": "windows-7-x64-byol", "chargesUseFee": false, "id": "6501903266496451262", "licenseCode": "5016528181960184510", "creationTimestamp": "2019-11-19T19:00:33.621-08:00", "description": "Windows 7 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-7-x64-byol" }, { "kind": "compute#license", "name": "windows-7-x86-byol", "chargesUseFee": false, "id": "4058550282231550561", "licenseCode": "622639362407469665", "creationTimestamp": "2019-11-19T19:01:34.532-08:00", "description": "Windows 7 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-7-x86-byol" }, { "kind": "compute#license", "name": "windows-8-x64-byol", "chargesUseFee": false, "id": "7710168160606425653", "licenseCode": "7036859048284197429", "creationTimestamp": "2019-11-19T19:02:50.559-08:00", "description": "Windows 8.x 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-8-x64-byol" }, { "kind": "compute#license", "name": "windows-8-x86-byol", "chargesUseFee": false, "id": "2601192579332117498", "licenseCode": "3720924436396315642", "creationTimestamp": "2019-11-19T19:03:49.785-08:00", "description": "Windows 8.x 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-8-x86-byol" }, { "kind": "compute#license", "name": "windows-81-x64-byol", "chargesUseFee": false, "id": "5692263345196614391", "licenseCode": "5366577783322166007", "creationTimestamp": "2019-04-28T21:22:48.487-07:00", "description": "Windows 8.1 Enterprise x64 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-81-x64-byol" }, { "kind": "compute#license", "name": "windows-ent", "chargesUseFee": false, "id": "1257656105385958662", "licenseCode": "2967169933779246342", "creationTimestamp": "2019-09-25T19:35:21.078-07:00", "description": "Windows Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-ent" }, { "kind": "compute#license", "name": "windows-for-containers", "chargesUseFee": false, "id": "7423076496314791885", "licenseCode": "2643967004807329741", "creationTimestamp": "2017-09-25T11:21:22.120-07:00", "description": "Windows container host", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-for-containers" }, { "kind": "compute#license", "name": "windows-server-1709-dc", "chargesUseFee": false, "id": "2638722841150638382", "licenseCode": "5194306116883728686", "creationTimestamp": "2017-10-03T13:49:05.759-07:00", "description": "Windows Server 1709 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1709-dc" }, { "kind": "compute#license", "name": "windows-server-1803-dc", "chargesUseFee": false, "id": "991969583094905153", "licenseCode": "6476660300603799873", "creationTimestamp": "2018-05-07T10:06:54.761-07:00", "description": "Windows Server version 1803 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1803-dc" }, { "kind": "compute#license", "name": "windows-server-1809-dc", "chargesUseFee": false, "id": "2197036663612051569", "licenseCode": "8597854123084943473", "creationTimestamp": "2018-10-04T17:21:50.249-07:00", "description": "Windows Server version 1809 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1809-dc" }, { "kind": "compute#license", "name": "windows-server-1903-dc", "chargesUseFee": false, "id": "783754911489890105", "licenseCode": "5980382382909462329", "creationTimestamp": "2019-06-10T21:11:02.733-07:00", "description": "Windows Server version 1903 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1903-dc" }, { "kind": "compute#license", "name": "windows-server-1909-dc", "chargesUseFee": false, "id": "1504783339576403625", "licenseCode": "1413572828508235433", "creationTimestamp": "2019-11-14T01:03:02.101-08:00", "description": "Windows Server version 1909 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1909-dc" }, { "kind": "compute#license", "name": "windows-server-2000", "chargesUseFee": false, "id": "77415431498093015", "licenseCode": "5507061839551517143", "creationTimestamp": "2021-03-02T09:00:40.478-08:00", "description": "Windows Server 2000", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2000" }, { "kind": "compute#license", "name": "windows-server-2003", "chargesUseFee": false, "id": "8972483680585271920", "licenseCode": "5030842449011296880", "creationTimestamp": "2017-04-10T14:09:51.924-07:00", "description": "Windows Server 2003", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2003" }, { "kind": "compute#license", "name": "windows-server-2004-dc", "chargesUseFee": false, "id": "6915731882356532357", "licenseCode": "6710259852346942597", "creationTimestamp": "2020-07-23T11:43:54.418-07:00", "description": "Windows Server version 2004 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2004-dc" }, { "kind": "compute#license", "name": "windows-server-2008", "chargesUseFee": false, "id": "2740560588278180852", "licenseCode": "1656378918552316916", "creationTimestamp": "2022-11-09T13:01:15.565-08:00", "description": "Windows Server 2008 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008" }, { "kind": "compute#license", "name": "windows-server-2008-dc", "chargesUseFee": true, "id": "5520530534018080146", "licenseCode": "1000502", "creationTimestamp": "2015-06-03T17:05:28.000-07:00", "description": "Windows Server 2008 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008-dc" }, { "kind": "compute#license", "name": "windows-server-2008-r2", "chargesUseFee": false, "id": "4293107698603502582", "licenseCode": "3284763237085719542", "creationTimestamp": "2022-11-09T13:01:13.386-08:00", "description": "Windows Server 2008 R2 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008-r2" }, { "kind": "compute#license", "name": "windows-server-2008-r2-byol", "chargesUseFee": false, "id": "6485631155857676024", "licenseCode": "4551215591257167608", "creationTimestamp": "2018-10-05T15:39:19.139-07:00", "description": "Windows Server 2008R2 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008-r2-byol" }, { "kind": "compute#license", "name": "windows-server-2008-r2-dc", "chargesUseFee": true, "id": "6080198139471122848", "licenseCode": "1000000", "creationTimestamp": "2013-08-19T17:17:57.000-07:00", "description": "Windows Server 2008 R2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008-r2-dc" }, { "kind": "compute#license", "name": "windows-server-2012", "chargesUseFee": false, "id": "4571663854194502649", "licenseCode": "7695108898142923768", "creationTimestamp": "2022-11-09T13:01:10.861-08:00", "description": "Windows Server 2012 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012" }, { "kind": "compute#license", "name": "windows-server-2012-byol", "chargesUseFee": false, "id": "2247304514167789851", "licenseCode": "5559842820536817947", "creationTimestamp": "2018-10-05T15:38:44.367-07:00", "description": "Windows Server 2012 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-byol" }, { "kind": "compute#license", "name": "windows-server-2012-dc", "chargesUseFee": true, "id": "6102042211374830963", "licenseCode": "1000015", "creationTimestamp": "2015-01-05T16:58:27.000-08:00", "description": "Windows Server 2012 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-dc" }, { "kind": "compute#license", "name": "windows-server-2012-r2", "chargesUseFee": false, "id": "975226805105568736", "licenseCode": "7798417859637521376", "creationTimestamp": "2022-11-09T13:01:03.469-08:00", "description": "Windows Server 2012 R2 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-r2" }, { "kind": "compute#license", "name": "windows-server-2012-r2-byol", "chargesUseFee": false, "id": "11586629996795623", "licenseCode": "6738952703547430631", "creationTimestamp": "2018-10-05T15:39:04.149-07:00", "description": "Windows Server 2012R2 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-r2-byol" }, { "kind": "compute#license", "name": "windows-server-2012-r2-dc", "chargesUseFee": true, "id": "6102042209776448355", "licenseCode": "1000017", "creationTimestamp": "2015-01-05T16:58:27.000-08:00", "description": "Windows Server 2012 R2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-r2-dc" }, { "kind": "compute#license", "name": "windows-server-2012-r2-dc-in-place-upgrade", "chargesUseFee": false, "id": "1687636345185865342", "licenseCode": "7123010349826543230", "creationTimestamp": "2020-03-24T09:08:49.417-07:00", "description": "Windows Server 2008 R2 to 2012 R2 in place upgrade", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-r2-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2016", "chargesUseFee": false, "id": "2566166048269249507", "licenseCode": "4819555115818134498", "creationTimestamp": "2022-11-09T13:01:01.077-08:00", "description": "Windows Server 2016 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016" }, { "kind": "compute#license", "name": "windows-server-2016-byol", "chargesUseFee": false, "id": "6580557195888974094", "licenseCode": "4322823184804632846", "creationTimestamp": "2018-10-05T15:38:26.021-07:00", "description": "Windows Server 2016 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016-byol" }, { "kind": "compute#license", "name": "windows-server-2016-dc", "chargesUseFee": true, "id": "2483536683413682772", "licenseCode": "1000213", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "Windows Server 2016 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016-dc" }, { "kind": "compute#license", "name": "windows-server-2016-dc-in-place-upgrade", "chargesUseFee": false, "id": "7616085184958426941", "licenseCode": "5199320590876405565", "creationTimestamp": "2022-03-04T09:52:18.982-08:00", "description": "in-place upgraded to Windows Server 2016", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2016-nano", "chargesUseFee": true, "id": "2282594357842688596", "licenseCode": "1000214", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "Windows Server 2016 Nano", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016-nano" }, { "kind": "compute#license", "name": "windows-server-2019", "chargesUseFee": false, "id": "3525541779464104933", "licenseCode": "4874454843789519845", "creationTimestamp": "2022-11-09T13:00:58.674-08:00", "description": "Windows Server 2019 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019" }, { "kind": "compute#license", "name": "windows-server-2019-byol", "chargesUseFee": false, "id": "1090214026507846099", "licenseCode": "6532438499690676691", "creationTimestamp": "2019-09-25T12:25:48.522-07:00", "description": "Windows Server 2019 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-byol" }, { "kind": "compute#license", "name": "windows-server-2019-dc", "chargesUseFee": false, "id": "5993475225685790965", "licenseCode": "3389558045860892917", "creationTimestamp": "2018-10-04T17:19:38.568-07:00", "description": "Windows Server 2019 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc" }, { "kind": "compute#license", "name": "windows-server-2019-dc-in-place-upgrade", "chargesUseFee": false, "id": "7388112379630840967", "licenseCode": "3156934045285215367", "creationTimestamp": "2022-03-04T09:54:48.827-08:00", "description": "in-place upgraded to Windows Server 2019", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2022", "chargesUseFee": false, "id": "8141439404167244305", "licenseCode": "6107784707477449232", "creationTimestamp": "2022-11-09T13:00:46.975-08:00", "description": "Windows Server 2022 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2022" }, { "kind": "compute#license", "name": "windows-server-2022-byol", "chargesUseFee": false, "id": "2150336909657452508", "licenseCode": "2808834792899686364", "creationTimestamp": "2021-08-25T11:51:31.527-07:00", "description": "Windows Server 2022 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2022-byol" }, { "kind": "compute#license", "name": "windows-server-2022-dc", "chargesUseFee": false, "id": "2525168283357630087", "licenseCode": "4079807029871201927", "creationTimestamp": "2021-09-02T08:40:24.070-07:00", "description": "Windows Server 2022 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2022-dc" }, { "kind": "compute#license", "name": "windows-server-2022-dc-in-place-upgrade", "chargesUseFee": false, "id": "7118639573064740016", "licenseCode": "4670175393034005680", "creationTimestamp": "2022-03-04T09:54:39.255-08:00", "description": "in-place upgraded to Windows Server 2022", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2022-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2025", "chargesUseFee": false, "id": "5184168856764447080", "licenseCode": "973054079889996136", "creationTimestamp": "2024-02-01T08:32:07.510-08:00", "description": "Windows Server 2025 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025" }, { "kind": "compute#license", "name": "windows-server-2025-byol", "chargesUseFee": false, "id": "8692163681596111212", "licenseCode": "6621875542391421291", "creationTimestamp": "2024-02-01T08:32:04.107-08:00", "description": "Windows Server 2025 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025-byol" }, { "kind": "compute#license", "name": "windows-server-2025-dc", "chargesUseFee": false, "id": "3821821448269756778", "licenseCode": "7142647615590922601", "creationTimestamp": "2024-02-01T08:32:05.921-08:00", "description": "Windows Server 2025 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025-dc" }, { "kind": "compute#license", "name": "windows-server-2025-dc-in-place-upgrade", "chargesUseFee": false, "id": "7345581006395963746", "licenseCode": "3883045502699600225", "creationTimestamp": "2024-02-01T08:32:14.116-08:00", "description": "In-place upgraded to Windows Server 2025 Datacenter", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2025-in-place-upgrade", "chargesUseFee": false, "id": "6466420601272039803", "licenseCode": "3898871898839611771", "creationTimestamp": "2024-02-01T08:32:20.801-08:00", "description": "In-place upgraded to Windows Server 2025 Standard", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-20h2-dc", "chargesUseFee": false, "id": "2209136415345591070", "licenseCode": "8578754948912497438", "creationTimestamp": "2020-11-02T13:45:21.528-08:00", "description": "Windows Server version 20H2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-20h2-dc" }, { "kind": "compute#license", "name": "windows-server-21h1-dc", "chargesUseFee": false, "id": "8661389914554199433", "licenseCode": "7248135684629163401", "creationTimestamp": "2021-04-29T08:40:22.527-07:00", "description": "Windows Server version 21h1 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-21h1-dc" }, { "kind": "compute#license", "name": "windows-server-core", "chargesUseFee": true, "id": "7184832379764048457", "licenseCode": "1000226", "creationTimestamp": "2016-11-07T13:21:29.000-08:00", "description": "Windows Server Core", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses" } ================================================ FILE: test-data/gce-image-license/json-dumps/windows-sql-cloud-licenses.json ================================================ { "id": "projects/windows-sql-cloud/global/licenses", "items": [ { "kind": "compute#license", "name": "sql-server-2012-enterprise", "chargesUseFee": true, "id": "1019197322190909629", "licenseCode": "1000222", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2012 Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2012-enterprise" }, { "kind": "compute#license", "name": "sql-server-2012-standard", "chargesUseFee": true, "id": "6498737321656908670", "licenseCode": "1000220", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2012 Standard", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2012-standard" }, { "kind": "compute#license", "name": "sql-server-2012-web", "chargesUseFee": true, "id": "4544654693774126004", "licenseCode": "1000223", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2012 Web", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2012-web" }, { "kind": "compute#license", "name": "sql-server-2014-enterprise", "chargesUseFee": true, "id": "1844915350471588436", "licenseCode": "1000216", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2014 Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2014-enterprise" }, { "kind": "compute#license", "name": "sql-server-2014-standard", "chargesUseFee": true, "id": "3705777654507911764", "licenseCode": "1000215", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2014 Standard", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2014-standard" }, { "kind": "compute#license", "name": "sql-server-2014-web", "chargesUseFee": true, "id": "192393444583684692", "licenseCode": "1000217", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2014 Web", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2014-web" }, { "kind": "compute#license", "name": "sql-server-2016-enterprise", "chargesUseFee": true, "id": "4374019495694842452", "licenseCode": "1000219", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2016 Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2016-enterprise" }, { "kind": "compute#license", "name": "sql-server-2016-express", "chargesUseFee": true, "id": "1256146342879158924", "licenseCode": "1000225", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2016 Express", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2016-express" }, { "kind": "compute#license", "name": "sql-server-2016-standard", "chargesUseFee": true, "id": "3762728117693987412", "licenseCode": "1000218", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2016 Standard", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2016-standard" }, { "kind": "compute#license", "name": "sql-server-2016-web", "chargesUseFee": true, "id": "2341292125388798373", "licenseCode": "1000224", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "SQL Server 2016 Web", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2016-web" }, { "kind": "compute#license", "name": "sql-server-2017-enterprise", "chargesUseFee": false, "id": "5251530023456011222", "licenseCode": "1741222371620352982", "creationTimestamp": "2017-09-25T11:38:49.539-07:00", "description": "SQL Server 2017 Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2017-enterprise" }, { "kind": "compute#license", "name": "sql-server-2017-express", "chargesUseFee": false, "id": "755737010247103372", "licenseCode": "4315490921280396", "creationTimestamp": "2017-09-25T11:39:31.203-07:00", "description": "SQL Server 2017 Express", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2017-express" }, { "kind": "compute#license", "name": "sql-server-2017-standard", "chargesUseFee": false, "id": "923950005690364768", "licenseCode": "6795597790302237536", "creationTimestamp": "2017-09-25T11:40:15.938-07:00", "description": "SQL Server 2017 Standard", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2017-standard" }, { "kind": "compute#license", "name": "sql-server-2017-web", "chargesUseFee": false, "id": "7215797861326582678", "licenseCode": "3398668354433905558", "creationTimestamp": "2017-09-25T11:39:53.032-07:00", "description": "SQL Server 2017 Web", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2017-web" }, { "kind": "compute#license", "name": "sql-server-2019-enterprise", "chargesUseFee": false, "id": "1115216916632473700", "licenseCode": "3039072951948447844", "creationTimestamp": "2019-11-15T15:02:35.345-08:00", "description": "SQL Server 2019 Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2019-enterprise" }, { "kind": "compute#license", "name": "sql-server-2019-express", "chargesUseFee": false, "id": "6719031184910880891", "licenseCode": "6367554477567938683", "creationTimestamp": "2019-11-15T15:02:44.631-08:00", "description": "SQL Server 2019 Express", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2019-express" }, { "kind": "compute#license", "name": "sql-server-2019-standard", "chargesUseFee": false, "id": "7011009714597302387", "licenseCode": "3042936622923550835", "creationTimestamp": "2019-11-15T15:02:53.011-08:00", "description": "SQL Server 2019 Standard", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2019-standard" }, { "kind": "compute#license", "name": "sql-server-2019-web", "chargesUseFee": false, "id": "7336830812754710569", "licenseCode": "6213885950785916969", "creationTimestamp": "2019-11-15T15:03:34.508-08:00", "description": "SQL Server 2019 Web", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2019-web" }, { "kind": "compute#license", "name": "sql-server-2022-enterprise", "chargesUseFee": false, "id": "115249055344003240", "licenseCode": "1239729342351313064", "creationTimestamp": "2022-07-19T15:55:03.422-07:00", "description": "SQL Server 2022 Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2022-enterprise" }, { "kind": "compute#license", "name": "sql-server-2022-express", "chargesUseFee": false, "id": "5357714831518107650", "licenseCode": "2745185555069962241", "creationTimestamp": "2022-07-19T15:57:49.861-07:00", "description": "SQL Server 2022 Express", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2022-express" }, { "kind": "compute#license", "name": "sql-server-2022-standard", "chargesUseFee": false, "id": "19382503374227483", "licenseCode": "7764068523658872858", "creationTimestamp": "2022-07-19T15:57:57.033-07:00", "description": "SQL Server 2022 Standard", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2022-standard" }, { "kind": "compute#license", "name": "sql-server-2022-web", "chargesUseFee": false, "id": "2954436675263694869", "licenseCode": "1086120352405948436", "creationTimestamp": "2022-07-19T15:58:02.857-07:00", "description": "SQL Server 2022 Web", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2022-web" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses" } ================================================ FILE: test-data/gce1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner ZONE_1 = europe-west1-b ZONE_2 = europe-west4-a ZONE_3 = europe-west4-b FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340001 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" COMPUTE_INSTANCES_MAXRESULTS=3 INSTANCE_NAME_GCE2=gce2 INSTANCE_NAME_GCE1=gce1 all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-igs-$(ZONE_1).json \ json-dumps/compute-igs-$(ZONE_2).json \ json-dumps/compute-igs-$(ZONE_3).json \ json-dumps/compute-igs-empty.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-instances-$(ZONE_1)-2.json \ json-dumps/compute-instances-$(ZONE_2).json \ json-dumps/compute-instances-$(ZONE_2)-2.json \ json-dumps/compute-instances-$(ZONE_3).json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-migs-$(ZONE_1).json \ json-dumps/compute-migs-$(ZONE_2).json \ json-dumps/compute-migs-empty.json \ json-dumps/compute-negs-$(ZONE_1).json \ json-dumps/compute-negs-$(ZONE_3).json \ json-dumps/compute-negs-empty.json \ json-dumps/compute-disks-$(ZONE_1).json \ json-dumps/compute-disks-$(ZONE_2).json \ json-dumps/compute-disks-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-regions.json \ json-dumps/compute-templates.json \ json-dumps/compute-zones.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/monitoring-query.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/serial-port-logging-entries-1.json \ json-dumps/healthChecks.json \ json-dumps/compute-instances-aggregated.json \ json-dumps/compute-igs-aggregated.json \ json-dumps/compute-migs-aggregated.json include ../Makefile.inc define MONITORING_QUERY { \ "query": "fetch gce_instance::compute.googleapis.com/instance/uptime_total \ | within 10m \ | group_by [resource.zone, metric.instance_name] \ | group_by 5m, [.mean, .count] \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-1.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_2)/instances/$(INSTANCE_NAME_GCE2)/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/healthChecks.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gce1/gce1.tf ================================================ /** * Copyright 2021 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. */ resource "google_compute_instance" "gce1" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "gce1" machine_type = "e2-micro" zone = "europe-west4-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["secured-instance"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.windows.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } labels = { foo = "bar" } } resource "google_compute_instance" "gce1_europe-west4-b" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "gce1" machine_type = "f1-micro" zone = "europe-west4-b" desired_status = "RUNNING" network_interface { network = "default" } tags = ["secured-instance"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.windows.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } } # firewall configuration used for connectivity testing resource "google_compute_firewall" "secured_instance_test_deny" { name = "gce-secured-instance-test-deny" network = "default" project = google_project.project.project_id priority = 900 deny { ports = ["22", "3389"] protocol = "tcp" } source_ranges = ["0.0.0.0/0"] target_tags = google_compute_instance.gce1.tags depends_on = [google_compute_instance.gce1] } # simple unattached bootable disk resource "google_compute_disk" "unattached" { name = "unattached-disk" project = google_project.project.project_id type = "pd-ssd" zone = "europe-west4-a" image = "debian-9-stretch-v20200805" labels = { environment = "dev" } physical_block_size_bytes = 4096 } ================================================ FILE: test-data/gce1/gce2.tf ================================================ /** * Copyright 2021 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. */ resource "google_compute_instance" "gce2" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "gce2" machine_type = "e2-micro" zone = "europe-west4-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["secured-instance"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.cos.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } metadata = { serial-port-logging-enable = "false" } } ================================================ FILE: test-data/gce1/gke.tf ================================================ /** * Copyright 2021 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. */ # Also include a small GKE cluster to test GKE node detection. resource "google_container_cluster" "gke1" { provider = google project = google_project.project.project_id depends_on = [google_project_service.container] name = "gke1" location = "europe-west1-b" initial_node_count = 4 node_config { machine_type = "e2-small" } resource_labels = { gcp_doctor_test = "gke" } } ================================================ FILE: test-data/gce1/healthchecks.tf ================================================ # [START cloudloadbalancing_ext_http_gce_instance_health_check] resource "google_compute_health_check" "default" { provider = google-beta depends_on = [google_project_service.compute] name = "http-basic-check" project = google_project.project.project_id check_interval_sec = 5 healthy_threshold = 2 http_health_check { port = 80 port_specification = "USE_FIXED_PORT" proxy_header = "NONE" request_path = "/" } log_config { enable = true } timeout_sec = 5 unhealthy_threshold = 2 } # [END cloudloadbalancing_ext_http_gce_instance_health_check] # [START cloudloadbalancing_ext_http_gce_instance_health_check] resource "google_compute_health_check" "http-basic-check-2" { depends_on = [google_project_service.compute] name = "http-basic-check-2" project = google_project.project.project_id check_interval_sec = 5 healthy_threshold = 2 http_health_check { port = 80 port_specification = "USE_FIXED_PORT" proxy_header = "NONE" request_path = "/" } timeout_sec = 5 unhealthy_threshold = 2 } # [END cloudloadbalancing_ext_http_gce_instance_health_check] # [START cloudloadbalancing_ext_tcp_gce_instance_health_check] resource "google_compute_health_check" "tcp-basic-check-1" { provider = google-beta depends_on = [google_project_service.compute] name = "tcp-basic-check-1" project = google_project.project.project_id check_interval_sec = 5 timeout_sec = 5 tcp_health_check { port = 80 } log_config { enable = true } } # [END cloudloadbalancing_ext_tcp_gce_instance_health_check] ================================================ FILE: test-data/gce1/ig1.tf ================================================ resource "google_compute_instance_group" "instance_group_1" { project = google_project.project.project_id name = "instance-group-1" instances = [ google_compute_instance.gce1.id, ] named_port { name = "http" port = "8080" } named_port { name = "http" port = "8443" } zone = "europe-west4-a" depends_on = [google_project_service.compute] } resource "google_compute_instance_group" "instance_group_1_europe-west4-b" { project = google_project.project.project_id name = "instance-group-1" instances = [ google_compute_instance.gce1_europe-west4-b.id, ] named_port { name = "http" port = "8080" } named_port { name = "http" port = "8443" } zone = "europe-west4-b" depends_on = [google_project_service.compute] } resource "google_compute_instance_group" "instance_group_2" { project = google_project.project.project_id name = "instance-group-2" instances = [ google_compute_instance.gce2.id, ] named_port { name = "http" port = "8080" } named_port { name = "https" port = "8443" } zone = "europe-west4-a" depends_on = [google_project_service.compute] } ================================================ FILE: test-data/gce1/json-dumps/compute-disks-europe-west1-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks", "items": [ { "kind": "compute#disk", "id": "7550338177783293118", "creationTimestamp": "2022-05-10T05:28:01.712-07:00", "name": "gke-gke1-default-pool-5665d797-62lh", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-62lh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:01.713-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-62lh" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7424433754121692350", "creationTimestamp": "2022-05-10T05:28:02.097-07:00", "name": "gke-gke1-default-pool-5665d797-hz12", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-hz12", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:02.097-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-hz12" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "8594043929682764990", "creationTimestamp": "2022-05-10T05:28:02.179-07:00", "name": "gke-gke1-default-pool-5665d797-jd80", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-jd80", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:02.179-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-jd80" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7088717128623711421", "creationTimestamp": "2022-05-10T05:28:03.186-07:00", "name": "gke-gke1-default-pool-5665d797-z9kh", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-z9kh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:03.187-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-z9kh" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks" } ================================================ FILE: test-data/gce1/json-dumps/compute-disks-europe-west2-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/disks" } ================================================ FILE: test-data/gce1/json-dumps/compute-disks-europe-west4-a.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks", "items": [ { "kind": "compute#disk", "id": "4897755586815845618", "creationTimestamp": "2022-05-10T05:27:10.646-07:00", "name": "gce1", "sizeGb": "32", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "sourceImage": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20220414", "sourceImageId": "3529112155699095586", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "lastAttachTimestamp": "2022-05-10T05:27:10.647-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3389558045860892917", "1000226" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7436782321968604403", "creationTimestamp": "2022-05-10T05:27:09.694-07:00", "name": "gce2", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2", "sourceImage": "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/images/cos-85-13310-1453-5", "sourceImageId": "1276396551904338204", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "UEFI_COMPATIBLE" } ], "lastAttachTimestamp": "2022-05-10T05:27:09.695-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "6880041984096540132", "1001010", "166739712233658766" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "2534143966095860953", "creationTimestamp": "2022-05-10T05:27:34.871-07:00", "name": "mig-926f", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-926f", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406", "sourceImageId": "1994093915008945255", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "lastAttachTimestamp": "2022-05-10T05:27:34.872-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-926f" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "3703127063546815705", "creationTimestamp": "2022-05-10T05:27:35.177-07:00", "name": "mig-hmnt", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-hmnt", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406", "sourceImageId": "1994093915008945255", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "lastAttachTimestamp": "2022-05-10T05:27:35.178-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-hmnt" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "4944833045469848960", "creationTimestamp": "2022-05-10T05:32:47.994-07:00", "name": "unattached-disk", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/unattached-disk", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20200805", "sourceImageId": "6709658075886210235", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-ssd", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "labels": { "environment": "dev" }, "labelFingerprint": "a6HI36FuYIQ=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks" } ================================================ FILE: test-data/gce1/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "8287498013380842772", "creationTimestamp": "2022-08-19T08:27:55.939-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 5, "destinationRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "4377979765631620372", "creationTimestamp": "2022-08-19T08:27:55.962-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 5, "destinationRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "5761556003477107473", "creationTimestamp": "2022-04-26T08:21:34.308-07:00", "name": "gke-gke1-f36cf6dd-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.0.0.0/14" ], "targetTags": [ "gke-gke1-f36cf6dd-node" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/gke-gke1-f36cf6dd-all" }, { "kind": "compute#firewall", "id": "2052805937554895685", "creationTimestamp": "2022-04-26T08:20:10.123-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "9213276775227175750", "creationTimestamp": "2022-04-26T08:20:09.988-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "5745387556141642506", "creationTimestamp": "2022-04-26T08:21:09.764-07:00", "name": "gce-secured-instance-test-deny", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 900, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "secured-instance" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "22", "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/gce-secured-instance-test-deny" }, { "kind": "compute#firewall", "id": "1755568203234652997", "creationTimestamp": "2022-04-26T08:20:10.056-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "5005632031280182033", "creationTimestamp": "2022-04-26T08:21:34.485-07:00", "name": "gke-gke1-f36cf6dd-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gke1-f36cf6dd-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/gke-gke1-f36cf6dd-vms" }, { "kind": "compute#firewall", "id": "7319950303754040081", "creationTimestamp": "2022-04-26T08:21:34.304-07:00", "name": "gke-gke1-f36cf6dd-ssh", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "35.205.188.165/32" ], "targetTags": [ "gke-gke1-f36cf6dd-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/gke-gke1-f36cf6dd-ssh" }, { "kind": "compute#firewall", "id": "3839435255207801670", "creationTimestamp": "2022-04-26T08:20:09.920-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "2293043103564898734", "creationTimestamp": "2023-03-08T06:44:17.669-08:00", "name": "fw-test-1000", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 1, "destinationRanges": [ "35.190.247.13/32" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "1688" ] } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1000" }, { "kind": "compute#firewall", "id": "8914053335820440597", "creationTimestamp": "2021-06-29T07:15:22.403-07:00", "name": "fw-test-925", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 2, "destinationRanges": [ "142.250.125.95/32" ], "allowed": [ { "IPProtocol": "all" } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-925" }, { "kind": "compute#firewall", "id": "18379809113245518637", "creationTimestamp": "2023-03-14T07:46:26.578-07:00", "name": "fw-test-1050", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 40, "destinationRanges": [ "45.100.0.0/24" ], "sourceTags": [ "foo" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "1234", "1000-2000", "2033" ] } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1050" }, { "kind": "compute#firewall", "id": "18379809113245518637", "creationTimestamp": "2023-03-14T07:46:26.578-07:00", "name": "fw-test-1025", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 45, "destinationRanges": [ "0.0.0.0/0" ], "targetTags": [ "bar" ], "allowed": [ { "IPProtocol": "all" } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1025" }, { "kind": "compute#firewall", "id": "1837980911849518637", "creationTimestamp": "2023-03-14T07:46:26.578-07:00", "name": "fw-test-950", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 50, "destinationRanges": [ "0.0.0.0/0" ], "denied": [ { "IPProtocol": "all" } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-950" }, { "kind": "compute#firewall", "id": "2493080101642798591", "creationTimestamp": "2021-12-06T08:32:16.212-08:00", "name": "fw-test-1075", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 45, "sourceServiceAccounts": [ "service-12340002@compute-system.iam.gserviceaccount.com" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "4000" ] } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1075" }, { "kind": "compute#firewall", "id": "2493080101642798591", "creationTimestamp": "2021-12-06T08:32:16.212-08:00", "name": "fw-test-1065", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "priority": 45, "targetServiceAccounts": [ "service-12340002@compute-system.iam.gserviceaccount.com" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "4000" ] } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1065" } ], "firewallPolicys": [ { "name": "856256210981", "type": "HIERARCHY", "shortName": "parent-folder-policy", "displayName": "parent-folder-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 30, "match": { "destIpRanges": [ "10.101.0.1/32" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "2000-2002" ] } ] }, "action": "allow", "direction": "EGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS" } ] }, { "name": "203310830110", "type": "HIERARCHY", "shortName": "sub-folder-policy", "displayName": "sub-folder-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 25, "match": { "destIpRanges": [ "10.102.0.1/32" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "allow", "direction": "EGRESS", "targetServiceAccounts": [ "service-12340002@compute-system.iam.gserviceaccount.com" ] }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 25, "match": { "destIpRanges": [ "10.102.0.1/32" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "2003" ] } ] }, "action": "allow", "direction": "EGRESS" } ] } ] } ================================================ FILE: test-data/gce1/json-dumps/compute-igs-aggregated.json ================================================ { "kind": "compute#instanceGroupAggregatedList", "id": "projects/gcpdiag-gce1-aaaa/aggregated/instanceGroups", "items": { "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-central1'.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/us-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-central2'.", "data": [ { "key": "scope", "value": "regions/us-central2" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west1'.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west1'.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east1'.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east1'.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast1'.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast1'.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east4'.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast1'.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west2'.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west3'.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-east1'.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south1'.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast1'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west4'.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north1'.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west2'.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east2'.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west6'.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast2'.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast3'.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west3'.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west4'.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast2'.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-central2'.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast2'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south2'.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast2'.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-west1'.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/us-east7": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east7'.", "data": [ { "key": "scope", "value": "regions/us-east7" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west8'.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west9'.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east5'.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-southwest1'.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-south1'.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-west1'.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west12'.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central1'.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west10'.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central2'.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/africa-south1'.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } }, "regions/us-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west8'.", "data": [ { "key": "scope", "value": "regions/us-west8" } ] } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-south1'.", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ] } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north2'.", "data": [ { "key": "scope", "value": "regions/europe-north2" } ] } }, "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-c'.", "data": [ { "key": "scope", "value": "zones/us-central1-c" } ] } }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/us-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-b'.", "data": [ { "key": "scope", "value": "zones/us-central2-b" } ] } }, "zones/us-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-a'.", "data": [ { "key": "scope", "value": "zones/us-central2-a" } ] } }, "zones/us-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-c'.", "data": [ { "key": "scope", "value": "zones/us-central2-c" } ] } }, "zones/us-central2-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-d'.", "data": [ { "key": "scope", "value": "zones/us-central2-d" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "instanceGroups": [ { "kind": "compute#instanceGroup", "id": "8902174216398213342", "creationTimestamp": "2025-02-05T01:24:01.563-08:00", "name": "instance-group-1", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "http", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "bPhGeNqJuxo=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups/instance-group-1", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ] }, "zones/europe-west4-a": { "instanceGroups": [ { "kind": "compute#instanceGroup", "id": "5126889459178967262", "creationTimestamp": "2025-02-05T01:24:01.313-08:00", "name": "instance-group-1", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "http", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "bPhGeNqJuxo=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "685289583101776064", "creationTimestamp": "2025-02-05T01:23:59.990-08:00", "name": "instance-group-2", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "https", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "OMWWjJuNHl0=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "4897701714977525962", "creationTimestamp": "2025-02-05T01:23:49.664-08:00", "name": "mig", "description": "This instance group is controlled by Instance Group Manager 'mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig", "size": 2, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ] }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/us-east7-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-a'.", "data": [ { "key": "scope", "value": "zones/us-east7-a" } ] } }, "zones/us-east7-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-b'.", "data": [ { "key": "scope", "value": "zones/us-east7-b" } ] } }, "zones/us-east7-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-c'.", "data": [ { "key": "scope", "value": "zones/us-east7-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/us-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-c'.", "data": [ { "key": "scope", "value": "zones/us-west8-c" } ] } }, "zones/us-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-a'.", "data": [ { "key": "scope", "value": "zones/us-west8-a" } ] } }, "zones/us-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-b'.", "data": [ { "key": "scope", "value": "zones/us-west8-b" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/aggregated/instanceGroups" } ================================================ FILE: test-data/gce1/json-dumps/compute-igs-europe-west1-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups", "items": [ { "kind": "compute#instanceGroup", "id": "4752839275668943076", "creationTimestamp": "2022-04-26T08:21:47.107-07:00", "name": "gke-gke1-default-pool-35923fbc-grp", "description": "This instance group is controlled by Instance Group Manager 'gke-gke1-default-pool-35923fbc-grp'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp", "size": 4, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups" } ================================================ FILE: test-data/gce1/json-dumps/compute-igs-europe-west2-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups" } ================================================ FILE: test-data/gce1/json-dumps/compute-igs-europe-west4-a.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups", "items": [ { "kind": "compute#instanceGroup", "id": "3671191198561055498", "creationTimestamp": "2022-04-26T08:21:09.998-07:00", "name": "instance-group-1", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "http", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "bPhGeNqJuxo=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "2978499701990863624", "creationTimestamp": "2022-04-26T08:21:11.396-07:00", "name": "instance-group-2", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "https", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "OMWWjJuNHl0=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "4528539620862178056", "creationTimestamp": "2022-04-26T08:21:11.080-07:00", "name": "mig", "description": "This instance group is controlled by Instance Group Manager 'mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig", "size": 2, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups" } ================================================ FILE: test-data/gce1/json-dumps/compute-igs-europe-west4-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups", "items": [ { "kind": "compute#instanceGroup", "id": "3498839267610641831", "creationTimestamp": "2024-08-07T06:48:56.678-07:00", "name": "instance-group-1", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "http", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "bPhGeNqJuxo=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups/instance-group-1", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups" } ================================================ FILE: test-data/gce1/json-dumps/compute-instances-aggregated.json ================================================ { "kind": "compute#instanceAggregatedList", "id": "projects/gcpdiag-gce1-aaaa/aggregated/instances", "items": { "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-c'.", "data": [ { "key": "scope", "value": "zones/us-central1-c" } ] } }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/us-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-b'.", "data": [ { "key": "scope", "value": "zones/us-central2-b" } ] } }, "zones/us-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-a'.", "data": [ { "key": "scope", "value": "zones/us-central2-a" } ] } }, "zones/us-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-c'.", "data": [ { "key": "scope", "value": "zones/us-central2-c" } ] } }, "zones/us-central2-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-d'.", "data": [ { "key": "scope", "value": "zones/us-central2-d" } ] } }, "zones/europe-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-a'.", "data": [ { "key": "scope", "value": "zones/europe-west4-a" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "instances": [ { "kind": "compute#instance", "id": "5259249240161292536", "creationTimestamp": "2025-02-05T01:23:35.933-08:00", "name": "gce1", "tags": { "items": [ "secured-instance" ], "fingerprint": "OcWEGzD6ieA=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/machineTypes/f1-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.3", "name": "nic0", "fingerprint": "eM7_FmHujyU=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/disks/gce1", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "diskSizeGb": "32", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "b5_sNtXJEts=" }, "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1", "scheduling": { "onHostMaintenance": "TERMINATE", "automaticRestart": false, "preemptible": true }, "cpuPlatform": "Intel Skylake", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "zF_QjmTDeU8=", "lastStartTimestamp": "2025-02-05T01:23:43.722-08:00", "satisfiesPzi": true } ] }, "zones/europe-west4-a": { "instances": [ { "kind": "compute#instance", "id": "7276406499315716343", "creationTimestamp": "2025-02-05T01:23:36.842-08:00", "name": "gce1", "tags": { "items": [ "secured-instance" ], "fingerprint": "OcWEGzD6ieA=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.4", "name": "nic0", "fingerprint": "O_a09qdAaTE=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "diskSizeGb": "32", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "b5_sNtXJEts=" }, "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1", "scheduling": { "onHostMaintenance": "TERMINATE", "automaticRestart": false, "preemptible": true }, "cpuPlatform": "Intel Broadwell", "labels": { "foo": "bar" }, "labelFingerprint": "cLOO6l7pJAo=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "W9T2Bn2xXbE=", "lastStartTimestamp": "2025-02-05T01:23:46.347-08:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "1010101011", "creationTimestamp": "2025-02-05T01:23:35.626-08:00", "name": "gce2", "tags": { "items": [ "secured-instance" ], "fingerprint": "OcWEGzD6ieA=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.2", "name": "nic0", "fingerprint": "AvD0StiibEE=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "diskSizeGb": "32", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "xkTdem40Dus=", "items": [ { "key": "serial-port-logging-enable", "value": "false" } ] }, "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2", "scheduling": { "onHostMaintenance": "TERMINATE", "automaticRestart": false, "preemptible": true }, "cpuPlatform": "Intel Broadwell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "vhIIJ6NdgqM=", "lastStartTimestamp": "2025-02-05T01:23:43.592-08:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "4335690972119601373", "creationTimestamp": "2025-02-05T01:24:02.564-08:00", "name": "mig-bzvx", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.6", "name": "nic0", "fingerprint": "RVABl1VJZQI=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-bzvx", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "QiZsHXut0E8=", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "gcpdiag-test": "mig" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "Cw2v9zg_VlY=", "lastStartTimestamp": "2025-02-05T01:24:11.476-08:00", "satisfiesPzi": true }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:56.296-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-35923fbc-2xxp", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1470007467084984573", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:05.407-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west4-a" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-2xxp", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.78.171.82", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "kind": "compute#instance", "id": "7786653639192252637", "creationTimestamp": "2025-02-05T01:24:02.335-08:00", "name": "mig-l40g", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.5", "name": "nic0", "fingerprint": "Uzb8mp3_QBM=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-l40g", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "QiZsHXut0E8=", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "rixQDgLs8S0=", "lastStartTimestamp": "2025-02-05T01:24:12.082-08:00", "satisfiesPzi": true } ] }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/us-east7-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-a'.", "data": [ { "key": "scope", "value": "zones/us-east7-a" } ] } }, "zones/us-east7-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-b'.", "data": [ { "key": "scope", "value": "zones/us-east7-b" } ] } }, "zones/us-east7-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-c'.", "data": [ { "key": "scope", "value": "zones/us-east7-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/us-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-c'.", "data": [ { "key": "scope", "value": "zones/us-west8-c" } ] } }, "zones/us-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-a'.", "data": [ { "key": "scope", "value": "zones/us-west8-a" } ] } }, "zones/us-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-b'.", "data": [ { "key": "scope", "value": "zones/us-west8-b" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/aggregated/instances" } ================================================ FILE: test-data/gce1/json-dumps/compute-instances-europe-west1-b-2.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances", "items": [ { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:54.798-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-k05c", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3147904666822881533", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:01.245-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-k05c", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.79.110.136", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-k05c", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances" } ================================================ FILE: test-data/gce1/json-dumps/compute-instances-europe-west1-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances", "items": [ { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:56.296-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-2xxp", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1470007467084984573", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:05.407-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-2xxp", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.78.171.82", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-2xxp", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:55.180-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-c12f", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "183710301471224061", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:02.051-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-c12f", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.76.115.182", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-c12f", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:56.318-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-fv50", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "148164482114629885", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:05.433-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-fv50", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.205.62.74", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-fv50", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" } ], "kind": "compute#instanceList", "nextPageToken": "ClgI-fiQw4y09wI6TQoCGAMKAyC1EAoCGAIKByDg3fmMvREKAhgHCiUqI2drZS1na2UxLWRlZmF1bHQtcG9vbC0zNTkyM2ZiYy1mdjUwCgog_eGW5vvZmIcC", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances" } ================================================ FILE: test-data/gce1/json-dumps/compute-instances-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instances" } ================================================ FILE: test-data/gce1/json-dumps/compute-instances-europe-west4-a-2.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances", "items": [ { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:18.746-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-7pvl", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4022531639476597505", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:24.395-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig" } ], "kind": "compute#metadata" }, "name": "mig-7pvl", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-7pvl", "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances" } ================================================ FILE: test-data/gce1/json-dumps/compute-instances-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:51.863-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101012", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2022-04-26T08:20:58.538-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "minCpuPlatform": "Intel Skylake", "name": "gce1", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:51.863-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101013", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2022-04-26T08:20:58.538-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "windows-test", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.78.171.82", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/windows-test", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:53.544-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101011", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:01.453-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "serial-port-logging-enable", "value": "false" } ], "kind": "compute#metadata" }, "name": "gce2", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:19.061-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-4h21", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101014", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:25.221-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig" } ], "kind": "compute#metadata" }, "name": "mig-4h21", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-4h21", "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" } ], "kind": "compute#instanceList", "nextPageToken": "Cj0It-i3w4y09wI6MgoCGAMKAyCmEgoCGAIKByDg3fmMvREKAhgHCgoqCG1pZy00aDIxCgoggeaW5uuu8YE7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances" } ================================================ FILE: test-data/gce1/json-dumps/compute-instances-europe-west4-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2024-08-07T06:47:30.127-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/disks/gce1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "6593799323947811870", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2024-08-07T06:48:46.393-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/machineTypes/f1-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "gce1", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.6", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances" } ================================================ FILE: test-data/gce1/json-dumps/compute-licenses.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/global/licenses", "items": [ { "kind": "compute#license", "name": "windows-10-enterprise-byol", "chargesUseFee": false, "id": "5769580143916819783", "licenseCode": "2089835370828997959", "creationTimestamp": "2018-11-07T00:00:40.302-08:00", "description": "Windows 10 Enterprise BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-enterprise-byol" }, { "kind": "compute#license", "name": "windows-10-x64-byol", "chargesUseFee": false, "id": "5572284649276248982", "licenseCode": "8727879116868096918", "creationTimestamp": "2019-11-19T19:05:29.677-08:00", "description": "Windows 10 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-x64-byol" }, { "kind": "compute#license", "name": "windows-10-x86-byol", "chargesUseFee": false, "id": "1279231564365501289", "licenseCode": "3732182829874353001", "creationTimestamp": "2019-11-19T19:05:42.089-08:00", "description": "Windows 10 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-x86-byol" }, { "kind": "compute#license", "name": "windows-11-x64-byol", "chargesUseFee": false, "id": "3804262737275203477", "licenseCode": "5378533650449772437", "creationTimestamp": "2021-08-25T11:52:42.711-07:00", "description": "Windows 11 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-11-x64-byol" }, { "kind": "compute#license", "name": "windows-7-enterprise-byol", "chargesUseFee": false, "id": "2913052624331679126", "licenseCode": "752112173778412950", "creationTimestamp": "2018-11-06T23:59:53.727-08:00", "description": "Windows 7 Enterprise BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-enterprise-byol" }, { "kind": "compute#license", "name": "windows-7-x64-byol", "chargesUseFee": false, "id": "6501903266496451262", "licenseCode": "5016528181960184510", "creationTimestamp": "2019-11-19T19:00:33.621-08:00", "description": "Windows 7 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-x64-byol" }, { "kind": "compute#license", "name": "windows-7-x86-byol", "chargesUseFee": false, "id": "4058550282231550561", "licenseCode": "622639362407469665", "creationTimestamp": "2019-11-19T19:01:34.532-08:00", "description": "Windows 7 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-x86-byol" }, { "kind": "compute#license", "name": "windows-8-x64-byol", "chargesUseFee": false, "id": "7710168160606425653", "licenseCode": "7036859048284197429", "creationTimestamp": "2019-11-19T19:02:50.559-08:00", "description": "Windows 8.x 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-8-x64-byol" }, { "kind": "compute#license", "name": "windows-8-x86-byol", "chargesUseFee": false, "id": "2601192579332117498", "licenseCode": "3720924436396315642", "creationTimestamp": "2019-11-19T19:03:49.785-08:00", "description": "Windows 8.x 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-8-x86-byol" }, { "kind": "compute#license", "name": "windows-81-x64-byol", "chargesUseFee": false, "id": "5692263345196614391", "licenseCode": "5366577783322166007", "creationTimestamp": "2019-04-28T21:22:48.487-07:00", "description": "Windows 8.1 Enterprise x64 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-81-x64-byol" }, { "kind": "compute#license", "name": "windows-ent", "chargesUseFee": false, "id": "1257656105385958662", "licenseCode": "2967169933779246342", "creationTimestamp": "2019-09-25T19:35:21.078-07:00", "description": "Windows Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-ent" }, { "kind": "compute#license", "name": "windows-for-containers", "chargesUseFee": false, "id": "7423076496314791885", "licenseCode": "2643967004807329741", "creationTimestamp": "2017-09-25T11:21:22.120-07:00", "description": "Windows container host", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-for-containers" }, { "kind": "compute#license", "name": "windows-server-1709-dc", "chargesUseFee": false, "id": "2638722841150638382", "licenseCode": "5194306116883728686", "creationTimestamp": "2017-10-03T13:49:05.759-07:00", "description": "Windows Server 1709 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1709-dc" }, { "kind": "compute#license", "name": "windows-server-1803-dc", "chargesUseFee": false, "id": "991969583094905153", "licenseCode": "6476660300603799873", "creationTimestamp": "2018-05-07T10:06:54.761-07:00", "description": "Windows Server version 1803 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1803-dc" }, { "kind": "compute#license", "name": "windows-server-1809-dc", "chargesUseFee": false, "id": "2197036663612051569", "licenseCode": "8597854123084943473", "creationTimestamp": "2018-10-04T17:21:50.249-07:00", "description": "Windows Server version 1809 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1809-dc" }, { "kind": "compute#license", "name": "windows-server-1903-dc", "chargesUseFee": false, "id": "783754911489890105", "licenseCode": "5980382382909462329", "creationTimestamp": "2019-06-10T21:11:02.733-07:00", "description": "Windows Server version 1903 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1903-dc" }, { "kind": "compute#license", "name": "windows-server-1909-dc", "chargesUseFee": false, "id": "1504783339576403625", "licenseCode": "1413572828508235433", "creationTimestamp": "2019-11-14T01:03:02.101-08:00", "description": "Windows Server version 1909 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1909-dc" }, { "kind": "compute#license", "name": "windows-server-2000", "chargesUseFee": false, "id": "77415431498093015", "licenseCode": "5507061839551517143", "creationTimestamp": "2021-03-02T09:00:40.478-08:00", "description": "Windows Server 2000", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2000" }, { "kind": "compute#license", "name": "windows-server-2003", "chargesUseFee": false, "id": "8972483680585271920", "licenseCode": "5030842449011296880", "creationTimestamp": "2017-04-10T14:09:51.924-07:00", "description": "Windows Server 2003", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2003" }, { "kind": "compute#license", "name": "windows-server-2004-dc", "chargesUseFee": false, "id": "6915731882356532357", "licenseCode": "6710259852346942597", "creationTimestamp": "2020-07-23T11:43:54.418-07:00", "description": "Windows Server version 2004 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2004-dc" }, { "kind": "compute#license", "name": "windows-server-2008", "chargesUseFee": false, "id": "2740560588278180852", "licenseCode": "1656378918552316916", "creationTimestamp": "2022-11-09T13:01:15.565-08:00", "description": "Windows Server 2008 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008" }, { "kind": "compute#license", "name": "windows-server-2008-dc", "chargesUseFee": true, "id": "5520530534018080146", "licenseCode": "1000502", "creationTimestamp": "2015-06-03T17:05:28.000-07:00", "description": "Windows Server 2008 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-dc" }, { "kind": "compute#license", "name": "windows-server-2008-r2", "chargesUseFee": false, "id": "4293107698603502582", "licenseCode": "3284763237085719542", "creationTimestamp": "2022-11-09T13:01:13.386-08:00", "description": "Windows Server 2008 R2 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2" }, { "kind": "compute#license", "name": "windows-server-2008-r2-byol", "chargesUseFee": false, "id": "6485631155857676024", "licenseCode": "4551215591257167608", "creationTimestamp": "2018-10-05T15:39:19.139-07:00", "description": "Windows Server 2008R2 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2-byol" }, { "kind": "compute#license", "name": "windows-server-2008-r2-dc", "chargesUseFee": true, "id": "6080198139471122848", "licenseCode": "1000000", "creationTimestamp": "2013-08-19T17:17:57.000-07:00", "description": "Windows Server 2008 R2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2-dc" }, { "kind": "compute#license", "name": "windows-server-2012", "chargesUseFee": false, "id": "4571663854194502649", "licenseCode": "7695108898142923768", "creationTimestamp": "2022-11-09T13:01:10.861-08:00", "description": "Windows Server 2012 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012" }, { "kind": "compute#license", "name": "windows-server-2012-byol", "chargesUseFee": false, "id": "2247304514167789851", "licenseCode": "5559842820536817947", "creationTimestamp": "2018-10-05T15:38:44.367-07:00", "description": "Windows Server 2012 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-byol" }, { "kind": "compute#license", "name": "windows-server-2012-dc", "chargesUseFee": true, "id": "6102042211374830963", "licenseCode": "1000015", "creationTimestamp": "2015-01-05T16:58:27.000-08:00", "description": "Windows Server 2012 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-dc" }, { "kind": "compute#license", "name": "windows-server-2012-r2", "chargesUseFee": false, "id": "975226805105568736", "licenseCode": "7798417859637521376", "creationTimestamp": "2022-11-09T13:01:03.469-08:00", "description": "Windows Server 2012 R2 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2" }, { "kind": "compute#license", "name": "windows-server-2012-r2-byol", "chargesUseFee": false, "id": "11586629996795623", "licenseCode": "6738952703547430631", "creationTimestamp": "2018-10-05T15:39:04.149-07:00", "description": "Windows Server 2012R2 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-byol" }, { "kind": "compute#license", "name": "windows-server-2012-r2-dc", "chargesUseFee": true, "id": "6102042209776448355", "licenseCode": "1000017", "creationTimestamp": "2015-01-05T16:58:27.000-08:00", "description": "Windows Server 2012 R2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-dc" }, { "kind": "compute#license", "name": "windows-server-2012-r2-dc-in-place-upgrade", "chargesUseFee": false, "id": "1687636345185865342", "licenseCode": "7123010349826543230", "creationTimestamp": "2020-03-24T09:08:49.417-07:00", "description": "Windows Server 2008 R2 to 2012 R2 in place upgrade", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2016", "chargesUseFee": false, "id": "2566166048269249507", "licenseCode": "4819555115818134498", "creationTimestamp": "2022-11-09T13:01:01.077-08:00", "description": "Windows Server 2016 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016" }, { "kind": "compute#license", "name": "windows-server-2016-byol", "chargesUseFee": false, "id": "6580557195888974094", "licenseCode": "4322823184804632846", "creationTimestamp": "2018-10-05T15:38:26.021-07:00", "description": "Windows Server 2016 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-byol" }, { "kind": "compute#license", "name": "windows-server-2016-dc", "chargesUseFee": true, "id": "2483536683413682772", "licenseCode": "1000213", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "Windows Server 2016 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-dc" }, { "kind": "compute#license", "name": "windows-server-2016-dc-in-place-upgrade", "chargesUseFee": false, "id": "7616085184958426941", "licenseCode": "5199320590876405565", "creationTimestamp": "2022-03-04T09:52:18.982-08:00", "description": "in-place upgraded to Windows Server 2016", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2016-nano", "chargesUseFee": true, "id": "2282594357842688596", "licenseCode": "1000214", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "Windows Server 2016 Nano", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-nano" }, { "kind": "compute#license", "name": "windows-server-2019", "chargesUseFee": false, "id": "3525541779464104933", "licenseCode": "4874454843789519845", "creationTimestamp": "2022-11-09T13:00:58.674-08:00", "description": "Windows Server 2019 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019" }, { "kind": "compute#license", "name": "windows-server-2019-byol", "chargesUseFee": false, "id": "1090214026507846099", "licenseCode": "6532438499690676691", "creationTimestamp": "2019-09-25T12:25:48.522-07:00", "description": "Windows Server 2019 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-byol" }, { "kind": "compute#license", "name": "windows-server-2019-dc", "chargesUseFee": false, "id": "5993475225685790965", "licenseCode": "3389558045860892917", "creationTimestamp": "2018-10-04T17:19:38.568-07:00", "description": "Windows Server 2019 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-dc" }, { "kind": "compute#license", "name": "windows-server-2019-dc-in-place-upgrade", "chargesUseFee": false, "id": "7388112379630840967", "licenseCode": "3156934045285215367", "creationTimestamp": "2022-03-04T09:54:48.827-08:00", "description": "in-place upgraded to Windows Server 2019", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2022", "chargesUseFee": false, "id": "8141439404167244305", "licenseCode": "6107784707477449232", "creationTimestamp": "2022-11-09T13:00:46.975-08:00", "description": "Windows Server 2022 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022" }, { "kind": "compute#license", "name": "windows-server-2022-byol", "chargesUseFee": false, "id": "2150336909657452508", "licenseCode": "2808834792899686364", "creationTimestamp": "2021-08-25T11:51:31.527-07:00", "description": "Windows Server 2022 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-byol" }, { "kind": "compute#license", "name": "windows-server-2022-dc", "chargesUseFee": false, "id": "2525168283357630087", "licenseCode": "4079807029871201927", "creationTimestamp": "2021-09-02T08:40:24.070-07:00", "description": "Windows Server 2022 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-dc" }, { "kind": "compute#license", "name": "windows-server-2022-dc-in-place-upgrade", "chargesUseFee": false, "id": "7118639573064740016", "licenseCode": "4670175393034005680", "creationTimestamp": "2022-03-04T09:54:39.255-08:00", "description": "in-place upgraded to Windows Server 2022", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-20h2-dc", "chargesUseFee": false, "id": "2209136415345591070", "licenseCode": "8578754948912497438", "creationTimestamp": "2020-11-02T13:45:21.528-08:00", "description": "Windows Server version 20H2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-20h2-dc" }, { "kind": "compute#license", "name": "windows-server-21h1-dc", "chargesUseFee": false, "id": "8661389914554199433", "licenseCode": "7248135684629163401", "creationTimestamp": "2021-04-29T08:40:22.527-07:00", "description": "Windows Server version 21h1 Datacenter Edition", "transferable": true, "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-21h1-dc" }, { "kind": "compute#license", "name": "windows-server-core", "chargesUseFee": true, "id": "7184832379764048457", "licenseCode": "1000226", "creationTimestamp": "2016-11-07T13:21:29.000-08:00", "description": "Windows Server Core", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-core" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses" } ================================================ FILE: test-data/gce1/json-dumps/compute-migs-aggregated.json ================================================ { "kind": "compute#instanceGroupManagerAggregatedList", "id": "projects/gcpdiag-gce1-aaaa/aggregated/instanceGroupManagers", "items": { "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-central1'.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/us-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-central2'.", "data": [ { "key": "scope", "value": "regions/us-central2" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west1'.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west1'.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east1'.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east1'.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast1'.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast1'.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east4'.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast1'.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west2'.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west3'.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-east1'.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south1'.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast1'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west4'.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north1'.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west2'.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east2'.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west6'.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast2'.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast3'.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west3'.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west4'.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast2'.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-central2'.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast2'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south2'.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast2'.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-west1'.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/us-east7": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east7'.", "data": [ { "key": "scope", "value": "regions/us-east7" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west8'.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west9'.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east5'.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-southwest1'.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-south1'.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-west1'.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west12'.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central1'.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west10'.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central2'.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/africa-south1'.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } }, "regions/us-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west8'.", "data": [ { "key": "scope", "value": "regions/us-west8" } ] } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-south1'.", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ] } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north2'.", "data": [ { "key": "scope", "value": "regions/europe-north2" } ] } }, "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-c'.", "data": [ { "key": "scope", "value": "zones/us-central1-c" } ] } }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/us-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-b'.", "data": [ { "key": "scope", "value": "zones/us-central2-b" } ] } }, "zones/us-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-a'.", "data": [ { "key": "scope", "value": "zones/us-central2-a" } ] } }, "zones/us-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-c'.", "data": [ { "key": "scope", "value": "zones/us-central2-c" } ] } }, "zones/us-central2-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-d'.", "data": [ { "key": "scope", "value": "zones/us-central2-d" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-b'.", "data": [ { "key": "scope", "value": "zones/europe-west4-b" } ] } }, "zones/europe-west4-a": { "instanceGroupManagers": [ { "kind": "compute#instanceGroupManager", "id": "8122805250387700905", "creationTimestamp": "2025-02-06T07:16:22.950-08:00", "name": "gke-gke1-default-pool-35923fbc-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/instanceTemplates/gke-gke1-default-pool-35923fbc", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/instanceTemplates/gke-gke1-default-pool-35923fbc", "targetSize": { "calculated": 1 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke1-default-pool-35923fbc-grp", "baseInstanceName": "gke-gke1-default-pool-35923fbc", "fingerprint": "1CgCkMYBqiQ=", "currentActions": { "none": 1, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 1, "targetStoppedSize": 0, "targetSuspendedSize": 0, "listManagedInstancesResults": "PAGINATED", "standbyPolicy": { "mode": "MANUAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "YES", "defaultActionOnFailure": "REPAIR" }, "satisfiesPzi": true, "satisfiesPzs": true }, { "kind": "compute#instanceGroupManager", "id": "1150095616799314165", "creationTimestamp": "2025-02-05T01:23:38.353-08:00", "name": "mig", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig", "baseInstanceName": "mig", "fingerprint": "5RLx-oKUGrQ=", "currentActions": { "none": 2, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 2, "targetStoppedSize": 0, "targetSuspendedSize": 0, "listManagedInstancesResults": "PAGELESS", "standbyPolicy": { "mode": "MANUAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "NO", "defaultActionOnFailure": "REPAIR" }, "satisfiesPzi": true, "satisfiesPzs": true } ] }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/us-east7-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-a'.", "data": [ { "key": "scope", "value": "zones/us-east7-a" } ] } }, "zones/us-east7-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-b'.", "data": [ { "key": "scope", "value": "zones/us-east7-b" } ] } }, "zones/us-east7-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-c'.", "data": [ { "key": "scope", "value": "zones/us-east7-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/us-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-c'.", "data": [ { "key": "scope", "value": "zones/us-west8-c" } ] } }, "zones/us-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-a'.", "data": [ { "key": "scope", "value": "zones/us-west8-a" } ] } }, "zones/us-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-b'.", "data": [ { "key": "scope", "value": "zones/us-west8-b" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/aggregated/instanceGroupManagers" } ================================================ FILE: test-data/gce1/json-dumps/compute-migs-europe-west1-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "1906946679224250602", "creationTimestamp": "2022-04-26T08:21:41.088-07:00", "name": "gke-gke1-default-pool-35923fbc-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc", "targetSize": { "calculated": 4 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp", "baseInstanceName": "gke-gke1-default-pool-35923fbc", "fingerprint": "cFBmeZR_JvQ=", "currentActions": { "none": 4, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 4, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce1/json-dumps/compute-migs-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroupManagers", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce1/json-dumps/compute-migs-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "7183453391228875571", "creationTimestamp": "2022-04-26T08:21:00.715-07:00", "name": "mig", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig", "baseInstanceName": "mig", "fingerprint": "lss-DXagYSg=", "currentActions": { "none": 2, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 2, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce1/json-dumps/compute-negs-empty.json ================================================ ================================================ FILE: test-data/gce1/json-dumps/compute-negs-europe-west1-b.json ================================================ { "kind": "compute#networkEndpointGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/networkEndpointGroups", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/networkEndpointGroups" } ================================================ FILE: test-data/gce1/json-dumps/compute-negs-europe-west4-b.json ================================================ { "kind": "compute#networkEndpointGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/networkEndpointGroups", "items": [ { "kind": "compute#networkEndpointGroup", "id": "6733748123162931851", "creationTimestamp": "2024-08-12T01:48:36.816-07:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1", "name": "neg1", "networkEndpointType": "GCE_VM_IP_PORT", "size": 1, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default", "defaultPort": 90 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/networkEndpointGroups" } ================================================ FILE: test-data/gce1/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "1705778614467146592", "creationTimestamp": "2022-04-26T08:19:43.703-07:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/1705778614467146592", "autoCreateSubnetworks": true, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2/subnetworks/default" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/gce1/json-dumps/compute-network-routes.json ================================================ { "kind": "compute#routeList", "id": "projects/gcpdiag-gce1-aaaa/global/routes", "items": [ { "kind": "compute#route", "id": "2670539294019165993", "creationTimestamp": "2023-03-15T03:45:27.008-07:00", "name": "default", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "destRange": "0.0.0.0/0", "priority": 1, "nextHopGateway": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/gateways/default-internet-gateway", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/default" }, { "kind": "compute#route", "id": "2178241415220915600", "creationTimestamp": "2023-02-09T03:05:35.107-08:00", "name": "peering-route-299fcb697f2532b0", "description": "Auto generated route via peering [peering-r544dd974f1bc5396-tp-default].", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "destRange": "192.168.0.0/26", "priority": 0, "nextHopPeering": "peering-r544dd974f1bc5396-tp-default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/peering-route-299fcb697f2532b0" }, { "kind": "compute#route", "id": "8223547831511088095", "creationTimestamp": "2023-03-10T06:56:48.979-08:00", "name": "real-allow-kms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "tags": [ "windows" ], "destRange": "35.190.247.13/32", "priority": 1, "nextHopGateway": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/gateways/default-internet-gateway", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/real-allow-kms" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes" } ================================================ FILE: test-data/gce1/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "5WfGmP2rsbA=", "items": [ { "key": "serial-port-logging-enable", "value": "true" }, { "key": "gke-gke1-f36cf6dd-cidr", "value": "default:10.0.0.0/14" } ], "kind": "compute#metadata" }, "creationTimestamp": "2022-04-26T08:19:36.093-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12340001-compute@developer.gserviceaccount.com", "id": "7145890083999429480", "kind": "compute#project", "name": "gcpdiag-gce1-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 8 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 5 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 500, "metric": "HEALTH_CHECKS", "usage": 0 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 2 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 35 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/gce1/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-gce1-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3", "supportsPzs": false }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 4 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 400 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 4 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 1 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 1 }, { "metric": "INSTANCES", "limit": 6000, "usage": 4 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 2 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 62 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 3 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 1 }, { "metric": "INSTANCES", "limit": 6000, "usage": 4 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 2 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6", "supportsPzs": false }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 24, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 4096, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 500, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 6000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 0, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 128, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8", "supportsPzs": false }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3", "supportsPzs": false }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions" } ================================================ FILE: test-data/gce1/json-dumps/compute-serial-port-output-1010101010.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE. Up 20.49 seconds", "start": "0", "next": "63414", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput" } ================================================ FILE: test-data/gce1/json-dumps/compute-serial-port-output-1010101011.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE. Up 20.49 seconds", "start": "0", "next": "63414", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput" } ================================================ FILE: test-data/gce1/json-dumps/compute-subnetwork-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com" ], "role": "roles/compute.networkUser" } ], "etag": "BwXba-kLoiA=", "version": 1 } ================================================ FILE: test-data/gce1/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/aggregated/subnetworks", "items": { "regions/asia-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.626-07:00", "fingerprint": "ExVityxQ7Zw=", "gatewayAddress": "10.140.0.1", "id": "7865289181883843690", "ipCidrRange": "10.140.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.735-07:00", "fingerprint": "WEPpLpqTaII=", "gatewayAddress": "10.170.0.1", "id": "1625232185091474538", "ipCidrRange": "10.170.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.546-07:00", "fingerprint": "bQ24OL6A-_g=", "gatewayAddress": "10.146.0.1", "id": "1533136348119614570", "ipCidrRange": "10.146.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.673-07:00", "fingerprint": "V5llMO8nmmI=", "gatewayAddress": "10.174.0.1", "id": "9108510720326681706", "ipCidrRange": "10.174.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.690-07:00", "fingerprint": "YvlSkRtP_4s=", "gatewayAddress": "10.178.0.1", "id": "4106072082002527338", "ipCidrRange": "10.178.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.687-07:00", "fingerprint": "wpauE-6Ls5k=", "gatewayAddress": "10.160.0.1", "id": "799045077667726442", "ipCidrRange": "10.160.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.745-07:00", "fingerprint": "Q7YnvFsvcIs=", "gatewayAddress": "10.190.0.1", "id": "5569943562367845482", "ipCidrRange": "10.190.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.680-07:00", "fingerprint": "9qw_IGoz63I=", "gatewayAddress": "10.148.0.1", "id": "1399967472608134250", "ipCidrRange": "10.148.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.669-07:00", "fingerprint": "A364yIYGdbo=", "gatewayAddress": "10.184.0.1", "id": "925018594468217962", "ipCidrRange": "10.184.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.681-07:00", "fingerprint": "nW5ufndV5Es=", "gatewayAddress": "10.152.0.1", "id": "3491955985615471722", "ipCidrRange": "10.152.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.656-07:00", "fingerprint": "DrRYoQz8MQQ=", "gatewayAddress": "10.192.0.1", "id": "3881444575162188906", "ipCidrRange": "10.192.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-central2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.681-07:00", "fingerprint": "Fkp5Ia_kWjU=", "gatewayAddress": "10.186.0.1", "id": "7309165993080177770", "ipCidrRange": "10.186.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.676-07:00", "fingerprint": "uAKn9PpojKc=", "gatewayAddress": "10.166.0.1", "id": "5895305034600072298", "ipCidrRange": "10.166.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-southwest1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:34.478-07:00", "fingerprint": "7puHFtbgohs=", "gatewayAddress": "10.204.0.1", "id": "6503801733215994985", "ipCidrRange": "10.204.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.565-07:00", "fingerprint": "RYxGa4BdqVw=", "gatewayAddress": "10.132.0.1", "id": "4254674819412968554", "ipCidrRange": "10.132.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.592-07:00", "fingerprint": "InwBX-PAmxE=", "gatewayAddress": "10.154.0.1", "id": "8673388756094993514", "ipCidrRange": "10.154.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:34.435-07:00", "fingerprint": "jtqiYE_BvSA=", "gatewayAddress": "10.156.0.1", "id": "2730999123496453225", "ipCidrRange": "10.156.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.623-07:00", "fingerprint": "sfuW5PvbdEI=", "gatewayAddress": "10.164.0.1", "id": "1461822054006834282", "ipCidrRange": "10.164.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "secondaryIpRanges": [ { "ipCidrRange": "10.85.0.0/17", "rangeName": "gke-autopilot-gke1-pods-6a0c2f5b" }, { "ipCidrRange": "10.85.128.0/22", "rangeName": "gke-autopilot-gke1-services-6a0c2f5b" }, { "ipCidrRange": "10.60.0.0/20", "rangeName": "gke-gke4-services-e4411110" }, { "ipCidrRange": "10.56.0.0/14", "rangeName": "gke-gke4-pods-e4411110" }, { "ipCidrRange": "10.60.96.0/22", "rangeName": "gke-autopilot-gke2-services-3fbbc734" }, { "ipCidrRange": "10.60.128.0/17", "rangeName": "gke-autopilot-gke2-pods-3fbbc734" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "stackType": "IPV4_ONLY" }, { "creationTimestamp": "2022-10-11T07:16:29.795-07:00", "enableFlowLogs": false, "fingerprint": "PE0z2PNqD2Y=", "gatewayAddress": "192.168.0.1", "id": "7423481761753515090", "ipCidrRange": "192.168.0.0/24", "kind": "compute#subnetwork", "logConfig": { "aggregationInterval": "INTERVAL_5_SEC", "enable": false, "flowSampling": 0.5, "metadata": "INCLUDE_ALL_METADATA" }, "name": "gke1-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "secondaryIpRanges": [ { "ipCidrRange": "192.168.1.0/24", "rangeName": "gke1-secondary-range-pod" }, { "ipCidrRange": "192.168.2.0/24", "rangeName": "gke1-secondary-range-svc" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west6": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.530-07:00", "fingerprint": "Ic4Y34BRjOE=", "gatewayAddress": "10.172.0.1", "id": "3567972882370315370", "ipCidrRange": "10.172.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west8": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.586-07:00", "fingerprint": "_MhtvVpnR5c=", "gatewayAddress": "10.198.0.1", "id": "5905962051052291178", "ipCidrRange": "10.198.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west9": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.638-07:00", "fingerprint": "0uz_7VhFjLE=", "gatewayAddress": "10.200.0.1", "id": "5697832252330263658", "ipCidrRange": "10.200.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.741-07:00", "fingerprint": "70g6IoCP0CM=", "gatewayAddress": "10.208.0.1", "id": "2381367997960340586", "ipCidrRange": "10.208.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.499-07:00", "fingerprint": "vNYpwgnkSCI=", "gatewayAddress": "10.162.0.1", "id": "5798419596128601194", "ipCidrRange": "10.162.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.493-07:00", "fingerprint": "7ik2BWFfN84=", "gatewayAddress": "10.188.0.1", "id": "711542983096845418", "ipCidrRange": "10.188.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.668-07:00", "fingerprint": "pqhad5TnzVc=", "gatewayAddress": "10.158.0.1", "id": "2301799042992620650", "ipCidrRange": "10.158.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.648-07:00", "fingerprint": "ea50MPZjruA=", "gatewayAddress": "10.194.0.1", "id": "6124576470534243434", "ipCidrRange": "10.194.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.382-07:00", "fingerprint": "pb4O-4ISjAE=", "gatewayAddress": "10.128.0.1", "id": "6250438653192488042", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.368-07:00", "fingerprint": "bvN-N8FS9U4=", "gatewayAddress": "10.142.0.1", "id": "1443866556678849642", "ipCidrRange": "10.142.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.486-07:00", "fingerprint": "jew6EZUeYrM=", "gatewayAddress": "10.150.0.1", "id": "5871230243962405994", "ipCidrRange": "10.150.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east5": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.504-07:00", "fingerprint": "KVZisxAl1CI=", "gatewayAddress": "10.202.0.1", "id": "4332627157280408682", "ipCidrRange": "10.202.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east7": { "subnetworks": [ { "creationTimestamp": "2022-10-11T09:13:19.272-07:00", "fingerprint": "BEZq6cSPkco=", "gatewayAddress": "10.196.0.1", "id": "7977046348344600816", "ipCidrRange": "10.196.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.435-07:00", "fingerprint": "1Se61ZXzpjY=", "gatewayAddress": "10.206.0.1", "id": "7154466601132672106", "ipCidrRange": "10.206.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.499-07:00", "fingerprint": "E0k7cQEp7_I=", "gatewayAddress": "10.138.0.1", "id": "5323136092791686250", "ipCidrRange": "10.138.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.549-07:00", "fingerprint": "-JD9bbh-QlA=", "gatewayAddress": "10.168.0.1", "id": "4458757238523741290", "ipCidrRange": "10.168.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.524-07:00", "fingerprint": "P01BE480Q2I=", "gatewayAddress": "10.180.0.1", "id": "1135562538472752234", "ipCidrRange": "10.180.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.521-07:00", "fingerprint": "2k-WBaR7JKQ=", "gatewayAddress": "10.182.0.1", "id": "7061406355024299114", "ipCidrRange": "10.182.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/subnetworks" } ================================================ FILE: test-data/gce1/json-dumps/compute-subnetworks-europe-west4.json ================================================ { "kind": "compute#subnetworkList", "id": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks", "items": [ { "kind": "compute#subnetwork", "id": "4774247690482065659", "creationTimestamp": "2022-03-30T02:08:36.021-07:00", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "ipCidrRange": "10.164.0.0/20", "gatewayAddress": "10.164.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "privateIpGoogleAccess": true, "secondaryIpRanges": [ { "rangeName": "gke-gke4-services-93befb7e", "ipCidrRange": "10.60.0.0/20" }, { "rangeName": "gke-gke4-pods-93befb7e", "ipCidrRange": "10.56.0.0/14" }, { "rangeName": "gke-autopilot-gke1-services-19977223", "ipCidrRange": "10.85.128.0/22" }, { "rangeName": "gke-autopilot-gke1-pods-19977223", "ipCidrRange": "10.85.0.0/17" }, { "rangeName": "gke-autopilot-gke2-pods-65d1ba15", "ipCidrRange": "10.60.128.0/17" }, { "rangeName": "gke-autopilot-gke2-services-65d1ba15", "ipCidrRange": "10.60.96.0/22" } ], "fingerprint": "-9hqGif0SQ0=", "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "stackType": "IPV4_ONLY" }, { "kind": "compute#subnetwork", "id": "1818761461517361320", "creationTimestamp": "2022-03-30T02:09:27.964-07:00", "name": "gke1-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "ipCidrRange": "192.168.0.0/24", "gatewayAddress": "192.168.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "privateIpGoogleAccess": false, "secondaryIpRanges": [ { "rangeName": "gke1-secondary-range-pod", "ipCidrRange": "192.168.1.0/24" }, { "rangeName": "gke1-secondary-range-svc", "ipCidrRange": "192.168.2.0/24" } ], "fingerprint": "Ir2p9uebpiE=", "enableFlowLogs": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "logConfig": { "enable": false }, "stackType": "IPV4_ONLY" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks" } ================================================ FILE: test-data/gce1/json-dumps/compute-templates.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/global/instanceTemplates", "items": [ { "creationTimestamp": "2022-04-26T08:21:35.891-07:00", "description": "", "id": "4047445761213182736", "kind": "compute#instanceTemplate", "name": "gke-gke1-default-pool-35923fbc", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-standard", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "machineType": "e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "kube-env", "value": "REDACTED" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "europe-west1-b" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "cluster-name", "value": "gke1" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke1-f36cf6dd-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "creationTimestamp": "2022-04-26T08:20:48.842-07:00", "description": "", "id": "7086722794918359871", "kind": "compute#instanceTemplate", "name": "mig-template", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskType": "pd-standard", "sourceImage": "projects/debian-cloud/global/images/family/debian-9" }, "interface": "SCSI", "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "machineType": "e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "networkInterfaces": [ { "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template" }, { "creationTimestamp": "2022-04-26T08:21:35.891-07:00", "description": "", "id": "4047445761213182736", "kind": "compute#instanceTemplate", "name": "gke-gke1-default-pool-671518f6", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-standard", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "machineType": "e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "kube-env", "value": "REDACTED" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "europe-west1-b" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "cluster-name", "value": "gke1" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke1-f36cf6dd-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6" } ], "kind": "compute#instanceTemplateList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates" } ================================================ FILE: test-data/gce1/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-gce1-aaaa/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-f", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones" } ================================================ FILE: test-data/gce1/json-dumps/healthChecks.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-gce1-aaaa/global/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "6570916794820924287", "creationTimestamp": "2023-11-22T17:40:32.481-08:00", "name": "http-basic-check", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/http-basic-check", "logConfig": { "enable": true } }, { "kind": "compute#healthCheck", "id": "2011808073814110499", "creationTimestamp": "2023-11-22T11:00:28.722-08:00", "name": "http-basic-check-2", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/http-basic-check-2" }, { "kind": "compute#healthCheck", "id": "4700445592381550883", "creationTimestamp": "2023-11-22T11:00:28.748-08:00", "name": "tcp-basic-check-1", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "TCP", "tcpHealthCheck": { "port": 80, "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/tcp-basic-check-1", "logConfig": { "enable": true } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/" } ================================================ FILE: test-data/gce1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12340001@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-12340001@container-engine-robot.iam.gserviceaccount.com" ], "role": "roles/container.serviceAgent" }, { "members": [ "serviceAccount:service-12340001@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:12340001-compute@developer.gserviceaccount.com", "serviceAccount:12340001@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12340001@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" } ], "etag": "BwXdkD1p/AI=", "version": 1 } ================================================ FILE: test-data/gce1/json-dumps/iam-roles-get.json ================================================ {"roles": []} ================================================ FILE: test-data/gce1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Compute Engine default service account", "email": "12340001-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce1-aaaa/serviceAccounts/12340001-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce1-aaaa", "uniqueId": "108672510563148525670" } ] } ================================================ FILE: test-data/gce1/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "methodName": "compute.instances.insert", "status": { "message": "ZONE_RESOURCE_POOL_EXHAUSTED" } }, "resource": { "labels": { "zone": "us-central1-a" } }, "severity": "ERROR" } ] } ================================================ FILE: test-data/gce1/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.zone" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_uptime_total_aggregate_mean", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "s" }, { "key": "value_uptime_total_aggregate_count", "valueType": "INT64", "metricKind": "GAUGE", "unit": "1" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "mig-7pvl" } ], "pointData": [ { "values": [ { "doubleValue": 70829 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70559 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "mig-4h21" } ], "pointData": [ { "values": [ { "doubleValue": 70829 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70559 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "gce2" } ], "pointData": [ { "values": [ { "doubleValue": 70889 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70619 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "gce1" } ], "pointData": [ { "values": [ { "doubleValue": 70889 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70619 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-35923fbc-k05c" } ], "pointData": [ { "values": [ { "doubleValue": 70829 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70559 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-35923fbc-fv50" } ], "pointData": [ { "values": [ { "doubleValue": 70770 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70500 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-35923fbc-c12f" } ], "pointData": [ { "values": [ { "doubleValue": 70829 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70559 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-35923fbc-2xxp" } ], "pointData": [ { "values": [ { "doubleValue": 70769 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70499 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] } ] } ================================================ FILE: test-data/gce1/json-dumps/project.json ================================================ { "name": "projects/12340001", "parent": "organizations/11112222", "projectId": "gcpdiag-gce1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - gce1", "createTime": "2022-04-26T15:18:57.559Z", "updateTime": "2022-04-26T15:18:59.029Z", "etag": "MQV1kuwMB6N2UKQqCiihhA==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gce1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340001/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" is supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" }, { "name": "projects/12340001/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340001" } ] } ================================================ FILE: test-data/gce1/mig.tf ================================================ /** * Copyright 2021 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. */ resource "google_compute_instance_template" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "mig-template" machine_type = "e2-micro" disk { source_image = "debian-cloud/debian-11" auto_delete = true boot = true } network_interface { network = "default" } } resource "google_compute_instance_group_manager" "mig" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "mig" base_instance_name = "mig" zone = "europe-west4-a" version { instance_template = google_compute_instance_template.default.id } target_size = 2 } ================================================ FILE: test-data/gce1/neg1.tf ================================================ resource "google_compute_network_endpoint" "default-endpoint" { project = google_project.project.project_id network_endpoint_group = google_compute_network_endpoint_group.neg1.name zone = "europe-west4-b" instance = google_compute_instance.neg-vm.name port = google_compute_network_endpoint_group.neg1.default_port ip_address = google_compute_instance.neg-vm.network_interface[0].network_ip } resource "google_compute_instance" "neg-vm" { project = google_project.project.project_id name = "neg-vm" machine_type = "e2-medium" zone = "europe-west4-b" desired_status = "RUNNING" network_interface { subnetwork_project = google_project.project.project_id subnetwork = "default" } boot_disk { initialize_params { image = data.google_compute_image.windows.self_link } } depends_on = [google_project_service.compute] } resource "google_compute_network_endpoint_group" "neg1" { project = google_project.project.project_id name = "neg1" network = "default" subnetwork = "default" default_port = "90" zone = "europe-west4-b" depends_on = [google_project_service.compute] } ================================================ FILE: test-data/gce1/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - gce1" project_id = "gcpdiag-gce1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "container" { project = google_project.project.project_id service = "container.googleapis.com" depends_on = [google_project_service.compute] } resource "google_compute_project_metadata_item" "serial_logging" { project = google_project.project.project_id depends_on = [google_project_service.compute] key = "serial-port-logging-enable" value = "true" } data "google_compute_default_service_account" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] } data "google_compute_image" "cos" { family = "cos-101-lts" project = "cos-cloud" } data "google_compute_image" "windows" { family = "windows-2019-core" project = "windows-cloud" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gce1/terraform ================================================ #!/bin/sh # terraform wrapper using docker USE_TTY="" CWD=$(pwd) [ -t 0 ] && USE_TTY="-it" exec docker run $USE_TTY \ --rm \ -u "$(id -u):$(id -g)" \ -e "USER=$(id -n -u)" \ -e "GROUP=$(id -n -g)" \ -e "HOME=$HOME" \ -e "LANG=$LANG" \ -e "SHELL=/bin/bash" \ -v "$CWD:$CWD" \ -v "$HOME/.config/gcloud:/home/.config/gcloud" \ -w "$CWD" \ mirror.gcr.io/hashicorp/terraform:light "$@" ================================================ FILE: test-data/gce1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/gce2/Makefile ================================================ PROJECT_ID := $(shell terraform output project_id) PROJECT_ID_SUFFIX := $(shell terraform output project_id_suffix) PROJECT_NR := $(shell terraform output project_nr) ORG_ID := $(shell terraform output org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner ZONE_1 = europe-west2-a FAKE_PROJECT_ID_SUFFIX = runbook FAKE_PROJECT_NR = 12345601 FAKE_ORG_ID = 11112222 COMPUTE_INSTANCES_MAXRESULTS=3 INSTANCE_NAME_GCE1=valid-linux-ssh INSTANCE_NAME_GCE2=faulty-linux-ssh INSTANCE_NAME_GCE3=valid-windows-ssh INSTANCE_NAME_GCE4=faulty-windows-ssh all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-disks-$(ZONE_1).json \ json-dumps/compute-disks-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-regions.json \ json-dumps/compute-zones.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/monitoring-query.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE1).json \ json-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE2).json \ json-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE3).json \ json-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE4).json \ include ../Makefile.inc define MONITORING_QUERY { \ "query": "fetch gce_instance \ | metric 'compute.googleapis.com/instance/cpu/utilization' \ | group_by 5m, [value_utilization_max: max(value.utilization)] \ | every 5m \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gce2/gce_faulty_ssh.tf ================================================ /** * Copyright 2023 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. */ resource "google_compute_instance" "faulty_linux_ssh" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "faulty-linux-ssh" machine_type = "e2-micro" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["faulty-ssh-instance", "gce-secured-instance-test-deny"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.debian.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } labels = { foo = "bar" } metadata_startup_script = <<-EOT #!/bin/bash # stop sshd systemctl stop ssh while true; do : # Do nothing, which consumes CPU cycles done EOT metadata = { enable-oslogin = false } } # Fault windows running ssh resource "google_compute_instance" "faulty_windows_ssh" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "faulty-windows-ssh" machine_type = "e2-standard-2" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["faulty-ssh-instance", "gce-secured-instance-test-deny"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.windows.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } labels = { foo = "bar" } metadata = { enable-oslogin = true } metadata_startup_script = <<-EOT #!/bin/bash shutdown -h now EOT } # firewall configuration used for connectivity testing resource "google_compute_firewall" "secured_instance_test_deny" { name = "gce-secured-instance-test-deny" network = "default" project = var.project_id priority = 900 deny { ports = ["22"] protocol = "tcp" } source_ranges = [ "0.0.0.0/0", # Block external access "35.235.240.0/20" # block IAP ] target_tags = google_compute_instance.faulty_linux_ssh.tags depends_on = [google_compute_instance.faulty_linux_ssh] } resource "google_service_account" "service_account" { account_id = "cannotssh" display_name = "Cannot SSH Service Account" project = var.project_id } resource "google_compute_project_metadata" "dummy_key" { project = var.project_id metadata = { ssh-keys = < role } project = var.project_id role = each.value member = "serviceAccount:${google_service_account.canssh_service_account.name}" depends_on = [google_service_account.canssh_service_account] } ================================================ FILE: test-data/gce2/json-dumps/compute-disks-europe-west1-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks", "items": [ { "kind": "compute#disk", "id": "7550338177783293118", "creationTimestamp": "2022-05-10T05:28:01.712-07:00", "name": "gke-gke1-default-pool-5665d797-62lh", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-62lh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:01.713-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-62lh" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7424433754121692350", "creationTimestamp": "2022-05-10T05:28:02.097-07:00", "name": "gke-gke1-default-pool-5665d797-hz12", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-hz12", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:02.097-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-hz12" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "8594043929682764990", "creationTimestamp": "2022-05-10T05:28:02.179-07:00", "name": "gke-gke1-default-pool-5665d797-jd80", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-jd80", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:02.179-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-jd80" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7088717128623711421", "creationTimestamp": "2022-05-10T05:28:03.186-07:00", "name": "gke-gke1-default-pool-5665d797-z9kh", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-z9kh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:03.187-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-z9kh" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks" } ================================================ FILE: test-data/gce2/json-dumps/compute-disks-europe-west2-a.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks", "items": [ { "kind": "compute#disk", "id": "1020012628094441724", "creationTimestamp": "2023-11-16T20:03:33.349-08:00", "name": "faulty-linux-ssh", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-linux-ssh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231115", "sourceImageId": "3081125733607199085", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "lastAttachTimestamp": "2023-11-16T20:03:33.350-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" }, { "kind": "compute#disk", "id": "5193645208196831705", "creationTimestamp": "2023-11-16T20:08:24.574-08:00", "name": "faulty-windows-ssh", "sizeGb": "32", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-windows-ssh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20231115", "sourceImageId": "4704563576960484445", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "lastAttachTimestamp": "2023-11-16T20:08:24.575-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3389558045860892917", "1000226" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" }, { "kind": "compute#disk", "id": "7702462607973374205", "creationTimestamp": "2023-11-16T20:03:32.812-08:00", "name": "valid-linux-ssh", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/valid-linux-ssh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231115", "sourceImageId": "3081125733607199085", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "lastAttachTimestamp": "2023-11-16T20:03:32.812-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" }, { "kind": "compute#disk", "id": "5223308949582469373", "creationTimestamp": "2023-11-16T20:03:32.839-08:00", "name": "valid-windows-ssh", "sizeGb": "32", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/valid-windows-ssh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20231115", "sourceImageId": "4704563576960484445", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "lastAttachTimestamp": "2023-11-16T20:03:32.839-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-windows-ssh" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3389558045860892917", "1000226" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks" } ================================================ FILE: test-data/gce2/json-dumps/compute-disks-europe-west2-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/disks" } ================================================ FILE: test-data/gce2/json-dumps/compute-disks-europe-west4-a.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks", "items": [ { "kind": "compute#disk", "id": "4897755586815845618", "creationTimestamp": "2022-05-10T05:27:10.646-07:00", "name": "gce1", "sizeGb": "32", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "sourceImage": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20220414", "sourceImageId": "3529112155699095586", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "lastAttachTimestamp": "2022-05-10T05:27:10.647-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3389558045860892917", "1000226" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7436782321968604403", "creationTimestamp": "2022-05-10T05:27:09.694-07:00", "name": "gce2", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2", "sourceImage": "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/images/cos-85-13310-1453-5", "sourceImageId": "1276396551904338204", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "UEFI_COMPATIBLE" } ], "lastAttachTimestamp": "2022-05-10T05:27:09.695-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "6880041984096540132", "1001010", "166739712233658766" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "2534143966095860953", "creationTimestamp": "2022-05-10T05:27:34.871-07:00", "name": "mig-926f", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-926f", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406", "sourceImageId": "1994093915008945255", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "lastAttachTimestamp": "2022-05-10T05:27:34.872-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-926f" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "3703127063546815705", "creationTimestamp": "2022-05-10T05:27:35.177-07:00", "name": "mig-hmnt", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-hmnt", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406", "sourceImageId": "1994093915008945255", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "lastAttachTimestamp": "2022-05-10T05:27:35.178-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-hmnt" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "4944833045469848960", "creationTimestamp": "2022-05-10T05:32:47.994-07:00", "name": "unattached-disk", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/unattached-disk", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20200805", "sourceImageId": "6709658075886210235", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-ssd", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "labels": { "environment": "dev" }, "labelFingerprint": "a6HI36FuYIQ=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks" } ================================================ FILE: test-data/gce2/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "6654944905093765942", "creationTimestamp": "2023-11-03T14:27:53.667-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "4341098039640382262", "creationTimestamp": "2023-11-03T14:27:53.660-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "3384956594912865471", "creationTimestamp": "2023-11-05T14:08:16.385-08:00", "name": "gce-secured-instance-test-allow", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 900, "sourceRanges": [ "0.0.0.0/0", "35.235.240.0/20" ], "targetTags": [ "faulty-ssh-instance" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/gce-secured-instance-test-allow" }, { "kind": "compute#firewall", "id": "2430705094709795638", "creationTimestamp": "2023-11-03T14:27:53.657-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "4126568254316010294", "creationTimestamp": "2023-11-03T14:27:53.664-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "8244892118186044576", "creationTimestamp": "2023-11-05T14:08:15.743-08:00", "name": "gce-secured-instance-test-deny", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 900, "sourceRanges": [ "0.0.0.0/0", "35.235.240.0/20" ], "targetTags": [ "faulty-ssh-instance" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/gce-secured-instance-test-deny" } ] } ================================================ FILE: test-data/gce2/json-dumps/compute-igs-europe-west1-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups", "items": [ { "kind": "compute#instanceGroup", "id": "4752839275668943076", "creationTimestamp": "2022-04-26T08:21:47.107-07:00", "name": "gke-gke1-default-pool-35923fbc-grp", "description": "This instance group is controlled by Instance Group Manager 'gke-gke1-default-pool-35923fbc-grp'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp", "size": 4, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups" } ================================================ FILE: test-data/gce2/json-dumps/compute-igs-europe-west2-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups" } ================================================ FILE: test-data/gce2/json-dumps/compute-igs-europe-west4-a.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups", "items": [ { "kind": "compute#instanceGroup", "id": "3671191198561055498", "creationTimestamp": "2022-04-26T08:21:09.998-07:00", "name": "instance-group-1", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "http", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "bPhGeNqJuxo=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "2978499701990863624", "creationTimestamp": "2022-04-26T08:21:11.396-07:00", "name": "instance-group-2", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "https", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "OMWWjJuNHl0=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "4528539620862178056", "creationTimestamp": "2022-04-26T08:21:11.080-07:00", "name": "mig", "description": "This instance group is controlled by Instance Group Manager 'mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig", "size": 2, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups" } ================================================ FILE: test-data/gce2/json-dumps/compute-instances-europe-west1-b-2.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances", "items": [ { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:54.798-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-k05c", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3147904666822881533", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:01.245-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-k05c", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.79.110.136", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-k05c", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances" } ================================================ FILE: test-data/gce2/json-dumps/compute-instances-europe-west1-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances", "items": [ { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:56.296-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-2xxp", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1470007467084984573", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:05.407-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-2xxp", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.78.171.82", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-2xxp", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:55.180-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-c12f", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "183710301471224061", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:02.051-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-c12f", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.76.115.182", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-c12f", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:56.318-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-fv50", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "148164482114629885", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:05.433-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-fv50", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.205.62.74", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-fv50", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" } ], "kind": "compute#instanceList", "nextPageToken": "ClgI-fiQw4y09wI6TQoCGAMKAyC1EAoCGAIKByDg3fmMvREKAhgHCiUqI2drZS1na2UxLWRlZmF1bHQtcG9vbC0zNTkyM2ZiYy1mdjUwCgog_eGW5vvZmIcC", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances" } ================================================ FILE: test-data/gce2/json-dumps/compute-instances-europe-west2-a.json ================================================ { "id": "projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-11-16T20:03:33.344-08:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-linux-ssh", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3256822971556911357", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2023-11-16T20:03:39.756-08:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "enable-oslogin", "value": "false" }, { "key": "startup-script", "value": "#!/bin/bash\n# stop sshd\nsystemctl stop ssh\n\nwhile true; do\n : # Do nothing, which consumes CPU cycles\ndone\n" } ], "kind": "compute#metadata" }, "name": "faulty-linux-ssh", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "networkIP": "10.154.0.14", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh", "serviceAccounts": [ { "email": "12345601-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "faulty-ssh-instance", "gce-secured-instance-test-deny" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a" }, { "canIpForward": false, "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2023-11-16T20:08:24.568-08:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-windows-ssh", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "8620994183730780633", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2023-11-16T20:08:30.833-08:00", "lastStopTimestamp": "2023-11-16T20:15:59.465-08:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "enable-oslogin", "value": "true" }, { "key": "startup-script", "value": "#!/bin/bash\n\nshutdown -h now\n" } ], "kind": "compute#metadata" }, "name": "faulty-windows-ssh", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "networkIP": "10.154.0.16", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh", "serviceAccounts": [ { "email": "12345601-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED", "items": [ "faulty-ssh-instance", "gce-secured-instance-test-deny" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-11-16T20:03:32.807-08:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/valid-linux-ssh", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4683873813257738493", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2023-11-16T20:03:38.817-08:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "enable-oslogin", "value": "true" }, { "key": "startup-script", "value": "#!/bin/bash\n\ncurl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh\nsudo bash add-google-cloud-ops-agent-repo.sh --also-install\n" } ], "kind": "compute#metadata" }, "name": "valid-linux-ssh", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "networkIP": "10.154.0.12", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh", "serviceAccounts": [ { "email": "12345601-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "valid-ssh-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a" } ], "kind": "compute#instanceList", "nextPageToken": "CkQIiOr-rJjKggM6OQoCGAMKAyDyEQoCGAIKByD_srD9xQkKAhgHChEqD3ZhbGlkLWxpbnV4LXNzaAoKIP2x7d-rzZ2AQQ==", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances" } ================================================ FILE: test-data/gce2/json-dumps/compute-instances-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/instances" } ================================================ FILE: test-data/gce2/json-dumps/compute-instances-europe-west4-a-2.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances", "items": [ { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:18.746-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-7pvl", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4022531639476597505", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:24.395-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig" } ], "kind": "compute#metadata" }, "name": "mig-7pvl", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-7pvl", "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances" } ================================================ FILE: test-data/gce2/json-dumps/compute-instances-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:51.863-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101012", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2022-04-26T08:20:58.538-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "gce1", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:51.863-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101013", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2022-04-26T08:20:58.538-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "windows-test", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.78.171.82", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/windows-test", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:53.544-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101011", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:01.453-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "serial-port-logging-enable", "value": "false" } ], "kind": "compute#metadata" }, "name": "gce2", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:19.061-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-4h21", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101014", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:25.221-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig" } ], "kind": "compute#metadata" }, "name": "mig-4h21", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-4h21", "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" } ], "kind": "compute#instanceList", "nextPageToken": "Cj0It-i3w4y09wI6MgoCGAMKAyCmEgoCGAIKByDg3fmMvREKAhgHCgoqCG1pZy00aDIxCgoggeaW5uuu8YE7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances" } ================================================ FILE: test-data/gce2/json-dumps/compute-licenses.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/global/licenses", "items": [ { "kind": "compute#license", "name": "windows-10-enterprise-byol", "chargesUseFee": false, "id": "5769580143916819783", "licenseCode": "2089835370828997959", "creationTimestamp": "2018-11-07T00:00:40.302-08:00", "description": "Windows 10 Enterprise BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-enterprise-byol" }, { "kind": "compute#license", "name": "windows-10-x64-byol", "chargesUseFee": false, "id": "5572284649276248982", "licenseCode": "8727879116868096918", "creationTimestamp": "2019-11-19T19:05:29.677-08:00", "description": "Windows 10 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-x64-byol" }, { "kind": "compute#license", "name": "windows-10-x86-byol", "chargesUseFee": false, "id": "1279231564365501289", "licenseCode": "3732182829874353001", "creationTimestamp": "2019-11-19T19:05:42.089-08:00", "description": "Windows 10 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-x86-byol" }, { "kind": "compute#license", "name": "windows-11-x64-byol", "chargesUseFee": false, "id": "3804262737275203477", "licenseCode": "5378533650449772437", "creationTimestamp": "2021-08-25T11:52:42.711-07:00", "description": "Windows 11 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-11-x64-byol" }, { "kind": "compute#license", "name": "windows-7-enterprise-byol", "chargesUseFee": false, "id": "2913052624331679126", "licenseCode": "752112173778412950", "creationTimestamp": "2018-11-06T23:59:53.727-08:00", "description": "Windows 7 Enterprise BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-enterprise-byol" }, { "kind": "compute#license", "name": "windows-7-x64-byol", "chargesUseFee": false, "id": "6501903266496451262", "licenseCode": "5016528181960184510", "creationTimestamp": "2019-11-19T19:00:33.621-08:00", "description": "Windows 7 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-x64-byol" }, { "kind": "compute#license", "name": "windows-7-x86-byol", "chargesUseFee": false, "id": "4058550282231550561", "licenseCode": "622639362407469665", "creationTimestamp": "2019-11-19T19:01:34.532-08:00", "description": "Windows 7 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-x86-byol" }, { "kind": "compute#license", "name": "windows-8-x64-byol", "chargesUseFee": false, "id": "7710168160606425653", "licenseCode": "7036859048284197429", "creationTimestamp": "2019-11-19T19:02:50.559-08:00", "description": "Windows 8.x 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-8-x64-byol" }, { "kind": "compute#license", "name": "windows-8-x86-byol", "chargesUseFee": false, "id": "2601192579332117498", "licenseCode": "3720924436396315642", "creationTimestamp": "2019-11-19T19:03:49.785-08:00", "description": "Windows 8.x 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-8-x86-byol" }, { "kind": "compute#license", "name": "windows-81-x64-byol", "chargesUseFee": false, "id": "5692263345196614391", "licenseCode": "5366577783322166007", "creationTimestamp": "2019-04-28T21:22:48.487-07:00", "description": "Windows 8.1 Enterprise x64 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-81-x64-byol" }, { "kind": "compute#license", "name": "windows-ent", "chargesUseFee": false, "id": "1257656105385958662", "licenseCode": "2967169933779246342", "creationTimestamp": "2019-09-25T19:35:21.078-07:00", "description": "Windows Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-ent" }, { "kind": "compute#license", "name": "windows-for-containers", "chargesUseFee": false, "id": "7423076496314791885", "licenseCode": "2643967004807329741", "creationTimestamp": "2017-09-25T11:21:22.120-07:00", "description": "Windows container host", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-for-containers" }, { "kind": "compute#license", "name": "windows-server-1709-dc", "chargesUseFee": false, "id": "2638722841150638382", "licenseCode": "5194306116883728686", "creationTimestamp": "2017-10-03T13:49:05.759-07:00", "description": "Windows Server 1709 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1709-dc" }, { "kind": "compute#license", "name": "windows-server-1803-dc", "chargesUseFee": false, "id": "991969583094905153", "licenseCode": "6476660300603799873", "creationTimestamp": "2018-05-07T10:06:54.761-07:00", "description": "Windows Server version 1803 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1803-dc" }, { "kind": "compute#license", "name": "windows-server-1809-dc", "chargesUseFee": false, "id": "2197036663612051569", "licenseCode": "8597854123084943473", "creationTimestamp": "2018-10-04T17:21:50.249-07:00", "description": "Windows Server version 1809 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1809-dc" }, { "kind": "compute#license", "name": "windows-server-1903-dc", "chargesUseFee": false, "id": "783754911489890105", "licenseCode": "5980382382909462329", "creationTimestamp": "2019-06-10T21:11:02.733-07:00", "description": "Windows Server version 1903 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1903-dc" }, { "kind": "compute#license", "name": "windows-server-1909-dc", "chargesUseFee": false, "id": "1504783339576403625", "licenseCode": "1413572828508235433", "creationTimestamp": "2019-11-14T01:03:02.101-08:00", "description": "Windows Server version 1909 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1909-dc" }, { "kind": "compute#license", "name": "windows-server-2000", "chargesUseFee": false, "id": "77415431498093015", "licenseCode": "5507061839551517143", "creationTimestamp": "2021-03-02T09:00:40.478-08:00", "description": "Windows Server 2000", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2000" }, { "kind": "compute#license", "name": "windows-server-2003", "chargesUseFee": false, "id": "8972483680585271920", "licenseCode": "5030842449011296880", "creationTimestamp": "2017-04-10T14:09:51.924-07:00", "description": "Windows Server 2003", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2003" }, { "kind": "compute#license", "name": "windows-server-2004-dc", "chargesUseFee": false, "id": "6915731882356532357", "licenseCode": "6710259852346942597", "creationTimestamp": "2020-07-23T11:43:54.418-07:00", "description": "Windows Server version 2004 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2004-dc" }, { "kind": "compute#license", "name": "windows-server-2008", "chargesUseFee": false, "id": "2740560588278180852", "licenseCode": "1656378918552316916", "creationTimestamp": "2022-11-09T13:01:15.565-08:00", "description": "Windows Server 2008 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008" }, { "kind": "compute#license", "name": "windows-server-2008-dc", "chargesUseFee": true, "id": "5520530534018080146", "licenseCode": "1000502", "creationTimestamp": "2015-06-03T17:05:28.000-07:00", "description": "Windows Server 2008 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-dc" }, { "kind": "compute#license", "name": "windows-server-2008-r2", "chargesUseFee": false, "id": "4293107698603502582", "licenseCode": "3284763237085719542", "creationTimestamp": "2022-11-09T13:01:13.386-08:00", "description": "Windows Server 2008 R2 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2" }, { "kind": "compute#license", "name": "windows-server-2008-r2-byol", "chargesUseFee": false, "id": "6485631155857676024", "licenseCode": "4551215591257167608", "creationTimestamp": "2018-10-05T15:39:19.139-07:00", "description": "Windows Server 2008R2 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2-byol" }, { "kind": "compute#license", "name": "windows-server-2008-r2-dc", "chargesUseFee": true, "id": "6080198139471122848", "licenseCode": "1000000", "creationTimestamp": "2013-08-19T17:17:57.000-07:00", "description": "Windows Server 2008 R2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2-dc" }, { "kind": "compute#license", "name": "windows-server-2012", "chargesUseFee": false, "id": "4571663854194502649", "licenseCode": "7695108898142923768", "creationTimestamp": "2022-11-09T13:01:10.861-08:00", "description": "Windows Server 2012 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012" }, { "kind": "compute#license", "name": "windows-server-2012-byol", "chargesUseFee": false, "id": "2247304514167789851", "licenseCode": "5559842820536817947", "creationTimestamp": "2018-10-05T15:38:44.367-07:00", "description": "Windows Server 2012 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-byol" }, { "kind": "compute#license", "name": "windows-server-2012-dc", "chargesUseFee": true, "id": "6102042211374830963", "licenseCode": "1000015", "creationTimestamp": "2015-01-05T16:58:27.000-08:00", "description": "Windows Server 2012 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-dc" }, { "kind": "compute#license", "name": "windows-server-2012-r2", "chargesUseFee": false, "id": "975226805105568736", "licenseCode": "7798417859637521376", "creationTimestamp": "2022-11-09T13:01:03.469-08:00", "description": "Windows Server 2012 R2 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2" }, { "kind": "compute#license", "name": "windows-server-2012-r2-byol", "chargesUseFee": false, "id": "11586629996795623", "licenseCode": "6738952703547430631", "creationTimestamp": "2018-10-05T15:39:04.149-07:00", "description": "Windows Server 2012R2 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-byol" }, { "kind": "compute#license", "name": "windows-server-2012-r2-dc", "chargesUseFee": true, "id": "6102042209776448355", "licenseCode": "1000017", "creationTimestamp": "2015-01-05T16:58:27.000-08:00", "description": "Windows Server 2012 R2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-dc" }, { "kind": "compute#license", "name": "windows-server-2012-r2-dc-in-place-upgrade", "chargesUseFee": false, "id": "1687636345185865342", "licenseCode": "7123010349826543230", "creationTimestamp": "2020-03-24T09:08:49.417-07:00", "description": "Windows Server 2008 R2 to 2012 R2 in place upgrade", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2016", "chargesUseFee": false, "id": "2566166048269249507", "licenseCode": "4819555115818134498", "creationTimestamp": "2022-11-09T13:01:01.077-08:00", "description": "Windows Server 2016 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016" }, { "kind": "compute#license", "name": "windows-server-2016-byol", "chargesUseFee": false, "id": "6580557195888974094", "licenseCode": "4322823184804632846", "creationTimestamp": "2018-10-05T15:38:26.021-07:00", "description": "Windows Server 2016 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-byol" }, { "kind": "compute#license", "name": "windows-server-2016-dc", "chargesUseFee": true, "id": "2483536683413682772", "licenseCode": "1000213", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "Windows Server 2016 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-dc" }, { "kind": "compute#license", "name": "windows-server-2016-dc-in-place-upgrade", "chargesUseFee": false, "id": "7616085184958426941", "licenseCode": "5199320590876405565", "creationTimestamp": "2022-03-04T09:52:18.982-08:00", "description": "in-place upgraded to Windows Server 2016", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2016-nano", "chargesUseFee": true, "id": "2282594357842688596", "licenseCode": "1000214", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "Windows Server 2016 Nano", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-nano" }, { "kind": "compute#license", "name": "windows-server-2019", "chargesUseFee": false, "id": "3525541779464104933", "licenseCode": "4874454843789519845", "creationTimestamp": "2022-11-09T13:00:58.674-08:00", "description": "Windows Server 2019 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019" }, { "kind": "compute#license", "name": "windows-server-2019-byol", "chargesUseFee": false, "id": "1090214026507846099", "licenseCode": "6532438499690676691", "creationTimestamp": "2019-09-25T12:25:48.522-07:00", "description": "Windows Server 2019 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-byol" }, { "kind": "compute#license", "name": "windows-server-2019-dc", "chargesUseFee": false, "id": "5993475225685790965", "licenseCode": "3389558045860892917", "creationTimestamp": "2018-10-04T17:19:38.568-07:00", "description": "Windows Server 2019 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-dc" }, { "kind": "compute#license", "name": "windows-server-2019-dc-in-place-upgrade", "chargesUseFee": false, "id": "7388112379630840967", "licenseCode": "3156934045285215367", "creationTimestamp": "2022-03-04T09:54:48.827-08:00", "description": "in-place upgraded to Windows Server 2019", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2022", "chargesUseFee": false, "id": "8141439404167244305", "licenseCode": "6107784707477449232", "creationTimestamp": "2022-11-09T13:00:46.975-08:00", "description": "Windows Server 2022 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022" }, { "kind": "compute#license", "name": "windows-server-2022-byol", "chargesUseFee": false, "id": "2150336909657452508", "licenseCode": "2808834792899686364", "creationTimestamp": "2021-08-25T11:51:31.527-07:00", "description": "Windows Server 2022 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-byol" }, { "kind": "compute#license", "name": "windows-server-2022-dc", "chargesUseFee": false, "id": "2525168283357630087", "licenseCode": "4079807029871201927", "creationTimestamp": "2021-09-02T08:40:24.070-07:00", "description": "Windows Server 2022 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-dc" }, { "kind": "compute#license", "name": "windows-server-2022-dc-in-place-upgrade", "chargesUseFee": false, "id": "7118639573064740016", "licenseCode": "4670175393034005680", "creationTimestamp": "2022-03-04T09:54:39.255-08:00", "description": "in-place upgraded to Windows Server 2022", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-20h2-dc", "chargesUseFee": false, "id": "2209136415345591070", "licenseCode": "8578754948912497438", "creationTimestamp": "2020-11-02T13:45:21.528-08:00", "description": "Windows Server version 20H2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-20h2-dc" }, { "kind": "compute#license", "name": "windows-server-21h1-dc", "chargesUseFee": false, "id": "8661389914554199433", "licenseCode": "7248135684629163401", "creationTimestamp": "2021-04-29T08:40:22.527-07:00", "description": "Windows Server version 21h1 Datacenter Edition", "transferable": true, "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-21h1-dc" }, { "kind": "compute#license", "name": "windows-server-core", "chargesUseFee": true, "id": "7184832379764048457", "licenseCode": "1000226", "creationTimestamp": "2016-11-07T13:21:29.000-08:00", "description": "Windows Server Core", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-core" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses" } ================================================ FILE: test-data/gce2/json-dumps/compute-migs-europe-west1-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "1906946679224250602", "creationTimestamp": "2022-04-26T08:21:41.088-07:00", "name": "gke-gke1-default-pool-35923fbc-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc", "targetSize": { "calculated": 4 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp", "baseInstanceName": "gke-gke1-default-pool-35923fbc", "fingerprint": "cFBmeZR_JvQ=", "currentActions": { "none": 4, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 4, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce2/json-dumps/compute-migs-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroupManagers", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce2/json-dumps/compute-migs-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "7183453391228875571", "creationTimestamp": "2022-04-26T08:21:00.715-07:00", "name": "mig", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig", "baseInstanceName": "mig", "fingerprint": "lss-DXagYSg=", "currentActions": { "none": 2, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 2, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce2/json-dumps/compute-network-default.json ================================================ { "autoCreateSubnetworks": true, "creationTimestamp": "2023-11-03T14:27:06.884-07:00", "description": "Default network for the project", "id": "4415164866624019269", "kind": "compute#network", "name": "default", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "routingConfig": { "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/4415164866624019269", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/africa-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12/subnetworks/default" ] } ================================================ FILE: test-data/gce2/json-dumps/compute-network-routes.json ================================================ { "kind": "compute#routeList", "id": "projects/gcpdiag-gce1-aaaa/global/routes", "items": [ { "kind": "compute#route", "id": "2670539294019165993", "creationTimestamp": "2023-03-15T03:45:27.008-07:00", "name": "default", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "destRange": "0.0.0.0/0", "priority": 1, "nextHopGateway": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/gateways/default-internet-gateway", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/default" }, { "kind": "compute#route", "id": "2178241415220915600", "creationTimestamp": "2023-02-09T03:05:35.107-08:00", "name": "peering-route-299fcb697f2532b0", "description": "Auto generated route via peering [peering-r544dd974f1bc5396-tp-default].", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "destRange": "192.168.0.0/26", "priority": 0, "nextHopPeering": "peering-r544dd974f1bc5396-tp-default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/peering-route-299fcb697f2532b0" }, { "kind": "compute#route", "id": "8223547831511088095", "creationTimestamp": "2023-03-10T06:56:48.979-08:00", "name": "real-allow-kms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "tags": [ "windows" ], "destRange": "35.190.247.13/32", "priority": 1, "nextHopGateway": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/gateways/default-internet-gateway", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/real-allow-kms" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes" } ================================================ FILE: test-data/gce2/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "HTt6ps4-I3s=", "items": [ { "key": "ssh-keys", "value": " foo:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT foo\n" } ], "kind": "compute#metadata" }, "creationTimestamp": "2023-11-03T14:26:59.007-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12345601-compute@developer.gserviceaccount.com", "id": "7025536248423439181", "kind": "compute#project", "name": "gcpdiag-gce-faultyssh-runbook", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 6 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 0 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 1000, "metric": "HEALTH_CHECKS", "usage": 0 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 0 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 1 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 0 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES", "usage": 0 }, { "limit": 750, "metric": "GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook", "vmDnsSetting": "GLOBAL_DEFAULT", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/gce2/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-gce-faultyssh-runbook/regions", "items": [ { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3", "supportsPzs": true }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1", "supportsPzs": true }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10", "description": "europe-west10", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10", "supportsPzs": true }, { "kind": "compute#region", "id": "1570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12", "description": "europe-west12", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12", "supportsPzs": true }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 84 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 4 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 3 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6", "supportsPzs": false }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8", "supportsPzs": false }, { "kind": "compute#region", "id": "1520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9", "description": "europe-west9", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9", "supportsPzs": true }, { "kind": "compute#region", "id": "1580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1", "description": "me-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2", "description": "me-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1", "description": "me-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1", "supportsPzs": true }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5", "supportsPzs": false }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions" } ================================================ FILE: test-data/gce2/json-dumps/compute-serial-port-output-1010101010.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE. Up 20.49 seconds", "start": "0", "next": "63414", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput" } ================================================ FILE: test-data/gce2/json-dumps/compute-serial-port-output-1010101011.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE. Up 20.49 seconds", "start": "0", "next": "63414", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput" } ================================================ FILE: test-data/gce2/json-dumps/compute-serial-port-output-faulty-linux-ssh.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n\r\n\u001b[0m\u001b[30m\u001b[47mWelcome to GRUB!\n\r\n\r\u001b[0m\u001b[37m\u001b[40m\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m\u001b[H\u001b[J\u001b[1;1H\u001b[H\u001b[J\u001b[1;1H\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\n\r\n\r\n\r\n\rLoading Linux 5.10.0-26-cloud-amd64 ...Loading Linux 5.10.0-26-cloud-amd64 ...\n\r\n\rLoading initial ramdisk ...Loading initial ramdisk ...\n\r\n\rerror: no suitable video mode found.\n\rerror: no suitable video mode found.\n\rBooting in blind modeBooting in blind mode\n\r\n\r[ 0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\r\n[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.000000] BIOS-provided physical RAM map:\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\r\n[ 0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\r\n[ 0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\r\n[ 0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\r\n[ 0.000000] printk: bootconsole [earlyser0] enabled\r\n[ 0.000000] NX (Execute Disable) protection: active\r\n[ 0.000000] efi: EFI v2.70 by EDK II\r\n[ 0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \r\n[ 0.000000] secureboot: Secure boot disabled\r\n[ 0.000000] SMBIOS 2.4 present.\r\n[ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\r\n[ 0.000000] Hypervisor detected: KVM\r\n[ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\n[ 0.000000] kvm-clock: cpu 0, msr 11601001, primary cpu clock\r\n[ 0.000000] kvm-clock: using sched offset of 6574541159 cycles\r\n[ 0.000750] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\n[ 0.003137] tsc: Detected 2200.170 MHz processor\r\n[ 0.003944] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\r\n[ 0.004756] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nMemory KASLR using RDRAND RDTSC...\r\n[ 0.006413] Using GB pages for direct mapping\r\n[ 0.007451] RAMDISK: [mem 0x2327f000-0x24000fff]\r\n[ 0.008104] ACPI: Early table checksum verification disabled\r\n[ 0.008840] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\r\n[ 0.009613] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\n[ 0.010705] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\n[ 0.011795] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\n[ 0.013148] ACPI: FACS 0x00000000261F2000 000040\r\n[ 0.013789] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\n[ 0.015074] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\n[ 0.016308] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\n[ 0.017416] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\n[ 0.018848] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\n[ 0.019981] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\n[ 0.021071] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\r\n[ 0.021968] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\r\n[ 0.022868] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\r\n[ 0.024195] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\r\n[ 0.025096] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\r\n[ 0.026077] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\r\n[ 0.026976] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\r\n[ 0.028016] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\r\n[ 0.028910] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\r\n[ 0.029920] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\n[ 0.030516] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\n[ 0.031283] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\r\n[ 0.032201] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\u003e [mem 0x00000000-0x265dffff]\r\n[ 0.034082] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\r\n[ 0.035210] Zone ranges:\r\n[ 0.035556] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\n[ 0.036346] DMA32 [mem 0x0000000001000000-0x00000000265dffff]\r\n[ 0.037132] Normal empty\r\n[ 0.037500] Device empty\r\n[ 0.037865] Movable zone start for each node\r\n[ 0.038411] Early memory node ranges\r\n[ 0.038866] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\n[ 0.039666] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\n[ 0.040501] node 0: [mem 0x0000000000100000-0x0000000025eecfff]\r\n[ 0.041319] node 0: [mem 0x00000000261ff000-0x00000000265dffff]\r\n[ 0.042118] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\r\n[ 0.043516] On node 0, zone DMA: 1 pages in unavailable ranges\r\n[ 0.043518] On node 0, zone DMA: 11 pages in unavailable ranges\r\n[ 0.044348] On node 0, zone DMA: 104 pages in unavailable ranges\r\n[ 0.046817] On node 0, zone DMA32: 786 pages in unavailable ranges\r\n[ 0.047679] On node 0, zone DMA32: 6688 pages in unavailable ranges\r\n[ 0.048980] ACPI: PM-Timer IO Port: 0xb008\r\n[ 0.050442] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\n[ 0.051354] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\n[ 0.052270] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\n[ 0.053112] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\n[ 0.054025] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\n[ 0.054888] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\n[ 0.055764] Using ACPI (MADT) for SMP configuration information\r\n[ 0.056581] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\r\n[ 0.057278] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\n[ 0.058289] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\n[ 0.059254] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\n[ 0.060218] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\n[ 0.061186] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\r\n[ 0.062153] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\r\n[ 0.063119] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\r\n[ 0.064086] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\r\n[ 0.065051] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\r\n[ 0.066343] [mem 0x26600000-0xffffffff] available for PCI devices\r\n[ 0.067140] Booting paravirtualized kernel on KVM\r\n[ 0.067740] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\n[ 0.073455] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\r\n[ 0.075118] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\r\n[ 0.076074] kvm-guest: PV spinlocks disabled, single CPU\r\n[ 0.076805] Built 1 zonelists, mobility grouping on. Total pages: 150673\r\n[ 0.077803] Policy zone: DMA32\r\n[ 0.078192] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.080817] DMAR: IOMMU disabled\r\n[ 0.081474] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\n[ 0.082690] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\r\n[ 0.083743] mem auto-init: stack:off, heap alloc:on, heap free:off\r\n[ 0.087100] Memory: 233576K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\r\n[ 0.089122] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\r\n[ 0.090012] Kernel/User page tables isolation: enabled\r\nPoking KASLR using RDRAND RDTSC...\r\n[ 0.091151] ftrace: allocating 33918 entries in 133 pages\r\n[ 0.111503] ftrace: allocated 133 pages with 3 groups\r\n[ 0.112765] rcu: Hierarchical RCU implementation.\r\n[ 0.113378] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\r\n[ 0.114278] \tRude variant of Tasks RCU enabled.\r\n[ 0.114855] \tTracing variant of Tasks RCU enabled.\r\n[ 0.115469] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\n[ 0.116433] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\r\n[ 0.121697] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\r\n[ 0.122810] random: crng init done\r\n[ 0.123274] Console: colour dummy device 80x25\r\n[ 0.124053] printk: console [tty0] enabled\r\n[ 0.124835] printk: console [ttyS0] enabled\r\n[ 0.124835] printk: console [ttyS0] enabled\r\n[ 0.126039] printk: bootconsole [earlyser0] disabled\r\n[ 0.126039] printk: bootconsole [earlyser0] disabled\r\n[ 0.127441] ACPI: Core revision 20200925\r\n[ 0.128098] APIC: Switch to symmetric I/O mode setup\r\n[ 0.129244] x2apic enabled\r\n[ 0.131960] Switched APIC routing to physical x2apic.\r\n[ 0.136632] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\n[ 0.137712] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\r\n[ 0.139157] Calibrating delay loop (skipped) preset value.. 4400.34 BogoMIPS (lpj=8800680)\r\n[ 0.143263] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\n[ 0.144056] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\n[ 0.144991] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\n[ 0.146142] Spectre V2 : Mitigation: IBRS\r\n[ 0.146695] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\n[ 0.147156] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\n[ 0.148095] RETBleed: Mitigation: IBRS\r\n[ 0.148658] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\n[ 0.149882] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\n[ 0.151163] MDS: Mitigation: Clear CPU buffers\r\n[ 0.151804] TAA: Mitigation: Clear CPU buffers\r\n[ 0.152445] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\n[ 0.153624] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\n[ 0.155158] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\n[ 0.156050] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\n[ 0.156905] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\n[ 0.157851] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\n[ 0.177428] Freeing SMP alternatives memory: 32K\r\n[ 0.179890] pid_max: default: 32768 minimum: 301\r\n[ 0.188030] LSM: Security Framework initializing\r\n[ 0.188748] Yama: disabled by default; enable with sysctl kernel.yama.*\r\n[ 0.189713] AppArmor: AppArmor initialized\r\n[ 0.190294] TOMOYO Linux initialized\r\n[ 0.190806] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\n[ 0.191158] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\n[ 0.301178] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\n[ 0.303030] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\n[ 0.303154] rcu: Hierarchical SRCU implementation.\r\n[ 0.303232] NMI watchdog: Perf NMI watchdog permanently disabled\r\n[ 0.304156] smp: Bringing up secondary CPUs ...\r\n[ 0.304775] smp: Brought up 1 node, 1 CPU\r\n[ 0.305377] smpboot: Max logical packages: 1\r\n[ 0.305973] smpboot: Total of 1 processors activated (4400.34 BogoMIPS)\r\n[ 0.308500] node 0 deferred pages initialised in 4ms\r\n[ 0.309336] devtmpfs: initialized\r\n[ 0.309853] x86/mm: Memory block size: 128MB\r\n[ 0.310586] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\r\n[ 0.311201] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\n[ 0.312491] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\r\n[ 0.313553] NET: Registered protocol family 16\r\n[ 0.314323] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\r\n[ 0.315262] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\n[ 0.316351] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\n[ 0.317444] audit: initializing netlink subsys (disabled)\r\n[ 0.318358] thermal_sys: Registered thermal governor 'fair_share'\r\n[ 0.318358] thermal_sys: Registered thermal governor 'bang_bang'\r\n[ 0.319159] thermal_sys: Registered thermal governor 'step_wise'\r\n[ 0.319988] thermal_sys: Registered thermal governor 'user_space'\r\n[ 0.320815] thermal_sys: Registered thermal governor 'power_allocator'\r\n[ 0.321635] cpuidle: using governor ladder\r\n[ 0.323161] audit: type=2000 audit(1700193824.940:1): state=initialized audit_enabled=0 res=1\r\n[ 0.324328] cpuidle: using governor menu\r\n[ 0.324906] ACPI: bus type PCI registered\r\n[ 0.325460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\n[ 0.326421] PCI: Using configuration type 1 for base access\r\n[ 0.327802] Kprobes globally optimized\r\n[ 0.328452] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\n[ 0.329351] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\n[ 0.457287] ACPI: Added _OSI(Module Device)\r\n[ 0.457914] ACPI: Added _OSI(Processor Device)\r\n[ 0.458520] ACPI: Added _OSI(3.0 _SCP Extensions)\r\n[ 0.459158] ACPI: Added _OSI(Processor Aggregator Device)\r\n[ 0.460010] ACPI: Added _OSI(Linux-Dell-Video)\r\n[ 0.460629] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\n[ 0.461348] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\n[ 0.462989] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\n[ 0.464105] ACPI: Interpreter enabled\r\n[ 0.464646] ACPI: (supports S0 S3 S4 S5)\r\n[ 0.465207] ACPI: Using IOAPIC for interrupt routing\r\n[ 0.465937] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\n[ 0.467351] ACPI: Enabled 16 GPEs in block 00 to 0F\r\n[ 0.469893] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\n[ 0.471179] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\n[ 0.472279] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\n[ 0.474395] PCI host bridge to bus 0000:00\r\n[ 0.475161] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\n[ 0.476080] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\n[ 0.476988] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\n[ 0.478071] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\r\n[ 0.479156] pci_bus 0000:00: root bus resource [bus 00-ff]\r\n[ 0.479955] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\n[ 0.483516] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\n[ 0.497205] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\n[ 0.510756] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\n[ 0.511429] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\n[ 0.518345] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\n[ 0.523157] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\r\n[ 0.534975] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\n[ 0.540789] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\n[ 0.544833] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\r\n[ 0.555412] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\r\n[ 0.560805] pci 0000:00:05.0: reg 0x10: [io 0xc080-0xc09f]\r\n[ 0.564625] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\r\n[ 0.575564] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\n[ 0.577286] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\n[ 0.578886] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\n[ 0.579915] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\n[ 0.583168] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\n[ 0.584105] iommu: Default domain type: Translated \r\n[ 0.584854] vgaarb: loaded\r\n[ 0.585334] Registered efivars operations\r\n[ 0.586084] NetLabel: Initializing\r\n[ 0.587156] NetLabel: domain hash size = 128\r\n[ 0.587827] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\n[ 0.588621] NetLabel: unlabeled traffic allowed by default\r\n[ 0.589415] PCI: Using ACPI for IRQ routing\r\n[ 0.590183] clocksource: Switched to clocksource kvm-clock\r\n[ 0.599324] VFS: Disk quotas dquot_6.6.0\r\n[ 0.599916] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\n[ 0.601024] AppArmor: AppArmor Filesystem Enabled\r\n[ 0.601786] pnp: PnP ACPI init\r\n[ 0.602662] pnp: PnP ACPI: found 7 devices\r\n[ 0.608541] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\n[ 0.609795] NET: Registered protocol family 2\r\n[ 0.610436] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\r\n[ 0.612665] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\r\n[ 0.613850] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\r\n[ 0.614940] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\n[ 0.615983] TCP: Hash tables configured (established 8192 bind 8192)\r\n[ 0.616945] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\r\n[ 0.617844] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\r\n[ 0.618844] NET: Registered protocol family 1\r\n[ 0.619629] NET: Registered protocol family 44\r\n[ 0.620246] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\n[ 0.621100] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\n[ 0.621946] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\n[ 0.622980] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\r\n[ 0.624039] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\n[ 0.624898] PCI: CLS 0 bytes, default 64\r\n[ 0.625515] Trying to unpack rootfs image as initramfs...\r\n[ 0.838263] Freeing initrd memory: 13832K\r\n[ 0.838913] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\r\n[ 0.840271] clocksource: Switched to clocksource tsc\r\n[ 0.841223] Initialise system trusted keyrings\r\n[ 0.841875] Key type blacklist registered\r\n[ 0.842505] workingset: timestamp_bits=36 max_order=18 bucket_order=0\r\n[ 0.844293] zbud: loaded\r\n[ 0.844973] Key type asymmetric registered\r\n[ 0.845539] Asymmetric key parser 'x509' registered\r\n[ 0.846222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\n[ 0.847278] io scheduler mq-deadline registered\r\n[ 0.848485] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\n[ 0.849463] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\n[ 0.850740] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\n[ 0.851965] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\n[ 0.853164] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\n[ 0.854467] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\n[ 0.855734] i8042: Warning: Keylock active\r\n[ 0.857698] serio: i8042 KBD port at 0x60,0x64 irq 1\r\n[ 0.858391] serio: i8042 AUX port at 0x60,0x64 irq 12\r\n[ 0.859206] rtc_cmos 00:00: RTC can wake from S4\r\n[ 0.860615] rtc_cmos 00:00: registered as rtc0\r\n[ 0.861428] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:45 UTC (1700193825)\r\n[ 0.862619] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\n[ 0.863495] intel_pstate: CPU model not supported\r\n[ 0.864350] NET: Registered protocol family 10\r\n[ 0.872101] Segment Routing with IPv6\r\n[ 0.872671] mip6: Mobile IPv6\r\n[ 0.873091] NET: Registered protocol family 17\r\n[ 0.873814] IPI shorthand broadcast: enabled\r\n[ 0.874454] sched_clock: Marking stable (864288966, 8353340)-\u003e(874836097, -2193791)\r\n[ 0.875588] registered taskstats version 1\r\n[ 0.876158] Loading compiled-in X.509 certificates\r\n[ 0.908877] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\n[ 0.910478] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\n[ 0.911923] Key type .fscrypt registered\r\n[ 0.912517] Key type fscrypt-provisioning registered\r\n[ 0.913253] AppArmor: AppArmor sha1 policy hashing enabled\r\n[ 0.915720] Freeing unused decrypted memory: 2036K\r\n[ 0.917013] Freeing unused kernel image (initmem) memory: 2468K\r\n[ 0.924384] Write protecting the kernel read-only data: 22528k\r\n[ 0.925931] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\n[ 0.927194] Freeing unused kernel image (rodata/data gap) memory: 1236K\r\n[ 0.928659] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 0.929536] x86/mm: Checking user space page tables\r\n[ 0.930357] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 0.931248] Run /init as init process\r\nLoading, please wait...\r\nStarting version 247.3-7+deb11u4\r\n[ 0.999458] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\n[ 1.000238] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\n[ 1.026601] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\n[ 1.027444] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\n[ 1.031920] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\n[ 1.032814] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\n[ 1.054934] SCSI subsystem initialized\r\n[ 1.061158] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\n[ 1.075892] virtio_net virtio1 ens4: renamed from eth0\r\n[ 1.085896] scsi host0: Virtio SCSI HBA\r\n[ 1.091740] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\n[ 1.111855] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\r\n[ 1.112925] sd 0:0:1:0: [sda] 4096-byte physical blocks\r\n[ 1.113940] sd 0:0:1:0: [sda] Write Protect is off\r\n[ 1.114657] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\n[ 1.118523] sda: sda1 sda14 sda15\r\n[ 1.126791] sd 0:0:1:0: [sda] Attached SCSI disk\r\nBegin: Loading essential drivers ... done.\r\nBegin: Running /scripts/init-premount ... done.\r\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\r\nBegin: Running /scripts/local[ 1.152781] gce-disk-expand: Resizing partition on \r\n-premount ... [ 1.176849] sda: sda1 sda14 sda15\r\n[ 1.188392] gce-disk-expand: Disk /dev/sda1 doesn't need resizing.\r\ndone.\r\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\r\n[/sbin/fsck.ext4 (1) -- /dev/sda1] fsck.ext4 -a -C0 /dev/sda1 \r\n/dev/sda1: clean, 82191/647168 files, 583028/2588667 blocks\r\ndone.\r\n[ 1.254250] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\r\ndone.\r\nBegin: Running /scripts/local-bottom ... done.\r\nBegin: Running /scripts/init-bottom ... done.\r\n[ 1.277595] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\n[ 1.387488] systemd[1]: Inserted module 'autofs4'\r\n[ 1.442681] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\r\n[ 1.445902] systemd[1]: Detected virtualization kvm.\r\n[ 1.446600] systemd[1]: Detected architecture x86-64.\r\n\r\nWelcome to \u001b[1mDebian GNU/Linux 11 (bullseye)\u001b[0m!\r\n\r\n[ 1.460843] systemd[1]: Set hostname to \u003cdebian\u003e.\r\n[ 1.462651] systemd[1]: Initializing machine ID from KVM UUID.\r\n[ 1.463576] systemd[1]: Installed transient /etc/machine-id file.\r\n[ 1.919472] systemd[1]: Condition check resulted in Root Slice being skipped.\r\n[ 1.920524] systemd[1]: Condition check resulted in System Slice being skipped.\r\n[ 1.922280] systemd[1]: Queued start job for default target Graphical Interface.\r\n[ 1.924563] systemd[1]: Created slice system-getty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-getty.slice\u001b[0m.\r\n[ 1.936671] systemd[1]: Created slice system-modprobe.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-modprobe.slice\u001b[0m.\r\n[ 1.948711] systemd[1]: Created slice system-serial\\x2dgetty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-serial\\x2dgetty.slice\u001b[0m.\r\n[ 1.960656] systemd[1]: Created slice system-systemd\\x2dgrowfs.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-systemd\\x2dgrowfs.slice\u001b[0m.\r\n[ 1.972612] systemd[1]: Created slice User and Session Slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39mUser and Session Slice\u001b[0m.\r\n[ 1.984482] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDispatch Password …ts to Console Directory Watch\u001b[0m.\r\n[ 1.996479] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mForward Password R…uests to Wall Directory Watch\u001b[0m.\r\n[ 2.008603] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\r\n[\u001b[0;32m OK \u001b[0m] Set up automount \u001b[0;1;39mArbitrary…s File System Automount Point\u001b[0m.\r\n[ 2.020467] systemd[1]: Reached target Local Encrypted Volumes.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal Encrypted Volumes\u001b[0m.\r\n[ 2.032463] systemd[1]: Reached target Paths.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mPaths\u001b[0m.\r\n[ 2.044419] systemd[1]: Reached target Remote File Systems.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mRemote File Systems\u001b[0m.\r\n[ 2.056430] systemd[1]: Reached target Slices.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSlices\u001b[0m.\r\n[ 2.068460] systemd[1]: Reached target Swap.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSwap\u001b[0m.\r\n[ 2.080452] systemd[1]: Reached target System Time Set.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Set\u001b[0m.\r\n[ 2.092590] systemd[1]: Listening on Syslog Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mSyslog Socket\u001b[0m.\r\n[ 2.104541] systemd[1]: Listening on fsck to fsckd communication Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mfsck to fsckd communication Socket\u001b[0m.\r\n[ 2.116525] systemd[1]: Listening on initctl Compatibility Named Pipe.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39minitctl Compatibility Named Pipe\u001b[0m.\r\n[ 2.128652] systemd[1]: Listening on Journal Audit Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Audit Socket\u001b[0m.\r\n[ 2.140586] systemd[1]: Listening on Journal Socket (/dev/log).\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket (/dev/log)\u001b[0m.\r\n[ 2.152608] systemd[1]: Listening on Journal Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket\u001b[0m.\r\n[ 2.164999] systemd[1]: Listening on udev Control Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Control Socket\u001b[0m.\r\n[ 2.176533] systemd[1]: Listening on udev Kernel Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Kernel Socket\u001b[0m.\r\n[ 2.189244] systemd[1]: Mounting Huge Pages File System...\r\n Mounting \u001b[0;1;39mHuge Pages File System\u001b[0m...\r\n[ 2.201151] systemd[1]: Mounting POSIX Message Queue File System...\r\n Mounting \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m...\r\n[ 2.213139] systemd[1]: Mounting Kernel Debug File System...\r\n Mounting \u001b[0;1;39mKernel Debug File System\u001b[0m...\r\n[ 2.225136] systemd[1]: Mounting Kernel Trace File System...\r\n Mounting \u001b[0;1;39mKernel Trace File System\u001b[0m...\r\n[ 2.237190] systemd[1]: Starting Create list of static device nodes for the current kernel...\r\n Starting \u001b[0;1;39mCreate list of st…odes for the current kernel\u001b[0m...\r\n[ 2.249105] systemd[1]: Starting Load Kernel Module configfs...\r\n Starting \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m...\r\n[ 2.261132] systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\n[ 2.273083] systemd[1]: Starting Load Kernel Module fuse...\r\n Starting \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m...\r\n[ 2.283707] fuse: init (API version 7.32)\r\n[ 2.284971] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\r\n[ 2.286266] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\r\n[ 2.288806] systemd[1]: Starting Journal Service...\r\n Starting \u001b[0;1;39mJournal Service\u001b[0m...\r\n[ 2.301746] systemd[1]: Starting Load Kernel Modules...\r\n Starting \u001b[0;1;39mLoad Kernel Modules\u001b[0m...\r\n[ 2.313052] systemd[1]: Starting Remount Root and Kernel File Systems...\r\n Starting \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m...\r\n[ 2.317162] systemd[1]: Starting Coldplug All udev Devices...\r\n Starting \u001b[0;1;39mColdplug All udev Devices\u001b[0m...\r\n[ 2.322305] systemd[1]: Mounted Huge Pages File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mHuge Pages File System\u001b[0m.\r\n[ 2.335757] systemd[1]: Mounted POSIX Message Queue File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m.\r\n[ 2.338494] systemd[1]: Mounted Kernel Debug File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Debug File System\u001b[0m.\r\n[ 2.348486] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\r\n[ 2.353065] systemd[1]: Mounted Kernel Trace File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Trace File System\u001b[0m.\r\n[ 2.364540] systemd[1]: Started Journal Service.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mJournal Service\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate list of st… nodes for the current kernel\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Modules\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m.\r\n Mounting \u001b[0;1;39mFUSE Control File System\u001b[0m...\r\n Mounting \u001b[0;1;39mKernel Configuration File System\u001b[0m...\r\n Starting \u001b[0;1;39mGrow File System on /\u001b[0m...\r\n Starting \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m...\r\n[ 2.488722] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\r\n Starting \u001b[0;1;39mLoad/Save Random Seed\u001b[0m...\r\n Starting \u001b[0;1;39mApply Kernel Variables\u001b[0m...\r\n[ 2.510094] systemd-journald[181]: Received client request to flush runtime journal.\r\n Starting \u001b[0;1;39mCreate System Users\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mColdplug All udev Devices\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mFUSE Control File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Configuration File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGrow File System on /\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad/Save Random Seed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mApply Kernel Variables\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate System Users\u001b[0m.\r\n Starting \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems (Pre)\u001b[0m.\r\n Starting \u001b[0;1;39mRule-based Manage…for Device Events and Files\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRule-based Manager for Device Events and Files\u001b[0m.\r\n[ 2.759844] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\n[ 2.784424] ACPI: Power Button [PWRF]\r\n[ 2.785020] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\n[ 2.786165] ACPI: Sleep Button [SLPF]\r\n[ 2.797491] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\n[ 2.818744] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39m/dev/ttyS0\u001b[0m.\r\n[ 2.829489] pstore: Using crash dump compression: deflate\r\n[ 2.830270] pstore: Registered efi as persistent store backend\r\n[ 2.878870] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\n[ 2.916156] cryptd: max_cpu_qlen set to 1000\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mPersistentDisk 15\u001b[0m.\r\n[ 2.945181] AVX2 version of gcm_enc/dec engaged.\r\n[ 2.945881] AES CTR mode by8 optimization enabled\r\n Mounting \u001b[0;1;39m/boot/efi\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39m/boot/efi\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems\u001b[0m.\r\n Starting \u001b[0;1;39mLoad AppArmor profiles\u001b[0m...\r\n Starting \u001b[0;1;39mCommit a transient machine-id on disk\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mVirtio network device\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m.\r\n Starting \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCommit a transient machine-id on disk\u001b[0m.\r\n[ 3.379173] audit: type=1400 audit(1700193828.011:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=292 comm=\"apparmor_parser\"\r\n[ 3.382434] audit: type=1400 audit(1700193828.015:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=292 comm=\"apparmor_parser\"\r\n[ 3.465172] audit: type=1400 audit(1700193828.099:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=293 comm=\"apparmor_parser\"\r\n[ 3.506572] audit: type=1400 audit(1700193828.139:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=294 comm=\"apparmor_parser\"\r\n[ 3.625363] audit: type=1400 audit(1700193828.259:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=295 comm=\"apparmor_parser\"\r\n[ 3.655070] audit: type=1400 audit(1700193828.287:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=296 comm=\"apparmor_parser\"\r\n[ 3.720200] audit: type=1400 audit(1700193828.351:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=297 comm=\"apparmor_parser\"\r\n[ 3.723210] audit: type=1400 audit(1700193828.359:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=297 comm=\"apparmor_parser\"\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad AppArmor profiles\u001b[0m[ 3.728049] audit: type=1400 audit(1700193828.359:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=297 comm=\"apparmor_parser\"\r\n.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Initialization\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGCE Workload Certificate refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mNSS cache refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily Cleanup of Temporary Directories\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mD-Bus System Message Bus Socket\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mUUID daemon activation socket\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSockets\u001b[0m.\r\n Starting \u001b[0;1;39mResize root filesystem if needed\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mifup for ens4\u001b[0m.\r\n Starting \u001b[0;1;39mRaise network interfaces\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mResize root filesystem if needed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mBasic System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mD-Bus System Message Bus\u001b[0m.\r\n Starting \u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\u001b[0m...\r\n Starting \u001b[0;1;39mSystem Logging Service\u001b[0m...\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSystem Logging Service\u001b[0m.\r\nNov 17 04:03:48 debian kernel: [ 0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\r\nNov 17 04:03:48 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-provided physical RAM map:\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] printk: bootconsole [earlyser0] enabled\r\nNov 17 04:03:48 debian kernel: [ 0.000000] NX (Execute Disable) protection: active\r\nNov 17 04:03:48 debian kernel: [ 0.000000] efi: EFI v2.70 by EDK II\r\nNov 17 04:03:48 debian kernel: [ 0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \r\nNov 17 04:03:48 debian kernel: [ 0.000000] secureboot: Secure boot disabled\r\nNov 17 04:03:48 debian kernel: [ 0.000000] SMBIOS 2.4 present.\r\nNov 17 04:03:48 debian kernel: [ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\r\nNov 17 04:03:48 debian kernel: [ 0.000000] Hypervisor detected: KVM\r\nNov 17 04:03:48 debian kernel: [ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\nNov 17 04:03:48 debian kernel: [ 0.000000] kvm-clock: cpu 0, msr 11601001, primary cpu clock\r\nNov 17 04:03:48 debian kernel: [ 0.000000] kvm-clock: using sched offset of 6574541159 cycles\r\nNov 17 04:03:48 debian kernel: [ 0.000750] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\nNov 17 04:03:48 debian kernel: [ 0.003137] tsc: Detected 2200.170 MHz processor\r\nNov 17 04:03:48 debian kernel: [ 0.003934] e820: update [mem 0x00000000-0x00000fff] usable ==\u003e reserved\r\nNov 17 04:03:48 debian kernel: [ 0.003937] e820: remove [mem 0x000a0000-0x000fffff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.003944] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\r\nNov 17 04:03:48 debian kernel: [ 0.004733] MTRR default type: write-back\r\nNov 17 04:03:48 debian kernel: [ 0.004734] MTRR fixed ranges enabled:\r\nNov 17 04:03:48 debian kernel: [ 0.004736] 00000-9FFFF write-back\r\nNov 17 04:03:48 debian kernel: [ 0.004737] A0000-FFFFF uncachable\r\nNov 17 04:03:48 debian kernel: [ 0.004738] MTRR variable ranges enabled:\r\nNov 17 04:03:48 debian kernel: [ 0.004740] 0 base 000080000000 mask 3FFF80000000 uncachable\r\nNov 17 04:03:48 debian kernel: [ 0.004741] 1 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004741] 2 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004742] 3 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004743] 4 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004743] 5 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004744] 6 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004744] 7 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004756] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nNov 17 04:03:48 debian kernel: [ 0.006413] Using GB pages for direct mapping\r\nNov 17 04:03:48 debian kernel: [ 0.007451] RAMDISK: [mem 0x2327f000-0x24000fff]\r\nNov 17 04:03:48 debian kernel: [ 0.008104] ACPI: Early table checksum verification disabled\r\nNov 17 04:03:48 debian kernel: [ 0.008840] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\r\nNov 17 04:03:48 debian kernel: [ 0.009613] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\nNov 17 04:03:48 debian kernel: [ 0.010705] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.011795] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.013148] ACPI: FACS 0x00000000261F2000 000040\r\nNov 17 04:03:48 debian kernel: [ 0.013789] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\nNov 17 04:03:48 debian kernel: [ 0.015074] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.016308] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.017416] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.018848] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.019981] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.021071] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\r\nNov 17 04:03:48 debian kernel: [ 0.021968] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\r\nNov 17 04:03:48 debian kernel: [ 0.022868] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\r\nNov 17 04:03:48 debian kernel: [ 0.024195] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\r\nNov 17 04:03:48 debian kernel: [ 0.025096] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\r\nNov 17 04:03:48 debian kernel: [ 0.026077] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\r\nNov 17 04:03:48 debian kernel: [ 0.026976] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\r\nNov 17 04:03:48 debian kernel: [ 0.028016] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\r\nNov 17 04:03:48 debian kernel: [ 0.028910] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\r\nNov 17 04:03:48 debian kernel: [ 0.029888] ACPI: Local APIC address 0xfee00000\r\nNov 17 04:03:48 debian kernel: [ 0.029920] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\nNov 17 04:03:48 debian kernel: [ 0.030516] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.031283] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\r\nNov 17 04:03:48 debian kernel: [ 0.032201] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\u003e [mem 0x00000000-0x265dffff]\r\nNov 17 04:03:48 debian kernel: [ 0.034082] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\r\nNov 17 04:03:48 debian kernel: [ 0.035210] Zone ranges:\r\nNov 17 04:03:48 debian kernel: [ 0.035556] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\nNov 17 04:03:48 debian kernel: [ 0.036346] DMA32 [mem 0x0000000001000000-0x00000000265dffff]\r\nNov 17 04:03:48 debian kernel: [ 0.037132] Normal empty\r\nNov 17 04:03:48 debian kernel: [ 0.037500] Device empty\r\nNov 17 04:03:48 debian kernel: [ 0.037865] Movable zone start for each node\r\nNov 17 04:03:48 debian kernel: [ 0.038411] Early memory node ranges\r\nNov 17 04:03:48 debian kernel: [ 0.038866] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\nNov 17 04:03:48 debian kernel: [ 0.039666] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\nNov 17 04:03:48 debian kernel: [ 0.040501] node 0: [mem 0x0000000000100000-0x0000000025eecfff]\r\nNov 17 04:03:48 debian kernel: [ 0.041319] node 0: [mem 0x00000000261ff000-0x00000000265dffff]\r\nNov 17 04:03:48 debian kernel: [ 0.042118] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\r\nNov 17 04:03:48 debian kernel: [ 0.043037] On node 0 totalpages: 156250\r\nNov 17 04:03:48 debian kernel: [ 0.043038] DMA zone: 64 pages used for memmap\r\nNov 17 04:03:48 debian kernel: [ 0.043039] DMA zone: 3121 pages reserved\r\nNov 17 04:03:48 debian kernel: [ 0.043040] DMA zone: 3980 pages, LIFO batch:0\r\nNov 17 04:03:48 debian kernel: [ 0.043042] DMA32 zone: 2392 pages used for memmap\r\nNov 17 04:03:48 debian kernel: [ 0.043042] DMA32 zone: 152270 pages, LIFO batch:31\r\nNov 17 04:03:48 debian kernel: [ 0.043516] On node 0, zone DMA: 1 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.043518] On node 0, zone DMA: 11 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.044348] On node 0, zone DMA: 104 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.046817] On node 0, zone DMA32: 786 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.047679] On node 0, zone DMA32: 6688 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.048980] ACPI: PM-Timer IO Port: 0xb008\r\nNov 17 04:03:48 debian kernel: [ 0.050430] ACPI: Local APIC address 0xfee00000\r\nNov 17 04:03:48 debian kernel: [ 0.050442] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\nNov 17 04:03:48 debian kernel: [ 0.051354] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\nNov 17 04:03:48 debian kernel: [ 0.052270] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\nNov 17 04:03:48 debian kernel: [ 0.053112] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\nNov 17 04:03:48 debian kernel: [ 0.054025] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\nNov 17 04:03:48 debian kernel: [ 0.054888] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\nNov 17 04:03:48 debian kernel: [ 0.055759] ACPI: IRQ5 used by override.\r\nNov 17 04:03:48 debian kernel: [ 0.055760] ACPI: IRQ9 used by override.\r\nNov 17 04:03:48 debian kernel: [ 0.055761] ACPI: IRQ10 used by override.\r\nNov 17 04:03:48 debian kernel: [ 0.055762] ACPI: IRQ11 used by override.\r\nNov 17 04:03:48 debian kernel: [ 0.055764] Using ACPI (MADT) for SMP configuration information\r\nNov 17 04:03:48 debian kernel: [ 0.056581] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\r\nNov 17 04:03:48 debian kernel: [ 0.057278] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\nNov 17 04:03:48 debian kernel: [ 0.058289] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.059254] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.060218] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\nNov 17 04:03:48 debian kernel: [ 0.061186] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\r\nNov 17 04:03:48 debian kernel: [ 0.062153] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\r\nNov 17 04:03:48 debian kernel: [ 0.063119] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\r\nNov 17 04:03:48 debian kernel: [ 0.064086] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\r\nNov 17 04:03:48 debian kernel: [ 0.065051] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\r\nNov 17 04:03:48 debian kernel: [ 0.066343] [mem 0x26600000-0xffffffff] available for PCI devices\r\nNov 17 04:03:48 debian kernel: [ 0.067140] Booting paravirtualized kernel on KVM\r\nNov 17 04:03:48 debian kernel: [ 0.067740] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\nNov 17 04:03:48 debian kernel: [ 0.073455] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\r\nNov 17 04:03:48 debian kernel: [ 0.075118] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\r\nNov 17 04:03:48 debian kernel: [ 0.076040] pcpu-alloc: s221184 r8192 d28672 u2097152 alloc=1*2097152\r\nNov 17 04:03:48 debian kernel: [ 0.076042] pcpu-alloc: [0] 0 \r\nNov 17 04:03:48 debian kernel: [ 0.076074] kvm-guest: PV spinlocks disabled, single CPU\r\nNov 17 04:03:48 debian kernel: [ 0.076805] Built 1 zonelists, mobility grouping on. Total pages: 150673\r\nNov 17 04:03:48 debian kernel: [ 0.077803] Policy zone: DMA32\r\nNov 17 04:03:48 debian kernel: [ 0.078192] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nNov 17 04:03:48 debian kernel: [ 0.080817] DMAR: IOMMU disabled\r\nNov 17 04:03:48 debian kernel: [ 0.081474] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.082690] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.083743] mem auto-init: stack:off, heap alloc:on, heap free:off\r\nNov 17 04:03:48 debian kernel: [ 0.087100] Memory: 233576K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\r\nNov 17 04:03:48 debian kernel: [ 0.089122] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\r\nNov 17 04:03:48 debian kernel: [ 0.090012] Kernel/User page tables isolation: enabled\r\nNov 17 04:03:48 debian kernel: [ 0.091151] ftrace: allocating 33918 entries in 133 pages\r\nNov 17 04:03:48 debian kernel: [ 0.111503] ftrace: allocated 133 pages with 3 groups\r\nNov 17 04:03:48 debian kernel: [ 0.112765] rcu: Hierarchical RCU implementation.\r\nNov 17 04:03:48 debian kernel: [ 0.113378] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\r\nNov 17 04:03:48 debian kernel: [ 0.114278] \tRude variant of Tasks RCU enabled.\r\nNov 17 04:03:48 debian kernel: [ 0.114855] \tTracing variant of Tasks RCU enabled.\r\nNov 17 04:03:48 debian kernel: [ 0.115469] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\nNov 17 04:03:48 debian kernel: [ 0.116433] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\r\nNov 17 04:03:48 debian kernel: [ 0.121697] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\r\nNov 17 04:03:48 debian kernel: [ 0.122810] random: crng init done\r\nNov 17 04:03:48 debian kernel: [ 0.123274] Console: colour dummy device 80x25\r\nNov 17 04:03:48 debian kernel: [ 0.124053] printk: console [tty0] enabled\r\nNov 17 04:03:48 debian kernel: [ 0.124835] printk: console [ttyS0] enabled\r\nNov 17 04:03:48 debian kernel: [ 0.126039] printk: bootconsole [earlyser0] disabled\r\nNov 17 04:03:48 debian kernel: [ 0.127441] ACPI: Core revision 20200925\r\nNov 17 04:03:48 debian kernel: [ 0.128098] APIC: Switch to symmetric I/O mode setup\r\nNov 17 04:03:48 debian kernel: [ 0.129244] x2apic enabled\r\nNov 17 04:03:48 debian kernel: [ 0.131960] Switched APIC routing to physical x2apic.\r\nNov 17 04:03:48 debian kernel: [ 0.136632] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\nNov 17 04:03:48 debian kernel: [ 0.137712] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\r\nNov 17 04:03:48 debian kernel: [ 0.139157] Calibrating delay loop (skipped) preset value.. 4400.34 BogoMIPS (lpj=8800680)\r\nNov 17 04:03:48 debian kernel: [ 0.143263] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\nNov 17 04:03:48 debian kernel: [ 0.144056] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\nNov 17 04:03:48 debian kernel: [ 0.144991] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\nNov 17 04:03:48 debian kernel: [ 0.146142] Spectre V2 : Mitigation: IBRS\r\nNov 17 04:03:48 debian kernel: [ 0.146695] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\nNov 17 04:03:48 debian kernel: [ 0.147156] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\nNov 17 04:03:48 debian kernel: [ 0.148095] RETBleed: Mitigation: IBRS\r\nNov 17 04:03:48 debian kernel: [ 0.148658] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\nNov 17 04:03:48 debian kernel: [ 0.149882] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\nNov 17 04:03:48 debian kernel: [ 0.151163] MDS: Mitigation: Clear CPU buffers\r\nNov 17 04:03:48 debian kernel: [ 0.151804] TAA: Mitigation: Clear CPU buffers\r\nNov 17 04:03:48 debian kernel: [ 0.152445] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\nNov 17 04:03:48 debian kernel: [ 0.153624] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\nNov 17 04:03:48 debian kernel: [ 0.155158] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\nNov 17 04:03:48 debian kernel: [ 0.156050] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\nNov 17 04:03:48 debian kernel: [ 0.156905] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\nNov 17 04:03:48 debian kernel: [ 0.157851] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\nNov 17 04:03:48 debian kernel: [ 0.177428] Freeing SMP alternatives memory: 32K\r\nNov 17 04:03:48 debian kernel: [ 0.179890] pid_max: default: 32768 minimum: 301\r\nNov 17 04:03:48 debian kernel: [ 0.188030] LSM: Security Framework initializing\r\nNov 17 04:03:48 debian kernel: [ 0.188748] Yama: disabled by default; enable with sysctl kernel.yama.*\r\nNov 17 04:03:48 debian kernel: [ 0.189713] AppArmor: AppArmor initialized\r\nNov 17 04:03:48 debian kernel: [ 0.190294] TOMOYO Linux initialized\r\nNov 17 04:03:48 debian kernel: [ 0.190806] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.191158] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.301178] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\nNov 17 04:03:48 debian kernel: [ 0.303030] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\nNov 17 04:03:48 debian kernel: [ 0.303154] rcu: Hierarchical SRCU implementation.\r\nNov 17 04:03:48 debian kernel: [ 0.303232] NMI watchdog: Perf NMI watchdog permanently disabled\r\nNov 17 04:03:48 debian kernel: [ 0.304156] smp: Bringing up secondary CPUs ...\r\nNov 17 04:03:48 debian kernel: [ 0.304775] smp: Brought up 1 node, 1 CPU\r\nNov 17 04:03:48 debian kernel: [ 0.305377] smpboot: Max logical packages: 1\r\nNov 17 04:03:48 debian kernel: [ 0.305973] smpboot: Total of 1 processors activated (4400.34 BogoMIPS)\r\nNov 17 04:03:48 debian kernel: [ 0.308500] node 0 deferred pages initialised in 4ms\r\nNov 17 04:03:48 debian kernel: [ 0.309336] devtmpfs: initialized\r\nNov 17 04:03:48 debian kernel: [ 0.309853] x86/mm: Memory block size: 128MB\r\nNov 17 04:03:48 debian kernel: [ 0.310586] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\r\nNov 17 04:03:48 debian kernel: [ 0.311201] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\nNov 17 04:03:48 debian kernel: [ 0.312491] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.313553] NET: Registered protocol family 16\r\nNov 17 04:03:48 debian kernel: [ 0.314323] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\r\nNov 17 04:03:48 debian kernel: [ 0.315262] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\nNov 17 04:03:48 debian kernel: [ 0.316351] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\nNov 17 04:03:48 debian kernel: [ 0.317444] aud[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\nit: initializing netlink subsys (disabled)\r\nNov 17 04:03:48 debian kernel: [ 0.318358] thermal_sys: Registered thermal governor 'fair_share'\r\nNov 17 04:03:48 debian kernel: [ 0.318358] thermal_sys: Registered thermal governor 'bang_bang'\r\nNov 17 04:03:48 debian kernel: [ 0.319159] thermal_sys: Registered thermal governor 'step_wise'\r\nNov 17 04:03:48 debian kernel: [ 0.319988] thermal_sys: Registered thermal governor 'user_space'\r\nNov 17 04:03:48 debian kernel: [ 0.320815] thermal_sys: Registered thermal governor 'power_allocator'\r\nNov 17 04:03:48 debian kernel: [ 0.321635] cpuidle: using governor ladder\r\nNov 17 04:03:48 debian kernel: [ 0.323161] audit: type=2000 audit(1700193824.940:1): state=initialized audit_enabled=0 res=1\r\nNov 17 04:03:48 debian kernel: [ 0.324328] cpuidle: using governor menu\r\nNov 17 04:03:48 debian kernel: [ 0.324906] ACPI: bus type PCI registered\r\nNov 17 04:03:48 debian kernel: [ 0.325460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\nNov 17 04:03:48 debian kernel: [ 0.326421] PCI: Using configuration type 1 for base access\r\nNov 17 04:03:48 debian kernel: [ 0.327802] Kprobes globally optimized\r\nNov 17 04:03:48 debian kernel: [ 0.328452] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\nNov 17 04:03:48 debian kernel: [ 0.329351] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\nNov 17 04:03:48 debian kernel: [ 0.457287] ACPI: Added _OSI(Module Device)\r\nNov 17 04:03:48 debian kernel: [ 0.457914] ACPI: Added _OSI(Processor Device)\r\nNov 17 04:03:48 debian kernel: [ 0.458520] ACPI: Added _OSI(3.0 _SCP Extensions)\r\nNov 17 04:03:48 debian kernel: [ 0.459158] ACPI: Added _OSI(Processor Aggregator Device)\r\nNov 17 04:03:48 debian kernel: [ 0.460010] ACPI: Added _OSI(Linux-Dell-Video)\r\nNov 17 04:03:48 debian kernel: [ 0.460629] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\nNov 17 04:03:48 debian kernel: [ 0.461348] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\nNov 17 04:03:48 debian kernel: [ 0.462989] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\nNov 17 04:03:48 debian kernel: [ 0.464105] ACPI: Interpreter enabled\r\nNov 17 04:03:48 debian kernel: [ 0.464646] ACPI: (supports S0 S3 S4 S5)\r\nNov 17 04:03:48 debian kernel: [ 0.465207] ACPI: Using IOAPIC for interrupt routing\r\nNov 17 04:03:48 debian kernel: [ 0.465937] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\nNov 17 04:03:48 debian kernel: [ 0.467351] ACPI: Enabled 16 GPEs in block 00 to 0F\r\nNov 17 04:03:48 debian kernel: [ 0.469893] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\nNov 17 04:03:48 debian kernel: [ 0.471179] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\nNov 17 04:03:48 debian kernel: [ 0.472279] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\nNov 17 04:03:48 debian kernel: [ 0.474395] PCI host bridge to bus 0000:00\r\nNov 17 04:03:48 debian kernel: [ 0.475161] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\nNov 17 04:03:48 debian kernel: [ 0.476080] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\nNov 17 04:03:48 debian kernel: [ 0.476988] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\nNov 17 04:03:48 debian kernel: [ 0.478071] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\r\nNov 17 04:03:48 debian kernel: [ 0.479156] pci_bus 0000:00: root bus resource [bus 00-ff]\r\nNov 17 04:03:48 debian kernel: [ 0.479955] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\nNov 17 04:03:48 debian kernel: [ 0.483516] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\nNov 17 04:03:48 debian kernel: [ 0.497205] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\nNov 17 04:03:48 debian kernel: [ 0.510756] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\nNov 17 04:03:48 debian kernel: [ 0.511429] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\nNov 17 04:03:48 debian kernel: [ 0.518345] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\nNov 17 04:03:48 debian kernel: [ 0.523157] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\r\nNov 17 04:03:48 debian kernel: [ 0.534975] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\nNov 17 04:03:48 debian kernel: [ 0.540789] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\nNov 17 04:03:48 debian kernel: [ 0.544833] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\r\nNov 17 04:03:48 debian kernel: [ 0.555412] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\r\nNov 17 04:03:48 debian kernel: [ 0.560805] pci 0000:00:05.0: reg 0x10: [io 0xc080-0xc09f]\r\nNov 17 04:03:48 debian kernel: [ 0.564625] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\r\nNov 17 04:03:48 debian kernel: [ 0.575564] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\nNov 17 04:03:48 debian kernel: [ 0.577286] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\nNov 17 04:03:48 debian kernel: [ 0.578886] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\nNov 17 04:03:48 debian kernel: [ 0.579915] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\nNov 17 04:03:48 debian kernel: [ 0.583168] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\nNov 17 04:03:48 debian kernel: [ 0.584105] iommu: Default domain type: Translated \r\nNov 17 04:03:48 debian kernel: [ 0.584854] vgaarb: loaded\r\nNov 17 04:03:48 debian kernel: [ 0.585334] Registered efivars operations\r\nNov 17 04:03:48 debian kernel: [ 0.586084] NetLabel: Initializing\r\nNov 17 04:03:48 debian kernel: [ 0.587156] NetLabel: domain hash size = 128\r\nNov 17 04:03:48 debian kernel: [ 0.587827] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\nNov 17 04:03:48 debian kernel: [ 0.588621] NetLabel: unlabeled traffic allowed by default\r\nNov 17 04:03:48 debian kernel: [ 0.589415] PCI: Using ACPI for IRQ routing\r\nNov 17 04:03:48 debian kernel: [ 0.590046] PCI: pci_cache_line_size set to 64 bytes\r\nNov 17 04:03:48 debian kernel: [ 0.590141] e820: reserve RAM buffer [mem 0x00055000-0x0005ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.590142] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.590143] e820: reserve RAM buffer [mem 0x25eed000-0x27ffffff]\r\nNov 17 04:03:48 debian kernel: [ 0.590144] e820: reserve RAM buffer [mem 0x265e0000-0x27ffffff]\r\nNov 17 04:03:48 debian kernel: [ 0.590183] clocksource: Switched to clocksource kvm-clock\r\nNov 17 04:03:48 debian kernel: [ 0.599324] VFS: Disk quotas dquot_6.6.0\r\nNov 17 04:03:48 debian kernel: [ 0.599916] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\nNov 17 04:03:48 debian kernel: [ 0.601024] AppArmor: AppArmor Filesystem Enabled\r\nNov 17 04:03:48 debian kernel: [ 0.601786] pnp: PnP ACPI init\r\nNov 17 04:03:48 debian kernel: [ 0.602302] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602352] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602384] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602421] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602449] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602480] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602511] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602662] pnp: PnP ACPI: found 7 devices\r\nNov 17 04:03:48 debian kernel: [ 0.608541] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\nNov 17 04:03:48 debian kernel: [ 0.609795] NET: Registered protocol family 2\r\nNov 17 04:03:48 debian kernel: [ 0.610436] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.612665] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.613850] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.614940] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.615983] TCP: Hash tables configured (established 8192 bind 8192)\r\nNov 17 04:03:48 debian kernel: [ 0.616945] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.617844] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.618844] NET: Registered protocol family 1\r\nNov 17 04:03:48 debian kernel: [ 0.619629] NET: Registered protocol family 44\r\nNov 17 04:03:48 debian kernel: [ 0.620246] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\nNov 17 04:03:48 debian kernel: [ 0.621100] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\nNov 17 04:03:48 debian kernel: [ 0.621946] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\nNov 17 04:03:48 debian kernel: [ 0.622980] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\r\nNov 17 04:03:48 debian kernel: [ 0.624039] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\nNov 17 04:03:48 debian kernel: [ 0.624898] PCI: CLS 0 bytes, default 64\r\nNov 17 04:03:48 debian kernel: [ 0.625515] Trying to unpack rootfs image as initramfs...\r\nNov 17 04:03:48 debian kernel: [ 0.838263] Freeing initrd memory: 13832K\r\nNov 17 04:03:48 debian kernel: [ 0.838913] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\r\nNov 17 04:03:48 debian kernel: [ 0.840271] clocksource: Switched to clocksource tsc\r\nNov 17 04:03:48 debian kernel: [ 0.841223] Initialise system trusted keyrings\r\nNov 17 04:03:48 debian kernel: [ 0.841875] Key type blacklist registered\r\nNov 17 04:03:48 debian kernel: [ 0.842505] workingset: timestamp_bits=36 max_order=18 bucket_order=0\r\nNov 17 04:03:48 debian kernel: [ 0.844293] zbud: loaded\r\nNov 17 04:03:48 debian kernel: [ 0.844973] Key type asymmetric registered\r\nNov 17 04:03:48 debian kernel: [ 0.845539] Asymmetric key parser 'x509' registered\r\nNov 17 04:03:48 debian kernel: [ 0.846222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\nNov 17 04:03:48 debian kernel: [ 0.847278] io scheduler mq-deadline registered\r\nNov 17 04:03:48 debian kernel: [ 0.848485] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\nNov 17 04:03:48 debian kernel: [ 0.849463] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\nNov 17 04:03:48 debian kernel: [ 0.850740] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\nNov 17 04:03:48 debian kernel: [ 0.851965] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\nNov 17 04:03:48 debian kernel: [ 0.853164] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\nNov 17 04:03:48 debian kernel: [ 0.854467] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\nNov 17 04:03:48 debian kernel: [ 0.855734] i8042: Warning: Keylock active\r\nNov 17 04:03:48 debian kernel: [ 0.857698] serio: i8042 KBD port at 0x60,0x64 irq 1\r\nNov 17 04:03:48 debian kernel: [ 0.858391] serio: i8042 AUX port at 0x60,0x64 irq 12\r\nNov 17 04:03:48 debian kernel: [ 0.859206] rtc_cmos 00:00: RTC can wake from S4\r\nNov 17 04:03:48 debian kernel: [ 0.860615] rtc_cmos 00:00: registered as rtc0\r\nNov 17 04:03:48 debian kernel: [ 0.861428] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:45 UTC (1700193825)\r\nNov 17 04:03:48 debian kernel: [ 0.862619] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\nNov 17 04:03:48 debian kernel: [ 0.863495] intel_pstate: CPU model not supported\r\nNov 17 04:03:48 debian kernel: [ 0.864350] NET: Registered protocol family 10\r\nNov 17 04:03:48 debian kernel: [ 0.872101] Segment Routing with IPv6\r\nNov 17 04:03:48 debian kernel: [ 0.872671] mip6: Mobile IPv6\r\nNov 17 04:03:48 debian kernel: [ 0.873091] NET: Registered protocol family 17\r\nNov 17 04:03:48 debian kernel: [ 0.873814] IPI shorthand broadcast: enabled\r\nNov 17 04:03:48 debian kernel: [ 0.874454] sched_clock: Marking stable (864288966, 8353340)-\u003e(874836097, -2193791)\r\nNov 17 04:03:48 debian kernel: [ 0.875588] registered taskstats version 1\r\nNov 17 04:03:48 debian kernel: [ 0.876158] Loading compiled-in X.509 certificates\r\nNov 17 04:03:48 debian kernel: [ 0.908877] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\nNov 17 04:03:48 debian kernel: [ 0.910478] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\nNov 17 04:03:48 debian kernel: [ 0.911923] Key type .fscrypt registered\r\nNov 17 04:03:48 debian kernel: [ 0.912517] Key type fscrypt-provisioning registered\r\nNov 17 04:03:48 debian kernel: [ 0.913253] AppArmor: AppArmor sha1 policy hashing enabled\r\nNov 17 04:03:48 debian kernel: [ 0.915720] Freeing unused decrypted memory: 2036K\r\nNov 17 04:03:48 debian kernel: [ 0.917013] Freeing unused kernel image (initmem) memory: 2468K\r\nNov 17 04:03:48 debian kernel: [ [\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\u001b[0m.\r\n0.924384] Write protecting the kernel read-only data: 22528k\r\nNov 17 04:03:48 debian kernel: [ 0.925931] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\nNov 17 04:03:48 debian kernel: [ 0.927194] Freeing unused kernel image (rodata/data gap) memory: 1236K\r\nNov 17 04:03:48 debian kernel: [ 0.928659] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nNov 17 04:03:48 debian kernel: [ 0.929536] x86/mm: Checking user space page tables\r\nNov 17 04:03:48 debian kernel: [ 0.930357] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nNov 17 04:03:48 debian kernel: [ 0.931248] Run /init as init process\r\nNov 17 04:03:48 debian kernel: [ 0.931826] with arguments:\r\nNov 17 04:03:48 debian kernel: [ 0.931827] /init\r\nNov 17 04:03:48 debian kernel: [ 0.931827] with environment:\r\nNov 17 04:03:48 debian kernel: [ 0.931828] HOME=/\r\nNov 17 04:03:48 debian kernel: [ 0.931829] TERM=linux\r\nNov 17 04:03:48 debian kernel: [ 0.931829] BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64\r\nNov 17 04:03:48 debian kernel: [ 0.931830] intel_iommu=off\r\nNov 17 04:03:48 debian kernel: [ 0.999458] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\nNov 17 04:03:48 debian kernel: [ 1.000238] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:48 debian kernel: [ 1.026601] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\nNov 17 04:03:48 debian kernel: [ 1.027444] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:48 debian kernel: [ 1.031920] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\nNov 17 04:03:48 debian kernel: [ 1.032814] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:48 debian kernel: [ 1.054934] SCSI subsystem initialized\r\nNov 17 04:03:48 debian kernel: [ 1.061158] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\nNov 17 04:03:48 debian kernel: [ 1.075892] virtio_net virtio1 ens4: renamed from eth0\r\nNov 17 04:03:48 debian kernel: [ 1.085896] scsi host0: Virtio SCSI HBA\r\nNov 17 04:03:48 debian kernel: [ 1.091740] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\nNov 17 04:03:48 debian kernel: [ 1.111855] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\r\nNov 17 04:03:48 debian kernel: [ 1.112925] sd 0:0:1:0: [sda] 4096-byte physical blocks\r\nNov 17 04:03:48 debian kernel: [ 1.113940] sd 0:0:1:0: [sda] Write Protect is off\r\nNov 17 04:03:48 debian kernel: [ 1.114612] sd 0:0:1:0: [sda] Mode Sense: 1f 00 00 08\r\nNov 17 04:03:48 debian kernel: [ 1.114657] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\nNov 17 04:03:48 debian kernel: [ 1.118523] sda: sda1 sda14 sda15\r\nNov 17 04:03:48 debian kernel: [ 1.126791] sd 0:0:1:0: [sda] Attached SCSI disk\r\nNov 17 04:03:48 debian kernel: [ 1.176849] sda: sda1 sda14 sda15\r\nNov 17 04:03:48 debian kernel: [ 1.254250] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\r\nNov 17 04:03:48 debian kernel: [ 1.277595] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\nNov 17 04:03:48 debian kernel: [ 2.283707] fuse: init (API version 7.32)\r\nNov 17 04:03:48 debian kernel: [ 2.348486] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\r\nNov 17 04:03:48 debian kernel: [ 2.488722] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\r\nNov 17 04:03:48 debian kernel: [ 2.759844] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\nNov 17 04:03:48 debian kernel: [ 2.784424] ACPI: Power Button [PWRF]\r\nNov 17 04:03:48 debian kernel: [ 2.785020] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\nNov 17 04:03:48 debian kernel: [ 2.786165] ACPI: Sleep Button [SLPF]\r\nNov 17 04:03:48 debian kernel: [ 2.797491] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\nNov 17 04:03:48 debian kernel: [ 2.818744] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\nNov 17 04:03:48 debian kernel: [ 2.829489] pstore: Using crash dump compression: deflate\r\nNov 17 04:03:48 debian kernel: [ 2.830270] pstore: Registered efi as persistent store backend\r\nNov 17 04:03:48 debian kernel: [ 2.878870] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\nNov 17 04:03:48 debian kernel: [ 2.916156] cryptd: max_cpu_qlen set to 1000\r\nNov 17 04:03:48 debian kernel: [ 2.945181] AVX2 version of gcm_enc/dec engaged.\r\nNov 17 04:03:48 debian kernel: [ 2.945881] AES CTR mode by8 optimization enabled\r\nNov 17 04:03:48 debian kernel: [ 3.379173] audit: type=1400 audit(1700193828.011:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=292 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.382434] audit: type=1400 audit(1700193828.015:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=292 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.465172] audit: type=1400 audit(1700193828.099:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=293 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.506572] audit: type=1400 audit(1700193828.139:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=294 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.625363] audit: type=1400 audit(1700193828.259:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=295 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.655070] audit: type=1400 audit(1700193828.287:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=296 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.720200] audit: type=1400 audit(1700193828.351:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.723210] audit: type=1400 audit(1700193828.359:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.728049] audit: type=1400 audit(1700193828.359:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian systemd[1]: Finished Create list of static device nodes for the current kernel.\r\nNov 17 04:03:48 debian systemd[1]: modprobe@configfs.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module configfs.\r\nNov 17 04:03:48 debian systemd[1]: modprobe@drm.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module drm.\r\nNov 17 04:03:48 debian systemd[1]: modprobe@fuse.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module fuse.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Modules.\r\nNov 17 04:03:48 debian systemd[1]: Finished Remount Root and Kernel File Systems.\r\nNov 17 04:03:48 debian systemd[1]: Mounting FUSE Control File System...\r\nNov 17 04:03:48 debian systemd[1]: Mounting Kernel Configuration File System...\r\nNov 17 04:03:48 debian systemd[1]: Starting Grow File System on /...\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting Flush Journal to Persistent Storage...\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting Load/Save Random Seed...\r\nNov 17 04:03:48 debian systemd-growfs[189]: Successfully resized \"/\" to 9.8G bytes (3584 bytes lost due to blocksize).\r\nNov 17 04:03:48 debian systemd[1]: Starting Apply Kernel Variables...\r\nNov 17 04:03:48 debian systemd[1]: Starting Create System Users...\r\nNov 17 04:03:48 debian systemd[1]: Finished Coldplug All udev Devices.\r\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating group systemd-timesync with gid 999.\r\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating user systemd-timesync (systemd Time Synchronization) with uid 999 and gid 999.\r\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating group systemd-coredump with gid 998.\r\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating user systemd-coredump (systemd Core Dumper) with uid 998 and gid 998.\r\nNov 17 04:03:48 debian systemd[1]: Mounted FUSE Control File System.\r\nNov 17 04:03:48 debian systemd[1]: Mounted Kernel Configuration File System.\r\nNov 17 04:03:48 debian systemd[1]: Finished Grow File System on /.\r\nNov 17 04:03:48 debian systemd[1]: Finished Flush Journal to Persistent Storage.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load/Save Random Seed.\r\nNov 17 04:03:48 debian systemd[1]: Finished Apply Kernel Variables.\r\nNov 17 04:03:48 debian systemd[1]: Finished Create System Users.\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in First Boot Complete being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting Helper to synchronize boot up for ifupdown...\r\nNov 17 04:03:48 debian systemd[1]: Starting Create Static Device Nodes in /dev...\r\nNov 17 04:03:48 debian systemd[1]: Finished Helper to synchronize boot up for ifupdown.\r\nNov 17 04:03:48 debian systemd[1]: Finished Create Static Device Nodes in /dev.\r\nNov 17 04:03:48 debian systemd[1]: Reached target Local File Systems (Pre).\r\nNov 17 04:03:48 debian systemd[1]: Starting Rule-based Manager for Device Events and Files...\r\nNov 17 04:03:48 debian systemd[1]: Started Rule-based Manager for Device Events and Files.\r\nNov 17 04:03:48 debian systemd-udevd[201]: Using default interface naming scheme 'v247'.\r\nNov 17 04:03:48 debian systemd-udevd[201]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nNov 17 04:03:48 debian systemd[1]: Found device /dev/ttyS0.\r\nNov 17 04:03:48 debian systemd-udevd[199]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nNov 17 04:03:48 debian systemd[1]: Found device PersistentDisk 15.\r\nNov 17 04:03:48 debian systemd[1]: Mounting /boot/efi...\r\nNov 17 04:03:48 debian cloud-ifupdown-helper: Generated configuration for ens4\r\nNov 17 04:03:48 debian systemd[1]: Mounted /boot/efi.\r\nNov 17 04:03:48 debian systemd[1]: Reached target Local File Systems.\r\nNov 17 04:03:48 debian systemd[1]: Starting Load AppArmor profiles...\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting Commit a transient machine-id on disk...\r\nNov 17 04:03:48 debian systemd[1]: Starting Create Volatile Files and Directories...\r\nNov 17 04:03:48 debian systemd[1]: Found device Virtio network device.\r\nNov 17 04:03:48 debian apparmor.systemd[265]: Restarting AppArmor\r\nNov 17 04:03:48 debian apparmor.systemd[265]: Reloading AppArmor profiles\r\nNov 17 04:03:48 debian systemd[1]: Finished Create Volatile Files and Directories.\r\nNov 17 04:03:48 debian systemd[1]: Starting Update UTMP about System Boot/Shutdown...\r\nNov 17 04:03:48 debian systemd[1]: Finished Update UTMP about System Boot/Shutdown.\r\nNov 17 04:03:48 debian systemd[1]: etc-machine\\x2did.mount: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Commit a transient machine-id on disk.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load AppArmor profiles.\r\nNov 17 04:03:48 debian systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\r\nNov 17 04:03:48 debian systemd[1]: Reached target System Initialization.\r\nNov 17 04:03:48 debian haveged[298]: haveged: command socket is listening at fd 3\r\nNov 17 04:03:48 debian systemd[1]: Started GCE Workload Certificate refresh timer.\r\nNov 17 04:03:48 debian systemd[1]: Started NSS cache refresh timer.\r\nNov 17 04:03:48 debian systemd[1]: Started Daily Cleanup of Temporary Directories.\r\nNov 17 04:03:48 debian systemd[1]: Listening on D-Bus System Message Bus Socket.\r\nNov 17 04:03:48 debian systemd[1]: Listening on UUID daemon activation socket.\r\nNov 17 04:03:48 debian systemd[1]: Reached target Sockets.\r\nNov 17 04:03:48 debian systemd[1]: Starting Resize root filesystem if needed...\r\nNov 17 04:03:48 debian systemd[1]: Started ifup for ens4.\r\nNov 17 04:03:48 debian google_disk_expand[299]: Checking if filesystem on /dev/sda1 needs resizing\r\nNov 17 04:03:48 debian systemd[1]: Starting Raise network interfaces...\r\nNov 17 04:03:48 debian google_disk_expand[308]: resize2fs 1.46.2 (28-Feb-2021)\r\nNov 17 04:03:48 debian google_disk_expand[308]: The filesystem is already 2588667 (4k) blocks long. Nothing to do!\r\nNov 17 04:03:48 debian google_disk_expand[299]: Done.\r\nNov 17 04:03:48 debian systemd[1]: google-disk-expand.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Resize root filesystem if needed.\r\nNov 17 04:03:48 debian systemd[1]: Reached target Basic System.\r\nNov 17 04:03:48 debian systemd[1]: Started Regular background program processing daemon.\r\nNov 17 04:03:48 debian systemd[1]: Started D-Bus System Message Bus.\r\nNov 17 04:03:48 debian dhclient[321]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:48 debian sh[321]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:48 debian dhclient[321]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:48 debian sh[321]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:48 debian dhclient[321]: All rights reserved.\r\nNov 17 04:03:48 debian sh[321]: All rights reserved.\r\nNov 17 04:03:48 debian dhclient[321]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:48 debian sh[321]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:48 debian dhclient[321]: \r\nNov 17 04:03:48 debian systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting System Logging Service...\r\nNov 17 04:03:48 debian systemd[1]: Starting User Login Management...\r\nNov 17 04:03:48 debian ifup[304]: ifup: waiting for lock on /run/network/ifstate.ens4\r\nNov 17 04:03:48 debian systemd[1]: Started System Logging Service.\r\nNov 17 04:03:48 debian dhclient[321]: Listening on LPF/ens4/42:01:0a:9a:00:0e\r\nNov 17 04:03:48 debian sh[321]: Listening on LPF/ens4/42:01:0a:9a:00:0e\r\nNov 17 04:03:48 debian sh[321]: Sending on LPF/ens4/42:01:0a:9a:00:0e\r\nNov 17 04:03:48 debian sh[321]: Sending on Socket/fallback\r\nNov 17 04:03:48 debian sh[321]: Created duid \"\\000\\001\\000\\001,\\351\\242\\244B\\001\\012\\232\\000\\016\".\r\nNov 17 04:03:48 debian sh[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nNov 17 04:03:48 debian dhclient[321]: Sending on LPF/ens4/42:01:0a:9a:00:0e\r\nNov 17 04:03:48 debian dhclient[321]: Sending on Socket/fallback\r\nNov 17 04:03:48 debian dhclient[321]: Created duid \"\\000\\001\\000\\001,\\351\\242\\244B\\001\\012\\232\\000\\016\".\r\nNov 17 04:03:48 debian dhclient[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nNov 17 04:03:48 debian dhclient[321]: DHCPOFFER of 10.154.0.14 from 169.254.169.254\r\nNov 17 04:03:48 debian sh[321]: DHCPOFFER of 10.154.0.14 from 169.254.169.254\r\nNov 17 04:03:48 debian sh[321]: DHCPREQUEST for 10.154.0.14 on ens4 to 255.255.255.255 port 67\r\nNov 17 04:03:48 debian dhclient[321]: DHCPREQUEST for 10.154.0.14 on ens4 to 255.255.255.255 port 67\r\nNov 17 04:03:48 debian dhclient[321]: DHCPACK of 10.154.0.14 from 169.254.169.254\r\nNov 17 04:03:48 debian sh[321]: DHCPACK of 10.154.0.14 from 169.254.169.254\r\nNov 17 04:03:48 debian systemd[1]: Started User Login Management.\r\nNov 17 04:03:48 debian haveged[298]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\r\nNov 17 04:03:48 debian haveged[298]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\r\nNov 17 04:03:48 debian haveged[298]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B): last entropy estimate 7.99937\r\nNov 17 04:03:48 debian haveged[298]: haveged: fills: 0, generated: 0\r\nNov 17 04:03:48 debian dhclient[321]: bound to 10.154.0.14 -- renewal in 42095 seconds.\r\nNov 17 04:03:48 debian sh[321]: bound to 10.154.0.14 -- renewal in 42095 seconds.\r\nNov 17 04:03:48 debian systemd[1]: e2scrub_reap.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\r\nNov 17 04:03:49 debian dhclient[421]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:49 debian sh[421]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:49 debian dhclient[421]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:49 debian sh[421]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:49 debian dhclient[421]: All rights reserved.\r\nNov 17 04:03:49 debian sh[421]: All rights reserved.\r\nNov 17 04:03:49 debian dhclient[421]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:49 debian sh[421]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:49 debian dhclient[421]: \r\nNov 17 04:03:49 debian dhclient[421]: Listening on Socket/ens4\r\nNov 17 04:03:49 debian sh[421]: Listening on Socket/ens4\r\nNov 17 04:03:49 debian sh[421]: Sending on Socket/ens4\r\nNov 17 04:03:49 debian sh[421]: PRC: Soliciting for leases (INIT).\r\nNov 17 04:03:49 debian dhclient[421]: Sending on Socket/ens4\r\nNov 17 04:03:49 debian sh[454]: ens4=ens4\r\nNov 17 04:03:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\n Starting \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m...\r\nNov 17 04:03:49 debian dhclient[421]: XMT: Solicit on ens4, interval 1040ms.\r\nNov 17 04:03:49 debian systemd[1]: Starting NSS cache refresh...\r\n Starting \u001b[0;1;39mNSS cache refresh\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRaise network interfaces\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork is Online\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Raise network interfaces.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Network.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Network is Online.\r\nNov 17 04:03:49 debian systemd[1]: Starting chrony, an NTP client/server...\r\n Starting \u001b[0;1;39mchrony, an NTP client/server\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Guest Agent...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Started Google OSConfig Agent.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle OSConfig Agent\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Shutdown Scripts...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting Permit User Sessions...\r\n Starting \u001b[0;1;39mPermit User Sessions\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Started Unattended Upgrades Shutdown.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUnattended Upgrades Shutdown\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Google Compute Engine Shutdown Scripts.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mPermit User Sessions\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Permit User Sessions.\r\nNov 17 04:03:49 debian systemd[1]: Started Getty on tty1.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGetty on tty1\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Serial Getty on ttyS0.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSerial Getty on ttyS0\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Login Prompts.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLogin Prompts\u001b[0m.\r\nNov 17 04:03:50 debian chronyd[484]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\r\nNov 17 04:03:50 debian google_oslogin_nss_cache[457]: oslogin_cache_refresh[457]: Refreshing passwd entry cache\r\nNov 17 04:03:50 debian chronyd[484]: Loaded seccomp filter\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mchrony, an NTP client/server\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Synchronized\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt download activities\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started chrony, an NTP client/server.\r\nNov 17 04:03:50 debian systemd[1]: Reached target System Time Synchronized.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily apt download activities.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily apt upgrade and clean activities.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt upgrade and clean activities\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily exim4-base housekeeping.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily exim4-base housekeeping\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Discard unused blocks once a week.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDiscard unused blocks once a week\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily rotation of log files.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily rotation of log files\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily man-db regeneration.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily man-db regeneration\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Reached target Timers.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mTimers\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Starting LSB: exim Mail Transport Agent...\r\n Starting \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m...\r\nNov 17 04:03:50 debian google_oslogin_nss_cache[457]: oslogin_cache_refresh[457]: Refreshing group entry cache\r\nNov 17 04:03:50 debian systemd[1]: google-oslogin-cache.service: Succeeded.\r\nNov 17 04:03:50 debian systemd[1]: Finished NSS cache refresh.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mNSS cache refresh\u001b[0m.\r\nNov 17 04:03:50 debian dhclient[421]: XMT: Solicit on ens4, interval 2030ms.\r\nNov 17 04:03:50 debian exim4[489]: Starting MTA:\r\nNov 17 04:03:50 debian exim4[508]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\r\nNov 17 04:03:51 debian gce_workload_cert_refresh[456]: 2023/11/17 04:03:51: Done\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m.\r\nNov 17 04:03:51 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:03:51 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:03:52 debian google_guest_agent[473]: GCE Agent Started (version 20231115.00)\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m.\r\nNov 17 04:03:52 debian exim4[489]: exim4.\r\nNov 17 04:03:52 debian systemd[1]: Started LSB: exim Mail Transport Agent.\r\nNov 17 04:03:52 debian google_guest_agent[473]: Instance ID changed, running first-boot actions\r\nNov 17 04:03:52 debian OSConfigAgent[474]: 2023-11-17T04:03:52.5997Z OSConfigAgent Info: OSConfig Agent (version 20231010.00-g1) started.\r\nNov 17 04:03:52 debian dhclient[421]: XMT: Solicit on ens4, interval 4070ms.\r\nNov 17 04:03:53 debian google_guest_agent[473]: Starting the scheduler to run jobs\r\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduler - start: []\r\nNov 17 04:03:53 debian google_guest_agent[473]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\r\nNov 17 04:03:53 debian google_guest_agent[473]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started Google Compute Engine Guest Agent.\r\nNov 17 04:03:53 debian systemd[1]: Starting Google Compute Engine Startup Scripts...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Startup Scripts\u001b[0m...\r\nNov 17 04:03:53 debian systemd[1]: Starting OpenBSD Secure Shell server...\r\n Starting \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m...\r\nNov 17 04:03:53 debian google_guest_agent[473]: Starting the scheduler to run jobs\r\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduling job: telemetryJobID\r\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduling job \"telemetryJobID\" to run at 24.000000 hr interval\r\nNov 17 04:03:53 debian google_guest_agent[473]: Successfully scheduled job telemetryJobID\r\nNov 17 04:03:53 debian google_guest_agent[473]: Invoking job \"telemetryJobID\"\r\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduler - added: [now 2023-11-17 04:03:53.201836482 +0000 UTC entry 1 next 2023-11-18 04:03:53 +0000 UTC]\r\nNov 17 04:03:53 debian dhclient[817]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:53 debian dhclient[817]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:53 debian dhclient[817]: All rights reserved.\r\nNov 17 04:03:53 debian dhclient[817]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:53 debian dhclient[817]: \r\nNov 17 04:03:53 debian dhclient[817]: Listening on Socket/ens4\r\nNov 17 04:03:53 debian dhclient[817]: Sending on Socket/ens4\r\nNov 17 04:03:53 debian dhclient[817]: Created duid \"\\000\\001\\000\\001,\\351\\242\\251B\\001\\012\\232\\000\\016\".\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started OpenBSD Secure Shell server.\r\nNov 17 04:03:53 debian systemd[1]: Stopping User Login Management...\r\n Stopping \u001b[0;1;39mUser Login Management\u001b[0m...\r\nNov 17 04:03:53 debian systemd[1]: systemd-logind.service: Succeeded.\r\nNov 17 04:03:53 debian systemd[1]: Stopped User Login Management.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mUser Login Management\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\nNov 17 04:03:53 debian google_guest_agent[473]: Created google sudoers file\r\nNov 17 04:03:53 debian google_guest_agent[473]: Creating user foo.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: modprobe@drm.service: Succeeded.\r\nNov 17 04:03:53 debian systemd[1]: Finished Load Kernel Module drm.\r\nNov 17 04:03:53 debian systemd[1]: Starting User Login Management...\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started User Login Management.\r\nNov 17 04:03:53 debian systemd[1]: Stopping Regular background program processing daemon...\r\n Stopping \u001b[0;1;39mRegular background program processing daemon\u001b[0m...\r\nNov 17 04:03:53 debian systemd[1]: cron.service: Succeeded.\r\nNov 17 04:03:53 debian systemd[1]: Stopped Regular background program processing daemon.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started Regular background program processing daemon.\r\nNov 17 04:03:53 debian google_metadata_script_runner[808]: Starting startup scripts (version dev).\r\nNov 17 04:03:53 debian google_metadata_script_runner[808]: Found startup-script in metadata.\r\nNov 17 04:03:53 debian systemd[1]: Reloading OpenBSD Secure Shell server.\r\nNov 17 04:03:53 debian systemd[1]: google-guest-agent.service: Got notification message from PID 848, but reception only permitted for main PID 473\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: ssh.service: Control process exited, code=killed, status=15/TERM\r\nNov 17 04:03:53 debian systemd[1]: ssh.service: Failed with result 'signal'.\r\nNov 17 04:03:53 debian systemd[1]: Stopped OpenBSD Secure Shell server.\r\nNov 17 04:03:53 debian google_guest_agent[473]: ERROR oslogin.go:158 Error reloading service: Job for ssh.service canceled..\r\nNov 17 04:03:53 debian google_guest_agent[473]: Updating keys for user foo.\r\nNov 17 04:03:53 debian systemd[1]: Starting OpenBSD Secure Shell server...\r\n Starting \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started OpenBSD Secure Shell server.\r\nNov 17 04:03:54 debian chronyd[484]: Selected source 169.254.169.254 (metadata.google.internal)\r\n\r\r\nDebian GNU/Linux 11 faulty-linux-ssh ttyS0\r\n\r\nfaulty-linux-ssh login: Nov 17 04:03:56 debian dhclient[421]: XMT: Solicit on ens4, interval 8010ms.\r\nNov 17 04:04:04 debian dhclient[421]: XMT: Solicit on ens4, interval 15860ms.\r\nNov 17 04:04:20 debian dhclient[421]: XMT: Solicit on ens4, interval 31990ms.\r\nNov 17 04:04:52 debian dhclient[421]: XMT: Solicit on ens4, interval 62240ms.\r\nNov 17 04:05:55 debian dhclient[421]: XMT: Solicit on ens4, interval 128800ms.\r\nNov 17 04:08:04 debian dhclient[421]: XMT: Solicit on ens4, interval 117650ms.\r\nNov 17 04:10:01 debian dhclient[421]: XMT: Solicit on ens4, interval 127600ms.\r\nNov 17 04:12:09 debian dhclient[421]: XMT: Solicit on ens4, interval 123590ms.\r\nNov 17 04:13:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:13:50 debian gce_workload_cert_refresh[895]: 2023/11/17 04:13:50: Done\r\nNov 17 04:13:50 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:13:50 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:14:13 debian dhclient[421]: XMT: Solicit on ens4, interval 118200ms.\r\nNov 17 04:16:11 debian dhclient[421]: XMT: Solicit on ens4, interval 109360ms.\r\nNov 17 04:18:01 debian dhclient[421]: XMT: Solicit on ens4, interval 128660ms.\r\nNov 17 04:18:45 debian systemd[1]: Starting Cleanup of Temporary Directories...\r\nNov 17 04:18:45 debian systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\r\nNov 17 04:18:45 debian systemd[1]: Finished Cleanup of Temporary Directories.\r\nNov 17 04:20:09 debian dhclient[421]: XMT: Solicit on ens4, interval 115450ms.\r\nNov 17 04:22:05 debian dhclient[421]: XMT: Solicit on ens4, interval 129250ms.\r\nNov 17 04:23:50 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:23:50 debian gce_workload_cert_refresh[910]: 2023/11/17 04:23:50: Done\r\nNov 17 04:23:50 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:23:50 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:24:14 debian dhclient[421]: XMT: Solicit on ens4, interval 124470ms.\r\n", "start": "0", "next": "103446", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh/serialPortOutput" } ================================================ FILE: test-data/gce2/json-dumps/compute-serial-port-output-faulty-windows-ssh.json ================================================ { "kind": "compute#serialPortOutput", "contents":"empty\nempty", "start": "0", "next": "311872", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh/serialPortOutput" } ================================================ FILE: test-data/gce2/json-dumps/compute-serial-port-output-valid-linux-ssh.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n\r\n\u001b[0m\u001b[30m\u001b[47mWelcome to GRUB!\n\r\n\r\u001b[0m\u001b[37m\u001b[40m\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m\u001b[H\u001b[J\u001b[1;1H\u001b[H\u001b[J\u001b[1;1H\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\n\r\n\r\n\r\n\rLoading Linux 5.10.0-26-cloud-amd64 ...Loading Linux 5.10.0-26-cloud-amd64 ...\n\r\n\rLoading initial ramdisk ...Loading initial ramdisk ...\n\r\n\rerror: no suitable video mode found.\n\rerror: no suitable video mode found.\n\rBooting in blind modeBooting in blind mode\n\r\n\r[ 0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\r\n[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.000000] BIOS-provided physical RAM map:\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\r\n[ 0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\r\n[ 0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\r\n[ 0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\r\n[ 0.000000] printk: bootconsole [earlyser0] enabled\r\n[ 0.000000] NX (Execute Disable) protection: active\r\n[ 0.000000] efi: EFI v2.70 by EDK II\r\n[ 0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \r\n[ 0.000000] secureboot: Secure boot disabled\r\n[ 0.000000] SMBIOS 2.4 present.\r\n[ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\r\n[ 0.000000] Hypervisor detected: KVM\r\n[ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\n[ 0.000000] kvm-clock: cpu 0, msr c201001, primary cpu clock\r\n[ 0.000000] kvm-clock: using sched offset of 6456270974 cycles\r\n[ 0.000734] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\n[ 0.002884] tsc: Detected 2200.158 MHz processor\r\n[ 0.003587] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\r\n[ 0.004363] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nMemory KASLR using RDRAND RDTSC...\r\n[ 0.005841] Using GB pages for direct mapping\r\n[ 0.006760] RAMDISK: [mem 0x2327f000-0x24000fff]\r\n[ 0.007361] ACPI: Early table checksum verification disabled\r\n[ 0.008083] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\r\n[ 0.008863] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\n[ 0.010056] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\n[ 0.011203] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\n[ 0.012333] ACPI: FACS 0x00000000261F2000 000040\r\n[ 0.012966] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\n[ 0.014054] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\n[ 0.015175] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\n[ 0.016277] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\n[ 0.017366] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\n[ 0.018500] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\n[ 0.019702] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\r\n[ 0.020615] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\r\n[ 0.021530] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\r\n[ 0.022454] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\r\n[ 0.023355] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\r\n[ 0.024340] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\r\n[ 0.025411] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\r\n[ 0.026702] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\r\n[ 0.027613] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\r\n[ 0.028637] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\n[ 0.029245] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\n[ 0.030009] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\r\n[ 0.030872] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\u003e [mem 0x00000000-0x265dffff]\r\n[ 0.032225] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\r\n[ 0.033370] Zone ranges:\r\n[ 0.033725] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\n[ 0.034554] DMA32 [mem 0x0000000001000000-0x00000000265dffff]\r\n[ 0.035451] Normal empty\r\n[ 0.035842] Device empty\r\n[ 0.036232] Movable zone start for each node\r\n[ 0.036778] Early memory node ranges\r\n[ 0.037243] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\n[ 0.038094] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\n[ 0.038947] node 0: [mem 0x0000000000100000-0x0000000025eecfff]\r\n[ 0.039805] node 0: [mem 0x00000000261ff000-0x00000000265dffff]\r\n[ 0.040633] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\r\n[ 0.041989] On node 0, zone DMA: 1 pages in unavailable ranges\r\n[ 0.041990] On node 0, zone DMA: 11 pages in unavailable ranges\r\n[ 0.042798] On node 0, zone DMA: 104 pages in unavailable ranges\r\n[ 0.045104] On node 0, zone DMA32: 786 pages in unavailable ranges\r\n[ 0.046017] On node 0, zone DMA32: 6688 pages in unavailable ranges\r\n[ 0.047186] ACPI: PM-Timer IO Port: 0xb008\r\n[ 0.048565] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\n[ 0.049404] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\n[ 0.050293] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\n[ 0.051137] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\n[ 0.051992] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\n[ 0.052890] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\n[ 0.053812] Using ACPI (MADT) for SMP configuration information\r\n[ 0.054586] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\r\n[ 0.055292] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\n[ 0.056302] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\n[ 0.057269] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\n[ 0.058272] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\n[ 0.059273] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\r\n[ 0.060238] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\r\n[ 0.061203] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\r\n[ 0.062169] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\r\n[ 0.063136] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\r\n[ 0.064110] [mem 0x26600000-0xffffffff] available for PCI devices\r\n[ 0.064881] Booting paravirtualized kernel on KVM\r\n[ 0.065481] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\n[ 0.071199] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\r\n[ 0.072527] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\r\n[ 0.073444] kvm-guest: PV spinlocks disabled, single CPU\r\n[ 0.074171] Built 1 zonelists, mobility grouping on. Total pages: 150673\r\n[ 0.075108] Policy zone: DMA32\r\n[ 0.075690] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.078655] DMAR: IOMMU disabled\r\n[ 0.079286] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\n[ 0.080546] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\r\n[ 0.081583] mem auto-init: stack:off, heap alloc:on, heap free:off\r\n[ 0.084292] Memory: 208948K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\r\n[ 0.086299] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\r\n[ 0.087268] Kernel/User page tables isolation: enabled\r\nPoking KASLR using RDRAND RDTSC...\r\n[ 0.088415] ftrace: allocating 33918 entries in 133 pages\r\n[ 0.108935] ftrace: allocated 133 pages with 3 groups\r\n[ 0.110330] rcu: Hierarchical RCU implementation.\r\n[ 0.110974] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\r\n[ 0.111865] \tRude variant of Tasks RCU enabled.\r\n[ 0.112441] \tTracing variant of Tasks RCU enabled.\r\n[ 0.113053] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\n[ 0.114064] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\r\n[ 0.119409] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\r\n[ 0.120483] random: crng init done\r\n[ 0.120945] Console: colour dummy device 80x25\r\n[ 0.121763] printk: console [tty0] enabled\r\n[ 0.122413] printk: console [ttyS0] enabled\r\n[ 0.122413] printk: console [ttyS0] enabled\r\n[ 0.123526] printk: bootconsole [earlyser0] disabled\r\n[ 0.123526] printk: bootconsole [earlyser0] disabled\r\n[ 0.124856] ACPI: Core revision 20200925\r\n[ 0.125499] APIC: Switch to symmetric I/O mode setup\r\n[ 0.126669] x2apic enabled\r\n[ 0.129453] Switched APIC routing to physical x2apic.\r\n[ 0.134129] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\n[ 0.135170] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\r\n[ 0.136571] Calibrating delay loop (skipped) preset value.. 4400.31 BogoMIPS (lpj=8800632)\r\n[ 0.140680] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\n[ 0.141412] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\n[ 0.142247] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\n[ 0.143390] Spectre V2 : Mitigation: IBRS\r\n[ 0.143939] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\n[ 0.144568] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\n[ 0.145466] RETBleed: Mitigation: IBRS\r\n[ 0.145988] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\n[ 0.147108] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\n[ 0.148575] MDS: Mitigation: Clear CPU buffers\r\n[ 0.149183] TAA: Mitigation: Clear CPU buffers\r\n[ 0.149789] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\n[ 0.150817] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\n[ 0.151849] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\n[ 0.152568] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\n[ 0.153445] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\n[ 0.154319] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\n[ 0.174317] Freeing SMP alternatives memory: 32K\r\n[ 0.176616] pid_max: default: 32768 minimum: 301\r\n[ 0.189921] LSM: Security Framework initializing\r\n[ 0.190777] Yama: disabled by default; enable with sysctl kernel.yama.*\r\n[ 0.191718] AppArmor: AppArmor initialized\r\n[ 0.192315] TOMOYO Linux initialized\r\n[ 0.192585] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\n[ 0.193586] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\n[ 0.303707] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\n[ 0.304567] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\n[ 0.304567] rcu: Hierarchical SRCU implementation.\r\n[ 0.304567] NMI watchdog: Perf NMI watchdog permanently disabled\r\n[ 0.304607] smp: Bringing up secondary CPUs ...\r\n[ 0.305254] smp: Brought up 1 node, 1 CPU\r\n[ 0.305804] smpboot: Max logical packages: 1\r\n[ 0.306388] smpboot: Total of 1 processors activated (4400.31 BogoMIPS)\r\n[ 0.309894] node 0 deferred pages initialised in 4ms\r\n[ 0.310840] devtmpfs: initialized\r\n[ 0.311414] x86/mm: Memory block size: 128MB\r\n[ 0.312326] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\r\n[ 0.312624] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\n[ 0.313984] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\r\n[ 0.315079] NET: Registered protocol family 16\r\n[ 0.316708] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\r\n[ 0.317887] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\n[ 0.319088] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\n[ 0.320255] audit: initializing netlink subsys (disabled)\r\n[ 0.320680] thermal_sys: Registered thermal governor 'fair_share'\r\n[ 0.320681] thermal_sys: Registered thermal governor 'bang_bang'\r\n[ 0.321534] thermal_sys: Registered thermal governor 'step_wise'\r\n[ 0.322340] thermal_sys: Registered thermal governor 'user_space'\r\n[ 0.323166] thermal_sys: Registered thermal governor 'power_allocator'\r\n[ 0.324578] audit: type=2000 audit(1700193823.829:1): state=initialized audit_enabled=0 res=1\r\n[ 0.326750] cpuidle: using governor ladder\r\n[ 0.327347] cpuidle: using governor menu\r\n[ 0.327968] ACPI: bus type PCI registered\r\n[ 0.328539] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\n[ 0.328668] PCI: Using configuration type 1 for base access\r\n[ 0.330144] Kprobes globally optimized\r\n[ 0.330823] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\n[ 0.332570] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\n[ 0.460132] ACPI: Added _OSI(Module Device)\r\n[ 0.460570] ACPI: Added _OSI(Processor Device)\r\n[ 0.461236] ACPI: Added _OSI(3.0 _SCP Extensions)\r\n[ 0.461875] ACPI: Added _OSI(Processor Aggregator Device)\r\n[ 0.462629] ACPI: Added _OSI(Linux-Dell-Video)\r\n[ 0.463234] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\n[ 0.463951] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\n[ 0.465493] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\n[ 0.467274] ACPI: Interpreter enabled\r\n[ 0.467821] ACPI: (supports S0 S3 S4 S5)\r\n[ 0.468579] ACPI: Using IOAPIC for interrupt routing\r\n[ 0.469275] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\n[ 0.470653] ACPI: Enabled 16 GPEs in block 00 to 0F\r\n[ 0.473239] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\n[ 0.474122] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\n[ 0.475162] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\n[ 0.477146] PCI host bridge to bus 0000:00\r\n[ 0.477709] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\n[ 0.478715] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\n[ 0.479663] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\n[ 0.480578] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\r\n[ 0.481576] pci_bus 0000:00: root bus resource [bus 00-ff]\r\n[ 0.482365] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\n[ 0.486019] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\n[ 0.500825] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\n[ 0.519681] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\n[ 0.520874] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\n[ 0.528575] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\n[ 0.533672] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\r\n[ 0.548861] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\n[ 0.555665] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\n[ 0.560572] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\r\n[ 0.573906] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\r\n[ 0.580574] pci 0000:00:05.0: reg 0x10: [io 0xc080-0xc09f]\r\n[ 0.586726] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\r\n[ 0.601296] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\n[ 0.603312] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\n[ 0.605636] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\n[ 0.607598] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\n[ 0.611697] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\n[ 0.612813] iommu: Default domain type: Translated \r\n[ 0.613589] vgaarb: loaded\r\n[ 0.614061] Registered efivars operations\r\n[ 0.614787] NetLabel: Initializing\r\n[ 0.615327] NetLabel: domain hash size = 128\r\n[ 0.615923] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\n[ 0.616587] NetLabel: unlabeled traffic allowed by default\r\n[ 0.617348] PCI: Using ACPI for IRQ routing\r\n[ 0.618056] clocksource: Switched to clocksource kvm-clock\r\n[ 0.628891] VFS: Disk quotas dquot_6.6.0\r\n[ 0.629490] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\n[ 0.630665] AppArmor: AppArmor Filesystem Enabled\r\n[ 0.631324] pnp: PnP ACPI init\r\n[ 0.632174] pnp: PnP ACPI: found 7 devices\r\n[ 0.638068] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\n[ 0.639390] NET: Registered protocol family 2\r\n[ 0.640279] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\r\n[ 0.642617] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\r\n[ 0.643878] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\r\n[ 0.644963] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\n[ 0.645946] TCP: Hash tables configured (established 8192 bind 8192)\r\n[ 0.647263] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\r\n[ 0.648178] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\r\n[ 0.649145] NET: Registered protocol family 1\r\n[ 0.649746] NET: Registered protocol family 44\r\n[ 0.650360] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\n[ 0.651189] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\n[ 0.652018] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\n[ 0.653023] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\r\n[ 0.654013] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\n[ 0.654965] PCI: CLS 0 bytes, default 64\r\n[ 0.655545] Trying to unpack rootfs image as initramfs...\r\n[ 0.868747] Freeing initrd memory: 13832K\r\n[ 0.869409] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\r\n[ 0.870790] clocksource: Switched to clocksource tsc\r\n[ 0.871684] Initialise system trusted keyrings\r\n[ 0.872370] Key type blacklist registered\r\n[ 0.872996] workingset: timestamp_bits=36 max_order=18 bucket_order=0\r\n[ 0.874768] zbud: loaded\r\n[ 0.875451] Key type asymmetric registered\r\n[ 0.876015] Asymmetric key parser 'x509' registered\r\n[ 0.876717] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\n[ 0.877753] io scheduler mq-deadline registered\r\n[ 0.878944] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\n[ 0.879891] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\n[ 0.881103] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\n[ 0.882343] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\n[ 0.883609] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\n[ 0.884960] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\n[ 0.886134] i8042: Warning: Keylock active\r\n[ 0.888083] serio: i8042 KBD port at 0x60,0x64 irq 1\r\n[ 0.888821] serio: i8042 AUX port at 0x60,0x64 irq 12\r\n[ 0.889640] rtc_cmos 00:00: RTC can wake from S4\r\n[ 0.890965] rtc_cmos 00:00: registered as rtc0\r\n[ 0.891673] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:44 UTC (1700193824)\r\n[ 0.892826] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\n[ 0.893666] intel_pstate: CPU model not supported\r\n[ 0.894500] NET: Registered protocol family 10\r\n[ 0.902476] Segment Routing with IPv6\r\n[ 0.903051] mip6: Mobile IPv6\r\n[ 0.903490] NET: Registered protocol family 17\r\n[ 0.904345] IPI shorthand broadcast: enabled\r\n[ 0.904948] sched_clock: Marking stable (892139515, 12093408)-\u003e(906097741, -1864818)\r\n[ 0.906042] registered taskstats version 1\r\n[ 0.906630] Loading compiled-in X.509 certificates\r\n[ 0.939254] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\n[ 0.940959] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\n[ 0.942356] Key type .fscrypt registered\r\n[ 0.942899] Key type fscrypt-provisioning registered\r\n[ 0.943613] AppArmor: AppArmor sha1 policy hashing enabled\r\n[ 0.945910] Freeing unused decrypted memory: 2036K\r\n[ 0.947243] Freeing unused kernel image (initmem) memory: 2468K\r\n[ 0.956128] Write protecting the kernel read-only data: 22528k\r\n[ 0.957663] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\n[ 0.958870] Freeing unused kernel image (rodata/data gap) memory: 1236K\r\n[ 0.960268] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 0.961209] x86/mm: Checking user space page tables\r\n[ 0.961951] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 0.962845] Run /init as init process\r\nLoading, please wait...\r\nStarting version 247.3-7+deb11u4\r\n[ 1.027130] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\n[ 1.027936] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\n[ 1.056157] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\n[ 1.056936] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\n[ 1.062192] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\n[ 1.062992] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\n[ 1.084419] SCSI subsystem initialized\r\n[ 1.093724] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\n[ 1.118084] virtio_net virtio1 ens4: renamed from eth0\r\n[ 1.126364] scsi host0: Virtio SCSI HBA\r\n[ 1.133045] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\n[ 1.153482] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\r\n[ 1.154594] sd 0:0:1:0: [sda] 4096-byte physical blocks\r\n[ 1.155471] sd 0:0:1:0: [sda] Write Protect is off\r\n[ 1.156440] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\n[ 1.160803] sda: sda1 sda14 sda15\r\n[ 1.172566] sd 0:0:1:0: [sda] Attached SCSI disk\r\nBegin: Loading essential drivers ... done.\r\nBegin: Running /scripts/init-premount ... done.\r\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\r\nBegin: Running /scripts/local[ 1.198383] gce-disk-expand: Resizing partition on \r\n-premount ... [ 1.222901] sda: sda1 sda14 sda15\r\n[ 1.234471] gce-disk-expand: Disk /dev/sda1 doesn't need resizing.\r\ndone.\r\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\r\n[/sbin/fsck.ext4 (1) -- /dev/sda1] fsck.ext4 -a -C0 /dev/sda1 \r\n/dev/sda1: clean, 82191/647168 files, 583028/2588667 blocks\r\ndone.\r\n[ 1.303453] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\r\ndone.\r\nBegin: Running /scripts/local-bottom ... done.\r\nBegin: Running /scripts/init-bottom ... done.\r\n[ 1.328083] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\n[ 1.437623] systemd[1]: Inserted module 'autofs4'\r\n[ 1.493324] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\r\n[ 1.496588] systemd[1]: Detected virtualization kvm.\r\n[ 1.497395] systemd[1]: Detected architecture x86-64.\r\n\r\nWelcome to \u001b[1mDebian GNU/Linux 11 (bullseye)\u001b[0m!\r\n\r\n[ 1.508540] systemd[1]: Set hostname to \u003cdebian\u003e.\r\n[ 1.511050] systemd[1]: Initializing machine ID from KVM UUID.\r\n[ 1.511999] systemd[1]: Installed transient /etc/machine-id file.\r\n[ 1.972842] systemd[1]: Condition check resulted in Root Slice being skipped.\r\n[ 1.974079] systemd[1]: Condition check resulted in System Slice being skipped.\r\n[ 1.975658] systemd[1]: Queued start job for default target Graphical Interface.\r\n[ 1.977660] systemd[1]: Created slice system-getty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-getty.slice\u001b[0m.\r\n[ 1.988412] systemd[1]: Created slice system-modprobe.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-modprobe.slice\u001b[0m.\r\n[ 2.000470] systemd[1]: Created slice system-serial\\x2dgetty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-serial\\x2dgetty.slice\u001b[0m.\r\n[ 2.012408] systemd[1]: Created slice system-systemd\\x2dgrowfs.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-systemd\\x2dgrowfs.slice\u001b[0m.\r\n[ 2.024395] systemd[1]: Created slice User and Session Slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39mUser and Session Slice\u001b[0m.\r\n[ 2.036241] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDispatch Password …ts to Console Directory Watch\u001b[0m.\r\n[ 2.048216] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mForward Password R…uests to Wall Directory Watch\u001b[0m.\r\n[ 2.060352] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\r\n[\u001b[0;32m OK \u001b[0m] Set up automount \u001b[0;1;39mArbitrary…s File System Automount Point\u001b[0m.\r\n[ 2.072181] systemd[1]: Reached target Local Encrypted Volumes.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal Encrypted Volumes\u001b[0m.\r\n[ 2.084183] systemd[1]: Reached target Paths.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mPaths\u001b[0m.\r\n[ 2.096149] systemd[1]: Reached target Remote File Systems.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mRemote File Systems\u001b[0m.\r\n[ 2.108140] systemd[1]: Reached target Slices.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSlices\u001b[0m.\r\n[ 2.120166] systemd[1]: Reached target Swap.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSwap\u001b[0m.\r\n[ 2.132147] systemd[1]: Reached target System Time Set.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Set\u001b[0m.\r\n[ 2.144334] systemd[1]: Listening on Syslog Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mSyslog Socket\u001b[0m.\r\n[ 2.156291] systemd[1]: Listening on fsck to fsckd communication Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mfsck to fsckd communication Socket\u001b[0m.\r\n[ 2.168285] systemd[1]: Listening on initctl Compatibility Named Pipe.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39minitctl Compatibility Named Pipe\u001b[0m.\r\n[ 2.180454] systemd[1]: Listening on Journal Audit Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Audit Socket\u001b[0m.\r\n[ 2.192301] systemd[1]: Listening on Journal Socket (/dev/log).\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket (/dev/log)\u001b[0m.\r\n[ 2.204323] systemd[1]: Listening on Journal Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket\u001b[0m.\r\n[ 2.216869] systemd[1]: Listening on udev Control Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Control Socket\u001b[0m.\r\n[ 2.228296] systemd[1]: Listening on udev Kernel Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Kernel Socket\u001b[0m.\r\n[ 2.241091] systemd[1]: Mounting Huge Pages File System...\r\n Mounting \u001b[0;1;39mHuge Pages File System\u001b[0m...\r\n[ 2.252968] systemd[1]: Mounting POSIX Message Queue File System...\r\n Mounting \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m...\r\n[ 2.264934] systemd[1]: Mounting Kernel Debug File System...\r\n Mounting \u001b[0;1;39mKernel Debug File System\u001b[0m...\r\n[ 2.276955] systemd[1]: Mounting Kernel Trace File System...\r\n Mounting \u001b[0;1;39mKernel Trace File System\u001b[0m...\r\n[ 2.289000] systemd[1]: Starting Create list of static device nodes for the current kernel...\r\n Starting \u001b[0;1;39mCreate list of st…odes for the current kernel\u001b[0m...\r\n[ 2.300930] systemd[1]: Starting Load Kernel Module configfs...\r\n Starting \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m...\r\n[ 2.312919] systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\n[ 2.324883] systemd[1]: Starting Load Kernel Module fuse...\r\n Starting \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m...\r\n[ 2.335869] fuse: init (API version 7.32)\r\n[ 2.337237] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\r\n[ 2.338529] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\r\n[ 2.341100] systemd[1]: Starting Journal Service...\r\n Starting \u001b[0;1;39mJournal Service\u001b[0m...\r\n[ 2.353548] systemd[1]: Starting Load Kernel Modules...\r\n Starting \u001b[0;1;39mLoad Kernel Modules\u001b[0m...\r\n[ 2.364968] systemd[1]: Starting Remount Root and Kernel File Systems...\r\n Starting \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m...\r\n[ 2.376830] systemd[1]: Starting Coldplug All udev Devices...\r\n Starting \u001b[0;1;39mColdplug All udev Devices\u001b[0m...\r\n[ 2.389695] systemd[1]: Mounted Huge Pages File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mHuge Pages File System\u001b[0m.\r\n[ 2.392342] systemd[1]: Mounted POSIX Message Queue File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m.\r\n[ 2.396356] systemd[1]: Mounted Kernel Debug File System.\r\n[ 2.397669] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Debug File System\u001b[0m.\r\n[ 2.412895] systemd[1]: Mounted Kernel Trace File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Trace File System\u001b[0m.\r\n[ 2.424280] systemd[1]: Started Journal Service.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mJournal Service\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate list of st… nodes for the current kernel\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Modules\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m.\r\n Mounting \u001b[0;1;39mFUSE Control File System\u001b[0m...\r\n Mounting \u001b[0;1;39mKernel Configuration File System\u001b[0m...\r\n Starting \u001b[0;1;39mGrow File System on /\u001b[0m...\r\n Starting \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m...\r\n[ 2.550327] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\r\n Starting \u001b[0;1;39mLoad/Save Random Seed\u001b[0m...\r\n[ 2.566378] systemd-journald[180]: Received client request to flush runtime journal.\r\n Starting \u001b[0;1;39mApply Kernel Variables\u001b[0m...\r\n Starting \u001b[0;1;39mCreate System Users\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mColdplug All udev Devices\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mFUSE Control File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Configuration File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGrow File System on /\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad/Save Random Seed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mApply Kernel Variables\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate System Users\u001b[0m.\r\n Starting \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems (Pre)\u001b[0m.\r\n Starting \u001b[0;1;39mRule-based Manage…for Device Events and Files\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRule-based Manager for Device Events and Files\u001b[0m.\r\n[ 2.817742] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\n[ 2.832340] ACPI: Power Button [PWRF]\r\n[ 2.832937] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\n[ 2.833954] ACPI: Sleep Button [SLPF]\r\n[ 2.858324] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\n[ 2.868718] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39m/dev/ttyS0\u001b[0m.\r\n[ 2.876076] pstore: Using crash dump compression: deflate\r\n[ 2.876906] pstore: Registered efi as persistent store backend\r\n[ 2.921526] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\n[ 2.957276] cryptd: max_cpu_qlen set to 1000\r\n[ 2.992561] AVX2 version of gcm_enc/dec engaged.\r\n[ 2.993287] AES CTR mode by8 optimization enabled\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mPersistentDisk 15\u001b[0m.\r\n Mounting \u001b[0;1;39m/boot/efi\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39m/boot/efi\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mVirtio network device\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems\u001b[0m.\r\n Starting \u001b[0;1;39mLoad AppArmor profiles\u001b[0m...\r\n Starting \u001b[0;1;39mCommit a transient machine-id on disk\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m.\r\n Starting \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCommit a transient machine-id on disk\u001b[0m.\r\n[ 3.408377] audit: type=1400 audit(1700193827.016:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=292 comm=\"apparmor_parser\"\r\n[ 3.411744] audit: type=1400 audit(1700193827.016:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=292 comm=\"apparmor_parser\"\r\n[ 3.496816] audit: type=1400 audit(1700193827.104:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=293 comm=\"apparmor_parser\"\r\n[ 3.538548] audit: type=1400 audit(1700193827.144:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=294 comm=\"apparmor_parser\"\r\n[ 3.657331] audit: type=1400 audit(1700193827.264:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=295 comm=\"apparmor_parser\"\r\n[ 3.687179] audit: type=1400 audit(1700193827.292:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=296 comm=\"apparmor_parser\"\r\n[ 3.752802] audit: type=1400 audit(1700193827.360:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=297 comm=\"apparmor_parser\"\r\n[ 3.755808] audit: type=1400 audit(1700193827.360:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=297 comm=\"apparmor_parser\"\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad AppAr[ 3.760565] audit: type=1400 audit(1700193827.364:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=297 comm=\"apparmor_parser\"\r\nmor profiles\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Initialization\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGCE Workload Certificate refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mNSS cache refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily Cleanup of Temporary Directories\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mD-Bus System Message Bus Socket\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mUUID daemon activation socket\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSockets\u001b[0m.\r\n Starting \u001b[0;1;39mResize root filesystem if needed\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mifup for ens4\u001b[0m.\r\n Starting \u001b[0;1;39mRaise network interfaces\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mResize root filesystem if needed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mBasic System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mD-Bus System Message Bus\u001b[0m.\r\n Starting \u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\u001b[0m...\r\n Starting \u001b[0;1;39mSystem Logging Service\u001b[0m...\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSystem Logging Service\u001b[0m.\r\nNov 17 04:03:47 debian kernel: [ 0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\r\nNov 17 04:03:47 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-provided physical RAM map:\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] printk: bootconsole [earlyser0] enabled\r\nNov 17 04:03:47 debian kernel: [ 0.000000] NX (Execute Disable) protection: active\r\nNov 17 04:03:47 debian kernel: [ 0.000000] efi: EFI v2.70 by EDK II\r\nNov 17 04:03:47 debian kernel: [ 0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \r\nNov 17 04:03:47 debian kernel: [ 0.000000] secureboot: Secure boot disabled\r\nNov 17 04:03:47 debian kernel: [ 0.000000] SMBIOS 2.4 present.\r\nNov 17 04:03:47 debian kernel: [ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\r\nNov 17 04:03:47 debian kernel: [ 0.000000] Hypervisor detected: KVM\r\nNov 17 04:03:47 debian kernel: [ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\nNov 17 04:03:47 debian kernel: [ 0.000000] kvm-clock: cpu 0, msr c201001, primary cpu clock\r\nNov 17 04:03:47 debian kernel: [ 0.000000] kvm-clock: using sched offset of 6456270974 cycles\r\nNov 17 04:03:47 debian kernel: [ 0.000734] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\nNov 17 04:03:47 debian kernel: [ 0.002884] tsc: Detected 2200.158 MHz processor\r\nNov 17 04:03:47 debian kernel: [ 0.003576] e820: update [mem 0x00000000-0x00000fff] usable ==\u003e reserved\r\nNov 17 04:03:47 debian kernel: [ 0.003579] e820: remove [mem 0x000a0000-0x000fffff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.003587] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\r\nNov 17 04:03:47 debian kernel: [ 0.004341] MTRR default type: write-back\r\nNov 17 04:03:47 debian kernel: [ 0.004342] MTRR fixed ranges enabled:\r\nNov 17 04:03:47 debian kernel: [ 0.004343] 00000-9FFFF write-back\r\nNov 17 04:03:47 debian kernel: [ 0.004344] A0000-FFFFF uncachable\r\nNov 17 04:03:47 debian kernel: [ 0.004345] MTRR variable ranges enabled:\r\nNov 17 04:03:47 debian kernel: [ 0.004347] 0 base 000080000000 mask 3FFF80000000 uncachable\r\nNov 17 04:03:47 debian kernel: [ 0.004347] 1 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004348] 2 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004349] 3 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004349] 4 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004350] 5 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004350] 6 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004351] 7 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004363] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nNov 17 04:03:47 debian kernel: [ 0.005841] Using GB pages for direct mapping\r\nNov 17 04:03:47 debian kernel: [ 0.006760] RAMDISK: [mem 0x2327f000-0x24000fff]\r\nNov 17 04:03:47 debian kernel: [ 0.007361] ACPI: Early table checksum verification disabled\r\nNov 17 04:03:47 debian kernel: [ 0.008083] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\r\nNov 17 04:03:47 debian kernel: [ 0.008863] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\nNov 17 04:03:47 debian kernel: [ 0.010056] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.011203] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.012333] ACPI: FACS 0x00000000261F2000 000040\r\nNov 17 04:03:47 debian kernel: [ 0.012966] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\nNov 17 04:03:47 debian kernel: [ 0.014054] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.015175] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.016277] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.017366] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.018500] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.019702] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\r\nNov 17 04:03:47 debian kernel: [ 0.020615] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\r\nNov 17 04:03:47 debian kernel: [ 0.021530] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\r\nNov 17 04:03:47 debian kernel: [ 0.022454] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\r\nNov 17 04:03:47 debian kernel: [ 0.023355] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\r\nNov 17 04:03:47 debian kernel: [ 0.024340] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\r\nNov 17 04:03:47 debian kernel: [ 0.025411] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\r\nNov 17 04:03:47 debian kernel: [ 0.026702] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\r\nNov 17 04:03:47 debian kernel: [ 0.027613] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\r\nNov 17 04:03:47 debian kernel: [ 0.028605] ACPI: Local APIC address 0xfee00000\r\nNov 17 04:03:47 debian kernel: [ 0.028637] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\nNov 17 04:03:47 debian kernel: [ 0.029245] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.030009] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\r\nNov 17 04:03:47 debian kernel: [ 0.030872] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\u003e [mem 0x00000000-0x265dffff]\r\nNov 17 04:03:47 debian kernel: [ 0.032225] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\r\nNov 17 04:03:47 debian kernel: [ 0.033370] Zone ranges:\r\nNov 17 04:03:47 debian kernel: [ 0.033725] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\nNov 17 04:03:47 debian kernel: [ 0.034554] DMA32 [mem 0x0000000001000000-0x00000000265dffff]\r\nNov 17 04:03:47 debian kernel: [ 0.035451] Normal empty\r\nNov 17 04:03:47 debian kernel: [ 0.035842] Device empty\r\nNov 17 04:03:47 debian kernel: [ 0.036232] Movable zone start for each node\r\nNov 17 04:03:47 debian kernel: [ 0.036778] Early memory node ranges\r\nNov 17 04:03:47 debian kernel: [ 0.037243] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\nNov 17 04:03:47 debian kernel: [ 0.038094] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\nNov 17 04:03:47 debian kernel: [ 0.038947] node 0: [mem 0x0000000000100000-0x0000000025eecfff]\r\nNov 17 04:03:47 debian kernel: [ 0.039805] node 0: [mem 0x00000000261ff000-0x00000000265dffff]\r\nNov 17 04:03:47 debian kernel: [ 0.040633] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\r\nNov 17 04:03:47 debian kernel: [ 0.041544] On node 0 totalpages: 156250\r\nNov 17 04:03:47 debian kernel: [ 0.041545] DMA zone: 64 pages used for memmap\r\nNov 17 04:03:47 debian kernel: [ 0.041546] DMA zone: 3121 pages reserved\r\nNov 17 04:03:47 debian kernel: [ 0.041548] DMA zone: 3980 pages, LIFO batch:0\r\nNov 17 04:03:47 debian kernel: [ 0.041549] DMA32 zone: 2392 pages used for memmap\r\nNov 17 04:03:47 debian kernel: [ 0.041550] DMA32 zone: 152270 pages, LIFO batch:31\r\nNov 17 04:03:47 debian kernel: [ 0.041989] On node 0, zone DMA: 1 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.041990] On node 0, zone DMA: 11 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.042798] On node 0, zone DMA: 104 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.045104] On node 0, zone DMA32: 786 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.046017] On node 0, zone DMA32: 6688 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.047186] ACPI: PM-Timer IO Port: 0xb008\r\nNov 17 04:03:47 debian kernel: [ 0.048553] ACPI: Local APIC address 0xfee00000\r\nNov 17 04:03:47 debian kernel: [ 0.048565] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\nNov 17 04:03:47 debian kernel: [ 0.049404] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\nNov 17 04:03:47 debian kernel: [ 0.050293] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\nNov 17 04:03:47 debian kernel: [ 0.051137] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\nNov 17 04:03:47 debian kernel: [ 0.051992] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\nNov 17 04:03:47 debian kernel: [ 0.052890] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\nNov 17 04:03:47 debian kernel: [ 0.053807] ACPI: IRQ5 used by override.\r\nNov 17 04:03:47 debian kernel: [ 0.053808] ACPI: IRQ9 used by override.\r\nNov 17 04:03:47 debian kernel: [ 0.053809] ACPI: IRQ10 used by override.\r\nNov 17 04:03:47 debian kernel: [ 0.053810] ACPI: IRQ11 used by override.\r\nNov 17 04:03:47 debian kernel: [ 0.053812] Using ACPI (MADT) for SMP configuration information\r\nNov 17 04:03:47 debian kernel: [ 0.054586] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\r\nNov 17 04:03:47 debian kernel: [ 0.055292] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\nNov 17 04:03:47 debian kernel: [ 0.056302] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.057269] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.058272] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\nNov 17 04:03:47 debian kernel: [ 0.059273] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\r\nNov 17 04:03:47 debian kernel: [ 0.060238] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\r\nNov 17 04:03:47 debian kernel: [ 0.061203] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\r\nNov 17 04:03:47 debian kernel: [ 0.062169] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\r\nNov 17 04:03:47 debian kernel: [ 0.063136] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\r\nNov 17 04:03:47 debian kernel: [ 0.064110] [mem 0x26600000-0xffffffff] available for PCI devices\r\nNov 17 04:03:47 debian kernel: [ 0.064881] Booting paravirtualized kernel on KVM\r\nNov 17 04:03:47 debian kernel: [ 0.065481] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\nNov 17 04:03:47 debian kernel: [ 0.071199] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\r\nNov 17 04:03:47 debian kernel: [ 0.072527] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\r\nNov 17 04:03:47 debian kernel: [ 0.073412] pcpu-alloc: s221184 r8192 d28672 u2097152 alloc=1*2097152\r\nNov 17 04:03:47 debian kernel: [ 0.073414] pcpu-alloc: [0] 0 \r\nNov 17 04:03:47 debian kernel: [ 0.073444] kvm-guest: PV spinlocks disabled, single CPU\r\nNov 17 04:03:47 debian kernel: [ 0.074171] Built 1 zonelists, mobility grouping on. Total pages: 150673\r\nNov 17 04:03:47 debian kernel: [ 0.075108] Policy zone: DMA32\r\nNov 17 04:03:47 debian kernel: [ 0.075690] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nNov 17 04:03:47 debian kernel: [ 0.078655] DMAR: IOMMU disabled\r\nNov 17 04:03:47 debian kernel: [ 0.079286] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.080546] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.081583] mem auto-init: stack:off, heap alloc:on, heap free:off\r\nNov 17 04:03:47 debian kernel: [ 0.084292] Memory: 208948K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\r\nNov 17 04:03:47 debian kernel: [ 0.086299] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\r\nNov 17 04:03:47 debian kernel: [ 0.087268] Kernel/User page tables isolation: enabled\r\nNov 17 04:03:47 debian kernel: [ 0.088415] ftrace: allocating 33918 entries in 133 pages\r\nNov 17 04:03:47 debian kernel: [ 0.108935] ftrace: allocated 133 pages with 3 groups\r\nNov 17 04:03:47 debian kernel: [ 0.110330] rcu: Hierarchical RCU implementation.\r\nNov 17 04:03:47 debian kernel: [ 0.110974] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\r\nNov 17 04:03:47 debian kernel: [ 0.111865] \tRude variant of Tasks RCU enabled.\r\nNov 17 04:03:47 debian kernel: [ 0.112441] \tTracing variant of Tasks RCU enabled.\r\nNov 17 04:03:47 debian kernel: [ 0.113053] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\nNov 17 04:03:47 debian kernel: [ 0.114064] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\r\nNov 17 04:03:47 debian kernel: [ 0.119409] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\r\nNov 17 04:03:47 debian kernel: [ 0.120483] random: crng init done\r\nNov 17 04:03:47 debian kernel: [ 0.120945] Console: colour dummy device 80x25\r\nNov 17 04:03:47 debian kernel: [ 0.121763] printk: console [tty0] enabled\r\nNov 17 04:03:47 debian kernel: [ 0.122413] printk: console [ttyS0] enabled\r\nNov 17 04:03:47 debian kernel: [ 0.123526] printk: bootconsole [earlyser0] disabled\r\nNov 17 04:03:47 debian kernel: [ 0.124856] ACPI: Core revision 20200925\r\nNov 17 04:03:47 debian kernel: [ 0.125499] APIC: Switch to symmetric I/O mode setup\r\nNov 17 04:03:47 debian kernel: [ 0.126669] x2apic enabled\r\nNov 17 04:03:47 debian kernel: [ 0.129453] Switched APIC routing to physical x2apic.\r\nNov 17 04:03:47 debian kernel: [ 0.134129] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\nNov 17 04:03:47 debian kernel: [ 0.135170] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\r\nNov 17 04:03:47 debian kernel: [ 0.136571] Calibrating delay loop (skipped) preset value.. 4400.31 BogoMIPS (lpj=8800632)\r\nNov 17 04:03:47 debian kernel: [ 0.140680] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\nNov 17 04:03:47 debian kernel: [ 0.141412] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\nNov 17 04:03:47 debian kernel: [ 0.142247] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\nNov 17 04[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\n:03:47 debian kernel: [ 0.143390] Spectre V2 : Mitigation: IBRS\r\nNov 17 04:03:47 debian kernel: [ 0.143939] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\nNov 17 04:03:47 debian kernel: [ 0.144568] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\nNov 17 04:03:47 debian kernel: [ 0.145466] RETBleed: Mitigation: IBRS\r\nNov 17 04:03:47 debian kernel: [ 0.145988] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\nNov 17 04:03:47 debian kernel: [ 0.147108] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\nNov 17 04:03:47 debian kernel: [ 0.148575] MDS: Mitigation: Clear CPU buffers\r\nNov 17 04:03:47 debian systemd[1]: Finished Create list of static device nodes for the current kernel.\r\nNov 17 04:03:47 debian systemd[1]: modprobe@configfs.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module configfs.\r\nNov 17 04:03:47 debian systemd[1]: modprobe@drm.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module drm.\r\nNov 17 04:03:47 debian systemd[1]: modprobe@fuse.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module fuse.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Modules.\r\nNov 17 04:03:47 debian systemd[1]: Finished Remount Root and Kernel File Systems.\r\nNov 17 04:03:47 debian systemd[1]: Mounting FUSE Control File System...\r\nNov 17 04:03:47 debian systemd[1]: Mounting Kernel Configuration File System...\r\nNov 17 04:03:47 debian systemd[1]: Starting Grow File System on /...\r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting Flush Journal to Persistent Storage...\r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting Load/Save Random Seed...\r\nNov 17 04:03:47 debian systemd-growfs[189]: Successfully resized \"/\" to 9.8G bytes (3584 bytes lost due to blocksize).\r\nNov 17 04:03:47 debian systemd[1]: Starting Apply Kernel Variables...\r\nNov 17 04:03:47 debian systemd[1]: Starting Create System Users...\r\nNov 17 04:03:47 debian systemd[1]: Finished Coldplug All udev Devices.\r\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating group systemd-timesync with gid 999.\r\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating user systemd-timesync (systemd Time Synchronization) with uid 999 and gid 999.\r\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating group systemd-coredump with gid 998.\r\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating user systemd-coredump (systemd Core Dumper) with uid 998 and gid 998.\r\nNov 17 04:03:47 debian systemd[1]: Mounted FUSE Control File System.\r\nNov 17 04:03:47 debian systemd[1]: Mounted Kernel Configuration File System.\r\nNov 17 04:03:47 debian systemd[1]: Finished Grow File System on /.\r\nNov 17 04:03:47 debian systemd[1]: Finished Flush Journal to Persistent Storage.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load/Save Random Seed.\r\nNov 17 04:03:47 debian systemd[1]: Finished Apply Kernel Variables.\r\nNov 17 04:03:47 debian systemd[1]: Finished Create System Users.\r\nNov 17 04:03:47 debian kernel: [ 0.149183] TAA: Mitigation: Clear CPU buffers\r\nNov 17 04:03:47 debian kernel: [ 0.149789] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\nNov 17 04:03:47 debian kernel: [ 0.150817] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\nNov 17 04:03:47 debian kernel: [ 0.151849] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\nNov 17 04:03:47 debian kernel: [ 0.152568] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\nNov 17 04:03:47 debian kernel: [ 0.153445] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\nNov 17 04:03:47 debian kernel: [ 0.154319] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\nNov 17 04:03:47 debian kernel: [ 0.174317] Freeing SMP alternatives memory: 32K\r\nNov 17 04:03:47 debian kernel: [ 0.176616] pid_max: default: 32768 minimum: 301\r\nNov 17 04:03:47 debian kernel: [ 0.189921] LSM: Security Framework initializing\r\nNov 17 04:03:47 debian kernel: [ 0.190777] Yama: disabled by default; enable with sysctl kernel.yama.*\r\nNov 17 04:03:47 debian kernel: [ 0.191718] AppArmor: AppArmor initialized\r\nNov 17 04:03:47 debian kernel: [ 0.192315] TOMOYO Linux initialized\r\nNov 17 04:03:47 debian kernel: [ 0.192585] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.193586] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.303707] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\nNov 17 04:03:47 debian kernel: [ 0.304567] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\nNov 17 04:03:47 debian kernel: [ 0.304567] rcu: Hierarchical SRCU implementation.\r\nNov 17 04:03:47 debian kernel: [ 0.304567] NMI watchdog: Perf NMI watchdog permanently disabled\r\nNov 17 04:03:47 debian kernel: [ 0.304607] smp: Bringing up secondary CPUs ...\r\nNov 17 04:03:47 debian kernel: [ 0.305254] smp: Brought up 1 node, 1 CPU\r\nNov 17 04:03:47 debian kernel: [ 0.305804] smpboot: Max logical packages: 1\r\nNov 17 04:03:47 debian kernel: [ 0.306388] smpboot: Total of 1 processors activated (4400.31 BogoMIPS)\r\nNov 17 04:03:47 debian kernel: [ 0.309894] node 0 deferred pages initialised in 4ms\r\nNov 17 04:03:47 debian kernel: [ 0.310840] devtmpfs: initialized\r\nNov 17 04:03:47 debian kernel: [ 0.311414] x86/mm: Memory block size: 128MB\r\nNov 17 04:03:47 debian kernel: [ 0.312326] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\r\nNov 17 04:03:47 debian kernel: [ 0.312624] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\nNov 17 04:03:47 debian kernel: [ 0.313984] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.315079] NET: Registered protocol family 16\r\nNov 17 04:03:47 debian kernel: [ 0.316708] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\r\nNov 17 04:03:47 debian kernel: [ 0.317887] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\nNov 17 04:03:47 debian kernel: [ 0.319088] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\nNov 17 04:03:47 debian kernel: [ 0.320255] audit: initializing netlink subsys (disabled)\r\nNov 17 04:03:47 debian kernel: [ 0.320680] thermal_sys: Registered thermal governor 'fair_share'\r\nNov 17 04:03:47 debian kernel: [ 0.320681] thermal_sys: Registered thermal governor 'bang_bang'\r\nNov 17 04:03:47 debian kernel: [ 0.321534] thermal_sys: Registered thermal governor 'step_wise'\r\nNov 17 04:03:47 debian kernel: [ 0.322340] thermal_sys: Registered thermal governor 'user_space'\r\nNov 17 04:03:47 debian kernel: [ 0.323166] thermal_sys: Registered thermal governor 'power_allocator'\r\nNov 17 04:03:47 debian kernel: [ 0.324578] audit: type=2000 audit(1700193823.829:1): state=initialized audit_enabled=0 res=1\r\nNov 17 04:03:47 debian kernel: [ 0.326750] cpuidle: using governor ladder\r\nNov 17 04:03:47 debian kernel: [ 0.327347] cpuidle: using governor menu\r\nNov 17 04:03:47 debian kernel: [ 0.327968] ACPI: bus type PCI registered\r\nNov 17 04:03:47 debian kernel: [ 0.328539] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\nNov 17 04:03:47 debian kernel: [ 0.328668] PCI: Using configuration type 1 for base access\r\nNov 17 04:03:47 debian kernel: [ 0.330144] Kprobes globally optimized\r\nNov 17 04:03:47 debian kernel: [ 0.330823] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\nNov 17 04:03:47 debian kernel: [ 0.332570] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\nNov 17 04:03:47 debian kernel: [ 0.460132] ACPI: Added _OSI(Module Device)\r\nNov 17 04:03:47 debian kernel: [ 0.460570] ACPI: Added _OSI(Processor Device)\r\nNov 17 04:03:47 debian kernel: [ 0.461236] ACPI: Added _OSI(3.0 _SCP Extensions)\r\nNov 17 04:03:47 debian kernel: [ 0.461875] ACPI: Added _OSI(Processor Aggregator Device)\r\nNov 17 04:03:47 debian kernel: [ 0.462629] ACPI: Added _OSI(Linux-Dell-Video)\r\nNov 17 04:03:47 debian kernel: [ 0.463234] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\nNov 17 04:03:47 debian kernel: [ 0.463951] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\nNov 17 04:03:47 debian kernel: [ 0.465493] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\nNov 17 04:03:47 debian kernel: [ 0.467274] ACPI: Interpreter enabled\r\nNov 17 04:03:47 debian kernel: [ 0.467821] ACPI: (supports S0 S3 S4 S5)\r\nNov 17 04:03:47 debian kernel: [ 0.468579] ACPI: Using IOAPIC for interrupt routing\r\nNov 17 04:03:47 debian kernel: [ 0.469275] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\nNov 17 04:03:47 debian kernel: [ 0.470653] ACPI: Enabled 16 GPEs in block 00 to 0F\r\nNov 17 04:03:47 debian kernel: [ 0.473239] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\nNov 17 04:03:47 debian kernel: [ 0.474122] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\nNov 17 04:03:47 debian kernel: [ 0.475162] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\nNov 17 04:03:47 debian kernel: [ 0.477146] PCI host bridge to bus 0000:00\r\nNov 17 04:03:47 debian kernel: [ 0.477709] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\nNov 17 04:03:47 debian kernel: [ 0.478715] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\nNov 17 04:03:47 debian kernel: [ 0.479663] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\nNov 17 04:03:47 debian kernel: [ 0.480578] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\r\nNov 17 04:03:47 debian kernel: [ 0.481576] pci_bus 0000:00: root bus resource [bus 00-ff]\r\nNov 17 04:03:47 debian kernel: [ 0.482365] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\nNov 17 04:03:47 debian kernel: [ 0.486019] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\nNov 17 04:03:47 debian kernel: [ 0.500825] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\nNov 17 04:03:47 debian kernel: [ 0.519681] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\nNov 17 04:03:47 debian kernel: [ 0.520874] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\nNov 17 04:03:47 debian kernel: [ 0.528575] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\nNov 17 04:03:47 debian kernel: [ 0.533672] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\r\nNov 17 04:03:47 debian kernel: [ 0.548861] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\nNov 17 04:03:47 debian kernel: [ 0.555665] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\nNov 17 04:03:47 debian kernel: [ 0.560572] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\r\nNov 17 04:03:47 debian kernel: [ 0.573906] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\r\nNov 17 04:03:47 debian kernel: [ 0.580574] pci 0000:00:05.0: reg 0x10: [io 0xc080-0xc09f]\r\nNov 17 04:03:47 debian kernel: [ 0.586726] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\r\nNov 17 04:03:47 debian kernel: [ 0.601296] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\nNov 17 04:03:47 debian kernel: [ 0.603312] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\nNov 17 04:03:47 debian kernel: [ 0.605636] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\nNov 17 04:03:47 debian kernel: [ 0.607598] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\nNov 17 04:03:47 debian kernel: [ 0.611697] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\nNov 17 04:03:47 debian kernel: [ 0.612813] iommu: Default domain type: Translated \r\nNov 17 04:03:47 debian kernel: [ 0.613589] vgaarb: loaded\r\nNov 17 04:03:47 debian kernel: [ 0.614061] Registered efivars operations\r\nNov 17 04:03:47 debian kernel: [ 0.614787] NetLabel: Initializing\r\nNov 17 04:03:47 debian kernel: [ 0.615327] NetLabel: domain hash size = 128\r\nNov 17 04:03:47 debian kernel: [ 0.615923] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\nNov 17 04:03:47 debian kernel: [ 0.616587] NetLabel: unlabeled traffic allowed by default\r\nNov 17 04:03:47 debian kernel: [ 0.617348] PCI: Using ACPI for IRQ routing\r\nNov 17 04:03:47 debian kernel: [ 0.617922] PCI: pci_cache_line_size set to 64 bytes\r\nNov 17 04:03:47 debian kernel: [ 0.618015] e820: r[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\u001b[0m.\r\neserve RAM buffer [mem 0x00055000-0x0005ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.618017] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.618018] e820: reserve RAM buffer [mem 0x25eed000-0x27ffffff]\r\nNov 17 04:03:47 debian kernel: [ 0.618019] e820: reserve RAM buffer [mem 0x265e0000-0x27ffffff]\r\nNov 17 04:03:47 debian kernel: [ 0.618056] clocksource: Switched to clocksource kvm-clock\r\nNov 17 04:03:47 debian kernel: [ 0.628891] VFS: Disk quotas dquot_6.6.0\r\nNov 17 04:03:47 debian kernel: [ 0.629490] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\nNov 17 04:03:47 debian kernel: [ 0.630665] AppArmor: AppArmor Filesystem Enabled\r\nNov 17 04:03:47 debian kernel: [ 0.631324] pnp: PnP ACPI init\r\nNov 17 04:03:47 debian kernel: [ 0.631808] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631858] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631890] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631928] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631957] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631986] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.632018] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.632174] pnp: PnP ACPI: found 7 devices\r\nNov 17 04:03:47 debian kernel: [ 0.638068] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\nNov 17 04:03:47 debian kernel: [ 0.639390] NET: Registered protocol family 2\r\nNov 17 04:03:47 debian kernel: [ 0.640279] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.642617] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.643878] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.644963] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.645946] TCP: Hash tables configured (established 8192 bind 8192)\r\nNov 17 04:03:47 debian kernel: [ 0.647263] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.648178] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.649145] NET: Registered protocol family 1\r\nNov 17 04:03:47 debian kernel: [ 0.649746] NET: Registered protocol family 44\r\nNov 17 04:03:47 debian kernel: [ 0.650360] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\nNov 17 04:03:47 debian kernel: [ 0.651189] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\nNov 17 04:03:47 debian kernel: [ 0.652018] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\nNov 17 04:03:47 debian kernel: [ 0.653023] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\r\nNov 17 04:03:47 debian kernel: [ 0.654013] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\nNov 17 04:03:47 debian kernel: [ 0.654965] PCI: CLS 0 bytes, default 64\r\nNov 17 04:03:47 debian kernel: [ 0.655545] Trying to unpack rootfs image as initramfs...\r\nNov 17 04:03:47 debian kernel: [ 0.868747] Freeing initrd memory: 13832K\r\nNov 17 04:03:47 debian kernel: [ 0.869409] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\r\nNov 17 04:03:47 debian kernel: [ 0.870790] clocksource: Switched to clocksource tsc\r\nNov 17 04:03:47 debian kernel: [ 0.871684] Initialise system trusted keyrings\r\nNov 17 04:03:47 debian kernel: [ 0.872370] Key type blacklist registered\r\nNov 17 04:03:47 debian kernel: [ 0.872996] workingset: timestamp_bits=36 max_order=18 bucket_order=0\r\nNov 17 04:03:47 debian kernel: [ 0.874768] zbud: loaded\r\nNov 17 04:03:47 debian kernel: [ 0.875451] Key type asymmetric registered\r\nNov 17 04:03:47 debian kernel: [ 0.876015] Asymmetric key parser 'x509' registered\r\nNov 17 04:03:47 debian kernel: [ 0.876717] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\nNov 17 04:03:47 debian kernel: [ 0.877753] io scheduler mq-deadline registered\r\nNov 17 04:03:47 debian kernel: [ 0.878944] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\nNov 17 04:03:47 debian kernel: [ 0.879891] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\nNov 17 04:03:47 debian kernel: [ 0.881103] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\nNov 17 04:03:47 debian kernel: [ 0.882343] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\nNov 17 04:03:47 debian kernel: [ 0.883609] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\nNov 17 04:03:47 debian kernel: [ 0.884960] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\nNov 17 04:03:47 debian kernel: [ 0.886134] i8042: Warning: Keylock active\r\nNov 17 04:03:47 debian kernel: [ 0.888083] serio: i8042 KBD port at 0x60,0x64 irq 1\r\nNov 17 04:03:47 debian kernel: [ 0.888821] serio: i8042 AUX port at 0x60,0x64 irq 12\r\nNov 17 04:03:47 debian kernel: [ 0.889640] rtc_cmos 00:00: RTC can wake from S4\r\nNov 17 04:03:47 debian kernel: [ 0.890965] rtc_cmos 00:00: registered as rtc0\r\nNov 17 04:03:47 debian kernel: [ 0.891673] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:44 UTC (1700193824)\r\nNov 17 04:03:47 debian kernel: [ 0.892826] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\nNov 17 04:03:47 debian kernel: [ 0.893666] intel_pstate: CPU model not supported\r\nNov 17 04:03:47 debian kernel: [ 0.894500] NET: Registered protocol family 10\r\nNov 17 04:03:47 debian kernel: [ 0.902476] Segment Routing with IPv6\r\nNov 17 04:03:47 debian kernel: [ 0.903051] mip6: Mobile IPv6\r\nNov 17 04:03:47 debian kernel: [ 0.903490] NET: Registered protocol family 17\r\nNov 17 04:03:47 debian kernel: [ 0.904345] IPI shorthand broadcast: enabled\r\nNov 17 04:03:47 debian kernel: [ 0.904948] sched_clock: Marking stable (892139515, 12093408)-\u003e(906097741, -1864818)\r\nNov 17 04:03:47 debian kernel: [ 0.906042] registered taskstats version 1\r\nNov 17 04:03:47 debian kernel: [ 0.906630] Loading compiled-in X.509 certificates\r\nNov 17 04:03:47 debian kernel: [ 0.939254] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\nNov 17 04:03:47 debian kernel: [ 0.940959] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\nNov 17 04:03:47 debian kernel: [ 0.942356] Key type .fscrypt registered\r\nNov 17 04:03:47 debian kernel: [ 0.942899] Key type fscrypt-provisioning registered\r\nNov 17 04:03:47 debian kernel: [ 0.943613] AppArmor: AppArmor sha1 policy hashing enabled\r\nNov 17 04:03:47 debian kernel: [ 0.945910] Freeing unused decrypted memory: 2036K\r\nNov 17 04:03:47 debian kernel: [ 0.947243] Freeing unused kernel image (initmem) memory: 2468K\r\nNov 17 04:03:47 debian kernel: [ 0.956128] Write protecting the kernel read-only data: 22528k\r\nNov 17 04:03:47 debian kernel: [ 0.957663] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\nNov 17 04:03:47 debian kernel: [ 0.958870] Freeing unused kernel image (rodata/data gap) memory: 1236K\r\nNov 17 04:03:47 debian kernel: [ 0.960268] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nNov 17 04:03:47 debian kernel: [ 0.961209] x86/mm: Checking user space page tables\r\nNov 17 04:03:47 debian kernel: [ 0.961951] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nNov 17 04:03:47 debian kernel: [ 0.962845] Run /init as init process\r\nNov 17 04:03:47 debian kernel: [ 0.963353] with arguments:\r\nNov 17 04:03:47 debian kernel: [ 0.963353] /init\r\nNov 17 04:03:47 debian kernel: [ 0.963354] with environment:\r\nNov 17 04:03:47 debian kernel: [ 0.963355] HOME=/\r\nNov 17 04:03:47 debian kernel: [ 0.963355] TERM=linux\r\nNov 17 04:03:47 debian kernel: [ 0.963356] BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64\r\nNov 17 04:03:47 debian kernel: [ 0.963357] intel_iommu=off\r\nNov 17 04:03:47 debian kernel: [ 1.027130] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\nNov 17 04:03:47 debian kernel: [ 1.027936] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:47 debian kernel: [ 1.056157] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\nNov 17 04:03:47 debian kernel: [ 1.056936] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:47 debian kernel: [ 1.062192] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\nNov 17 04:03:47 debian kernel: [ 1.062992] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:47 debian kernel: [ 1.084419] SCSI subsystem initialized\r\nNov 17 04:03:47 debian kernel: [ 1.093724] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\nNov 17 04:03:47 debian kernel: [ 1.118084] virtio_net virtio1 ens4: renamed from eth0\r\nNov 17 04:03:47 debian kernel: [ 1.126364] scsi host0: Virtio SCSI HBA\r\nNov 17 04:03:47 debian kernel: [ 1.133045] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\nNov 17 04:03:47 debian kernel: [ 1.153482] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\r\nNov 17 04:03:47 debian kernel: [ 1.154594] sd 0:0:1:0: [sda] 4096-byte physical blocks\r\nNov 17 04:03:47 debian kernel: [ 1.155471] sd 0:0:1:0: [sda] Write Protect is off\r\nNov 17 04:03:47 debian kernel: [ 1.156202] sd 0:0:1:0: [sda] Mode Sense: 1f 00 00 08\r\nNov 17 04:03:47 debian kernel: [ 1.156440] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\nNov 17 04:03:47 debian kernel: [ 1.160803] sda: sda1 sda14 sda15\r\nNov 17 04:03:47 debian kernel: [ 1.172566] sd 0:0:1:0: [sda] Attached SCSI disk\r\nNov 17 04:03:47 debian kernel: [ 1.222901] sda: sda1 sda14 sda15\r\nNov 17 04:03:47 debian kernel: [ 1.303453] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\r\nNov 17 04:03:47 debian kernel: [ 1.328083] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\nNov 17 04:03:47 debian kernel: [ 2.335869] fuse: init (API version 7.32)\r\nNov 17 04:03:47 debian kernel: [ 2.397669] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\r\nNov 17 04:03:47 debian kernel: [ 2.550327] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\r\nNov 17 04:03:47 debian kernel: [ 2.817742] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\nNov 17 04:03:47 debian kernel: [ 2.832340] ACPI: Power Button [PWRF]\r\nNov 17 04:03:47 debian kernel: [ 2.832937] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\nNov 17 04:03:47 debian kernel: [ 2.833954] ACPI: Sleep Button [SLPF]\r\nNov 17 04:03:47 debian kernel: [ 2.858324] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\nNov 17 04:03:47 debian kernel: [ 2.868718] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\nNov 17 04:03:47 debian kernel: [ 2.876076] pstore: Using crash dump compression: deflate\r\nNov 17 04:03:47 debian kernel: [ 2.876906] pstore: Registered efi as persistent store backend\r\nNov 17 04:03:47 debian kernel: [ 2.921526] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\nNov 17 04:03:47 debian kernel: [ 2.957276] cryptd: max_cpu_qlen set to 1000\r\nNov 17 04:03:47 debian kernel: [ 2.992561] AVX2 version of gcm_enc/dec engaged.\r\nNov 17 04:03:47 debian kernel: [ 2.993287] AES CTR mode by8 optimization enabled\r\nNov 17 04:03:47 debian kernel: [ 3.408377] audit: type=1400 audit(1700193827.016:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=292 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.411744] audit: type=1400 audit(1700193827.016:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=292 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.496816] audit: type=1400 audit(1700193827.104:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=293 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.538548] audit: type=1400 audit(1700193827.144:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=294 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.657331] audit: type=1400 audit(1700193827.264:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=295 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.687179] audit: type=1400 audit(1700193827.292:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=296 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.752802] audit: type=1400 audit(1700193827.360:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.755808] audit: type=1400 audit(1700193827.360:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.760565] audit: type=1400 audit(1700193827.364:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in First Boot Complete being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting Helper to synchronize boot up for ifupdown...\r\nNov 17 04:03:47 debian systemd[1]: Starting Create Static Device Nodes in /dev...\r\nNov 17 04:03:47 debian systemd[1]: Finished Helper to synchronize boot up for ifupdown.\r\nNov 17 04:03:47 debian systemd[1]: Finished Create Static Device Nodes in /dev.\r\nNov 17 04:03:47 debian systemd[1]: Reached target Local File Systems (Pre).\r\nNov 17 04:03:47 debian systemd[1]: Starting Rule-based Manager for Device Events and Files...\r\nNov 17 04:03:47 debian systemd[1]: Started Rule-based Manager for Device Events and Files.\r\nNov 17 04:03:47 debian systemd-udevd[200]: Using default interface naming scheme 'v247'.\r\nNov 17 04:03:47 debian systemd-udevd[200]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nNov 17 04:03:47 debian systemd[1]: Found device /dev/ttyS0.\r\nNov 17 04:03:47 debian systemd-udevd[199]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nNov 17 04:03:47 debian systemd[1]: Found device PersistentDisk 15.\r\nNov 17 04:03:47 debian cloud-ifupdown-helper: Generated configuration for ens4\r\nNov 17 04:03:47 debian systemd[1]: Mounting /boot/efi...\r\nNov 17 04:03:47 debian systemd[1]: Mounted /boot/efi.\r\nNov 17 04:03:47 debian systemd[1]: Found device Virtio network device.\r\nNov 17 04:03:47 debian systemd[1]: Reached target Local File Systems.\r\nNov 17 04:03:47 debian systemd[1]: Starting Load AppArmor profiles...\r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting Commit a transient machine-id on disk...\r\nNov 17 04:03:47 debian apparmor.systemd[283]: Restarting AppArmor\r\nNov 17 04:03:47 debian apparmor.systemd[283]: Reloading AppArmor profiles\r\nNov 17 04:03:47 debian systemd[1]: Starting Create Volatile Files and Directories...\r\nNov 17 04:03:47 debian systemd[1]: Finished Create Volatile Files and Directories.\r\nNov 17 04:03:47 debian systemd[1]: Starting Update UTMP about System Boot/Shutdown...\r\nNov 17 04:03:47 debian systemd[1]: Finished Update UTMP about System Boot/Shutdown.\r\nNov 17 04:03:47 debian systemd[1]: etc-machine\\x2did.mount: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Commit a transient machine-id on disk.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load AppArmor profiles.\r\nNov 17 04:03:47 debian systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\r\nNov 17 04:03:47 debian systemd[1]: Reached target System Initialization.\r\nNov 17 04:03:47 debian haveged[298]: haveged: command socket is listening at fd 3\r\nNov 17 04:03:47 debian systemd[1]: Started GCE Workload Certificate refresh timer.\r\nNov 17 04:03:47 debian systemd[1]: Started NSS cache refresh timer.\r\nNov 17 04:03:47 debian systemd[1]: Started Daily Cleanup of Temporary Directories.\r\nNov 17 04:03:47 debian systemd[1]: Listening on D-Bus System Message Bus Socket.\r\nNov 17 04:03:47 debian systemd[1]: Listening on UUID daemon activation socket.\r\nNov 17 04:03:47 debian systemd[1]: Reached target Sockets.\r\nNov 17 04:03:47 debian systemd[1]: Starting Resize root filesystem if needed...\r\nNov 17 04:03:47 debian systemd[1]: Started ifup for ens4.\r\nNov 17 04:03:47 debian google_disk_expand[299]: Checking if filesystem on /dev/sda1 needs resizing\r\nNov 17 04:03:47 debian systemd[1]: Starting Raise network interfaces...\r\nNov 17 04:03:47 debian google_disk_expand[309]: resize2fs 1.46.2 (28-Feb-2021)\r\nNov 17 04:03:47 debian google_disk_expand[309]: The filesystem is already 2588667 (4k) blocks long. Nothing to do!\r\nNov 17 04:03:47 debian google_disk_expand[299]: Done.\r\nNov 17 04:03:47 debian systemd[1]: google-disk-expand.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Resize root filesystem if needed.\r\nNov 17 04:03:47 debian systemd[1]: Reached target Basic System.\r\nNov 17 04:03:47 debian systemd[1]: Started Regular background program processing daemon.\r\nNov 17 04:03:47 debian systemd[1]: Started D-Bus System Message Bus.\r\nNov 17 04:03:47 debian systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\r\nNov 17 04:03:47 debian dhclient[321]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:47 debian sh[321]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:47 debian dhclient[321]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:47 debian sh[321]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:47 debian dhclient[321]: All rights reserved.\r\nNov 17 04:03:47 debian sh[321]: All rights reserved.\r\nNov 17 04:03:47 debian dhclient[321]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:47 debian sh[321]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:47 debian dhclient[321]: \r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting System Logging Service...\r\nNov 17 04:03:47 debian systemd[1]: Starting User Login Management...\r\nNov 17 04:03:47 debian systemd[1]: Started System Logging Service.\r\nNov 17 04:03:47 debian ifup[304]: ifup: waiting for lock on /run/network/ifstate.ens4\r\nNov 17 04:03:47 debian dhclient[321]: Listening on LPF/ens4/42:01:0a:9a:00:0c\r\nNov 17 04:03:47 debian sh[321]: Listening on LPF/ens4/42:01:0a:9a:00:0c\r\nNov 17 04:03:47 debian sh[321]: Sending on LPF/ens4/42:01:0a:9a:00:0c\r\nNov 17 04:03:47 debian sh[321]: Sending on Socket/fallback\r\nNov 17 04:03:47 debian sh[321]: Created duid \"\\000\\001\\000\\001,\\351\\242\\243B\\001\\012\\232\\000\\014\".\r\nNov 17 04:03:47 debian sh[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nNov 17 04:03:47 debian dhclient[321]: Sending on LPF/ens4/42:01:0a:9a:00:0c\r\nNov 17 04:03:47 debian dhclient[321]: Sending on Socket/fallback\r\nNov 17 04:03:47 debian dhclient[321]: Created duid \"\\000\\001\\000\\001,\\351\\242\\243B\\001\\012\\232\\000\\014\".\r\nNov 17 04:03:47 debian dhclient[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nNov 17 04:03:47 debian dhclient[321]: DHCPOFFER of 10.154.0.12 from 169.254.169.254\r\nNov 17 04:03:47 debian sh[321]: DHCPOFFER of 10.154.0.12 from 169.254.169.254\r\nNov 17 04:03:47 debian sh[321]: DHCPREQUEST for 10.154.0.12 on ens4 to 255.255.255.255 port 67\r\nNov 17 04:03:47 debian dhclient[321]: DHCPREQUEST for 10.154.0.12 on ens4 to 255.255.255.255 port 67\r\nNov 17 04:03:47 debian dhclient[321]: DHCPACK of 10.154.0.12 from 169.254.169.254\r\nNov 17 04:03:47 debian sh[321]: DHCPACK of 10.154.0.12 from 169.254.169.254\r\nNov 17 04:03:47 debian systemd[1]: Started User Login Management.\r\nNov 17 04:03:47 debian dhclient[321]: bound to 10.154.0.12 -- renewal in 32899 seconds.\r\nNov 17 04:03:47 debian sh[321]: bound to 10.154.0.12 -- renewal in 32899 seconds.\r\nNov 17 04:03:47 debian haveged[298]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\r\nNov 17 04:03:47 debian haveged[298]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\r\nNov 17 04:03:47 debian haveged[298]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B): last entropy estimate 7.99739\r\nNov 17 04:03:47 debian haveged[298]: haveged: fills: 0, generated: 0\r\nNov 17 04:03:47 debian systemd[1]: e2scrub_reap.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\r\nNov 17 04:03:49 debian dhclient[435]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:49 debian sh[435]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:49 debian dhclient[435]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:49 debian sh[435]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:49 debian dhclient[435]: All rights reserved.\r\nNov 17 04:03:49 debian sh[435]: All rights reserved.\r\nNov 17 04:03:49 debian dhclient[435]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:49 debian sh[435]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:49 debian dhclient[435]: \r\nNov 17 04:03:49 debian dhclient[435]: Listening on Socket/ens4\r\nNov 17 04:03:49 debian sh[435]: Listening on Socket/ens4\r\nNov 17 04:03:49 debian sh[435]: Sending on Socket/ens4\r\nNov 17 04:03:49 debian sh[435]: PRC: Soliciting for leases (INIT).\r\nNov 17 04:03:49 debian dhclient[435]: Sending on Socket/ens4\r\nNov 17 04:03:49 debian dhclient[435]: XMT: Solicit on ens4, interval 1010ms.\r\nNov 17 04:03:49 debian sh[468]: ens4=ens4\r\n Starting \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m...\r\n Starting \u001b[0;1;39mNSS cache refresh\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:03:49 debian systemd[1]: Starting NSS cache refresh...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRaise network interfaces\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Raise network interfaces.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Network.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Network is Online.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork is Online\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Starting chrony, an NTP client/server...\r\n Starting \u001b[0;1;39mchrony, an NTP client/server\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Guest Agent...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Started Google OSConfig Agent.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle OSConfig Agent\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Shutdown Scripts...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting Permit User Sessions...\r\n Starting \u001b[0;1;39mPermit User Sessions\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Started Unattended Upgrades Shutdown.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUnattended Upgrades Shutdown\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Google Compute Engine Shutdown Scripts.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mPermit User Sessions\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Permit User Sessions.\r\nNov 17 04:03:49 debian systemd[1]: Started Getty on tty1.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGetty on tty1\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Serial Getty on ttyS0.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSerial Getty on ttyS0\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Login Prompts.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLogin Prompts\u001b[0m.\r\nNov 17 04:03:49 debian chronyd[498]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\r\nNov 17 04:03:49 debian google_oslogin_nss_cache[471]: oslogin_cache_refresh[471]: Refreshing passwd entry cache\r\nNov 17 04:03:49 debian chronyd[498]: Loaded seccomp filter\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mchrony, an NTP client/server\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Synchronized\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt download activities\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt upgrade and clean activities\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started chrony, an NTP client/server.\r\nNov 17 04:03:49 debian systemd[1]: Reached target System Time Synchronized.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily apt download activities.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily apt upgrade and clean activities.\r\nNov 17 04:03:49 debian systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily exim4-base housekeeping.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily exim4-base housekeeping\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Discard unused blocks once a week.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDiscard unused blocks once a week\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily rotation of log files.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily rotation of log files\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily man-db regeneration.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily man-db regeneration\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Timers.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mTimers\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Starting LSB: exim Mail Transport Agent...\r\n Starting \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m...\r\nNov 17 04:03:50 debian google_oslogin_nss_cache[471]: oslogin_cache_refresh[471]: Refreshing group entry cache\r\nNov 17 04:03:50 debian dhclient[435]: XMT: Solicit on ens4, interval 2000ms.\r\nNov 17 04:03:50 debian exim4[504]: Starting MTA:\r\nNov 17 04:03:50 debian exim4[522]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\r\nNov 17 04:03:51 debian gce_workload_cert_refresh[470]: 2023/11/17 04:03:51: Done\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m.\r\nNov 17 04:03:51 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:03:51 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:03:51 debian google_guest_agent[487]: GCE Agent Started (version 20231115.00)\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mNSS cache refresh\u001b[0m.\r\nNov 17 04:03:51 debian systemd[1]: google-oslogin-cache.service: Succeeded.\r\nNov 17 04:03:51 debian systemd[1]: Finished NSS cache refresh.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m.\r\nNov 17 04:03:51 debian exim4[504]: exim4.\r\nNov 17 04:03:51 debian systemd[1]: Started LSB: exim Mail Transport Agent.\r\nNov 17 04:03:52 debian google_guest_agent[487]: Instance ID changed, running first-boot actions\r\nNov 17 04:03:52 debian OSConfigAgent[489]: 2023-11-17T04:03:52.2878Z OSConfigAgent Info: OSConfig Agent (version 20231010.00-g1) started.\r\nNov 17 04:03:52 debian google_guest_agent[487]: Starting the scheduler to run jobs\r\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduler - start: []\r\nNov 17 04:03:52 debian google_guest_agent[487]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\r\nNov 17 04:03:52 debian google_guest_agent[487]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Started Google Compute Engine Guest Agent.\r\nNov 17 04:03:52 debian systemd[1]: Starting Google Compute Engine Startup Scripts...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Startup Scripts\u001b[0m...\r\nNov 17 04:03:52 debian systemd[1]: Starting OpenBSD Secure Shell server...\r\n Starting \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m...\r\nNov 17 04:03:52 debian google_guest_agent[487]: Starting the scheduler to run jobs\r\nNov 17 04:03:52 debian google_guest_agent[487]: No restorecon available, not restoring SELinux context of: /etc/ssh/oslogin_trustedca.pub\r\nNov 17 04:03:52 debian google_guest_agent[487]: Enabling OS Login\r\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduling job: telemetryJobID\r\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduling job \"telemetryJobID\" to run at 24.000000 hr interval\r\nNov 17 04:03:52 debian google_guest_agent[487]: Successfully scheduled job telemetryJobID\r\nNov 17 04:03:52 debian google_guest_agent[487]: Invoking job \"telemetryJobID\"\r\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduler - added: [now 2023-11-17 04:03:52.503242685 +0000 UTC entry 1 next 2023-11-18 04:03:52 +0000 UTC]\r\nNov 17 04:03:52 debian dhclient[435]: XMT: Solicit on ens4, interval 4010ms.\r\nNov 17 04:03:52 debian dhclient[826]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:52 debian dhclient[826]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:52 debian dhclient[826]: All rights reserved.\r\nNov 17 04:03:52 debian dhclient[826]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:52 debian dhclient[826]: \r\nNov 17 04:03:52 debian dhclient[826]: Listening on Socket/ens4\r\nNov 17 04:03:52 debian dhclient[826]: Sending on Socket/ens4\r\nNov 17 04:03:52 debian dhclient[826]: Created duid \"\\000\\001\\000\\001,\\351\\242\\250B\\001\\012\\232\\000\\014\".\r\nNov 17 04:03:52 debian google_guest_agent[487]: Created google sudoers file\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Started OpenBSD Secure Shell server.\r\nNov 17 04:03:52 debian systemd[1]: Stopping User Login Management...\r\n Stopping \u001b[0;1;39mUser Login Management\u001b[0m...\r\nNov 17 04:03:52 debian systemd[1]: systemd-logind.service: Succeeded.\r\nNov 17 04:03:52 debian systemd[1]: Stopped User Login Management.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mUser Login Management\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\nNov 17 04:03:52 debian systemd[1]: modprobe@drm.service: Succeeded.\r\nNov 17 04:03:52 debian systemd[1]: Finished Load Kernel Module drm.\r\nNov 17 04:03:52 debian systemd[1]: Starting User Login Management...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Started User Login Management.\r\nNov 17 04:03:52 debian systemd[1]: Stopping Regular background program processing daemon...\r\n Stopping \u001b[0;1;39mRegular background program processing daemon\u001b[0m...\r\nNov 17 04:03:52 debian systemd[1]: cron.service: Succeeded.\r\nNov 17 04:03:52 debian systemd[1]: Stopped Regular background program processing daemon.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Started Regular background program processing daemon.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Reloading OpenBSD Secure Shell server.\r\nNov 17 04:03:52 debian systemd[1]: Reloaded OpenBSD Secure Shell server.\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: Starting startup scripts (version dev).\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: Found startup-script in metadata.\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Hit:1 https://deb.debian.org/debian bullseye InRelease\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:2 https://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:3 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:4 https://deb.debian.org/debian bullseye-backports InRelease [49.0 kB]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:5 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease [5146 B]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Hit:6 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:7 https://deb.debian.org/debian-security bullseye-security/main Sources [160 kB]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:8 https://deb.debian.org/debian-security bullseye-security/main amd64 Packages [258 kB]\r\nNov 17 04:03:54 debian google_metadata_script_runner[822]: startup-script: Fetched 564 kB in 1s (776 kB/s)\r\nNov 17 04:03:54 debian chronyd[498]: Selected source 169.254.169.254 (metadata.google.internal)\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Building dependency tree...\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading state information...\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: The following NEW packages will be installed:\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: apt-transport-https\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Need to get 160 kB of archives.\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: After this operation, 166 kB of additional disk space will be used.\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Get:1 https://deb.debian.org/debian bullseye/main amd64 apt-transport-https all 2.2.4 [160 kB]\r\n\r\r\nDebian GNU/Linux 11 valid-linux-ssh ttyS0\r\n\r\nvalid-linux-ssh login: Nov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Dialog\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Readline\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Readline\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, \u003c\u003e line 1.)\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Teletype\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: dpkg-preconfigure: unable to re-open stdin:\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Fetched 160 kB in 0s (3831 kB/s)\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Selecting previously unselected package apt-transport-https.\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: (Reading database ... #015(Reading database ... 5%#015(Reading database ... 10%#015(Reading database ... 15%#015(Reading database ... 20%#015(Reading database ... 25%#015(Reading database ... 30%#015(Reading database ... 35%#015(Reading database ... 40%#015(Reading database ... 45%#015(Reading database ... 50%#015(Reading database ... 55%#015(Reading database ... 60%#015(Reading database ... 65%#015(Reading database ... 70%#015(Reading database ... 75%#015(Reading database ... 80%#015(Reading database ... 85%#015(Reading database ... 90%#015(Reading database ... 95%#015(Reading database ... 100%#015(Reading database ... 59476 files and directories currently installed.)\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Preparing to unpack .../apt-transport-https_2.2.4_all.deb ...\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Unpacking apt-transport-https (2.2.4) ...\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Setting up apt-transport-https (2.2.4) ...\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Adding agent repository for debian.\r\nNov 17 04:03:56 debian dhclient[435]: XMT: Solicit on ens4, interval 8170ms.\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: deb [signed-by=/usr/share/keyrings/google-cloud-ops-agent-keyring.gpg] https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all main\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:1 https://deb.debian.org/debian bullseye InRelease\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:2 https://deb.debian.org/debian-security bullseye-security InRelease\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:3 https://deb.debian.org/debian bullseye-updates InRelease\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:4 https://deb.debian.org/debian bullseye-backports InRelease\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Get:5 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all InRelease [5115 B]\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Hit:6 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Hit:7 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Get:8 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all/main amd64 Packages [7973 B]\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Fetched 13.1 kB in 1s (19.6 kB/s)\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Building dependency tree...\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading state information...\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: The following NEW packages will be installed:\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: google-cloud-ops-agent\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Need to get 92.1 MB of archives.\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: After this operation, 398 MB of additional disk space will be used.\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Get:1 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all/main amd64 google-cloud-ops-agent amd64 2.43.0~debian11 [92.1 MB]\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Dialog\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Readline\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Readline\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, \u003c\u003e line 1.)\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Teletype\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: dpkg-preconfigure: unable to re-open stdin:\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Fetched 92.1 MB in 2s (45.1 MB/s)\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Selecting previously unselected package google-cloud-ops-agent.\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: (Reading database ... #015(Reading database ... 5%#015(Reading database ... 10%#015(Reading database ... 15%#015(Reading database ... 20%#015(Reading database ... 25%#015(Reading database ... 30%#015(Reading database ... 35%#015(Reading database ... 40%#015(Reading database ... 45%#015(Reading database ... 50%#015(Reading database ... 55%#015(Reading database ... 60%#015(Reading database ... 65%#015(Reading database ... 70%#015(Reading database ... 75%#015(Reading database ... 80%#015(Reading database ... 85%#015(Reading database ... 90%#015(Reading database ... 95%#015(Reading database ... 100%#015(Reading database ... 59480 files and directories currently installed.)\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Preparing to unpack .../google-cloud-ops-agent_2.43.0~debian11_amd64.deb ...\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Unpacking google-cloud-ops-agent (2.43.0~debian11) ...\r\nNov 17 04:04:04 debian dhclient[435]: XMT: Solicit on ens4, interval 15830ms.\r\nNov 17 04:04:13 debian google_metadata_script_runner[822]: startup-script: Setting up google-cloud-ops-agent (2.43.0~debian11) ...\r\nNov 17 04:04:13 debian google_metadata_script_runner[822]: startup-script: Created symlink /etc/systemd/system/multi-user.target.wants/google-cloud-ops-agent.service → /lib/systemd/system/google-cloud-ops-agent.service.\r\nNov 17 04:04:13 debian systemd[1]: Reloading.\r\nNov 17 04:04:14 debian systemd[1]: Reloading.\r\nNov 17 04:04:14 debian systemd[1]: Started Google Cloud Ops Agent - Diagnostics.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Cloud Ops Agent - Diagnostics\u001b[0m.\r\n Starting \u001b[0;1;39mGoogle Cloud Ops Agent\u001b[0m...\r\nNov 17 04:04:14 debian systemd[1]: Starting Google Cloud Ops Agent...\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:17 Built-in config:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: logging:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: syslog:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: files\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: include_paths:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: - /var/log/messages\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: - /var/log/syslog\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: service:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: pipelines:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: default_pipeline:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers: [syslog]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: hostmetrics:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: hostmetrics\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: collection_interval: 60s\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: processors:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics_filter:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: exclude_metrics\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics_pattern: []\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: service:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: pipelines:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: default_pipeline:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers: [hostmetrics]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: processors: [metrics_filter]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:17 Merged config:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: logging:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: syslog:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: files\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: include_paths:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: - /var/log/messages\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: - /var/log/syslog\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: service:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: pipelines:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: default_pipeline:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers: [syslog]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: hostmetrics:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: hostmetrics\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: collection_interval: 60s\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: processors:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics_filter:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: exclude_metrics\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics_pattern: []\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: service:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: pipelines:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: default_pipeline:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers: [hostmetrics]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: processors: [metrics_filter]\r\nNov 17 04:04:20 debian dhclient[435]: XMT: Solicit on ens4, interval 32060ms.\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [Ports Check] Result: PASS\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [Network Check] Result: PASS\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [API Check] Result: FAIL, Error code: MonApiDisabledErr, Failure: The Monitoring API is disabled in the current Google Cloud project., Solution: Enable Monitoring API in the current Google Cloud project., Resource: https://cloud.google.com/monitoring/api/enable-api\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [API Check] Result: FAIL, Error code: LogApiDisabledErr, Failure: The Logging API is disabled in the current Google Cloud project., Solution: Enable Logging API in the current Google Cloud project., Resource: https://cloud.google.com/logging/docs/api/enable-api\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 Startup checks finished\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Cloud Ops Agent\u001b[0m.\r\nNov 17 04:04:24 debian systemd[1]: Finished Google Cloud Ops Agent.\r\nNov 17 04:04:24 debian systemd[1]: Starting Google Cloud Ops Agent - Logging Agent...\r\n Starting \u001b[0;1;39mGoogle Cloud Ops Agent - Logging Agent\u001b[0m...\r\nNov 17 04:04:24 debian systemd[1]: Starting Google Cloud Ops Agent - Metrics Agent...\r\n Starting \u001b[0;1;39mGoogle Cloud Ops Agent - Metrics Agent\u001b[0m...\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: 2023/11/17 04:04:24 Built-in config:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: logging:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: syslog:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: files\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: include_paths:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: - /var/log/messages\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: - /var/log/syslog\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers: [syslog]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: hostmetrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: hostmetrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: collection_interval: 60s\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: processors:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics_filter:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: exclude_metrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics_pattern: []\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers: [hostmetrics]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: processors: [metrics_filter]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: 2023/11/17 04:04:24 Merged config:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: logging:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: syslog:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: files\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: include_paths:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: - /var/log/messages\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: - /var/log/syslog\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers: [syslog]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: hostmetrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: hostmetrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: collection_interval: 60s\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: processors:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics_filter:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: exclude_metrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics_pattern: []\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers: [hostmetrics]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: processors: [metrics_filter]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: 2023/11/17 04:04:24 Built-in config:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: logging:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: syslog:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: files\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: include_paths:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: - /var/log/messages\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: - /var/log/syslog\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers: [syslog]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: hostmetrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: hostmetrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: collection_interval: 60s\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: processors:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics_filter:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: exclude_metrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics_pattern: []\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers: [hostmetrics]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: processors: [metrics_filter]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: 2023/11/17 04:04:24 Merged config:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: logging:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: syslog:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: files\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: include_paths:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: - /var/log/messages\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: - /var/log/syslog\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers: [syslog]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: hostmetrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: hostmetrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: collection_interval: 60s\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: processors:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics_filter:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: exclude_metrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics_pattern: []\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers: [hostmetrics]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: processors: [metrics_fil[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Cloud Ops Agent - Logging Agent\u001b[0m.\r\nter]\r\nNov 17 04:04:24 debian systemd[1]: Started Google Cloud Ops Agent - Logging Agent.\r\nNov 17 04:04:24 debian systemd[1]: Started Google Cloud Ops Agent - Metrics Agent.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Cloud Ops Agent - Metrics Agent\u001b[0m.\r\nNov 17 04:04:28 debian google_metadata_script_runner[822]: startup-script: google-cloud-ops-agent installation succeeded.\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:04:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 12345601 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=11112222 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:04:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Compute Engine Startup Scripts\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mMulti-User System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mGraphical Interface\u001b[0m.\r\n Starting \u001b[0;1;39mUpdate UTMP about System Runlevel Changes\u001b[0m...\r\nNov 17 04:04:29 debian google_metadata_script_runner[822]: startup-script exit status 0\r\nNov 17 04:04:29 debian google_metadata_script_runner[822]: Finished running startup scripts.\r\nNov 17 04:04:29 debian systemd[1]: google-startup-scripts.service: Succeeded.\r\nNov 17 04:04:29 debian systemd[1]: Finished Google Compute Engine Startup Scripts.\r\nNov 17 04:04:29 debian systemd[1]: google-startup-scripts.service: Consumed 15.644s CPU time.\r\nNov 17 04:04:29 debian systemd[1]: Reached target Multi-User System.\r\nNov 17 04:04:29 debian systemd[1]: Reached target Graphical Interface.\r\nNov 17 04:04:29 debian systemd[1]: Starting Update UTMP about System Runlevel Changes...\r\nNov 17 04:04:29 debian systemd[1]: systemd-update-utmp-runlevel.service: Succeeded.\r\nNov 17 04:04:29 debian systemd[1]: Finished Update UTMP about System Runlevel Changes.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mUpdate UTMP about System Runlevel Changes\u001b[0m.\r\nNov 17 04:04:29 debian systemd[1]: Startup finished in 1.399s (kernel) + 44.740s (userspace) = 46.140s.\r\n[ 46.434139] process 'subagents/fluent-bit/bin/fluent-bit' started with executable stack\r\nNov 17 04:04:29 debian kernel: [ 46.434139] process 'subagents/fluent-bit/bin/fluent-bit' started with executable stack\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.529Z#011info#011service/telemetry.go:81#011Setting up own telemetry...\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.565Z#011info#011service/telemetry.go:104#011Serving Prometheus metrics#011{\"address\": \"0.0.0.0:20201\", \"level\": \"Basic\"}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.642Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\"include match_type\": \"\", \"include expressions\": [], \"include metric names\": [], \"include metrics with resource attributes\": null, \"exclude match_type\": \"regexp\", \"exclude expressions\": [], \"exclude metric names\": [], \"exclude metrics with resource attributes\": null}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.649Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\"include match_type\": \"\", \"include expressions\": [], \"include metric names\": [], \"include metrics with resource attributes\": null, \"exclude match_type\": \"strict\", \"exclude expressions\": [], \"exclude metric names\": [\"system.cpu.time\", \"system.network.dropped\", \"system.filesystem.inodes.usage\", \"system.paging.faults\", \"system.disk.operation_time\"], \"exclude metrics with resource attributes\": null}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.649Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\"include match_type\": \"strict\", \"include expressions\": [], \"include metric names\": [\"otelcol_process_uptime\", \"otelcol_process_memory_rss\", \"otelcol_grpc_io_client_completed_rpcs\", \"otelcol_googlecloudmonitoring_point_count\"], \"include metrics with resource attributes\": null, \"exclude match_type\": \"\", \"exclude expressions\": [], \"exclude metric names\": [], \"exclude metrics with resource attributes\": null}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\"include match_type\": \"strict\", \"include expressions\": [], \"include metric names\": [\"fluentbit_uptime\", \"fluentbit_stackdriver_requests_total\", \"fluentbit_stackdriver_proc_records_total\", \"fluentbit_stackdriver_retried_records_total\"], \"include metrics with resource attributes\": null, \"exclude match_type\": \"\", \"exclude expressions\": [], \"exclude metric names\": [], \"exclude metrics with resource attributes\": null}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011service/service.go:131#011Starting google-cloud-metrics-agent...#011{\"Version\": \"latest\", \"NumCPU\": 1}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011extensions/extensions.go:30#011Starting extensions...\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.743Z#011info#011internal/resourcedetection.go:125#011began detecting resource information\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.760Z#011info#011internal/resourcedetection.go:139#011detected resource information#011{\"resource\": {\"cloud.account.id\":\"gcpdiag-gce-faultyssh-runbook\",\"cloud.availability_zone\":\"europe-west2-a\",\"cloud.platform\":\"gcp_compute_engine\",\"cloud.provider\":\"gcp\",\"cloud.region\":\"europe-west2\",\"host.id\":\"4683873813257738493\",\"host.name\":\"valid-linux-ssh\",\"host.type\":\"projects/328022628735/machineTypes/e2-micro\"}}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.772Z#011info#011prometheusreceiver/metrics_receiver.go:243#011Scrape job added#011{\"jobName\": \"logging-collector\"}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.781Z#011info#011prometheusreceiver/metrics_receiver.go:255#011Starting discovery manager\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.802Z#011info#011prometheusreceiver/metrics_receiver.go:243#011Scrape job added#011{\"jobName\": \"otel-collector\"}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.802Z#011info#011service/service.go:148#011Everything is ready. Begin running and processing data.\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.824Z#011info#011prometheusreceiver/metrics_receiver.go:290#011Starting scrape manager\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.824Z#011info#011prometheusreceiver/metrics_receiver.go:255#011Starting discovery manager\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.825Z#011info#011prometheusreceiver/metrics_receiver.go:290#011Starting scrape manager\r\nNov 17 04:04:33 debian otelopscol[2111]: 2023-11-17T04:04:33.924Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:04:52 debian dhclient[435]: XMT: Solicit on ens4, interval 66360ms.\r\nNov 17 04:05:24 debian otelopscol[2111]: 2023-11-17T04:05:24.519Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:05:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:05:58 debian dhclient[435]: XMT: Solicit on ens4, interval 109720ms.\r\nNov 17 04:06:21 debian otelopscol[2111]: 2023-11-17T04:06:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:06:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:06:33 debian otelopscol[2111]: 2023-11-17T04:06:33.885Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:07:21 debian otelopscol[2111]: 2023-11-17T04:07:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:07:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:07:33 debian otelopscol[2111]: 2023-11-17T04:07:33.868Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:07:48 debian dhclient[435]: XMT: Solicit on ens4, interval 119890ms.\r\nNov 17 04:08:21 debian otelopscol[2111]: 2023-11-17T04:08:21.904Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:08:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:08:33 debian otelopscol[2111]: 2023-11-17T04:08:33.885Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:09:21 debian otelopscol[2111]: 2023-11-17T04:09:21.913Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:09:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:09:33 debian otelopscol[2111]: 2023-11-17T04:09:33.868Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:09:48 debian dhclient[435]: XMT: Solicit on ens4, interval 123690ms.\r\nNov 17 04:10:21 debian otelopscol[2111]: 2023-11-17T04:10:21.909Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:10:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:10:33 debian otelopscol[2111]: 2023-11-17T04:10:33.892Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:11:21 debian otelopscol[2111]: 2023-11-17T04:11:21.906Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:11:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:11:33 debian otelopscol[2111]: 2023-11-17T04:11:33.860Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:11:52 debian dhclient[435]: XMT: Solicit on ens4, interval 124490ms.\r\nNov 17 04:12:21 debian otelopscol[2111]: 2023-11-17T04:12:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:12:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:12:33 debian otelopscol[2111]: 2023-11-17T04:12:33.865Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:13:21 debian otelopscol[2111]: 2023-11-17T04:13:21.914Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:13:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:13:33 debian otelopscol[2111]: 2023-11-17T04:13:33.864Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:13:56 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:13:56 debian gce_workload_cert_refresh[2146]: 2023/11/17 04:13:56: Done\r\nNov 17 04:13:56 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:13:56 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:13:56 debian dhclient[435]: XMT: Solicit on ens4, interval 126650ms.\r\nNov 17 04:14:21 debian otelopscol[2111]: 2023-11-17T04:14:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:14:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:14:33 debian otelopscol[2111]: 2023-11-17T04:14:33.864Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:15:21 debian otelopscol[2111]: 2023-11-17T04:15:21.909Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:15:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:15:33 debian otelopscol[2111]: 2023-11-17T04:15:33.859Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:16:03 debian dhclient[435]: XMT: Solicit on ens4, interval 110910ms.\r\nNov 17 04:16:21 debian otelopscol[2111]: 2023-11-17T04:16:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:16:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:16:33 debian otelopscol[2111]: 2023-11-17T04:16:33.874Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:17:21 debian otelopscol[2111]: 2023-11-17T04:17:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:17:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:17:33 debian otelopscol[2111]: 2023-11-17T04:17:33.863Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:17:54 debian dhclient[435]: XMT: Solicit on ens4, interval 111550ms.\r\nNov 17 04:18:21 debian otelopscol[2111]: 2023-11-17T04:18:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:18:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:18:33 debian otelopscol[2111]: 2023-11-17T04:18:33.861Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:18:56 debian systemd[1]: Starting Cleanup of Temporary Directories...\r\nNov 17 04:18:56 debian systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\r\nNov 17 04:18:56 debian systemd[1]: Finished Cleanup of Temporary Directories.\r\nNov 17 04:19:21 debian otelopscol[2111]: 2023-11-17T04:19:21.908Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:19:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:19:33 debian otelopscol[2111]: 2023-11-17T04:19:33.858Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:19:45 debian dhclient[435]: XMT: Solicit on ens4, interval 110200ms.\r\nNov 17 04:20:21 debian otelopscol[2111]: 2023-11-17T04:20:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:20:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:20:33 debian otelopscol[2111]: 2023-11-17T04:20:33.862Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:21:21 debian otelopscol[2111]: 2023-11-17T04:21:21.904Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:21:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:21:33 debian otelopscol[2111]: 2023-11-17T04:21:33.856Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:21:36 debian dhclient[435]: XMT: Solicit on ens4, interval 124490ms.\r\nNov 17 04:22:21 debian otelopscol[2111]: 2023-11-17T04:22:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:22:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:22:33 debian otelopscol[2111]: 2023-11-17T04:22:33.849Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:23:21 debian otelopscol[2111]: 2023-11-17T04:23:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:23:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:23:33 debian otelopscol[2111]: 2023-11-17T04:23:33.855Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:23:40 debian dhclient[435]: XMT: Solicit on ens4, interval 113100ms.\r\nNov 17 04:24:21 debian otelopscol[2111]: 2023-11-17T04:24:21.908Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:24:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:24:33 debian otelopscol[2111]: 2023-11-17T04:24:33.853Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:24:56 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:24:56 debian gce_workload_cert_refresh[2159]: 2023/11/17 04:24:56: Done\r\nNov 17 04:24:56 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:24:56 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\n", "start": "0", "next": "311872", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh/serialPortOutput" } ================================================ FILE: test-data/gce2/json-dumps/compute-serial-port-output-valid-windows-ssh.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n\r\n\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[1m\u001b[37m\u001b[40m\u001b[2J\u001b[01;01H2023/11/17 04:04:27 GCEGuestAgent: GCE Agent Started (version 20231004.02)\n2023/11/17 04:04:27 GCEGuestAgent: Adding route to metadata server on adapter with index 5\n2023/11/17 04:04:28 GCEGuestAgent: Starting the scheduler to run jobs\n2023/11/17 04:04:28 GCEGuestAgent: start: []\n2023/11/17 04:04:28 GCEGuestAgent: Successfully scheduled job telemetryJobID\n2023/11/17 04:10:04 GCEInstanceSetup: Enable google_osconfig_agent during the specialize configuration pass.\n2023/11/17 04:10:13 GCEInstanceSetup: Starting sysprep specialize phase.\n2023/11/17 04:10:31 GCEInstanceSetup: All networks set to DHCP.\n2023/11/17 04:10:32 GCEInstanceSetup: VirtIO network adapter detected.\n2023/11/17 04:10:33 GCEInstanceSetup: Running 'netsh' with arguments 'interface ipv4 set interface Ethernet mtu=1460'\n2023/11/17 04:10:44 GCEInstanceSetup: --\u003e Ok.\n2023/11/17 04:10:44 GCEInstanceSetup: MTU set to 1460.\n2023/11/17 04:10:44 GCEInstanceSetup: Running 'route' with arguments '/p add 169.254.169.254 mask 255.255.255.255 0.0.0.0 if 5 metric 1'\n2023/11/17 04:10:45 GCEInstanceSetup: --\u003e OK!\n2023/11/17 04:10:57 GCEInstanceSetup: Getting hostname from metadata server.\n2023/11/17 04:10:58 GCEInstanceSetup: Renamed from WIN-4VMNVNB0HQV to valid-windows-ssh.\n2023/11/17 04:10:58 GCEInstanceSetup: Configuring WinRM...\n2023/11/17 04:11:15 GCEInstanceSetup: Running 'C:\\Program Files\\Google\\Compute Engine\\tools\\certgen.exe' with arguments '-outDir C:\\Windows\\TEMP\\cert -hostname valid-windows-ssh'\n2023/11/17 04:11:19 GCEInstanceSetup: --\u003e written C:\\Windows\\TEMP\\cert\\cert.p12\n2023/11/17 04:11:21 GCEInstanceSetup: Waiting for WinRM to be running...\n2023/11/17 04:11:30 GCEInstanceSetup: Setup of WinRM complete.\n2023/11/17 04:11:32 GCEMetadataScripts: Starting specialize scripts (version 20231004.02).\n2023/11/17 04:11:32 GCEMetadataScripts: No specialize scripts to run.\n2023/11/17 04:11:32 GCEInstanceSetup: Finished with sysprep specialize phase, restarting...\n2023/11/17 04:11:49 GCEGuestAgent: Error watching metadata: context canceled\n2023/11/17 04:11:51 GCEGuestAgent: GCE Agent Stopped\n\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0003 \"Windows Boot Manager\" from HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\EFI\\Microsoft\\Boot\\bootmgfw.efi\r\nBdsDxe: starting Boot0003 \"Windows Boot Manager\" from HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\EFI\\Microsoft\\Boot\\bootmgfw.efi\r\n\r\nUEFI: Attempting to start image.\r\nDescription: Windows Boot Manager\r\nFilePath: HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\EFI\\Microsoft\\Boot\\bootmgfw.efi\r\nOptionNumber: 3.\r\n\r\n\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[1m\u001b[37m\u001b[40m\u001b[2J\u001b[01;01H2023/11/17 04:14:43 GCEInstanceSetup: Enable google_osconfig_agent during the specialize configuration pass.\n2023/11/17 04:14:54 GCEInstanceSetup: WinRM certificate details: Subject: CN=valid-windows-ssh, Thumbprint: DF776825E4EFC3C6755C172199C8467279BDBD3D\n2023/11/17 04:14:54 GCEInstanceSetup: RDP certificate details: Subject: CN=valid-windows-ssh, Thumbprint: 1998E382AD653F50CBBB2BD661F96F64DD7B89F7\n2023/11/17 04:15:04 GCEInstanceSetup: Checking instance license activation status.\n2023/11/17 04:15:19 GCEInstanceSetup: valid-windows-ssh needs to be activated by a KMS Server.\n2023/11/17 04:15:21 GCEInstanceSetup: Key Management Service machine name set to kms.windows.googlecloud.com successfully.\n2023/11/17 04:15:27 GCEInstanceSetup: Installed product key WMDGN-G9PQG-XVVXX-R3X43-63DFG successfully.\n2023/11/17 04:15:27 GCEInstanceSetup: Activating instance...\n2023/11/17 04:15:47 GCEInstanceSetup: Activating Windows(R), ServerDatacenter edition (34e1ae55-27f8-4950-8877-7a03be5fb181) ...\n2023/11/17 04:15:47 GCEInstanceSetup: Product activated successfully.\n2023/11/17 04:15:50 GCEInstanceSetup: Activation successful.\n2023/11/17 04:15:50 GCEInstanceSetup: Running 'schtasks' with arguments '/change /tn GCEStartup /enable'\n2023/11/17 04:15:51 GCEInstanceSetup: --\u003e SUCCESS: The parameters of scheduled task \"GCEStartup\" have been changed.\n2023/11/17 04:15:51 GCEInstanceSetup: Running 'schtasks' with arguments '/run /tn GCEStartup'\n2023/11/17 04:15:51 GCEInstanceSetup: --\u003e SUCCESS: Attempted to run the scheduled task \"GCEStartup\".\n2023/11/17 04:15:51 GCEInstanceSetup: ------------------------------------------------------------\n2023/11/17 04:15:51 GCEInstanceSetup: Instance setup finished. valid-windows-ssh is ready to use.\n2023/11/17 04:15:51 GCEInstanceSetup: ------------------------------------------------------------\n2023/11/17 04:16:06 GCEMetadataScripts: Starting startup scripts (version 20231004.02).\n2023/11/17 04:16:09 GCEMetadataScripts: No startup scripts to run.\n2023/11/17 04:16:10 GCEGuestAgent: GCE Agent Started (version 20231004.02)\n2023/11/17 04:16:17 GCEGuestAgent: Starting the scheduler to run jobs\n2023/11/17 04:16:19 GCEGuestAgent: start: []\n2023/11/17 04:16:20 GCEGuestAgent: Scheduling job \"telemetryJobID\" to run at 24.000000 hr interval\n2023/11/17 04:16:20 GCEGuestAgent: Successfully scheduled job telemetryJobID\n2023/11/17 04:16:20 GCEGuestAgent: added: [now 2023-11-17 04:16:20.6575916 +0000 GMT entry 1 next 2023-11-18 04:16:20 +0000 GMT]\n2023-11-17T04:16:37.9296Z OSConfigAgent Info: OSConfig Agent (version 20231010.00.0+win@1) started.\n", "start": "0", "next": "5789", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-windows-ssh/serialPortOutput" } ================================================ FILE: test-data/gce2/json-dumps/compute-subnetwork-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com" ], "role": "roles/compute.networkUser" } ], "etag": "BwXba-kLoiA=", "version": 1 } ================================================ FILE: test-data/gce2/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/aggregated/subnetworks", "items": { "regions/asia-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.626-07:00", "fingerprint": "ExVityxQ7Zw=", "gatewayAddress": "10.140.0.1", "id": "7865289181883843690", "ipCidrRange": "10.140.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.735-07:00", "fingerprint": "WEPpLpqTaII=", "gatewayAddress": "10.170.0.1", "id": "1625232185091474538", "ipCidrRange": "10.170.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.546-07:00", "fingerprint": "bQ24OL6A-_g=", "gatewayAddress": "10.146.0.1", "id": "1533136348119614570", "ipCidrRange": "10.146.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.673-07:00", "fingerprint": "V5llMO8nmmI=", "gatewayAddress": "10.174.0.1", "id": "9108510720326681706", "ipCidrRange": "10.174.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.690-07:00", "fingerprint": "YvlSkRtP_4s=", "gatewayAddress": "10.178.0.1", "id": "4106072082002527338", "ipCidrRange": "10.178.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.687-07:00", "fingerprint": "wpauE-6Ls5k=", "gatewayAddress": "10.160.0.1", "id": "799045077667726442", "ipCidrRange": "10.160.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.745-07:00", "fingerprint": "Q7YnvFsvcIs=", "gatewayAddress": "10.190.0.1", "id": "5569943562367845482", "ipCidrRange": "10.190.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.680-07:00", "fingerprint": "9qw_IGoz63I=", "gatewayAddress": "10.148.0.1", "id": "1399967472608134250", "ipCidrRange": "10.148.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.669-07:00", "fingerprint": "A364yIYGdbo=", "gatewayAddress": "10.184.0.1", "id": "925018594468217962", "ipCidrRange": "10.184.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.681-07:00", "fingerprint": "nW5ufndV5Es=", "gatewayAddress": "10.152.0.1", "id": "3491955985615471722", "ipCidrRange": "10.152.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.656-07:00", "fingerprint": "DrRYoQz8MQQ=", "gatewayAddress": "10.192.0.1", "id": "3881444575162188906", "ipCidrRange": "10.192.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-central2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.681-07:00", "fingerprint": "Fkp5Ia_kWjU=", "gatewayAddress": "10.186.0.1", "id": "7309165993080177770", "ipCidrRange": "10.186.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.676-07:00", "fingerprint": "uAKn9PpojKc=", "gatewayAddress": "10.166.0.1", "id": "5895305034600072298", "ipCidrRange": "10.166.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-southwest1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:34.478-07:00", "fingerprint": "7puHFtbgohs=", "gatewayAddress": "10.204.0.1", "id": "6503801733215994985", "ipCidrRange": "10.204.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.565-07:00", "fingerprint": "RYxGa4BdqVw=", "gatewayAddress": "10.132.0.1", "id": "4254674819412968554", "ipCidrRange": "10.132.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.592-07:00", "fingerprint": "InwBX-PAmxE=", "gatewayAddress": "10.154.0.1", "id": "8673388756094993514", "ipCidrRange": "10.154.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:34.435-07:00", "fingerprint": "jtqiYE_BvSA=", "gatewayAddress": "10.156.0.1", "id": "2730999123496453225", "ipCidrRange": "10.156.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.623-07:00", "fingerprint": "sfuW5PvbdEI=", "gatewayAddress": "10.164.0.1", "id": "1461822054006834282", "ipCidrRange": "10.164.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "secondaryIpRanges": [ { "ipCidrRange": "10.85.0.0/17", "rangeName": "gke-autopilot-gke1-pods-6a0c2f5b" }, { "ipCidrRange": "10.85.128.0/22", "rangeName": "gke-autopilot-gke1-services-6a0c2f5b" }, { "ipCidrRange": "10.60.0.0/20", "rangeName": "gke-gke4-services-e4411110" }, { "ipCidrRange": "10.56.0.0/14", "rangeName": "gke-gke4-pods-e4411110" }, { "ipCidrRange": "10.60.96.0/22", "rangeName": "gke-autopilot-gke2-services-3fbbc734" }, { "ipCidrRange": "10.60.128.0/17", "rangeName": "gke-autopilot-gke2-pods-3fbbc734" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "stackType": "IPV4_ONLY" }, { "creationTimestamp": "2022-10-11T07:16:29.795-07:00", "enableFlowLogs": false, "fingerprint": "PE0z2PNqD2Y=", "gatewayAddress": "192.168.0.1", "id": "7423481761753515090", "ipCidrRange": "192.168.0.0/24", "kind": "compute#subnetwork", "logConfig": { "aggregationInterval": "INTERVAL_5_SEC", "enable": false, "flowSampling": 0.5, "metadata": "INCLUDE_ALL_METADATA" }, "name": "gke1-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "secondaryIpRanges": [ { "ipCidrRange": "192.168.1.0/24", "rangeName": "gke1-secondary-range-pod" }, { "ipCidrRange": "192.168.2.0/24", "rangeName": "gke1-secondary-range-svc" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west6": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.530-07:00", "fingerprint": "Ic4Y34BRjOE=", "gatewayAddress": "10.172.0.1", "id": "3567972882370315370", "ipCidrRange": "10.172.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west8": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.586-07:00", "fingerprint": "_MhtvVpnR5c=", "gatewayAddress": "10.198.0.1", "id": "5905962051052291178", "ipCidrRange": "10.198.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west9": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.638-07:00", "fingerprint": "0uz_7VhFjLE=", "gatewayAddress": "10.200.0.1", "id": "5697832252330263658", "ipCidrRange": "10.200.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.741-07:00", "fingerprint": "70g6IoCP0CM=", "gatewayAddress": "10.208.0.1", "id": "2381367997960340586", "ipCidrRange": "10.208.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.499-07:00", "fingerprint": "vNYpwgnkSCI=", "gatewayAddress": "10.162.0.1", "id": "5798419596128601194", "ipCidrRange": "10.162.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.493-07:00", "fingerprint": "7ik2BWFfN84=", "gatewayAddress": "10.188.0.1", "id": "711542983096845418", "ipCidrRange": "10.188.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.668-07:00", "fingerprint": "pqhad5TnzVc=", "gatewayAddress": "10.158.0.1", "id": "2301799042992620650", "ipCidrRange": "10.158.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.648-07:00", "fingerprint": "ea50MPZjruA=", "gatewayAddress": "10.194.0.1", "id": "6124576470534243434", "ipCidrRange": "10.194.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.382-07:00", "fingerprint": "pb4O-4ISjAE=", "gatewayAddress": "10.128.0.1", "id": "6250438653192488042", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.368-07:00", "fingerprint": "bvN-N8FS9U4=", "gatewayAddress": "10.142.0.1", "id": "1443866556678849642", "ipCidrRange": "10.142.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.486-07:00", "fingerprint": "jew6EZUeYrM=", "gatewayAddress": "10.150.0.1", "id": "5871230243962405994", "ipCidrRange": "10.150.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east5": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.504-07:00", "fingerprint": "KVZisxAl1CI=", "gatewayAddress": "10.202.0.1", "id": "4332627157280408682", "ipCidrRange": "10.202.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east7": { "subnetworks": [ { "creationTimestamp": "2022-10-11T09:13:19.272-07:00", "fingerprint": "BEZq6cSPkco=", "gatewayAddress": "10.196.0.1", "id": "7977046348344600816", "ipCidrRange": "10.196.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.435-07:00", "fingerprint": "1Se61ZXzpjY=", "gatewayAddress": "10.206.0.1", "id": "7154466601132672106", "ipCidrRange": "10.206.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.499-07:00", "fingerprint": "E0k7cQEp7_I=", "gatewayAddress": "10.138.0.1", "id": "5323136092791686250", "ipCidrRange": "10.138.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.549-07:00", "fingerprint": "-JD9bbh-QlA=", "gatewayAddress": "10.168.0.1", "id": "4458757238523741290", "ipCidrRange": "10.168.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.524-07:00", "fingerprint": "P01BE480Q2I=", "gatewayAddress": "10.180.0.1", "id": "1135562538472752234", "ipCidrRange": "10.180.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.521-07:00", "fingerprint": "2k-WBaR7JKQ=", "gatewayAddress": "10.182.0.1", "id": "7061406355024299114", "ipCidrRange": "10.182.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/subnetworks" } ================================================ FILE: test-data/gce2/json-dumps/compute-subnetworks-europe-west4.json ================================================ { "kind": "compute#subnetworkList", "id": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks", "items": [ { "kind": "compute#subnetwork", "id": "4774247690482065659", "creationTimestamp": "2022-03-30T02:08:36.021-07:00", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "ipCidrRange": "10.164.0.0/20", "gatewayAddress": "10.164.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "privateIpGoogleAccess": true, "secondaryIpRanges": [ { "rangeName": "gke-gke4-services-93befb7e", "ipCidrRange": "10.60.0.0/20" }, { "rangeName": "gke-gke4-pods-93befb7e", "ipCidrRange": "10.56.0.0/14" }, { "rangeName": "gke-autopilot-gke1-services-19977223", "ipCidrRange": "10.85.128.0/22" }, { "rangeName": "gke-autopilot-gke1-pods-19977223", "ipCidrRange": "10.85.0.0/17" }, { "rangeName": "gke-autopilot-gke2-pods-65d1ba15", "ipCidrRange": "10.60.128.0/17" }, { "rangeName": "gke-autopilot-gke2-services-65d1ba15", "ipCidrRange": "10.60.96.0/22" } ], "fingerprint": "-9hqGif0SQ0=", "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "stackType": "IPV4_ONLY" }, { "kind": "compute#subnetwork", "id": "1818761461517361320", "creationTimestamp": "2022-03-30T02:09:27.964-07:00", "name": "gke1-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "ipCidrRange": "192.168.0.0/24", "gatewayAddress": "192.168.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "privateIpGoogleAccess": false, "secondaryIpRanges": [ { "rangeName": "gke1-secondary-range-pod", "ipCidrRange": "192.168.1.0/24" }, { "rangeName": "gke1-secondary-range-svc", "ipCidrRange": "192.168.2.0/24" } ], "fingerprint": "Ir2p9uebpiE=", "enableFlowLogs": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "logConfig": { "enable": false }, "stackType": "IPV4_ONLY" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks" } ================================================ FILE: test-data/gce2/json-dumps/compute-templates.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/global/instanceTemplates", "items": [ { "creationTimestamp": "2022-04-26T08:21:35.891-07:00", "description": "", "id": "4047445761213182736", "kind": "compute#instanceTemplate", "name": "gke-gke1-default-pool-35923fbc", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-standard", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "machineType": "e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "kube-env", "value": "REDACTED" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "europe-west1-b" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "cluster-name", "value": "gke1" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke1-f36cf6dd-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "creationTimestamp": "2022-04-26T08:20:48.842-07:00", "description": "", "id": "7086722794918359871", "kind": "compute#instanceTemplate", "name": "mig-template", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskType": "pd-standard", "sourceImage": "projects/debian-cloud/global/images/family/debian-9" }, "interface": "SCSI", "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "machineType": "e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "networkInterfaces": [ { "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template" } ], "kind": "compute#instanceTemplateList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates" } ================================================ FILE: test-data/gce2/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-gce-faultyssh-runbook/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-f", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2541", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-a", "description": "europe-southwest1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-b", "description": "europe-southwest1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2542", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-c", "description": "europe-southwest1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2591", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-a", "description": "europe-west10-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2592", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-b", "description": "europe-west10-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-c", "description": "europe-west10-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2571", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-a", "description": "europe-west12-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2572", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-b", "description": "europe-west12-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-c", "description": "europe-west12-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2521", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-a", "description": "europe-west9-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-b", "description": "europe-west9-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2522", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-c", "description": "europe-west9-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-a", "description": "me-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2581", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-b", "description": "me-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2582", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-c", "description": "me-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2601", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-a", "description": "me-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2602", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-b", "description": "me-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-c", "description": "me-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2561", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-a", "description": "me-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-b", "description": "me-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2562", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-c", "description": "me-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2532", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-a", "description": "us-east5-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2531", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-b", "description": "us-east5-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-c", "description": "us-east5-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2551", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-a", "description": "us-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2552", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-b", "description": "us-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-c", "description": "us-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones" } ================================================ FILE: test-data/gce2/json-dumps/healthChecks.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-gce1-aaaa/global/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "6570916794820924287", "creationTimestamp": "2023-11-22T17:40:32.481-08:00", "name": "http-basic-check", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/http-basic-check", "logConfig": { "enable": true } }, { "kind": "compute#healthCheck", "id": "2011808073814110499", "creationTimestamp": "2023-11-22T11:00:28.722-08:00", "name": "http-basic-check-2", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/http-basic-check-2" }, { "kind": "compute#healthCheck", "id": "4700445592381550883", "creationTimestamp": "2023-11-22T11:00:28.748-08:00", "name": "tcp-basic-check-1", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "TCP", "tcpHealthCheck": { "port": 80, "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/tcp-basic-check-1", "logConfig": { "enable": true } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/" } ================================================ FILE: test-data/gce2/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com" ], "role": "roles/compute.instanceAdmin.v1" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com" ], "role": "roles/compute.osAdminLogin" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com" ], "role": "roles/compute.osLogin" }, { "members": [ "serviceAccount:service-12345601@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:12345601-compute@developer.gserviceaccount.com", "serviceAccount:12345601@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com" ], "role": "roles/iam.serviceAccountUser" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com" ], "role": "roles/iap.tunnelResourceAccessor" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com", "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12345601@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ], "role": "roles/websecurityscanner.serviceAgent" } ], "etag": "BwYKUSKQwSE=", "version": 1 } ================================================ FILE: test-data/gce2/json-dumps/iam-roles-get.json ================================================ {"roles": []} ================================================ FILE: test-data/gce2/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Cannot SSH Service Account", "email": "cannotssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce-faultyssh-runbook/serviceAccounts/cannotssh@gcpdiag-gce-faultyssh-n2tgc4kt.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce-faultyssh-runbook", "uniqueId": "10333387329722592424890" }, { "displayName": "Compute Engine default service account", "email": "12345601-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce-faultyssh-runbook/serviceAccounts/12345601-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce-faultyssh-runbook", "uniqueId": "115133333227031909369" }, { "displayName": "Can SSH Service Account", "email": "canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce-faultyssh-runbook/serviceAccounts/canssh@gcpdiag-gce-faultyssh-n2tgc4kt.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce-faultyssh-runbook", "uniqueId": "11795333333333337128185" } ] } ================================================ FILE: test-data/gce2/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9dartq", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_id": "8700821884762314590", "instance_group_manager_name": "gke-gke2-default-pool-11b6ca8e-grp", "project_id": "gcpdiag-gke1-aaaa", "location": "europe-west1-b" } }, "timestamp": "2021-11-24T16:35:22.615295Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:23.172680503Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-nuwdobe1byj2", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-98631c84-grp", "project_id": "gcpdiag-gke1-aaaa", "location": "europe-west1-d", "instance_group_manager_id": "6471686162526492481" } }, "timestamp": "2021-11-24T16:35:10.014049Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:10.306123333Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kpc", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-5e5781dd-grp", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "5205754198527039297", "location": "europe-west1-c" } }, "timestamp": "2021-11-24T16:35:08.922507Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693418-5d18b700269e6-19f4d541-4d012584", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:09.484397071Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kou", "resource": { "type": "gce_instance_group_manager", "labels": { "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "3383879657688651622", "location": "europe-west1-c", "instance_group_manager_name": "gke-gke3-default-pool-013fb293-grp" } }, "timestamp": "2021-11-24T16:34:38.479723Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:39.479072691Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9darqs", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west1-b", "instance_group_manager_id": "5404218744580069225", "instance_group_manager_name": "gke-gke3-default-pool-597c9ca2-grp", "project_id": "gcpdiag-gke1-aaaa" } }, "timestamp": "2021-11-24T16:34:37.484721Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:38.168845698Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-31olexd4rpi", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke3-default-pool-c125bae7-grp", "location": "europe-west1-d", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "1403931912127633256" } }, "timestamp": "2021-11-24T16:34:35.389660Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:35.872428070Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } ] } ================================================ FILE: test-data/gce2/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.project_id" }, { "key": "resource.zone" }, { "key": "resource.instance_id" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_utilization_max", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "10^2.%" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "gcpdiag-gce-faultyssh-runbook" }, { "stringValue": "europe-west2-a" }, { "stringValue": "5942951451833189109" }, { "stringValue": "valid-linux-ssh" } ], "pointData": [ { "values": [ { "doubleValue": 0.0045755313326865847 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] }, { "labelValues": [ { "stringValue": "gcpdiag-gce-faultyssh-runbook" }, { "stringValue": "europe-west2-a" }, { "stringValue": "3885320804588110182" }, { "stringValue": "faulty-windows-ssh" } ], "pointData": [ { "values": [ { "doubleValue": 0.28800768913451219 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] }, { "labelValues": [ { "stringValue": "gcpdiag-gce-faultyssh-runbook" }, { "stringValue": "europe-west2-a" }, { "stringValue": "3200700792812650937" }, { "stringValue": "valid-windows-ssh" } ], "pointData": [ { "values": [ { "doubleValue": 0.30707438214176364 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] }, { "labelValues": [ { "stringValue": "gcpdiag-gce-faultyssh-runbook" }, { "stringValue": "europe-west2-a" }, { "stringValue": "1843453795420711417" }, { "stringValue": "faulty-linux-ssh" } ], "pointData": [ { "values": [ { "doubleValue": 0.99957377216799159 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] } ] } ================================================ FILE: test-data/gce2/json-dumps/project.json ================================================ { "name": "projects/12345601", "parent": "folders/123456012", "projectId": "gcpdiag-gce-faultyssh-runbook", "state": "ACTIVE", "displayName": "gcpdiag test - faultyssh", "createTime": "2023-11-03T21:16:55.750643Z", "updateTime": "2023-11-04T04:00:10.466760Z", "etag": "W/\"80b0d9f39ba4a6c9\"", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gce2/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12345601/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "BETA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" } ] } ================================================ FILE: test-data/gce2/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - faultyssh" project_id = var.project_id != "" ? var.project_id : "gcpdiag-gce2-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_compute_project_metadata_item" "serial_logging" { project = google_project.project.project_id depends_on = [google_project_service.compute] key = "serial-port-logging-enable" value = "true" } data "google_compute_default_service_account" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] } data "google_compute_image" "debian" { family = "debian-11" project = "debian-cloud" } data "google_compute_image" "windows" { family = "windows-2019-core" project = "windows-cloud" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gce2/variables.tf ================================================ variable "project_id" { //default = "use-an-existing-test-project" } variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } variable "roles" { description = "List of SSH related roles to assign" type = list(string) default = [ "roles/owner", "roles/compute.osLogin", "roles/compute.osAdminLogin", "roles/iam.serviceAccountUser", "roles/iap.tunnelResourceAccessor", "roles/compute.instanceAdmin.v1", ] } ================================================ FILE: test-data/gce3/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner ZONE_1 = europe-west2-a FAKE_PROJECT_ID_SUFFIX = 'ops-agent' FAKE_PROJECT_NR = 12345001 FAKE_ORG_ID = 11112222 COMPUTE_INSTANCES_MAXRESULTS=3 INSTANCE_NAME_GCE2=working-opsagent INSTANCE_NAME_GCE1=faulty-opsagent ORG_POLICY_CONSTRAINTS = \ json-dumps/org-constraint-compute.disableSerialPortAccess.json \ json-dumps/org-constraint-compute.requireOsLogin.json \ json-dumps/org-constraint-compute.requireShieldedVm.json \ json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json \ json-dumps/org-constraint-compute.disableSerialPortLogging.json \ json-dumps/org-constraint-compute.disableSshInBrowser.json all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-disks-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-regions.json \ json-dumps/compute-zones.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/monitoring-query.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/iam-roles-get.json \ json-dumps/iam-roles-custom.json \ json-dumps/predefined-roles.json \ ORG_POLICY_CONSTRAINTS include ../Makefile.inc define MONITORING_QUERY { \ "query": "fetch gce_instance::compute.googleapis.com/instance/uptime_total \ | within 10m \ | group_by [resource.zone, metric.instance_name] \ | group_by 5m, [.mean, .count] \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-roles-get.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/roles/logging.admin' \ | $(SED_SUBST_FAKE) \ | jq '{"roles": [.]}' >$@ json-dumps/iam-roles-custom.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/roles?view=FULL&pageSize=500' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gce3/faulty-opsagent.tf ================================================ /** * Copyright 2024 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. */ resource "google_compute_instance" "faulty_opsagent" { project = data.google_project.project.project_id depends_on = [google_project_service.compute] name = "faulty-opsagent" machine_type = "e2-micro" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.debian.self_link } } service_account { email = google_service_account.no_log_metric_perm_service_account.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", ] } metadata = { serial-port-logging-enable = "false" } } resource "google_compute_instance" "faulty_opsagent_no_sa" { project = data.google_project.project.project_id depends_on = [google_project_service.compute] name = "faulty-opsagent-no-sa" machine_type = "e2-micro" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.debian.self_link } } service_account { scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", ] } metadata = { serial-port-logging-enable = "false" } } ================================================ FILE: test-data/gce3/json-dumps/compute-disks-europe-west2-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/disks", "items": [ { "kind": "compute#disk", "id": "7166944352958546654", "creationTimestamp": "2024-02-01T07:43:45.923-08:00", "name": "instance1", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/disks/instance1", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-12-bookworm-v20240110", "sourceImageId": "7748237884069727279", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/diskTypes/pd-balanced", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "lastAttachTimestamp": "2024-02-01T07:43:45.923-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/instances/instance1" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "2147286739765738111" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" }, { "kind": "compute#disk", "id": "5777026617345865792", "creationTimestamp": "2024-05-22T03:19:28.097-07:00", "name": "rhel", "sizeGb": "20", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/disks/rhel", "sourceImage": "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/images/rhel-8-v20240515", "sourceImageId": "5034192189344274413", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/diskTypes/pd-balanced", "licenses": [ "https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-8-server" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2024-05-22T03:19:28.097-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/instances/rhel" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "601259152637613565" ], "physicalBlockSizeBytes": "4096", "satisfiesPzi": false, "architecture": "X86_64" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/disks" } ================================================ FILE: test-data/gce3/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "1788225532538797299", "creationTimestamp": "2023-02-17T05:33:16.236-08:00", "name": "http-port", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "port-80" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] } ], "direction": "INGRESS", "logConfig": { "enable": true, "metadata": "INCLUDE_ALL_METADATA" }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/http-port" }, { "kind": "compute#firewall", "id": "1244235299898498970", "creationTimestamp": "2024-02-27T09:52:53.714-08:00", "name": "gke-cluster-1-884ca4e1-exkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "gke-cluster-1-884ca4e1-node" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/gke-cluster-1-884ca4e1-exkubelet" }, { "kind": "compute#firewall", "id": "1300914097813168026", "creationTimestamp": "2024-02-27T09:52:53.909-08:00", "name": "gke-cluster-1-884ca4e1-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-cluster-1-884ca4e1-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/gke-cluster-1-884ca4e1-vms" }, { "kind": "compute#firewall", "id": "4661233205710171863", "creationTimestamp": "2020-08-10T11:21:44.205-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 0, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": true, "metadata": "INCLUDE_ALL_METADATA" }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "335207944630841047", "creationTimestamp": "2020-08-10T11:21:44.147-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" } ], "direction": "INGRESS", "logConfig": { "enable": true, "metadata": "INCLUDE_ALL_METADATA" }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "1321540330359857049", "creationTimestamp": "2024-02-27T09:52:54.337-08:00", "name": "gke-cluster-1-884ca4e1-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.4.0.0/14" ], "targetTags": [ "gke-cluster-1-884ca4e1-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" }, { "IPProtocol": "tcp" }, { "IPProtocol": "udp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/gke-cluster-1-884ca4e1-all" }, { "kind": "compute#firewall", "id": "2898450577279178561", "creationTimestamp": "2020-09-25T05:59:26.480-07:00", "name": "allow-health-check", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] } ], "direction": "INGRESS", "logConfig": { "enable": true, "metadata": "INCLUDE_ALL_METADATA" }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/allow-health-check" }, { "kind": "compute#firewall", "id": "8815473120383311769", "creationTimestamp": "2024-02-27T09:52:54.337-08:00", "name": "gke-cluster-1-884ca4e1-inkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 999, "sourceRanges": [ "10.4.0.0/14" ], "sourceTags": [ "gke-cluster-1-884ca4e1-node" ], "targetTags": [ "gke-cluster-1-884ca4e1-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/gke-cluster-1-884ca4e1-inkubelet" }, { "kind": "compute#firewall", "id": "4950939530198662322", "creationTimestamp": "2020-08-24T02:03:25.144-07:00", "name": "default-allow-http", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "http-server" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] } ], "direction": "INGRESS", "logConfig": { "enable": true, "metadata": "INCLUDE_ALL_METADATA" }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-http" }, { "kind": "compute#firewall", "id": "4628907370585406642", "creationTimestamp": "2020-08-24T02:03:25.784-07:00", "name": "default-allow-https", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "https-server" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "443" ] } ], "direction": "INGRESS", "logConfig": { "enable": true, "metadata": "INCLUDE_ALL_METADATA" }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-https" }, { "kind": "compute#firewall", "id": "7385733757958528036", "creationTimestamp": "2024-04-10T16:37:47.730-07:00", "name": "ssh", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "34.141.189.94/32" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22", "5091", "5901" ] } ], "direction": "INGRESS", "logConfig": { "enable": true, "metadata": "INCLUDE_ALL_METADATA" }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/ssh" }, { "kind": "compute#firewall", "id": "3658712715550797527", "creationTimestamp": "2020-08-10T11:21:44.234-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": true, "metadata": "INCLUDE_ALL_METADATA" }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "4002099376250707573", "creationTimestamp": "2022-12-08T05:03:22.205-08:00", "name": "allow-ingress-iap", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "priority": 500, "sourceRanges": [ "35.235.240.0/20" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22", "3389", "5091" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/allow-ingress-iap" } ], "firewallPolicys": [ { "name": "902824820698", "type": "HIERARCHY", "shortName": "default-firewall-policy", "displayName": "default-firewall-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 0, "match": { "srcIpRanges": [ "34.168.226.0/26", "34.102.114.64/26", "34.16.224.64/26", "34.48.81.64/26", "34.168.146.160/27", "34.16.224.160/27", "34.82.66.0/24", "34.82.90.0/24", "34.82.98.0/24", "34.82.160.0/24", "34.82.166.128/25" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 1, "match": { "destIpRanges": [ "34.83.160.25/32", "34.125.160.60/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 487, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 488, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 600, "match": { "srcIpRanges": [ "35.235.240.0/20" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "22", "3389", "5900-5901" ] } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 601, "match": { "srcIpRanges": [ "35.191.0.0/16", "130.211.0.0/22", "209.85.152.0/22", "209.85.204.0/22", "169.254.169.254", "108.170.220.0/23" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 602, "match": { "srcIpRanges": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10", "240.0.0.0/4" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 603, "match": { "srcIpRanges": [ "35.199.192.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "53" ] }, { "ipProtocol": "udp", "ports": [ "53" ] } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 604, "match": { "srcIpRanges": [ "107.178.230.64/26", "35.199.224.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "667" ] }, { "ipProtocol": "udp", "ports": [ "665-666" ] }, { "ipProtocol": "icmp" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 700, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "deny", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483645, "match": { "srcIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false } ] } ] } ================================================ FILE: test-data/gce3/json-dumps/compute-instances-europe-west2-a.json ================================================ { "id": "projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-05-28T11:05:14.650-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/disks/faulty-opsagent", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "6455030489701655094", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2024-05-28T11:05:20.961-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "serial-port-logging-enable", "value": "false" } ], "kind": "compute#metadata" }, "name": "faulty-opsagent", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "networkIP": "10.154.0.69", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent", "serviceAccounts": [ { "email": "no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-05-28T10:46:19.989-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/disks/faulty-opsagent-no-sa", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3890206252528805508", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2024-05-28T10:46:24.523-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "serial-port-logging-enable", "value": "false" } ], "kind": "compute#metadata" }, "name": "faulty-opsagent-no-sa", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "networkIP": "10.154.0.68", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa", "serviceAccounts": [ { "email": "12345001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-05-28T10:45:18.408-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/disks/working-opsagent", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "2921639617738024642", "kind": "compute#instance", "labelFingerprint": "nhRbbj57YcA=", "labels": { "env": "valid" }, "lastStartTimestamp": "2024-05-28T10:45:23.910-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "working-opsagent", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "networkIP": "10.154.0.67", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent", "serviceAccounts": [ { "email": "12345001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances" } ================================================ FILE: test-data/gce3/json-dumps/compute-instances-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/instances" } ================================================ FILE: test-data/gce3/json-dumps/compute-network-default.json ================================================ { "autoCreateSubnetworks": true, "creationTimestamp": "2020-08-10T11:20:50.139-07:00", "description": "Default network for the project", "id": "5984955350541676269", "kind": "compute#network", "name": "default", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "peerings": [ { "autoCreateRoutes": true, "exchangeSubnetRoutes": true, "exportCustomRoutes": true, "exportSubnetRoutesWithPublicIp": true, "importCustomRoutes": true, "importSubnetRoutesWithPublicIp": false, "name": "peering-y7b5777b682d5ba4bp-tp-default", "network": "https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/servicenetworking", "stackType": "IPV4_ONLY", "state": "ACTIVE", "stateDetails": "[2024-02-10T04:29:01.768-08:00]: Connected." }, { "autoCreateRoutes": true, "exchangeSubnetRoutes": true, "exportCustomRoutes": false, "exportSubnetRoutesWithPublicIp": false, "importCustomRoutes": false, "importSubnetRoutesWithPublicIp": false, "name": "servicenetworking-googleapis-com", "network": "https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/servicenetworking", "stackType": "IPV4_ONLY", "state": "ACTIVE", "stateDetails": "[2023-01-13T21:36:22.520-08:00]: Connected." } ], "routingConfig": { "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/5984955350541676269", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3/subnetworks/default" ] } ================================================ FILE: test-data/gce3/json-dumps/compute-project.json ================================================ { "cloudArmorTier": "CA_STANDARD", "commonInstanceMetadata": { "fingerprint": "dzzoAfEyiME=", "items": [ { "key": "enable-guest-attributes", "value": "TRUE" }, { "key": "enable-osconfig", "value": "TRUE" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "ssh-keys", "value": "kwesigraham:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDOlFswYm/MxkF+79ZeXa7WzB2u8DxY4mq3VdPvPoalj481IY5UfxXSvpGeNRZehap83aUH/ZbSJZLDw7vn2Y737yTHJK2sW95UvKVjzdOsuiiJu101HPv+ZB1QzUkXeg7LRpR5jjUHTcYMz4a/Krw7KqMKY8NUaB2vKsWOgo0WKqzXk9mGGG/Q1W63BOOGZNCBzl8ocx+nPgiJz7fjCG1yjbg+pQzVGP+Qlydd5OVjbFdjmD1Q4GGbVUw50ddZ/1mAZReIz6KaTAt1CoMMceSjUfeHW0AXKwJzl8cIe0SXVmxtRxFv4c0kolc+WjSkfwLQlHN5oRmHUx52QXiBa1gVVf36RnzgJIxa0w8MHBdBIIq+ML4uf8PUy9FWarkKuV83uil2DLrvo8Dj1tthjPlzh6Vgt07k2Ee2mSllFbVL32I/nPVN5vn02+Ln5b66zmWQnmPzm5B6Bg7O47AuvDKme6zuxH0Fxq93hESKTlkRqksx9/yzJjsmTTFI2sXlD9s= kwesigraham@cs-245386939121-ephemeral-qud5" } ], "kind": "compute#metadata" }, "creationTimestamp": "2020-08-10T11:20:43.961-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12345001-compute@developer.gserviceaccount.com", "enabledFeatures": [ "alpha-api" ], "id": "7988415323333996820", "kind": "compute#project", "name": "gcpdiag-gce3-aaaa", "quotas": [ { "limit": 180000, "metric": "SNAPSHOTS", "usage": 1 }, { "limit": 30, "metric": "NETWORKS", "usage": 3 }, { "limit": 500, "metric": "FIREWALLS", "usage": 13 }, { "limit": 5000, "metric": "IMAGES", "usage": 3 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 0 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 1000, "metric": "HEALTH_CHECKS", "usage": 1 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 5 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 3 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 300, "metric": "SUBNETWORKS", "usage": 0 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 1 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 3 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES", "usage": 0 }, { "limit": 750, "metric": "GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa", "vmDnsSetting": "ZONAL_ONLY", "xpnProjectStatus": "HOST" } ================================================ FILE: test-data/gce3/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-gce3-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1", "description": "africa-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3", "supportsPzs": true }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1", "supportsPzs": true }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10", "description": "europe-west10", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10", "supportsPzs": true }, { "kind": "compute#region", "id": "1570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12", "description": "europe-west12", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12", "supportsPzs": true }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 3 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 3102 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 4 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 1550 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 7 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 3 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 1 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 2 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 3 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 1 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 3 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 300 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 1 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 1 }, { "metric": "INSTANCES", "limit": 6000, "usage": 3 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 26000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 2 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 1 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 2 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5", "supportsPzs": false }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 4, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions" } ================================================ FILE: test-data/gce3/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-gce3-aaaa/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Arm Development Platform", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Arm Development Platform", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-f", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west4-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west4-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west4-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2611", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-a", "description": "africa-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-b", "description": "africa-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2612", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-c", "description": "africa-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2541", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-a", "description": "europe-southwest1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-b", "description": "europe-southwest1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2542", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-c", "description": "europe-southwest1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2591", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-a", "description": "europe-west10-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2592", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-b", "description": "europe-west10-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-c", "description": "europe-west10-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2571", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-a", "description": "europe-west12-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2572", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-b", "description": "europe-west12-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-c", "description": "europe-west12-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2521", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-a", "description": "europe-west9-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west9-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-b", "description": "europe-west9-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west9-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2522", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-c", "description": "europe-west9-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west9-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-a", "description": "me-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2581", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-b", "description": "me-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2582", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-c", "description": "me-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2601", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-a", "description": "me-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2602", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-b", "description": "me-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-c", "description": "me-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2561", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-a", "description": "me-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-b", "description": "me-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2562", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-c", "description": "me-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2532", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-a", "description": "us-east5-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2531", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-b", "description": "us-east5-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-c", "description": "us-east5-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2551", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-a", "description": "us-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2552", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-b", "description": "us-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-c", "description": "us-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones" } ================================================ FILE: test-data/gce3/json-dumps/iam-policy.json ================================================ { "auditConfigs": [ { "auditLogConfigs": [ { "logType": "ADMIN_READ" }, { "logType": "DATA_READ" }, { "logType": "DATA_WRITE" } ], "service": "datapipelines.googleapis.com" }, { "auditLogConfigs": [ { "logType": "DATA_READ" }, { "logType": "DATA_WRITE" } ], "service": "compute.googleapis.com" }, { "auditLogConfigs": [ { "logType": "ADMIN_READ" }, { "logType": "DATA_READ" }, { "logType": "DATA_WRITE" } ], "service": "osconfig.googleapis.com" }, { "auditLogConfigs": [ { "logType": "DATA_WRITE" } ], "service": "monitoring.googleapis.com" } ], "bindings": [ { "members": [ "serviceAccount:service-12345001@compute-system.iam.gserviceaccount.com" ], "role": "projects/gcpdiag-gce3-aaaa/roles/instanceschedulerole" }, { "members": [ "user:testuser@example.com" ], "role": "roles/aiplatform.admin" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-aiplatform-cc.iam.gserviceaccount.com" ], "role": "roles/aiplatform.customCodeServiceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-aiplatform-vm.iam.gserviceaccount.com" ], "role": "roles/aiplatform.notebookServiceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-aiplatform.iam.gserviceaccount.com" ], "role": "roles/aiplatform.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-apigee.iam.gserviceaccount.com" ], "role": "roles/apigee.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-gae-service.iam.gserviceaccount.com" ], "role": "roles/appengine.serviceAgent" }, { "members": [ "user:testuser@example.com" ], "role": "roles/artifactregistry.admin" }, { "members": [ "user:testuser@example.com" ], "role": "roles/artifactregistry.repoAdmin" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-artifactregistry.iam.gserviceaccount.com" ], "role": "roles/artifactregistry.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com" ], "role": "roles/bigquerydatatransfer.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-cloudasset.iam.gserviceaccount.com" ], "role": "roles/cloudasset.serviceAgent" }, { "members": [ "serviceAccount:12345001@cloudbuild.gserviceaccount.com" ], "role": "roles/cloudbuild.builds.builder" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-cloudbuild.iam.gserviceaccount.com" ], "role": "roles/cloudbuild.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcf-admin-robot.iam.gserviceaccount.com" ], "role": "roles/cloudfunctions.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-cloudiot.iam.gserviceaccount.com" ], "role": "roles/cloudiot.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-cloudscheduler.iam.gserviceaccount.com" ], "role": "roles/cloudscheduler.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@cloudcomposer-accounts.iam.gserviceaccount.com" ], "role": "roles/composer.serviceAgent" }, { "members": [ "serviceAccount:12345001@cloudbuild.gserviceaccount.com", "user:testuser@example.com" ], "role": "roles/compute.admin" }, { "members": [ "user:testuser@example.com" ], "role": "roles/compute.networkAdmin" }, { "members": [ "serviceAccount:service-12345001@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "user:testuser@example.com" ], "role": "roles/container.admin" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-gkenode.iam.gserviceaccount.com" ], "role": "roles/container.nodeServiceAgent" }, { "members": [ "serviceAccount:service-12345001@container-engine-robot.iam.gserviceaccount.com" ], "role": "roles/container.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@container-analysis.iam.gserviceaccount.com" ], "role": "roles/containeranalysis.ServiceAgent" }, { "members": [ "serviceAccount:service-12345001@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-containerscanning.iam.gserviceaccount.com" ], "role": "roles/containerscanning.ServiceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-ktd-control.iam.gserviceaccount.com" ], "role": "roles/containerthreatdetection.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@dataflow-service-producer-prod.iam.gserviceaccount.com" ], "role": "roles/dataflow.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-dataform.iam.gserviceaccount.com" ], "role": "roles/dataform.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-datafusion.iam.gserviceaccount.com" ], "role": "roles/datafusion.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-datamigration.iam.gserviceaccount.com" ], "role": "roles/datamigration.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@dataproc-accounts.iam.gserviceaccount.com" ], "role": "roles/dataproc.serviceAgent" }, { "members": [ "serviceAccount:12345001@cloudservices.gserviceaccount.com", "serviceAccount:gcpdiag-gce3-aaaa@appspot.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "serviceAccount:service-12345001@firebase-rules.iam.gserviceaccount.com" ], "role": "roles/firebaserules.system" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-firestore.iam.gserviceaccount.com" ], "role": "roles/firestore.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-gkebackup.iam.gserviceaccount.com" ], "role": "roles/gkebackup.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-healthcare.iam.gserviceaccount.com" ], "role": "roles/healthcare.serviceAgent" }, { "members": [ "user:testuser@example.com" ], "role": "roles/iam.serviceAccountAdmin" }, { "members": [ "user:testuser@example.com" ], "role": "roles/iam.serviceAccountTokenCreator" }, { "members": [ "serviceAccount:12345001-compute@developer.gserviceaccount.com", "serviceAccount:12345001@cloudbuild.gserviceaccount.com", "user:testuser@example.com" ], "role": "roles/iam.serviceAccountUser" }, { "members": [ "user:testuser@example.com" ], "role": "roles/iap.tunnelResourceAccessor" }, { "members": [ "serviceAccount:12345001-compute@developer.gserviceaccount.com" ], "role": "roles/logging.admin" }, { "members": [ "serviceAccount:12345001-compute@developer.gserviceaccount.com" ], "role": "roles/logging.logWriter" }, { "members": [ "user:testuser@example.com" ], "role": "roles/logging.viewer" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-mi.iam.gserviceaccount.com" ], "role": "roles/managedidentities.serviceAgent" }, { "members": [ "serviceAccount:12345001-compute@developer.gserviceaccount.com" ], "role": "roles/monitoring.admin" }, { "members": [ "serviceAccount:12345001-compute@developer.gserviceaccount.com" ], "role": "roles/monitoring.metricWriter" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-mcmetering.iam.gserviceaccount.com" ], "role": "roles/multiclustermetering.serviceAgent" }, { "members": [ "user:testuser@example.com" ], "role": "roles/networkmanagement.admin" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-networkmanagement.iam.gserviceaccount.com" ], "role": "roles/networkmanagement.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-notebooks.iam.gserviceaccount.com" ], "role": "roles/notebooks.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-osconfig.iam.gserviceaccount.com" ], "role": "roles/osconfig.serviceAgent" }, { "members": [ "serviceAccount:12345001-compute@developer.gserviceaccount.com", "user:testuser@example.com", "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12345001@cloud-redis.iam.gserviceaccount.com" ], "role": "roles/redis.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@serverless-robot-prod.iam.gserviceaccount.com" ], "role": "roles/run.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@service-networking.iam.gserviceaccount.com" ], "role": "roles/servicenetworking.serviceAgent" }, { "members": [ "user:testuser@example.com" ], "role": "roles/serviceusage.serviceUsageConsumer" }, { "members": [ "user:testuser@example.com" ], "role": "roles/storage.admin" }, { "members": [ "serviceAccount:gce-diagnostics-extract-logs@gcpdiag-gce3-aaaa.iam.gserviceaccount.com" ], "role": "roles/storage.objectCreator" }, { "members": [ "serviceAccount:gce-diagnostics-extract-logs@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "serviceAccount:service-12345001@gcp-sa-artifactregistry.iam.gserviceaccount.com" ], "role": "roles/storage.objectViewer" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-vpcaccess.iam.gserviceaccount.com" ], "role": "roles/vpcaccess.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ], "role": "roles/websecurityscanner.serviceAgent" }, { "members": [ "serviceAccount:service-12345001@gcp-sa-workstations.iam.gserviceaccount.com" ], "role": "roles/workstations.serviceAgent" } ], "etag": "BwYZh3AG4OA=", "version": 1 } ================================================ FILE: test-data/gce3/json-dumps/iam-roles-custom.json ================================================ { "roles": [ { "name": "projects/gcpdiag-gce3-aaaa/roles/CustomRole", "title": "Impersonate", "description": "Created on: 2022-06-30", "includedPermissions": [ "iam.serviceAccounts.actAs" ], "stage": "GA", "etag": "BwXiptUg0eA=" }, { "name": "projects/gcpdiag-gce3-aaaa/roles/developerNoAccelerator", "title": "gce-developer-no-accelerator", "description": "gce roles", "includedPermissions": [ "compute.addresses.get", "compute.addresses.list", "compute.addresses.use", "compute.autoscalers.create", "compute.autoscalers.delete", "compute.autoscalers.get", "compute.autoscalers.list", "compute.autoscalers.update" ], "stage": "GA", "etag": "BwWxnPlh5ng=" }, { "name": "projects/gcpdiag-gce3-aaaa/roles/instanceschedulerole", "title": "Instance Schedule role", "description": "Created on: 2022-02-01", "includedPermissions": [ "compute.instances.start", "compute.instances.stop" ], "stage": "GA", "etag": "BwXW6kp9+Xc=" } ] } ================================================ FILE: test-data/gce3/json-dumps/iam-roles-get.json ================================================ { "roles": [ { "name": "roles/logging.admin", "title": "Logging Admin", "description": "Access to all logging permissions, and dependent permissions.", "includedPermissions": [ "logging.buckets.copyLogEntries", "logging.buckets.create", "logging.buckets.delete", "logging.buckets.get", "logging.buckets.list", "logging.buckets.undelete", "logging.buckets.update", "logging.exclusions.create", "logging.exclusions.delete", "logging.exclusions.get", "logging.exclusions.list", "logging.exclusions.update", "logging.fields.access", "logging.links.create", "logging.links.delete", "logging.links.get", "logging.links.list", "logging.locations.get", "logging.locations.list", "logging.logEntries.create", "logging.logEntries.download", "logging.logEntries.list", "logging.logEntries.route", "logging.logMetrics.create", "logging.logMetrics.delete", "logging.logMetrics.get", "logging.logMetrics.list", "logging.logMetrics.update", "logging.logServiceIndexes.list", "logging.logServices.list", "logging.logs.delete", "logging.logs.list", "logging.notificationRules.create", "logging.notificationRules.delete", "logging.notificationRules.get", "logging.notificationRules.list", "logging.notificationRules.update", "logging.operations.cancel", "logging.operations.get", "logging.operations.list", "logging.privateLogEntries.list", "logging.queries.create", "logging.queries.delete", "logging.queries.deleteShared", "logging.queries.get", "logging.queries.getShared", "logging.queries.list", "logging.queries.listShared", "logging.queries.share", "logging.queries.update", "logging.queries.updateShared", "logging.queries.usePrivate", "logging.settings.get", "logging.settings.update", "logging.sinks.create", "logging.sinks.delete", "logging.sinks.get", "logging.sinks.list", "logging.sinks.update", "logging.usage.get", "logging.views.access", "logging.views.create", "logging.views.delete", "logging.views.get", "logging.views.getIamPolicy", "logging.views.list", "logging.views.listLogs", "logging.views.listResourceKeys", "logging.views.listResourceValues", "logging.views.setIamPolicy", "logging.views.update", "resourcemanager.projects.get", "resourcemanager.projects.list" ], "stage": "GA", "etag": "AA==" } ] } ================================================ FILE: test-data/gce3/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "GKE Service Account", "email": "gke-service-account@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce3-aaaa/serviceAccounts/gke-service-account@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce3-aaaa", "uniqueId": "110841227101987288779" }, { "displayName": "App Engine default service account", "email": "gcpdiag-gce3-aaaa@appspot.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce3-aaaa/serviceAccounts/gcpdiag-gce3-aaaa@appspot.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce3-aaaa", "uniqueId": "103882289235316552707" }, { "displayName": "testsa", "email": "testsa@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce3-aaaa/serviceAccounts/testsa@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce3-aaaa", "uniqueId": "112596801924940881681" }, { "displayName": "Compute Engine default service account", "email": "12345001-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce3-aaaa/serviceAccounts/12345001-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce3-aaaa", "uniqueId": "108447634636837352106" }, { "email": "gce-diagnostics-extract-logs@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce3-aaaa/serviceAccounts/gce-diagnostics-extract-logs@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce3-aaaa", "uniqueId": "108136933288815174505" }, { "displayName": "Service Account without monitoring or logging permissions", "email": "no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce3-aaaa/serviceAccounts/no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce3-aaaa", "uniqueId": "110872649499211133855" } ] } ================================================ FILE: test-data/gce3/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9dartq", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_id": "8700821884762314590", "instance_group_manager_name": "gke-gke2-default-pool-11b6ca8e-grp", "project_id": "gcpdiag-gke1-aaaa", "location": "europe-west1-b" } }, "timestamp": "2021-11-24T16:35:22.615295Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:23.172680503Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-nuwdobe1byj2", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-98631c84-grp", "project_id": "gcpdiag-gke1-aaaa", "location": "europe-west1-d", "instance_group_manager_id": "6471686162526492481" } }, "timestamp": "2021-11-24T16:35:10.014049Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:10.306123333Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kpc", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-5e5781dd-grp", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "5205754198527039297", "location": "europe-west1-c" } }, "timestamp": "2021-11-24T16:35:08.922507Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693418-5d18b700269e6-19f4d541-4d012584", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:09.484397071Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kou", "resource": { "type": "gce_instance_group_manager", "labels": { "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "3383879657688651622", "location": "europe-west1-c", "instance_group_manager_name": "gke-gke3-default-pool-013fb293-grp" } }, "timestamp": "2021-11-24T16:34:38.479723Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:39.479072691Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9darqs", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west1-b", "instance_group_manager_id": "5404218744580069225", "instance_group_manager_name": "gke-gke3-default-pool-597c9ca2-grp", "project_id": "gcpdiag-gke1-aaaa" } }, "timestamp": "2021-11-24T16:34:37.484721Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:38.168845698Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-31olexd4rpi", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke3-default-pool-c125bae7-grp", "location": "europe-west1-d", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "1403931912127633256" } }, "timestamp": "2021-11-24T16:34:35.389660Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:35.872428070Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } ] } ================================================ FILE: test-data/gce3/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.zone" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_uptime_total_aggregate_mean", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "s" }, { "key": "value_uptime_total_aggregate_count", "valueType": "INT64", "metricKind": "GAUGE", "unit": "1" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "europe-west3-b" }, { "stringValue": "instance-20240219-145338" } ], "pointData": [ { "values": [ { "doubleValue": 8575322 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 8575022 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west2-b" }, { "stringValue": "instance1" } ], "pointData": [ { "values": [ { "doubleValue": 4143969 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 4143669 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west2-b" }, { "stringValue": "rhel" } ], "pointData": [ { "values": [ { "doubleValue": 556620 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 556320 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west2-a" }, { "stringValue": "instance-20240325-194207" } ], "pointData": [ { "values": [ { "doubleValue": 1150989 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 1150689 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west2-a" }, { "stringValue": "faulty-opsagent-no-sa" } ], "pointData": [ { "values": [ { "doubleValue": 11460 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 11160 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west2-a" }, { "stringValue": "working-opsagent" } ], "pointData": [ { "values": [ { "doubleValue": 11520 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 11220 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west2-a" }, { "stringValue": "faulty-opsagent" } ], "pointData": [ { "values": [ { "doubleValue": 10320 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 10020 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west2-a" }, { "stringValue": "sles-12" } ], "pointData": [ { "values": [ { "doubleValue": 7888851 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 7888551 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "us-central1-c" }, { "stringValue": "gke-cluster-1-default-pool-2df647f2-ybkj" } ], "pointData": [ { "values": [ { "doubleValue": 911237 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 910937 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "us-central1-c" }, { "stringValue": "gke-cluster-1-default-pool-2df647f2-hl7o" } ], "pointData": [ { "values": [ { "doubleValue": 911552 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 911252 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "us-central1-c" }, { "stringValue": "gke-cluster-1-default-pool-2df647f2-ct8v" } ], "pointData": [ { "values": [ { "doubleValue": 911406 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 911106 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] }, { "labelValues": [ { "stringValue": "us-central1-a" }, { "stringValue": "instance-20240523-113600" } ], "pointData": [ { "values": [ { "doubleValue": 465680 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T21:00:53.403141Z", "endTime": "2024-05-28T21:00:53.403141Z" } }, { "values": [ { "doubleValue": 465380 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-05-28T20:55:53.403141Z", "endTime": "2024-05-28T20:55:53.403141Z" } } ] } ] } ================================================ FILE: test-data/gce3/json-dumps/org-constraint-compute.disableSerialPortAccess.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.disableSerialPortAccess" } ================================================ FILE: test-data/gce3/json-dumps/org-constraint-compute.disableSerialPortLogging.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.disableSerialPortLogging" } ================================================ FILE: test-data/gce3/json-dumps/org-constraint-compute.disableSshInBrowser.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.disableSshInBrowser" } ================================================ FILE: test-data/gce3/json-dumps/org-constraint-compute.requireOsLogin.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireOsLogin" } ================================================ FILE: test-data/gce3/json-dumps/org-constraint-compute.requireShieldedVm.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireShieldedVm" } ================================================ FILE: test-data/gce3/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/iam.automaticIamGrantsForDefaultServiceAccounts" } ================================================ FILE: test-data/gce3/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/iam.disableCrossProjectServiceAccountUsage" } ================================================ FILE: test-data/gce3/json-dumps/project.json ================================================ { "name": "projects/12345001", "parent": "folders/12345001", "projectId": "gcpdiag-gce3-aaaa", "state": "ACTIVE", "displayName": "gcpdiag-gce3-aaaa", "createTime": "2020-08-06T19:08:55.510Z", "updateTime": "2023-12-06T05:00:08.691346Z", "etag": "W/\"f7696af71a06f1fc\"" } ================================================ FILE: test-data/gce3/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12345001/services/accesscontextmanager.googleapis.com", "config": { "name": "accesscontextmanager.googleapis.com", "title": "Access Context Manager API", "documentation": { "summary": "An API for setting attribute based access control to requests to Google Cloud services.\n\u003caside class=\"warning\"\u003e\u003cb\u003eWarning:\u003c/b\u003e Do not mix \u003cb\u003ev1alpha\u003c/b\u003e and \u003cb\u003ev1\u003c/b\u003e API usage in the same access policy. The v1alpha API supports new Access Context Manager features, which may have different attributes or behaviors that are not supported by v1. The practice of mixed API usage within a policy may result in the inability to update that policy, including any access levels or service perimeters belonging to it. It is not recommended to use both v1 and v1alpha for modifying policies with critical service perimeters. Modifications using v1alpha should be limited to policies with non-production/non-critical service perimeters.\u003c/aside\u003e" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "accesscontextmanager.googleapis.com/Location", "displayName": "Access Context Manager Location", "description": "Access Context Manager Location.", "labels": [ { "key": "resource_container", "description": "The organization number of the policy, such as organizations/5678." }, { "key": "location", "description": "The location of the policy." } ], "launchStage": "ALPHA" }, { "type": "accesscontextmanager.googleapis.com/AccessPolicyQuotaResource", "displayName": "Access policy resource.", "description": "Access policy resource.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "access_policy", "description": "The access policy custom dimension." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "accesscontextmanager.googleapis.com/Location", "metrics": [ "accesscontextmanager.googleapis.com/access_levels_per_policy", "accesscontextmanager.googleapis.com/perimeter_egress_policies_per_policy", "accesscontextmanager.googleapis.com/perimeter_ingress_policies_per_policy", "accesscontextmanager.googleapis.com/perimeter_protected_resources_per_policy", "accesscontextmanager.googleapis.com/perimeters_per_policy", "accesscontextmanager.googleapis.com/quota/access_levels_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/perimeter_egress_policies_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/perimeter_ingress_policies_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/perimeter_members_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/perimeter_protected_resources_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/perimeters_per_policy/exceeded" ] }, { "monitoredResource": "accesscontextmanager.googleapis.com/AccessPolicyQuotaResource", "metrics": [ "accesscontextmanager.googleapis.com/quota/level_resources_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/level_vpc_networks_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/perimeter_protected_vpc_networks_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/rule_attributes_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/rule_resources_per_policy/exceeded", "accesscontextmanager.googleapis.com/quota/rule_vpc_networks_per_policy/exceeded" ] }, { "monitoredResource": "accesscontextmanager.googleapis.com/Location", "metrics": [ "accesscontextmanager.googleapis.com/quota/access_levels_per_policy/limit", "accesscontextmanager.googleapis.com/quota/access_levels_per_policy/usage", "accesscontextmanager.googleapis.com/quota/perimeter_egress_policies_per_policy/limit", "accesscontextmanager.googleapis.com/quota/perimeter_egress_policies_per_policy/usage", "accesscontextmanager.googleapis.com/quota/perimeter_ingress_policies_per_policy/limit", "accesscontextmanager.googleapis.com/quota/perimeter_ingress_policies_per_policy/usage", "accesscontextmanager.googleapis.com/quota/perimeter_members_per_policy/limit", "accesscontextmanager.googleapis.com/quota/perimeter_members_per_policy/usage", "accesscontextmanager.googleapis.com/quota/perimeter_protected_resources_per_policy/limit", "accesscontextmanager.googleapis.com/quota/perimeter_protected_resources_per_policy/usage", "accesscontextmanager.googleapis.com/quota/perimeters_per_policy/limit", "accesscontextmanager.googleapis.com/quota/perimeters_per_policy/usage" ] }, { "monitoredResource": "accesscontextmanager.googleapis.com/AccessPolicyQuotaResource", "metrics": [ "accesscontextmanager.googleapis.com/quota/level_resources_per_policy/limit", "accesscontextmanager.googleapis.com/quota/level_resources_per_policy/usage", "accesscontextmanager.googleapis.com/quota/level_vpc_networks_per_policy/limit", "accesscontextmanager.googleapis.com/quota/level_vpc_networks_per_policy/usage", "accesscontextmanager.googleapis.com/quota/perimeter_protected_vpc_networks_per_policy/limit", "accesscontextmanager.googleapis.com/quota/perimeter_protected_vpc_networks_per_policy/usage", "accesscontextmanager.googleapis.com/quota/rule_attributes_per_policy/limit", "accesscontextmanager.googleapis.com/quota/rule_attributes_per_policy/usage", "accesscontextmanager.googleapis.com/quota/rule_resources_per_policy/limit", "accesscontextmanager.googleapis.com/quota/rule_resources_per_policy/usage", "accesscontextmanager.googleapis.com/quota/rule_vpc_networks_per_policy/limit", "accesscontextmanager.googleapis.com/quota/rule_vpc_networks_per_policy/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/aiplatform.googleapis.com", "config": { "name": "aiplatform.googleapis.com", "title": "Vertex AI API", "documentation": { "summary": "Train high-quality custom machine learning models with minimal machine learning expertise and effort." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "aiplatform.googleapis.com/DeploymentResourcePool", "displayName": "Vertex AI Deployment Resource Pool", "description": "A Vertex AI Deployment Resource Pool.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Deployment Resource Pool." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "deployment_resource_pool_id", "description": "The ID of the Deployment Resource Pool." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Endpoint", "displayName": "Vertex AI Endpoint", "description": "A Vertex AI API Endpoint where Models are deployed into it.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Endpoint." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "endpoint_id", "description": "The ID of the Endpoint." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/ServingCluster", "displayName": "Vertex AI Serving Cluster", "description": "A Vertex AI Serving Cluster.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP User Project owning the cluster." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "cluster", "description": "The GKE name of the cluster." } ], "launchStage": "PRELAUNCH" }, { "type": "aiplatform.googleapis.com/Featurestore", "displayName": "Vertex AI Feature Store", "description": "A Vertex AI Feature Store.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Featurestore." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "featurestore_id", "description": "The ID of the Featurestore." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/FeatureOnlineStore", "displayName": "Vertex AI Feature Online Store", "description": "A Vertex AI Feature Online Store.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the FeatureOnlineStore." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "feature_online_store_id", "description": "The ID of the Feature Online Store." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Index", "displayName": "Matching Engine Index", "description": "An Index built through the cloud Matching Engine service.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Index." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "index_id", "description": "The ID of the Index." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/IndexEndpoint", "displayName": "Matching Engine Index Endpoint", "description": "An Endpoint to which Matching Engine Indexes are deployed.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Index." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "index_endpoint_id", "description": "The ID of the index endpoint." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/PipelineJob", "displayName": "Vertex Pipelines Job", "description": "A Vertex Pipelines Job.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "pipeline_job_id", "description": "The ID of the PipelineJob." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Location", "displayName": "Location", "description": "A Google Cloud Project and region where a job is running.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The region in which the service is running." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Model", "displayName": "Vertex AI Model", "description": "A Vertex AI Model.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Model." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "model", "description": "The identifier of the Model." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/NotebookRuntime", "displayName": "Vertex AI Notebook Runtime", "description": "A Vertex AI Notebook Runtime.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Notebook Runtime." }, { "key": "location", "description": "The region in which the notebook exists." }, { "key": "notebook_runtime_id", "description": "The identifier of the Notebook Runtime." } ], "launchStage": "ALPHA" }, { "type": "aiplatform.googleapis.com/PublisherModel", "displayName": "Vertex AI Model Garden Publisher Model", "description": "A Vertex AI Model Garden Publisher Model.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Endpoint." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "publisher", "description": "The publisher of the model." }, { "key": "model_user_id", "description": "The resource ID of the PublisherModel." }, { "key": "model_version_id", "description": "The version ID of the PublisherModel." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "aiplatform.googleapis.com/Endpoint", "metrics": [ "aiplatform.googleapis.com/prediction/internal/online/cmle_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/component_latencies", "aiplatform.googleapis.com/prediction/internal/online/core_infra_latencies", "aiplatform.googleapis.com/prediction/internal/online/custom/istio_request_duration_milliseconds", "aiplatform.googleapis.com/prediction/internal/online/custom/istio_requests_total", "aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_exit_total", "aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_launch_total", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_latencies", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_count", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_cache_lookup_count", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_states", "aiplatform.googleapis.com/prediction/internal/online/directpath_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/harpoon_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/llm_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/internal_error_count", "aiplatform.googleapis.com/prediction/internal/online/prediction_latencies", "aiplatform.googleapis.com/prediction/internal/online/request_byte_count", "aiplatform.googleapis.com/prediction/internal/online/response_count", "aiplatform.googleapis.com/prediction/internal/online/concurrent_requests", "aiplatform.googleapis.com/prediction/internal/online/throttled_request_count", "aiplatform.googleapis.com/prediction/internal/online/resource_usage_error_count", "aiplatform.googleapis.com/prediction/internal/online/lm_response_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_error_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_input_token_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_input_character_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_output_token_count", "aiplatform.googleapis.com/prediction/internal/online/lm_internal_output_character_count", "aiplatform.googleapis.com/prediction/internal/online/lm_prediction_latencies", "aiplatform.googleapis.com/prediction/internal/online/lvm_request_count", "aiplatform.googleapis.com/prediction/online/streaming_message_overhead_latencies", "aiplatform.googleapis.com/prediction/online/streaming_message_count", "aiplatform.googleapis.com/prediction/online/streaming_message_bytes_count", "aiplatform.googleapis.com/prediction/online/open_streams", "aiplatform.googleapis.com/prediction/online/error_count", "aiplatform.googleapis.com/prediction/online/prediction_count", "aiplatform.googleapis.com/prediction/online/prediction_latencies", "aiplatform.googleapis.com/prediction/online/response_count", "aiplatform.googleapis.com/prediction/online/replicas", "aiplatform.googleapis.com/prediction/online/target_replicas", "aiplatform.googleapis.com/prediction/internal/online/cpu/utilization", "aiplatform.googleapis.com/prediction/internal/online/memory/bytes_used", "aiplatform.googleapis.com/prediction/internal/online/accelerator/duty_cycle", "aiplatform.googleapis.com/prediction/internal/online/accelerator/memory/bytes_used", "aiplatform.googleapis.com/prediction/internal/online/network/received_bytes_count", "aiplatform.googleapis.com/prediction/internal/online/network/sent_bytes_count", "aiplatform.googleapis.com/prediction/internal/online/l2_operator_reconcile_latencies" ] }, { "monitoredResource": "aiplatform.googleapis.com/DeploymentResourcePool", "metrics": [ "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/replicas", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/target_replicas", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/cpu/utilization", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/memory/bytes_used", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/duty_cycle", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/memory/bytes_used", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/received_bytes_count", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/sent_bytes_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/IndexEndpoint", "metrics": [ "aiplatform.googleapis.com/scann/query/request_count", "aiplatform.googleapis.com/scann/query/latencies", "aiplatform.googleapis.com/scann/internal/query/latency_bucketized", "aiplatform.googleapis.com/matching_engine/query/request_count", "aiplatform.googleapis.com/matching_engine/query/query_count", "aiplatform.googleapis.com/matching_engine/query/request_count_v2", "aiplatform.googleapis.com/matching_engine/internal/query/request_count", "aiplatform.googleapis.com/matching_engine/query/latencies", "aiplatform.googleapis.com/matching_engine/query/query_latencies", "aiplatform.googleapis.com/matching_engine/internal/query/latency_bucketized", "aiplatform.googleapis.com/matching_engine/internal/query/match_server_request_count", "aiplatform.googleapis.com/matching_engine/internal/query/match_server_latencies" ] }, { "monitoredResource": "aiplatform.googleapis.com/IndexEndpoint", "metrics": [ "aiplatform.googleapis.com/scann/current_shards", "aiplatform.googleapis.com/scann/current_replicas", "aiplatform.googleapis.com/matching_engine/current_shards", "aiplatform.googleapis.com/matching_engine/current_replicas", "aiplatform.googleapis.com/matching_engine/internal/current_replicas", "aiplatform.googleapis.com/matching_engine/cpu/request_cores", "aiplatform.googleapis.com/matching_engine/cpu/request_utilization", "aiplatform.googleapis.com/matching_engine/memory/used_bytes", "aiplatform.googleapis.com/matching_engine/memory/request_bytes" ] }, { "monitoredResource": "aiplatform.googleapis.com/Index", "metrics": [ "aiplatform.googleapis.com/matching_engine/stream_update/datapoint_count", "aiplatform.googleapis.com/matching_engine/stream_update/latency", "aiplatform.googleapis.com/matching_engine/stream_update/latencies", "aiplatform.googleapis.com/matching_engine/internal/stream_update/catchup_latency", "aiplatform.googleapis.com/matching_engine/stream_update/request_count", "aiplatform.googleapis.com/matching_engine/index/size", "aiplatform.googleapis.com/matching_engine/index/embeddings", "aiplatform.googleapis.com/matching_engine/index/last_batch_update_time", "aiplatform.googleapis.com/matching_engine/index/last_compaction_time", "aiplatform.googleapis.com/matching_engine/report_index_shard_stats_to_gcs/request_count", "aiplatform.googleapis.com/matching_engine/empty_index/request_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/Featurestore", "metrics": [ "aiplatform.googleapis.com/featurestore/online_entities_updated", "aiplatform.googleapis.com/featurestore/online_serving/request_count", "aiplatform.googleapis.com/featurestore/online_serving/latencies", "aiplatform.googleapis.com/featurestore/online_serving/response_size", "aiplatform.googleapis.com/featurestore/online_serving/request_bytes_count", "aiplatform.googleapis.com/featurestore/streaming_write/offline_processed_count", "aiplatform.googleapis.com/featurestore/streaming_write/offline_write_delays" ] }, { "monitoredResource": "aiplatform.googleapis.com/Featurestore", "metrics": [ "aiplatform.googleapis.com/featurestore/storage/stored_bytes", "aiplatform.googleapis.com/featurestore/storage/billable_processed_bytes", "aiplatform.googleapis.com/featurestore/node_count", "aiplatform.googleapis.com/featurestore/cpu_load", "aiplatform.googleapis.com/featurestore/cpu_load_hottest_node" ] }, { "monitoredResource": "aiplatform.googleapis.com/FeatureOnlineStore", "metrics": [ "aiplatform.googleapis.com/featureonlinestore/online_serving/request_count", "aiplatform.googleapis.com/featureonlinestore/online_serving/serving_bytes_count", "aiplatform.googleapis.com/featureonlinestore/online_serving/serving_latencies", "aiplatform.googleapis.com/featureonlinestore/serving_data_ages", "aiplatform.googleapis.com/featureonlinestore/serving_data_by_sync_time", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/serving_latencies", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/request_count", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/serving_bytes_count", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/latencies" ] }, { "monitoredResource": "aiplatform.googleapis.com/FeatureOnlineStore", "metrics": [ "aiplatform.googleapis.com/featureonlinestore/storage/stored_bytes", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load_hottest_node", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_nodes", "aiplatform.googleapis.com/featureonlinestore/storage/optimized_nodes", "aiplatform.googleapis.com/featureonlinestore/running_sync", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/memory/request_bytes", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/memory/used_bytes", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/cpu/request_utilization", "aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/cpu/request_cores" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model", "aiplatform.googleapis.com/online_prediction_requests_per_base_model", "aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/exceeded", "aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/usage", "aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/exceeded", "aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/exceeded", "aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/usage", "aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/exceeded", "aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/usage", "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/usage", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/exceeded", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/usage", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/exceeded", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/usage", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/exceeded", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/usage" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/executing_vertexai_pipeline_jobs", "aiplatform.googleapis.com/executing_vertexai_pipeline_tasks" ] }, { "monitoredResource": "aiplatform.googleapis.com/Model", "metrics": [ "aiplatform.googleapis.com/model_monitoring/feature_drift_deviation", "aiplatform.googleapis.com/model_monitoring/prediction_output_drift_deviation", "aiplatform.googleapis.com/model_monitoring/feature_attribution_deviation" ] }, { "monitoredResource": "aiplatform.googleapis.com/PipelineJob", "metrics": [ "aiplatform.googleapis.com/pipelinejob/duration", "aiplatform.googleapis.com/pipelinejob/task_completed_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/PublisherModel", "metrics": [ "aiplatform.googleapis.com/publisher/online_serving/model_invocation_count", "aiplatform.googleapis.com/publisher/online_serving/model_invocation_latencies", "aiplatform.googleapis.com/publisher/online_serving/first_token_latencies", "aiplatform.googleapis.com/publisher/online_serving/tokens", "aiplatform.googleapis.com/publisher/online_serving/token_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/ServingCluster", "metrics": [ "aiplatform.googleapis.com/serving/controlplane/operator_reconcile_latency_seconds", "aiplatform.googleapis.com/serving/controlplane/operator_workqueue_unfinished_work_seconds", "aiplatform.googleapis.com/serving/controlplane/operator_workqueue_depth", "aiplatform.googleapis.com/serving/controlplane/operator_version", "aiplatform.googleapis.com/serving/controlplane/release_stage" ] }, { "monitoredResource": "aiplatform.googleapis.com/NotebookRuntime", "metrics": [ "aiplatform.googleapis.com/colab/internal/runtime/startup_duration", "aiplatform.googleapis.com/colab/internal/runtime/health", "aiplatform.googleapis.com/colab/internal/runtime/image_version", "aiplatform.googleapis.com/colab/internal/runtime/uptime", "aiplatform.googleapis.com/colab/internal/runtime/cpu/usage_time", "aiplatform.googleapis.com/colab/internal/runtime/memory/limit", "aiplatform.googleapis.com/colab/internal/runtime/memory/usage", "aiplatform.googleapis.com/colab/internal/runtime/container/memory/usage", "aiplatform.googleapis.com/colab/internal/runtime/disk/used_bytes", "aiplatform.googleapis.com/colab/internal/runtime/disk/reserved_bytes", "aiplatform.googleapis.com/colab/internal/runtime/disk/free_bytes", "aiplatform.googleapis.com/colab/internal/runtime/network/received_bytes_count", "aiplatform.googleapis.com/colab/internal/runtime/network/sent_bytes_count", "aiplatform.googleapis.com/colab/internal/runtime/container/restart_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/limit", "aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/limit", "aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/limit", "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/limit", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/limit", "aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/limit", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/anthos.googleapis.com", "config": { "name": "anthos.googleapis.com", "title": "Anthos API", "documentation": { "summary": "Anthos is a managed hybrid cloud solution" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/anthosconfigmanagement.googleapis.com", "config": { "name": "anthosconfigmanagement.googleapis.com", "title": "Anthos Config Management API", "documentation": { "summary": "Anthos Config Management" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/anthospolicycontroller.googleapis.com", "config": { "name": "anthospolicycontroller.googleapis.com", "title": "Anthos Policy Controller API", "documentation": { "summary": "Anthos Policy Controller" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/apigee.googleapis.com", "config": { "name": "apigee.googleapis.com", "title": "Apigee API", "documentation": { "summary": "Use the Apigee API to programmatically develop and manage APIs\nwith a set of RESTful operations. Develop and secure API proxies,\ndeploy and undeploy API proxy revisions, monitor APIs, configure\nenvironments, manage users, and more.\n\nNote: This product is available as a free trial\nfor a time period of 60 days." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "apigee.googleapis.com/Proxy", "displayName": "Apigee Proxy", "description": "Monitored resource for Apigee API proxy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\"." }, { "key": "org", "description": "The identifier for the Apigee organization." }, { "key": "env", "description": "The identifier for the Apigee environment." }, { "key": "location", "description": "Location where the Apigee runtime plane is provisioned." }, { "key": "proxy_name", "description": "The name of Apigee proxy deployed to the environment." } ], "launchStage": "BETA" }, { "type": "apigee.googleapis.com/InternalProxy", "displayName": "Apigee Internal Proxy", "description": "A proxy deployed in Apigee.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\"." }, { "key": "org", "description": "The identifier for the Apigee organization." }, { "key": "env", "description": "The identifier for the Apigee environment." }, { "key": "location", "description": "Location where the Apigee infrastructure is provisioned." }, { "key": "proxy_name", "description": "The name of Apigee proxy deployed to the environment." }, { "key": "runtime_version", "description": "Version of the Apigee Runtime for the proxy." }, { "key": "instance_id", "description": "Instance ID of the Apigee application." }, { "key": "pod_uid", "description": "Unique identifier of the Kubernetes pod." } ], "launchStage": "ALPHA" }, { "type": "apigee.googleapis.com/ProxyV2", "displayName": "Apigee proxy (v2)", "description": "Monitored resource for Apigee API proxy (v2).", "labels": [ { "key": "resource_container", "description": "The GCP project ID that writes to this monitored resource." }, { "key": "org", "description": "An organization is a container for all the objects in an Apigee account." }, { "key": "env", "description": "An environment is a runtime execution context for the proxies in an organization." }, { "key": "location", "description": "Location where the Apigee infrastructure is provisioned." }, { "key": "proxy_name", "description": "A proxy is your interface to developers that want to use your backend services." }, { "key": "runtime_version", "description": "Version of the Apigee Runtime for the proxy." }, { "key": "instance_id", "description": "Instance ID of the Apigee application." } ], "launchStage": "ALPHA" }, { "type": "apigee.googleapis.com/Environment", "displayName": "Apigee environment", "description": "Monitored resource for Apigee environment.", "labels": [ { "key": "resource_container", "description": "The GCP project ID that writes to this monitored resource." }, { "key": "org", "description": "An organization is a container for all the objects in an Apigee account." }, { "key": "env", "description": "An environment is a runtime execution context for the proxies in an organization." }, { "key": "location", "description": "Location where the Apigee infrastructure is provisioned." } ], "launchStage": "BETA" }, { "type": "apigee.googleapis.com/TargetV2", "displayName": "Apigee target (v2)", "description": "Monitored resource for Apigee target (v2) with the host endpoint label.", "labels": [ { "key": "resource_container", "description": "The GCP project ID that writes to this monitored resource." }, { "key": "org", "description": "An organization is a container for all the objects in an Apigee account." }, { "key": "env", "description": "An environment is a runtime execution context for the proxies in an organization." }, { "key": "location", "description": "Location where the Apigee infrastructure is provisioned." }, { "key": "proxy_name", "description": "A proxy is your interface to developers that want to use your backend services." }, { "key": "type", "description": "Type of target such as service callout." }, { "key": "endpoint", "description": "Target endpoint URL." }, { "key": "runtime_version", "description": "Version of the Apigee Runtime for the proxy." }, { "key": "instance_id", "description": "Instance ID of the Apigee application." } ], "launchStage": "ALPHA" }, { "type": "apigee.googleapis.com/InternalTarget", "displayName": "Apigee internal target", "description": "Monitored resource for Apigee target with the host endpoint label.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\"." }, { "key": "org", "description": "The identifier for the Apigee organization." }, { "key": "env", "description": "The identifier for the Apigee environment." }, { "key": "location", "description": "Location where the Apigee runtime plane is provisioned." }, { "key": "proxy_name", "description": "The name of Apigee proxy deployed to the environment." }, { "key": "endpoint", "description": "Endpoint is represented by statically defined hostnames or target servers. For IP Addresses and dynamically-configured endpoints, data is aggregated and presented under the static string \"IP Address\" and \"Dynamic Target\" respectively." }, { "key": "runtime_version", "description": "Version of the Apigee Runtime for the proxy." }, { "key": "instance_id", "description": "Instance ID of the Apigee application." }, { "key": "pod_uid", "description": "Unique identifier of the Kubernetes pod." } ], "launchStage": "ALPHA" }, { "type": "apigee.googleapis.com/Target", "displayName": "Apigee target", "description": "Monitored resource for Apigee target with the host endpoint label.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\"." }, { "key": "org", "description": "The identifier for the Apigee organization." }, { "key": "env", "description": "The identifier for the Apigee environment." }, { "key": "location", "description": "Location where the Apigee runtime plane is provisioned." }, { "key": "proxy_name", "description": "The name of Apigee proxy deployed to the environment." }, { "key": "endpoint", "description": "Endpoint is represented by statically defined hostnames or target servers. For IP Addresses and dynamically-configured endpoints, data is aggregated and presented under the static string \"IP Address\" and \"Dynamic Target\" respectively." } ], "launchStage": "ALPHA" }, { "type": "apigee.googleapis.com/EnvironmentInstance", "displayName": "Apigee environment instance", "description": "Monitored resource for Apigee instance attachment.", "labels": [ { "key": "resource_container", "description": "The GCP project ID that writes to this monitored resource." }, { "key": "org", "description": "An organization is a container for all the objects in an Apigee account." }, { "key": "env", "description": "An environment is a runtime execution context for the proxies in an organization." }, { "key": "location", "description": "Location of the Apigee Instance." }, { "key": "instance_id", "description": "ID of the Apigee instance." } ], "launchStage": "BETA" }, { "type": "apigee.googleapis.com/SecurityProfileEnvironmentAssociation", "displayName": "Apigee API Security Profile Environment Association", "description": "Apigee Advanced API Security profile attached to Apigee environment.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "Location of the resource, global always." }, { "key": "org", "description": "The identifier of the Apigee organization associated with this resource, such as \"my-org\"." }, { "key": "profile", "description": "Apigee API Security profile name, such as \"default\"." }, { "key": "env", "description": "The identifier of Apigee environment associated with this resource, such as \"my-env\"." } ], "launchStage": "BETA" }, { "type": "apigee.googleapis.com/SecurityDetectionRule", "displayName": "Apigee API Security Detection Rule", "description": "Apigee API Security abuse detection rule to detect unusual patterns in API traffic.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "Location of the resource, global always." }, { "key": "org", "description": "The identifier of the Apigee organization associated with this resource, such as \"my-org\"." }, { "key": "env", "description": "The identifier of Apigee environment associated with this resource, such as \"my-env\"." }, { "key": "detection_rule", "description": "Apigee API Security detection rule, such as \"Flooder\" or \"Static Content Scraper\"." } ], "launchStage": "BETA" }, { "type": "apigee.googleapis.com/SecurityIncident", "displayName": "Apigee API Security Incident", "description": "A security incident is a group of events with similar patterns detected by Apigee Advanced API Security, which could represent an API attack.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "Location of the resource, global always." }, { "key": "org", "description": "The identifier of the Apigee organization associated with this resource, such as \"my-org\"." }, { "key": "env", "description": "The identifier of Apigee environment associated with this resource, such as \"my-env\"." }, { "key": "incident_id", "description": "Apigee API Security incident id." } ], "launchStage": "BETA" }, { "type": "k8s_container", "displayName": "Kubernetes Container", "description": "A Kubernetes container instance.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The physical location of the cluster that contains the container." }, { "key": "cluster_name", "description": "The name of the cluster that the container is running in." }, { "key": "namespace_name", "description": "The name of the namespace that the container is running in." }, { "key": "pod_name", "description": "The name of the pod that the container is running in." }, { "key": "container_name", "description": "The name of the container." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "k8s_container", "metrics": [ "apigee.googleapis.com/server/fault_count", "apigee.googleapis.com/internal/server/prometheus_remote_storage_succeeded_samples_total", "apigee.googleapis.com/server/nio", "apigee.googleapis.com/server/num_threads", "apigee.googleapis.com/server/request_count", "apigee.googleapis.com/server/response_count", "apigee.googleapis.com/server/latencies", "apigee.googleapis.com/upstream/request_count", "apigee.googleapis.com/upstream/response_count", "apigee.googleapis.com/upstream/latencies", "apigee.googleapis.com/internal/billing/api_call_count", "apigee.googleapis.com/udca/server/local_file_oldest_ts", "apigee.googleapis.com/udca/server/local_file_latest_ts", "apigee.googleapis.com/udca/server/local_file_count", "apigee.googleapis.com/udca/server/total_latencies", "apigee.googleapis.com/udca/server/upload_latencies", "apigee.googleapis.com/udca/upstream/http_error_count", "apigee.googleapis.com/udca/upstream/http_latencies", "apigee.googleapis.com/udca/upstream/uploaded_file_sizes", "apigee.googleapis.com/udca/upstream/uploaded_file_count", "apigee.googleapis.com/udca/disk/used_bytes", "apigee.googleapis.com/udca/server/pruned_file_count", "apigee.googleapis.com/udca/server/retry_cache_size", "apigee.googleapis.com/cassandra/process_max_fds", "apigee.googleapis.com/cassandra/process_open_fds", "apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_max", "apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_init", "apigee.googleapis.com/cassandra/jvm_memory_bytes_max", "apigee.googleapis.com/cassandra/process_cpu_seconds_total", "apigee.googleapis.com/cassandra/jvm_memory_bytes_used", "apigee.googleapis.com/cassandra/compaction_pendingtasks", "apigee.googleapis.com/cassandra/jvm_memory_bytes_init", "apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_used", "apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_committed", "apigee.googleapis.com/cassandra/clientrequest_latency", "apigee.googleapis.com/cassandra/tablerequests_rate", "apigee.googleapis.com/cassandra/tablerequests_latency", "apigee.googleapis.com/cassandra/jvm_memory_bytes_committed", "apigee.googleapis.com/internal/cluster/ready_replicas", "apigee.googleapis.com/internal/cluster/total_replicas", "apigee.googleapis.com/internal/accesslog/input_records_total_count", "apigee.googleapis.com/internal/accesslog/output_records_total_count", "apigee.googleapis.com/internal/accesslog/output_buffer_queue_length", "apigee.googleapis.com/internal/accesslog/output_buffer_total_bytes", "apigee.googleapis.com/internal/accesslog/output_emit_count_current", "apigee.googleapis.com/internal/accesslog/output_errors_count_current", "apigee.googleapis.com/internal/accesslog/output_retry_count_current", "apigee.googleapis.com/connectagent/sent_bytes", "apigee.googleapis.com/connectagent/received_bytes", "apigee.googleapis.com/connectagent/sent_messages", "apigee.googleapis.com/connectagent/received_messages", "apigee.googleapis.com/connectagent/completed_rpcs_count", "apigee.googleapis.com/connectagent/stream_liveness_time", "apigee.googleapis.com/connectagent/dropped_requests", "apigee.googleapis.com/connectagent/dropped_responses", "apigee.googleapis.com/envoy/redis/downstream_rq_total", "apigee.googleapis.com/envoy/redis/downstream_rq_active", "apigee.googleapis.com/envoy/redis/downstream_cx_total", "apigee.googleapis.com/envoy/redis/downstream_cx_active", "apigee.googleapis.com/envoy/redis/commands/evalsha/total", "apigee.googleapis.com/envoy/redis/commands/evalsha/success", "apigee.googleapis.com/envoy/redis/commands/evalsha/error", "apigee.googleapis.com/envoy/redis/commands/evalsha/latency", "apigee.googleapis.com/envoy/redis/commands/get/total", "apigee.googleapis.com/envoy/redis/commands/get/success", "apigee.googleapis.com/envoy/redis/commands/get/error", "apigee.googleapis.com/envoy/redis/commands/get/latency", "apigee.googleapis.com/internal/server/google_token_generation_latencies", "apigee.googleapis.com/internal/server/google_token_generation_count", "apigee.googleapis.com/internal/envoy/gateway/downstream_request_count", "apigee.googleapis.com/internal/envoy/gateway/downstream_latencies", "apigee.googleapis.com/internal/envoy/gateway/downstream_response_count", "apigee.googleapis.com/internal/envoy/gateway/upstream_request_count", "apigee.googleapis.com/internal/envoy/gateway/upstream_latencies", "apigee.googleapis.com/internal/envoy/gateway/grpc_access_logs_written_count", "apigee.googleapis.com/internal/envoy/gateway/grpc_access_logs_dropped_count", "apigee.googleapis.com/internal/envoy/adapter/request_count", "apigee.googleapis.com/internal/envoy/adapter/auth_request_latencies", "apigee.googleapis.com/internal/envoy/adapter/apigee_request_latencies", "apigee.googleapis.com/internal/envoy/adapter/products_cached", "apigee.googleapis.com/internal/envoy/adapter/analytics_records_batch_size", "apigee.googleapis.com/internal/experiments/giraffe/snapshot/snapshot_version" ] }, { "monitoredResource": "apigee.googleapis.com/ProxyV2", "metrics": [ "apigee.googleapis.com/mint/request_count", "apigee.googleapis.com/mint/response_count", "apigee.googleapis.com/mint/latencies_percentile", "apigee.googleapis.com/internal/proxyv2/response_latencies_double", "apigee.googleapis.com/proxyv2/request_count", "apigee.googleapis.com/proxyv2/details", "apigee.googleapis.com/proxyv2/response_count", "apigee.googleapis.com/internal/proxyv2/latencies_bucket", "apigee.googleapis.com/internal/proxyv2/latencies_count", "apigee.googleapis.com/internal/proxyv2/latencies_sum", "apigee.googleapis.com/proxyv2/latencies_percentile", "apigee.googleapis.com/proxyv2/latencies", "apigee.googleapis.com/internal/proxyv2/heartbeat", "apigee.googleapis.com/policyv2/latencies", "apigee.googleapis.com/policyv2/latencies_percentile", "apigee.googleapis.com/internal/targetv2/response_count_delta", "apigee.googleapis.com/internal/targetv2/response_latencies_double", "apigee.googleapis.com/targetv2/request_count", "apigee.googleapis.com/targetv2/response_count", "apigee.googleapis.com/targetv2/latencies", "apigee.googleapis.com/targetv2/latencies_percentile", "apigee.googleapis.com/proxyv2/release/response_count", "apigee.googleapis.com/proxyv2/release/latencies_percentile" ] }, { "monitoredResource": "apigee.googleapis.com/InternalProxy", "metrics": [ "apigee.googleapis.com/internal/proxy/request_count", "apigee.googleapis.com/internal/proxy/response_count", "apigee.googleapis.com/internal/proxy/latencies", "apigee.googleapis.com/internal/proxy/details" ] }, { "monitoredResource": "apigee.googleapis.com/Proxy", "metrics": [ "apigee.googleapis.com/proxy/request_count", "apigee.googleapis.com/proxy/response_count", "apigee.googleapis.com/proxy/latencies", "apigee.googleapis.com/proxy/details" ] }, { "monitoredResource": "apigee.googleapis.com/Environment", "metrics": [ "apigee.googleapis.com/environment/anomaly_count", "apigee.googleapis.com/security/request_count", "apigee.googleapis.com/security/detected_request_count" ] }, { "monitoredResource": "apigee.googleapis.com/Environment", "metrics": [ "apigee.googleapis.com/environment/active", "apigee.googleapis.com/environment/api_call_count" ] }, { "monitoredResource": "apigee.googleapis.com/TargetV2", "metrics": [ "apigee.googleapis.com/internal/targetv2/response_count_delta", "apigee.googleapis.com/internal/targetv2/response_latencies_double", "apigee.googleapis.com/targetv2/request_count", "apigee.googleapis.com/targetv2/response_count", "apigee.googleapis.com/targetv2/latencies", "apigee.googleapis.com/targetv2/latencies_percentile", "apigee.googleapis.com/targetv2/release/response_count", "apigee.googleapis.com/targetv2/release/latencies_percentile" ] }, { "monitoredResource": "apigee.googleapis.com/InternalTarget", "metrics": [ "apigee.googleapis.com/internal/target/request_count", "apigee.googleapis.com/internal/target/response_count", "apigee.googleapis.com/internal/target/latencies" ] }, { "monitoredResource": "apigee.googleapis.com/Target", "metrics": [ "apigee.googleapis.com/target/request_count", "apigee.googleapis.com/target/response_count", "apigee.googleapis.com/target/latencies" ] }, { "monitoredResource": "apigee.googleapis.com/EnvironmentInstance", "metrics": [ "apigee.googleapis.com/environment/instance/gateway_nodes" ] }, { "monitoredResource": "apigee.googleapis.com/SecurityProfileEnvironmentAssociation", "metrics": [ "apigee.googleapis.com/security/proxy_score", "apigee.googleapis.com/security/target_score", "apigee.googleapis.com/security/source_score", "apigee.googleapis.com/security/environment_score" ] }, { "monitoredResource": "apigee.googleapis.com/SecurityDetectionRule", "metrics": [ "apigee.googleapis.com/security/detected_request_count_by_rule" ] }, { "monitoredResource": "apigee.googleapis.com/SecurityIncident", "metrics": [ "apigee.googleapis.com/security/incident_request_count", "apigee.googleapis.com/security/incident_request_count_by_rule" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/appenginereporting.googleapis.com", "config": { "name": "appenginereporting.googleapis.com", "title": "App Engine", "documentation": { "summary": "Google App Engine Reporting Service" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "artifactregistry.googleapis.com/Location", "displayName": "Artifact Registry Location", "description": "A location in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "artifactregistry.googleapis.com/Project", "displayName": "Artifact Registry Project", "description": "A Cloud project in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "BETA" }, { "type": "artifactregistry.googleapis.com/Repository", "displayName": "Artifact Registry Repository", "description": "A repository in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "repository_id", "description": "The identifier of the Artifact Registry repository, such as \"my_repository\"." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_region_upstream_host_reads", "artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/region_upstream_host_reads", "artifactregistry.googleapis.com/us_multi_region_upstream_host_reads" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Project", "metrics": [ "artifactregistry.googleapis.com/project/api/request_count", "artifactregistry.googleapis.com/project/api/request_latencies", "artifactregistry.googleapis.com/project/request_count", "artifactregistry.googleapis.com/project/request_latencies" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Repository", "metrics": [ "artifactregistry.googleapis.com/repository/api/request_count", "artifactregistry.googleapis.com/repository/api/request_latencies", "artifactregistry.googleapis.com/repository/request_count", "artifactregistry.googleapis.com/repository/request_latencies", "artifactregistry.googleapis.com/repository/size" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquery.googleapis.com/Table", "displayName": "BigQuery Table Resource.", "description": "BigQuery Table Resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The cloud location of the BigQuery table." }, { "key": "table_reference", "description": "The table reference in the format of project_id:dataset_id.table_id for the BigQuery table." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/Location", "displayName": "CheckIamPolicy Request Location", "description": "A BigQuery Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget", "description": "Differential Privacy Budget.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." }, { "key": "multi_region", "description": "The multi-region identifier for the associated resource (e.g \"us\", \"eu\"). Used only for multi-region quota metrics." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget External", "description": "Differential Privacy Budget exposed externally to provide privacy budget metrics.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded", "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit" ] }, { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget", "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/privacybudget/dp_delta_budget", "bigquery.googleapis.com/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/bigqueryconnection.googleapis.com", "config": { "name": "bigqueryconnection.googleapis.com", "title": "BigQuery Connection API", "documentation": { "summary": "Allows users to manage BigQuery connections to external data sources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/bigquerydatatransfer.googleapis.com", "config": { "name": "bigquerydatatransfer.googleapis.com", "title": "BigQuery Data Transfer API", "documentation": { "summary": "Schedule queries or transfer external data from SaaS applications to Google BigQuery on a regular basis." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/bigqueryreservation.googleapis.com", "config": { "name": "bigqueryreservation.googleapis.com", "title": "BigQuery Reservation API", "documentation": { "summary": "A service to modify your BigQuery flat-rate reservations." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquerystorage.googleapis.com/DataflowWrite", "displayName": "BigQuery Storage Write API metrics for Dataflow jobs.", "description": "BigQuery Storage Write API metrics for Dataflow jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job." }, { "key": "location", "description": "The BigQuery region in which the Storage API server locates." }, { "key": "job_name", "description": "The name of the Dataflow job this worker belongs to." }, { "key": "job_id", "description": "The id of the dataflow job the worker belongs to." }, { "key": "worker_id", "description": "The ID of the worker, unique for this job_id." }, { "key": "destination_project", "description": "The project of BigQuery destination table of the Dataflow job." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquerystorage.googleapis.com/DataflowWrite", "metrics": [ "bigquerystorage.googleapis.com/dataflow_write/request_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/connection_results_count", "bigquerystorage.googleapis.com/dataflow_write/server_side_latencies", "bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies", "bigquerystorage.googleapis.com/dataflow_write/concurrent_connections" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/bigtable.googleapis.com", "config": { "name": "bigtable.googleapis.com", "title": "Cloud Bigtable API", "documentation": { "summary": "API for reading and writing the contents of Bigtable tables associated with a Google Cloud project." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudaicompanion.googleapis.com", "config": { "name": "cloudaicompanion.googleapis.com", "title": "Cloud AI Companion API", "documentation": { "summary": "The Cloud AI Companion API for Gemini for Google Cloud.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudasset.googleapis.com", "config": { "name": "cloudasset.googleapis.com", "title": "Cloud Asset API", "documentation": { "summary": "The Cloud Asset API manages the history and inventory of Google Cloud resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "cloudbuild.googleapis.com/Location", "displayName": "Cloud Build Location", "description": "A location in the Cloud Build API.", "labels": [ { "key": "resource_container", "description": "The identified of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "cloudbuild.googleapis.com/GkeInstance", "displayName": "GKE instance", "description": "GKE instance.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "gke_instance_id", "description": "The identifier of the GKE instance." } ], "launchStage": "ALPHA" }, { "type": "cloudbuild.googleapis.com/PrivatePool", "displayName": "Private Worker Pool", "description": "Private Worker Pool.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "worker_pool_uuid", "description": "The UUID of the worker pool." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudbuild.googleapis.com/GkeInstance", "metrics": [ "cloudbuild.googleapis.com/internal/gke_instance/pod", "cloudbuild.googleapis.com/internal/gke_instance/node" ] }, { "monitoredResource": "cloudbuild.googleapis.com/PrivatePool", "metrics": [ "cloudbuild.googleapis.com/internal/private_pool_ready_worker_replicas" ] }, { "monitoredResource": "cloudbuild.googleapis.com/Location", "metrics": [ "cloudbuild.googleapis.com/concurrent_public_pool_build_cpus", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/exceeded" ] }, { "monitoredResource": "cloudbuild.googleapis.com/Location", "metrics": [ "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/limit", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudfunctions.googleapis.com", "config": { "name": "cloudfunctions.googleapis.com", "title": "Cloud Functions API", "documentation": { "summary": "Manages lightweight user-provided functions executed in response to events." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudfunctions.googleapis.com/function", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloudfunctions.googleapis.com/function_name" } ] }, { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudfunctions.googleapis.com/function", "metrics": [ "cloudfunctions.googleapis.com/function/execution_times", "cloudfunctions.googleapis.com/function/execution_count", "cloudfunctions.googleapis.com/function/user_memory_bytes", "cloudfunctions.googleapis.com/function/network_egress", "cloudfunctions.googleapis.com/function/active_instances", "cloudfunctions.googleapis.com/function/execution_delays", "cloudfunctions.googleapis.com/function/execution_count_internal", "cloudfunctions.googleapis.com/function/supervisor_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_memory_bytes", "cloudfunctions.googleapis.com/function/user_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count", "cloudfunctions.googleapis.com/function/supervisor_controlled_death_count", "cloudfunctions.googleapis.com/function/supervisor_report_count", "cloudfunctions.googleapis.com/function/supervisor_report_latencies", "cloudfunctions.googleapis.com/function/supervisor_phase_latencies" ] }, { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudidentity.googleapis.com", "config": { "name": "cloudidentity.googleapis.com", "title": "Cloud Identity API", "documentation": { "summary": "API for provisioning and managing identity resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/universal" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudresourcemanager.googleapis.com", "config": { "name": "cloudresourcemanager.googleapis.com", "title": "Cloud Resource Manager API", "documentation": { "summary": "Creates, reads, and updates metadata for Google Cloud Platform resource containers." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudscheduler.googleapis.com", "config": { "name": "cloudscheduler.googleapis.com", "title": "Cloud Scheduler API", "documentation": { "summary": "Creates and manages jobs run on a regular recurring schedule." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudtrace.googleapis.com", "config": { "name": "cloudtrace.googleapis.com", "title": "Cloud Trace API", "documentation": { "summary": "Sends application trace data to Cloud Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Cloud Trace API directly. If you are looking to instrument your application for Cloud Trace, we recommend using OpenTelemetry.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudtrace.googleapis.com/charged_project", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "monitoring.googleapis.com/service" }, { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" } ] }, { "type": "cloudtrace.googleapis.com/ChargedProject", "displayName": "Cloud trace target", "description": "A cloud trace specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "api_service", "description": "The name of the API service with which the data is associated (e.g.,'cloudtrace.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "cloudtrace.googleapis.com/CloudtraceProject", "displayName": "Cloud Trace", "description": "Cloud trace resource, e.g. project.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container associated with the resource." }, { "key": "location", "description": "The location that the Cloud Trace service recording the metrics is running." } ], "launchStage": "EARLY_ACCESS" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudtrace.googleapis.com/ChargedProject", "metrics": [ "cloudtrace.googleapis.com/billing/ingested_spans", "cloudtrace.googleapis.com/billing/ingested_bytes" ] }, { "monitoredResource": "cloudtrace.googleapis.com/charged_project", "metrics": [ "cloudtrace.googleapis.com/billing/retrieved_spans" ] }, { "monitoredResource": "cloudtrace.googleapis.com/CloudtraceProject", "metrics": [ "cloudtrace.googleapis.com/internal/plugin_server_span_count", "cloudtrace.googleapis.com/internal/reader_root_query_count", "cloudtrace.googleapis.com/internal/reader_root_query_latencies", "cloudtrace.googleapis.com/bigquery_export/exported_span_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/cloudvolumesgcp-api.netapp.com", "config": { "name": "cloudvolumesgcp-api.netapp.com", "title": "NetApp Cloud Volumes API", "documentation": { "summary": "The NetApp Cloud Volumes API is used for creating and management of NetApp Cloud Volumes resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/service-procured" ] }, "monitoredResources": [ { "type": "api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "cloudvolumesgcp-api.netapp.com/CloudVolume", "displayName": "Monitored Resource for NetApp CVS", "description": "Monitored Resource for NetApp CVS.", "labels": [ { "key": "resource_container", "description": "Project information." }, { "key": "location", "description": "Region/Zone information." }, { "key": "volume_id", "description": "ID of the volume." }, { "key": "service_type", "description": "Service type of the volume or replication relationship." }, { "key": "name", "description": "Name of the volume or replication relationship." } ], "launchStage": "BETA" }, { "type": "cloudvolumesgcp-api.netapp.com/CloudVolumePool", "displayName": "Monitored Resource for NetApp CVS storage pool", "description": "Monitored Resource for NetApp CVS storage pool.", "labels": [ { "key": "resource_container", "description": "Project information." }, { "key": "pool_id", "description": "ID of the storage pool." }, { "key": "location", "description": "Region/zone of the storage pool." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudvolumesgcp-api.netapp.com/CloudVolume", "metrics": [ "cloudvolumesgcp-api.netapp.com/cloudvolume/volume_usage", "cloudvolumesgcp-api.netapp.com/cloudvolume/volume_size", "cloudvolumesgcp-api.netapp.com/cloudvolume/operation_count", "cloudvolumesgcp-api.netapp.com/cloudvolume/read_bytes_count", "cloudvolumesgcp-api.netapp.com/cloudvolume/write_bytes_count", "cloudvolumesgcp-api.netapp.com/cloudvolume/request_latencies", "cloudvolumesgcp-api.netapp.com/cloudvolume/inode_allocation", "cloudvolumesgcp-api.netapp.com/cloudvolume/inode_usage", "cloudvolumesgcp-api.netapp.com/cloudvolume/logical_bytes_backed_up", "cloudvolumesgcp-api.netapp.com/cloudvolume/replication_healthy", "cloudvolumesgcp-api.netapp.com/cloudvolume/replication_last_transfer_duration", "cloudvolumesgcp-api.netapp.com/cloudvolume/replication_last_transfer_size", "cloudvolumesgcp-api.netapp.com/cloudvolume/replication_total_transfer_bytes", "cloudvolumesgcp-api.netapp.com/cloudvolume/replication_relationship_progress", "cloudvolumesgcp-api.netapp.com/cloudvolume/replication_lag_time", "cloudvolumesgcp-api.netapp.com/cloudvolume/replication_relationship_status", "cloudvolumesgcp-api.netapp.com/cloudvolume/volume_percent_used" ] }, { "monitoredResource": "cloudvolumesgcp-api.netapp.com/CloudVolumePool", "metrics": [ "cloudvolumesgcp-api.netapp.com/cloudvolumepool/usage", "cloudvolumesgcp-api.netapp.com/cloudvolumepool/size" ] }, { "monitoredResource": "api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/composer.googleapis.com", "config": { "name": "composer.googleapis.com", "title": "Cloud Composer API", "documentation": { "summary": "Manages Apache Airflow environments on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "ALPHA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_connections_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/config.googleapis.com", "config": { "name": "config.googleapis.com", "title": "Infrastructure Manager API", "documentation": { "summary": "Creates and manages Google Cloud Platform resources and infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "container.googleapis.com/Cluster", "displayName": "Kubernetes Cluster Limits", "description": "Kubernetes Cluster.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." } ], "launchStage": "BETA" }, { "type": "container.googleapis.com/NodePool", "displayName": "GKE Node Pool", "description": "GKE Node Pool.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." }, { "key": "node_pool_name", "description": "Node pool name." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/containers_per_cluster_autopilot", "container.googleapis.com/quota/containers_per_cluster_standard", "container.googleapis.com/quota/etcd_database_size_bytes", "container.googleapis.com/quota/nodes_per_cluster", "container.googleapis.com/quota/pods_per_cluster_autopilot", "container.googleapis.com/quota/pods_per_cluster_standard", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded", "container.googleapis.com/quota/quota/nodes_per_cluster/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/nodes_per_node_pool", "container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded" ] }, { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/containers_per_cluster_standard/limit", "container.googleapis.com/quota/quota/containers_per_cluster_standard/usage", "container.googleapis.com/quota/quota/etcd_database_size_bytes/limit", "container.googleapis.com/quota/quota/etcd_database_size_bytes/usage", "container.googleapis.com/quota/quota/etcd_database_size_gib/limit", "container.googleapis.com/quota/quota/etcd_database_size_gib/usage", "container.googleapis.com/quota/quota/nodes_per_cluster/limit", "container.googleapis.com/quota/quota/nodes_per_cluster/usage", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/pods_per_cluster_standard/limit", "container.googleapis.com/quota/quota/pods_per_cluster_standard/usage" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/quota/nodes_per_node_pool/limit", "container.googleapis.com/quota/quota/nodes_per_node_pool/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/containeranalysis.googleapis.com", "config": { "name": "containeranalysis.googleapis.com", "title": "Container Analysis API", "documentation": { "summary": "This API is a prerequisite for leveraging Artifact Analysis scanning\ncapabilities in both Artifact Registry and with Advanced Vulnerability\nInsights (runtime scanning) in GKE.\n\nIn addition, the Container Analysis API is an implementation of the Grafeas\nAPI, which enables storing, querying, and retrieval of critical metadata\nabout all of your software artifacts." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": { "summary": "Stream images stored in Artifact Registry to GKE\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/containerscanning.googleapis.com", "config": { "name": "containerscanning.googleapis.com", "title": "Container Scanning API", "documentation": { "summary": "A service to scan containers for vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/containerthreatdetection.googleapis.com", "config": { "name": "containerthreatdetection.googleapis.com", "title": "Container Threat Detection API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/dataflow.googleapis.com", "config": { "name": "dataflow.googleapis.com", "title": "Dataflow API", "documentation": { "summary": "Manages Google Cloud Dataflow projects on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataflow.googleapis.com/Project", "displayName": "Dataflow Project", "description": "A project level monitored resource for Dataflow.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The location where Dataflow jobs are running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataflow.googleapis.com/Project", "metrics": [ "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/exceeded", "dataflow.googleapis.com/region_endpoint_shuffle_slot" ] }, { "monitoredResource": "dataflow.googleapis.com/Project", "metrics": [ "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/limit", "dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/dataform.googleapis.com", "config": { "name": "dataform.googleapis.com", "title": "Dataform API", "documentation": { "summary": "Service to develop, version control, and operationalize SQL pipelines in BigQuery." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/datafusion.googleapis.com", "config": { "name": "datafusion.googleapis.com", "title": "Cloud Data Fusion API", "documentation": { "summary": "Cloud Data Fusion is a fully-managed, cloud native, enterprise data integration service for\n quickly building and managing data pipelines. It provides a graphical interface to increase\n time efficiency and reduce complexity, and allows business users, developers, and data\n scientists to easily and reliably build scalable data integration solutions to cleanse,\n prepare, blend, transfer and transform data without having to wrestle with infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "datafusion.googleapis.com/Pipeline", "displayName": "Pipeline", "description": "A deployed Pipeline in a Cloud Data Fusion instance.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "compute_engine", "description": "The compute engine used for this Pipeline (MapReduce or Spark)." }, { "key": "pipeline_id", "description": "The Pipeline ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/Instance", "displayName": "Instance", "description": "An instance of Cloud Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/Plugin", "displayName": "Plugin", "description": "An instance of a plugin in a deployed pipeline.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "plugin_type", "description": "The type of the plugin." }, { "key": "plugin_name", "description": "The name of the plugin." }, { "key": "plugin_version", "description": "The version of the plugin." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/MonitoringAgent", "displayName": "MonitoringAgent", "description": "An instance of Monitoring Agent in Cloud Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "edition", "description": "The edition of the instance." }, { "key": "is_private", "description": "Does the instance use private IP." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalPipeline", "displayName": "Pipeline", "description": "A deployed Pipeline in an external (not in GCP) Data Fusion instance.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The GCP region where to store metrics." }, { "key": "cluster_id", "description": "Cluster ID that the instance is hosted in." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "pipeline_id", "description": "The Pipeline ID." }, { "key": "version", "description": "The data plane version of the instance." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalInstance", "displayName": "Instance", "description": "An instance of external (not in GCP) Data Fusion.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The GCP region where to store metrics." }, { "key": "cluster_id", "description": "Cluster ID that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalPlugin", "displayName": "Plugin", "description": "An instance of a plugin in a deployed pipeline in an external (not in GCP) Data Fusion instance.", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "instance_id", "description": "The instance ID." }, { "key": "plugin_type", "description": "The type of the plugin." }, { "key": "plugin_name", "description": "The name of the plugin." }, { "key": "plugin_version", "description": "The version of the plugin." } ], "launchStage": "ALPHA" }, { "type": "datafusion.googleapis.com/ExternalMonitoringAgent", "displayName": "MonitoringAgent", "description": "An instance of external Monitoring Agent (not in GCP).", "labels": [ { "key": "resource_container", "description": "The ID of the customer project." }, { "key": "org_id", "description": "The ID of the organization that the customer project belongs to." }, { "key": "location", "description": "The zone/region that the instance is hosted in." }, { "key": "version", "description": "The data plane version of the instance." }, { "key": "instance_id", "description": "The instance ID." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "datafusion.googleapis.com/Pipeline", "metrics": [ "datafusion.googleapis.com/pipeline/runs_completed_count", "datafusion.googleapis.com/pipeline/plugin/records_in_count", "datafusion.googleapis.com/pipeline/plugin/records_out_count", "datafusion.googleapis.com/pipeline/plugin/bytes_in_count", "datafusion.googleapis.com/pipeline/plugin/bytes_out_count", "datafusion.googleapis.com/pipeline/dataproc/provisioning_latency", "datafusion.googleapis.com/pipeline/dataproc/api_request_count", "datafusion.googleapis.com/pipeline/pipeline_run_time", "datafusion.googleapis.com/pipeline/preview_run_time", "datafusion.googleapis.com/pipeline/bytes_read_count", "datafusion.googleapis.com/pipeline/bytes_shuffled_count", "datafusion.googleapis.com/pipeline/bytes_written_count", "datafusion.googleapis.com/pipeline/plugin_count", "datafusion.googleapis.com/instance/tms_persist_count", "datafusion.googleapis.com/instance/tms_subscriber_fetch_count", "datafusion.googleapis.com/instance/tms_subscriber_fetch_time", "datafusion.googleapis.com/instance/tms_subscriber_process_delay", "datafusion.googleapis.com/instance/tms_subscriber_process_duration", "datafusion.googleapis.com/pipeline/pipeline_start_latency", "datafusion.googleapis.com/pipeline/logs_count", "datafusion.googleapis.com/pipeline/failed_runs_classified_count", "datafusion.googleapis.com/pipeline/schedule_job_count", "datafusion.googleapis.com/pipeline/schedule_job_latency", "datafusion.googleapis.com/pipeline/schedule_job_notification_failure_count", "datafusion.googleapis.com/pipeline/bqpushdown/engine_bytes_billed_count", "datafusion.googleapis.com/pipeline/bqpushdown/engine_bytes_processed_count", "datafusion.googleapis.com/pipeline/bqpushdown/engine_slot_count", "datafusion.googleapis.com/pipeline/bqpushdown/records_in_count", "datafusion.googleapis.com/pipeline/bqpushdown/records_out_count", "datafusion.googleapis.com/pipeline/bqpushdown/records_pulled_count", "datafusion.googleapis.com/pipeline/bqpushdown/records_pushed_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_join_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_transform_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_pulled_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_pushed_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_spark_pulled_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_spark_pushed_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_read_count", "datafusion.googleapis.com/pipeline/bqpushdown/stages_write_count", "datafusion.googleapis.com/pipeline/streaming_multi_source_count", "datafusion.googleapis.com/pipeline/streaming_atleastonce_count", "datafusion.googleapis.com/pipeline/state_store_access_count", "datafusion.googleapis.com/pipeline/state_store_access_latency", "datafusion.googleapis.com/pipeline/program_status_event_published_count", "datafusion.googleapis.com/pipeline/program_status_event_spark_metrics_fetch_latency", "datafusion.googleapis.com/pipeline/deploy_event_count", "datafusion.googleapis.com/pipeline/create_deploy_event_count", "datafusion.googleapis.com/pipeline/edit_deploy_event_count", "datafusion.googleapis.com/pipeline/upgrade_deploy_event_count", "datafusion.googleapis.com/pipeline/wrangler_directive_count", "datafusion.googleapis.com/pipeline/wrangler_jexl_category_count", "datafusion.googleapis.com/pipeline/wrangler_hash_algo_count", "datafusion.googleapis.com/pipeline/lineage/attempted_calls_count", "datafusion.googleapis.com/pipeline/lineage/failed_calls_count", "datafusion.googleapis.com/pipeline/lineage/processes_count", "datafusion.googleapis.com/pipeline/lineage/runs_count", "datafusion.googleapis.com/pipeline/lineage/lineage_events_count", "datafusion.googleapis.com/pipeline/bytes_processed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/Instance", "metrics": [ "datafusion.googleapis.com/instance/api_request_count", "datafusion.googleapis.com/instance/api_request_received_count", "datafusion.googleapis.com/instance/metric_emitted_count", "datafusion.googleapis.com/instance/service_available", "datafusion.googleapis.com/instance/pipeline_count", "datafusion.googleapis.com/instance/concurrent_pipeline_launches_count", "datafusion.googleapis.com/instance/concurrent_pipeline_running_count", "datafusion.googleapis.com/instance/draft_count", "datafusion.googleapis.com/instance/namespace_count", "datafusion.googleapis.com/instance/pod_restart_count", "datafusion.googleapis.com/instance/pod_status", "datafusion.googleapis.com/instance/api_response_times", "datafusion.googleapis.com/instance/system_logs_count", "datafusion.googleapis.com/instance/log_event_queue_size", "datafusion.googleapis.com/instance/log_process_min_delay", "datafusion.googleapis.com/instance/log_process_max_delay", "datafusion.googleapis.com/instance/log_process_count", "datafusion.googleapis.com/instance/authorization_check_count", "datafusion.googleapis.com/instance/authorization_check_time", "datafusion.googleapis.com/instance/pipeline_connection_request_count", "datafusion.googleapis.com/instance/heap_memory_used", "datafusion.googleapis.com/instance/heap_memory_max", "datafusion.googleapis.com/instance/cpu_load_per_processor_scaled", "datafusion.googleapis.com/instance/total_thread_count", "datafusion.googleapis.com/instance/source_control_management/git_operation_times", "datafusion.googleapis.com/instance/source_control_management/repository_sizes", "datafusion.googleapis.com/instance/workload_identity_namespaces", "datafusion.googleapis.com/instance/credential_identities", "datafusion.googleapis.com/instance/credential_profiles", "datafusion.googleapis.com/instance/source_control_management/total_operation_count", "datafusion.googleapis.com/instance/source_control_management/total_app_count" ] }, { "monitoredResource": "datafusion.googleapis.com/Plugin", "metrics": [ "datafusion.googleapis.com/plugin/deployed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/MonitoringAgent", "metrics": [ "datafusion.googleapis.com/monitoring_agent/workers", "datafusion.googleapis.com/monitoring_agent/pipeline_logs_count", "datafusion.googleapis.com/monitoring_agent/system_logs_count", "datafusion.googleapis.com/monitoring_agent/logs_process_duration" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalPipeline", "metrics": [ "datafusion.googleapis.com/external_pipeline/runs_completed_count", "datafusion.googleapis.com/external_pipeline/failed_runs_classified_count", "datafusion.googleapis.com/external_pipeline/pipeline_run_time", "datafusion.googleapis.com/external_pipeline/preview_run_time", "datafusion.googleapis.com/external_pipeline/plugin_count", "datafusion.googleapis.com/external_pipeline/provisioner/provisioning_latency", "datafusion.googleapis.com/external_pipeline/streaming_multi_source_count", "datafusion.googleapis.com/external_pipeline/streaming_atleastonce_count", "datafusion.googleapis.com/external_pipeline/state_store_access_count", "datafusion.googleapis.com/external_pipeline/state_store_access_latency", "datafusion.googleapis.com/external_pipeline/deploy_event_count", "datafusion.googleapis.com/external_pipeline/create_deploy_event_count", "datafusion.googleapis.com/external_pipeline/edit_deploy_event_count", "datafusion.googleapis.com/external_pipeline/upgrade_deploy_event_count", "datafusion.googleapis.com/external_pipeline/bytes_processed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalInstance", "metrics": [ "datafusion.googleapis.com/external_instance/api_request_count", "datafusion.googleapis.com/external_instance/heap_memory_used", "datafusion.googleapis.com/external_instance/heap_memory_max", "datafusion.googleapis.com/external_instance/cpu_load_per_processor_scaled", "datafusion.googleapis.com/external_instance/total_thread_count", "datafusion.googleapis.com/external_instance/service_available", "datafusion.googleapis.com/external_instance/pipeline_count", "datafusion.googleapis.com/external_instance/draft_count", "datafusion.googleapis.com/external_instance/namespace_count", "datafusion.googleapis.com/external_instance/pod_restart_count", "datafusion.googleapis.com/external_instance/pod_status", "datafusion.googleapis.com/external_instance/metric_emitted_count" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalPlugin", "metrics": [ "datafusion.googleapis.com/external_plugin/deployed_count" ] }, { "monitoredResource": "datafusion.googleapis.com/ExternalMonitoringAgent", "metrics": [ "datafusion.googleapis.com/external_monitoring_agent/workers", "datafusion.googleapis.com/external_monitoring_agent/pipeline_logs_count", "datafusion.googleapis.com/external_monitoring_agent/system_logs_count", "datafusion.googleapis.com/external_monitoring_agent/logs_process_duration" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/datamigration.googleapis.com", "config": { "name": "datamigration.googleapis.com", "title": "Database Migration API", "documentation": { "summary": "Manage Cloud Database Migration Service resources on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "datamigration.googleapis.com/MigrationJob", "displayName": "Database migration service migration job", "description": "Database migration service migration job.", "labels": [ { "key": "resource_container", "description": "The resource container (project ID)." }, { "key": "location", "description": "The location." }, { "key": "migration_job_id", "description": "The migration job ID." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "datamigration.googleapis.com/MigrationJob", "metrics": [ "datamigration.googleapis.com/migration_job/max_replica_bytes_lag", "datamigration.googleapis.com/migration_job/max_replica_sec_lag", "datamigration.googleapis.com/migration_job/initial_sync_complete", "datamigration.googleapis.com/migration_job/write_bytes_count", "datamigration.googleapis.com/migration_job/write_rows_count", "datamigration.googleapis.com/internal/migration_job/worker/state", "datamigration.googleapis.com/internal/migration_job/worker/last_processing_completion_timestamp", "datamigration.googleapis.com/migration_job/sqlserver/processed_file_bytes_count", "datamigration.googleapis.com/migration_job/sqlserver/processed_file_count", "datamigration.googleapis.com/migration_job/sqlserver/unprocessed_file_bytes", "datamigration.googleapis.com/migration_job/sqlserver/unprocessed_files", "datamigration.googleapis.com/migration_job/sqlserver/transaction_log_upload_sec_lag" ] }, { "monitoredResource": "datamigration.googleapis.com/MigrationJob", "metrics": [ "datamigration.googleapis.com/internal/migration_job/worker/input_bytes_count", "datamigration.googleapis.com/internal/migration_job/worker/output_bytes_count", "datamigration.googleapis.com/internal/migration_job/worker/input_rows_count", "datamigration.googleapis.com/internal/migration_job/worker/output_rows_count", "datamigration.googleapis.com/internal/migration_job/worker/processing_times", "datamigration.googleapis.com/internal/migration_job/worker/total_lags", "datamigration.googleapis.com/internal/migration_job/worker/max_replica_sec_lag", "datamigration.googleapis.com/internal/migration_job/sqlserver/processed_file_bytes_count", "datamigration.googleapis.com/internal/migration_job/sqlserver/processed_file_count", "datamigration.googleapis.com/internal/migration_job/sqlserver/unprocessed_file_bytes", "datamigration.googleapis.com/internal/migration_job/sqlserver/unprocessed_files", "datamigration.googleapis.com/internal/migration_job/sqlserver/transaction_log_upload_sec_lag", "datamigration.googleapis.com/internal/migration_job/worker/max_replica_bytes_lag", "datamigration.googleapis.com/internal/migration_job/worker/processed_tasks_count", "datamigration.googleapis.com/internal/migration_job/worker/processed_rows_lag", "datamigration.googleapis.com/internal/migration_job/worker/sql_max_open_connections", "datamigration.googleapis.com/internal/migration_job/worker/sql_open_connections", "datamigration.googleapis.com/internal/migration_job/worker/sql_connection_wait", "datamigration.googleapis.com/internal/migration_job/worker/sql_connection_wait_sec", "datamigration.googleapis.com/internal/migration_job/worker/sql_connection_max_closed" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/dataproc-control.googleapis.com", "config": { "name": "dataproc-control.googleapis.com", "title": "Cloud Dataproc Control API", "documentation": { "summary": "Manages internal resources for Google Cloud Dataproc." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/dataproc.googleapis.com", "config": { "name": "dataproc.googleapis.com", "title": "Cloud Dataproc API", "documentation": { "summary": "Manages Hadoop-based clusters and jobs on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/datastore.googleapis.com", "config": { "name": "datastore.googleapis.com", "title": "Cloud Datastore API", "documentation": { "summary": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/datastudio.googleapis.com", "config": { "name": "datastudio.googleapis.com", "title": "Looker Studio API", "documentation": { "summary": "Allows programmatic viewing and editing of Looker Studio assets." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/universal" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/deploymentmanager.googleapis.com", "config": { "name": "deploymentmanager.googleapis.com", "title": "Cloud Deployment Manager V2 API", "documentation": { "summary": "The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\nresources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/dialogflow.googleapis.com", "config": { "name": "dialogflow.googleapis.com", "title": "Dialogflow API", "documentation": { "summary": "Builds conversational interfaces (for example, chatbots, and voice-powered apps and devices)." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dialogflow.googleapis.com/Location", "displayName": "Dialogflow Location", "description": "A Dialogflow Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dialogflow.googleapis.com/Location", "metrics": [ "dialogflow.googleapis.com/location/phone_call_count", "dialogflow.googleapis.com/location/phone_call_duration_count", "dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type/exceeded", "dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type/usage", "dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type_per_region/exceeded", "dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type_per_region/usage" ] }, { "monitoredResource": "dialogflow.googleapis.com/Location", "metrics": [ "dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type/limit", "dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type_per_region/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/directions-backend.googleapis.com", "config": { "name": "directions-backend.googleapis.com", "title": "Directions API", "documentation": { "summary": "Access driving, cycling, walking and public transportation routing with the\n Directions API using an HTTP request. Waypoints offer the\n ability to alter a route through a specific location. Specify origins,\n destinations and waypoints either as text strings (e.g. \"Chicago, IL\" or\n \"Darwin, NT, Australia\") or as latitude/longitude coordinates." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/maps" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/distance-matrix-backend.googleapis.com", "config": { "name": "distance-matrix-backend.googleapis.com", "title": "Distance Matrix API", "documentation": { "summary": "Access travel distance and time for a matrix of origins and destinations\n with the Distance Matrix API. The information returned is based\n on the recommended route between start and end points and consists of rows\n containing duration and distance values for each pair." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/maps" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/dlp.googleapis.com", "config": { "name": "dlp.googleapis.com", "title": "Sensitive Data Protection (DLP)", "documentation": { "summary": "Discover and protect your sensitive data. A fully managed service designed to help you discover, classify, and protect your valuable data assets with ease." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/dns.googleapis.com", "config": { "name": "dns.googleapis.com", "title": "Cloud DNS API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" }, { "name": "projects/12345001/services/domains.googleapis.com", "config": { "name": "domains.googleapis.com", "title": "Cloud Domains API", "documentation": { "summary": "Enables management and configuration of domain names." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/universal", "serviceusage.googleapis.com/tos/domains", "serviceusage.googleapis.com/tos/tlds", "serviceusage.googleapis.com/tos/keysystems", "serviceusage.googleapis.com/tos/whoisprivacy", "serviceusage.googleapis.com/tos/squarespace" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345001" } ], "nextPageToken": "choKGEIWZG9tYWlucy5nb29nbGVhcGlzLmNvbQ==" } ================================================ FILE: test-data/gce3/orgpolicy.tf ================================================ ================================================ FILE: test-data/gce3/project.tf ================================================ /** * Copyright 2024 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. */ provider "google" { project = var.project_id } resource "random_string" "project_id_suffix" { length = 8 lower = true upper = false special = false } resource "google_project_service" "compute" { project = data.google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "logging" { project = data.google_project.project.project_id service = "logging.googleapis.com" } resource "google_project_service" "monitoring" { project = data.google_project.project.project_id service = "monitoring.googleapis.com" } resource "google_project_service" "osconfig" { project = data.google_project.project.project_id service = "osconfig.googleapis.com" } resource "google_compute_project_metadata_item" "serial_logging" { project = data.google_project.project.project_id depends_on = [google_project_service.compute] key = "serial-port-logging-enable" value = "true" } data "google_project" "project" { project_id = var.project_id } data "google_compute_image" "debian" { family = "debian-11" project = "debian-cloud" } data "google_compute_default_service_account" "default" { project = data.google_project.project.project_id depends_on = [google_project_service.compute] } resource "google_service_account" "no_log_metric_perm_service_account" { account_id = "no-logging-monitoring-perm" project = data.google_project.project.project_id display_name = "Service Account without monitoring or logging permissions" } output "project_id" { value = data.google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = data.google_project.project.number } output "org_id" { value = var.org_id } /** module "agent_policy" { source = "terraform-google-modules/cloud-operations/google//modules/agent-policy" version = "~> 0.2.4" project_id = data.google_project.project.project_id policy_id = "ops-agents-example-policy" agent_rules = [ { type = "logging" version = "current-major" package_state = "installed" enable_autoupgrade = true }, { type = "metrics" version = "current-major" package_state = "installed" enable_autoupgrade = true }, ] group_labels = [ { env = "valid" } ] os_types = [ { short_name = "debian" version = "11" }, ] } **/ ================================================ FILE: test-data/gce3/terraform ================================================ #!/bin/sh # terraform wrapper using docker USE_TTY="" CWD=$(pwd) [ -t 0 ] && USE_TTY="-it" exec docker run $USE_TTY \ --rm \ -u "$(id -u):$(id -g)" \ -e "USER=$(id -n -u)" \ -e "GROUP=$(id -n -g)" \ -e "HOME=$HOME" \ -e "LANG=$LANG" \ -e "SHELL=/bin/bash" \ -v "$CWD:$CWD" \ -v "$HOME/.config/gcloud:/home/.config/gcloud" \ -w "$CWD" \ mirror.gcr.io/hashicorp/terraform:light "$@" ================================================ FILE: test-data/gce3/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } variable "project_id" {} variable "roles" { description = "List of logging and monitoring related roles to assign to default SA" type = list(string) default = [ "roles/owner", "roles/logging.admin", "roles/logging.logWriter", "roles/monitoring.admin", "roles/monitoring.metricWriter" ] } ================================================ FILE: test-data/gce3/working-opsagent.tf ================================================ /** * Copyright 2024 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. */ resource "google_compute_instance" "working_opsagent" { project = data.google_project.project.project_id depends_on = [google_project_service.compute] name = "working-opsagent" machine_type = "e2-micro" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["secured-instance"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.debian.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } labels = { env = "valid" } } resource "google_project_iam_member" "service_account_member_policy" { for_each = { for role in var.roles : role => role } project = data.google_project.project.project_id role = each.value member = "serviceAccount:${data.google_compute_default_service_account.default.email}" depends_on = [data.google_compute_default_service_account.default] } ================================================ FILE: test-data/gce4/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner ZONE_1 = europe-west2-a FAKE_PROJECT_ID = gcpdiag-gce4-aaaa FAKE_PROJECT_ID_SUFFIX = runbook FAKE_PROJECT_NR = 123456270 FAKE_ORG_ID = 11112222 COMPUTE_INSTANCES_MAXRESULTS=3 INSTANCE_NAME_GCE1=valid-linux-ssh INSTANCE_NAME_GCE2=faulty-linux-ssh INSTANCE_NAME_GCE3=valid-windows-ssh INSTANCE_NAME_GCE4=faulty-windows-ssh SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID)/$(FAKE_PROJECT_ID)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-disks-$(ZONE_1).json \ json-dumps/compute-disks-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-regions.json \ json-dumps/compute-zones.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/monitoring-query.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE1).json \ json-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE2).json \ json-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE3).json \ json-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE4).json \ json-dumps/global-operations.json include ../Makefile.inc define MONITORING_QUERY { \ "query": "fetch gce_instance \ | metric 'compute.googleapis.com/instance/cpu/utilization' \ | group_by 5m, [value_utilization_max: max(value.utilization)] \ | every 5m \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/global-operations.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/operations' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gce4/gce_faulty_ssh.tf ================================================ /** * Copyright 2023 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. */ resource "google_compute_instance" "faulty_linux_ssh" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "faulty-linux-ssh" machine_type = "e2-standard-2" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["faulty-ssh-instance", "gce-secured-instance-test-deny"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.debian.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } labels = { foo = "bar" } metadata_startup_script = <<-EOT #!/bin/bash # Throw some errors to Serial console logs echo "blocked for more than 20 seconds" > /dev/console echo "Corruption of in-memory data detected. Shutting down filesystem" > /dev/console echo "Memory cgroup out of memory" >> /dev/console echo "No space left on device" > /dev/console apt install stress-ng -y stress-ng --cpu 4 --vm 4 --vm-bytes 4G --io 5 --hdd 14--timeout 60m & while true; do : # Do nothing, which consumes CPU cycles done EOT } # Fault windows resource "google_compute_instance" "faulty_windows_ssh" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "faulty-windows-ssh" machine_type = "e2-standard-2" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["faulty-ssh-instance", "gce-secured-instance-test-deny"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.windows.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } labels = { foo = "bar" } metadata_startup_script = <<-EOT #!/bin/bash echo "disk is at or near capacity" > /dev/console echo "The IO operation at logical block address 0x... for Disk 0 (PDO name: \Device\...) was retried" > /dev/console EOT } ================================================ FILE: test-data/gce4/gce_valid_ssh.tf ================================================ /** * Copyright 2023 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. */ /** * Copyright 2021 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. */ resource "google_compute_instance" "valid_linux_ssh" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "valid-linux-ssh" machine_type = "e2-standard-2" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["valid-ssh-instance"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.debian.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } labels = { foo = "bar" } } # Valid windows running ssh resource "google_compute_instance" "valid_windows_ssh" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "valid-windows-ssh" machine_type = "e2-standard-2" zone = "europe-west2-a" desired_status = "RUNNING" network_interface { network = "default" } tags = ["valid-ssh-instance"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = data.google_compute_image.windows.self_link } } service_account { email = data.google_compute_default_service_account.default.email scopes = [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } labels = { foo = "bar" } } ================================================ FILE: test-data/gce4/json-dumps/compute-disks-europe-west1-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks", "items": [ { "kind": "compute#disk", "id": "7550338177783293118", "creationTimestamp": "2022-05-10T05:28:01.712-07:00", "name": "gke-gke1-default-pool-5665d797-62lh", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-62lh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:01.713-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-62lh" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7424433754121692350", "creationTimestamp": "2022-05-10T05:28:02.097-07:00", "name": "gke-gke1-default-pool-5665d797-hz12", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-hz12", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:02.097-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-hz12" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "8594043929682764990", "creationTimestamp": "2022-05-10T05:28:02.179-07:00", "name": "gke-gke1-default-pool-5665d797-jd80", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-jd80", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:02.179-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-jd80" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7088717128623711421", "creationTimestamp": "2022-05-10T05:28:03.186-07:00", "name": "gke-gke1-default-pool-5665d797-z9kh", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-z9kh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:03.187-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-z9kh" ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "mUgogP08_Iw=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks" } ================================================ FILE: test-data/gce4/json-dumps/compute-disks-europe-west2-a.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks", "items": [ { "kind": "compute#disk", "id": "1020012628094441724", "creationTimestamp": "2023-11-16T20:03:33.349-08:00", "name": "faulty-linux-ssh", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks/faulty-linux-ssh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231115", "sourceImageId": "3081125733607199085", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "lastAttachTimestamp": "2023-11-16T20:03:33.350-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/faulty-linux-ssh" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" }, { "kind": "compute#disk", "id": "5193645208196831705", "creationTimestamp": "2023-11-16T20:08:24.574-08:00", "name": "faulty-windows-ssh", "sizeGb": "32", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks/faulty-windows-ssh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20231115", "sourceImageId": "4704563576960484445", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "lastAttachTimestamp": "2023-11-16T20:08:24.575-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/faulty-windows-ssh" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3389558045860892917", "1000226" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" }, { "kind": "compute#disk", "id": "7702462607973374205", "creationTimestamp": "2023-11-16T20:03:32.812-08:00", "name": "valid-linux-ssh", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks/valid-linux-ssh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231115", "sourceImageId": "3081125733607199085", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "lastAttachTimestamp": "2023-11-16T20:03:32.812-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/valid-linux-ssh" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" }, { "kind": "compute#disk", "id": "5223308949582469373", "creationTimestamp": "2023-11-16T20:03:32.839-08:00", "name": "valid-windows-ssh", "sizeGb": "32", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks/valid-windows-ssh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20231115", "sourceImageId": "4704563576960484445", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "lastAttachTimestamp": "2023-11-16T20:03:32.839-08:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/valid-windows-ssh" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3389558045860892917", "1000226" ], "physicalBlockSizeBytes": "4096", "architecture": "X86_64" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks" } ================================================ FILE: test-data/gce4/json-dumps/compute-disks-europe-west2-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce-vm-performance/zones/europe-west2-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-b/disks" } ================================================ FILE: test-data/gce4/json-dumps/compute-disks-europe-west4-a.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks", "items": [ { "kind": "compute#disk", "id": "4897755586815845618", "creationTimestamp": "2022-05-10T05:27:10.646-07:00", "name": "gce1", "sizeGb": "32", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/gce1", "sourceImage": "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20220414", "sourceImageId": "3529112155699095586", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "lastAttachTimestamp": "2022-05-10T05:27:10.647-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce1" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3389558045860892917", "1000226" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "7436782321968604403", "creationTimestamp": "2022-05-10T05:27:09.694-07:00", "name": "gce2", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/gce2", "sourceImage": "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/images/cos-85-13310-1453-5", "sourceImageId": "1276396551904338204", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "UEFI_COMPATIBLE" } ], "lastAttachTimestamp": "2022-05-10T05:27:09.695-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce2" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "6880041984096540132", "1001010", "166739712233658766" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "2534143966095860953", "creationTimestamp": "2022-05-10T05:27:34.871-07:00", "name": "mig-926f", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/mig-926f", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406", "sourceImageId": "1994093915008945255", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "lastAttachTimestamp": "2022-05-10T05:27:34.872-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-926f" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "3703127063546815705", "creationTimestamp": "2022-05-10T05:27:35.177-07:00", "name": "mig-hmnt", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/mig-hmnt", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406", "sourceImageId": "1994093915008945255", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "lastAttachTimestamp": "2022-05-10T05:27:35.178-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-hmnt" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "4944833045469848960", "creationTimestamp": "2022-05-10T05:32:47.994-07:00", "name": "unattached-disk", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/unattached-disk", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20200805", "sourceImageId": "6709658075886210235", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-ssd", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "labels": { "environment": "dev" }, "labelFingerprint": "a6HI36FuYIQ=", "licenseCodes": [ "1000205" ], "physicalBlockSizeBytes": "4096" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks" } ================================================ FILE: test-data/gce4/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "6654944905093765942", "creationTimestamp": "2023-11-03T14:27:53.667-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "4341098039640382262", "creationTimestamp": "2023-11-03T14:27:53.660-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "3384956594912865471", "creationTimestamp": "2023-11-05T14:08:16.385-08:00", "name": "gce-secured-instance-test-allow", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 900, "sourceRanges": [ "0.0.0.0/0", "35.235.240.0/20" ], "targetTags": [ "faulty-ssh-instance" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/gce-secured-instance-test-allow" }, { "kind": "compute#firewall", "id": "2430705094709795638", "creationTimestamp": "2023-11-03T14:27:53.657-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "4126568254316010294", "creationTimestamp": "2023-11-03T14:27:53.664-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "8244892118186044576", "creationTimestamp": "2023-11-05T14:08:15.743-08:00", "name": "gce-secured-instance-test-deny", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "priority": 900, "sourceRanges": [ "0.0.0.0/0", "35.235.240.0/20" ], "targetTags": [ "faulty-ssh-instance" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/gce-secured-instance-test-deny" } ] } ================================================ FILE: test-data/gce4/json-dumps/compute-igs-europe-west1-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups", "items": [ { "kind": "compute#instanceGroup", "id": "4752839275668943076", "creationTimestamp": "2022-04-26T08:21:47.107-07:00", "name": "gke-gke1-default-pool-35923fbc-grp", "description": "This instance group is controlled by Instance Group Manager 'gke-gke1-default-pool-35923fbc-grp'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp", "size": 4, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups" } ================================================ FILE: test-data/gce4/json-dumps/compute-igs-europe-west2-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups" } ================================================ FILE: test-data/gce4/json-dumps/compute-igs-europe-west4-a.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups", "items": [ { "kind": "compute#instanceGroup", "id": "3671191198561055498", "creationTimestamp": "2022-04-26T08:21:09.998-07:00", "name": "instance-group-1", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "http", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "bPhGeNqJuxo=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "2978499701990863624", "creationTimestamp": "2022-04-26T08:21:11.396-07:00", "name": "instance-group-2", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "https", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "OMWWjJuNHl0=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "4528539620862178056", "creationTimestamp": "2022-04-26T08:21:11.080-07:00", "name": "mig", "description": "This instance group is controlled by Instance Group Manager 'mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig", "size": 2, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups" } ================================================ FILE: test-data/gce4/json-dumps/compute-instances-europe-west1-b-2.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances", "items": [ { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:54.798-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-k05c", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3147904666822881533", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:01.245-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-k05c", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.79.110.136", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-k05c", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances" } ================================================ FILE: test-data/gce4/json-dumps/compute-instances-europe-west1-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances", "items": [ { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:56.296-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-2xxp", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1470007467084984573", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:05.407-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-2xxp", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.78.171.82", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-2xxp", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:55.180-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-c12f", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "183710301471224061", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:02.051-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-c12f", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.76.115.182", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-c12f", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:56.318-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-fv50", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "148164482114629885", "kind": "compute#instance", "labelFingerprint": "mUgogP08_Iw=", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2022-04-26T08:22:05.433-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" }, { "key": "cluster-location", "value": "europe-west1-b" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-35923fbc-fv50", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.205.62.74", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.132.0.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-fv50", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-f36cf6dd-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b" } ], "kind": "compute#instanceList", "nextPageToken": "ClgI-fiQw4y09wI6TQoCGAMKAyC1EAoCGAIKByDg3fmMvREKAhgHCiUqI2drZS1na2UxLWRlZmF1bHQtcG9vbC0zNTkyM2ZiYy1mdjUwCgog_eGW5vvZmIcC", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances" } ================================================ FILE: test-data/gce4/json-dumps/compute-instances-europe-west2-a.json ================================================ { "id": "projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-11-16T20:03:33.344-08:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-linux-ssh", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3256822971556911357", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2023-11-16T20:03:39.756-08:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "enable-oslogin", "value": "false" }, { "key": "startup-script", "value": "#!/bin/bash\n# stop sshd\nsystemctl stop ssh\n\nwhile true; do\n : # Do nothing, which consumes CPU cycles\ndone\n" } ], "kind": "compute#metadata" }, "name": "faulty-linux-ssh", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "networkIP": "10.154.0.14", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh", "serviceAccounts": [ { "email": "12345601-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "faulty-ssh-instance", "gce-secured-instance-test-deny" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a" }, { "canIpForward": false, "cpuPlatform": "Unknown CPU Platform", "creationTimestamp": "2023-11-16T20:08:24.568-08:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-windows-ssh", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "8620994183730780633", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2023-11-16T20:08:30.833-08:00", "lastStopTimestamp": "2023-11-16T20:15:59.465-08:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "enable-oslogin", "value": "true" }, { "key": "startup-script", "value": "#!/bin/bash\n\nshutdown -h now\n" } ], "kind": "compute#metadata" }, "name": "faulty-windows-ssh", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "networkIP": "10.154.0.16", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh", "serviceAccounts": [ { "email": "12345601-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "TERMINATED", "tags": { "fingerprint": "REDACTED", "items": [ "faulty-ssh-instance", "gce-secured-instance-test-deny" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-11-16T20:03:32.807-08:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/valid-linux-ssh", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4683873813257738493", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2023-11-16T20:03:38.817-08:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "enable-oslogin", "value": "true" }, { "key": "startup-script", "value": "#!/bin/bash\n\ncurl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh\nsudo bash add-google-cloud-ops-agent-repo.sh --also-install\n" } ], "kind": "compute#metadata" }, "name": "valid-linux-ssh", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default", "networkIP": "10.154.0.12", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh", "serviceAccounts": [ { "email": "12345601-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "valid-ssh-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a" } ], "kind": "compute#instanceList", "nextPageToken": "CkQIiOr-rJjKggM6OQoCGAMKAyDyEQoCGAIKByD_srD9xQkKAhgHChEqD3ZhbGlkLWxpbnV4LXNzaAoKIP2x7d-rzZ2AQQ==", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances" } ================================================ FILE: test-data/gce4/json-dumps/compute-instances-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/instances" } ================================================ FILE: test-data/gce4/json-dumps/compute-instances-europe-west4-a-2.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances", "items": [ { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:18.746-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-7pvl", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4022531639476597505", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:24.395-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig" } ], "kind": "compute#metadata" }, "name": "mig-7pvl", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-7pvl", "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances" } ================================================ FILE: test-data/gce4/json-dumps/compute-instances-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:51.863-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101012", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2022-04-26T08:20:58.538-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "gce1", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:51.863-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "32", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "WINDOWS" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101013", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2022-04-26T08:20:58.538-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "windows-test", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.78.171.82", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/windows-test", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2022-04-26T08:20:53.544-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101011", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:01.453-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "serial-port-logging-enable", "value": "false" } ], "kind": "compute#metadata" }, "name": "gce2", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2", "serviceAccounts": [ { "email": "12340001-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "secured-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" }, { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2022-04-26T08:21:19.061-07:00", "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-4h21", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1010101014", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2022-04-26T08:21:25.221-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340001/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig" } ], "kind": "compute#metadata" }, "name": "mig-4h21", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default", "networkIP": "10.164.0.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-4h21", "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a" } ], "kind": "compute#instanceList", "nextPageToken": "Cj0It-i3w4y09wI6MgoCGAMKAyCmEgoCGAIKByDg3fmMvREKAhgHCgoqCG1pZy00aDIxCgoggeaW5uuu8YE7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances" } ================================================ FILE: test-data/gce4/json-dumps/compute-licenses.json ================================================ { "id": "projects/gcpdiag-gce-vm-performance/global/licenses", "items": [ { "kind": "compute#license", "name": "windows-10-enterprise-byol", "chargesUseFee": false, "id": "5769580143916819783", "licenseCode": "2089835370828997959", "creationTimestamp": "2018-11-07T00:00:40.302-08:00", "description": "Windows 10 Enterprise BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-10-enterprise-byol" }, { "kind": "compute#license", "name": "windows-10-x64-byol", "chargesUseFee": false, "id": "5572284649276248982", "licenseCode": "8727879116868096918", "creationTimestamp": "2019-11-19T19:05:29.677-08:00", "description": "Windows 10 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-10-x64-byol" }, { "kind": "compute#license", "name": "windows-10-x86-byol", "chargesUseFee": false, "id": "1279231564365501289", "licenseCode": "3732182829874353001", "creationTimestamp": "2019-11-19T19:05:42.089-08:00", "description": "Windows 10 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-10-x86-byol" }, { "kind": "compute#license", "name": "windows-11-x64-byol", "chargesUseFee": false, "id": "3804262737275203477", "licenseCode": "5378533650449772437", "creationTimestamp": "2021-08-25T11:52:42.711-07:00", "description": "Windows 11 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-11-x64-byol" }, { "kind": "compute#license", "name": "windows-7-enterprise-byol", "chargesUseFee": false, "id": "2913052624331679126", "licenseCode": "752112173778412950", "creationTimestamp": "2018-11-06T23:59:53.727-08:00", "description": "Windows 7 Enterprise BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-7-enterprise-byol" }, { "kind": "compute#license", "name": "windows-7-x64-byol", "chargesUseFee": false, "id": "6501903266496451262", "licenseCode": "5016528181960184510", "creationTimestamp": "2019-11-19T19:00:33.621-08:00", "description": "Windows 7 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-7-x64-byol" }, { "kind": "compute#license", "name": "windows-7-x86-byol", "chargesUseFee": false, "id": "4058550282231550561", "licenseCode": "622639362407469665", "creationTimestamp": "2019-11-19T19:01:34.532-08:00", "description": "Windows 7 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-7-x86-byol" }, { "kind": "compute#license", "name": "windows-8-x64-byol", "chargesUseFee": false, "id": "7710168160606425653", "licenseCode": "7036859048284197429", "creationTimestamp": "2019-11-19T19:02:50.559-08:00", "description": "Windows 8.x 64-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-8-x64-byol" }, { "kind": "compute#license", "name": "windows-8-x86-byol", "chargesUseFee": false, "id": "2601192579332117498", "licenseCode": "3720924436396315642", "creationTimestamp": "2019-11-19T19:03:49.785-08:00", "description": "Windows 8.x 32-bit BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-8-x86-byol" }, { "kind": "compute#license", "name": "windows-81-x64-byol", "chargesUseFee": false, "id": "5692263345196614391", "licenseCode": "5366577783322166007", "creationTimestamp": "2019-04-28T21:22:48.487-07:00", "description": "Windows 8.1 Enterprise x64 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-81-x64-byol" }, { "kind": "compute#license", "name": "windows-ent", "chargesUseFee": false, "id": "1257656105385958662", "licenseCode": "2967169933779246342", "creationTimestamp": "2019-09-25T19:35:21.078-07:00", "description": "Windows Enterprise", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-ent" }, { "kind": "compute#license", "name": "windows-for-containers", "chargesUseFee": false, "id": "7423076496314791885", "licenseCode": "2643967004807329741", "creationTimestamp": "2017-09-25T11:21:22.120-07:00", "description": "Windows container host", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-for-containers" }, { "kind": "compute#license", "name": "windows-server-1709-dc", "chargesUseFee": false, "id": "2638722841150638382", "licenseCode": "5194306116883728686", "creationTimestamp": "2017-10-03T13:49:05.759-07:00", "description": "Windows Server 1709 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1709-dc" }, { "kind": "compute#license", "name": "windows-server-1803-dc", "chargesUseFee": false, "id": "991969583094905153", "licenseCode": "6476660300603799873", "creationTimestamp": "2018-05-07T10:06:54.761-07:00", "description": "Windows Server version 1803 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1803-dc" }, { "kind": "compute#license", "name": "windows-server-1809-dc", "chargesUseFee": false, "id": "2197036663612051569", "licenseCode": "8597854123084943473", "creationTimestamp": "2018-10-04T17:21:50.249-07:00", "description": "Windows Server version 1809 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1809-dc" }, { "kind": "compute#license", "name": "windows-server-1903-dc", "chargesUseFee": false, "id": "783754911489890105", "licenseCode": "5980382382909462329", "creationTimestamp": "2019-06-10T21:11:02.733-07:00", "description": "Windows Server version 1903 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1903-dc" }, { "kind": "compute#license", "name": "windows-server-1909-dc", "chargesUseFee": false, "id": "1504783339576403625", "licenseCode": "1413572828508235433", "creationTimestamp": "2019-11-14T01:03:02.101-08:00", "description": "Windows Server version 1909 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1909-dc" }, { "kind": "compute#license", "name": "windows-server-2000", "chargesUseFee": false, "id": "77415431498093015", "licenseCode": "5507061839551517143", "creationTimestamp": "2021-03-02T09:00:40.478-08:00", "description": "Windows Server 2000", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2000" }, { "kind": "compute#license", "name": "windows-server-2003", "chargesUseFee": false, "id": "8972483680585271920", "licenseCode": "5030842449011296880", "creationTimestamp": "2017-04-10T14:09:51.924-07:00", "description": "Windows Server 2003", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2003" }, { "kind": "compute#license", "name": "windows-server-2004-dc", "chargesUseFee": false, "id": "6915731882356532357", "licenseCode": "6710259852346942597", "creationTimestamp": "2020-07-23T11:43:54.418-07:00", "description": "Windows Server version 2004 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2004-dc" }, { "kind": "compute#license", "name": "windows-server-2008", "chargesUseFee": false, "id": "2740560588278180852", "licenseCode": "1656378918552316916", "creationTimestamp": "2022-11-09T13:01:15.565-08:00", "description": "Windows Server 2008 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008" }, { "kind": "compute#license", "name": "windows-server-2008-dc", "chargesUseFee": true, "id": "5520530534018080146", "licenseCode": "1000502", "creationTimestamp": "2015-06-03T17:05:28.000-07:00", "description": "Windows Server 2008 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008-dc" }, { "kind": "compute#license", "name": "windows-server-2008-r2", "chargesUseFee": false, "id": "4293107698603502582", "licenseCode": "3284763237085719542", "creationTimestamp": "2022-11-09T13:01:13.386-08:00", "description": "Windows Server 2008 R2 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008-r2" }, { "kind": "compute#license", "name": "windows-server-2008-r2-byol", "chargesUseFee": false, "id": "6485631155857676024", "licenseCode": "4551215591257167608", "creationTimestamp": "2018-10-05T15:39:19.139-07:00", "description": "Windows Server 2008R2 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008-r2-byol" }, { "kind": "compute#license", "name": "windows-server-2008-r2-dc", "chargesUseFee": true, "id": "6080198139471122848", "licenseCode": "1000000", "creationTimestamp": "2013-08-19T17:17:57.000-07:00", "description": "Windows Server 2008 R2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008-r2-dc" }, { "kind": "compute#license", "name": "windows-server-2012", "chargesUseFee": false, "id": "4571663854194502649", "licenseCode": "7695108898142923768", "creationTimestamp": "2022-11-09T13:01:10.861-08:00", "description": "Windows Server 2012 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012" }, { "kind": "compute#license", "name": "windows-server-2012-byol", "chargesUseFee": false, "id": "2247304514167789851", "licenseCode": "5559842820536817947", "creationTimestamp": "2018-10-05T15:38:44.367-07:00", "description": "Windows Server 2012 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-byol" }, { "kind": "compute#license", "name": "windows-server-2012-dc", "chargesUseFee": true, "id": "6102042211374830963", "licenseCode": "1000015", "creationTimestamp": "2015-01-05T16:58:27.000-08:00", "description": "Windows Server 2012 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-dc" }, { "kind": "compute#license", "name": "windows-server-2012-r2", "chargesUseFee": false, "id": "975226805105568736", "licenseCode": "7798417859637521376", "creationTimestamp": "2022-11-09T13:01:03.469-08:00", "description": "Windows Server 2012 R2 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-r2" }, { "kind": "compute#license", "name": "windows-server-2012-r2-byol", "chargesUseFee": false, "id": "11586629996795623", "licenseCode": "6738952703547430631", "creationTimestamp": "2018-10-05T15:39:04.149-07:00", "description": "Windows Server 2012R2 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-r2-byol" }, { "kind": "compute#license", "name": "windows-server-2012-r2-dc", "chargesUseFee": true, "id": "6102042209776448355", "licenseCode": "1000017", "creationTimestamp": "2015-01-05T16:58:27.000-08:00", "description": "Windows Server 2012 R2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-r2-dc" }, { "kind": "compute#license", "name": "windows-server-2012-r2-dc-in-place-upgrade", "chargesUseFee": false, "id": "1687636345185865342", "licenseCode": "7123010349826543230", "creationTimestamp": "2020-03-24T09:08:49.417-07:00", "description": "Windows Server 2008 R2 to 2012 R2 in place upgrade", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-r2-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2016", "chargesUseFee": false, "id": "2566166048269249507", "licenseCode": "4819555115818134498", "creationTimestamp": "2022-11-09T13:01:01.077-08:00", "description": "Windows Server 2016 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016" }, { "kind": "compute#license", "name": "windows-server-2016-byol", "chargesUseFee": false, "id": "6580557195888974094", "licenseCode": "4322823184804632846", "creationTimestamp": "2018-10-05T15:38:26.021-07:00", "description": "Windows Server 2016 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016-byol" }, { "kind": "compute#license", "name": "windows-server-2016-dc", "chargesUseFee": true, "id": "2483536683413682772", "licenseCode": "1000213", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "Windows Server 2016 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016-dc" }, { "kind": "compute#license", "name": "windows-server-2016-dc-in-place-upgrade", "chargesUseFee": false, "id": "7616085184958426941", "licenseCode": "5199320590876405565", "creationTimestamp": "2022-03-04T09:52:18.982-08:00", "description": "in-place upgraded to Windows Server 2016", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2016-nano", "chargesUseFee": true, "id": "2282594357842688596", "licenseCode": "1000214", "creationTimestamp": "2016-05-02T14:35:54.000-07:00", "description": "Windows Server 2016 Nano", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016-nano" }, { "kind": "compute#license", "name": "windows-server-2019", "chargesUseFee": false, "id": "3525541779464104933", "licenseCode": "4874454843789519845", "creationTimestamp": "2022-11-09T13:00:58.674-08:00", "description": "Windows Server 2019 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2019" }, { "kind": "compute#license", "name": "windows-server-2019-byol", "chargesUseFee": false, "id": "1090214026507846099", "licenseCode": "6532438499690676691", "creationTimestamp": "2019-09-25T12:25:48.522-07:00", "description": "Windows Server 2019 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2019-byol" }, { "kind": "compute#license", "name": "windows-server-2019-dc", "chargesUseFee": false, "id": "5993475225685790965", "licenseCode": "3389558045860892917", "creationTimestamp": "2018-10-04T17:19:38.568-07:00", "description": "Windows Server 2019 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2019-dc" }, { "kind": "compute#license", "name": "windows-server-2019-dc-in-place-upgrade", "chargesUseFee": false, "id": "7388112379630840967", "licenseCode": "3156934045285215367", "creationTimestamp": "2022-03-04T09:54:48.827-08:00", "description": "in-place upgraded to Windows Server 2019", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2019-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-2022", "chargesUseFee": false, "id": "8141439404167244305", "licenseCode": "6107784707477449232", "creationTimestamp": "2022-11-09T13:00:46.975-08:00", "description": "Windows Server 2022 Standard Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2022" }, { "kind": "compute#license", "name": "windows-server-2022-byol", "chargesUseFee": false, "id": "2150336909657452508", "licenseCode": "2808834792899686364", "creationTimestamp": "2021-08-25T11:51:31.527-07:00", "description": "Windows Server 2022 BYOL", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2022-byol" }, { "kind": "compute#license", "name": "windows-server-2022-dc", "chargesUseFee": false, "id": "2525168283357630087", "licenseCode": "4079807029871201927", "creationTimestamp": "2021-09-02T08:40:24.070-07:00", "description": "Windows Server 2022 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2022-dc" }, { "kind": "compute#license", "name": "windows-server-2022-dc-in-place-upgrade", "chargesUseFee": false, "id": "7118639573064740016", "licenseCode": "4670175393034005680", "creationTimestamp": "2022-03-04T09:54:39.255-08:00", "description": "in-place upgraded to Windows Server 2022", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2022-dc-in-place-upgrade" }, { "kind": "compute#license", "name": "windows-server-20h2-dc", "chargesUseFee": false, "id": "2209136415345591070", "licenseCode": "8578754948912497438", "creationTimestamp": "2020-11-02T13:45:21.528-08:00", "description": "Windows Server version 20H2 Datacenter Edition", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-20h2-dc" }, { "kind": "compute#license", "name": "windows-server-21h1-dc", "chargesUseFee": false, "id": "8661389914554199433", "licenseCode": "7248135684629163401", "creationTimestamp": "2021-04-29T08:40:22.527-07:00", "description": "Windows Server version 21h1 Datacenter Edition", "transferable": true, "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-21h1-dc" }, { "kind": "compute#license", "name": "windows-server-core", "chargesUseFee": true, "id": "7184832379764048457", "licenseCode": "1000226", "creationTimestamp": "2016-11-07T13:21:29.000-08:00", "description": "Windows Server Core", "transferable": true, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-core" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses" } ================================================ FILE: test-data/gce4/json-dumps/compute-migs-europe-west1-b.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "1906946679224250602", "creationTimestamp": "2022-04-26T08:21:41.088-07:00", "name": "gke-gke1-default-pool-35923fbc-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc", "targetSize": { "calculated": 4 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp", "baseInstanceName": "gke-gke1-default-pool-35923fbc", "fingerprint": "cFBmeZR_JvQ=", "currentActions": { "none": 4, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 4, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce4/json-dumps/compute-migs-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gce-vm-performance/zones/europe-west2-b/instanceGroupManagers", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce4/json-dumps/compute-migs-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "7183453391228875571", "creationTimestamp": "2022-04-26T08:21:00.715-07:00", "name": "mig", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig", "baseInstanceName": "mig", "fingerprint": "lss-DXagYSg=", "currentActions": { "none": 2, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 2, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gce4/json-dumps/compute-network-default.json ================================================ { "autoCreateSubnetworks": true, "creationTimestamp": "2023-11-03T14:27:06.884-07:00", "description": "Default network for the project", "id": "4415164866624019269", "kind": "compute#network", "name": "default", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "routingConfig": { "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/4415164866624019269", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/africa-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12/subnetworks/default" ] } ================================================ FILE: test-data/gce4/json-dumps/compute-network-routes.json ================================================ { "kind": "compute#routeList", "id": "projects/gcpdiag-gce-vm-performance/global/routes", "items": [ { "kind": "compute#route", "id": "2670539294019165993", "creationTimestamp": "2023-03-15T03:45:27.008-07:00", "name": "default", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "destRange": "0.0.0.0/0", "priority": 1, "nextHopGateway": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/gateways/default-internet-gateway", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/routes/default" }, { "kind": "compute#route", "id": "2178241415220915600", "creationTimestamp": "2023-02-09T03:05:35.107-08:00", "name": "peering-route-299fcb697f2532b0", "description": "Auto generated route via peering [peering-r544dd974f1bc5396-tp-default].", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "destRange": "192.168.0.0/26", "priority": 0, "nextHopPeering": "peering-r544dd974f1bc5396-tp-default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/routes/peering-route-299fcb697f2532b0" }, { "kind": "compute#route", "id": "8223547831511088095", "creationTimestamp": "2023-03-10T06:56:48.979-08:00", "name": "real-allow-kms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "tags": [ "windows" ], "destRange": "35.190.247.13/32", "priority": 1, "nextHopGateway": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/gateways/default-internet-gateway", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/routes/real-allow-kms" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/routes" } ================================================ FILE: test-data/gce4/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "HTt6ps4-I3s=", "items": [ { "key": "ssh-keys", "value": " foo:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT foo\n" } ], "kind": "compute#metadata" }, "creationTimestamp": "2023-11-03T14:26:59.007-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12345601-compute@developer.gserviceaccount.com", "id": "7025536248423439181", "kind": "compute#project", "name": "gcpdiag-gce-vm-perfrmance-runbook", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 6 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 0 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 1000, "metric": "HEALTH_CHECKS", "usage": 0 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 0 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 1 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 0 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES", "usage": 0 }, { "limit": 750, "metric": "GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-perfrmance-runbook", "vmDnsSetting": "GLOBAL_DEFAULT", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/gce4/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-gce-vm-performance/regions", "items": [ { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3", "supportsPzs": true }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1", "supportsPzs": true }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10", "description": "europe-west10", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10", "supportsPzs": true }, { "kind": "compute#region", "id": "1570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12", "description": "europe-west12", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12", "supportsPzs": true }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 84 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 4 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 3 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6", "supportsPzs": false }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8", "supportsPzs": false }, { "kind": "compute#region", "id": "1520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9", "description": "europe-west9", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9", "supportsPzs": true }, { "kind": "compute#region", "id": "1580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1", "description": "me-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2", "description": "me-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1", "description": "me-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1", "supportsPzs": true }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5", "supportsPzs": false }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions" } ================================================ FILE: test-data/gce4/json-dumps/compute-serial-port-output-1010101010.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE. Up 20.49 seconds", "start": "0", "next": "63414", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/1010101010/serialPortOutput" } ================================================ FILE: test-data/gce4/json-dumps/compute-serial-port-output-1010101011.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE. Up 20.49 seconds", "start": "0", "next": "63414", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/1010101010/serialPortOutput" } ================================================ FILE: test-data/gce4/json-dumps/compute-serial-port-output-faulty-linux-ssh.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n\r\n\u001b[0m\u001b[30m\u001b[47mWelcome to GRUB!\n\r\n\r\u001b[0m\u001b[37m\u001b[40m\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m\u001b[H\u001b[J\u001b[1;1H\u001b[H\u001b[J\u001b[1;1H\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\n\r\n\r\n\r\n\rLoading Linux 5.10.0-26-cloud-amd64 ...Loading Linux 5.10.0-26-cloud-amd64 ...\n\r\n\rLoading initial ramdisk ...Loading initial ramdisk ...\n\r\n\rerror: no suitable video mode found.\n\rerror: no suitable video mode found.\n\rBooting in blind modeBooting in blind mode\n\r\n\r[ 0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\r\n[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.000000] BIOS-provided physical RAM map:\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\r\n[ 0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\r\n[ 0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\r\n[ 0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\r\n[ 0.000000] printk: bootconsole [earlyser0] enabled\r\n[ 0.000000] NX (Execute Disable) protection: active\r\n[ 0.000000] efi: EFI v2.70 by EDK II\r\n[ 0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \r\n[ 0.000000] secureboot: Secure boot disabled\r\n[ 0.000000] SMBIOS 2.4 present.\r\n[ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\r\n[ 0.000000] Hypervisor detected: KVM\r\n[ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\n[ 0.000000] kvm-clock: cpu 0, msr 11601001, primary cpu clock\r\n[ 0.000000] kvm-clock: using sched offset of 6574541159 cycles\r\n[ 0.000750] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\n[ 0.003137] tsc: Detected 2200.170 MHz processor\r\n[ 0.003944] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\r\n[ 0.004756] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nMemory KASLR using RDRAND RDTSC...\r\n[ 0.006413] Using GB pages for direct mapping\r\n[ 0.007451] RAMDISK: [mem 0x2327f000-0x24000fff]\r\n[ 0.008104] ACPI: Early table checksum verification disabled\r\n[ 0.008840] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\r\n[ 0.009613] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\n[ 0.010705] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\n[ 0.011795] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\n[ 0.013148] ACPI: FACS 0x00000000261F2000 000040\r\n[ 0.013789] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\n[ 0.015074] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\n[ 0.016308] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\n[ 0.017416] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\n[ 0.018848] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\n[ 0.019981] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\n[ 0.021071] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\r\n[ 0.021968] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\r\n[ 0.022868] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\r\n[ 0.024195] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\r\n[ 0.025096] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\r\n[ 0.026077] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\r\n[ 0.026976] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\r\n[ 0.028016] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\r\n[ 0.028910] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\r\n[ 0.029920] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\n[ 0.030516] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\n[ 0.031283] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\r\n[ 0.032201] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\u003e [mem 0x00000000-0x265dffff]\r\n[ 0.034082] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\r\n[ 0.035210] Zone ranges:\r\n[ 0.035556] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\n[ 0.036346] DMA32 [mem 0x0000000001000000-0x00000000265dffff]\r\n[ 0.037132] Normal empty\r\n[ 0.037500] Device empty\r\n[ 0.037865] Movable zone start for each node\r\n[ 0.038411] Early memory node ranges\r\n[ 0.038866] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\n[ 0.039666] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\n[ 0.040501] node 0: [mem 0x0000000000100000-0x0000000025eecfff]\r\n[ 0.041319] node 0: [mem 0x00000000261ff000-0x00000000265dffff]\r\n[ 0.042118] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\r\n[ 0.043516] On node 0, zone DMA: 1 pages in unavailable ranges\r\n[ 0.043518] On node 0, zone DMA: 11 pages in unavailable ranges\r\n[ 0.044348] On node 0, zone DMA: 104 pages in unavailable ranges\r\n[ 0.046817] On node 0, zone DMA32: 786 pages in unavailable ranges\r\n[ 0.047679] On node 0, zone DMA32: 6688 pages in unavailable ranges\r\n[ 0.048980] ACPI: PM-Timer IO Port: 0xb008\r\n[ 0.050442] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\n[ 0.051354] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\n[ 0.052270] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\n[ 0.053112] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\n[ 0.054025] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\n[ 0.054888] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\n[ 0.055764] Using ACPI (MADT) for SMP configuration information\r\n[ 0.056581] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\r\n[ 0.057278] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\n[ 0.058289] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\n[ 0.059254] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\n[ 0.060218] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\n[ 0.061186] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\r\n[ 0.062153] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\r\n[ 0.063119] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\r\n[ 0.064086] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\r\n[ 0.065051] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\r\n[ 0.066343] [mem 0x26600000-0xffffffff] available for PCI devices\r\n[ 0.067140] Booting paravirtualized kernel on KVM\r\n[ 0.067740] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\n[ 0.073455] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\r\n[ 0.075118] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\r\n[ 0.076074] kvm-guest: PV spinlocks disabled, single CPU\r\n[ 0.076805] Built 1 zonelists, mobility grouping on. Total pages: 150673\r\n[ 0.077803] Policy zone: DMA32\r\n[ 0.078192] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.080817] DMAR: IOMMU disabled\r\n[ 0.081474] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\n[ 0.082690] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\r\n[ 0.083743] mem auto-init: stack:off, heap alloc:on, heap free:off\r\n[ 0.087100] Memory: 233576K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\r\n[ 0.089122] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\r\n[ 0.090012] Kernel/User page tables isolation: enabled\r\nPoking KASLR using RDRAND RDTSC...\r\n[ 0.091151] ftrace: allocating 33918 entries in 133 pages\r\n[ 0.111503] ftrace: allocated 133 pages with 3 groups\r\n[ 0.112765] rcu: Hierarchical RCU implementation.\r\n[ 0.113378] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\r\n[ 0.114278] \tRude variant of Tasks RCU enabled.\r\n[ 0.114855] \tTracing variant of Tasks RCU enabled.\r\n[ 0.115469] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\n[ 0.116433] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\r\n[ 0.121697] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\r\n[ 0.122810] random: crng init done\r\n[ 0.123274] Console: colour dummy device 80x25\r\n[ 0.124053] printk: console [tty0] enabled\r\n[ 0.124835] printk: console [ttyS0] enabled\r\n[ 0.124835] printk: console [ttyS0] enabled\r\n[ 0.126039] printk: bootconsole [earlyser0] disabled\r\n[ 0.126039] printk: bootconsole [earlyser0] disabled\r\n[ 0.127441] ACPI: Core revision 20200925\r\n[ 0.128098] APIC: Switch to symmetric I/O mode setup\r\n[ 0.129244] x2apic enabled\r\n[ 0.131960] Switched APIC routing to physical x2apic.\r\n[ 0.136632] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\n[ 0.137712] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\r\n[ 0.139157] Calibrating delay loop (skipped) preset value.. 4400.34 BogoMIPS (lpj=8800680)\r\n[ 0.143263] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\n[ 0.144056] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\n[ 0.144991] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\n[ 0.146142] Spectre V2 : Mitigation: IBRS\r\n[ 0.146695] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\n[ 0.147156] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\n[ 0.148095] RETBleed: Mitigation: IBRS\r\n[ 0.148658] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\n[ 0.149882] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\n[ 0.151163] MDS: Mitigation: Clear CPU buffers\r\n[ 0.151804] TAA: Mitigation: Clear CPU buffers\r\n[ 0.152445] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\n[ 0.153624] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\n[ 0.155158] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\n[ 0.156050] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\n[ 0.156905] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\n[ 0.157851] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\n[ 0.177428] Freeing SMP alternatives memory: 32K\r\n[ 0.179890] pid_max: default: 32768 minimum: 301\r\n[ 0.188030] LSM: Security Framework initializing\r\n[ 0.188748] Yama: disabled by default; enable with sysctl kernel.yama.*\r\n[ 0.189713] AppArmor: AppArmor initialized\r\n[ 0.190294] TOMOYO Linux initialized\r\n[ 0.190806] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\n[ 0.191158] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\n[ 0.301178] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\n[ 0.303030] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\n[ 0.303154] rcu: Hierarchical SRCU implementation.\r\n[ 0.303232] NMI watchdog: Perf NMI watchdog permanently disabled\r\n[ 0.304156] smp: Bringing up secondary CPUs ...\r\n[ 0.304775] smp: Brought up 1 node, 1 CPU\r\n[ 0.305377] smpboot: Max logical packages: 1\r\n[ 0.305973] smpboot: Total of 1 processors activated (4400.34 BogoMIPS)\r\n[ 0.308500] node 0 deferred pages initialised in 4ms\r\n[ 0.309336] devtmpfs: initialized\r\n[ 0.309853] x86/mm: Memory block size: 128MB\r\n[ 0.310586] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\r\n[ 0.311201] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\n[ 0.312491] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\r\n[ 0.313553] NET: Registered protocol family 16\r\n[ 0.314323] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\r\n[ 0.315262] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\n[ 0.316351] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\n[ 0.317444] audit: initializing netlink subsys (disabled)\r\n[ 0.318358] thermal_sys: Registered thermal governor 'fair_share'\r\n[ 0.318358] thermal_sys: Registered thermal governor 'bang_bang'\r\n[ 0.319159] thermal_sys: Registered thermal governor 'step_wise'\r\n[ 0.319988] thermal_sys: Registered thermal governor 'user_space'\r\n[ 0.320815] thermal_sys: Registered thermal governor 'power_allocator'\r\n[ 0.321635] cpuidle: using governor ladder\r\n[ 0.323161] audit: type=2000 audit(1700193824.940:1): state=initialized audit_enabled=0 res=1\r\n[ 0.324328] cpuidle: using governor menu\r\n[ 0.324906] ACPI: bus type PCI registered\r\n[ 0.325460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\n[ 0.326421] PCI: Using configuration type 1 for base access\r\n[ 0.327802] Kprobes globally optimized\r\n[ 0.328452] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\n[ 0.329351] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\n[ 0.457287] ACPI: Added _OSI(Module Device)\r\n[ 0.457914] ACPI: Added _OSI(Processor Device)\r\n[ 0.458520] ACPI: Added _OSI(3.0 _SCP Extensions)\r\n[ 0.459158] ACPI: Added _OSI(Processor Aggregator Device)\r\n[ 0.460010] ACPI: Added _OSI(Linux-Dell-Video)\r\n[ 0.460629] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\n[ 0.461348] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\n[ 0.462989] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\n[ 0.464105] ACPI: Interpreter enabled\r\n[ 0.464646] ACPI: (supports S0 S3 S4 S5)\r\n[ 0.465207] ACPI: Using IOAPIC for interrupt routing\r\n[ 0.465937] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\n[ 0.467351] ACPI: Enabled 16 GPEs in block 00 to 0F\r\n[ 0.469893] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\n[ 0.471179] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\n[ 0.472279] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\n[ 0.474395] PCI host bridge to bus 0000:00\r\n[ 0.475161] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\n[ 0.476080] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\n[ 0.476988] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\n[ 0.478071] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\r\n[ 0.479156] pci_bus 0000:00: root bus resource [bus 00-ff]\r\n[ 0.479955] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\n[ 0.483516] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\n[ 0.497205] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\n[ 0.510756] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\n[ 0.511429] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\n[ 0.518345] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\n[ 0.523157] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\r\n[ 0.534975] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\n[ 0.540789] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\n[ 0.544833] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\r\n[ 0.555412] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\r\n[ 0.560805] pci 0000:00:05.0: reg 0x10: [io 0xc080-0xc09f]\r\n[ 0.564625] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\r\n[ 0.575564] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\n[ 0.577286] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\n[ 0.578886] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\n[ 0.579915] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\n[ 0.583168] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\n[ 0.584105] iommu: Default domain type: Translated \r\n[ 0.584854] vgaarb: loaded\r\n[ 0.585334] Registered efivars operations\r\n[ 0.586084] NetLabel: Initializing\r\n[ 0.587156] NetLabel: domain hash size = 128\r\n[ 0.587827] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\n[ 0.588621] NetLabel: unlabeled traffic allowed by default\r\n[ 0.589415] PCI: Using ACPI for IRQ routing\r\n[ 0.590183] clocksource: Switched to clocksource kvm-clock\r\n[ 0.599324] VFS: Disk quotas dquot_6.6.0\r\n[ 0.599916] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\n[ 0.601024] AppArmor: AppArmor Filesystem Enabled\r\n[ 0.601786] pnp: PnP ACPI init\r\n[ 0.602662] pnp: PnP ACPI: found 7 devices\r\n[ 0.608541] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\n[ 0.609795] NET: Registered protocol family 2\r\n[ 0.610436] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\r\n[ 0.612665] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\r\n[ 0.613850] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\r\n[ 0.614940] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\n[ 0.615983] TCP: Hash tables configured (established 8192 bind 8192)\r\n[ 0.616945] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\r\n[ 0.617844] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\r\n[ 0.618844] NET: Registered protocol family 1\r\n[ 0.619629] NET: Registered protocol family 44\r\n[ 0.620246] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\n[ 0.621100] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\n[ 0.621946] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\n[ 0.622980] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\r\n[ 0.624039] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\n[ 0.624898] PCI: CLS 0 bytes, default 64\r\n[ 0.625515] Trying to unpack rootfs image as initramfs...\r\n[ 0.838263] Freeing initrd memory: 13832K\r\n[ 0.838913] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\r\n[ 0.840271] clocksource: Switched to clocksource tsc\r\n[ 0.841223] Initialise system trusted keyrings\r\n[ 0.841875] Key type blacklist registered\r\n[ 0.842505] workingset: timestamp_bits=36 max_order=18 bucket_order=0\r\n[ 0.844293] zbud: loaded\r\n[ 0.844973] Key type asymmetric registered\r\n[ 0.845539] Asymmetric key parser 'x509' registered\r\n[ 0.846222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\n[ 0.847278] io scheduler mq-deadline registered\r\n[ 0.848485] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\n[ 0.849463] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\n[ 0.850740] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\n[ 0.851965] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\n[ 0.853164] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\n[ 0.854467] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\n[ 0.855734] i8042: Warning: Keylock active\r\n[ 0.857698] serio: i8042 KBD port at 0x60,0x64 irq 1\r\n[ 0.858391] serio: i8042 AUX port at 0x60,0x64 irq 12\r\n[ 0.859206] rtc_cmos 00:00: RTC can wake from S4\r\n[ 0.860615] rtc_cmos 00:00: registered as rtc0\r\n[ 0.861428] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:45 UTC (1700193825)\r\n[ 0.862619] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\n[ 0.863495] intel_pstate: CPU model not supported\r\n[ 0.864350] NET: Registered protocol family 10\r\n[ 0.872101] Segment Routing with IPv6\r\n[ 0.872671] mip6: Mobile IPv6\r\n[ 0.873091] NET: Registered protocol family 17\r\n[ 0.873814] IPI shorthand broadcast: enabled\r\n[ 0.874454] sched_clock: Marking stable (864288966, 8353340)-\u003e(874836097, -2193791)\r\n[ 0.875588] registered taskstats version 1\r\n[ 0.876158] Loading compiled-in X.509 certificates\r\n[ 0.908877] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\n[ 0.910478] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\n[ 0.911923] Key type .fscrypt registered\r\n[ 0.912517] Key type fscrypt-provisioning registered\r\n[ 0.913253] AppArmor: AppArmor sha1 policy hashing enabled\r\n[ 0.915720] Freeing unused decrypted memory: 2036K\r\n[ 0.917013] Freeing unused kernel image (initmem) memory: 2468K\r\n[ 0.924384] Write protecting the kernel read-only data: 22528k\r\n[ 0.925931] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\n[ 0.927194] Freeing unused kernel image (rodata/data gap) memory: 1236K\r\n[ 0.928659] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 0.929536] x86/mm: Checking user space page tables\r\n[ 0.930357] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 0.931248] Run /init as init process\r\nLoading, please wait...\r\nStarting version 247.3-7+deb11u4\r\n[ 0.999458] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\n[ 1.000238] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\n[ 1.026601] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\n[ 1.027444] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\n[ 1.031920] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\n[ 1.032814] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\n[ 1.054934] SCSI subsystem initialized\r\n[ 1.061158] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\n[ 1.075892] virtio_net virtio1 ens4: renamed from eth0\r\n[ 1.085896] scsi host0: Virtio SCSI HBA\r\n[ 1.091740] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\n[ 1.111855] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\r\n[ 1.112925] sd 0:0:1:0: [sda] 4096-byte physical blocks\r\n[ 1.113940] sd 0:0:1:0: [sda] Write Protect is off\r\n[ 1.114657] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\n[ 1.118523] sda: sda1 sda14 sda15\r\n[ 1.126791] sd 0:0:1:0: [sda] Attached SCSI disk\r\nBegin: Loading essential drivers ... done.\r\nBegin: Running /scripts/init-premount ... done.\r\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\r\nBegin: Running /scripts/local[ 1.152781] gce-disk-expand: Resizing partition on \r\n-premount ... [ 1.176849] sda: sda1 sda14 sda15\r\n[ 1.188392] gce-disk-expand: Disk /dev/sda1 doesn't need resizing.\r\ndone.\r\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\r\n[/sbin/fsck.ext4 (1) -- /dev/sda1] fsck.ext4 -a -C0 /dev/sda1 \r\n/dev/sda1: clean, 82191/647168 files, 583028/2588667 blocks\r\ndone.\r\n[ 1.254250] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\r\ndone.\r\nBegin: Running /scripts/local-bottom ... done.\r\nBegin: Running /scripts/init-bottom ... done.\r\n[ 1.277595] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\n[ 1.387488] systemd[1]: Inserted module 'autofs4'\r\n[ 1.442681] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\r\n[ 1.445902] systemd[1]: Detected virtualization kvm.\r\n[ 1.446600] systemd[1]: Detected architecture x86-64.\r\n\r\nWelcome to \u001b[1mDebian GNU/Linux 11 (bullseye)\u001b[0m!\r\n\r\n[ 1.460843] systemd[1]: Set hostname to \u003cdebian\u003e.\r\n[ 1.462651] systemd[1]: Initializing machine ID from KVM UUID.\r\n[ 1.463576] systemd[1]: Installed transient /etc/machine-id file.\r\n[ 1.919472] systemd[1]: Condition check resulted in Root Slice being skipped.\r\n[ 1.920524] systemd[1]: Condition check resulted in System Slice being skipped.\r\n[ 1.922280] systemd[1]: Queued start job for default target Graphical Interface.\r\n[ 1.924563] systemd[1]: Created slice system-getty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-getty.slice\u001b[0m.\r\n[ 1.936671] systemd[1]: Created slice system-modprobe.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-modprobe.slice\u001b[0m.\r\n[ 1.948711] systemd[1]: Created slice system-serial\\x2dgetty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-serial\\x2dgetty.slice\u001b[0m.\r\n[ 1.960656] systemd[1]: Created slice system-systemd\\x2dgrowfs.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-systemd\\x2dgrowfs.slice\u001b[0m.\r\n[ 1.972612] systemd[1]: Created slice User and Session Slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39mUser and Session Slice\u001b[0m.\r\n[ 1.984482] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDispatch Password …ts to Console Directory Watch\u001b[0m.\r\n[ 1.996479] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mForward Password R…uests to Wall Directory Watch\u001b[0m.\r\n[ 2.008603] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\r\n[\u001b[0;32m OK \u001b[0m] Set up automount \u001b[0;1;39mArbitrary…s File System Automount Point\u001b[0m.\r\n[ 2.020467] systemd[1]: Reached target Local Encrypted Volumes.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal Encrypted Volumes\u001b[0m.\r\n[ 2.032463] systemd[1]: Reached target Paths.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mPaths\u001b[0m.\r\n[ 2.044419] systemd[1]: Reached target Remote File Systems.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mRemote File Systems\u001b[0m.\r\n[ 2.056430] systemd[1]: Reached target Slices.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSlices\u001b[0m.\r\n[ 2.068460] systemd[1]: Reached target Swap.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSwap\u001b[0m.\r\n[ 2.080452] systemd[1]: Reached target System Time Set.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Set\u001b[0m.\r\n[ 2.092590] systemd[1]: Listening on Syslog Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mSyslog Socket\u001b[0m.\r\n[ 2.104541] systemd[1]: Listening on fsck to fsckd communication Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mfsck to fsckd communication Socket\u001b[0m.\r\n[ 2.116525] systemd[1]: Listening on initctl Compatibility Named Pipe.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39minitctl Compatibility Named Pipe\u001b[0m.\r\n[ 2.128652] systemd[1]: Listening on Journal Audit Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Audit Socket\u001b[0m.\r\n[ 2.140586] systemd[1]: Listening on Journal Socket (/dev/log).\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket (/dev/log)\u001b[0m.\r\n[ 2.152608] systemd[1]: Listening on Journal Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket\u001b[0m.\r\n[ 2.164999] systemd[1]: Listening on udev Control Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Control Socket\u001b[0m.\r\n[ 2.176533] systemd[1]: Listening on udev Kernel Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Kernel Socket\u001b[0m.\r\n[ 2.189244] systemd[1]: Mounting Huge Pages File System...\r\n Mounting \u001b[0;1;39mHuge Pages File System\u001b[0m...\r\n[ 2.201151] systemd[1]: Mounting POSIX Message Queue File System...\r\n Mounting \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m...\r\n[ 2.213139] systemd[1]: Mounting Kernel Debug File System...\r\n Mounting \u001b[0;1;39mKernel Debug File System\u001b[0m...\r\n[ 2.225136] systemd[1]: Mounting Kernel Trace File System...\r\n Mounting \u001b[0;1;39mKernel Trace File System\u001b[0m...\r\n[ 2.237190] systemd[1]: Starting Create list of static device nodes for the current kernel...\r\n Starting \u001b[0;1;39mCreate list of st…odes for the current kernel\u001b[0m...\r\n[ 2.249105] systemd[1]: Starting Load Kernel Module configfs...\r\n Starting \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m...\r\n[ 2.261132] systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\n[ 2.273083] systemd[1]: Starting Load Kernel Module fuse...\r\n Starting \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m...\r\n[ 2.283707] fuse: init (API version 7.32)\r\n[ 2.284971] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\r\n[ 2.286266] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\r\n[ 2.288806] systemd[1]: Starting Journal Service...\r\n Starting \u001b[0;1;39mJournal Service\u001b[0m...\r\n[ 2.301746] systemd[1]: Starting Load Kernel Modules...\r\n Starting \u001b[0;1;39mLoad Kernel Modules\u001b[0m...\r\n[ 2.313052] systemd[1]: Starting Remount Root and Kernel File Systems...\r\n Starting \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m...\r\n[ 2.317162] systemd[1]: Starting Coldplug All udev Devices...\r\n Starting \u001b[0;1;39mColdplug All udev Devices\u001b[0m...\r\n[ 2.322305] systemd[1]: Mounted Huge Pages File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mHuge Pages File System\u001b[0m.\r\n[ 2.335757] systemd[1]: Mounted POSIX Message Queue File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m.\r\n[ 2.338494] systemd[1]: Mounted Kernel Debug File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Debug File System\u001b[0m.\r\n[ 2.348486] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\r\n[ 2.353065] systemd[1]: Mounted Kernel Trace File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Trace File System\u001b[0m.\r\n[ 2.364540] systemd[1]: Started Journal Service.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mJournal Service\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate list of st… nodes for the current kernel\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Modules\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m.\r\n Mounting \u001b[0;1;39mFUSE Control File System\u001b[0m...\r\n Mounting \u001b[0;1;39mKernel Configuration File System\u001b[0m...\r\n Starting \u001b[0;1;39mGrow File System on /\u001b[0m...\r\n Starting \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m...\r\n[ 2.488722] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\r\n Starting \u001b[0;1;39mLoad/Save Random Seed\u001b[0m...\r\n Starting \u001b[0;1;39mApply Kernel Variables\u001b[0m...\r\n[ 2.510094] systemd-journald[181]: Received client request to flush runtime journal.\r\n Starting \u001b[0;1;39mCreate System Users\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mColdplug All udev Devices\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mFUSE Control File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Configuration File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGrow File System on /\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad/Save Random Seed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mApply Kernel Variables\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate System Users\u001b[0m.\r\n Starting \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems (Pre)\u001b[0m.\r\n Starting \u001b[0;1;39mRule-based Manage…for Device Events and Files\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRule-based Manager for Device Events and Files\u001b[0m.\r\n[ 2.759844] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\n[ 2.784424] ACPI: Power Button [PWRF]\r\n[ 2.785020] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\n[ 2.786165] ACPI: Sleep Button [SLPF]\r\n[ 2.797491] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\n[ 2.818744] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39m/dev/ttyS0\u001b[0m.\r\n[ 2.829489] pstore: Using crash dump compression: deflate\r\n[ 2.830270] pstore: Registered efi as persistent store backend\r\n[ 2.878870] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\n[ 2.916156] cryptd: max_cpu_qlen set to 1000\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mPersistentDisk 15\u001b[0m.\r\n[ 2.945181] AVX2 version of gcm_enc/dec engaged.\r\n[ 2.945881] AES CTR mode by8 optimization enabled\r\n Mounting \u001b[0;1;39m/boot/efi\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39m/boot/efi\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems\u001b[0m.\r\n Starting \u001b[0;1;39mLoad AppArmor profiles\u001b[0m...\r\n Starting \u001b[0;1;39mCommit a transient machine-id on disk\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mVirtio network device\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m.\r\n Starting \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCommit a transient machine-id on disk\u001b[0m.\r\n[ 3.379173] audit: type=1400 audit(1700193828.011:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=292 comm=\"apparmor_parser\"\r\n[ 3.382434] audit: type=1400 audit(1700193828.015:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=292 comm=\"apparmor_parser\"\r\n[ 3.465172] audit: type=1400 audit(1700193828.099:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=293 comm=\"apparmor_parser\"\r\n[ 3.506572] audit: type=1400 audit(1700193828.139:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=294 comm=\"apparmor_parser\"\r\n[ 3.625363] audit: type=1400 audit(1700193828.259:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=295 comm=\"apparmor_parser\"\r\n[ 3.655070] audit: type=1400 audit(1700193828.287:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=296 comm=\"apparmor_parser\"\r\n[ 3.720200] audit: type=1400 audit(1700193828.351:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=297 comm=\"apparmor_parser\"\r\n[ 3.723210] audit: type=1400 audit(1700193828.359:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=297 comm=\"apparmor_parser\"\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad AppArmor profiles\u001b[0m[ 3.728049] audit: type=1400 audit(1700193828.359:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=297 comm=\"apparmor_parser\"\r\n.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Initialization\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGCE Workload Certificate refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mNSS cache refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily Cleanup of Temporary Directories\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mD-Bus System Message Bus Socket\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mUUID daemon activation socket\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSockets\u001b[0m.\r\n Starting \u001b[0;1;39mResize root filesystem if needed\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mifup for ens4\u001b[0m.\r\n Starting \u001b[0;1;39mRaise network interfaces\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mResize root filesystem if needed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mBasic System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mD-Bus System Message Bus\u001b[0m.\r\n Starting \u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\u001b[0m...\r\n Starting \u001b[0;1;39mSystem Logging Service\u001b[0m...\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSystem Logging Service\u001b[0m.\r\nNov 17 04:03:48 debian kernel: [ 0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\r\nNov 17 04:03:48 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-provided physical RAM map:\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\r\nNov 17 04:03:48 debian kernel: [ 0.000000] printk: bootconsole [earlyser0] enabled\r\nNov 17 04:03:48 debian kernel: [ 0.000000] NX (Execute Disable) protection: active\r\nNov 17 04:03:48 debian kernel: [ 0.000000] efi: EFI v2.70 by EDK II\r\nNov 17 04:03:48 debian kernel: [ 0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \r\nNov 17 04:03:48 debian kernel: [ 0.000000] secureboot: Secure boot disabled\r\nNov 17 04:03:48 debian kernel: [ 0.000000] SMBIOS 2.4 present.\r\nNov 17 04:03:48 debian kernel: [ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\r\nNov 17 04:03:48 debian kernel: [ 0.000000] Hypervisor detected: KVM\r\nNov 17 04:03:48 debian kernel: [ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\nNov 17 04:03:48 debian kernel: [ 0.000000] kvm-clock: cpu 0, msr 11601001, primary cpu clock\r\nNov 17 04:03:48 debian kernel: [ 0.000000] kvm-clock: using sched offset of 6574541159 cycles\r\nNov 17 04:03:48 debian kernel: [ 0.000750] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\nNov 17 04:03:48 debian kernel: [ 0.003137] tsc: Detected 2200.170 MHz processor\r\nNov 17 04:03:48 debian kernel: [ 0.003934] e820: update [mem 0x00000000-0x00000fff] usable ==\u003e reserved\r\nNov 17 04:03:48 debian kernel: [ 0.003937] e820: remove [mem 0x000a0000-0x000fffff] usable\r\nNov 17 04:03:48 debian kernel: [ 0.003944] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\r\nNov 17 04:03:48 debian kernel: [ 0.004733] MTRR default type: write-back\r\nNov 17 04:03:48 debian kernel: [ 0.004734] MTRR fixed ranges enabled:\r\nNov 17 04:03:48 debian kernel: [ 0.004736] 00000-9FFFF write-back\r\nNov 17 04:03:48 debian kernel: [ 0.004737] A0000-FFFFF uncachable\r\nNov 17 04:03:48 debian kernel: [ 0.004738] MTRR variable ranges enabled:\r\nNov 17 04:03:48 debian kernel: [ 0.004740] 0 base 000080000000 mask 3FFF80000000 uncachable\r\nNov 17 04:03:48 debian kernel: [ 0.004741] 1 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004741] 2 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004742] 3 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004743] 4 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004743] 5 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004744] 6 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004744] 7 disabled\r\nNov 17 04:03:48 debian kernel: [ 0.004756] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nNov 17 04:03:48 debian kernel: [ 0.006413] Using GB pages for direct mapping\r\nNov 17 04:03:48 debian kernel: [ 0.007451] RAMDISK: [mem 0x2327f000-0x24000fff]\r\nNov 17 04:03:48 debian kernel: [ 0.008104] ACPI: Early table checksum verification disabled\r\nNov 17 04:03:48 debian kernel: [ 0.008840] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\r\nNov 17 04:03:48 debian kernel: [ 0.009613] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\nNov 17 04:03:48 debian kernel: [ 0.010705] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.011795] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.013148] ACPI: FACS 0x00000000261F2000 000040\r\nNov 17 04:03:48 debian kernel: [ 0.013789] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\nNov 17 04:03:48 debian kernel: [ 0.015074] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.016308] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.017416] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.018848] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.019981] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\nNov 17 04:03:48 debian kernel: [ 0.021071] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\r\nNov 17 04:03:48 debian kernel: [ 0.021968] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\r\nNov 17 04:03:48 debian kernel: [ 0.022868] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\r\nNov 17 04:03:48 debian kernel: [ 0.024195] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\r\nNov 17 04:03:48 debian kernel: [ 0.025096] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\r\nNov 17 04:03:48 debian kernel: [ 0.026077] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\r\nNov 17 04:03:48 debian kernel: [ 0.026976] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\r\nNov 17 04:03:48 debian kernel: [ 0.028016] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\r\nNov 17 04:03:48 debian kernel: [ 0.028910] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\r\nNov 17 04:03:48 debian kernel: [ 0.029888] ACPI: Local APIC address 0xfee00000\r\nNov 17 04:03:48 debian kernel: [ 0.029920] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\nNov 17 04:03:48 debian kernel: [ 0.030516] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.031283] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\r\nNov 17 04:03:48 debian kernel: [ 0.032201] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\u003e [mem 0x00000000-0x265dffff]\r\nNov 17 04:03:48 debian kernel: [ 0.034082] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\r\nNov 17 04:03:48 debian kernel: [ 0.035210] Zone ranges:\r\nNov 17 04:03:48 debian kernel: [ 0.035556] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\nNov 17 04:03:48 debian kernel: [ 0.036346] DMA32 [mem 0x0000000001000000-0x00000000265dffff]\r\nNov 17 04:03:48 debian kernel: [ 0.037132] Normal empty\r\nNov 17 04:03:48 debian kernel: [ 0.037500] Device empty\r\nNov 17 04:03:48 debian kernel: [ 0.037865] Movable zone start for each node\r\nNov 17 04:03:48 debian kernel: [ 0.038411] Early memory node ranges\r\nNov 17 04:03:48 debian kernel: [ 0.038866] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\nNov 17 04:03:48 debian kernel: [ 0.039666] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\nNov 17 04:03:48 debian kernel: [ 0.040501] node 0: [mem 0x0000000000100000-0x0000000025eecfff]\r\nNov 17 04:03:48 debian kernel: [ 0.041319] node 0: [mem 0x00000000261ff000-0x00000000265dffff]\r\nNov 17 04:03:48 debian kernel: [ 0.042118] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\r\nNov 17 04:03:48 debian kernel: [ 0.043037] On node 0 totalpages: 156250\r\nNov 17 04:03:48 debian kernel: [ 0.043038] DMA zone: 64 pages used for memmap\r\nNov 17 04:03:48 debian kernel: [ 0.043039] DMA zone: 3121 pages reserved\r\nNov 17 04:03:48 debian kernel: [ 0.043040] DMA zone: 3980 pages, LIFO batch:0\r\nNov 17 04:03:48 debian kernel: [ 0.043042] DMA32 zone: 2392 pages used for memmap\r\nNov 17 04:03:48 debian kernel: [ 0.043042] DMA32 zone: 152270 pages, LIFO batch:31\r\nNov 17 04:03:48 debian kernel: [ 0.043516] On node 0, zone DMA: 1 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.043518] On node 0, zone DMA: 11 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.044348] On node 0, zone DMA: 104 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.046817] On node 0, zone DMA32: 786 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.047679] On node 0, zone DMA32: 6688 pages in unavailable ranges\r\nNov 17 04:03:48 debian kernel: [ 0.048980] ACPI: PM-Timer IO Port: 0xb008\r\nNov 17 04:03:48 debian kernel: [ 0.050430] ACPI: Local APIC address 0xfee00000\r\nNov 17 04:03:48 debian kernel: [ 0.050442] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\nNov 17 04:03:48 debian kernel: [ 0.051354] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\nNov 17 04:03:48 debian kernel: [ 0.052270] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\nNov 17 04:03:48 debian kernel: [ 0.053112] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\nNov 17 04:03:48 debian kernel: [ 0.054025] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\nNov 17 04:03:48 debian kernel: [ 0.054888] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\nNov 17 04:03:48 debian kernel: [ 0.055759] ACPI: IRQ5 used by override.\r\nNov 17 04:03:48 debian kernel: [ 0.055760] ACPI: IRQ9 used by override.\r\nNov 17 04:03:48 debian kernel: [ 0.055761] ACPI: IRQ10 used by override.\r\nNov 17 04:03:48 debian kernel: [ 0.055762] ACPI: IRQ11 used by override.\r\nNov 17 04:03:48 debian kernel: [ 0.055764] Using ACPI (MADT) for SMP configuration information\r\nNov 17 04:03:48 debian kernel: [ 0.056581] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\r\nNov 17 04:03:48 debian kernel: [ 0.057278] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\nNov 17 04:03:48 debian kernel: [ 0.058289] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.059254] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.060218] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\nNov 17 04:03:48 debian kernel: [ 0.061186] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\r\nNov 17 04:03:48 debian kernel: [ 0.062153] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\r\nNov 17 04:03:48 debian kernel: [ 0.063119] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\r\nNov 17 04:03:48 debian kernel: [ 0.064086] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\r\nNov 17 04:03:48 debian kernel: [ 0.065051] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\r\nNov 17 04:03:48 debian kernel: [ 0.066343] [mem 0x26600000-0xffffffff] available for PCI devices\r\nNov 17 04:03:48 debian kernel: [ 0.067140] Booting paravirtualized kernel on KVM\r\nNov 17 04:03:48 debian kernel: [ 0.067740] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\nNov 17 04:03:48 debian kernel: [ 0.073455] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\r\nNov 17 04:03:48 debian kernel: [ 0.075118] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\r\nNov 17 04:03:48 debian kernel: [ 0.076040] pcpu-alloc: s221184 r8192 d28672 u2097152 alloc=1*2097152\r\nNov 17 04:03:48 debian kernel: [ 0.076042] pcpu-alloc: [0] 0 \r\nNov 17 04:03:48 debian kernel: [ 0.076074] kvm-guest: PV spinlocks disabled, single CPU\r\nNov 17 04:03:48 debian kernel: [ 0.076805] Built 1 zonelists, mobility grouping on. Total pages: 150673\r\nNov 17 04:03:48 debian kernel: [ 0.077803] Policy zone: DMA32\r\nNov 17 04:03:48 debian kernel: [ 0.078192] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nNov 17 04:03:48 debian kernel: [ 0.080817] DMAR: IOMMU disabled\r\nNov 17 04:03:48 debian kernel: [ 0.081474] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.082690] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.083743] mem auto-init: stack:off, heap alloc:on, heap free:off\r\nNov 17 04:03:48 debian kernel: [ 0.087100] Memory: 233576K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\r\nNov 17 04:03:48 debian kernel: [ 0.089122] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\r\nNov 17 04:03:48 debian kernel: [ 0.090012] Kernel/User page tables isolation: enabled\r\nNov 17 04:03:48 debian kernel: [ 0.091151] ftrace: allocating 33918 entries in 133 pages\r\nNov 17 04:03:48 debian kernel: [ 0.111503] ftrace: allocated 133 pages with 3 groups\r\nNov 17 04:03:48 debian kernel: [ 0.112765] rcu: Hierarchical RCU implementation.\r\nNov 17 04:03:48 debian kernel: [ 0.113378] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\r\nNov 17 04:03:48 debian kernel: [ 0.114278] \tRude variant of Tasks RCU enabled.\r\nNov 17 04:03:48 debian kernel: [ 0.114855] \tTracing variant of Tasks RCU enabled.\r\nNov 17 04:03:48 debian kernel: [ 0.115469] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\nNov 17 04:03:48 debian kernel: [ 0.116433] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\r\nNov 17 04:03:48 debian kernel: [ 0.121697] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\r\nNov 17 04:03:48 debian kernel: [ 0.122810] random: crng init done\r\nNov 17 04:03:48 debian kernel: [ 0.123274] Console: colour dummy device 80x25\r\nNov 17 04:03:48 debian kernel: [ 0.124053] printk: console [tty0] enabled\r\nNov 17 04:03:48 debian kernel: [ 0.124835] printk: console [ttyS0] enabled\r\nNov 17 04:03:48 debian kernel: [ 0.126039] printk: bootconsole [earlyser0] disabled\r\nNov 17 04:03:48 debian kernel: [ 0.127441] ACPI: Core revision 20200925\r\nNov 17 04:03:48 debian kernel: [ 0.128098] APIC: Switch to symmetric I/O mode setup\r\nNov 17 04:03:48 debian kernel: [ 0.129244] x2apic enabled\r\nNov 17 04:03:48 debian kernel: [ 0.131960] Switched APIC routing to physical x2apic.\r\nNov 17 04:03:48 debian kernel: [ 0.136632] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\nNov 17 04:03:48 debian kernel: [ 0.137712] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\r\nNov 17 04:03:48 debian kernel: [ 0.139157] Calibrating delay loop (skipped) preset value.. 4400.34 BogoMIPS (lpj=8800680)\r\nNov 17 04:03:48 debian kernel: [ 0.143263] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\nNov 17 04:03:48 debian kernel: [ 0.144056] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\nNov 17 04:03:48 debian kernel: [ 0.144991] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\nNov 17 04:03:48 debian kernel: [ 0.146142] Spectre V2 : Mitigation: IBRS\r\nNov 17 04:03:48 debian kernel: [ 0.146695] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\nNov 17 04:03:48 debian kernel: [ 0.147156] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\nNov 17 04:03:48 debian kernel: [ 0.148095] RETBleed: Mitigation: IBRS\r\nNov 17 04:03:48 debian kernel: [ 0.148658] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\nNov 17 04:03:48 debian kernel: [ 0.149882] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\nNov 17 04:03:48 debian kernel: [ 0.151163] MDS: Mitigation: Clear CPU buffers\r\nNov 17 04:03:48 debian kernel: [ 0.151804] TAA: Mitigation: Clear CPU buffers\r\nNov 17 04:03:48 debian kernel: [ 0.152445] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\nNov 17 04:03:48 debian kernel: [ 0.153624] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\nNov 17 04:03:48 debian kernel: [ 0.155158] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\nNov 17 04:03:48 debian kernel: [ 0.156050] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\nNov 17 04:03:48 debian kernel: [ 0.156905] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\nNov 17 04:03:48 debian kernel: [ 0.157851] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\nNov 17 04:03:48 debian kernel: [ 0.177428] Freeing SMP alternatives memory: 32K\r\nNov 17 04:03:48 debian kernel: [ 0.179890] pid_max: default: 32768 minimum: 301\r\nNov 17 04:03:48 debian kernel: [ 0.188030] LSM: Security Framework initializing\r\nNov 17 04:03:48 debian kernel: [ 0.188748] Yama: disabled by default; enable with sysctl kernel.yama.*\r\nNov 17 04:03:48 debian kernel: [ 0.189713] AppArmor: AppArmor initialized\r\nNov 17 04:03:48 debian kernel: [ 0.190294] TOMOYO Linux initialized\r\nNov 17 04:03:48 debian kernel: [ 0.190806] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.191158] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.301178] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\nNov 17 04:03:48 debian kernel: [ 0.303030] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\nNov 17 04:03:48 debian kernel: [ 0.303154] rcu: Hierarchical SRCU implementation.\r\nNov 17 04:03:48 debian kernel: [ 0.303232] NMI watchdog: Perf NMI watchdog permanently disabled\r\nNov 17 04:03:48 debian kernel: [ 0.304156] smp: Bringing up secondary CPUs ...\r\nNov 17 04:03:48 debian kernel: [ 0.304775] smp: Brought up 1 node, 1 CPU\r\nNov 17 04:03:48 debian kernel: [ 0.305377] smpboot: Max logical packages: 1\r\nNov 17 04:03:48 debian kernel: [ 0.305973] smpboot: Total of 1 processors activated (4400.34 BogoMIPS)\r\nNov 17 04:03:48 debian kernel: [ 0.308500] node 0 deferred pages initialised in 4ms\r\nNov 17 04:03:48 debian kernel: [ 0.309336] devtmpfs: initialized\r\nNov 17 04:03:48 debian kernel: [ 0.309853] x86/mm: Memory block size: 128MB\r\nNov 17 04:03:48 debian kernel: [ 0.310586] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\r\nNov 17 04:03:48 debian kernel: [ 0.311201] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\nNov 17 04:03:48 debian kernel: [ 0.312491] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.313553] NET: Registered protocol family 16\r\nNov 17 04:03:48 debian kernel: [ 0.314323] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\r\nNov 17 04:03:48 debian kernel: [ 0.315262] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\nNov 17 04:03:48 debian kernel: [ 0.316351] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\nNov 17 04:03:48 debian kernel: [ 0.317444] aud[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\nit: initializing netlink subsys (disabled)\r\nNov 17 04:03:48 debian kernel: [ 0.318358] thermal_sys: Registered thermal governor 'fair_share'\r\nNov 17 04:03:48 debian kernel: [ 0.318358] thermal_sys: Registered thermal governor 'bang_bang'\r\nNov 17 04:03:48 debian kernel: [ 0.319159] thermal_sys: Registered thermal governor 'step_wise'\r\nNov 17 04:03:48 debian kernel: [ 0.319988] thermal_sys: Registered thermal governor 'user_space'\r\nNov 17 04:03:48 debian kernel: [ 0.320815] thermal_sys: Registered thermal governor 'power_allocator'\r\nNov 17 04:03:48 debian kernel: [ 0.321635] cpuidle: using governor ladder\r\nNov 17 04:03:48 debian kernel: [ 0.323161] audit: type=2000 audit(1700193824.940:1): state=initialized audit_enabled=0 res=1\r\nNov 17 04:03:48 debian kernel: [ 0.324328] cpuidle: using governor menu\r\nNov 17 04:03:48 debian kernel: [ 0.324906] ACPI: bus type PCI registered\r\nNov 17 04:03:48 debian kernel: [ 0.325460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\nNov 17 04:03:48 debian kernel: [ 0.326421] PCI: Using configuration type 1 for base access\r\nNov 17 04:03:48 debian kernel: [ 0.327802] Kprobes globally optimized\r\nNov 17 04:03:48 debian kernel: [ 0.328452] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\nNov 17 04:03:48 debian kernel: [ 0.329351] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\nNov 17 04:03:48 debian kernel: [ 0.457287] ACPI: Added _OSI(Module Device)\r\nNov 17 04:03:48 debian kernel: [ 0.457914] ACPI: Added _OSI(Processor Device)\r\nNov 17 04:03:48 debian kernel: [ 0.458520] ACPI: Added _OSI(3.0 _SCP Extensions)\r\nNov 17 04:03:48 debian kernel: [ 0.459158] ACPI: Added _OSI(Processor Aggregator Device)\r\nNov 17 04:03:48 debian kernel: [ 0.460010] ACPI: Added _OSI(Linux-Dell-Video)\r\nNov 17 04:03:48 debian kernel: [ 0.460629] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\nNov 17 04:03:48 debian kernel: [ 0.461348] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\nNov 17 04:03:48 debian kernel: [ 0.462989] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\nNov 17 04:03:48 debian kernel: [ 0.464105] ACPI: Interpreter enabled\r\nNov 17 04:03:48 debian kernel: [ 0.464646] ACPI: (supports S0 S3 S4 S5)\r\nNov 17 04:03:48 debian kernel: [ 0.465207] ACPI: Using IOAPIC for interrupt routing\r\nNov 17 04:03:48 debian kernel: [ 0.465937] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\nNov 17 04:03:48 debian kernel: [ 0.467351] ACPI: Enabled 16 GPEs in block 00 to 0F\r\nNov 17 04:03:48 debian kernel: [ 0.469893] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\nNov 17 04:03:48 debian kernel: [ 0.471179] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\nNov 17 04:03:48 debian kernel: [ 0.472279] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\nNov 17 04:03:48 debian kernel: [ 0.474395] PCI host bridge to bus 0000:00\r\nNov 17 04:03:48 debian kernel: [ 0.475161] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\nNov 17 04:03:48 debian kernel: [ 0.476080] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\nNov 17 04:03:48 debian kernel: [ 0.476988] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\nNov 17 04:03:48 debian kernel: [ 0.478071] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\r\nNov 17 04:03:48 debian kernel: [ 0.479156] pci_bus 0000:00: root bus resource [bus 00-ff]\r\nNov 17 04:03:48 debian kernel: [ 0.479955] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\nNov 17 04:03:48 debian kernel: [ 0.483516] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\nNov 17 04:03:48 debian kernel: [ 0.497205] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\nNov 17 04:03:48 debian kernel: [ 0.510756] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\nNov 17 04:03:48 debian kernel: [ 0.511429] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\nNov 17 04:03:48 debian kernel: [ 0.518345] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\nNov 17 04:03:48 debian kernel: [ 0.523157] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\r\nNov 17 04:03:48 debian kernel: [ 0.534975] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\nNov 17 04:03:48 debian kernel: [ 0.540789] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\nNov 17 04:03:48 debian kernel: [ 0.544833] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\r\nNov 17 04:03:48 debian kernel: [ 0.555412] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\r\nNov 17 04:03:48 debian kernel: [ 0.560805] pci 0000:00:05.0: reg 0x10: [io 0xc080-0xc09f]\r\nNov 17 04:03:48 debian kernel: [ 0.564625] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\r\nNov 17 04:03:48 debian kernel: [ 0.575564] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\nNov 17 04:03:48 debian kernel: [ 0.577286] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\nNov 17 04:03:48 debian kernel: [ 0.578886] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\nNov 17 04:03:48 debian kernel: [ 0.579915] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\nNov 17 04:03:48 debian kernel: [ 0.583168] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\nNov 17 04:03:48 debian kernel: [ 0.584105] iommu: Default domain type: Translated \r\nNov 17 04:03:48 debian kernel: [ 0.584854] vgaarb: loaded\r\nNov 17 04:03:48 debian kernel: [ 0.585334] Registered efivars operations\r\nNov 17 04:03:48 debian kernel: [ 0.586084] NetLabel: Initializing\r\nNov 17 04:03:48 debian kernel: [ 0.587156] NetLabel: domain hash size = 128\r\nNov 17 04:03:48 debian kernel: [ 0.587827] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\nNov 17 04:03:48 debian kernel: [ 0.588621] NetLabel: unlabeled traffic allowed by default\r\nNov 17 04:03:48 debian kernel: [ 0.589415] PCI: Using ACPI for IRQ routing\r\nNov 17 04:03:48 debian kernel: [ 0.590046] PCI: pci_cache_line_size set to 64 bytes\r\nNov 17 04:03:48 debian kernel: [ 0.590141] e820: reserve RAM buffer [mem 0x00055000-0x0005ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.590142] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\r\nNov 17 04:03:48 debian kernel: [ 0.590143] e820: reserve RAM buffer [mem 0x25eed000-0x27ffffff]\r\nNov 17 04:03:48 debian kernel: [ 0.590144] e820: reserve RAM buffer [mem 0x265e0000-0x27ffffff]\r\nNov 17 04:03:48 debian kernel: [ 0.590183] clocksource: Switched to clocksource kvm-clock\r\nNov 17 04:03:48 debian kernel: [ 0.599324] VFS: Disk quotas dquot_6.6.0\r\nNov 17 04:03:48 debian kernel: [ 0.599916] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\nNov 17 04:03:48 debian kernel: [ 0.601024] AppArmor: AppArmor Filesystem Enabled\r\nNov 17 04:03:48 debian kernel: [ 0.601786] pnp: PnP ACPI init\r\nNov 17 04:03:48 debian kernel: [ 0.602302] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602352] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602384] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602421] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602449] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602480] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602511] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:48 debian kernel: [ 0.602662] pnp: PnP ACPI: found 7 devices\r\nNov 17 04:03:48 debian kernel: [ 0.608541] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\nNov 17 04:03:48 debian kernel: [ 0.609795] NET: Registered protocol family 2\r\nNov 17 04:03:48 debian kernel: [ 0.610436] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.612665] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.613850] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.614940] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.615983] TCP: Hash tables configured (established 8192 bind 8192)\r\nNov 17 04:03:48 debian kernel: [ 0.616945] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.617844] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:48 debian kernel: [ 0.618844] NET: Registered protocol family 1\r\nNov 17 04:03:48 debian kernel: [ 0.619629] NET: Registered protocol family 44\r\nNov 17 04:03:48 debian kernel: [ 0.620246] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\nNov 17 04:03:48 debian kernel: [ 0.621100] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\nNov 17 04:03:48 debian kernel: [ 0.621946] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\nNov 17 04:03:48 debian kernel: [ 0.622980] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\r\nNov 17 04:03:48 debian kernel: [ 0.624039] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\nNov 17 04:03:48 debian kernel: [ 0.624898] PCI: CLS 0 bytes, default 64\r\nNov 17 04:03:48 debian kernel: [ 0.625515] Trying to unpack rootfs image as initramfs...\r\nNov 17 04:03:48 debian kernel: [ 0.838263] Freeing initrd memory: 13832K\r\nNov 17 04:03:48 debian kernel: [ 0.838913] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\r\nNov 17 04:03:48 debian kernel: [ 0.840271] clocksource: Switched to clocksource tsc\r\nNov 17 04:03:48 debian kernel: [ 0.841223] Initialise system trusted keyrings\r\nNov 17 04:03:48 debian kernel: [ 0.841875] Key type blacklist registered\r\nNov 17 04:03:48 debian kernel: [ 0.842505] workingset: timestamp_bits=36 max_order=18 bucket_order=0\r\nNov 17 04:03:48 debian kernel: [ 0.844293] zbud: loaded\r\nNov 17 04:03:48 debian kernel: [ 0.844973] Key type asymmetric registered\r\nNov 17 04:03:48 debian kernel: [ 0.845539] Asymmetric key parser 'x509' registered\r\nNov 17 04:03:48 debian kernel: [ 0.846222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\nNov 17 04:03:48 debian kernel: [ 0.847278] io scheduler mq-deadline registered\r\nNov 17 04:03:48 debian kernel: [ 0.848485] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\nNov 17 04:03:48 debian kernel: [ 0.849463] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\nNov 17 04:03:48 debian kernel: [ 0.850740] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\nNov 17 04:03:48 debian kernel: [ 0.851965] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\nNov 17 04:03:48 debian kernel: [ 0.853164] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\nNov 17 04:03:48 debian kernel: [ 0.854467] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\nNov 17 04:03:48 debian kernel: [ 0.855734] i8042: Warning: Keylock active\r\nNov 17 04:03:48 debian kernel: [ 0.857698] serio: i8042 KBD port at 0x60,0x64 irq 1\r\nNov 17 04:03:48 debian kernel: [ 0.858391] serio: i8042 AUX port at 0x60,0x64 irq 12\r\nNov 17 04:03:48 debian kernel: [ 0.859206] rtc_cmos 00:00: RTC can wake from S4\r\nNov 17 04:03:48 debian kernel: [ 0.860615] rtc_cmos 00:00: registered as rtc0\r\nNov 17 04:03:48 debian kernel: [ 0.861428] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:45 UTC (1700193825)\r\nNov 17 04:03:48 debian kernel: [ 0.862619] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\nNov 17 04:03:48 debian kernel: [ 0.863495] intel_pstate: CPU model not supported\r\nNov 17 04:03:48 debian kernel: [ 0.864350] NET: Registered protocol family 10\r\nNov 17 04:03:48 debian kernel: [ 0.872101] Segment Routing with IPv6\r\nNov 17 04:03:48 debian kernel: [ 0.872671] mip6: Mobile IPv6\r\nNov 17 04:03:48 debian kernel: [ 0.873091] NET: Registered protocol family 17\r\nNov 17 04:03:48 debian kernel: [ 0.873814] IPI shorthand broadcast: enabled\r\nNov 17 04:03:48 debian kernel: [ 0.874454] sched_clock: Marking stable (864288966, 8353340)-\u003e(874836097, -2193791)\r\nNov 17 04:03:48 debian kernel: [ 0.875588] registered taskstats version 1\r\nNov 17 04:03:48 debian kernel: [ 0.876158] Loading compiled-in X.509 certificates\r\nNov 17 04:03:48 debian kernel: [ 0.908877] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\nNov 17 04:03:48 debian kernel: [ 0.910478] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\nNov 17 04:03:48 debian kernel: [ 0.911923] Key type .fscrypt registered\r\nNov 17 04:03:48 debian kernel: [ 0.912517] Key type fscrypt-provisioning registered\r\nNov 17 04:03:48 debian kernel: [ 0.913253] AppArmor: AppArmor sha1 policy hashing enabled\r\nNov 17 04:03:48 debian kernel: [ 0.915720] Freeing unused decrypted memory: 2036K\r\nNov 17 04:03:48 debian kernel: [ 0.917013] Freeing unused kernel image (initmem) memory: 2468K\r\nNov 17 04:03:48 debian kernel: [ [\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\u001b[0m.\r\n0.924384] Write protecting the kernel read-only data: 22528k\r\nNov 17 04:03:48 debian kernel: [ 0.925931] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\nNov 17 04:03:48 debian kernel: [ 0.927194] Freeing unused kernel image (rodata/data gap) memory: 1236K\r\nNov 17 04:03:48 debian kernel: [ 0.928659] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nNov 17 04:03:48 debian kernel: [ 0.929536] x86/mm: Checking user space page tables\r\nNov 17 04:03:48 debian kernel: [ 0.930357] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nNov 17 04:03:48 debian kernel: [ 0.931248] Run /init as init process\r\nNov 17 04:03:48 debian kernel: [ 0.931826] with arguments:\r\nNov 17 04:03:48 debian kernel: [ 0.931827] /init\r\nNov 17 04:03:48 debian kernel: [ 0.931827] with environment:\r\nNov 17 04:03:48 debian kernel: [ 0.931828] HOME=/\r\nNov 17 04:03:48 debian kernel: [ 0.931829] TERM=linux\r\nNov 17 04:03:48 debian kernel: [ 0.931829] BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64\r\nNov 17 04:03:48 debian kernel: [ 0.931830] intel_iommu=off\r\nNov 17 04:03:48 debian kernel: [ 0.999458] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\nNov 17 04:03:48 debian kernel: [ 1.000238] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:48 debian kernel: [ 1.026601] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\nNov 17 04:03:48 debian kernel: [ 1.027444] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:48 debian kernel: [ 1.031920] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\nNov 17 04:03:48 debian kernel: [ 1.032814] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:48 debian kernel: [ 1.054934] SCSI subsystem initialized\r\nNov 17 04:03:48 debian kernel: [ 1.061158] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\nNov 17 04:03:48 debian kernel: [ 1.075892] virtio_net virtio1 ens4: renamed from eth0\r\nNov 17 04:03:48 debian kernel: [ 1.085896] scsi host0: Virtio SCSI HBA\r\nNov 17 04:03:48 debian kernel: [ 1.091740] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\nNov 17 04:03:48 debian kernel: [ 1.111855] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\r\nNov 17 04:03:48 debian kernel: [ 1.112925] sd 0:0:1:0: [sda] 4096-byte physical blocks\r\nNov 17 04:03:48 debian kernel: [ 1.113940] sd 0:0:1:0: [sda] Write Protect is off\r\nNov 17 04:03:48 debian kernel: [ 1.114612] sd 0:0:1:0: [sda] Mode Sense: 1f 00 00 08\r\nNov 17 04:03:48 debian kernel: [ 1.114657] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\nNov 17 04:03:48 debian kernel: [ 1.118523] sda: sda1 sda14 sda15\r\nNov 17 04:03:48 debian kernel: [ 1.126791] sd 0:0:1:0: [sda] Attached SCSI disk\r\nNov 17 04:03:48 debian kernel: [ 1.176849] sda: sda1 sda14 sda15\r\nNov 17 04:03:48 debian kernel: [ 1.254250] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\r\nNov 17 04:03:48 debian kernel: [ 1.277595] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\nNov 17 04:03:48 debian kernel: [ 2.283707] fuse: init (API version 7.32)\r\nNov 17 04:03:48 debian kernel: [ 2.348486] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\r\nNov 17 04:03:48 debian kernel: [ 2.488722] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\r\nNov 17 04:03:48 debian kernel: [ 2.759844] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\nNov 17 04:03:48 debian kernel: [ 2.784424] ACPI: Power Button [PWRF]\r\nNov 17 04:03:48 debian kernel: [ 2.785020] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\nNov 17 04:03:48 debian kernel: [ 2.786165] ACPI: Sleep Button [SLPF]\r\nNov 17 04:03:48 debian kernel: [ 2.797491] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\nNov 17 04:03:48 debian kernel: [ 2.818744] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\nNov 17 04:03:48 debian kernel: [ 2.829489] pstore: Using crash dump compression: deflate\r\nNov 17 04:03:48 debian kernel: [ 2.830270] pstore: Registered efi as persistent store backend\r\nNov 17 04:03:48 debian kernel: [ 2.878870] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\nNov 17 04:03:48 debian kernel: [ 2.916156] cryptd: max_cpu_qlen set to 1000\r\nNov 17 04:03:48 debian kernel: [ 2.945181] AVX2 version of gcm_enc/dec engaged.\r\nNov 17 04:03:48 debian kernel: [ 2.945881] AES CTR mode by8 optimization enabled\r\nNov 17 04:03:48 debian kernel: [ 3.379173] audit: type=1400 audit(1700193828.011:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=292 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.382434] audit: type=1400 audit(1700193828.015:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=292 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.465172] audit: type=1400 audit(1700193828.099:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=293 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.506572] audit: type=1400 audit(1700193828.139:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=294 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.625363] audit: type=1400 audit(1700193828.259:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=295 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.655070] audit: type=1400 audit(1700193828.287:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=296 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.720200] audit: type=1400 audit(1700193828.351:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.723210] audit: type=1400 audit(1700193828.359:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian kernel: [ 3.728049] audit: type=1400 audit(1700193828.359:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:48 debian systemd[1]: Finished Create list of static device nodes for the current kernel.\r\nNov 17 04:03:48 debian systemd[1]: modprobe@configfs.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module configfs.\r\nNov 17 04:03:48 debian systemd[1]: modprobe@drm.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module drm.\r\nNov 17 04:03:48 debian systemd[1]: modprobe@fuse.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module fuse.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Modules.\r\nNov 17 04:03:48 debian systemd[1]: Finished Remount Root and Kernel File Systems.\r\nNov 17 04:03:48 debian systemd[1]: Mounting FUSE Control File System...\r\nNov 17 04:03:48 debian systemd[1]: Mounting Kernel Configuration File System...\r\nNov 17 04:03:48 debian systemd[1]: Starting Grow File System on /...\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting Flush Journal to Persistent Storage...\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting Load/Save Random Seed...\r\nNov 17 04:03:48 debian systemd-growfs[189]: Successfully resized \"/\" to 9.8G bytes (3584 bytes lost due to blocksize).\r\nNov 17 04:03:48 debian systemd[1]: Starting Apply Kernel Variables...\r\nNov 17 04:03:48 debian systemd[1]: Starting Create System Users...\r\nNov 17 04:03:48 debian systemd[1]: Finished Coldplug All udev Devices.\r\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating group systemd-timesync with gid 999.\r\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating user systemd-timesync (systemd Time Synchronization) with uid 999 and gid 999.\r\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating group systemd-coredump with gid 998.\r\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating user systemd-coredump (systemd Core Dumper) with uid 998 and gid 998.\r\nNov 17 04:03:48 debian systemd[1]: Mounted FUSE Control File System.\r\nNov 17 04:03:48 debian systemd[1]: Mounted Kernel Configuration File System.\r\nNov 17 04:03:48 debian systemd[1]: Finished Grow File System on /.\r\nNov 17 04:03:48 debian systemd[1]: Finished Flush Journal to Persistent Storage.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load/Save Random Seed.\r\nNov 17 04:03:48 debian systemd[1]: Finished Apply Kernel Variables.\r\nNov 17 04:03:48 debian systemd[1]: Finished Create System Users.\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in First Boot Complete being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting Helper to synchronize boot up for ifupdown...\r\nNov 17 04:03:48 debian systemd[1]: Starting Create Static Device Nodes in /dev...\r\nNov 17 04:03:48 debian systemd[1]: Finished Helper to synchronize boot up for ifupdown.\r\nNov 17 04:03:48 debian systemd[1]: Finished Create Static Device Nodes in /dev.\r\nNov 17 04:03:48 debian systemd[1]: Reached target Local File Systems (Pre).\r\nNov 17 04:03:48 debian systemd[1]: Starting Rule-based Manager for Device Events and Files...\r\nNov 17 04:03:48 debian systemd[1]: Started Rule-based Manager for Device Events and Files.\r\nNov 17 04:03:48 debian systemd-udevd[201]: Using default interface naming scheme 'v247'.\r\nNov 17 04:03:48 debian systemd-udevd[201]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nNov 17 04:03:48 debian systemd[1]: Found device /dev/ttyS0.\r\nNov 17 04:03:48 debian systemd-udevd[199]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nNov 17 04:03:48 debian systemd[1]: Found device PersistentDisk 15.\r\nNov 17 04:03:48 debian systemd[1]: Mounting /boot/efi...\r\nNov 17 04:03:48 debian cloud-ifupdown-helper: Generated configuration for ens4\r\nNov 17 04:03:48 debian systemd[1]: Mounted /boot/efi.\r\nNov 17 04:03:48 debian systemd[1]: Reached target Local File Systems.\r\nNov 17 04:03:48 debian systemd[1]: Starting Load AppArmor profiles...\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting Commit a transient machine-id on disk...\r\nNov 17 04:03:48 debian systemd[1]: Starting Create Volatile Files and Directories...\r\nNov 17 04:03:48 debian systemd[1]: Found device Virtio network device.\r\nNov 17 04:03:48 debian apparmor.systemd[265]: Restarting AppArmor\r\nNov 17 04:03:48 debian apparmor.systemd[265]: Reloading AppArmor profiles\r\nNov 17 04:03:48 debian systemd[1]: Finished Create Volatile Files and Directories.\r\nNov 17 04:03:48 debian systemd[1]: Starting Update UTMP about System Boot/Shutdown...\r\nNov 17 04:03:48 debian systemd[1]: Finished Update UTMP about System Boot/Shutdown.\r\nNov 17 04:03:48 debian systemd[1]: etc-machine\\x2did.mount: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Commit a transient machine-id on disk.\r\nNov 17 04:03:48 debian systemd[1]: Finished Load AppArmor profiles.\r\nNov 17 04:03:48 debian systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\r\nNov 17 04:03:48 debian systemd[1]: Reached target System Initialization.\r\nNov 17 04:03:48 debian haveged[298]: haveged: command socket is listening at fd 3\r\nNov 17 04:03:48 debian systemd[1]: Started GCE Workload Certificate refresh timer.\r\nNov 17 04:03:48 debian systemd[1]: Started NSS cache refresh timer.\r\nNov 17 04:03:48 debian systemd[1]: Started Daily Cleanup of Temporary Directories.\r\nNov 17 04:03:48 debian systemd[1]: Listening on D-Bus System Message Bus Socket.\r\nNov 17 04:03:48 debian systemd[1]: Listening on UUID daemon activation socket.\r\nNov 17 04:03:48 debian systemd[1]: Reached target Sockets.\r\nNov 17 04:03:48 debian systemd[1]: Starting Resize root filesystem if needed...\r\nNov 17 04:03:48 debian systemd[1]: Started ifup for ens4.\r\nNov 17 04:03:48 debian google_disk_expand[299]: Checking if filesystem on /dev/sda1 needs resizing\r\nNov 17 04:03:48 debian systemd[1]: Starting Raise network interfaces...\r\nNov 17 04:03:48 debian google_disk_expand[308]: resize2fs 1.46.2 (28-Feb-2021)\r\nNov 17 04:03:48 debian google_disk_expand[308]: The filesystem is already 2588667 (4k) blocks long. Nothing to do!\r\nNov 17 04:03:48 debian google_disk_expand[299]: Done.\r\nNov 17 04:03:48 debian systemd[1]: google-disk-expand.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Resize root filesystem if needed.\r\nNov 17 04:03:48 debian systemd[1]: Reached target Basic System.\r\nNov 17 04:03:48 debian systemd[1]: Started Regular background program processing daemon.\r\nNov 17 04:03:48 debian systemd[1]: Started D-Bus System Message Bus.\r\nNov 17 04:03:48 debian dhclient[321]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:48 debian sh[321]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:48 debian dhclient[321]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:48 debian sh[321]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:48 debian dhclient[321]: All rights reserved.\r\nNov 17 04:03:48 debian sh[321]: All rights reserved.\r\nNov 17 04:03:48 debian dhclient[321]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:48 debian sh[321]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:48 debian dhclient[321]: \r\nNov 17 04:03:48 debian systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\r\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\r\nNov 17 04:03:48 debian systemd[1]: Starting System Logging Service...\r\nNov 17 04:03:48 debian systemd[1]: Starting User Login Management...\r\nNov 17 04:03:48 debian ifup[304]: ifup: waiting for lock on /run/network/ifstate.ens4\r\nNov 17 04:03:48 debian systemd[1]: Started System Logging Service.\r\nNov 17 04:03:48 debian dhclient[321]: Listening on LPF/ens4/42:01:0a:9a:00:0e\r\nNov 17 04:03:48 debian sh[321]: Listening on LPF/ens4/42:01:0a:9a:00:0e\r\nNov 17 04:03:48 debian sh[321]: Sending on LPF/ens4/42:01:0a:9a:00:0e\r\nNov 17 04:03:48 debian sh[321]: Sending on Socket/fallback\r\nNov 17 04:03:48 debian sh[321]: Created duid \"\\000\\001\\000\\001,\\351\\242\\244B\\001\\012\\232\\000\\016\".\r\nNov 17 04:03:48 debian sh[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nNov 17 04:03:48 debian dhclient[321]: Sending on LPF/ens4/42:01:0a:9a:00:0e\r\nNov 17 04:03:48 debian dhclient[321]: Sending on Socket/fallback\r\nNov 17 04:03:48 debian dhclient[321]: Created duid \"\\000\\001\\000\\001,\\351\\242\\244B\\001\\012\\232\\000\\016\".\r\nNov 17 04:03:48 debian dhclient[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nNov 17 04:03:48 debian dhclient[321]: DHCPOFFER of 10.154.0.14 from 169.254.169.254\r\nNov 17 04:03:48 debian sh[321]: DHCPOFFER of 10.154.0.14 from 169.254.169.254\r\nNov 17 04:03:48 debian sh[321]: DHCPREQUEST for 10.154.0.14 on ens4 to 255.255.255.255 port 67\r\nNov 17 04:03:48 debian dhclient[321]: DHCPREQUEST for 10.154.0.14 on ens4 to 255.255.255.255 port 67\r\nNov 17 04:03:48 debian dhclient[321]: DHCPACK of 10.154.0.14 from 169.254.169.254\r\nNov 17 04:03:48 debian sh[321]: DHCPACK of 10.154.0.14 from 169.254.169.254\r\nNov 17 04:03:48 debian systemd[1]: Started User Login Management.\r\nNov 17 04:03:48 debian haveged[298]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\r\nNov 17 04:03:48 debian haveged[298]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\r\nNov 17 04:03:48 debian haveged[298]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B): last entropy estimate 7.99937\r\nNov 17 04:03:48 debian haveged[298]: haveged: fills: 0, generated: 0\r\nNov 17 04:03:48 debian dhclient[321]: bound to 10.154.0.14 -- renewal in 42095 seconds.\r\nNov 17 04:03:48 debian sh[321]: bound to 10.154.0.14 -- renewal in 42095 seconds.\r\nNov 17 04:03:48 debian systemd[1]: e2scrub_reap.service: Succeeded.\r\nNov 17 04:03:48 debian systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\r\nNov 17 04:03:49 debian dhclient[421]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:49 debian sh[421]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:49 debian dhclient[421]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:49 debian sh[421]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:49 debian dhclient[421]: All rights reserved.\r\nNov 17 04:03:49 debian sh[421]: All rights reserved.\r\nNov 17 04:03:49 debian dhclient[421]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:49 debian sh[421]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:49 debian dhclient[421]: \r\nNov 17 04:03:49 debian dhclient[421]: Listening on Socket/ens4\r\nNov 17 04:03:49 debian sh[421]: Listening on Socket/ens4\r\nNov 17 04:03:49 debian sh[421]: Sending on Socket/ens4\r\nNov 17 04:03:49 debian sh[421]: PRC: Soliciting for leases (INIT).\r\nNov 17 04:03:49 debian dhclient[421]: Sending on Socket/ens4\r\nNov 17 04:03:49 debian sh[454]: ens4=ens4\r\nNov 17 04:03:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\n Starting \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m...\r\nNov 17 04:03:49 debian dhclient[421]: XMT: Solicit on ens4, interval 1040ms.\r\nNov 17 04:03:49 debian systemd[1]: Starting NSS cache refresh...\r\n Starting \u001b[0;1;39mNSS cache refresh\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRaise network interfaces\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork is Online\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Raise network interfaces.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Network.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Network is Online.\r\nNov 17 04:03:49 debian systemd[1]: Starting chrony, an NTP client/server...\r\n Starting \u001b[0;1;39mchrony, an NTP client/server\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Guest Agent...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Started Google OSConfig Agent.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle OSConfig Agent\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Shutdown Scripts...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting Permit User Sessions...\r\n Starting \u001b[0;1;39mPermit User Sessions\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Started Unattended Upgrades Shutdown.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUnattended Upgrades Shutdown\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Google Compute Engine Shutdown Scripts.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mPermit User Sessions\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Permit User Sessions.\r\nNov 17 04:03:49 debian systemd[1]: Started Getty on tty1.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGetty on tty1\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Serial Getty on ttyS0.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSerial Getty on ttyS0\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Login Prompts.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLogin Prompts\u001b[0m.\r\nNov 17 04:03:50 debian chronyd[484]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\r\nNov 17 04:03:50 debian google_oslogin_nss_cache[457]: oslogin_cache_refresh[457]: Refreshing passwd entry cache\r\nNov 17 04:03:50 debian chronyd[484]: Loaded seccomp filter\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mchrony, an NTP client/server\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Synchronized\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt download activities\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started chrony, an NTP client/server.\r\nNov 17 04:03:50 debian systemd[1]: Reached target System Time Synchronized.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily apt download activities.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily apt upgrade and clean activities.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt upgrade and clean activities\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily exim4-base housekeeping.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily exim4-base housekeeping\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Discard unused blocks once a week.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDiscard unused blocks once a week\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily rotation of log files.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily rotation of log files\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Started Daily man-db regeneration.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily man-db regeneration\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Reached target Timers.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mTimers\u001b[0m.\r\nNov 17 04:03:50 debian systemd[1]: Starting LSB: exim Mail Transport Agent...\r\n Boot failed: not a bootable disk \n Starting \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m...\r\nNov 17 04:03:50 debian google_oslogin_nss_cache[457]: oslogin_cache_refresh[457]: Refreshing group entry cache\r\nNov 17 04:03:50 debian systemd[1]: google-oslogin-cache.service: Succeeded.\r\nNov 17 04:03:50 debian systemd[1]: Finished NSS cache refresh.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mNSS cache refresh\u001b[0m.\r\nNov 17 04:03:50 debian dhclient[421]: XMT: Solicit on ens4, interval 2030ms.\r\nNov 17 04:03:50 debian exim4[489]: Starting MTA:\r\nNov 17 04:03:50 debian exim4[508]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\r\nNov 17 04:03:51 debian gce_workload_cert_refresh[456]: 2023/11/17 04:03:51: Done\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m.\r\nNov 17 04:03:51 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:03:51 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:03:52 debian google_guest_agent[473]: GCE Agent Started (version 20231115.00)\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m.\r\nNov 17 04:03:52 debian exim4[489]: exim4.\r\nNov 17 04:03:52 debian systemd[1]: Started LSB: exim Mail Transport Agent.\r\nNov 17 04:03:52 debian google_guest_agent[473]: Instance ID changed, running first-boot actions\r\nNov 17 04:03:52 debian OSConfigAgent[474]: 2023-11-17T04:03:52.5997Z OSConfigAgent Info: OSConfig Agent (version 20231010.00-g1) started.\r\nNov 17 04:03:52 debian dhclient[421]: XMT: Solicit on ens4, interval 4070ms.\r\nNov 17 04:03:53 debian google_guest_agent[473]: Starting the scheduler to run jobs\r\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduler - start: []\r\nNov 17 04:03:53 debian google_guest_agent[473]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\r\nNov 17 04:03:53 debian google_guest_agent[473]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started Google Compute Engine Guest Agent.\r\nNov 17 04:03:53 debian systemd[1]: Starting Google Compute Engine Startup Scripts...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Startup Scripts\u001b[0m...\r\nNov 17 04:03:53 debian systemd[1]: Starting OpenBSD Secure Shell server...\r\n No space left on device \n Starting \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m...\r\nNov 17 04:03:53 debian google_guest_agent[473]: Starting the scheduler to run jobs\r\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduling job: telemetryJobID\r\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduling job \"telemetryJobID\" to run at 24.000000 hr interval\r\nNov 17 04:03:53 debian google_guest_agent[473]: Successfully scheduled job telemetryJobID\r\nNov 17 04:03:53 debian google_guest_agent[473]: Invoking job \"telemetryJobID\"\r\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduler - added: [now 2023-11-17 04:03:53.201836482 +0000 UTC entry 1 next 2023-11-18 04:03:53 +0000 UTC]\r\nNov 17 04:03:53 debian dhclient[817]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:53 debian dhclient[817]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:53 debian dhclient[817]: All rights reserved.\r\nNov 17 04:03:53 debian dhclient[817]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:53 debian dhclient[817]: \r\nNov 17 04:03:53 debian dhclient[817]: Listening on Socket/ens4\r\nNov 17 04:03:53 debian dhclient[817]: Sending on Socket/ens4\r\nNov 17 04:03:53 debian dhclient[817]: Created duid \"\\000\\001\\000\\001,\\351\\242\\251B\\001\\012\\232\\000\\016\".\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started OpenBSD Secure Shell server.\r\nNov 17 04:03:53 debian systemd[1]: Stopping User Login Management...\r\n Stopping \u001b[0;1;39mUser Login Management\u001b[0m...\r\nNov 17 04:03:53 debian systemd[1]: systemd-logind.service: Succeeded.\r\nNov 17 04:03:53 debian systemd[1]: Stopped User Login Management.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mUser Login Management\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\nNov 17 04:03:53 debian google_guest_agent[473]: Created google sudoers file\r\nNov 17 04:03:53 debian google_guest_agent[473]: Creating user foo.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: modprobe@drm.service: Succeeded.\r\nNov 17 04:03:53 debian systemd[1]: Finished Load Kernel Module drm.\r\nNov 17 04:03:53 debian systemd[1]: Starting User Login Management...\r\n Authentication refused: bad ownership or modes for directory \n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started User Login Management.\r\nNov 17 04:03:53 debian systemd[1]: Stopping Regular background program processing daemon...\r\n dial tcp 169.254.169.254:80: connect: network is unreachable \n Stopping \u001b[0;1;39mRegular background program processing daemon\u001b[0m...\r\nNov 17 04:03:53 debian systemd[1]: cron.service: Succeeded.\r\nNov 17 04:03:53 debian systemd[1]: Stopped Regular background program processing daemon.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started Regular background program processing daemon.\r\nNov 17 04:03:53 debian google_metadata_script_runner[808]: Starting startup scripts (version dev).\r\nNov 17 04:03:53 debian google_metadata_script_runner[808]: Found startup-script in metadata.\r\nNov 17 04:03:53 debian systemd[1]: Reloading OpenBSD Secure Shell server.\r\nNov 17 04:03:53 debian systemd[1]: google-guest-agent.service: Got notification message from PID 848, but reception only permitted for main PID 473\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: ssh.service: Control process exited, code=killed, status=15/TERM\r\nNov 17 04:03:53 debian systemd[1]: ssh.service: Failed with result 'signal'.\r\nNov 17 04:03:53 debian systemd[1]: Stopped OpenBSD Secure Shell server.\r\nNov 17 04:03:53 debian google_guest_agent[473]: ERROR oslogin.go:158 Error reloading service: Job for ssh.service canceled..\r\nNov 17 04:03:53 debian google_guest_agent[473]: Updating keys for user foo.\r\nNov 17 04:03:53 debian systemd[1]: Starting OpenBSD Secure Shell server...\r\n Corruption of in-memory data detected. Shutting down filesystem \n Starting \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nNov 17 04:03:53 debian systemd[1]: Started OpenBSD Secure Shell server.\r\nNov 17 04:03:54 debian chronyd[484]: Selected source 169.254.169.254 (metadata.google.internal)\r\n\r\r\nDebian GNU/Linux 11 faulty-linux-ssh ttyS0\r\n\r\nfaulty-linux-ssh login: Nov 17 04:03:56 debian dhclient[421]: XMT: Solicit on ens4, interval 8010ms.\r\nNov 17 04:04:04 debian dhclient[421]: XMT: Solicit on ens4, interval 15860ms.\r\nNov 17 04:04:20 debian dhclient[421]: XMT: Solicit on ens4, interval 31990ms.\r\nNov 17 04:04:52 debian dhclient[421]: XMT: Solicit on ens4, interval 62240ms.\r\nNov 17 04:05:55 debian dhclient[421]: XMT: Solicit on ens4, interval 128800ms.\r\nNov 17 04:08:04 debian dhclient[421]: XMT: Solicit on ens4, interval 117650ms.\r\nNov 17 04:10:01 debian dhclient[421]: XMT: Solicit on ens4, interval 127600ms.\r\nNov 17 04:12:09 debian dhclient[421]: XMT: Solicit on ens4, interval 123590ms.\r\nNov 17 04:13:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:13:50 debian gce_workload_cert_refresh[895]: 2023/11/17 04:13:50: Done\r\nNov 17 04:13:50 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:13:50 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:14:13 debian dhclient[421]: XMT: Solicit on ens4, interval 118200ms.\r\nNov 17 04:16:11 debian dhclient[421]: XMT: Solicit on ens4, interval 109360ms.\r\nNov 17 04:18:01 debian dhclient[421]: XMT: Solicit on ens4, interval 128660ms.\r\nNov 17 04:18:45 debian systemd[1]: Starting Cleanup of Temporary Directories...\r\nNov 17 04:18:45 debian systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\r\nNov 17 04:18:45 debian systemd[1]: Finished Cleanup of Temporary Directories.\r\nNov 17 04:20:09 debian dhclient[421]: XMT: Solicit on ens4, interval 115450ms.\r\nNov 17 04:22:05 debian dhclient[421]: XMT: Solicit on ens4, interval 129250ms.\r\nNov 17 04:23:50 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:23:50 debian gce_workload_cert_refresh[910]: 2023/11/17 04:23:50: Done\r\nNov 17 04:23:50 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:23:50 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:24:14 debian dhclient[421]: XMT: Solicit on ens4, interval 124470ms.\r\n", "start": "0", "next": "103446", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh/serialPortOutput" } ================================================ FILE: test-data/gce4/json-dumps/compute-serial-port-output-faulty-windows-ssh.json ================================================ { "kind": "compute#serialPortOutput", "contents": "empty\nempty", "start": "0", "next": "311872", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/faulty-windows-ssh/serialPortOutput" } ================================================ FILE: test-data/gce4/json-dumps/compute-serial-port-output-valid-linux-ssh.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n\r\n\u001b[0m\u001b[30m\u001b[47mWelcome to GRUB!\n\r\n\r\u001b[0m\u001b[37m\u001b[40m\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m\u001b[H\u001b[J\u001b[1;1H\u001b[H\u001b[J\u001b[1;1H\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\n\r\n\r\n\r\n\rLoading Linux 5.10.0-26-cloud-amd64 ...Loading Linux 5.10.0-26-cloud-amd64 ...\n\r\n\rLoading initial ramdisk ...Loading initial ramdisk ...\n\r\n\rerror: no suitable video mode found.\n\rerror: no suitable video mode found.\n\rBooting in blind modeBooting in blind mode\n\r\n\r[ 0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\r\n[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.000000] BIOS-provided physical RAM map:\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\r\n[ 0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\r\n[ 0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\r\n[ 0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\r\n[ 0.000000] printk: bootconsole [earlyser0] enabled\r\n[ 0.000000] NX (Execute Disable) protection: active\r\n[ 0.000000] efi: EFI v2.70 by EDK II\r\n[ 0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \r\n[ 0.000000] secureboot: Secure boot disabled\r\n[ 0.000000] SMBIOS 2.4 present.\r\n[ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\r\n[ 0.000000] Hypervisor detected: KVM\r\n[ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\n[ 0.000000] kvm-clock: cpu 0, msr c201001, primary cpu clock\r\n[ 0.000000] kvm-clock: using sched offset of 6456270974 cycles\r\n[ 0.000734] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\n[ 0.002884] tsc: Detected 2200.158 MHz processor\r\n[ 0.003587] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\r\n[ 0.004363] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nMemory KASLR using RDRAND RDTSC...\r\n[ 0.005841] Using GB pages for direct mapping\r\n[ 0.006760] RAMDISK: [mem 0x2327f000-0x24000fff]\r\n[ 0.007361] ACPI: Early table checksum verification disabled\r\n[ 0.008083] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\r\n[ 0.008863] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\n[ 0.010056] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\n[ 0.011203] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\n[ 0.012333] ACPI: FACS 0x00000000261F2000 000040\r\n[ 0.012966] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\n[ 0.014054] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\n[ 0.015175] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\n[ 0.016277] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\n[ 0.017366] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\n[ 0.018500] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\n[ 0.019702] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\r\n[ 0.020615] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\r\n[ 0.021530] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\r\n[ 0.022454] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\r\n[ 0.023355] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\r\n[ 0.024340] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\r\n[ 0.025411] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\r\n[ 0.026702] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\r\n[ 0.027613] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\r\n[ 0.028637] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\n[ 0.029245] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\n[ 0.030009] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\r\n[ 0.030872] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\u003e [mem 0x00000000-0x265dffff]\r\n[ 0.032225] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\r\n[ 0.033370] Zone ranges:\r\n[ 0.033725] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\n[ 0.034554] DMA32 [mem 0x0000000001000000-0x00000000265dffff]\r\n[ 0.035451] Normal empty\r\n[ 0.035842] Device empty\r\n[ 0.036232] Movable zone start for each node\r\n[ 0.036778] Early memory node ranges\r\n[ 0.037243] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\n[ 0.038094] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\n[ 0.038947] node 0: [mem 0x0000000000100000-0x0000000025eecfff]\r\n[ 0.039805] node 0: [mem 0x00000000261ff000-0x00000000265dffff]\r\n[ 0.040633] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\r\n[ 0.041989] On node 0, zone DMA: 1 pages in unavailable ranges\r\n[ 0.041990] On node 0, zone DMA: 11 pages in unavailable ranges\r\n[ 0.042798] On node 0, zone DMA: 104 pages in unavailable ranges\r\n[ 0.045104] On node 0, zone DMA32: 786 pages in unavailable ranges\r\n[ 0.046017] On node 0, zone DMA32: 6688 pages in unavailable ranges\r\n[ 0.047186] ACPI: PM-Timer IO Port: 0xb008\r\n[ 0.048565] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\n[ 0.049404] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\n[ 0.050293] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\n[ 0.051137] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\n[ 0.051992] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\n[ 0.052890] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\n[ 0.053812] Using ACPI (MADT) for SMP configuration information\r\n[ 0.054586] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\r\n[ 0.055292] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\n[ 0.056302] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\n[ 0.057269] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\n[ 0.058272] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\n[ 0.059273] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\r\n[ 0.060238] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\r\n[ 0.061203] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\r\n[ 0.062169] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\r\n[ 0.063136] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\r\n[ 0.064110] [mem 0x26600000-0xffffffff] available for PCI devices\r\n[ 0.064881] Booting paravirtualized kernel on KVM\r\n[ 0.065481] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\n[ 0.071199] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\r\n[ 0.072527] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\r\n[ 0.073444] kvm-guest: PV spinlocks disabled, single CPU\r\n[ 0.074171] Built 1 zonelists, mobility grouping on. Total pages: 150673\r\n[ 0.075108] Policy zone: DMA32\r\n[ 0.075690] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.078655] DMAR: IOMMU disabled\r\n[ 0.079286] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\n[ 0.080546] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\r\n[ 0.081583] mem auto-init: stack:off, heap alloc:on, heap free:off\r\n[ 0.084292] Memory: 208948K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\r\n[ 0.086299] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\r\n[ 0.087268] Kernel/User page tables isolation: enabled\r\nPoking KASLR using RDRAND RDTSC...\r\n[ 0.088415] ftrace: allocating 33918 entries in 133 pages\r\n[ 0.108935] ftrace: allocated 133 pages with 3 groups\r\n[ 0.110330] rcu: Hierarchical RCU implementation.\r\n[ 0.110974] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\r\n[ 0.111865] \tRude variant of Tasks RCU enabled.\r\n[ 0.112441] \tTracing variant of Tasks RCU enabled.\r\n[ 0.113053] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\n[ 0.114064] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\r\n[ 0.119409] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\r\n[ 0.120483] random: crng init done\r\n[ 0.120945] Console: colour dummy device 80x25\r\n[ 0.121763] printk: console [tty0] enabled\r\n[ 0.122413] printk: console [ttyS0] enabled\r\n[ 0.122413] printk: console [ttyS0] enabled\r\n[ 0.123526] printk: bootconsole [earlyser0] disabled\r\n[ 0.123526] printk: bootconsole [earlyser0] disabled\r\n[ 0.124856] ACPI: Core revision 20200925\r\n[ 0.125499] APIC: Switch to symmetric I/O mode setup\r\n[ 0.126669] x2apic enabled\r\n[ 0.129453] Switched APIC routing to physical x2apic.\r\n[ 0.134129] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\n[ 0.135170] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\r\n[ 0.136571] Calibrating delay loop (skipped) preset value.. 4400.31 BogoMIPS (lpj=8800632)\r\n[ 0.140680] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\n[ 0.141412] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\n[ 0.142247] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\n[ 0.143390] Spectre V2 : Mitigation: IBRS\r\n[ 0.143939] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\n[ 0.144568] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\n[ 0.145466] RETBleed: Mitigation: IBRS\r\n[ 0.145988] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\n[ 0.147108] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\n[ 0.148575] MDS: Mitigation: Clear CPU buffers\r\n[ 0.149183] TAA: Mitigation: Clear CPU buffers\r\n[ 0.149789] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\n[ 0.150817] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\n[ 0.151849] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\n[ 0.152568] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\n[ 0.153445] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\n[ 0.154319] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\n[ 0.174317] Freeing SMP alternatives memory: 32K\r\n[ 0.176616] pid_max: default: 32768 minimum: 301\r\n[ 0.189921] LSM: Security Framework initializing\r\n[ 0.190777] Yama: disabled by default; enable with sysctl kernel.yama.*\r\n[ 0.191718] AppArmor: AppArmor initialized\r\n[ 0.192315] TOMOYO Linux initialized\r\n[ 0.192585] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\n[ 0.193586] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\n[ 0.303707] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\n[ 0.304567] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\n[ 0.304567] rcu: Hierarchical SRCU implementation.\r\n[ 0.304567] NMI watchdog: Perf NMI watchdog permanently disabled\r\n[ 0.304607] smp: Bringing up secondary CPUs ...\r\n[ 0.305254] smp: Brought up 1 node, 1 CPU\r\n[ 0.305804] smpboot: Max logical packages: 1\r\n[ 0.306388] smpboot: Total of 1 processors activated (4400.31 BogoMIPS)\r\n[ 0.309894] node 0 deferred pages initialised in 4ms\r\n[ 0.310840] devtmpfs: initialized\r\n[ 0.311414] x86/mm: Memory block size: 128MB\r\n[ 0.312326] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\r\n[ 0.312624] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\n[ 0.313984] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\r\n[ 0.315079] NET: Registered protocol family 16\r\n[ 0.316708] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\r\n[ 0.317887] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\n[ 0.319088] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\n[ 0.320255] audit: initializing netlink subsys (disabled)\r\n[ 0.320680] thermal_sys: Registered thermal governor 'fair_share'\r\n[ 0.320681] thermal_sys: Registered thermal governor 'bang_bang'\r\n[ 0.321534] thermal_sys: Registered thermal governor 'step_wise'\r\n[ 0.322340] thermal_sys: Registered thermal governor 'user_space'\r\n[ 0.323166] thermal_sys: Registered thermal governor 'power_allocator'\r\n[ 0.324578] audit: type=2000 audit(1700193823.829:1): state=initialized audit_enabled=0 res=1\r\n[ 0.326750] cpuidle: using governor ladder\r\n[ 0.327347] cpuidle: using governor menu\r\n[ 0.327968] ACPI: bus type PCI registered\r\n[ 0.328539] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\n[ 0.328668] PCI: Using configuration type 1 for base access\r\n[ 0.330144] Kprobes globally optimized\r\n[ 0.330823] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\n[ 0.332570] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\n[ 0.460132] ACPI: Added _OSI(Module Device)\r\n[ 0.460570] ACPI: Added _OSI(Processor Device)\r\n[ 0.461236] ACPI: Added _OSI(3.0 _SCP Extensions)\r\n[ 0.461875] ACPI: Added _OSI(Processor Aggregator Device)\r\n[ 0.462629] ACPI: Added _OSI(Linux-Dell-Video)\r\n[ 0.463234] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\n[ 0.463951] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\n[ 0.465493] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\n[ 0.467274] ACPI: Interpreter enabled\r\n[ 0.467821] ACPI: (supports S0 S3 S4 S5)\r\n[ 0.468579] ACPI: Using IOAPIC for interrupt routing\r\n[ 0.469275] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\n[ 0.470653] ACPI: Enabled 16 GPEs in block 00 to 0F\r\n[ 0.473239] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\n[ 0.474122] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\n[ 0.475162] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\n[ 0.477146] PCI host bridge to bus 0000:00\r\n[ 0.477709] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\n[ 0.478715] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\n[ 0.479663] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\n[ 0.480578] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\r\n[ 0.481576] pci_bus 0000:00: root bus resource [bus 00-ff]\r\n[ 0.482365] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\n[ 0.486019] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\n[ 0.500825] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\n[ 0.519681] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\n[ 0.520874] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\n[ 0.528575] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\n[ 0.533672] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\r\n[ 0.548861] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\n[ 0.555665] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\n[ 0.560572] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\r\n[ 0.573906] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\r\n[ 0.580574] pci 0000:00:05.0: reg 0x10: [io 0xc080-0xc09f]\r\n[ 0.586726] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\r\n[ 0.601296] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\n[ 0.603312] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\n[ 0.605636] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\n[ 0.607598] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\n[ 0.611697] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\n[ 0.612813] iommu: Default domain type: Translated \r\n[ 0.613589] vgaarb: loaded\r\n[ 0.614061] Registered efivars operations\r\n[ 0.614787] NetLabel: Initializing\r\n[ 0.615327] NetLabel: domain hash size = 128\r\n[ 0.615923] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\n[ 0.616587] NetLabel: unlabeled traffic allowed by default\r\n[ 0.617348] PCI: Using ACPI for IRQ routing\r\n[ 0.618056] clocksource: Switched to clocksource kvm-clock\r\n[ 0.628891] VFS: Disk quotas dquot_6.6.0\r\n[ 0.629490] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\n[ 0.630665] AppArmor: AppArmor Filesystem Enabled\r\n[ 0.631324] pnp: PnP ACPI init\r\n[ 0.632174] pnp: PnP ACPI: found 7 devices\r\n[ 0.638068] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\n[ 0.639390] NET: Registered protocol family 2\r\n[ 0.640279] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\r\n[ 0.642617] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\r\n[ 0.643878] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\r\n[ 0.644963] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\n[ 0.645946] TCP: Hash tables configured (established 8192 bind 8192)\r\n[ 0.647263] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\r\n[ 0.648178] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\r\n[ 0.649145] NET: Registered protocol family 1\r\n[ 0.649746] NET: Registered protocol family 44\r\n[ 0.650360] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\n[ 0.651189] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\n[ 0.652018] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\n[ 0.653023] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\r\n[ 0.654013] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\n[ 0.654965] PCI: CLS 0 bytes, default 64\r\n[ 0.655545] Trying to unpack rootfs image as initramfs...\r\n[ 0.868747] Freeing initrd memory: 13832K\r\n[ 0.869409] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\r\n[ 0.870790] clocksource: Switched to clocksource tsc\r\n[ 0.871684] Initialise system trusted keyrings\r\n[ 0.872370] Key type blacklist registered\r\n[ 0.872996] workingset: timestamp_bits=36 max_order=18 bucket_order=0\r\n[ 0.874768] zbud: loaded\r\n[ 0.875451] Key type asymmetric registered\r\n[ 0.876015] Asymmetric key parser 'x509' registered\r\n[ 0.876717] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\n[ 0.877753] io scheduler mq-deadline registered\r\n[ 0.878944] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\n[ 0.879891] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\n[ 0.881103] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\n[ 0.882343] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\n[ 0.883609] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\n[ 0.884960] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\n[ 0.886134] i8042: Warning: Keylock active\r\n[ 0.888083] serio: i8042 KBD port at 0x60,0x64 irq 1\r\n[ 0.888821] serio: i8042 AUX port at 0x60,0x64 irq 12\r\n[ 0.889640] rtc_cmos 00:00: RTC can wake from S4\r\n[ 0.890965] rtc_cmos 00:00: registered as rtc0\r\n[ 0.891673] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:44 UTC (1700193824)\r\n[ 0.892826] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\n[ 0.893666] intel_pstate: CPU model not supported\r\n[ 0.894500] NET: Registered protocol family 10\r\n[ 0.902476] Segment Routing with IPv6\r\n[ 0.903051] mip6: Mobile IPv6\r\n[ 0.903490] NET: Registered protocol family 17\r\n[ 0.904345] IPI shorthand broadcast: enabled\r\n[ 0.904948] sched_clock: Marking stable (892139515, 12093408)-\u003e(906097741, -1864818)\r\n[ 0.906042] registered taskstats version 1\r\n[ 0.906630] Loading compiled-in X.509 certificates\r\n[ 0.939254] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\n[ 0.940959] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\n[ 0.942356] Key type .fscrypt registered\r\n[ 0.942899] Key type fscrypt-provisioning registered\r\n[ 0.943613] AppArmor: AppArmor sha1 policy hashing enabled\r\n[ 0.945910] Freeing unused decrypted memory: 2036K\r\n[ 0.947243] Freeing unused kernel image (initmem) memory: 2468K\r\n[ 0.956128] Write protecting the kernel read-only data: 22528k\r\n[ 0.957663] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\n[ 0.958870] Freeing unused kernel image (rodata/data gap) memory: 1236K\r\n[ 0.960268] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 0.961209] x86/mm: Checking user space page tables\r\n[ 0.961951] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 0.962845] Run /init as init process\r\nLoading, please wait...\r\nStarting version 247.3-7+deb11u4\r\n[ 1.027130] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\n[ 1.027936] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\n[ 1.056157] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\n[ 1.056936] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\n[ 1.062192] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\n[ 1.062992] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\n[ 1.084419] SCSI subsystem initialized\r\n[ 1.093724] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\n[ 1.118084] virtio_net virtio1 ens4: renamed from eth0\r\n[ 1.126364] scsi host0: Virtio SCSI HBA\r\n[ 1.133045] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\n[ 1.153482] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\r\n[ 1.154594] sd 0:0:1:0: [sda] 4096-byte physical blocks\r\n[ 1.155471] sd 0:0:1:0: [sda] Write Protect is off\r\n[ 1.156440] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\n[ 1.160803] sda: sda1 sda14 sda15\r\n[ 1.172566] sd 0:0:1:0: [sda] Attached SCSI disk\r\nBegin: Loading essential drivers ... done.\r\nBegin: Running /scripts/init-premount ... done.\r\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\r\nBegin: Running /scripts/local[ 1.198383] gce-disk-expand: Resizing partition on \r\n-premount ... [ 1.222901] sda: sda1 sda14 sda15\r\n[ 1.234471] gce-disk-expand: Disk /dev/sda1 doesn't need resizing.\r\ndone.\r\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\r\n[/sbin/fsck.ext4 (1) -- /dev/sda1] fsck.ext4 -a -C0 /dev/sda1 \r\n/dev/sda1: clean, 82191/647168 files, 583028/2588667 blocks\r\ndone.\r\n[ 1.303453] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\r\ndone.\r\nBegin: Running /scripts/local-bottom ... done.\r\nBegin: Running /scripts/init-bottom ... done.\r\n[ 1.328083] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\n[ 1.437623] systemd[1]: Inserted module 'autofs4'\r\n[ 1.493324] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\r\n[ 1.496588] systemd[1]: Detected virtualization kvm.\r\n[ 1.497395] systemd[1]: Detected architecture x86-64.\r\n\r\nWelcome to \u001b[1mDebian GNU/Linux 11 (bullseye)\u001b[0m!\r\n\r\n[ 1.508540] systemd[1]: Set hostname to \u003cdebian\u003e.\r\n[ 1.511050] systemd[1]: Initializing machine ID from KVM UUID.\r\n[ 1.511999] systemd[1]: Installed transient /etc/machine-id file.\r\n[ 1.972842] systemd[1]: Condition check resulted in Root Slice being skipped.\r\n[ 1.974079] systemd[1]: Condition check resulted in System Slice being skipped.\r\n[ 1.975658] systemd[1]: Queued start job for default target Graphical Interface.\r\n[ 1.977660] systemd[1]: Created slice system-getty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-getty.slice\u001b[0m.\r\n[ 1.988412] systemd[1]: Created slice system-modprobe.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-modprobe.slice\u001b[0m.\r\n[ 2.000470] systemd[1]: Created slice system-serial\\x2dgetty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-serial\\x2dgetty.slice\u001b[0m.\r\n[ 2.012408] systemd[1]: Created slice system-systemd\\x2dgrowfs.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-systemd\\x2dgrowfs.slice\u001b[0m.\r\n[ 2.024395] systemd[1]: Created slice User and Session Slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39mUser and Session Slice\u001b[0m.\r\n[ 2.036241] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDispatch Password …ts to Console Directory Watch\u001b[0m.\r\n[ 2.048216] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mForward Password R…uests to Wall Directory Watch\u001b[0m.\r\n[ 2.060352] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\r\n[\u001b[0;32m OK \u001b[0m] Set up automount \u001b[0;1;39mArbitrary…s File System Automount Point\u001b[0m.\r\n[ 2.072181] systemd[1]: Reached target Local Encrypted Volumes.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal Encrypted Volumes\u001b[0m.\r\n[ 2.084183] systemd[1]: Reached target Paths.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mPaths\u001b[0m.\r\n[ 2.096149] systemd[1]: Reached target Remote File Systems.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mRemote File Systems\u001b[0m.\r\n[ 2.108140] systemd[1]: Reached target Slices.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSlices\u001b[0m.\r\n[ 2.120166] systemd[1]: Reached target Swap.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSwap\u001b[0m.\r\n[ 2.132147] systemd[1]: Reached target System Time Set.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Set\u001b[0m.\r\n[ 2.144334] systemd[1]: Listening on Syslog Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mSyslog Socket\u001b[0m.\r\n[ 2.156291] systemd[1]: Listening on fsck to fsckd communication Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mfsck to fsckd communication Socket\u001b[0m.\r\n[ 2.168285] systemd[1]: Listening on initctl Compatibility Named Pipe.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39minitctl Compatibility Named Pipe\u001b[0m.\r\n[ 2.180454] systemd[1]: Listening on Journal Audit Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Audit Socket\u001b[0m.\r\n[ 2.192301] systemd[1]: Listening on Journal Socket (/dev/log).\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket (/dev/log)\u001b[0m.\r\n[ 2.204323] systemd[1]: Listening on Journal Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket\u001b[0m.\r\n[ 2.216869] systemd[1]: Listening on udev Control Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Control Socket\u001b[0m.\r\n[ 2.228296] systemd[1]: Listening on udev Kernel Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Kernel Socket\u001b[0m.\r\n[ 2.241091] systemd[1]: Mounting Huge Pages File System...\r\n Mounting \u001b[0;1;39mHuge Pages File System\u001b[0m...\r\n[ 2.252968] systemd[1]: Mounting POSIX Message Queue File System...\r\n Mounting \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m...\r\n[ 2.264934] systemd[1]: Mounting Kernel Debug File System...\r\n Mounting \u001b[0;1;39mKernel Debug File System\u001b[0m...\r\n[ 2.276955] systemd[1]: Mounting Kernel Trace File System...\r\n Mounting \u001b[0;1;39mKernel Trace File System\u001b[0m...\r\n[ 2.289000] systemd[1]: Starting Create list of static device nodes for the current kernel...\r\n Starting \u001b[0;1;39mCreate list of st…odes for the current kernel\u001b[0m...\r\n[ 2.300930] systemd[1]: Starting Load Kernel Module configfs...\r\n Starting \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m...\r\n[ 2.312919] systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\n[ 2.324883] systemd[1]: Starting Load Kernel Module fuse...\r\n Starting \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m...\r\n[ 2.335869] fuse: init (API version 7.32)\r\n[ 2.337237] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\r\n[ 2.338529] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\r\n[ 2.341100] systemd[1]: Starting Journal Service...\r\n Starting \u001b[0;1;39mJournal Service\u001b[0m...\r\n[ 2.353548] systemd[1]: Starting Load Kernel Modules...\r\n Starting \u001b[0;1;39mLoad Kernel Modules\u001b[0m...\r\n[ 2.364968] systemd[1]: Starting Remount Root and Kernel File Systems...\r\n Starting \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m...\r\n[ 2.376830] systemd[1]: Starting Coldplug All udev Devices...\r\n Starting \u001b[0;1;39mColdplug All udev Devices\u001b[0m...\r\n[ 2.389695] systemd[1]: Mounted Huge Pages File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mHuge Pages File System\u001b[0m.\r\n[ 2.392342] systemd[1]: Mounted POSIX Message Queue File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m.\r\n[ 2.396356] systemd[1]: Mounted Kernel Debug File System.\r\n[ 2.397669] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Debug File System\u001b[0m.\r\n[ 2.412895] systemd[1]: Mounted Kernel Trace File System.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Trace File System\u001b[0m.\r\n[ 2.424280] systemd[1]: Started Journal Service.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mJournal Service\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate list of st… nodes for the current kernel\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Modules\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m.\r\n Mounting \u001b[0;1;39mFUSE Control File System\u001b[0m...\r\n Mounting \u001b[0;1;39mKernel Configuration File System\u001b[0m...\r\n Starting \u001b[0;1;39mGrow File System on /\u001b[0m...\r\n Starting \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m...\r\n[ 2.550327] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\r\n Starting \u001b[0;1;39mLoad/Save Random Seed\u001b[0m...\r\n[ 2.566378] systemd-journald[180]: Received client request to flush runtime journal.\r\n Starting \u001b[0;1;39mApply Kernel Variables\u001b[0m...\r\n Starting \u001b[0;1;39mCreate System Users\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mColdplug All udev Devices\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mFUSE Control File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Configuration File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGrow File System on /\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad/Save Random Seed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mApply Kernel Variables\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate System Users\u001b[0m.\r\n Starting \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems (Pre)\u001b[0m.\r\n Starting \u001b[0;1;39mRule-based Manage…for Device Events and Files\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRule-based Manager for Device Events and Files\u001b[0m.\r\n[ 2.817742] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\n[ 2.832340] ACPI: Power Button [PWRF]\r\n[ 2.832937] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\n[ 2.833954] ACPI: Sleep Button [SLPF]\r\n[ 2.858324] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\n[ 2.868718] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39m/dev/ttyS0\u001b[0m.\r\n[ 2.876076] pstore: Using crash dump compression: deflate\r\n[ 2.876906] pstore: Registered efi as persistent store backend\r\n[ 2.921526] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\n[ 2.957276] cryptd: max_cpu_qlen set to 1000\r\n[ 2.992561] AVX2 version of gcm_enc/dec engaged.\r\n[ 2.993287] AES CTR mode by8 optimization enabled\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mPersistentDisk 15\u001b[0m.\r\n Mounting \u001b[0;1;39m/boot/efi\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39m/boot/efi\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mVirtio network device\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems\u001b[0m.\r\n Starting \u001b[0;1;39mLoad AppArmor profiles\u001b[0m...\r\n Starting \u001b[0;1;39mCommit a transient machine-id on disk\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m.\r\n Starting \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCommit a transient machine-id on disk\u001b[0m.\r\n[ 3.408377] audit: type=1400 audit(1700193827.016:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=292 comm=\"apparmor_parser\"\r\n[ 3.411744] audit: type=1400 audit(1700193827.016:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=292 comm=\"apparmor_parser\"\r\n[ 3.496816] audit: type=1400 audit(1700193827.104:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=293 comm=\"apparmor_parser\"\r\n[ 3.538548] audit: type=1400 audit(1700193827.144:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=294 comm=\"apparmor_parser\"\r\n[ 3.657331] audit: type=1400 audit(1700193827.264:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=295 comm=\"apparmor_parser\"\r\n[ 3.687179] audit: type=1400 audit(1700193827.292:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=296 comm=\"apparmor_parser\"\r\n[ 3.752802] audit: type=1400 audit(1700193827.360:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=297 comm=\"apparmor_parser\"\r\n[ 3.755808] audit: type=1400 audit(1700193827.360:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=297 comm=\"apparmor_parser\"\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad AppAr[ 3.760565] audit: type=1400 audit(1700193827.364:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=297 comm=\"apparmor_parser\"\r\nmor profiles\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Initialization\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGCE Workload Certificate refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mNSS cache refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily Cleanup of Temporary Directories\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mD-Bus System Message Bus Socket\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mUUID daemon activation socket\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSockets\u001b[0m.\r\n Starting \u001b[0;1;39mResize root filesystem if needed\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mifup for ens4\u001b[0m.\r\n Starting \u001b[0;1;39mRaise network interfaces\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mResize root filesystem if needed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mBasic System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mD-Bus System Message Bus\u001b[0m.\r\n Starting \u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\u001b[0m...\r\n Starting \u001b[0;1;39mSystem Logging Service\u001b[0m...\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSystem Logging Service\u001b[0m.\r\nNov 17 04:03:47 debian kernel: [ 0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\r\nNov 17 04:03:47 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-provided physical RAM map:\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\r\nNov 17 04:03:47 debian kernel: [ 0.000000] printk: bootconsole [earlyser0] enabled\r\nNov 17 04:03:47 debian kernel: [ 0.000000] NX (Execute Disable) protection: active\r\nNov 17 04:03:47 debian kernel: [ 0.000000] efi: EFI v2.70 by EDK II\r\nNov 17 04:03:47 debian kernel: [ 0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \r\nNov 17 04:03:47 debian kernel: [ 0.000000] secureboot: Secure boot disabled\r\nNov 17 04:03:47 debian kernel: [ 0.000000] SMBIOS 2.4 present.\r\nNov 17 04:03:47 debian kernel: [ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\r\nNov 17 04:03:47 debian kernel: [ 0.000000] Hypervisor detected: KVM\r\nNov 17 04:03:47 debian kernel: [ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\nNov 17 04:03:47 debian kernel: [ 0.000000] kvm-clock: cpu 0, msr c201001, primary cpu clock\r\nNov 17 04:03:47 debian kernel: [ 0.000000] kvm-clock: using sched offset of 6456270974 cycles\r\nNov 17 04:03:47 debian kernel: [ 0.000734] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\nNov 17 04:03:47 debian kernel: [ 0.002884] tsc: Detected 2200.158 MHz processor\r\nNov 17 04:03:47 debian kernel: [ 0.003576] e820: update [mem 0x00000000-0x00000fff] usable ==\u003e reserved\r\nNov 17 04:03:47 debian kernel: [ 0.003579] e820: remove [mem 0x000a0000-0x000fffff] usable\r\nNov 17 04:03:47 debian kernel: [ 0.003587] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\r\nNov 17 04:03:47 debian kernel: [ 0.004341] MTRR default type: write-back\r\nNov 17 04:03:47 debian kernel: [ 0.004342] MTRR fixed ranges enabled:\r\nNov 17 04:03:47 debian kernel: [ 0.004343] 00000-9FFFF write-back\r\nNov 17 04:03:47 debian kernel: [ 0.004344] A0000-FFFFF uncachable\r\nNov 17 04:03:47 debian kernel: [ 0.004345] MTRR variable ranges enabled:\r\nNov 17 04:03:47 debian kernel: [ 0.004347] 0 base 000080000000 mask 3FFF80000000 uncachable\r\nNov 17 04:03:47 debian kernel: [ 0.004347] 1 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004348] 2 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004349] 3 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004349] 4 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004350] 5 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004350] 6 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004351] 7 disabled\r\nNov 17 04:03:47 debian kernel: [ 0.004363] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nNov 17 04:03:47 debian kernel: [ 0.005841] Using GB pages for direct mapping\r\nNov 17 04:03:47 debian kernel: [ 0.006760] RAMDISK: [mem 0x2327f000-0x24000fff]\r\nNov 17 04:03:47 debian kernel: [ 0.007361] ACPI: Early table checksum verification disabled\r\nNov 17 04:03:47 debian kernel: [ 0.008083] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\r\nNov 17 04:03:47 debian kernel: [ 0.008863] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\nNov 17 04:03:47 debian kernel: [ 0.010056] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.011203] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.012333] ACPI: FACS 0x00000000261F2000 000040\r\nNov 17 04:03:47 debian kernel: [ 0.012966] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\nNov 17 04:03:47 debian kernel: [ 0.014054] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.015175] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.016277] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.017366] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.018500] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\nNov 17 04:03:47 debian kernel: [ 0.019702] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\r\nNov 17 04:03:47 debian kernel: [ 0.020615] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\r\nNov 17 04:03:47 debian kernel: [ 0.021530] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\r\nNov 17 04:03:47 debian kernel: [ 0.022454] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\r\nNov 17 04:03:47 debian kernel: [ 0.023355] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\r\nNov 17 04:03:47 debian kernel: [ 0.024340] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\r\nNov 17 04:03:47 debian kernel: [ 0.025411] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\r\nNov 17 04:03:47 debian kernel: [ 0.026702] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\r\nNov 17 04:03:47 debian kernel: [ 0.027613] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\r\nNov 17 04:03:47 debian kernel: [ 0.028605] ACPI: Local APIC address 0xfee00000\r\nNov 17 04:03:47 debian kernel: [ 0.028637] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\nNov 17 04:03:47 debian kernel: [ 0.029245] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.030009] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\r\nNov 17 04:03:47 debian kernel: [ 0.030872] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\u003e [mem 0x00000000-0x265dffff]\r\nNov 17 04:03:47 debian kernel: [ 0.032225] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\r\nNov 17 04:03:47 debian kernel: [ 0.033370] Zone ranges:\r\nNov 17 04:03:47 debian kernel: [ 0.033725] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\nNov 17 04:03:47 debian kernel: [ 0.034554] DMA32 [mem 0x0000000001000000-0x00000000265dffff]\r\nNov 17 04:03:47 debian kernel: [ 0.035451] Normal empty\r\nNov 17 04:03:47 debian kernel: [ 0.035842] Device empty\r\nNov 17 04:03:47 debian kernel: [ 0.036232] Movable zone start for each node\r\nNov 17 04:03:47 debian kernel: [ 0.036778] Early memory node ranges\r\nNov 17 04:03:47 debian kernel: [ 0.037243] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\nNov 17 04:03:47 debian kernel: [ 0.038094] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\nNov 17 04:03:47 debian kernel: [ 0.038947] node 0: [mem 0x0000000000100000-0x0000000025eecfff]\r\nNov 17 04:03:47 debian kernel: [ 0.039805] node 0: [mem 0x00000000261ff000-0x00000000265dffff]\r\nNov 17 04:03:47 debian kernel: [ 0.040633] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\r\nNov 17 04:03:47 debian kernel: [ 0.041544] On node 0 totalpages: 156250\r\nNov 17 04:03:47 debian kernel: [ 0.041545] DMA zone: 64 pages used for memmap\r\nNov 17 04:03:47 debian kernel: [ 0.041546] DMA zone: 3121 pages reserved\r\nNov 17 04:03:47 debian kernel: [ 0.041548] DMA zone: 3980 pages, LIFO batch:0\r\nNov 17 04:03:47 debian kernel: [ 0.041549] DMA32 zone: 2392 pages used for memmap\r\nNov 17 04:03:47 debian kernel: [ 0.041550] DMA32 zone: 152270 pages, LIFO batch:31\r\nNov 17 04:03:47 debian kernel: [ 0.041989] On node 0, zone DMA: 1 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.041990] On node 0, zone DMA: 11 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.042798] On node 0, zone DMA: 104 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.045104] On node 0, zone DMA32: 786 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.046017] On node 0, zone DMA32: 6688 pages in unavailable ranges\r\nNov 17 04:03:47 debian kernel: [ 0.047186] ACPI: PM-Timer IO Port: 0xb008\r\nNov 17 04:03:47 debian kernel: [ 0.048553] ACPI: Local APIC address 0xfee00000\r\nNov 17 04:03:47 debian kernel: [ 0.048565] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\nNov 17 04:03:47 debian kernel: [ 0.049404] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\nNov 17 04:03:47 debian kernel: [ 0.050293] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\nNov 17 04:03:47 debian kernel: [ 0.051137] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\nNov 17 04:03:47 debian kernel: [ 0.051992] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\nNov 17 04:03:47 debian kernel: [ 0.052890] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\nNov 17 04:03:47 debian kernel: [ 0.053807] ACPI: IRQ5 used by override.\r\nNov 17 04:03:47 debian kernel: [ 0.053808] ACPI: IRQ9 used by override.\r\nNov 17 04:03:47 debian kernel: [ 0.053809] ACPI: IRQ10 used by override.\r\nNov 17 04:03:47 debian kernel: [ 0.053810] ACPI: IRQ11 used by override.\r\nNov 17 04:03:47 debian kernel: [ 0.053812] Using ACPI (MADT) for SMP configuration information\r\nNov 17 04:03:47 debian kernel: [ 0.054586] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\r\nNov 17 04:03:47 debian kernel: [ 0.055292] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\nNov 17 04:03:47 debian kernel: [ 0.056302] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.057269] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.058272] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\nNov 17 04:03:47 debian kernel: [ 0.059273] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\r\nNov 17 04:03:47 debian kernel: [ 0.060238] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\r\nNov 17 04:03:47 debian kernel: [ 0.061203] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\r\nNov 17 04:03:47 debian kernel: [ 0.062169] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\r\nNov 17 04:03:47 debian kernel: [ 0.063136] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\r\nNov 17 04:03:47 debian kernel: [ 0.064110] [mem 0x26600000-0xffffffff] available for PCI devices\r\nNov 17 04:03:47 debian kernel: [ 0.064881] Booting paravirtualized kernel on KVM\r\nNov 17 04:03:47 debian kernel: [ 0.065481] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\nNov 17 04:03:47 debian kernel: [ 0.071199] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\r\nNov 17 04:03:47 debian kernel: [ 0.072527] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\r\nNov 17 04:03:47 debian kernel: [ 0.073412] pcpu-alloc: s221184 r8192 d28672 u2097152 alloc=1*2097152\r\nNov 17 04:03:47 debian kernel: [ 0.073414] pcpu-alloc: [0] 0 \r\nNov 17 04:03:47 debian kernel: [ 0.073444] kvm-guest: PV spinlocks disabled, single CPU\r\nNov 17 04:03:47 debian kernel: [ 0.074171] Built 1 zonelists, mobility grouping on. Total pages: 150673\r\nNov 17 04:03:47 debian kernel: [ 0.075108] Policy zone: DMA32\r\nNov 17 04:03:47 debian kernel: [ 0.075690] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nNov 17 04:03:47 debian kernel: [ 0.078655] DMAR: IOMMU disabled\r\nNov 17 04:03:47 debian kernel: [ 0.079286] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.080546] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.081583] mem auto-init: stack:off, heap alloc:on, heap free:off\r\nNov 17 04:03:47 debian kernel: [ 0.084292] Memory: 208948K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\r\nNov 17 04:03:47 debian kernel: [ 0.086299] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\r\nNov 17 04:03:47 debian kernel: [ 0.087268] Kernel/User page tables isolation: enabled\r\nNov 17 04:03:47 debian kernel: [ 0.088415] ftrace: allocating 33918 entries in 133 pages\r\nNov 17 04:03:47 debian kernel: [ 0.108935] ftrace: allocated 133 pages with 3 groups\r\nNov 17 04:03:47 debian kernel: [ 0.110330] rcu: Hierarchical RCU implementation.\r\nNov 17 04:03:47 debian kernel: [ 0.110974] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\r\nNov 17 04:03:47 debian kernel: [ 0.111865] \tRude variant of Tasks RCU enabled.\r\nNov 17 04:03:47 debian kernel: [ 0.112441] \tTracing variant of Tasks RCU enabled.\r\nNov 17 04:03:47 debian kernel: [ 0.113053] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\nNov 17 04:03:47 debian kernel: [ 0.114064] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\r\nNov 17 04:03:47 debian kernel: [ 0.119409] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\r\nNov 17 04:03:47 debian kernel: [ 0.120483] random: crng init done\r\nNov 17 04:03:47 debian kernel: [ 0.120945] Console: colour dummy device 80x25\r\nNov 17 04:03:47 debian kernel: [ 0.121763] printk: console [tty0] enabled\r\nNov 17 04:03:47 debian kernel: [ 0.122413] printk: console [ttyS0] enabled\r\nNov 17 04:03:47 debian kernel: [ 0.123526] printk: bootconsole [earlyser0] disabled\r\nNov 17 04:03:47 debian kernel: [ 0.124856] ACPI: Core revision 20200925\r\nNov 17 04:03:47 debian kernel: [ 0.125499] APIC: Switch to symmetric I/O mode setup\r\nNov 17 04:03:47 debian kernel: [ 0.126669] x2apic enabled\r\nNov 17 04:03:47 debian kernel: [ 0.129453] Switched APIC routing to physical x2apic.\r\nNov 17 04:03:47 debian kernel: [ 0.134129] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\nNov 17 04:03:47 debian kernel: [ 0.135170] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\r\nNov 17 04:03:47 debian kernel: [ 0.136571] Calibrating delay loop (skipped) preset value.. 4400.31 BogoMIPS (lpj=8800632)\r\nNov 17 04:03:47 debian kernel: [ 0.140680] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\nNov 17 04:03:47 debian kernel: [ 0.141412] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\nNov 17 04:03:47 debian kernel: [ 0.142247] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\nNov 17 04[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\n:03:47 debian kernel: [ 0.143390] Spectre V2 : Mitigation: IBRS\r\nNov 17 04:03:47 debian kernel: [ 0.143939] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\nNov 17 04:03:47 debian kernel: [ 0.144568] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\nNov 17 04:03:47 debian kernel: [ 0.145466] RETBleed: Mitigation: IBRS\r\nNov 17 04:03:47 debian kernel: [ 0.145988] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\nNov 17 04:03:47 debian kernel: [ 0.147108] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\nNov 17 04:03:47 debian kernel: [ 0.148575] MDS: Mitigation: Clear CPU buffers\r\nNov 17 04:03:47 debian systemd[1]: Finished Create list of static device nodes for the current kernel.\r\nNov 17 04:03:47 debian systemd[1]: modprobe@configfs.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module configfs.\r\nNov 17 04:03:47 debian systemd[1]: modprobe@drm.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module drm.\r\nNov 17 04:03:47 debian systemd[1]: modprobe@fuse.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module fuse.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Modules.\r\nNov 17 04:03:47 debian systemd[1]: Finished Remount Root and Kernel File Systems.\r\nNov 17 04:03:47 debian systemd[1]: Mounting FUSE Control File System...\r\nNov 17 04:03:47 debian systemd[1]: Mounting Kernel Configuration File System...\r\nNov 17 04:03:47 debian systemd[1]: Starting Grow File System on /...\r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting Flush Journal to Persistent Storage...\r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting Load/Save Random Seed...\r\nNov 17 04:03:47 debian systemd-growfs[189]: Successfully resized \"/\" to 9.8G bytes (3584 bytes lost due to blocksize).\r\nNov 17 04:03:47 debian systemd[1]: Starting Apply Kernel Variables...\r\nNov 17 04:03:47 debian systemd[1]: Starting Create System Users...\r\nNov 17 04:03:47 debian systemd[1]: Finished Coldplug All udev Devices.\r\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating group systemd-timesync with gid 999.\r\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating user systemd-timesync (systemd Time Synchronization) with uid 999 and gid 999.\r\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating group systemd-coredump with gid 998.\r\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating user systemd-coredump (systemd Core Dumper) with uid 998 and gid 998.\r\nNov 17 04:03:47 debian systemd[1]: Mounted FUSE Control File System.\r\nNov 17 04:03:47 debian systemd[1]: Mounted Kernel Configuration File System.\r\nNov 17 04:03:47 debian systemd[1]: Finished Grow File System on /.\r\nNov 17 04:03:47 debian systemd[1]: Finished Flush Journal to Persistent Storage.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load/Save Random Seed.\r\nNov 17 04:03:47 debian systemd[1]: Finished Apply Kernel Variables.\r\nNov 17 04:03:47 debian systemd[1]: Finished Create System Users.\r\nNov 17 04:03:47 debian kernel: [ 0.149183] TAA: Mitigation: Clear CPU buffers\r\nNov 17 04:03:47 debian kernel: [ 0.149789] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\nNov 17 04:03:47 debian kernel: [ 0.150817] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\nNov 17 04:03:47 debian kernel: [ 0.151849] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\nNov 17 04:03:47 debian kernel: [ 0.152568] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\nNov 17 04:03:47 debian kernel: [ 0.153445] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\nNov 17 04:03:47 debian kernel: [ 0.154319] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\nNov 17 04:03:47 debian kernel: [ 0.174317] Freeing SMP alternatives memory: 32K\r\nNov 17 04:03:47 debian kernel: [ 0.176616] pid_max: default: 32768 minimum: 301\r\nNov 17 04:03:47 debian kernel: [ 0.189921] LSM: Security Framework initializing\r\nNov 17 04:03:47 debian kernel: [ 0.190777] Yama: disabled by default; enable with sysctl kernel.yama.*\r\nNov 17 04:03:47 debian kernel: [ 0.191718] AppArmor: AppArmor initialized\r\nNov 17 04:03:47 debian kernel: [ 0.192315] TOMOYO Linux initialized\r\nNov 17 04:03:47 debian kernel: [ 0.192585] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.193586] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.303707] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\nNov 17 04:03:47 debian kernel: [ 0.304567] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\nNov 17 04:03:47 debian kernel: [ 0.304567] rcu: Hierarchical SRCU implementation.\r\nNov 17 04:03:47 debian kernel: [ 0.304567] NMI watchdog: Perf NMI watchdog permanently disabled\r\nNov 17 04:03:47 debian kernel: [ 0.304607] smp: Bringing up secondary CPUs ...\r\nNov 17 04:03:47 debian kernel: [ 0.305254] smp: Brought up 1 node, 1 CPU\r\nNov 17 04:03:47 debian kernel: [ 0.305804] smpboot: Max logical packages: 1\r\nNov 17 04:03:47 debian kernel: [ 0.306388] smpboot: Total of 1 processors activated (4400.31 BogoMIPS)\r\nNov 17 04:03:47 debian kernel: [ 0.309894] node 0 deferred pages initialised in 4ms\r\nNov 17 04:03:47 debian kernel: [ 0.310840] devtmpfs: initialized\r\nNov 17 04:03:47 debian kernel: [ 0.311414] x86/mm: Memory block size: 128MB\r\nNov 17 04:03:47 debian kernel: [ 0.312326] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\r\nNov 17 04:03:47 debian kernel: [ 0.312624] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\nNov 17 04:03:47 debian kernel: [ 0.313984] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.315079] NET: Registered protocol family 16\r\nNov 17 04:03:47 debian kernel: [ 0.316708] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\r\nNov 17 04:03:47 debian kernel: [ 0.317887] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\nNov 17 04:03:47 debian kernel: [ 0.319088] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\nNov 17 04:03:47 debian kernel: [ 0.320255] audit: initializing netlink subsys (disabled)\r\nNov 17 04:03:47 debian kernel: [ 0.320680] thermal_sys: Registered thermal governor 'fair_share'\r\nNov 17 04:03:47 debian kernel: [ 0.320681] thermal_sys: Registered thermal governor 'bang_bang'\r\nNov 17 04:03:47 debian kernel: [ 0.321534] thermal_sys: Registered thermal governor 'step_wise'\r\nNov 17 04:03:47 debian kernel: [ 0.322340] thermal_sys: Registered thermal governor 'user_space'\r\nNov 17 04:03:47 debian kernel: [ 0.323166] thermal_sys: Registered thermal governor 'power_allocator'\r\nNov 17 04:03:47 debian kernel: [ 0.324578] audit: type=2000 audit(1700193823.829:1): state=initialized audit_enabled=0 res=1\r\nNov 17 04:03:47 debian kernel: [ 0.326750] cpuidle: using governor ladder\r\nNov 17 04:03:47 debian kernel: [ 0.327347] cpuidle: using governor menu\r\nNov 17 04:03:47 debian kernel: [ 0.327968] ACPI: bus type PCI registered\r\nNov 17 04:03:47 debian kernel: [ 0.328539] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\nNov 17 04:03:47 debian kernel: [ 0.328668] PCI: Using configuration type 1 for base access\r\nNov 17 04:03:47 debian kernel: [ 0.330144] Kprobes globally optimized\r\nNov 17 04:03:47 debian kernel: [ 0.330823] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\nNov 17 04:03:47 debian kernel: [ 0.332570] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\nNov 17 04:03:47 debian kernel: [ 0.460132] ACPI: Added _OSI(Module Device)\r\nNov 17 04:03:47 debian kernel: [ 0.460570] ACPI: Added _OSI(Processor Device)\r\nNov 17 04:03:47 debian kernel: [ 0.461236] ACPI: Added _OSI(3.0 _SCP Extensions)\r\nNov 17 04:03:47 debian kernel: [ 0.461875] ACPI: Added _OSI(Processor Aggregator Device)\r\nNov 17 04:03:47 debian kernel: [ 0.462629] ACPI: Added _OSI(Linux-Dell-Video)\r\nNov 17 04:03:47 debian kernel: [ 0.463234] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\nNov 17 04:03:47 debian kernel: [ 0.463951] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\nNov 17 04:03:47 debian kernel: [ 0.465493] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\nNov 17 04:03:47 debian kernel: [ 0.467274] ACPI: Interpreter enabled\r\nNov 17 04:03:47 debian kernel: [ 0.467821] ACPI: (supports S0 S3 S4 S5)\r\nNov 17 04:03:47 debian kernel: [ 0.468579] ACPI: Using IOAPIC for interrupt routing\r\nNov 17 04:03:47 debian kernel: [ 0.469275] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\nNov 17 04:03:47 debian kernel: [ 0.470653] ACPI: Enabled 16 GPEs in block 00 to 0F\r\nNov 17 04:03:47 debian kernel: [ 0.473239] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\nNov 17 04:03:47 debian kernel: [ 0.474122] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\nNov 17 04:03:47 debian kernel: [ 0.475162] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\nNov 17 04:03:47 debian kernel: [ 0.477146] PCI host bridge to bus 0000:00\r\nNov 17 04:03:47 debian kernel: [ 0.477709] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\nNov 17 04:03:47 debian kernel: [ 0.478715] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\nNov 17 04:03:47 debian kernel: [ 0.479663] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\nNov 17 04:03:47 debian kernel: [ 0.480578] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\r\nNov 17 04:03:47 debian kernel: [ 0.481576] pci_bus 0000:00: root bus resource [bus 00-ff]\r\nNov 17 04:03:47 debian kernel: [ 0.482365] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\nNov 17 04:03:47 debian kernel: [ 0.486019] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\nNov 17 04:03:47 debian kernel: [ 0.500825] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\nNov 17 04:03:47 debian kernel: [ 0.519681] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\nNov 17 04:03:47 debian kernel: [ 0.520874] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\nNov 17 04:03:47 debian kernel: [ 0.528575] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\nNov 17 04:03:47 debian kernel: [ 0.533672] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\r\nNov 17 04:03:47 debian kernel: [ 0.548861] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\nNov 17 04:03:47 debian kernel: [ 0.555665] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\nNov 17 04:03:47 debian kernel: [ 0.560572] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\r\nNov 17 04:03:47 debian kernel: [ 0.573906] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\r\nNov 17 04:03:47 debian kernel: [ 0.580574] pci 0000:00:05.0: reg 0x10: [io 0xc080-0xc09f]\r\nNov 17 04:03:47 debian kernel: [ 0.586726] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\r\nNov 17 04:03:47 debian kernel: [ 0.601296] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\nNov 17 04:03:47 debian kernel: [ 0.603312] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\nNov 17 04:03:47 debian kernel: [ 0.605636] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\nNov 17 04:03:47 debian kernel: [ 0.607598] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\nNov 17 04:03:47 debian kernel: [ 0.611697] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\nNov 17 04:03:47 debian kernel: [ 0.612813] iommu: Default domain type: Translated \r\nNov 17 04:03:47 debian kernel: [ 0.613589] vgaarb: loaded\r\nNov 17 04:03:47 debian kernel: [ 0.614061] Registered efivars operations\r\nNov 17 04:03:47 debian kernel: [ 0.614787] NetLabel: Initializing\r\nNov 17 04:03:47 debian kernel: [ 0.615327] NetLabel: domain hash size = 128\r\nNov 17 04:03:47 debian kernel: [ 0.615923] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\nNov 17 04:03:47 debian kernel: [ 0.616587] NetLabel: unlabeled traffic allowed by default\r\nNov 17 04:03:47 debian kernel: [ 0.617348] PCI: Using ACPI for IRQ routing\r\nNov 17 04:03:47 debian kernel: [ 0.617922] PCI: pci_cache_line_size set to 64 bytes\r\nNov 17 04:03:47 debian kernel: [ 0.618015] e820: r[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\u001b[0m.\r\neserve RAM buffer [mem 0x00055000-0x0005ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.618017] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\r\nNov 17 04:03:47 debian kernel: [ 0.618018] e820: reserve RAM buffer [mem 0x25eed000-0x27ffffff]\r\nNov 17 04:03:47 debian kernel: [ 0.618019] e820: reserve RAM buffer [mem 0x265e0000-0x27ffffff]\r\nNov 17 04:03:47 debian kernel: [ 0.618056] clocksource: Switched to clocksource kvm-clock\r\nNov 17 04:03:47 debian kernel: [ 0.628891] VFS: Disk quotas dquot_6.6.0\r\nNov 17 04:03:47 debian kernel: [ 0.629490] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\nNov 17 04:03:47 debian kernel: [ 0.630665] AppArmor: AppArmor Filesystem Enabled\r\nNov 17 04:03:47 debian kernel: [ 0.631324] pnp: PnP ACPI init\r\nNov 17 04:03:47 debian kernel: [ 0.631808] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631858] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631890] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631928] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631957] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.631986] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.632018] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\r\nNov 17 04:03:47 debian kernel: [ 0.632174] pnp: PnP ACPI: found 7 devices\r\nNov 17 04:03:47 debian kernel: [ 0.638068] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\nNov 17 04:03:47 debian kernel: [ 0.639390] NET: Registered protocol family 2\r\nNov 17 04:03:47 debian kernel: [ 0.640279] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.642617] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.643878] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.644963] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.645946] TCP: Hash tables configured (established 8192 bind 8192)\r\nNov 17 04:03:47 debian kernel: [ 0.647263] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.648178] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\r\nNov 17 04:03:47 debian kernel: [ 0.649145] NET: Registered protocol family 1\r\nNov 17 04:03:47 debian kernel: [ 0.649746] NET: Registered protocol family 44\r\nNov 17 04:03:47 debian kernel: [ 0.650360] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\nNov 17 04:03:47 debian kernel: [ 0.651189] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\nNov 17 04:03:47 debian kernel: [ 0.652018] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\nNov 17 04:03:47 debian kernel: [ 0.653023] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\r\nNov 17 04:03:47 debian kernel: [ 0.654013] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\nNov 17 04:03:47 debian kernel: [ 0.654965] PCI: CLS 0 bytes, default 64\r\nNov 17 04:03:47 debian kernel: [ 0.655545] Trying to unpack rootfs image as initramfs...\r\nNov 17 04:03:47 debian kernel: [ 0.868747] Freeing initrd memory: 13832K\r\nNov 17 04:03:47 debian kernel: [ 0.869409] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\r\nNov 17 04:03:47 debian kernel: [ 0.870790] clocksource: Switched to clocksource tsc\r\nNov 17 04:03:47 debian kernel: [ 0.871684] Initialise system trusted keyrings\r\nNov 17 04:03:47 debian kernel: [ 0.872370] Key type blacklist registered\r\nNov 17 04:03:47 debian kernel: [ 0.872996] workingset: timestamp_bits=36 max_order=18 bucket_order=0\r\nNov 17 04:03:47 debian kernel: [ 0.874768] zbud: loaded\r\nNov 17 04:03:47 debian kernel: [ 0.875451] Key type asymmetric registered\r\nNov 17 04:03:47 debian kernel: [ 0.876015] Asymmetric key parser 'x509' registered\r\nNov 17 04:03:47 debian kernel: [ 0.876717] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\nNov 17 04:03:47 debian kernel: [ 0.877753] io scheduler mq-deadline registered\r\nNov 17 04:03:47 debian kernel: [ 0.878944] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\nNov 17 04:03:47 debian kernel: [ 0.879891] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\nNov 17 04:03:47 debian kernel: [ 0.881103] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\nNov 17 04:03:47 debian kernel: [ 0.882343] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\nNov 17 04:03:47 debian kernel: [ 0.883609] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\nNov 17 04:03:47 debian kernel: [ 0.884960] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\nNov 17 04:03:47 debian kernel: [ 0.886134] i8042: Warning: Keylock active\r\nNov 17 04:03:47 debian kernel: [ 0.888083] serio: i8042 KBD port at 0x60,0x64 irq 1\r\nNov 17 04:03:47 debian kernel: [ 0.888821] serio: i8042 AUX port at 0x60,0x64 irq 12\r\nNov 17 04:03:47 debian kernel: [ 0.889640] rtc_cmos 00:00: RTC can wake from S4\r\nNov 17 04:03:47 debian kernel: [ 0.890965] rtc_cmos 00:00: registered as rtc0\r\nNov 17 04:03:47 debian kernel: [ 0.891673] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:44 UTC (1700193824)\r\nNov 17 04:03:47 debian kernel: [ 0.892826] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\nNov 17 04:03:47 debian kernel: [ 0.893666] intel_pstate: CPU model not supported\r\nNov 17 04:03:47 debian kernel: [ 0.894500] NET: Registered protocol family 10\r\nNov 17 04:03:47 debian kernel: [ 0.902476] Segment Routing with IPv6\r\nNov 17 04:03:47 debian kernel: [ 0.903051] mip6: Mobile IPv6\r\nNov 17 04:03:47 debian kernel: [ 0.903490] NET: Registered protocol family 17\r\nNov 17 04:03:47 debian kernel: [ 0.904345] IPI shorthand broadcast: enabled\r\nNov 17 04:03:47 debian kernel: [ 0.904948] sched_clock: Marking stable (892139515, 12093408)-\u003e(906097741, -1864818)\r\nNov 17 04:03:47 debian kernel: [ 0.906042] registered taskstats version 1\r\nNov 17 04:03:47 debian kernel: [ 0.906630] Loading compiled-in X.509 certificates\r\nNov 17 04:03:47 debian kernel: [ 0.939254] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\nNov 17 04:03:47 debian kernel: [ 0.940959] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\nNov 17 04:03:47 debian kernel: [ 0.942356] Key type .fscrypt registered\r\nNov 17 04:03:47 debian kernel: [ 0.942899] Key type fscrypt-provisioning registered\r\nNov 17 04:03:47 debian kernel: [ 0.943613] AppArmor: AppArmor sha1 policy hashing enabled\r\nNov 17 04:03:47 debian kernel: [ 0.945910] Freeing unused decrypted memory: 2036K\r\nNov 17 04:03:47 debian kernel: [ 0.947243] Freeing unused kernel image (initmem) memory: 2468K\r\nNov 17 04:03:47 debian kernel: [ 0.956128] Write protecting the kernel read-only data: 22528k\r\nNov 17 04:03:47 debian kernel: [ 0.957663] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\nNov 17 04:03:47 debian kernel: [ 0.958870] Freeing unused kernel image (rodata/data gap) memory: 1236K\r\nNov 17 04:03:47 debian kernel: [ 0.960268] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nNov 17 04:03:47 debian kernel: [ 0.961209] x86/mm: Checking user space page tables\r\nNov 17 04:03:47 debian kernel: [ 0.961951] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nNov 17 04:03:47 debian kernel: [ 0.962845] Run /init as init process\r\nNov 17 04:03:47 debian kernel: [ 0.963353] with arguments:\r\nNov 17 04:03:47 debian kernel: [ 0.963353] /init\r\nNov 17 04:03:47 debian kernel: [ 0.963354] with environment:\r\nNov 17 04:03:47 debian kernel: [ 0.963355] HOME=/\r\nNov 17 04:03:47 debian kernel: [ 0.963355] TERM=linux\r\nNov 17 04:03:47 debian kernel: [ 0.963356] BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64\r\nNov 17 04:03:47 debian kernel: [ 0.963357] intel_iommu=off\r\nNov 17 04:03:47 debian kernel: [ 1.027130] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\nNov 17 04:03:47 debian kernel: [ 1.027936] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:47 debian kernel: [ 1.056157] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\nNov 17 04:03:47 debian kernel: [ 1.056936] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:47 debian kernel: [ 1.062192] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\nNov 17 04:03:47 debian kernel: [ 1.062992] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\nNov 17 04:03:47 debian kernel: [ 1.084419] SCSI subsystem initialized\r\nNov 17 04:03:47 debian kernel: [ 1.093724] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\nNov 17 04:03:47 debian kernel: [ 1.118084] virtio_net virtio1 ens4: renamed from eth0\r\nNov 17 04:03:47 debian kernel: [ 1.126364] scsi host0: Virtio SCSI HBA\r\nNov 17 04:03:47 debian kernel: [ 1.133045] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\nNov 17 04:03:47 debian kernel: [ 1.153482] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\r\nNov 17 04:03:47 debian kernel: [ 1.154594] sd 0:0:1:0: [sda] 4096-byte physical blocks\r\nNov 17 04:03:47 debian kernel: [ 1.155471] sd 0:0:1:0: [sda] Write Protect is off\r\nNov 17 04:03:47 debian kernel: [ 1.156202] sd 0:0:1:0: [sda] Mode Sense: 1f 00 00 08\r\nNov 17 04:03:47 debian kernel: [ 1.156440] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\nNov 17 04:03:47 debian kernel: [ 1.160803] sda: sda1 sda14 sda15\r\nNov 17 04:03:47 debian kernel: [ 1.172566] sd 0:0:1:0: [sda] Attached SCSI disk\r\nNov 17 04:03:47 debian kernel: [ 1.222901] sda: sda1 sda14 sda15\r\nNov 17 04:03:47 debian kernel: [ 1.303453] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\r\nNov 17 04:03:47 debian kernel: [ 1.328083] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\nNov 17 04:03:47 debian kernel: [ 2.335869] fuse: init (API version 7.32)\r\nNov 17 04:03:47 debian kernel: [ 2.397669] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\r\nNov 17 04:03:47 debian kernel: [ 2.550327] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\r\nNov 17 04:03:47 debian kernel: [ 2.817742] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\nNov 17 04:03:47 debian kernel: [ 2.832340] ACPI: Power Button [PWRF]\r\nNov 17 04:03:47 debian kernel: [ 2.832937] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\nNov 17 04:03:47 debian kernel: [ 2.833954] ACPI: Sleep Button [SLPF]\r\nNov 17 04:03:47 debian kernel: [ 2.858324] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\nNov 17 04:03:47 debian kernel: [ 2.868718] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\nNov 17 04:03:47 debian kernel: [ 2.876076] pstore: Using crash dump compression: deflate\r\nNov 17 04:03:47 debian kernel: [ 2.876906] pstore: Registered efi as persistent store backend\r\nNov 17 04:03:47 debian kernel: [ 2.921526] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\nNov 17 04:03:47 debian kernel: [ 2.957276] cryptd: max_cpu_qlen set to 1000\r\nNov 17 04:03:47 debian kernel: [ 2.992561] AVX2 version of gcm_enc/dec engaged.\r\nNov 17 04:03:47 debian kernel: [ 2.993287] AES CTR mode by8 optimization enabled\r\nNov 17 04:03:47 debian kernel: [ 3.408377] audit: type=1400 audit(1700193827.016:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=292 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.411744] audit: type=1400 audit(1700193827.016:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=292 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.496816] audit: type=1400 audit(1700193827.104:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=293 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.538548] audit: type=1400 audit(1700193827.144:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=294 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.657331] audit: type=1400 audit(1700193827.264:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=295 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.687179] audit: type=1400 audit(1700193827.292:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=296 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.752802] audit: type=1400 audit(1700193827.360:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.755808] audit: type=1400 audit(1700193827.360:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian kernel: [ 3.760565] audit: type=1400 audit(1700193827.364:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=297 comm=\"apparmor_parser\"\r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in First Boot Complete being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting Helper to synchronize boot up for ifupdown...\r\nNov 17 04:03:47 debian systemd[1]: Starting Create Static Device Nodes in /dev...\r\nNov 17 04:03:47 debian systemd[1]: Finished Helper to synchronize boot up for ifupdown.\r\nNov 17 04:03:47 debian systemd[1]: Finished Create Static Device Nodes in /dev.\r\nNov 17 04:03:47 debian systemd[1]: Reached target Local File Systems (Pre).\r\nNov 17 04:03:47 debian systemd[1]: Starting Rule-based Manager for Device Events and Files...\r\nNov 17 04:03:47 debian systemd[1]: Started Rule-based Manager for Device Events and Files.\r\nNov 17 04:03:47 debian systemd-udevd[200]: Using default interface naming scheme 'v247'.\r\nNov 17 04:03:47 debian systemd-udevd[200]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nNov 17 04:03:47 debian systemd[1]: Found device /dev/ttyS0.\r\nNov 17 04:03:47 debian systemd-udevd[199]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nNov 17 04:03:47 debian systemd[1]: Found device PersistentDisk 15.\r\nNov 17 04:03:47 debian cloud-ifupdown-helper: Generated configuration for ens4\r\nNov 17 04:03:47 debian systemd[1]: Mounting /boot/efi...\r\nNov 17 04:03:47 debian systemd[1]: Mounted /boot/efi.\r\nNov 17 04:03:47 debian systemd[1]: Found device Virtio network device.\r\nNov 17 04:03:47 debian systemd[1]: Reached target Local File Systems.\r\nNov 17 04:03:47 debian systemd[1]: Starting Load AppArmor profiles...\r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting Commit a transient machine-id on disk...\r\nNov 17 04:03:47 debian apparmor.systemd[283]: Restarting AppArmor\r\nNov 17 04:03:47 debian apparmor.systemd[283]: Reloading AppArmor profiles\r\nNov 17 04:03:47 debian systemd[1]: Starting Create Volatile Files and Directories...\r\nNov 17 04:03:47 debian systemd[1]: Finished Create Volatile Files and Directories.\r\nNov 17 04:03:47 debian systemd[1]: Starting Update UTMP about System Boot/Shutdown...\r\nNov 17 04:03:47 debian systemd[1]: Finished Update UTMP about System Boot/Shutdown.\r\nNov 17 04:03:47 debian systemd[1]: etc-machine\\x2did.mount: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Commit a transient machine-id on disk.\r\nNov 17 04:03:47 debian systemd[1]: Finished Load AppArmor profiles.\r\nNov 17 04:03:47 debian systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\r\nNov 17 04:03:47 debian systemd[1]: Reached target System Initialization.\r\nNov 17 04:03:47 debian haveged[298]: haveged: command socket is listening at fd 3\r\nNov 17 04:03:47 debian systemd[1]: Started GCE Workload Certificate refresh timer.\r\nNov 17 04:03:47 debian systemd[1]: Started NSS cache refresh timer.\r\nNov 17 04:03:47 debian systemd[1]: Started Daily Cleanup of Temporary Directories.\r\nNov 17 04:03:47 debian systemd[1]: Listening on D-Bus System Message Bus Socket.\r\nNov 17 04:03:47 debian systemd[1]: Listening on UUID daemon activation socket.\r\nNov 17 04:03:47 debian systemd[1]: Reached target Sockets.\r\nNov 17 04:03:47 debian systemd[1]: Starting Resize root filesystem if needed...\r\nNov 17 04:03:47 debian systemd[1]: Started ifup for ens4.\r\nNov 17 04:03:47 debian google_disk_expand[299]: Checking if filesystem on /dev/sda1 needs resizing\r\nNov 17 04:03:47 debian systemd[1]: Starting Raise network interfaces...\r\nNov 17 04:03:47 debian google_disk_expand[309]: resize2fs 1.46.2 (28-Feb-2021)\r\nNov 17 04:03:47 debian google_disk_expand[309]: The filesystem is already 2588667 (4k) blocks long. Nothing to do!\r\nNov 17 04:03:47 debian google_disk_expand[299]: Done.\r\nNov 17 04:03:47 debian systemd[1]: google-disk-expand.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Resize root filesystem if needed.\r\nNov 17 04:03:47 debian systemd[1]: Reached target Basic System.\r\nNov 17 04:03:47 debian systemd[1]: Started Regular background program processing daemon.\r\nNov 17 04:03:47 debian systemd[1]: Started D-Bus System Message Bus.\r\nNov 17 04:03:47 debian systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\r\nNov 17 04:03:47 debian dhclient[321]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:47 debian sh[321]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:47 debian dhclient[321]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:47 debian sh[321]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:47 debian dhclient[321]: All rights reserved.\r\nNov 17 04:03:47 debian sh[321]: All rights reserved.\r\nNov 17 04:03:47 debian dhclient[321]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:47 debian sh[321]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:47 debian dhclient[321]: \r\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\r\nNov 17 04:03:47 debian systemd[1]: Starting System Logging Service...\r\nNov 17 04:03:47 debian systemd[1]: Starting User Login Management...\r\nNov 17 04:03:47 debian systemd[1]: Started System Logging Service.\r\nNov 17 04:03:47 debian ifup[304]: ifup: waiting for lock on /run/network/ifstate.ens4\r\nNov 17 04:03:47 debian dhclient[321]: Listening on LPF/ens4/42:01:0a:9a:00:0c\r\nNov 17 04:03:47 debian sh[321]: Listening on LPF/ens4/42:01:0a:9a:00:0c\r\nNov 17 04:03:47 debian sh[321]: Sending on LPF/ens4/42:01:0a:9a:00:0c\r\nNov 17 04:03:47 debian sh[321]: Sending on Socket/fallback\r\nNov 17 04:03:47 debian sh[321]: Created duid \"\\000\\001\\000\\001,\\351\\242\\243B\\001\\012\\232\\000\\014\".\r\nNov 17 04:03:47 debian sh[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nNov 17 04:03:47 debian dhclient[321]: Sending on LPF/ens4/42:01:0a:9a:00:0c\r\nNov 17 04:03:47 debian dhclient[321]: Sending on Socket/fallback\r\nNov 17 04:03:47 debian dhclient[321]: Created duid \"\\000\\001\\000\\001,\\351\\242\\243B\\001\\012\\232\\000\\014\".\r\nNov 17 04:03:47 debian dhclient[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nNov 17 04:03:47 debian dhclient[321]: DHCPOFFER of 10.154.0.12 from 169.254.169.254\r\nNov 17 04:03:47 debian sh[321]: DHCPOFFER of 10.154.0.12 from 169.254.169.254\r\nNov 17 04:03:47 debian sh[321]: DHCPREQUEST for 10.154.0.12 on ens4 to 255.255.255.255 port 67\r\nNov 17 04:03:47 debian dhclient[321]: DHCPREQUEST for 10.154.0.12 on ens4 to 255.255.255.255 port 67\r\nNov 17 04:03:47 debian dhclient[321]: DHCPACK of 10.154.0.12 from 169.254.169.254\r\nNov 17 04:03:47 debian sh[321]: DHCPACK of 10.154.0.12 from 169.254.169.254\r\nNov 17 04:03:47 debian systemd[1]: Started User Login Management.\r\nNov 17 04:03:47 debian dhclient[321]: bound to 10.154.0.12 -- renewal in 32899 seconds.\r\nNov 17 04:03:47 debian sh[321]: bound to 10.154.0.12 -- renewal in 32899 seconds.\r\nNov 17 04:03:47 debian haveged[298]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\r\nNov 17 04:03:47 debian haveged[298]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\r\nNov 17 04:03:47 debian haveged[298]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B): last entropy estimate 7.99739\r\nNov 17 04:03:47 debian haveged[298]: haveged: fills: 0, generated: 0\r\nNov 17 04:03:47 debian systemd[1]: e2scrub_reap.service: Succeeded.\r\nNov 17 04:03:47 debian systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\r\nNov 17 04:03:49 debian dhclient[435]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:49 debian sh[435]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:49 debian dhclient[435]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:49 debian sh[435]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:49 debian dhclient[435]: All rights reserved.\r\nNov 17 04:03:49 debian sh[435]: All rights reserved.\r\nNov 17 04:03:49 debian dhclient[435]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:49 debian sh[435]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:49 debian dhclient[435]: \r\nNov 17 04:03:49 debian dhclient[435]: Listening on Socket/ens4\r\nNov 17 04:03:49 debian sh[435]: Listening on Socket/ens4\r\nNov 17 04:03:49 debian sh[435]: Sending on Socket/ens4\r\nNov 17 04:03:49 debian sh[435]: PRC: Soliciting for leases (INIT).\r\nNov 17 04:03:49 debian dhclient[435]: Sending on Socket/ens4\r\nNov 17 04:03:49 debian dhclient[435]: XMT: Solicit on ens4, interval 1010ms.\r\nNov 17 04:03:49 debian sh[468]: ens4=ens4\r\n Starting \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m...\r\n Starting \u001b[0;1;39mNSS cache refresh\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:03:49 debian systemd[1]: Starting NSS cache refresh...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRaise network interfaces\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Raise network interfaces.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Network.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Network is Online.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork is Online\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Starting chrony, an NTP client/server...\r\n Starting \u001b[0;1;39mchrony, an NTP client/server\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Guest Agent...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Started Google OSConfig Agent.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle OSConfig Agent\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Shutdown Scripts...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Starting Permit User Sessions...\r\n Starting \u001b[0;1;39mPermit User Sessions\u001b[0m...\r\nNov 17 04:03:49 debian systemd[1]: Started Unattended Upgrades Shutdown.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUnattended Upgrades Shutdown\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Google Compute Engine Shutdown Scripts.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mPermit User Sessions\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Finished Permit User Sessions.\r\nNov 17 04:03:49 debian systemd[1]: Started Getty on tty1.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGetty on tty1\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Serial Getty on ttyS0.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSerial Getty on ttyS0\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Login Prompts.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLogin Prompts\u001b[0m.\r\nNov 17 04:03:49 debian chronyd[498]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\r\nNov 17 04:03:49 debian google_oslogin_nss_cache[471]: oslogin_cache_refresh[471]: Refreshing passwd entry cache\r\nNov 17 04:03:49 debian chronyd[498]: Loaded seccomp filter\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mchrony, an NTP client/server\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Synchronized\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt download activities\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt upgrade and clean activities\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started chrony, an NTP client/server.\r\nNov 17 04:03:49 debian systemd[1]: Reached target System Time Synchronized.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily apt download activities.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily apt upgrade and clean activities.\r\nNov 17 04:03:49 debian systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily exim4-base housekeeping.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily exim4-base housekeeping\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Discard unused blocks once a week.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDiscard unused blocks once a week\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily rotation of log files.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily rotation of log files\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Started Daily man-db regeneration.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily man-db regeneration\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Reached target Timers.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mTimers\u001b[0m.\r\nNov 17 04:03:49 debian systemd[1]: Starting LSB: exim Mail Transport Agent...\r\n Starting \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m...\r\nNov 17 04:03:50 debian google_oslogin_nss_cache[471]: oslogin_cache_refresh[471]: Refreshing group entry cache\r\nNov 17 04:03:50 debian dhclient[435]: XMT: Solicit on ens4, interval 2000ms.\r\nNov 17 04:03:50 debian exim4[504]: Starting MTA:\r\nNov 17 04:03:50 debian exim4[522]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\r\nNov 17 04:03:51 debian gce_workload_cert_refresh[470]: 2023/11/17 04:03:51: Done\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m.\r\nNov 17 04:03:51 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:03:51 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:03:51 debian google_guest_agent[487]: GCE Agent Started (version 20231115.00)\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mNSS cache refresh\u001b[0m.\r\nNov 17 04:03:51 debian systemd[1]: google-oslogin-cache.service: Succeeded.\r\nNov 17 04:03:51 debian systemd[1]: Finished NSS cache refresh.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m.\r\nNov 17 04:03:51 debian exim4[504]: exim4.\r\nNov 17 04:03:51 debian systemd[1]: Started LSB: exim Mail Transport Agent.\r\nNov 17 04:03:52 debian google_guest_agent[487]: Instance ID changed, running first-boot actions\r\nNov 17 04:03:52 debian OSConfigAgent[489]: 2023-11-17T04:03:52.2878Z OSConfigAgent Info: OSConfig Agent (version 20231010.00-g1) started.\r\nNov 17 04:03:52 debian google_guest_agent[487]: Starting the scheduler to run jobs\r\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduler - start: []\r\nNov 17 04:03:52 debian google_guest_agent[487]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\r\nNov 17 04:03:52 debian google_guest_agent[487]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Started Google Compute Engine Guest Agent.\r\nNov 17 04:03:52 debian systemd[1]: Starting Google Compute Engine Startup Scripts...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Startup Scripts\u001b[0m...\r\nNov 17 04:03:52 debian systemd[1]: Starting OpenBSD Secure Shell server...\r\n Starting \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m...\r\nNov 17 04:03:52 debian google_guest_agent[487]: Starting the scheduler to run jobs\r\nNov 17 04:03:52 debian google_guest_agent[487]: No restorecon available, not restoring SELinux context of: /etc/ssh/oslogin_trustedca.pub\r\nNov 17 04:03:52 debian google_guest_agent[487]: Enabling OS Login\r\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduling job: telemetryJobID\r\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduling job \"telemetryJobID\" to run at 24.000000 hr interval\r\nNov 17 04:03:52 debian google_guest_agent[487]: Successfully scheduled job telemetryJobID\r\nNov 17 04:03:52 debian google_guest_agent[487]: Invoking job \"telemetryJobID\"\r\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduler - added: [now 2023-11-17 04:03:52.503242685 +0000 UTC entry 1 next 2023-11-18 04:03:52 +0000 UTC]\r\nNov 17 04:03:52 debian dhclient[435]: XMT: Solicit on ens4, interval 4010ms.\r\nNov 17 04:03:52 debian dhclient[826]: Internet Systems Consortium DHCP Client 4.4.1\r\nNov 17 04:03:52 debian dhclient[826]: Copyright 2004-2018 Internet Systems Consortium.\r\nNov 17 04:03:52 debian dhclient[826]: All rights reserved.\r\nNov 17 04:03:52 debian dhclient[826]: For info, please visit https://www.isc.org/software/dhcp/\r\nNov 17 04:03:52 debian dhclient[826]: \r\nNov 17 04:03:52 debian dhclient[826]: Listening on Socket/ens4\r\nNov 17 04:03:52 debian dhclient[826]: Sending on Socket/ens4\r\nNov 17 04:03:52 debian dhclient[826]: Created duid \"\\000\\001\\000\\001,\\351\\242\\250B\\001\\012\\232\\000\\014\".\r\nNov 17 04:03:52 debian google_guest_agent[487]: Created google sudoers file\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Started OpenBSD Secure Shell server.\r\nNov 17 04:03:52 debian systemd[1]: Stopping User Login Management...\r\n Stopping \u001b[0;1;39mUser Login Management\u001b[0m...\r\nNov 17 04:03:52 debian systemd[1]: systemd-logind.service: Succeeded.\r\nNov 17 04:03:52 debian systemd[1]: Stopped User Login Management.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mUser Login Management\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\nNov 17 04:03:52 debian systemd[1]: modprobe@drm.service: Succeeded.\r\nNov 17 04:03:52 debian systemd[1]: Finished Load Kernel Module drm.\r\nNov 17 04:03:52 debian systemd[1]: Starting User Login Management...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Started User Login Management.\r\nNov 17 04:03:52 debian systemd[1]: Stopping Regular background program processing daemon...\r\n Stopping \u001b[0;1;39mRegular background program processing daemon\u001b[0m...\r\nNov 17 04:03:52 debian systemd[1]: cron.service: Succeeded.\r\nNov 17 04:03:52 debian systemd[1]: Stopped Regular background program processing daemon.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Started Regular background program processing daemon.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\nNov 17 04:03:52 debian systemd[1]: Reloading OpenBSD Secure Shell server.\r\nNov 17 04:03:52 debian systemd[1]: Reloaded OpenBSD Secure Shell server.\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: Starting startup scripts (version dev).\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: Found startup-script in metadata.\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Hit:1 https://deb.debian.org/debian bullseye InRelease\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:2 https://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:3 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:4 https://deb.debian.org/debian bullseye-backports InRelease [49.0 kB]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:5 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease [5146 B]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Hit:6 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:7 https://deb.debian.org/debian-security bullseye-security/main Sources [160 kB]\r\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:8 https://deb.debian.org/debian-security bullseye-security/main amd64 Packages [258 kB]\r\nNov 17 04:03:54 debian google_metadata_script_runner[822]: startup-script: Fetched 564 kB in 1s (776 kB/s)\r\nNov 17 04:03:54 debian chronyd[498]: Selected source 169.254.169.254 (metadata.google.internal)\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Building dependency tree...\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading state information...\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: The following NEW packages will be installed:\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: apt-transport-https\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Need to get 160 kB of archives.\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: After this operation, 166 kB of additional disk space will be used.\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Get:1 https://deb.debian.org/debian bullseye/main amd64 apt-transport-https all 2.2.4 [160 kB]\r\n\r\r\nDebian GNU/Linux 11 valid-linux-ssh ttyS0\r\n\r\nvalid-linux-ssh login: Nov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Dialog\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Readline\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Readline\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, \u003c\u003e line 1.)\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Teletype\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: dpkg-preconfigure: unable to re-open stdin:\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Fetched 160 kB in 0s (3831 kB/s)\r\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Selecting previously unselected package apt-transport-https.\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: (Reading database ... #015(Reading database ... 5%#015(Reading database ... 10%#015(Reading database ... 15%#015(Reading database ... 20%#015(Reading database ... 25%#015(Reading database ... 30%#015(Reading database ... 35%#015(Reading database ... 40%#015(Reading database ... 45%#015(Reading database ... 50%#015(Reading database ... 55%#015(Reading database ... 60%#015(Reading database ... 65%#015(Reading database ... 70%#015(Reading database ... 75%#015(Reading database ... 80%#015(Reading database ... 85%#015(Reading database ... 90%#015(Reading database ... 95%#015(Reading database ... 100%#015(Reading database ... 59476 files and directories currently installed.)\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Preparing to unpack .../apt-transport-https_2.2.4_all.deb ...\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Unpacking apt-transport-https (2.2.4) ...\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Setting up apt-transport-https (2.2.4) ...\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Adding agent repository for debian.\r\nNov 17 04:03:56 debian dhclient[435]: XMT: Solicit on ens4, interval 8170ms.\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: deb [signed-by=/usr/share/keyrings/google-cloud-ops-agent-keyring.gpg] https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all main\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:1 https://deb.debian.org/debian bullseye InRelease\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:2 https://deb.debian.org/debian-security bullseye-security InRelease\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:3 https://deb.debian.org/debian bullseye-updates InRelease\r\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:4 https://deb.debian.org/debian bullseye-backports InRelease\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Get:5 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all InRelease [5115 B]\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Hit:6 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Hit:7 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Get:8 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all/main amd64 Packages [7973 B]\r\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Fetched 13.1 kB in 1s (19.6 kB/s)\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Building dependency tree...\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading state information...\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: The following NEW packages will be installed:\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: google-cloud-ops-agent\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Need to get 92.1 MB of archives.\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: After this operation, 398 MB of additional disk space will be used.\r\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Get:1 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all/main amd64 google-cloud-ops-agent amd64 2.43.0~debian11 [92.1 MB]\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Dialog\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Readline\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Readline\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, \u003c\u003e line 1.)\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Teletype\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: dpkg-preconfigure: unable to re-open stdin:\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Fetched 92.1 MB in 2s (45.1 MB/s)\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Selecting previously unselected package google-cloud-ops-agent.\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: (Reading database ... #015(Reading database ... 5%#015(Reading database ... 10%#015(Reading database ... 15%#015(Reading database ... 20%#015(Reading database ... 25%#015(Reading database ... 30%#015(Reading database ... 35%#015(Reading database ... 40%#015(Reading database ... 45%#015(Reading database ... 50%#015(Reading database ... 55%#015(Reading database ... 60%#015(Reading database ... 65%#015(Reading database ... 70%#015(Reading database ... 75%#015(Reading database ... 80%#015(Reading database ... 85%#015(Reading database ... 90%#015(Reading database ... 95%#015(Reading database ... 100%#015(Reading database ... 59480 files and directories currently installed.)\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Preparing to unpack .../google-cloud-ops-agent_2.43.0~debian11_amd64.deb ...\r\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Unpacking google-cloud-ops-agent (2.43.0~debian11) ...\r\nNov 17 04:04:04 debian dhclient[435]: XMT: Solicit on ens4, interval 15830ms.\r\nNov 17 04:04:13 debian google_metadata_script_runner[822]: startup-script: Setting up google-cloud-ops-agent (2.43.0~debian11) ...\r\nNov 17 04:04:13 debian google_metadata_script_runner[822]: startup-script: Created symlink /etc/systemd/system/multi-user.target.wants/google-cloud-ops-agent.service → /lib/systemd/system/google-cloud-ops-agent.service.\r\nNov 17 04:04:13 debian systemd[1]: Reloading.\r\nNov 17 04:04:14 debian systemd[1]: Reloading.\r\nNov 17 04:04:14 debian systemd[1]: Started Google Cloud Ops Agent - Diagnostics.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Cloud Ops Agent - Diagnostics\u001b[0m.\r\n Starting \u001b[0;1;39mGoogle Cloud Ops Agent\u001b[0m...\r\nNov 17 04:04:14 debian systemd[1]: Starting Google Cloud Ops Agent...\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:17 Built-in config:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: logging:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: syslog:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: files\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: include_paths:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: - /var/log/messages\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: - /var/log/syslog\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: service:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: pipelines:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: default_pipeline:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers: [syslog]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: hostmetrics:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: hostmetrics\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: collection_interval: 60s\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: processors:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics_filter:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: exclude_metrics\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics_pattern: []\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: service:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: pipelines:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: default_pipeline:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers: [hostmetrics]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: processors: [metrics_filter]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:17 Merged config:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: logging:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: syslog:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: files\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: include_paths:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: - /var/log/messages\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: - /var/log/syslog\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: service:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: pipelines:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: default_pipeline:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers: [syslog]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: hostmetrics:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: hostmetrics\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: collection_interval: 60s\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: processors:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics_filter:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: type: exclude_metrics\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics_pattern: []\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: service:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: pipelines:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: default_pipeline:\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: receivers: [hostmetrics]\r\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: processors: [metrics_filter]\r\nNov 17 04:04:20 debian dhclient[435]: XMT: Solicit on ens4, interval 32060ms.\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [Ports Check] Result: PASS\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [Network Check] Result: PASS\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [API Check] Result: FAIL, Error code: MonApiDisabledErr, Failure: The Monitoring API is disabled in the current Google Cloud project., Solution: Enable Monitoring API in the current Google Cloud project., Resource: https://cloud.google.com/monitoring/api/enable-api\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [API Check] Result: FAIL, Error code: LogApiDisabledErr, Failure: The Logging API is disabled in the current Google Cloud project., Solution: Enable Logging API in the current Google Cloud project., Resource: https://cloud.google.com/logging/docs/api/enable-api\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 Startup checks finished\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Cloud Ops Agent\u001b[0m.\r\nNov 17 04:04:24 debian systemd[1]: Finished Google Cloud Ops Agent.\r\nNov 17 04:04:24 debian systemd[1]: Starting Google Cloud Ops Agent - Logging Agent...\r\n Starting \u001b[0;1;39mGoogle Cloud Ops Agent - Logging Agent\u001b[0m...\r\nNov 17 04:04:24 debian systemd[1]: Starting Google Cloud Ops Agent - Metrics Agent...\r\n Starting \u001b[0;1;39mGoogle Cloud Ops Agent - Metrics Agent\u001b[0m...\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: 2023/11/17 04:04:24 Built-in config:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: logging:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: syslog:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: files\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: include_paths:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: - /var/log/messages\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: - /var/log/syslog\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers: [syslog]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: hostmetrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: hostmetrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: collection_interval: 60s\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: processors:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics_filter:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: exclude_metrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics_pattern: []\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers: [hostmetrics]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: processors: [metrics_filter]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: 2023/11/17 04:04:24 Merged config:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: logging:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: syslog:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: files\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: include_paths:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: - /var/log/messages\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: - /var/log/syslog\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers: [syslog]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: hostmetrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: hostmetrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: collection_interval: 60s\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: processors:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics_filter:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: type: exclude_metrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics_pattern: []\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: receivers: [hostmetrics]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: processors: [metrics_filter]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: 2023/11/17 04:04:24 Built-in config:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: logging:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: syslog:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: files\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: include_paths:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: - /var/log/messages\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: - /var/log/syslog\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers: [syslog]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: hostmetrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: hostmetrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: collection_interval: 60s\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: processors:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics_filter:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: exclude_metrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics_pattern: []\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers: [hostmetrics]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: processors: [metrics_filter]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: 2023/11/17 04:04:24 Merged config:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: logging:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: syslog:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: files\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: include_paths:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: - /var/log/messages\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: - /var/log/syslog\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers: [syslog]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: hostmetrics:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: hostmetrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: collection_interval: 60s\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: processors:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics_filter:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: type: exclude_metrics\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics_pattern: []\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: service:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: pipelines:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: default_pipeline:\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: receivers: [hostmetrics]\r\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: processors: [metrics_fil[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Cloud Ops Agent - Logging Agent\u001b[0m.\r\nter]\r\nNov 17 04:04:24 debian systemd[1]: Started Google Cloud Ops Agent - Logging Agent.\r\nNov 17 04:04:24 debian systemd[1]: Started Google Cloud Ops Agent - Metrics Agent.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Cloud Ops Agent - Metrics Agent\u001b[0m.\r\nNov 17 04:04:28 debian google_metadata_script_runner[822]: startup-script: google-cloud-ops-agent installation succeeded.\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:04:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 12345601 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=11112222 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:04:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Compute Engine Startup Scripts\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mMulti-User System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mGraphical Interface\u001b[0m.\r\n Starting \u001b[0;1;39mUpdate UTMP about System Runlevel Changes\u001b[0m...\r\nNov 17 04:04:29 debian google_metadata_script_runner[822]: startup-script exit status 0\r\nNov 17 04:04:29 debian google_metadata_script_runner[822]: Finished running startup scripts.\r\nNov 17 04:04:29 debian systemd[1]: google-startup-scripts.service: Succeeded.\r\nNov 17 04:04:29 debian systemd[1]: Finished Google Compute Engine Startup Scripts.\r\nNov 17 04:04:29 debian systemd[1]: google-startup-scripts.service: Consumed 15.644s CPU time.\r\nNov 17 04:04:29 debian systemd[1]: Reached target Multi-User System.\r\nNov 17 04:04:29 debian systemd[1]: Reached target Graphical Interface.\r\nNov 17 04:04:29 debian systemd[1]: Starting Update UTMP about System Runlevel Changes...\r\nNov 17 04:04:29 debian systemd[1]: systemd-update-utmp-runlevel.service: Succeeded.\r\nNov 17 04:04:29 debian systemd[1]: Finished Update UTMP about System Runlevel Changes.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mUpdate UTMP about System Runlevel Changes\u001b[0m.\r\nNov 17 04:04:29 debian systemd[1]: Startup finished in 1.399s (kernel) + 44.740s (userspace) = 46.140s.\r\n[ 46.434139] process 'subagents/fluent-bit/bin/fluent-bit' started with executable stack\r\nNov 17 04:04:29 debian kernel: [ 46.434139] process 'subagents/fluent-bit/bin/fluent-bit' started with executable stack\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.529Z#011info#011service/telemetry.go:81#011Setting up own telemetry...\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.565Z#011info#011service/telemetry.go:104#011Serving Prometheus metrics#011{\"address\": \"0.0.0.0:20201\", \"level\": \"Basic\"}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.642Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\"include match_type\": \"\", \"include expressions\": [], \"include metric names\": [], \"include metrics with resource attributes\": null, \"exclude match_type\": \"regexp\", \"exclude expressions\": [], \"exclude metric names\": [], \"exclude metrics with resource attributes\": null}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.649Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\"include match_type\": \"\", \"include expressions\": [], \"include metric names\": [], \"include metrics with resource attributes\": null, \"exclude match_type\": \"strict\", \"exclude expressions\": [], \"exclude metric names\": [\"system.cpu.time\", \"system.network.dropped\", \"system.filesystem.inodes.usage\", \"system.paging.faults\", \"system.disk.operation_time\"], \"exclude metrics with resource attributes\": null}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.649Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\"include match_type\": \"strict\", \"include expressions\": [], \"include metric names\": [\"otelcol_process_uptime\", \"otelcol_process_memory_rss\", \"otelcol_grpc_io_client_completed_rpcs\", \"otelcol_googlecloudmonitoring_point_count\"], \"include metrics with resource attributes\": null, \"exclude match_type\": \"\", \"exclude expressions\": [], \"exclude metric names\": [], \"exclude metrics with resource attributes\": null}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\"include match_type\": \"strict\", \"include expressions\": [], \"include metric names\": [\"fluentbit_uptime\", \"fluentbit_stackdriver_requests_total\", \"fluentbit_stackdriver_proc_records_total\", \"fluentbit_stackdriver_retried_records_total\"], \"include metrics with resource attributes\": null, \"exclude match_type\": \"\", \"exclude expressions\": [], \"exclude metric names\": [], \"exclude metrics with resource attributes\": null}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011service/service.go:131#011Starting google-cloud-metrics-agent...#011{\"Version\": \"latest\", \"NumCPU\": 1}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011extensions/extensions.go:30#011Starting extensions...\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.743Z#011info#011internal/resourcedetection.go:125#011began detecting resource information\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.760Z#011info#011internal/resourcedetection.go:139#011detected resource information#011{\"resource\": {\"cloud.account.id\":\"gcpdiag-gce-faultyssh-runbook\",\"cloud.availability_zone\":\"europe-west2-a\",\"cloud.platform\":\"gcp_compute_engine\",\"cloud.provider\":\"gcp\",\"cloud.region\":\"europe-west2\",\"host.id\":\"4683873813257738493\",\"host.name\":\"valid-linux-ssh\",\"host.type\":\"projects/328022628735/machineTypes/e2-micro\"}}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.772Z#011info#011prometheusreceiver/metrics_receiver.go:243#011Scrape job added#011{\"jobName\": \"logging-collector\"}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.781Z#011info#011prometheusreceiver/metrics_receiver.go:255#011Starting discovery manager\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.802Z#011info#011prometheusreceiver/metrics_receiver.go:243#011Scrape job added#011{\"jobName\": \"otel-collector\"}\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.802Z#011info#011service/service.go:148#011Everything is ready. Begin running and processing data.\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.824Z#011info#011prometheusreceiver/metrics_receiver.go:290#011Starting scrape manager\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.824Z#011info#011prometheusreceiver/metrics_receiver.go:255#011Starting discovery manager\r\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.825Z#011info#011prometheusreceiver/metrics_receiver.go:290#011Starting scrape manager\r\nNov 17 04:04:33 debian otelopscol[2111]: 2023-11-17T04:04:33.924Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:04:52 debian dhclient[435]: XMT: Solicit on ens4, interval 66360ms.\r\nNov 17 04:05:24 debian otelopscol[2111]: 2023-11-17T04:05:24.519Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:05:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:05:58 debian dhclient[435]: XMT: Solicit on ens4, interval 109720ms.\r\nNov 17 04:06:21 debian otelopscol[2111]: 2023-11-17T04:06:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:06:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:06:33 debian otelopscol[2111]: 2023-11-17T04:06:33.885Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:07:21 debian otelopscol[2111]: 2023-11-17T04:07:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:07:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:07:33 debian otelopscol[2111]: 2023-11-17T04:07:33.868Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:07:48 debian dhclient[435]: XMT: Solicit on ens4, interval 119890ms.\r\nNov 17 04:08:21 debian otelopscol[2111]: 2023-11-17T04:08:21.904Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:08:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:08:33 debian otelopscol[2111]: 2023-11-17T04:08:33.885Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:09:21 debian otelopscol[2111]: 2023-11-17T04:09:21.913Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:09:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:09:33 debian otelopscol[2111]: 2023-11-17T04:09:33.868Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:09:48 debian dhclient[435]: XMT: Solicit on ens4, interval 123690ms.\r\nNov 17 04:10:21 debian otelopscol[2111]: 2023-11-17T04:10:21.909Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:10:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:10:33 debian otelopscol[2111]: 2023-11-17T04:10:33.892Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:11:21 debian otelopscol[2111]: 2023-11-17T04:11:21.906Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:11:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:11:33 debian otelopscol[2111]: 2023-11-17T04:11:33.860Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:11:52 debian dhclient[435]: XMT: Solicit on ens4, interval 124490ms.\r\nNov 17 04:12:21 debian otelopscol[2111]: 2023-11-17T04:12:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:12:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:12:33 debian otelopscol[2111]: 2023-11-17T04:12:33.865Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:13:21 debian otelopscol[2111]: 2023-11-17T04:13:21.914Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:13:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:13:33 debian otelopscol[2111]: 2023-11-17T04:13:33.864Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:13:56 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:13:56 debian gce_workload_cert_refresh[2146]: 2023/11/17 04:13:56: Done\r\nNov 17 04:13:56 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:13:56 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\nNov 17 04:13:56 debian dhclient[435]: XMT: Solicit on ens4, interval 126650ms.\r\nNov 17 04:14:21 debian otelopscol[2111]: 2023-11-17T04:14:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:14:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:14:33 debian otelopscol[2111]: 2023-11-17T04:14:33.864Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:15:21 debian otelopscol[2111]: 2023-11-17T04:15:21.909Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:15:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:15:33 debian otelopscol[2111]: 2023-11-17T04:15:33.859Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:16:03 debian dhclient[435]: XMT: Solicit on ens4, interval 110910ms.\r\nNov 17 04:16:21 debian otelopscol[2111]: 2023-11-17T04:16:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:16:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:16:33 debian otelopscol[2111]: 2023-11-17T04:16:33.874Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:17:21 debian otelopscol[2111]: 2023-11-17T04:17:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:17:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:17:33 debian otelopscol[2111]: 2023-11-17T04:17:33.863Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:17:54 debian dhclient[435]: XMT: Solicit on ens4, interval 111550ms.\r\nNov 17 04:18:21 debian otelopscol[2111]: 2023-11-17T04:18:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:18:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:18:33 debian otelopscol[2111]: 2023-11-17T04:18:33.861Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:18:56 debian systemd[1]: Starting Cleanup of Temporary Directories...\r\nNov 17 04:18:56 debian systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\r\nNov 17 04:18:56 debian systemd[1]: Finished Cleanup of Temporary Directories.\r\nNov 17 04:19:21 debian otelopscol[2111]: 2023-11-17T04:19:21.908Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:19:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:19:33 debian otelopscol[2111]: 2023-11-17T04:19:33.858Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:19:45 debian dhclient[435]: XMT: Solicit on ens4, interval 110200ms.\r\nNov 17 04:20:21 debian otelopscol[2111]: 2023-11-17T04:20:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:20:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:20:33 debian otelopscol[2111]: 2023-11-17T04:20:33.862Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:21:21 debian otelopscol[2111]: 2023-11-17T04:21:21.904Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:21:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:21:33 debian otelopscol[2111]: 2023-11-17T04:21:33.856Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:21:36 debian dhclient[435]: XMT: Solicit on ens4, interval 124490ms.\r\nNov 17 04:22:21 debian otelopscol[2111]: 2023-11-17T04:22:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:22:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:22:33 debian otelopscol[2111]: 2023-11-17T04:22:33.849Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:23:21 debian otelopscol[2111]: 2023-11-17T04:23:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:23:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:23:33 debian otelopscol[2111]: 2023-11-17T04:23:33.855Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:23:40 debian dhclient[435]: XMT: Solicit on ens4, interval 113100ms.\r\nNov 17 04:24:21 debian otelopscol[2111]: 2023-11-17T04:24:21.908Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}\r\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:24:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\r\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\r\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\r\nNov 17 04:24:33 debian otelopscol[2111]: 2023-11-17T04:24:33.853Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\", \"errorCauses\": [{\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}, {\"error\": \"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\"}]}\r\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\r\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\r\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\r\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\r\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\r\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\r\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\r\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\r\nNov 17 04:24:56 debian systemd[1]: Starting GCE Workload Certificate refresh...\r\nNov 17 04:24:56 debian gce_workload_cert_refresh[2159]: 2023/11/17 04:24:56: Done\r\nNov 17 04:24:56 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nNov 17 04:24:56 debian systemd[1]: Finished GCE Workload Certificate refresh.\r\n", "start": "0", "next": "311872", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh/serialPortOutput" } ================================================ FILE: test-data/gce4/json-dumps/compute-serial-port-output-valid-windows-ssh.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n\r\n\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[1m\u001b[37m\u001b[40m\u001b[2J\u001b[01;01H2023/11/17 04:04:27 GCEGuestAgent: GCE Agent Started (version 20231004.02)\n2023/11/17 04:04:27 GCEGuestAgent: Adding route to metadata server on adapter with index 5\n2023/11/17 04:04:28 GCEGuestAgent: Starting the scheduler to run jobs\n2023/11/17 04:04:28 GCEGuestAgent: start: []\n2023/11/17 04:04:28 GCEGuestAgent: Successfully scheduled job telemetryJobID\n2023/11/17 04:10:04 GCEInstanceSetup: Enable google_osconfig_agent during the specialize configuration pass.\n2023/11/17 04:10:13 GCEInstanceSetup: Starting sysprep specialize phase.\n2023/11/17 04:10:31 GCEInstanceSetup: All networks set to DHCP.\n2023/11/17 04:10:32 GCEInstanceSetup: VirtIO network adapter detected.\n2023/11/17 04:10:33 GCEInstanceSetup: Running 'netsh' with arguments 'interface ipv4 set interface Ethernet mtu=1460'\n2023/11/17 04:10:44 GCEInstanceSetup: --\u003e Ok.\n2023/11/17 04:10:44 GCEInstanceSetup: MTU set to 1460.\n2023/11/17 04:10:44 GCEInstanceSetup: Running 'route' with arguments '/p add 169.254.169.254 mask 255.255.255.255 0.0.0.0 if 5 metric 1'\n2023/11/17 04:10:45 GCEInstanceSetup: --\u003e OK!\n2023/11/17 04:10:57 GCEInstanceSetup: Getting hostname from metadata server.\n2023/11/17 04:10:58 GCEInstanceSetup: Renamed from WIN-4VMNVNB0HQV to valid-windows-ssh.\n2023/11/17 04:10:58 GCEInstanceSetup: Configuring WinRM...\n2023/11/17 04:11:15 GCEInstanceSetup: Running 'C:\\Program Files\\Google\\Compute Engine\\tools\\certgen.exe' with arguments '-outDir C:\\Windows\\TEMP\\cert -hostname valid-windows-ssh'\n2023/11/17 04:11:19 GCEInstanceSetup: --\u003e written C:\\Windows\\TEMP\\cert\\cert.p12\n2023/11/17 04:11:21 GCEInstanceSetup: Waiting for WinRM to be running...\n2023/11/17 04:11:30 GCEInstanceSetup: Setup of WinRM complete.\n2023/11/17 04:11:32 GCEMetadataScripts: Starting specialize scripts (version 20231004.02).\n2023/11/17 04:11:32 GCEMetadataScripts: No specialize scripts to run.\n2023/11/17 04:11:32 GCEInstanceSetup: Finished with sysprep specialize phase, restarting...\n2023/11/17 04:11:49 GCEGuestAgent: Error watching metadata: context canceled\n2023/11/17 04:11:51 GCEGuestAgent: GCE Agent Stopped\n\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0003 \"Windows Boot Manager\" from HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\EFI\\Microsoft\\Boot\\bootmgfw.efi\r\nBdsDxe: starting Boot0003 \"Windows Boot Manager\" from HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\EFI\\Microsoft\\Boot\\bootmgfw.efi\r\n\r\nUEFI: Attempting to start image.\r\nDescription: Windows Boot Manager\r\nFilePath: HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\EFI\\Microsoft\\Boot\\bootmgfw.efi\r\nOptionNumber: 3.\r\n\r\n\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[1m\u001b[37m\u001b[40m\u001b[2J\u001b[01;01H2023/11/17 04:14:43 GCEInstanceSetup: Enable google_osconfig_agent during the specialize configuration pass.\n2023/11/17 04:14:54 GCEInstanceSetup: WinRM certificate details: Subject: CN=valid-windows-ssh, Thumbprint: DF776825E4EFC3C6755C172199C8467279BDBD3D\n2023/11/17 04:14:54 GCEInstanceSetup: RDP certificate details: Subject: CN=valid-windows-ssh, Thumbprint: 1998E382AD653F50CBBB2BD661F96F64DD7B89F7\n2023/11/17 04:15:04 GCEInstanceSetup: Checking instance license activation status.\n2023/11/17 04:15:19 GCEInstanceSetup: valid-windows-ssh needs to be activated by a KMS Server.\n2023/11/17 04:15:21 GCEInstanceSetup: Key Management Service machine name set to kms.windows.googlecloud.com successfully.\n2023/11/17 04:15:27 GCEInstanceSetup: Installed product key WMDGN-G9PQG-XVVXX-R3X43-63DFG successfully.\n2023/11/17 04:15:27 GCEInstanceSetup: Activating instance...\n2023/11/17 04:15:47 GCEInstanceSetup: Activating Windows(R), ServerDatacenter edition (34e1ae55-27f8-4950-8877-7a03be5fb181) ...\n2023/11/17 04:15:47 GCEInstanceSetup: Product activated successfully.\n2023/11/17 04:15:50 GCEInstanceSetup: Activation successful.\n2023/11/17 04:15:50 GCEInstanceSetup: Running 'schtasks' with arguments '/change /tn GCEStartup /enable'\n2023/11/17 04:15:51 GCEInstanceSetup: --\u003e SUCCESS: The parameters of scheduled task \"GCEStartup\" have been changed.\n2023/11/17 04:15:51 GCEInstanceSetup: Running 'schtasks' with arguments '/run /tn GCEStartup'\n2023/11/17 04:15:51 GCEInstanceSetup: --\u003e SUCCESS: Attempted to run the scheduled task \"GCEStartup\".\n2023/11/17 04:15:51 GCEInstanceSetup: ------------------------------------------------------------\n2023/11/17 04:15:51 GCEInstanceSetup: Instance setup finished. valid-windows-ssh is ready to use.\n2023/11/17 04:15:51 GCEInstanceSetup: ------------------------------------------------------------\n2023/11/17 04:16:06 GCEMetadataScripts: Starting startup scripts (version 20231004.02).\n2023/11/17 04:16:09 GCEMetadataScripts: No startup scripts to run.\n2023/11/17 04:16:10 GCEGuestAgent: GCE Agent Started (version 20231004.02)\n2023/11/17 04:16:17 GCEGuestAgent: Starting the scheduler to run jobs\n2023/11/17 04:16:19 GCEGuestAgent: start: []\n2023/11/17 04:16:20 GCEGuestAgent: Scheduling job \"telemetryJobID\" to run at 24.000000 hr interval\n2023/11/17 04:16:20 GCEGuestAgent: Successfully scheduled job telemetryJobID\n2023/11/17 04:16:20 GCEGuestAgent: added: [now 2023-11-17 04:16:20.6575916 +0000 GMT entry 1 next 2023-11-18 04:16:20 +0000 GMT]\n2023-11-17T04:16:37.9296Z OSConfigAgent Info: OSConfig Agent (version 20231010.00.0+win@1) started.\n", "start": "0", "next": "5789", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/valid-windows-ssh/serialPortOutput" } ================================================ FILE: test-data/gce4/json-dumps/compute-subnetwork-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com" ], "role": "roles/compute.networkUser" } ], "etag": "BwXba-kLoiA=", "version": 1 } ================================================ FILE: test-data/gce4/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-gce-vm-performance/aggregated/subnetworks", "items": { "regions/asia-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.626-07:00", "fingerprint": "ExVityxQ7Zw=", "gatewayAddress": "10.140.0.1", "id": "7865289181883843690", "ipCidrRange": "10.140.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.735-07:00", "fingerprint": "WEPpLpqTaII=", "gatewayAddress": "10.170.0.1", "id": "1625232185091474538", "ipCidrRange": "10.170.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.546-07:00", "fingerprint": "bQ24OL6A-_g=", "gatewayAddress": "10.146.0.1", "id": "1533136348119614570", "ipCidrRange": "10.146.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.673-07:00", "fingerprint": "V5llMO8nmmI=", "gatewayAddress": "10.174.0.1", "id": "9108510720326681706", "ipCidrRange": "10.174.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.690-07:00", "fingerprint": "YvlSkRtP_4s=", "gatewayAddress": "10.178.0.1", "id": "4106072082002527338", "ipCidrRange": "10.178.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.687-07:00", "fingerprint": "wpauE-6Ls5k=", "gatewayAddress": "10.160.0.1", "id": "799045077667726442", "ipCidrRange": "10.160.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.745-07:00", "fingerprint": "Q7YnvFsvcIs=", "gatewayAddress": "10.190.0.1", "id": "5569943562367845482", "ipCidrRange": "10.190.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.680-07:00", "fingerprint": "9qw_IGoz63I=", "gatewayAddress": "10.148.0.1", "id": "1399967472608134250", "ipCidrRange": "10.148.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.669-07:00", "fingerprint": "A364yIYGdbo=", "gatewayAddress": "10.184.0.1", "id": "925018594468217962", "ipCidrRange": "10.184.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.681-07:00", "fingerprint": "nW5ufndV5Es=", "gatewayAddress": "10.152.0.1", "id": "3491955985615471722", "ipCidrRange": "10.152.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.656-07:00", "fingerprint": "DrRYoQz8MQQ=", "gatewayAddress": "10.192.0.1", "id": "3881444575162188906", "ipCidrRange": "10.192.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-central2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.681-07:00", "fingerprint": "Fkp5Ia_kWjU=", "gatewayAddress": "10.186.0.1", "id": "7309165993080177770", "ipCidrRange": "10.186.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.676-07:00", "fingerprint": "uAKn9PpojKc=", "gatewayAddress": "10.166.0.1", "id": "5895305034600072298", "ipCidrRange": "10.166.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-southwest1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:34.478-07:00", "fingerprint": "7puHFtbgohs=", "gatewayAddress": "10.204.0.1", "id": "6503801733215994985", "ipCidrRange": "10.204.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.565-07:00", "fingerprint": "RYxGa4BdqVw=", "gatewayAddress": "10.132.0.1", "id": "4254674819412968554", "ipCidrRange": "10.132.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.592-07:00", "fingerprint": "InwBX-PAmxE=", "gatewayAddress": "10.154.0.1", "id": "8673388756094993514", "ipCidrRange": "10.154.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:34.435-07:00", "fingerprint": "jtqiYE_BvSA=", "gatewayAddress": "10.156.0.1", "id": "2730999123496453225", "ipCidrRange": "10.156.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.623-07:00", "fingerprint": "sfuW5PvbdEI=", "gatewayAddress": "10.164.0.1", "id": "1461822054006834282", "ipCidrRange": "10.164.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4", "secondaryIpRanges": [ { "ipCidrRange": "10.85.0.0/17", "rangeName": "gke-autopilot-gke1-pods-6a0c2f5b" }, { "ipCidrRange": "10.85.128.0/22", "rangeName": "gke-autopilot-gke1-services-6a0c2f5b" }, { "ipCidrRange": "10.60.0.0/20", "rangeName": "gke-gke4-services-e4411110" }, { "ipCidrRange": "10.56.0.0/14", "rangeName": "gke-gke4-pods-e4411110" }, { "ipCidrRange": "10.60.96.0/22", "rangeName": "gke-autopilot-gke2-services-3fbbc734" }, { "ipCidrRange": "10.60.128.0/17", "rangeName": "gke-autopilot-gke2-pods-3fbbc734" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/default", "stackType": "IPV4_ONLY" }, { "creationTimestamp": "2022-10-11T07:16:29.795-07:00", "enableFlowLogs": false, "fingerprint": "PE0z2PNqD2Y=", "gatewayAddress": "192.168.0.1", "id": "7423481761753515090", "ipCidrRange": "192.168.0.0/24", "kind": "compute#subnetwork", "logConfig": { "aggregationInterval": "INTERVAL_5_SEC", "enable": false, "flowSampling": 0.5, "metadata": "INCLUDE_ALL_METADATA" }, "name": "gke1-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4", "secondaryIpRanges": [ { "ipCidrRange": "192.168.1.0/24", "rangeName": "gke1-secondary-range-pod" }, { "ipCidrRange": "192.168.2.0/24", "rangeName": "gke1-secondary-range-svc" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/gke1-subnet", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west6": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.530-07:00", "fingerprint": "Ic4Y34BRjOE=", "gatewayAddress": "10.172.0.1", "id": "3567972882370315370", "ipCidrRange": "10.172.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west8": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.586-07:00", "fingerprint": "_MhtvVpnR5c=", "gatewayAddress": "10.198.0.1", "id": "5905962051052291178", "ipCidrRange": "10.198.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west9": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.638-07:00", "fingerprint": "0uz_7VhFjLE=", "gatewayAddress": "10.200.0.1", "id": "5697832252330263658", "ipCidrRange": "10.200.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.741-07:00", "fingerprint": "70g6IoCP0CM=", "gatewayAddress": "10.208.0.1", "id": "2381367997960340586", "ipCidrRange": "10.208.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.499-07:00", "fingerprint": "vNYpwgnkSCI=", "gatewayAddress": "10.162.0.1", "id": "5798419596128601194", "ipCidrRange": "10.162.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.493-07:00", "fingerprint": "7ik2BWFfN84=", "gatewayAddress": "10.188.0.1", "id": "711542983096845418", "ipCidrRange": "10.188.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.668-07:00", "fingerprint": "pqhad5TnzVc=", "gatewayAddress": "10.158.0.1", "id": "2301799042992620650", "ipCidrRange": "10.158.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.648-07:00", "fingerprint": "ea50MPZjruA=", "gatewayAddress": "10.194.0.1", "id": "6124576470534243434", "ipCidrRange": "10.194.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.382-07:00", "fingerprint": "pb4O-4ISjAE=", "gatewayAddress": "10.128.0.1", "id": "6250438653192488042", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.368-07:00", "fingerprint": "bvN-N8FS9U4=", "gatewayAddress": "10.142.0.1", "id": "1443866556678849642", "ipCidrRange": "10.142.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.486-07:00", "fingerprint": "jew6EZUeYrM=", "gatewayAddress": "10.150.0.1", "id": "5871230243962405994", "ipCidrRange": "10.150.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east5": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.504-07:00", "fingerprint": "KVZisxAl1CI=", "gatewayAddress": "10.202.0.1", "id": "4332627157280408682", "ipCidrRange": "10.202.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east7": { "subnetworks": [ { "creationTimestamp": "2022-10-11T09:13:19.272-07:00", "fingerprint": "BEZq6cSPkco=", "gatewayAddress": "10.196.0.1", "id": "7977046348344600816", "ipCidrRange": "10.196.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east7/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.435-07:00", "fingerprint": "1Se61ZXzpjY=", "gatewayAddress": "10.206.0.1", "id": "7154466601132672106", "ipCidrRange": "10.206.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.499-07:00", "fingerprint": "E0k7cQEp7_I=", "gatewayAddress": "10.138.0.1", "id": "5323136092791686250", "ipCidrRange": "10.138.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.549-07:00", "fingerprint": "-JD9bbh-QlA=", "gatewayAddress": "10.168.0.1", "id": "4458757238523741290", "ipCidrRange": "10.168.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.524-07:00", "fingerprint": "P01BE480Q2I=", "gatewayAddress": "10.180.0.1", "id": "1135562538472752234", "ipCidrRange": "10.180.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.521-07:00", "fingerprint": "2k-WBaR7JKQ=", "gatewayAddress": "10.182.0.1", "id": "7061406355024299114", "ipCidrRange": "10.182.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/aggregated/subnetworks" } ================================================ FILE: test-data/gce4/json-dumps/compute-subnetworks-europe-west4.json ================================================ { "kind": "compute#subnetworkList", "id": "projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks", "items": [ { "kind": "compute#subnetwork", "id": "4774247690482065659", "creationTimestamp": "2022-03-30T02:08:36.021-07:00", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "ipCidrRange": "10.164.0.0/20", "gatewayAddress": "10.164.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/default", "privateIpGoogleAccess": true, "secondaryIpRanges": [ { "rangeName": "gke-gke4-services-93befb7e", "ipCidrRange": "10.60.0.0/20" }, { "rangeName": "gke-gke4-pods-93befb7e", "ipCidrRange": "10.56.0.0/14" }, { "rangeName": "gke-autopilot-gke1-services-19977223", "ipCidrRange": "10.85.128.0/22" }, { "rangeName": "gke-autopilot-gke1-pods-19977223", "ipCidrRange": "10.85.0.0/17" }, { "rangeName": "gke-autopilot-gke2-pods-65d1ba15", "ipCidrRange": "10.60.128.0/17" }, { "rangeName": "gke-autopilot-gke2-services-65d1ba15", "ipCidrRange": "10.60.96.0/22" } ], "fingerprint": "-9hqGif0SQ0=", "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "stackType": "IPV4_ONLY" }, { "kind": "compute#subnetwork", "id": "1818761461517361320", "creationTimestamp": "2022-03-30T02:09:27.964-07:00", "name": "gke1-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "ipCidrRange": "192.168.0.0/24", "gatewayAddress": "192.168.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/gke1-subnet", "privateIpGoogleAccess": false, "secondaryIpRanges": [ { "rangeName": "gke1-secondary-range-pod", "ipCidrRange": "192.168.1.0/24" }, { "rangeName": "gke1-secondary-range-svc", "ipCidrRange": "192.168.2.0/24" } ], "fingerprint": "Ir2p9uebpiE=", "enableFlowLogs": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "logConfig": { "enable": false }, "stackType": "IPV4_ONLY" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks" } ================================================ FILE: test-data/gce4/json-dumps/compute-templates.json ================================================ { "id": "projects/gcpdiag-gce-vm-performance/global/instanceTemplates", "items": [ { "creationTimestamp": "2022-04-26T08:21:35.891-07:00", "description": "", "id": "4047445761213182736", "kind": "compute#instanceTemplate", "name": "gke-gke1-default-pool-35923fbc", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-standard", "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "gcp_doctor_test": "gke", "goog-gke-node": "" }, "machineType": "e2-small", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "kube-env", "value": "REDACTED" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.3.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 512Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://35.205.188.165\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1alpha1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "gci-ensure-gke-docker", "value": "true" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "europe-west1-b" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "cluster-name", "value": "gke1" }, { "key": "cluster-uid", "value": "f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke1-f36cf6dd-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/gke-gke1-default-pool-35923fbc" }, { "creationTimestamp": "2022-04-26T08:20:48.842-07:00", "description": "", "id": "7086722794918359871", "kind": "compute#instanceTemplate", "name": "mig-template", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskType": "pd-standard", "sourceImage": "projects/debian-cloud/global/images/family/debian-9" }, "interface": "SCSI", "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "machineType": "e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "networkInterfaces": [ { "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default" } ], "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/mig-template" } ], "kind": "compute#instanceTemplateList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates" } ================================================ FILE: test-data/gce4/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-gce-vm-performance/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-f", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2541", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-a", "description": "europe-southwest1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-b", "description": "europe-southwest1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2542", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-c", "description": "europe-southwest1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2591", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-a", "description": "europe-west10-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2592", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-b", "description": "europe-west10-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-c", "description": "europe-west10-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2571", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-a", "description": "europe-west12-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2572", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-b", "description": "europe-west12-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-c", "description": "europe-west12-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2521", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-a", "description": "europe-west9-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-b", "description": "europe-west9-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2522", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-c", "description": "europe-west9-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-a", "description": "me-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2581", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-b", "description": "me-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2582", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-c", "description": "me-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2601", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-a", "description": "me-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2602", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-b", "description": "me-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-c", "description": "me-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2561", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-a", "description": "me-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-b", "description": "me-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2562", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-c", "description": "me-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2532", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-a", "description": "us-east5-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2531", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-b", "description": "us-east5-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-c", "description": "us-east5-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2551", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-a", "description": "us-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2552", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-b", "description": "us-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-c", "description": "us-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones" } ================================================ FILE: test-data/gce4/json-dumps/global-operations.json ================================================ { "kind": "compute#operationAggregatedList", "id": "projects/gcpdiag-gce-vm-performance/aggregated/operations", "items": { "global": { "operations": [ { "kind": "compute#operation", "id": "2280940156284294438", "name": "operation-1737649096607-62c61f525c87f-d1d29f27-d62045ab", "clientOperationId": "d08eb18f-fe42-4c43-896d-00d2870e4bf4", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-bqstjjlfsp354musmjzdi345", "targetId": "1996836131292892473", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:18:17.093-08:00", "startTime": "2025-01-23T08:18:17.096-08:00", "endTime": "2025-01-23T08:18:20.933-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649096607-62c61f525c87f-d1d29f27-d62045ab" }, { "kind": "compute#operation", "id": "8179155603566875966", "name": "operation-1737649104592-62c61f59f9dcd-788bd067-7e26ed5f", "clientOperationId": "7e8d7897-4cb8-41a9-9ef4-def5327d367f", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-1", "targetId": "6803491094905539841", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:18:25.134-08:00", "startTime": "2025-01-23T08:18:25.137-08:00", "endTime": "2025-01-23T08:18:29.377-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649104592-62c61f59f9dcd-788bd067-7e26ed5f" }, { "kind": "compute#operation", "id": "1721636277909968183", "name": "operation-1737649112522-62c61f6189dac-df29eecb-12f9eb07", "clientOperationId": "3a73403f-09fa-4a95-ab64-f0e106e4fbaa", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-2", "targetId": "6931654070069415193", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:18:32.922-08:00", "startTime": "2025-01-23T08:18:32.926-08:00", "endTime": "2025-01-23T08:18:37.115-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649112522-62c61f6189dac-df29eecb-12f9eb07" }, { "kind": "compute#operation", "id": "8309398734471419151", "name": "operation-1737649120226-62c61f68e2c23-9428894d-3d8b9aca", "clientOperationId": "e10205fa-fc69-46fc-af1f-e1af53bb9b13", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-3", "targetId": "7813216409883823378", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:18:40.730-08:00", "startTime": "2025-01-23T08:18:40.733-08:00", "endTime": "2025-01-23T08:18:44.597-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649120226-62c61f68e2c23-9428894d-3d8b9aca" }, { "kind": "compute#operation", "id": "7317416668127286535", "name": "operation-1737649128059-62c61f705b2de-eefc8570-6b49f792", "clientOperationId": "d25121ab-440d-4da7-b0fd-f7c444d71c14", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-hurqvi6k3jkozy7huzl7xhbu", "targetId": "5769124955549649634", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:18:48.445-08:00", "startTime": "2025-01-23T08:18:48.450-08:00", "endTime": "2025-01-23T08:18:52.289-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649128059-62c61f705b2de-eefc8570-6b49f792" }, { "kind": "compute#operation", "id": "5028999114327577887", "name": "operation-1737649135841-62c61f77c724e-a1ca3d52-ec2a6a6c", "clientOperationId": "4a229748-f629-4982-9173-6408f5cb1623", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-1", "targetId": "5207014470666209994", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:18:56.308-08:00", "startTime": "2025-01-23T08:18:56.311-08:00", "endTime": "2025-01-23T08:19:00.341-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649135841-62c61f77c724e-a1ca3d52-ec2a6a6c" }, { "kind": "compute#operation", "id": "53074387158422807", "name": "operation-1737649143830-62c61f7f65964-f9a64678-5da915a0", "clientOperationId": "e8bb01d6-1a3e-409b-8886-70b3adc1fcc5", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-2", "targetId": "5065499558870567618", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:19:04.386-08:00", "startTime": "2025-01-23T08:19:04.389-08:00", "endTime": "2025-01-23T08:19:08.206-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649143830-62c61f7f65964-f9a64678-5da915a0" }, { "kind": "compute#operation", "id": "619542820738290415", "name": "operation-1737649151748-62c61f86f2b49-39ba97e4-4ddf44cd", "clientOperationId": "92d9b901-d7b8-4cf4-a33f-9200203440ee", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-3", "targetId": "8091231506969709274", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:19:12.187-08:00", "startTime": "2025-01-23T08:19:12.189-08:00", "endTime": "2025-01-23T08:19:15.016-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649151748-62c61f86f2b49-39ba97e4-4ddf44cd" }, { "kind": "compute#operation", "id": "2576999076700607207", "name": "operation-1737649159673-62c61f8e816be-f7bc9bdf-49401784", "clientOperationId": "f6c35350-34e3-4bac-afba-68bdd0b5314e", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-qb6kf24l7veqxzstj6m2wx6e", "targetId": "2119620085120289451", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:19:20.219-08:00", "startTime": "2025-01-23T08:19:20.222-08:00", "endTime": "2025-01-23T08:19:24.015-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649159673-62c61f8e816be-f7bc9bdf-49401784" }, { "kind": "compute#operation", "id": "3340945055669015295", "name": "operation-1737649167701-62c61f9629599-ead58c3d-28640548", "clientOperationId": "bb92ba88-4b71-47e1-b9ec-19f8f2c64da9", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-oex36nljuf35kulysab6c5pa", "targetId": "7864150130694343355", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:19:28.045-08:00", "startTime": "2025-01-23T08:19:28.049-08:00", "endTime": "2025-01-23T08:19:30.721-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649167701-62c61f9629599-ead58c3d-28640548" }, { "kind": "compute#operation", "id": "7612210505926562552", "name": "operation-1737649175456-62c61f9d8ead5-d8b1ab41-7e9476af", "clientOperationId": "61349dee-558d-4aa7-9dfe-5146cf9da4f8", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-1", "targetId": "4256891507776211612", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:19:35.800-08:00", "startTime": "2025-01-23T08:19:35.803-08:00", "endTime": "2025-01-23T08:19:39.414-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649175456-62c61f9d8ead5-d8b1ab41-7e9476af" }, { "kind": "compute#operation", "id": "2668576386565788400", "name": "operation-1737649183264-62c61fa500e6f-b8167430-6178dfc5", "clientOperationId": "ff2de066-c09f-471d-a510-9a790dffe96d", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-2", "targetId": "5500281464771627668", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:19:43.621-08:00", "startTime": "2025-01-23T08:19:43.624-08:00", "endTime": "2025-01-23T08:19:47.274-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649183264-62c61fa500e6f-b8167430-6178dfc5" }, { "kind": "compute#operation", "id": "1438312304893481672", "name": "operation-1737649190921-62c61fac4e461-4c773ad3-87fa14cb", "clientOperationId": "746f28cd-ee32-40de-964c-63f69d92cdc9", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-3", "targetId": "1166273495871572589", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:19:51.390-08:00", "startTime": "2025-01-23T08:19:51.393-08:00", "endTime": "2025-01-23T08:19:55.094-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649190921-62c61fac4e461-4c773ad3-87fa14cb" }, { "kind": "compute#operation", "id": "6759137092208415424", "name": "operation-1737649198737-62c61fb3c28ec-67a4c26a-01f68192", "clientOperationId": "88526acc-9f88-473f-82fa-c4fc1ce9b974", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-1", "targetId": "6773624759912548989", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:19:59.350-08:00", "startTime": "2025-01-23T08:19:59.352-08:00", "endTime": "2025-01-23T08:20:02.120-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649198737-62c61fb3c28ec-67a4c26a-01f68192" }, { "kind": "compute#operation", "id": "5042539020203053784", "name": "operation-1737649206970-62c61fbb9c7c1-6e7adc39-ffeded41", "clientOperationId": "ad5e5fac-25b3-4f34-99ca-d1fefc6f338d", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-2", "targetId": "3262119855878359669", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:20:07.484-08:00", "startTime": "2025-01-23T08:20:07.487-08:00", "endTime": "2025-01-23T08:20:11.281-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649206970-62c61fbb9c7c1-6e7adc39-ffeded41" }, { "kind": "compute#operation", "id": "2722835090668245712", "name": "operation-1737649214929-62c61fc333c2e-a40eba05-9d0aba7f", "clientOperationId": "f5f85191-e542-4117-96be-b74ea0977858", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-3", "targetId": "8961853830641797709", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:20:15.256-08:00", "startTime": "2025-01-23T08:20:15.259-08:00", "endTime": "2025-01-23T08:20:18.083-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649214929-62c61fc333c2e-a40eba05-9d0aba7f" }, { "kind": "compute#operation", "id": "2811129606705238697", "name": "operation-1737649222665-62c61fca94658-718b0717-18c91e2b", "clientOperationId": "a950b83d-230f-4f80-a903-2d53389db86b", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-bqstjjlfsp354musmjzdi345", "targetId": "9220472906987521038", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:20:22.970-08:00", "startTime": "2025-01-23T08:20:22.975-08:00", "endTime": "2025-01-23T08:20:26.699-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649222665-62c61fca94658-718b0717-18c91e2b" }, { "kind": "compute#operation", "id": "9097898934096876193", "name": "operation-1737649230397-62c61fd1f3f39-dda298b5-fd36bbbd", "clientOperationId": "10d40e88-cc8c-43f5-b246-ce89e1b7e99d", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-1", "targetId": "3246009124342383638", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:20:31.108-08:00", "startTime": "2025-01-23T08:20:31.111-08:00", "endTime": "2025-01-23T08:20:34.874-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649230397-62c61fd1f3f39-dda298b5-fd36bbbd" }, { "kind": "compute#operation", "id": "4334139866158715577", "name": "operation-1737649238656-62c61fd9d4518-8587b7f9-d2c7c3db", "clientOperationId": "481581b1-be85-42b6-a3f7-989a38935f1b", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-2", "targetId": "5220328779118462446", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:20:38.994-08:00", "startTime": "2025-01-23T08:20:38.998-08:00", "endTime": "2025-01-23T08:20:42.784-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649238656-62c61fd9d4518-8587b7f9-d2c7c3db" }, { "kind": "compute#operation", "id": "8864284169534952113", "name": "operation-1737649246382-62c61fe1328f6-414e7556-582757b2", "clientOperationId": "a253fbbb-1ffb-47a3-947b-fd27c9ec4fdd", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-3", "targetId": "6429786170898171366", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:20:47.006-08:00", "startTime": "2025-01-23T08:20:47.009-08:00", "endTime": "2025-01-23T08:20:50.876-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649246382-62c61fe1328f6-414e7556-582757b2" }, { "kind": "compute#operation", "id": "8201699517536391817", "name": "operation-1737649254420-62c61fe8dd02d-379e4b11-3b77ee6e", "clientOperationId": "d4696be5-b09b-4ceb-b9cc-4761ed54b71b", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-hurqvi6k3jkozy7huzl7xhbu", "targetId": "6285103965534864886", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:20:54.943-08:00", "startTime": "2025-01-23T08:20:54.947-08:00", "endTime": "2025-01-23T08:20:58.715-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649254420-62c61fe8dd02d-379e4b11-3b77ee6e" }, { "kind": "compute#operation", "id": "2309323834206966401", "name": "operation-1737649262537-62c61ff09a999-464ea9b0-a2cbc5d0", "clientOperationId": "77d5c244-aa20-4d52-9fa0-577aa4d71d7e", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-1", "targetId": "3720557999293122014", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:21:03.007-08:00", "startTime": "2025-01-23T08:21:03.010-08:00", "endTime": "2025-01-23T08:21:06.826-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649262537-62c61ff09a999-464ea9b0-a2cbc5d0" }, { "kind": "compute#operation", "id": "3565347991554347672", "name": "operation-1737649270406-62c61ff81bd3f-3cdd3220-a949cbe0", "clientOperationId": "0309913d-a529-4be6-9477-b0b1f777b727", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-2", "targetId": "8632835747836773846", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:21:11.170-08:00", "startTime": "2025-01-23T08:21:11.181-08:00", "endTime": "2025-01-23T08:21:14.787-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649270406-62c61ff81bd3f-3cdd3220-a949cbe0" }, { "kind": "compute#operation", "id": "5136571037021885073", "name": "operation-1737649278470-62c61fffcc971-d1d388c8-8362ab6c", "clientOperationId": "3ad8e549-bb5c-486d-a7fc-0a5905d458f5", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-3", "targetId": "4795957251172648366", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:21:18.955-08:00", "startTime": "2025-01-23T08:21:18.957-08:00", "endTime": "2025-01-23T08:21:22.268-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649278470-62c61fffcc971-d1d388c8-8362ab6c" }, { "kind": "compute#operation", "id": "6134545549111579241", "name": "operation-1737649286392-62c620075aace-b02671ea-f0604491", "clientOperationId": "06e1623e-82c4-4800-b47d-f1b559ee44a2", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-qb6kf24l7veqxzstj6m2wx6e", "targetId": "3115415446797075903", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:21:26.895-08:00", "startTime": "2025-01-23T08:21:26.898-08:00", "endTime": "2025-01-23T08:21:30.608-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649286392-62c620075aace-b02671ea-f0604491" }, { "kind": "compute#operation", "id": "8675212798562652769", "name": "operation-1737649294406-62c6200eff44e-9b60b922-c0a0b728", "clientOperationId": "3144459b-b020-4e95-b4f1-9603782fdd30", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-oex36nljuf35kulysab6c5pa", "targetId": "6866034520368006543", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:21:34.750-08:00", "startTime": "2025-01-23T08:21:34.753-08:00", "endTime": "2025-01-23T08:21:38.509-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649294406-62c6200eff44e-9b60b922-c0a0b728" }, { "kind": "compute#operation", "id": "8411801595305513593", "name": "operation-1737649302027-62c6201643e49-26d7881b-55d180b7", "clientOperationId": "2e62f4ac-abeb-4748-be1c-704fc7164072", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-1", "targetId": "6698757647406646639", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:21:42.429-08:00", "startTime": "2025-01-23T08:21:42.434-08:00", "endTime": "2025-01-23T08:21:46.190-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649302027-62c6201643e49-26d7881b-55d180b7" }, { "kind": "compute#operation", "id": "4478548795637879409", "name": "operation-1737649309837-62c6201db67f2-eb38b076-6d277da3", "clientOperationId": "1fcd856a-a29d-46a8-a278-a34672f74063", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-2", "targetId": "4432689205039777127", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:21:50.381-08:00", "startTime": "2025-01-23T08:21:50.385-08:00", "endTime": "2025-01-23T08:21:54.180-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649309837-62c6201db67f2-eb38b076-6d277da3" }, { "kind": "compute#operation", "id": "7127580286170157641", "name": "operation-1737649317848-62c620255a693-264d7dd3-834c1ef2", "clientOperationId": "daf09f71-e425-477f-a2a5-2c0e58d65207", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-3", "targetId": "1010549908871759231", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:21:58.324-08:00", "startTime": "2025-01-23T08:21:58.326-08:00", "endTime": "2025-01-23T08:22:02.328-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649317848-62c620255a693-264d7dd3-834c1ef2" }, { "kind": "compute#operation", "id": "6584230166896038465", "name": "operation-1737649325819-62c6202cf4703-22e0e693-765eccc8", "clientOperationId": "1aa9543e-fd79-407a-bce6-291692446870", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-1", "targetId": "7348220830718543183", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:22:06.196-08:00", "startTime": "2025-01-23T08:22:06.199-08:00", "endTime": "2025-01-23T08:22:09.881-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649325819-62c6202cf4703-22e0e693-765eccc8" }, { "kind": "compute#operation", "id": "3298290618760942170", "name": "operation-1737649333556-62c6203455390-9f9ed3c1-4cf46589", "clientOperationId": "a797f833-1315-4e0d-b67c-e5702b3045e1", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-2", "targetId": "879777719600727367", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:22:13.893-08:00", "startTime": "2025-01-23T08:22:13.897-08:00", "endTime": "2025-01-23T08:22:17.734-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649333556-62c6203455390-9f9ed3c1-4cf46589" }, { "kind": "compute#operation", "id": "6705250641511436882", "name": "operation-1737649341252-62c6203bac30f-e83fb2b3-bdc976e0", "clientOperationId": "4f50f4e9-9f92-4732-bb54-e40ad38d7a16", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-3", "targetId": "3440525646262617439", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-23T08:22:21.700-08:00", "startTime": "2025-01-23T08:22:21.703-08:00", "endTime": "2025-01-23T08:22:25.579-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649341252-62c6203bac30f-e83fb2b3-bdc976e0" }, { "kind": "compute#operation", "id": "6493470309565841570", "name": "operation-1738178124662-62cdd21ad4804-b4a752a4-61716485", "clientOperationId": "2e5c5e98-c29e-49a0-a0bc-159605dc0ba1", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-bqstjjlfsp354musmjzdi345", "targetId": "1996836131292892473", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:15:25.201-08:00", "startTime": "2025-01-29T11:15:25.205-08:00", "endTime": "2025-01-29T11:15:29.281-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178124662-62cdd21ad4804-b4a752a4-61716485" }, { "kind": "compute#operation", "id": "8011095753771958458", "name": "operation-1738178132995-62cdd222c6e04-99314cbc-092e0901", "clientOperationId": "927852c3-9728-4fec-965d-d345690029c5", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-bqstjjlfsp354musmjzdi345-v6", "targetId": "3942264717889817905", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:15:33.336-08:00", "startTime": "2025-01-29T11:15:33.339-08:00", "endTime": "2025-01-29T11:15:37.267-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178132995-62cdd222c6e04-99314cbc-092e0901" }, { "kind": "compute#operation", "id": "7162928601455116466", "name": "operation-1738178140798-62cdd22a37e15-5f282c2e-6dc7adc3", "clientOperationId": "ff7e865b-999b-4f27-a2f8-005ab499bdae", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-2", "targetId": "6931654070069415193", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:15:41.392-08:00", "startTime": "2025-01-29T11:15:41.395-08:00", "endTime": "2025-01-29T11:16:04.119-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178140798-62cdd22a37e15-5f282c2e-6dc7adc3" }, { "kind": "compute#operation", "id": "4584857400946180250", "name": "operation-1738178165127-62cdd2416baed-c32aa4b9-6d87ccc2", "clientOperationId": "43257851-565e-486a-9fc7-29e3735ced07", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-3", "targetId": "7813216409883823378", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:16:05.494-08:00", "startTime": "2025-01-29T11:16:05.497-08:00", "endTime": "2025-01-29T11:16:09.356-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178165127-62cdd2416baed-c32aa4b9-6d87ccc2" }, { "kind": "compute#operation", "id": "5197488641239662738", "name": "operation-1738178172956-62cdd248e2fa4-162b9631-a90f6815", "clientOperationId": "24f4863c-d311-4906-9bac-294d3c73066a", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-hurqvi6k3jkozy7huzl7xhbu", "targetId": "5769124955549649634", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:16:13.492-08:00", "startTime": "2025-01-29T11:16:13.496-08:00", "endTime": "2025-01-29T11:16:17.452-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178172956-62cdd248e2fa4-162b9631-a90f6815" }, { "kind": "compute#operation", "id": "8298186039444881514", "name": "operation-1738178180989-62cdd2508c0a9-4b38df5d-b5e34303", "clientOperationId": "b9367c89-8ae7-40f4-b7ad-d90e8e92828a", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-hurqvi6k3jkozy7huzl7xhbu-v6", "targetId": "3077326989592414970", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:16:21.393-08:00", "startTime": "2025-01-29T11:16:21.397-08:00", "endTime": "2025-01-29T11:16:25.532-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178180989-62cdd2508c0a9-4b38df5d-b5e34303" }, { "kind": "compute#operation", "id": "8363895740538798178", "name": "operation-1738178188972-62cdd25829271-f82a0cc4-c70db555", "clientOperationId": "786a1edd-0514-43bb-a35d-eafcc106d8e5", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-2", "targetId": "5065499558870567618", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:16:29.532-08:00", "startTime": "2025-01-29T11:16:29.536-08:00", "endTime": "2025-01-29T11:16:33.500-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178188972-62cdd25829271-f82a0cc4-c70db555" }, { "kind": "compute#operation", "id": "6340366721307099258", "name": "operation-1738178197067-62cdd25fe1693-08edeb5e-882c1507", "clientOperationId": "39b368e8-549d-4f24-ac16-55d4907ce9fb", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-3", "targetId": "8091231506969709274", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:16:37.566-08:00", "startTime": "2025-01-29T11:16:37.569-08:00", "endTime": "2025-01-29T11:16:41.839-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178197067-62cdd25fe1693-08edeb5e-882c1507" }, { "kind": "compute#operation", "id": "1155659274487578738", "name": "operation-1738178205177-62cdd2679d670-73d5830b-9a5fb8f9", "clientOperationId": "643c3a7b-ab6b-498d-a6af-4b24e94b0241", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-qb6kf24l7veqxzstj6m2wx6e", "targetId": "2119620085120289451", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:16:45.556-08:00", "startTime": "2025-01-29T11:16:45.560-08:00", "endTime": "2025-01-29T11:16:48.277-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178205177-62cdd2679d670-73d5830b-9a5fb8f9" }, { "kind": "compute#operation", "id": "5723094309288788042", "name": "operation-1738178212970-62cdd26f0c142-b47f90e6-a566340a", "clientOperationId": "1583affe-0e70-4c8c-b5af-253a9282a47d", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-qb6kf24l7veqxzstj6m2wx6e-v6", "targetId": "5890257185214089891", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:16:53.504-08:00", "startTime": "2025-01-29T11:16:53.508-08:00", "endTime": "2025-01-29T11:16:57.353-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178212970-62cdd26f0c142-b47f90e6-a566340a" }, { "kind": "compute#operation", "id": "4413500639766102082", "name": "operation-1738178221026-62cdd276bab05-527699c5-0c7604f5", "clientOperationId": "29dee6cf-cf6c-49b7-abae-9491db1a28ba", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-oex36nljuf35kulysab6c5pa", "targetId": "7864150130694343355", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:17:01.375-08:00", "startTime": "2025-01-29T11:17:01.378-08:00", "endTime": "2025-01-29T11:17:05.346-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178221026-62cdd276bab05-527699c5-0c7604f5" }, { "kind": "compute#operation", "id": "823396863552503898", "name": "operation-1738178228783-62cdd27e20927-ff0c6977-63702492", "clientOperationId": "1cfd2278-2d86-435f-9158-959883f91dbe", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-2", "targetId": "5500281464771627668", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:17:09.117-08:00", "startTime": "2025-01-29T11:17:09.122-08:00", "endTime": "2025-01-29T11:17:13.004-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178228783-62cdd27e20927-ff0c6977-63702492" }, { "kind": "compute#operation", "id": "6355366649775243347", "name": "operation-1738178236540-62cdd2858651d-3223cd96-bc68975e", "clientOperationId": "3a66306e-c181-4b63-87ff-9289e2f75758", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-3", "targetId": "1166273495871572589", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:17:16.884-08:00", "startTime": "2025-01-29T11:17:16.887-08:00", "endTime": "2025-01-29T11:17:19.826-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178236540-62cdd2858651d-3223cd96-bc68975e" }, { "kind": "compute#operation", "id": "2903347510942089259", "name": "operation-1738178244354-62cdd28cfa22b-c5d454fd-ce37c0ad", "clientOperationId": "eb75843a-c1f0-447c-b283-37a7623cabb1", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-2", "targetId": "3262119855878359669", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:17:24.678-08:00", "startTime": "2025-01-29T11:17:24.680-08:00", "endTime": "2025-01-29T11:17:48.344-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178244354-62cdd28cfa22b-c5d454fd-ce37c0ad" }, { "kind": "compute#operation", "id": "35636480633716785", "name": "operation-1738178270182-62cdd2a59bbd4-1a8275fb-259287e2", "clientOperationId": "3e1c55b5-6d72-4344-8d81-b3a4e6bf11b6", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-3", "targetId": "8961853830641797709", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:17:50.765-08:00", "startTime": "2025-01-29T11:17:50.769-08:00", "endTime": "2025-01-29T11:17:54.543-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178270182-62cdd2a59bbd4-1a8275fb-259287e2" }, { "kind": "compute#operation", "id": "3260309793465155593", "name": "operation-1738178278264-62cdd2ad50d80-8495d0ec-7a37c89c", "clientOperationId": "b10eff1d-9bb9-4917-9198-af9940f70a1e", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-bqstjjlfsp354musmjzdi345", "targetId": "9220472906987521038", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:17:58.734-08:00", "startTime": "2025-01-29T11:17:58.748-08:00", "endTime": "2025-01-29T11:18:02.658-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178278264-62cdd2ad50d80-8495d0ec-7a37c89c" }, { "kind": "compute#operation", "id": "4533888388389388289", "name": "operation-1738178286180-62cdd2b4dda6e-2e9feb83-468abf50", "clientOperationId": "0356b524-89ec-4783-9cf7-2d4e89ce2f1c", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-bqstjjlfsp354musmjzdi345-v6", "targetId": "258455239321633798", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:18:06.770-08:00", "startTime": "2025-01-29T11:18:06.774-08:00", "endTime": "2025-01-29T11:18:10.732-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178286180-62cdd2b4dda6e-2e9feb83-468abf50" }, { "kind": "compute#operation", "id": "7388359511992942617", "name": "operation-1738178294345-62cdd2bca6ef5-85ef3cba-174e324d", "clientOperationId": "27feeaf2-0e8e-43bf-a0b9-efafe10293a3", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-2", "targetId": "5220328779118462446", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:18:14.848-08:00", "startTime": "2025-01-29T11:18:14.851-08:00", "endTime": "2025-01-29T11:18:18.588-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178294345-62cdd2bca6ef5-85ef3cba-174e324d" }, { "kind": "compute#operation", "id": "3350115188802568209", "name": "operation-1738178302408-62cdd2c457600-ae6228cf-1f129894", "clientOperationId": "2bce7270-fcc9-4d21-981d-4285b5ab1542", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-3", "targetId": "6429786170898171366", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:18:22.929-08:00", "startTime": "2025-01-29T11:18:22.932-08:00", "endTime": "2025-01-29T11:18:26.803-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178302408-62cdd2c457600-ae6228cf-1f129894" }, { "kind": "compute#operation", "id": "5185798294310732265", "name": "operation-1738178310407-62cdd2cbf86d2-84a632d4-1f103ee2", "clientOperationId": "dd08a060-dc13-4e58-abc4-1ea3c5d6456c", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-hurqvi6k3jkozy7huzl7xhbu", "targetId": "6285103965534864886", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:18:30.753-08:00", "startTime": "2025-01-29T11:18:30.756-08:00", "endTime": "2025-01-29T11:18:34.533-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178310407-62cdd2cbf86d2-84a632d4-1f103ee2" }, { "kind": "compute#operation", "id": "19085308762505697", "name": "operation-1738178318204-62cdd2d367fd6-cfbd054c-47fbabd3", "clientOperationId": "7999f734-457d-4ad0-a799-3ccefdc940c0", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-hurqvi6k3jkozy7huzl7xhbu-v6", "targetId": "6266197974764406222", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:18:38.733-08:00", "startTime": "2025-01-29T11:18:38.736-08:00", "endTime": "2025-01-29T11:18:42.684-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178318204-62cdd2d367fd6-cfbd054c-47fbabd3" }, { "kind": "compute#operation", "id": "1250010690844344825", "name": "operation-1738178326255-62cdd2db15642-cdcfdf99-9c9d4a15", "clientOperationId": "0490b90e-26a9-43b4-ab85-374f19222d30", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-2", "targetId": "8632835747836773846", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:18:46.642-08:00", "startTime": "2025-01-29T11:18:46.645-08:00", "endTime": "2025-01-29T11:18:49.603-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178326255-62cdd2db15642-cdcfdf99-9c9d4a15" }, { "kind": "compute#operation", "id": "6839932960418284017", "name": "operation-1738178334098-62cdd2e290458-69e65150-866c940d", "clientOperationId": "a9f0c1e7-495e-424b-a1ec-eb7136ab9a8d", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-3", "targetId": "4795957251172648366", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:18:54.644-08:00", "startTime": "2025-01-29T11:18:54.647-08:00", "endTime": "2025-01-29T11:18:58.431-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178334098-62cdd2e290458-69e65150-866c940d" }, { "kind": "compute#operation", "id": "9131984752335110601", "name": "operation-1738178342156-62cdd2ea3f7c4-eb4a1f34-fcdbe74c", "clientOperationId": "2b703cc2-8488-44d3-87ac-bc1a6caa5fdc", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-qb6kf24l7veqxzstj6m2wx6e", "targetId": "3115415446797075903", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:19:02.760-08:00", "startTime": "2025-01-29T11:19:02.763-08:00", "endTime": "2025-01-29T11:19:06.685-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178342156-62cdd2ea3f7c4-eb4a1f34-fcdbe74c" }, { "kind": "compute#operation", "id": "5798446847617384897", "name": "operation-1738178350244-62cdd2f1f61b2-5c345168-6161a171", "clientOperationId": "1e02c11c-df5e-40f8-a708-9e89f43ad13c", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-qb6kf24l7veqxzstj6m2wx6e-v6", "targetId": "5236448134977734071", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:19:10.624-08:00", "startTime": "2025-01-29T11:19:10.628-08:00", "endTime": "2025-01-29T11:19:13.412-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178350244-62cdd2f1f61b2-5c345168-6161a171" }, { "kind": "compute#operation", "id": "4509512984400740825", "name": "operation-1738178358087-62cdd2f970ec1-5daa25e9-df5d46e5", "clientOperationId": "4e25d6ae-9331-4110-b347-53217ff5e846", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-oex36nljuf35kulysab6c5pa", "targetId": "6866034520368006543", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:19:18.622-08:00", "startTime": "2025-01-29T11:19:18.625-08:00", "endTime": "2025-01-29T11:19:22.519-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178358087-62cdd2f970ec1-5daa25e9-df5d46e5" }, { "kind": "compute#operation", "id": "3983582728493187537", "name": "operation-1738178366270-62cdd3013ecf5-4fda13c5-cc4f8522", "clientOperationId": "3e9a871d-3de5-49e5-9a1a-58f75577f6a3", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-2", "targetId": "4432689205039777127", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:19:26.772-08:00", "startTime": "2025-01-29T11:19:26.775-08:00", "endTime": "2025-01-29T11:19:30.805-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178366270-62cdd3013ecf5-4fda13c5-cc4f8522" }, { "kind": "compute#operation", "id": "3939314474803511721", "name": "operation-1738178374345-62cdd308f21e1-360ac4a0-0344fc0d", "clientOperationId": "af731eb6-4c13-4b8c-a9f9-1b9b0dbaba6c", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-3", "targetId": "1010549908871759231", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:19:34.794-08:00", "startTime": "2025-01-29T11:19:34.797-08:00", "endTime": "2025-01-29T11:19:37.540-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178374345-62cdd308f21e1-360ac4a0-0344fc0d" }, { "kind": "compute#operation", "id": "904747740321792417", "name": "operation-1738178382277-62cdd31082b46-ca641c5e-1e975846", "clientOperationId": "caaec6db-9054-40a3-91bb-69282a780033", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-2", "targetId": "879777719600727367", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:19:42.599-08:00", "startTime": "2025-01-29T11:19:42.601-08:00", "endTime": "2025-01-29T11:19:47.225-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178382277-62cdd31082b46-ca641c5e-1e975846" }, { "kind": "compute#operation", "id": "3851686026589749689", "name": "operation-1738178390048-62cdd317ec0d2-61aa39bd-ff80c46a", "clientOperationId": "3de46e09-bc3e-4187-849a-f823fcb29f8e", "operationType": "patch", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-3", "targetId": "3440525646262617439", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-01-29T11:19:50.386-08:00", "startTime": "2025-01-29T11:19:50.389-08:00", "endTime": "2025-01-29T11:20:11.394-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178390048-62cdd317ec0d2-61aa39bd-ff80c46a" }, { "kind": "compute#operation", "id": "3372994239067492603", "name": "operation-1738747411858-62d61add684d6-cc2eabca-5d2667eb", "operationType": "compute.instanceTemplates.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/mig-template", "targetId": "2206878216970211580", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:23:32.154-08:00", "startTime": "2025-02-05T01:23:32.159-08:00", "endTime": "2025-02-05T01:23:32.738-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738747411858-62d61add684d6-cc2eabca-5d2667eb" }, { "kind": "compute#operation", "id": "8258823514577866944", "name": "operation-1738747439661-62d61af7ebff2-4a5191ac-98012e54", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/gce-secured-instance-test-deny", "targetId": "3706877660854390976", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:24:00.049-08:00", "startTime": "2025-02-05T01:24:00.090-08:00", "endTime": "2025-02-05T01:24:04.195-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738747439661-62d61af7ebff2-4a5191ac-98012e54" }, { "kind": "compute#operation", "id": "1197276755963842716", "name": "operation-1738747507094-62d61b383b5ad-4679118d-2b47f8fb", "clientOperationId": "f197732e-94b5-4e01-b599-c94ac0e411f2", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/gce-secured-instance-test-deny", "targetId": "3706877660854390976", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T01:25:07.437-08:00", "startTime": "2025-02-05T01:25:07.440-08:00", "endTime": "2025-02-05T01:25:11.993-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738747507094-62d61b383b5ad-4679118d-2b47f8fb" }, { "kind": "compute#operation", "id": "4813030742589112075", "name": "operation-1738752484606-62d62dc32825b-944f3fc0-27f69a2a", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/mig-template", "targetId": "2206878216970211580", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:48:04.783-08:00", "startTime": "2025-02-05T02:48:04.794-08:00", "endTime": "2025-02-05T02:48:05.413-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738752484606-62d62dc32825b-944f3fc0-27f69a2a" }, { "kind": "compute#operation", "id": "3580759687123886410", "name": "operation-1738760101437-62d64a2322042-0f71bd37-ab2f0da3", "operationType": "compute.instanceTemplates.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/mig-template", "targetId": "6736262122156515658", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:01.806-08:00", "startTime": "2025-02-05T04:55:01.810-08:00", "endTime": "2025-02-05T04:55:02.401-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738760101437-62d64a2322042-0f71bd37-ab2f0da3" }, { "kind": "compute#operation", "id": "5589617922706170158", "name": "operation-1738760128931-62d64a3d5a682-0765339b-1107e2ae", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/gce-secured-instance-test-deny", "targetId": "4564544778318831918", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:29.363-08:00", "startTime": "2025-02-05T04:55:29.406-08:00", "endTime": "2025-02-05T04:55:32.537-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738760128931-62d64a3d5a682-0765339b-1107e2ae" }, { "kind": "compute#operation", "id": "5373875242912374472", "name": "operation-1738760231266-62d64a9ef290c-a08e6b81-dd33b19e", "clientOperationId": "80418335-c93d-4cb9-be96-be464895d9a7", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/gce-secured-instance-test-deny", "targetId": "4564544778318831918", "status": "DONE", "user": "gceenforcer-enforcer@system.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T04:57:11.635-08:00", "startTime": "2025-02-05T04:57:11.639-08:00", "endTime": "2025-02-05T04:57:15.856-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738760231266-62d64a9ef290c-a08e6b81-dd33b19e" } ] }, "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-central1'.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/us-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-central2'.", "data": [ { "key": "scope", "value": "regions/us-central2" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west1'.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west1'.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east1'.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east1'.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast1'.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast1'.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east4'.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast1'.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west2'.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west3'.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-east1'.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south1'.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast1'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west4'.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north1'.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west2'.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east2'.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west6'.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast2'.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast3'.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west3'.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west4'.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast2'.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-central2'.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast2'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south2'.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast2'.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-west1'.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/us-east7": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east7'.", "data": [ { "key": "scope", "value": "regions/us-east7" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west8'.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west9'.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east5'.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-southwest1'.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-south1'.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-west1'.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west12'.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central1'.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west10'.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central2'.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/africa-south1'.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } }, "regions/us-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west8'.", "data": [ { "key": "scope", "value": "regions/us-west8" } ] } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-south1'.", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ] } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north2'.", "data": [ { "key": "scope", "value": "regions/europe-north2" } ] } }, "zones/us-central1-a": { "operations": [ { "kind": "compute#operation", "id": "3724520394368914064", "name": "operation-1738747007329-62d6195b9e3f5-e474c15b-57b43e9d", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/autoscalers/gl7-ilb-mig-a", "targetId": "895263327236662199", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:16:47.400-08:00", "startTime": "2025-02-05T01:16:47.409-08:00", "endTime": "2025-02-05T01:16:47.883-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/operations/operation-1738747007329-62d6195b9e3f5-e474c15b-57b43e9d" }, { "kind": "compute#operation", "id": "4736856628556370534", "name": "operation-1738747017138-62d61964f9278-2cf53284-d61a1788", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a", "operationType": "compute.instanceGroupManagers.delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/instanceGroupManagers/gl7-ilb-mig-a", "targetId": "6543805410705417128", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:16:57.306-08:00", "startTime": "2025-02-05T01:16:57.311-08:00", "endTime": "2025-02-05T01:17:59.288-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/operations/operation-1738747017138-62d61964f9278-2cf53284-d61a1788" }, { "kind": "compute#operation", "id": "5151614567994790500", "name": "operation-1738747019542-62d6196743fe1-be3a9d47-b32f9f11", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a", "clientOperationId": "3b9068a6-c207-495a-9941-828ab68ad488", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/instances/gl7-ilb-mig-a-27j7", "targetId": "8300037737297343422", "status": "DONE", "user": "123456270@cloudservices.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T01:16:59.716-08:00", "startTime": "2025-02-05T01:16:59.729-08:00", "endTime": "2025-02-05T01:17:45.514-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/operations/operation-1738747019542-62d6196743fe1-be3a9d47-b32f9f11" }, { "kind": "compute#operation", "id": "6285958702666249497", "name": "systemevent-1738525633000-62d2e0ac9b240-12ca31cf-4a9513ee", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a", "operationType": "compute.instances.migrateOnHostMaintenance", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/instances/gl7-ilb-mig-a-27j7", "targetId": "8300037737297343422", "status": "DONE", "statusMessage": "Instance migrated during Compute Engine maintenance.", "user": "system", "progress": 100, "insertTime": "2025-02-02T11:47:13.000-08:00", "startTime": "2025-02-02T11:47:13.000-08:00", "endTime": "2025-02-02T11:47:13.000-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/operations/systemevent-1738525633000-62d2e0ac9b240-12ca31cf-4a9513ee" } ] }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-c'.", "data": [ { "key": "scope", "value": "zones/us-central1-c" } ] } }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/us-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-b'.", "data": [ { "key": "scope", "value": "zones/us-central2-b" } ] } }, "zones/us-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-a'.", "data": [ { "key": "scope", "value": "zones/us-central2-a" } ] } }, "zones/us-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-c'.", "data": [ { "key": "scope", "value": "zones/us-central2-c" } ] } }, "zones/us-central2-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central2-d'.", "data": [ { "key": "scope", "value": "zones/us-central2-d" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "operations": [ { "kind": "compute#operation", "id": "7299878937969987832", "name": "operation-1738747414923-62d61ae05477c-7fa693d1-d0a704af", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instances/gce1", "targetId": "5259249240161292536", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:23:35.990-08:00", "startTime": "2025-02-05T01:23:35.991-08:00", "endTime": "2025-02-05T01:23:43.773-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738747414923-62d61ae05477c-7fa693d1-d0a704af" }, { "kind": "compute#operation", "id": "8635556369083044062", "name": "operation-1738747441366-62d61af98c55c-96ae2060-440e4931", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "compute.instanceGroups.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1", "targetId": "8902174216398213342", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:24:01.566-08:00", "startTime": "2025-02-05T01:24:01.569-08:00", "endTime": "2025-02-05T01:24:06.878-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738747441366-62d61af98c55c-96ae2060-440e4931" }, { "kind": "compute#operation", "id": "4638586587117949138", "name": "operation-1738747453216-62d61b04d9872-03f350ec-dbfa7659", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "compute.instanceGroups.addInstances", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1", "targetId": "8902174216398213342", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:24:13.409-08:00", "startTime": "2025-02-05T01:24:13.426-08:00", "endTime": "2025-02-05T01:24:13.426-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738747453216-62d61b04d9872-03f350ec-dbfa7659" }, { "kind": "compute#operation", "id": "8364649013375336344", "name": "operation-1738752375165-62d62d5ac922b-8e6e176d-a9fce594", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "compute.instanceGroups.delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1", "targetId": "8902174216398213342", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:46:15.347-08:00", "startTime": "2025-02-05T02:46:15.351-08:00", "endTime": "2025-02-05T02:46:27.413-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738752375165-62d62d5ac922b-8e6e176d-a9fce594" }, { "kind": "compute#operation", "id": "2660550389766487914", "name": "operation-1738752389041-62d62d6804e17-f844ed3b-d38ec01e", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instances/gce1", "targetId": "5259249240161292536", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:46:29.290-08:00", "startTime": "2025-02-05T02:46:29.308-08:00", "endTime": "2025-02-05T02:47:15.122-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738752389041-62d62d6804e17-f844ed3b-d38ec01e" }, { "kind": "compute#operation", "id": "7617782938227113822", "name": "operation-1738752433860-62d62d92c2e68-91563631-9f61bdfa", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "deleteInstanceNetworkInterfaces", "status": "DONE", "progress": 100, "insertTime": "2025-02-05T02:47:13.861-08:00", "startTime": "2025-02-05T02:47:13.861-08:00", "endTime": "2025-02-05T02:47:14.030-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738752433860-62d62d92c2e68-91563631-9f61bdfa" }, { "kind": "compute#operation", "id": "2573392871831822662", "name": "operation-1738760103957-62d64a2589316-3f295f1f-8bbc488a", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instances/gce1", "targetId": "4008916034740216135", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:05.269-08:00", "startTime": "2025-02-05T04:55:05.269-08:00", "endTime": "2025-02-05T04:55:18.479-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738760103957-62d64a2589316-3f295f1f-8bbc488a" }, { "kind": "compute#operation", "id": "7473153672630690093", "name": "operation-1738760130755-62d64a3f179f5-919db895-16bcc7d1", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "compute.instanceGroups.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1", "targetId": "361518988230844717", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:30.986-08:00", "startTime": "2025-02-05T04:55:30.989-08:00", "endTime": "2025-02-05T04:55:35.277-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738760130755-62d64a3f179f5-919db895-16bcc7d1" }, { "kind": "compute#operation", "id": "757473358983913789", "name": "operation-1738760146039-62d64a4dab257-0d569310-30a7483b", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b", "operationType": "compute.instanceGroups.addInstances", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1", "targetId": "361518988230844717", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:46.195-08:00", "startTime": "2025-02-05T04:55:46.207-08:00", "endTime": "2025-02-05T04:55:46.207-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738760146039-62d64a4dab257-0d569310-30a7483b" } ] }, "zones/europe-west4-a": { "operations": [ { "kind": "compute#operation", "id": "1685631025898492156", "name": "operation-1738747408877-62d61ada907a9-9d0f813e-f07449a1", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/unattached-disk", "targetId": "6953270790805426431", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:23:31.548-08:00", "startTime": "2025-02-05T01:23:31.553-08:00", "endTime": "2025-02-05T01:23:32.219-08:00", "warnings": [ { "code": "DEPRECATED_RESOURCE_USED", "message": "The resource 'projects/debian-cloud/global/images/debian-9-stretch-v20200805' is deprecated. A suggested replacement is 'projects/debian-cloud/global/images/debian-9-stretch-v20200902'.", "data": [ { "key": "resource_name", "value": "projects/debian-cloud/global/images/debian-9-stretch-v20200805" }, { "key": "replacement_suggestion", "value": "A suggested replacement is 'projects/debian-cloud/global/images/debian-9-stretch-v20200902'." } ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747408877-62d61ada907a9-9d0f813e-f07449a1" }, { "kind": "compute#operation", "id": "4802011922386817272", "name": "operation-1738747414610-62d61ae00819c-1ae008f6-bdd30571", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce2", "targetId": "2767531853241815288", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:23:35.682-08:00", "startTime": "2025-02-05T01:23:35.683-08:00", "endTime": "2025-02-05T01:23:43.626-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747414610-62d61ae00819c-1ae008f6-bdd30571" }, { "kind": "compute#operation", "id": "1352869565533425909", "name": "operation-1738747414893-62d61ae04d2d3-de871a42-9984398f", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroupManagers.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroupManagers/mig", "targetId": "1150095616799314165", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:23:38.382-08:00", "startTime": "2025-02-05T01:23:38.385-08:00", "endTime": "2025-02-05T01:24:01.160-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747414893-62d61ae04d2d3-de871a42-9984398f" }, { "kind": "compute#operation", "id": "8847423991943434487", "name": "operation-1738747415972-62d61ae154a58-e05669f8-723490a4", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce1", "targetId": "7276406499315716343", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:23:36.880-08:00", "startTime": "2025-02-05T01:23:36.880-08:00", "endTime": "2025-02-05T01:23:46.385-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747415972-62d61ae154a58-e05669f8-723490a4" }, { "kind": "compute#operation", "id": "1384003714742653120", "name": "operation-1738747439771-62d61af806d82-4ebbf5d7-24acef88", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2", "targetId": "685289583101776064", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:23:59.997-08:00", "startTime": "2025-02-05T01:24:00.002-08:00", "endTime": "2025-02-05T01:24:04.289-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747439771-62d61af806d82-4ebbf5d7-24acef88" }, { "kind": "compute#operation", "id": "2096195015671714014", "name": "operation-1738747441099-62d61af94b403-74fffca4-0c9a8fb9", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1", "targetId": "5126889459178967262", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:24:01.318-08:00", "startTime": "2025-02-05T01:24:01.321-08:00", "endTime": "2025-02-05T01:24:06.794-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747441099-62d61af94b403-74fffca4-0c9a8fb9" }, { "kind": "compute#operation", "id": "4861706435883339997", "name": "operation-1738747441948-62d61afa1a7d4-174f4852-23871217", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "clientOperationId": "f763fc54-1fbc-3f63-848c-06ebb1f05296", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-l40g", "targetId": "7786653639192252637", "status": "DONE", "user": "123456270@cloudservices.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T01:24:02.370-08:00", "startTime": "2025-02-05T01:24:02.370-08:00", "endTime": "2025-02-05T01:24:12.538-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747441948-62d61afa1a7d4-174f4852-23871217" }, { "kind": "compute#operation", "id": "5794338479467827421", "name": "operation-1738747442035-62d61afa2f96e-e5edb2fc-aec03ffe", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "clientOperationId": "3a3993c0-da77-3988-b31c-5b1b56ddcd40", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-bzvx", "targetId": "4335690972119601373", "status": "DONE", "user": "123456270@cloudservices.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T01:24:02.617-08:00", "startTime": "2025-02-05T01:24:02.618-08:00", "endTime": "2025-02-05T01:24:11.569-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747442035-62d61afa2f96e-e5edb2fc-aec03ffe" }, { "kind": "compute#operation", "id": "4800699324546584784", "name": "operation-1738747454988-62d61b0689feb-60effcf0-5387d4be", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.addInstances", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2", "targetId": "685289583101776064", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:24:15.134-08:00", "startTime": "2025-02-05T01:24:15.148-08:00", "endTime": "2025-02-05T01:24:15.148-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747454988-62d61b0689feb-60effcf0-5387d4be" }, { "kind": "compute#operation", "id": "14036514573815983", "name": "operation-1738747456352-62d61b07d71c2-98b6f713-591d5e59", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.addInstances", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1", "targetId": "5126889459178967262", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T01:24:16.483-08:00", "startTime": "2025-02-05T01:24:16.493-08:00", "endTime": "2025-02-05T01:24:16.493-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747456352-62d61b07d71c2-98b6f713-591d5e59" }, { "kind": "compute#operation", "id": "4665897794526969752", "name": "operation-1738752375159-62d62d5ac7c81-6ab87d2d-f48e8032", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1", "targetId": "5126889459178967262", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:46:15.349-08:00", "startTime": "2025-02-05T02:46:15.353-08:00", "endTime": "2025-02-05T02:46:23.560-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752375159-62d62d5ac7c81-6ab87d2d-f48e8032" }, { "kind": "compute#operation", "id": "8275472461379600280", "name": "operation-1738752375162-62d62d5ac86ca-cc818808-46a8ff2e", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroupManagers.delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroupManagers/mig", "targetId": "1150095616799314165", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:46:15.295-08:00", "startTime": "2025-02-05T02:46:15.297-08:00", "endTime": "2025-02-05T02:47:32.220-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752375162-62d62d5ac86ca-cc818808-46a8ff2e" }, { "kind": "compute#operation", "id": "5681832674437562264", "name": "operation-1738752375167-62d62d5ac9870-6e5ad865-b7457901", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2", "targetId": "685289583101776064", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:46:15.330-08:00", "startTime": "2025-02-05T02:46:15.333-08:00", "endTime": "2025-02-05T02:46:23.530-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752375167-62d62d5ac9870-6e5ad865-b7457901" }, { "kind": "compute#operation", "id": "7378605216059293590", "name": "operation-1738752376997-62d62d5c887bd-ce207daa-dc0d9c46", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "clientOperationId": "9522381a-6f56-4f71-8907-a0034c9a9a85", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-bzvx", "targetId": "4335690972119601373", "status": "DONE", "user": "123456270@cloudservices.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T02:46:17.164-08:00", "startTime": "2025-02-05T02:46:17.179-08:00", "endTime": "2025-02-05T02:47:12.367-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752376997-62d62d5c887bd-ce207daa-dc0d9c46" }, { "kind": "compute#operation", "id": "2560464745392963478", "name": "operation-1738752377049-62d62d5c9525c-1265037d-132960c4", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "clientOperationId": "656226e6-6ce5-4679-9355-fccafc12bfea", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-l40g", "targetId": "7786653639192252637", "status": "DONE", "user": "123456270@cloudservices.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T02:46:17.186-08:00", "startTime": "2025-02-05T02:46:17.197-08:00", "endTime": "2025-02-05T02:47:15.719-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752377049-62d62d5c9525c-1265037d-132960c4" }, { "kind": "compute#operation", "id": "7441798555944026006", "name": "operation-1738752377074-62d62d5c9b2d1-be498266-b2a69c60", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/unattached-disk", "targetId": "6953270790805426431", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:46:17.193-08:00", "startTime": "2025-02-05T02:46:17.204-08:00", "endTime": "2025-02-05T02:46:17.369-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752377074-62d62d5c9b2d1-be498266-b2a69c60" }, { "kind": "compute#operation", "id": "561518048789331818", "name": "operation-1738752389039-62d62d680477c-f4a64c5e-019153d6", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce1", "targetId": "7276406499315716343", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:46:29.253-08:00", "startTime": "2025-02-05T02:46:29.265-08:00", "endTime": "2025-02-05T02:46:53.832-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752389039-62d62d680477c-f4a64c5e-019153d6" }, { "kind": "compute#operation", "id": "4581826086040436585", "name": "operation-1738752390349-62d62d694435e-9f345930-41901d4b", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "delete", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce2", "targetId": "2767531853241815288", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T02:46:30.606-08:00", "startTime": "2025-02-05T02:46:30.618-08:00", "endTime": "2025-02-05T02:46:58.825-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752390349-62d62d694435e-9f345930-41901d4b" }, { "kind": "compute#operation", "id": "4908585814940639560", "name": "operation-1738760102900-62d64a248730c-2bb4806c-3a6bab00", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/unattached-disk", "targetId": "694992541288685897", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:03.393-08:00", "startTime": "2025-02-05T04:55:03.397-08:00", "endTime": "2025-02-05T04:55:04.024-08:00", "warnings": [ { "code": "DEPRECATED_RESOURCE_USED", "message": "The resource 'projects/debian-cloud/global/images/debian-9-stretch-v20200805' is deprecated. A suggested replacement is 'projects/debian-cloud/global/images/debian-9-stretch-v20200902'.", "data": [ { "key": "resource_name", "value": "projects/debian-cloud/global/images/debian-9-stretch-v20200805" }, { "key": "replacement_suggestion", "value": "A suggested replacement is 'projects/debian-cloud/global/images/debian-9-stretch-v20200902'." } ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760102900-62d64a248730c-2bb4806c-3a6bab00" }, { "kind": "compute#operation", "id": "601841551111283015", "name": "operation-1738760103937-62d64a2584737-260dc094-70ed5d1e", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce1", "targetId": "7734413015668154695", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:04.955-08:00", "startTime": "2025-02-05T04:55:04.955-08:00", "endTime": "2025-02-05T04:55:12.983-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760103937-62d64a2584737-260dc094-70ed5d1e" }, { "kind": "compute#operation", "id": "3915142334434435398", "name": "operation-1738760104007-62d64a25957c3-60a30d23-1164d9d5", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce2", "targetId": "3427402889068208455", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:05.061-08:00", "startTime": "2025-02-05T04:55:05.061-08:00", "endTime": "2025-02-05T04:55:16.951-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760104007-62d64a25957c3-60a30d23-1164d9d5" }, { "kind": "compute#operation", "id": "1144399772905300291", "name": "operation-1738760104797-62d64a26566ea-9a472cc1-6611ed5e", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroupManagers.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroupManagers/mig", "targetId": "8396330882583945539", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:08.124-08:00", "startTime": "2025-02-05T04:55:08.126-08:00", "endTime": "2025-02-05T04:55:21.835-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760104797-62d64a26566ea-9a472cc1-6611ed5e" }, { "kind": "compute#operation", "id": "4699679361577443668", "name": "operation-1738760122760-62d64a3777c52-d9d5de4a-3df1090b", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "clientOperationId": "186b2cde-969a-3386-bc6e-7ffbbc66d3e9", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-lpq6", "targetId": "7382059078434873685", "status": "DONE", "user": "123456270@cloudservices.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T04:55:23.096-08:00", "startTime": "2025-02-05T04:55:23.096-08:00", "endTime": "2025-02-05T04:55:32.819-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760122760-62d64a3777c52-d9d5de4a-3df1090b" }, { "kind": "compute#operation", "id": "6515331697394770260", "name": "operation-1738760122858-62d64a378fabe-f0934472-24433aac", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "clientOperationId": "e5221191-dedb-30e2-9966-7a64d8983b0d", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-mv82", "targetId": "7593829016559083860", "status": "DONE", "user": "123456270@cloudservices.gserviceaccount.com", "progress": 100, "insertTime": "2025-02-05T04:55:23.314-08:00", "startTime": "2025-02-05T04:55:23.314-08:00", "endTime": "2025-02-05T04:55:32.099-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760122858-62d64a378fabe-f0934472-24433aac" }, { "kind": "compute#operation", "id": "6947624682632700206", "name": "operation-1738760128998-62d64a3d6ade0-ffd89247-95f155ae", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2", "targetId": "5283965411150192942", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:29.189-08:00", "startTime": "2025-02-05T04:55:29.190-08:00", "endTime": "2025-02-05T04:55:34.578-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760128998-62d64a3d6ade0-ffd89247-95f155ae" }, { "kind": "compute#operation", "id": "2540219974661628204", "name": "operation-1738760130308-62d64a3eaab71-bf77f19c-6931df00", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1", "targetId": "4588026214929588524", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:31.505-08:00", "startTime": "2025-02-05T04:55:31.507-08:00", "endTime": "2025-02-05T04:55:36.461-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760130308-62d64a3eaab71-bf77f19c-6931df00" }, { "kind": "compute#operation", "id": "549539281921564991", "name": "operation-1738760144156-62d64a4bdf65a-79218dba-ac07d35d", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.addInstances", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2", "targetId": "5283965411150192942", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:44.329-08:00", "startTime": "2025-02-05T04:55:44.340-08:00", "endTime": "2025-02-05T04:55:44.340-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760144156-62d64a4bdf65a-79218dba-ac07d35d" }, { "kind": "compute#operation", "id": "2761961937788920125", "name": "operation-1738760146601-62d64a4e347eb-fb2cdaa8-454e7719", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a", "operationType": "compute.instanceGroups.addInstances", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1", "targetId": "4588026214929588524", "status": "DONE", "user": "ppoormina@google.com", "progress": 100, "insertTime": "2025-02-05T04:55:46.754-08:00", "startTime": "2025-02-05T04:55:46.767-08:00", "endTime": "2025-02-05T04:55:46.767-08:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760146601-62d64a4e347eb-fb2cdaa8-454e7719" } ] }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/us-east7-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-a'.", "data": [ { "key": "scope", "value": "zones/us-east7-a" } ] } }, "zones/us-east7-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-b'.", "data": [ { "key": "scope", "value": "zones/us-east7-b" } ] } }, "zones/us-east7-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east7-c'.", "data": [ { "key": "scope", "value": "zones/us-east7-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/us-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-c'.", "data": [ { "key": "scope", "value": "zones/us-west8-c" } ] } }, "zones/us-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-a'.", "data": [ { "key": "scope", "value": "zones/us-west8-a" } ] } }, "zones/us-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west8-b'.", "data": [ { "key": "scope", "value": "zones/us-west8-b" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/aggregated/operations" } ================================================ FILE: test-data/gce4/json-dumps/healthChecks.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-gce-vm-performance/global/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "6570916794820924287", "creationTimestamp": "2023-11-22T17:40:32.481-08:00", "name": "http-basic-check", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/healthChecks/http-basic-check", "logConfig": { "enable": true } }, { "kind": "compute#healthCheck", "id": "2011808073814110499", "creationTimestamp": "2023-11-22T11:00:28.722-08:00", "name": "http-basic-check-2", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/healthChecks/http-basic-check-2" }, { "kind": "compute#healthCheck", "id": "4700445592381550883", "creationTimestamp": "2023-11-22T11:00:28.748-08:00", "name": "tcp-basic-check-1", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "TCP", "tcpHealthCheck": { "port": 80, "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/healthChecks/tcp-basic-check-1", "logConfig": { "enable": true } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/healthChecks/" } ================================================ FILE: test-data/gce4/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com" ], "role": "roles/compute.instanceAdmin.v1" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com" ], "role": "roles/compute.osAdminLogin" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com" ], "role": "roles/compute.osLogin" }, { "members": [ "serviceAccount:service-12345601@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:12345601-compute@developer.gserviceaccount.com", "serviceAccount:12345601@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com" ], "role": "roles/iam.serviceAccountUser" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com" ], "role": "roles/iap.tunnelResourceAccessor" }, { "members": [ "serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com", "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12345601@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ], "role": "roles/websecurityscanner.serviceAgent" } ], "etag": "BwYKUSKQwSE=", "version": 1 } ================================================ FILE: test-data/gce4/json-dumps/iam-roles-get.json ================================================ {"roles": []} ================================================ FILE: test-data/gce4/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Cannot SSH Service Account", "email": "cannotssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce-vm-performance/serviceAccounts/cannotssh@gcpdiag-gce-faultyssh-n2tgc4kt.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce-vm-performance", "uniqueId": "10333387329722592424890" }, { "displayName": "Compute Engine default service account", "email": "12345601-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce-vm-performance/serviceAccounts/12345601-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce-vm-performance", "uniqueId": "115133333227031909369" }, { "displayName": "Can SSH Service Account", "email": "canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce-vm-performance/serviceAccounts/canssh@gcpdiag-gce-faultyssh-n2tgc4kt.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce-vm-performance", "uniqueId": "11795333333333337128185" } ] } ================================================ FILE: test-data/gce4/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9dartq", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_id": "8700821884762314590", "instance_group_manager_name": "gke-gke2-default-pool-11b6ca8e-grp", "project_id": "gcpdiag-gce-vm-performance", "location": "europe-west1-b" } }, "timestamp": "2021-11-24T16:35:22.615295Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:23.172680503Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gce-vm-performance/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-nuwdobe1byj2", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-98631c84-grp", "project_id": "gcpdiag-gce-vm-performance", "location": "europe-west1-d", "instance_group_manager_id": "6471686162526492481" } }, "timestamp": "2021-11-24T16:35:10.014049Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:10.306123333Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gce-vm-performance/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kpc", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-5e5781dd-grp", "project_id": "gcpdiag-gce-vm-performance", "instance_group_manager_id": "5205754198527039297", "location": "europe-west1-c" } }, "timestamp": "2021-11-24T16:35:08.922507Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693418-5d18b700269e6-19f4d541-4d012584", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:09.484397071Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gce-vm-performance/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kou", "resource": { "type": "gce_instance_group_manager", "labels": { "project_id": "gcpdiag-gce-vm-performance", "instance_group_manager_id": "3383879657688651622", "location": "europe-west1-c", "instance_group_manager_name": "gke-gke3-default-pool-013fb293-grp" } }, "timestamp": "2021-11-24T16:34:38.479723Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:39.479072691Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9darqs", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west1-b", "instance_group_manager_id": "5404218744580069225", "instance_group_manager_name": "gke-gke3-default-pool-597c9ca2-grp", "project_id": "gcpdiag-gce-vm-performance" } }, "timestamp": "2021-11-24T16:34:37.484721Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:38.168845698Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gce-vm-performance/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-31olexd4rpi", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke3-default-pool-c125bae7-grp", "location": "europe-west1-d", "project_id": "gcpdiag-gce-vm-performance", "instance_group_manager_id": "1403931912127633256" } }, "timestamp": "2021-11-24T16:34:35.389660Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:35.872428070Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gce-vm-performance", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } ] } ================================================ FILE: test-data/gce4/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.project_id" }, { "key": "resource.zone" }, { "key": "resource.instance_id" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_utilization_max", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "10^2.%" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "gcpdiag-gce-faultyssh-runbook" }, { "stringValue": "europe-west2-a" }, { "stringValue": "5942951451833189109" }, { "stringValue": "valid-linux-ssh" } ], "pointData": [ { "values": [ { "doubleValue": 0.0045755313326865847 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] }, { "labelValues": [ { "stringValue": "gcpdiag-gce-faultyssh-runbook" }, { "stringValue": "europe-west2-a" }, { "stringValue": "3885320804588110182" }, { "stringValue": "faulty-windows-ssh" } ], "pointData": [ { "values": [ { "doubleValue": 0.28800768913451219 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] }, { "labelValues": [ { "stringValue": "gcpdiag-gce-faultyssh-runbook" }, { "stringValue": "europe-west2-a" }, { "stringValue": "3200700792812650937" }, { "stringValue": "valid-windows-ssh" } ], "pointData": [ { "values": [ { "doubleValue": 0.30707438214176364 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] }, { "labelValues": [ { "stringValue": "gcpdiag-gce-faultyssh-runbook" }, { "stringValue": "europe-west2-a" }, { "stringValue": "1843453795420711417" }, { "stringValue": "faulty-linux-ssh" } ], "pointData": [ { "values": [ { "doubleValue": 0.99957377216799159 } ], "timeInterval": { "startTime": "2023-11-06T00:51:33.181476Z", "endTime": "2023-11-06T00:51:33.181476Z" } } ] } ] } ================================================ FILE: test-data/gce4/json-dumps/project.json ================================================ { "name": "projects/123456270", "parent": "folders/123456012", "projectId": "gcpdiag-gce-vm-performance", "state": "ACTIVE", "displayName": "gcpdiag test - vm performance", "createTime": "2023-11-03T21:16:55.750643Z", "updateTime": "2023-11-04T04:00:10.466760Z", "etag": "W/\"80b0d9f39ba4a6c9\"", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gce4/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12345601/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "BETA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" } ] } ================================================ FILE: test-data/gce4/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - vm performance" project_id = var.project_id != "" ? var.project_id : "gcpdiag-gce2-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_compute_project_metadata_item" "serial_logging" { project = google_project.project.project_id depends_on = [google_project_service.compute] key = "serial-port-logging-enable" value = "true" } data "google_compute_default_service_account" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] } data "google_compute_image" "debian" { family = "debian-11" project = "debian-cloud" } data "google_compute_image" "windows" { family = "windows-2019-core" project = "windows-cloud" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gce4/variables.tf ================================================ variable "project_id" { //default = "use-an-existing-test-project" //project_id = gcpdiag-gce-vm-performance } variable "billing_account_id" {} variable "org_id" { default = "" } variable "folder_id" { default = "" } variable "roles" { description = "List of SSH related roles to assign" type = list(string) default = [ "roles/owner", "roles/compute.osLogin", "roles/compute.osAdminLogin", "roles/iam.serviceAccountUser", "roles/iap.tunnelResourceAccessor", "roles/compute.instanceAdmin.v1", ] } ================================================ FILE: test-data/gce5/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner ZONE_1 = us-central1-c FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 123456012345 FAKE_ORG_ID = 11112222 COMPUTE_INSTANCES_MAXRESULTS=3 INSTANCE_NAME_GCE1=start-and-stop-vm INSTANCE_NAME_GCE2=spot-vm-termination INSTANCE_NAME_GCE3=shielded-vm-integrity-failure START_TIMESTAMP = 2025-03-17T00:00:00+00:00 END_TIMESTAMP = 2025-03-18T00:00:00+00:00 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ -e "s/[a-zA-Z0-9._%+-]+@google.com/$(FAKE_USER_ACCOUNT)/" all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-disks-$(ZONE_1).json \ json-dumps/compute-disks-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-regions.json \ json-dumps/compute-zones.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/global-operations.json \ json-dumps/logging-entries-1.json \ json-dumps/compute-migs-aggregated.json \ json-dumps/healthChecks.json \ json-dumps/compute-instances-aggregated.json include ../Makefile.inc define MONITORING_QUERY { \ "query": "fetch gce_instance \ | metric 'compute.googleapis.com/instance/cpu/utilization' \ | group_by 5m, [value_utilization_max: max(value.utilization)] \ | every 5m \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ TERMINATION_OPERATION_FILTER="%28operationType%3D%22compute.instances.repair.recreateInstance%22%29%20OR%20%28operationType%3D%22compute.instances.hostError%22%29%20OR%20%28operationType%3D%22compute.instances.guestTerminate%22%29%20OR%20%28operationType%3D%22compute.instances.preempted%22%29%20OR%20%28operationType%3D%22compute.instances.terminateOnHostMaintenance%22%29%20OR%20%28operationType%3D%22stop%22%29%20OR%20%28operationType%3D%22suspend%22%29%20OR%20%28operationType%3D%22reset%22%29%20OR%20%28operationType%3D%22compute.instanceGroupManagers.resizeAdvanced%22%29%20OR%20%28operationType%3D%22compute.autoscalers.resize%22%29%0A" json-dumps/global-operations.json: $(CURL) -fsS \ "https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/operations?filter=$(TERMINATION_OPERATION_FILTER)" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # protoPayload.methodName=~\"compute.instances.(hostError|guestTerminate|preempted|terminateOnHostMaintenance|stop|suspend|repair.recreateInstance|ScheduledVMs)\" OR define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "pageSize": 200, "filter": "timestamp > \"$(START_TIMESTAMP)\" AND timestamp < \"$(END_TIMESTAMP)\" AND resource.type=\"gce_instance\" AND protoPayload.methodName=~\"compute.instances.(hostError|guestTerminate|preempted|terminateOnHostMaintenance|stop|suspend|repair.recreateInstance)\" OR protoPayload.methodName=~\"ScheduledVMs\" OR (jsonPayload.@type=\"type.googleapis.com/cloud_integrity.IntegrityEvent\" AND severity=\"ERROR\")" } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/healthChecks.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gce5/json-dumps/compute-disks-europe-west2-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce5-aaaa/zones/europe-west2-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-b/disks" } ================================================ FILE: test-data/gce5/json-dumps/compute-disks-us-central1-c.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks", "items": [ { "kind": "compute#disk", "id": "324125873382120840", "creationTimestamp": "2025-03-18T14:19:36.663-07:00", "name": "apache-instance-3q8d", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-3q8d", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311", "sourceImageId": "6139874332219611556", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-18T14:19:37.762-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-3q8d" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "5581225578091489892", "creationTimestamp": "2025-03-18T17:49:16.023-07:00", "name": "apache-instance-7ssf", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-7ssf", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311", "sourceImageId": "6139874332219611556", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-18T17:50:11.251-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "5220330411195129197", "creationTimestamp": "2025-03-18T14:20:02.736-07:00", "name": "shielded-vm-integrity-failure", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/shielded-vm-integrity-failure", "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2204-jammy-v20250312", "sourceImageId": "6817663366014267458", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "IDPF" }, { "type": "TDX_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-18T14:20:03.421-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "5511465778777431107" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "1275105682248316840", "creationTimestamp": "2025-03-13T18:41:28.587-07:00", "name": "spot-vm-termination", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/spot-vm-termination", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311", "sourceImageId": "6139874332219611556", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-13T18:41:29.556-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "358652166287535319", "creationTimestamp": "2025-03-13T19:19:36.239-07:00", "name": "start-and-stop-vm", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/start-and-stop-vm", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311", "sourceImageId": "6139874332219611556", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-13T19:19:36.916-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true, "architecture": "X86_64" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks" } ================================================ FILE: test-data/gce5/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "5720173482424023855", "creationTimestamp": "2025-03-13T18:26:24.897-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "1526008042363960111", "creationTimestamp": "2025-03-13T18:26:24.984-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "2203694065663228718", "creationTimestamp": "2025-03-13T18:26:25.072-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "3858465039765617455", "creationTimestamp": "2025-03-13T18:26:24.809-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/firewalls/default-allow-internal" } ], "firewallPolicys": [ { "name": "902824820698", "type": "HIERARCHY", "shortName": "default-firewall-policy", "displayName": "default-firewall-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 0, "match": { "srcIpRanges": [ "34.168.226.0/26", "34.102.114.64/26", "34.16.224.64/26", "34.48.81.64/26", "34.168.146.160/27", "34.16.224.160/27", "34.82.66.0/24", "34.82.90.0/24", "34.82.98.0/24", "34.82.160.0/24", "34.82.166.128/25" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 1, "match": { "destIpRanges": [ "34.83.160.25/32", "34.125.160.60/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 600, "match": { "srcIpRanges": [ "35.235.240.0/20" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "22", "3389", "5900-5901" ] } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 601, "match": { "srcIpRanges": [ "35.191.0.0/16", "130.211.0.0/22", "209.85.152.0/22", "209.85.204.0/22", "169.254.169.254", "108.170.220.0/23" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 602, "match": { "srcIpRanges": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10", "240.0.0.0/4" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 603, "match": { "srcIpRanges": [ "35.199.192.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "53", "80", "443" ] }, { "ipProtocol": "udp", "ports": [ "53" ] } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 604, "match": { "srcIpRanges": [ "107.178.230.64/26", "35.199.224.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "667" ] }, { "ipProtocol": "udp", "ports": [ "665-666" ] }, { "ipProtocol": "icmp" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 700, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "deny", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483645, "match": { "srcIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false } ] } ] } ================================================ FILE: test-data/gce5/json-dumps/compute-instances-aggregated.json ================================================ { "kind": "compute#instanceAggregatedList", "id": "projects/gcpdiag-gce5-aaaa/aggregated/instances", "items": { "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "instances": [ { "kind": "compute#instance", "id": "8891820476183371144", "creationTimestamp": "2025-03-18T14:19:36.651-07:00", "name": "apache-instance-3q8d", "tags": { "items": [ "apache-server" ], "fingerprint": "opKpmsJsdKI=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.7", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "35.239.101.3", "networkTier": "PREMIUM" } ], "fingerprint": "d-G3Tu25ocs=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-3q8d", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "EpKIun7XEOE=", "items": [ { "key": "instance-template", "value": "projects/123456012345/global/instanceTemplates/apache-instance-template" }, { "key": "created-by", "value": "projects/123456012345/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-3q8d", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "MgWFnwgqN78=", "lastStartTimestamp": "2025-03-18T14:19:48.045-07:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "6200748239440076168", "creationTimestamp": "2025-03-18T14:19:35.989-07:00", "name": "apache-instance-7ssf", "tags": { "items": [ "apache-server" ], "fingerprint": "opKpmsJsdKI=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.8", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "35.226.46.168", "networkTier": "PREMIUM" } ], "fingerprint": "xtgZpQpkv1Y=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-7ssf", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "EpKIun7XEOE=", "items": [ { "key": "instance-template", "value": "projects/123456012345/global/instanceTemplates/apache-instance-template" }, { "key": "created-by", "value": "projects/123456012345/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "vC0nllWE4go=", "lastStartTimestamp": "2025-03-18T17:50:20.481-07:00", "lastStopTimestamp": "2025-03-18T17:50:08.144-07:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "8124223607509638509", "creationTimestamp": "2025-03-18T14:20:02.722-07:00", "name": "shielded-vm-integrity-failure", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/f1-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.9", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "34.171.224.128", "networkTier": "PREMIUM" } ], "fingerprint": "C4Pud6UkwgI=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/shielded-vm-integrity-failure", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "IDPF" }, { "type": "TDX_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "shieldedInstanceInitialState": { "dbxs": [ { "content": "2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndKvSt9o7kmKqTR9N1ZlpzCCDPUCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggsIMIIFGDCCBACgAwIBAgITMwAAABNryScg3e1ZiAAAAAAAEzANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMB4XDTE2MDEwNjE4MzQxNVoXDTE3MDQwNjE4MzQxNVowgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIxMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5kb3dzIFVFRkkgS2V5IEV4Y2hhbmdlIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXiCkZgbboTnVZnS1h_JbnlcVst9wtFK8NQjTpeB9wirml3h-fzi8vzki0hSNBD2Dg49lGEvs4egyowmTsLu1TnBUH1f_Hi8Noa7fKXV6F93qYrTPajx5v9L7NedplWnMEPsRvJrQdrysTZwtoXMLYDhc8bQHI5nlJDfgqrB8JiC4A3vL9i19lkQOTq4PZb5AcVcE0wlG7lR_btoQN0g5B4_7pI2S_9mU1PXr1NBSEl48Kl4cJwO2GyvOVvxQ6wUSFTExmCBKrT3LnPU5lZY68n3MpZ5VY4skhrEt2dyf5bZNzkYTTouxC0n37OrMbGGq3tpv7JDD6E_Rfqua3dXYECAwEAAaOCAXIwggFuMBQGA1UdJQQNMAsGCSsGAQQBgjdPATAdBgNVHQ4EFgQUVsJIppTfox2XYoAJRIlnxAUOy2owUQYDVR0RBEowSKRGMEQxDTALBgNVBAsTBE1PUFIxMzAxBgNVBAUTKjMxNjMxKzJjNDU2Y2JjLTA1NDItNDdkOS05OWU1LWQzOWI4MTVjNTczZTAfBgNVHSMEGDAWgBRi_EPNoD6ky2cS0lvZVax7zLaKXzBTBgNVHR8ETDBKMEigRqBEhkJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb3JLRUtDQTIwMTFfMjAxMS0wNi0yNC5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvcktFS0NBMjAxMV8yMDExLTA2LTI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCGjTFLjxsKmyLESJueg0S2Cp8N7MOq2IALsitZHwfYw2jMhY9b9kmKvIdSqVna1moZ6_zJSOS_JY6HkWZr6dDJe9Lj7xiW_e4qPP-KDrCVb02vBnK4EktVjTdJpyMhxBMdXUcq1eGl6518oCkQ27tu0-WZjaWEVsEY_gpQj0ye2UA4HYUYgJlpT24oJRi7TeQ03Nebb-ZrUkbf9uxl0OVV_mg2R5FDwOc3REoRAgv5jnw6X7ha5hlRCl2cLF27TFrFIRQQT4eSM33eDiitXXpYmD13jqKeHhLVXr07QSwqvKe1o1UYokJngP0pTwoDnt2qRuLnZ71jw732dSPN9B57MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9zb2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcNMTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxOi1ir-tVyawJsPq5_tXekQCXQcN2krldCrmsA_sbevsf7njWmMyfBEXTw7jC6c4FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX_IhU-PIIbO_i_hn_-CwO3pzc70U2piOgtDueIl_f4F-dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC_lme4kiwPsjfKL6sNK-0MREgt-tUeSbNzmBInr9TME6xABKnHl-YMTPP8lCS9odkb_uk--3K1xKliq-w7SeT3km2U7zCkqn_xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGveUCEeYd_41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH_MB8GA1UdIwQYMBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBhck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUHMAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhpUGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJnvveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr_pvbNFaE7ILKrkElcJxr6f6QD9eWH-XnlB-yKgyNS_8oKRB799d8pdF2uQXIee0PkJKcwv7fb35sD3vUwUXdNFGWOQ_lXlbYGAWW9AemQrOgd_0IGfJxVsyfhiOkh8um_Vh-1GlnFZF-gfJ_E-UNi4o8h4Tr4869Q-WtLYSTjmorWnxE-lKqgcgtHLvgUt8AEfiaPcFgsOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv_Y0uvDm25-bD4OTNJ4TvlELvKYuQRkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk_FBBQHngLU8Kaid2blLtlml7rw_3hwXQRcKtUxSBH_swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx_fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX-MoUrgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS_njGCAcQwggHAAgEBMIGYMIGAMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSowKAYDVQQDEyFNaWNyb3NvZnQgQ29ycG9yYXRpb24gS0VLIENBIDIwMTECEzMAAAATa8knIN3tWYgAAAAAABMwDQYJYIZIAWUDBAIBBQAwDQYJKoZIhvcNAQEBBQAEggEAhabaxRIJ7nUZ-m__mIG0lII6yD-lxoeI8S83ZKTP8Qx5h5asySWl7420eGhna7zyaVRvVVIhkjOMIfcKr29LgzQpYDqPUc8aYAdGCsZKZGmHCMjEulnq5TDK79GKinzZfb2sAWXEJ68N8oNnY7faBKjHjmmJbAEz8ufE4DijgJ_NBov2xmhTZyNHQ7pB1iCdrEUGObzdJc0Qtmh3CNOEcmH0ukd8sTHE9acBBTFHS8dvreR_sP7dXClZJbJiWAFKvQn3EjCTiYizkZ4I_5xiqjHELht_ORQKN-Hnoqnl4kcRINhZRV7JlgAQDlBJLv3OTjShRO_ZWCdcu7PtwhweiSYWxMFMUJJArKlB-TaTQyiMDgAAAAAAADAAAAC9mvp3WQMyTb1gKPTnj3hLgLTZaTG_DQL9kaYeGdFPHaRS5m2yQIyoYE1BH5Jlnwq9mvp3WQMyTb1gKPTnj3hL9S-Do_qc-9aSD3IoJNvkA0U00luFByRrO5V9rG4bznq9mvp3WQMyTb1gKPTnj3hLxdnYoYbiyC0Jr6oqb38uc4cNPmT3LE4I72d5aoQPD729mvp3WQMyTb1gKPTnj3hLNjOE0U0fLgt4FWJkhMRZrVejGO9DliZgSNBYxaGbv3a9mvp3WQMyTb1gKPTnj3hLGuyEuEtsZaUSIKm-cYGWUjAhDWLW0zxImZxrKVorCga9mvp3WQMyTb1gKPTnj3hL5spo6UFGYprwP2nC-G5r72L5MLN8b7zIeLeN-YwDNOW9mvp3WQMyTb1gKPTnj3hLw6maRg2kZKBXw1htg8719K4ItxA5ee2JMnQt8O1TDGa9mvp3WQMyTb1gKPTnj3hLWPuUGu-VollDs_tfJRCg3z_kTFjJXgq4BIcpdWirl3G9mvp3WQMyTb1gKPTnj3hLU5HDovsRIQKmqh7cJa534Z9dbwnNCe6yUJkiv81Zkuq9mvp3WQMyTb1gKPTnj3hL1iYVfh1qcYvBJKuNony7ZQcsoDp7ayV9vcu9YPZe89G9mvp3WQMyTb1gKPTnj3hL0GPsKPZ-ulPxZC2_ff8zxqMq3YafYBP-Fi4sMvHL5W29mvp3WQMyTb1gKPTnj3hLKcbrUrQ8OqGLLNjtbqhgfO88-uG6_hFldVzy5hSESkS9mvp3WQMyTb1gKPTnj3hLkPvnDmnWM0CNPhcMaDLbstIJ4CclJ9-2PUnSlXKm9Ey9mvp3WQMyTb1gKPTnj3hLB17qBgWJVIugYLL-7RDaPCDH_psXzQJrlOimg7gRUji9mvp3WQMyTb1gKPTnj3hLB-bGqFhkb7HvxnkD_iixFgEfI2f-kua-KzaZnv850J69mvp3WQMyTb1gKPTnj3hLCd9fTlESCOx4uW0S0IEl_bYDho3jn29yknhSWZtlnCa9mvp3WQMyTb1gKPTnj3hLC7tDktqseribMKSsZXUxuXv6qwT5Cw2v5fm265CgY3S9mvp3WQMyTb1gKPTnj3hLDBiTOXYt8zarPdAGpGPfcVo5z7D0kkZcYA5sa9e9iYy9mvp3WQMyTb1gKPTnj3hLDQ2-ym8p7KBvMxp9cuSISxIJf7NImDoqFKDXP08QFA-9mvp3WQMyTb1gKPTnj3hLDcnz-5mWIUjDyoM2MnWNPtT8jQsAB7lbMeZSjyrNW_y9mvp3WQMyTb1gKPTnj3hLEG-s6s_s_U4wO3T0gKCAmOLQgCuTb47HdM4h8xaGaJy9mvp3WQMyTb1gKPTnj3hLF046C1tDxqYHu9NATwU0Hj3POWJnzpT4tQ4uI6nakgy9mvp3WQMyTb1gKPTnj3hLGDM0Kf8FYu2flwM-EUjc7uUtvi5JbVQQtc_WyGTS0Q-9mvp3WQMyTb1gKPTnj3hLK5nPJkIukv42X79Lww0nCGye4Ut6b_9E-y9rkAFpmTm9mvp3WQMyTb1gKPTnj3hLK78sp7jx2R8n7lK2-ypd0Em4WiubUpxdZmIGgQSwVfi9mvp3WQMyTb1gKPTnj3hLLHPZMyW6bcvlidSkxjxbk1VZ75L78FDtUMTiCFIG8X29mvp3WQMyTb1gKPTnj3hLLnCRZ4am93NRH6cYH6sPHXC1V8YyLqkjsqjTuStRr329mvp3WQMyTb1gKPTnj3hLMGYo-lR3MFcoukpGfefQOHpU9WnTdp_OXnXsidKNFZO9mvp3WQMyTb1gKPTnj3hLNgjtuvWtD0GkFKF3er8vr15nAzRnXsOZXmk1gp4MqtK9mvp3WQMyTb1gKPTnj3hLOEHSITaNFYPXXAoC5iFgOU1sTgpnYLb2B7kDYryFWwK9mvp3WQMyTb1gKPTnj3hLP86bn98-8J1UUrD5XuSBwrfwbXQ6c3lxVY5wE2rOPnO9mvp3WQMyTb1gKPTnj3hLQ5fayoOef2MHfLUMkt9DvC0vsqj1nyb8eg5L1Nl1FpK9mvp3WQMyTb1gKPTnj3hLR8wIYSfiBpqG4Dpr7yzUEPjFWm1r2zYhaMMbLOMqWt-9mvp3WQMyTb1gKPTnj3hLUYgx_nOCtRTQPhXGISKLirZUeb0Mv6PFwdD0jZwwYTW9mvp3WQMyTb1gKPTnj3hLWulJ6ohV65PkOdvGW9ouQoUsL99nifoUZzbjw0EPK1y9mvp3WQMyTb1gKPTnj3hLax0TgHjkQYqmjet7s14GYJLPR57rjOTNEufQcsy0L2a9mvp3WQMyTb1gKPTnj3hLbIhUR43VWeKTUbgmwGy4v-8rlK01ODWHctGT-C7RyhG9mvp3WQMyTb1gKPTnj3hLbxQo_3HJ2w7Vrx8ue7_Lq2R8wmXd9bKTzbYm9Qo6eF69mvp3WQMyTb1gKPTnj3hLcfKQb9IiSX5Uo0ZiqySX_MgQIHcP9RNo6ePZv8v9Y3W9mvp3WQMyTb1gKPTnj3hLcms-tlQEajDz-D2bls4D9nDpqAbRcIoDceYtxJ0sI8G9mvp3WQMyTb1gKPTnj3hLcuC9GGfPXZ1WqxWK3zvdvIK_MqjYqh2MXi9t8pQo1ti9mvp3WQMyTb1gKPTnj3hLeCevmTYs-vBxfa3ksb_gQ4rRccFa3cJIt1v4yqRLssW9mvp3WQMyTb1gKPTnj3hLgai5ZbuE04drlCmpVIHMlVMYz6oUEtgIyKM7_TP_8OS9mvp3WQMyTb1gKPTnj3hLgts7zrT2CEPOnZfD0YfNm1lBzT3oEA5YbyvaVjdXX2e9mvp3WQMyTb1gKPTnj3hLiVqXhfYXyh1-1E_BoUcLcfPxIjhi2f-dzDri35IWPa-9mvp3WQMyTb1gKPTnj3hLitZIWfGVtfWNr6qUC2phZ6zWeohuj0aTZBdyIcVZRbm9mvp3WQMyTb1gKPTnj3hLi_Q0tJ4AzPcVAqLNkAhlywHsOz2gPDW-UF_fe9Vj9SG9mvp3WQMyTb1gKPTnj3hLjY6iic_nChwHq3NlyyjuUe3TPPJQbeiI-63WDr-ASBy9mvp3WQMyTb1gKPTnj3hLmZjTY8SRvha9dLoQuU2SkQAWEXNv3KZDo2ZkvA8xWkK9mvp3WQMyTb1gKPTnj3hLnkppFzFhaC5V_ej-9WDriOwf_tyvBAAfZsDK9weytzS9mvp3WQMyTb1gKPTnj3hLprUVHzZV06KvDUcnWXlr5KQgDlSVp9hpdUxISIV0CKe9mvp3WQMyTb1gKPTnj3hLp_MvUI1OsP6tmgh--U7RugrsXeb372_wpiuTvt9dRY29mvp3WQMyTb1gKPTnj3hLrWgm4ZRtJtPq82hciNl9hd47Tcs9DuKugccFYNE8VyC9mvp3WQMyTb1gKPTnj3hLruuuMVEnEnPtlaouZxE57TGphWcwOjMimPg3CanVWqG9mvp3WQMyTb1gKPTnj3hLr-IDCvt9LNoT-fozOgLjT2dRr-wRsBDbzUQf30xAArO9mvp3WQMyTb1gKPTnj3hLtU8e5jZjH61oBY07CTcDGsG5DMsXBio5HMpor9vkDVW9mvp3WQMyTb1gKPTnj3hLuPB42YOiSsQzIWOTiDUUzZMsM68Y591wiEyCNfQnVza9mvp3WQMyTb1gKPTnj3hLuXoIiQWcA1_x1UtttTsRuXZmaNn5VSR8AosoN9egTNm9mvp3WQMyTb1gKPTnj3hLvIemaOgZZkictQjugFGDwZ5qzSTPF3mcoGLS44TaDqe9mvp3WQMyTb1gKPTnj3hLxAm9rEd1rdjbkqoitbcY-4yUoUYsH-mkFrldijOIwvy9mvp3WQMyTb1gKPTnj3hLxhfBqLHuKoEcKLWoG0yD18mLWwwnKB1hAgfr5pLCln-9mvp3WQMyTb1gKPTnj3hLyQ8zZhe45_mDl1QTyZfxC3PrJn_YoQy5472_xmer24u9mvp3WQMyTb1gKPTnj3hLy2uFi0DToJh2WBW1ksFRSklgT6_WCBnaiNenbpd4_ve9mvp3WQMyTb1gKPTnj3hLzjv6vlnWfOisjf1KFvfEPvnCJFE_vGVZV9c1-in1QM69mvp3WQMyTb1gKPTnj3hL2MvrlzX1Zys2fk-WzcdJaWFdFwdK6WxyTULOAhb48_q9mvp3WQMyTb1gKPTnj3hL6Swi6ztWQtZcHsLK8kfSWUc47rt_s4QaRJVvWeKw0fq9mvp3WQMyTb1gKPTnj3hL_d1uPSnqhMd0Pa1KG9vHALX-wbOR-TJAkIasxx3W29i9mvp3WQMyTb1gKPTnj3hL_mOoT3gsydP88sz5_BH70Ddgh4dY0mKF7RJmm9xubQG9mvp3WQMyTb1gKPTnj3hL_s-yMtEumUttSF0scWdyiqVSWYStXKYedRYiHweaFDa9mvp3WQMyTb1gKPTnj3hLyhcdYUqNfhIck5SM0P5V05mB-dEaqW4DRQpBUifCxlu9mvp3WQMyTb1gKPTnj3hLVbmbDeU9vP5IWqnHN88_thbvPZH6tZmqfKsZ7adjtbq9mvp3WQMyTb1gKPTnj3hLd90ZD6MNiP9eOwEaCuYeYgl4DBMLU17Lh-bwiIoLay-9mvp3WQMyTb1gKPTnj3hLyDyxOSKtmfVgdEZ13TfMlNytWh_Lpkcv7jQRcdk56IS9mvp3WQMyTb1gKPTnj3hLOwKHUz4Mw9DsGqgjy_CpQarYchV50cSZgC3Rw6Y2uKm9mvp3WQMyTb1gKPTnj3hLk5ru9PX6UeIzQMPy5JBIzohyUmr991LDp_Oj8ryfYEm9mvp3WQMyTb1gKPTnj3hLZFdb2RJ4mi4UrVb2NB9Sr2v4DPlEAHhZdenwTi1k10W9mvp3WQMyTb1gKPTnj3hLRcfIrnUKz7tI_DdSfWQS3WRNrtiRPM2KJMlNhWln344=", "fileType": "BIN" } ] }, "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "rrJS6tNt0Po=", "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get upgrade -y\nupdate-grub\nreboot\n" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Haswell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "resourcePolicies": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/resourcePolicies/gce-policy" ], "shieldedInstanceConfig": { "enableSecureBoot": true, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "T0PHmApawds=", "lastStartTimestamp": "2025-03-18T14:20:16.562-07:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "2093000891450668968", "creationTimestamp": "2025-03-13T18:41:28.579-07:00", "name": "spot-vm-termination", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/f1-micro", "status": "TERMINATED", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.3", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ], "fingerprint": "txXtyRD3s-g=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/spot-vm-termination", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "X1EKTyO9S0E=" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "scheduling": { "onHostMaintenance": "TERMINATE", "automaticRestart": false, "preemptible": true, "provisioningModel": "SPOT", "instanceTerminationAction": "STOP" }, "cpuPlatform": "Unknown CPU Platform", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "resourcePolicies": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/resourcePolicies/gce-policy-stop-and-start" ], "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "YfYS4a6ebEk=", "lastStartTimestamp": "2025-03-18T18:00:14.989-07:00", "lastStopTimestamp": "2025-03-18T18:05:51.397-07:00", "satisfiesPzi": false }, { "kind": "compute#instance", "id": "3670725117245009111", "creationTimestamp": "2025-03-13T19:19:36.228-07:00", "name": "start-and-stop-vm", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/f1-micro", "status": "TERMINATED", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.5", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ], "fingerprint": "ZT1V7Kk9Jws=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/start-and-stop-vm", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "X1EKTyO9S0E=" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Unknown CPU Platform", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "resourcePolicies": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/resourcePolicies/gce-policy-stop-and-start" ], "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "db7l2mt-4p8=", "lastStartTimestamp": "2025-03-18T18:00:15.366-07:00", "lastStopTimestamp": "2025-03-18T18:05:50.737-07:00", "satisfiesPzi": true } ] }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-b'.", "data": [ { "key": "scope", "value": "zones/europe-west4-b" } ] } }, "zones/europe-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-a'.", "data": [ { "key": "scope", "value": "zones/europe-west4-a" } ] } }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/aggregated/instances" } ================================================ FILE: test-data/gce5/json-dumps/compute-instances-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gce5-aaaa/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-b/instances" } ================================================ FILE: test-data/gce5/json-dumps/compute-instances-us-central1-c.json ================================================ { "id": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances", "items": [ { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2025-03-18T14:19:36.651-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-3q8d", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "8891820476183371144", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2025-03-18T14:19:48.045-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/123456012345/global/instanceTemplates/apache-instance-template" }, { "key": "created-by", "value": "projects/123456012345/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout" } ], "kind": "compute#metadata" }, "name": "apache-instance-3q8d", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.239.101.3", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "networkIP": "10.128.0.7", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-3q8d", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "apache-server" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2025-03-18T14:19:35.989-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-7ssf", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "6200748239440076168", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2025-03-18T19:52:50.405-07:00", "lastStopTimestamp": "2025-03-18T19:52:35.171-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/123456012345/global/instanceTemplates/apache-instance-template" }, { "key": "created-by", "value": "projects/123456012345/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout" } ], "kind": "compute#metadata" }, "name": "apache-instance-7ssf", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.226.46.168", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "networkIP": "10.128.0.8", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "apache-server" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "canIpForward": false, "cpuPlatform": "Intel Haswell", "creationTimestamp": "2025-03-18T14:20:02.722-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "IDPF" }, { "type": "TDX_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbxs": [ { "content": "REDACTED", "fileType": "BIN" } ] }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/shielded-vm-integrity-failure", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "8124223607509638509", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2025-03-18T14:20:16.562-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/f1-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get upgrade -y\nupdate-grub\nreboot\n" } ], "kind": "compute#metadata" }, "name": "shielded-vm-integrity-failure", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.171.224.128", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "networkIP": "10.128.0.9", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default" } ], "resourcePolicies": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/resourcePolicies/gce-policy" ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } ], "kind": "compute#instanceList", "nextPageToken": "ClIIwpj9u5aVjAM6RwoCGAMKAyDSDwoCGAIKByDDx9_j9RYKAhgHCh8qHXNoaWVsZGVkLXZtLWludGVncml0eS1mYWlsdXJlCgog7brRy7vKwt9w", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances" } ================================================ FILE: test-data/gce5/json-dumps/compute-migs-aggregated.json ================================================ { "kind": "compute#instanceGroupManagerAggregatedList", "id": "projects/gcpdiag-gce5-aaaa/aggregated/instanceGroupManagers", "items": { "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-central1'.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west1'.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west1'.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east1'.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east1'.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast1'.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast1'.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east4'.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast1'.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west2'.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west3'.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-east1'.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south1'.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast1'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west4'.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north1'.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west2'.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east2'.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west6'.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast2'.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast3'.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west3'.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west4'.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast2'.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-central2'.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast2'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south2'.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast2'.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-west1'.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west8'.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west9'.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east5'.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-southwest1'.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-south1'.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-west1'.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west12'.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central1'.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west10'.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central2'.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/africa-south1'.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-south1'.", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ] } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north2'.", "data": [ { "key": "scope", "value": "regions/europe-north2" } ] } }, "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "instanceGroupManagers": [ { "kind": "compute#instanceGroupManager", "id": "9072206937951854043", "creationTimestamp": "2025-03-18T14:18:44.828-07:00", "name": "apache-mig-timeout", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/instanceTemplates/apache-instance-template", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/instanceTemplates/apache-instance-template", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instanceGroups/apache-mig-timeout", "baseInstanceName": "apache-instance", "fingerprint": "vsva0IqpYqA=", "currentActions": { "none": 0, "creating": 0, "creatingWithoutRetries": 0, "verifying": 2, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": false, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 2, "targetStoppedSize": 0, "targetSuspendedSize": 0, "listManagedInstancesResults": "PAGELESS", "standbyPolicy": { "mode": "MANUAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout", "autoHealingPolicies": [ { "healthCheck": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/healthChecks/apache-health-check", "initialDelaySec": 300 } ], "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "NO", "defaultActionOnFailure": "REPAIR" }, "satisfiesPzi": true, "satisfiesPzs": true } ] }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-b'.", "data": [ { "key": "scope", "value": "zones/europe-west4-b" } ] } }, "zones/europe-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-a'.", "data": [ { "key": "scope", "value": "zones/europe-west4-a" } ] } }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/aggregated/instanceGroupManagers" } ================================================ FILE: test-data/gce5/json-dumps/compute-network-default.json ================================================ { "autoCreateSubnetworks": true, "creationTimestamp": "2025-03-13T18:25:47.320-07:00", "description": "Default network for the project", "id": "4268604901518359412", "kind": "compute#network", "name": "default", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "routingConfig": { "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/4268604901518359412", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9/subnetworks/default" ] } ================================================ FILE: test-data/gce5/json-dumps/compute-project.json ================================================ { "cloudArmorTier": "CA_STANDARD", "commonInstanceMetadata": { "fingerprint": "ch8rUIV3aq8=", "items": [ { "key": "serial-port-logging-enable", "value": "true" } ], "kind": "compute#metadata" }, "creationTimestamp": "2025-03-13T18:25:38.050-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "123456012345-compute@developer.gserviceaccount.com", "id": "6673406894989523838", "kind": "compute#project", "name": "gcpdiag-gce5-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 4 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 0 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 1000, "metric": "HEALTH_CHECKS", "usage": 1 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 0 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 0 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 2000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 100, "metric": "SSL_POLICIES", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES", "usage": 0 }, { "limit": 750, "metric": "GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa", "vmDnsSetting": "GLOBAL_DEFAULT", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/gce5/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-gce5-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1", "description": "africa-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3", "supportsPzs": true }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1650", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north2", "description": "europe-north2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1", "supportsPzs": true }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 1000, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10", "description": "europe-west10", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10", "supportsPzs": true }, { "kind": "compute#region", "id": "1570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12", "description": "europe-west12", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12", "supportsPzs": true }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6", "supportsPzs": true }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8", "supportsPzs": true }, { "kind": "compute#region", "id": "1520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9", "description": "europe-west9", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9", "supportsPzs": true }, { "kind": "compute#region", "id": "1580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1", "description": "me-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1", "supportsPzs": true }, { "kind": "compute#region", "id": "1600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2", "description": "me-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central2", "supportsPzs": true }, { "kind": "compute#region", "id": "1560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1", "description": "me-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1", "supportsPzs": true }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1640", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-south1", "description": "northamerica-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 24, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 4096, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 500, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 128, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1", "supportsPzs": true }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 3 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 50 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 3 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 1 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 1 }, { "metric": "INSTANCES", "limit": 6000, "usage": 5 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 2 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 1000, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 1000, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 3000, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 1000, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5", "supportsPzs": true }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 4, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "SNAPSHOTS", "limit": 10000, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 2000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 500, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 512, "usage": 0 }, { "metric": "VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES", "limit": 40, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions" } ================================================ FILE: test-data/gce5/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-gce5-aaaa/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake", "AMD Turin" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake", "AMD Turin" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake", "AMD Turin" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "NVIDIA Grace", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake", "AMD Turin" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-f", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake", "AMD Turin" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake", "AMD Turin" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake", "AMD Turin" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake", "AMD Turin" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake", "AMD Turin" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2611", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-a", "description": "africa-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-b", "description": "africa-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2612", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-c", "description": "africa-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2651", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north2-a", "description": "europe-north2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2652", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north2-b", "description": "europe-north2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2650", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north2-c", "description": "europe-north2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2541", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-a", "description": "europe-southwest1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-b", "description": "europe-southwest1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2542", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-c", "description": "europe-southwest1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2591", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-a", "description": "europe-west10-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2592", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-b", "description": "europe-west10-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-c", "description": "europe-west10-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2571", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-a", "description": "europe-west12-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2572", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-b", "description": "europe-west12-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-c", "description": "europe-west12-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2521", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-a", "description": "europe-west9-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-b", "description": "europe-west9-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2522", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-c", "description": "europe-west9-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-a", "description": "me-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2581", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-b", "description": "me-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2582", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-c", "description": "me-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2601", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-a", "description": "me-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2602", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-b", "description": "me-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-c", "description": "me-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2561", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-a", "description": "me-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-b", "description": "me-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2562", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-c", "description": "me-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2641", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-south1-a", "description": "northamerica-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2640", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-south1-b", "description": "northamerica-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2642", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-south1-c", "description": "northamerica-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2532", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-a", "description": "us-east5-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2531", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-b", "description": "us-east5-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-c", "description": "us-east5-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2551", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-a", "description": "us-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2552", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-b", "description": "us-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-c", "description": "us-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Granite Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones" } ================================================ FILE: test-data/gce5/json-dumps/global-operations.json ================================================ { "id": "projects/gcpdiag-gce5-aaaa/aggregated/operations", "items": { "global": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "global" } ], "message": "No results for the scope 'global'." } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/africa-south1" } ], "message": "No results for the scope 'regions/africa-south1'." } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east1" } ], "message": "No results for the scope 'regions/asia-east1'." } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east2" } ], "message": "No results for the scope 'regions/asia-east2'." } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ], "message": "No results for the scope 'regions/asia-northeast1'." } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ], "message": "No results for the scope 'regions/asia-northeast2'." } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ], "message": "No results for the scope 'regions/asia-northeast3'." } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-south1" } ], "message": "No results for the scope 'regions/asia-south1'." } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-south2" } ], "message": "No results for the scope 'regions/asia-south2'." } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ], "message": "No results for the scope 'regions/asia-southeast1'." } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ], "message": "No results for the scope 'regions/asia-southeast2'." } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ], "message": "No results for the scope 'regions/australia-southeast1'." } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ], "message": "No results for the scope 'regions/australia-southeast2'." } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-central2" } ], "message": "No results for the scope 'regions/europe-central2'." } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-north1" } ], "message": "No results for the scope 'regions/europe-north1'." } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-north2" } ], "message": "No results for the scope 'regions/europe-north2'." } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ], "message": "No results for the scope 'regions/europe-southwest1'." } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west1" } ], "message": "No results for the scope 'regions/europe-west1'." } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west10" } ], "message": "No results for the scope 'regions/europe-west10'." } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west12" } ], "message": "No results for the scope 'regions/europe-west12'." } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west2" } ], "message": "No results for the scope 'regions/europe-west2'." } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west3" } ], "message": "No results for the scope 'regions/europe-west3'." } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west4" } ], "message": "No results for the scope 'regions/europe-west4'." } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west6" } ], "message": "No results for the scope 'regions/europe-west6'." } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west8" } ], "message": "No results for the scope 'regions/europe-west8'." } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west9" } ], "message": "No results for the scope 'regions/europe-west9'." } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-central1" } ], "message": "No results for the scope 'regions/me-central1'." } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-central2" } ], "message": "No results for the scope 'regions/me-central2'." } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-west1" } ], "message": "No results for the scope 'regions/me-west1'." } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ], "message": "No results for the scope 'regions/northamerica-northeast1'." } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ], "message": "No results for the scope 'regions/northamerica-northeast2'." } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ], "message": "No results for the scope 'regions/northamerica-south1'." } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ], "message": "No results for the scope 'regions/southamerica-east1'." } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ], "message": "No results for the scope 'regions/southamerica-west1'." } }, "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-central1" } ], "message": "No results for the scope 'regions/us-central1'." } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east1" } ], "message": "No results for the scope 'regions/us-east1'." } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east4" } ], "message": "No results for the scope 'regions/us-east4'." } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east5" } ], "message": "No results for the scope 'regions/us-east5'." } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-south1" } ], "message": "No results for the scope 'regions/us-south1'." } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west1" } ], "message": "No results for the scope 'regions/us-west1'." } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west2" } ], "message": "No results for the scope 'regions/us-west2'." } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west3" } ], "message": "No results for the scope 'regions/us-west3'." } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west4" } ], "message": "No results for the scope 'regions/us-west4'." } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ], "message": "No results for the scope 'zones/africa-south1-a'." } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ], "message": "No results for the scope 'zones/africa-south1-b'." } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ], "message": "No results for the scope 'zones/africa-south1-c'." } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ], "message": "No results for the scope 'zones/asia-east1-a'." } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ], "message": "No results for the scope 'zones/asia-east1-b'." } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ], "message": "No results for the scope 'zones/asia-east1-c'." } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ], "message": "No results for the scope 'zones/asia-east2-a'." } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ], "message": "No results for the scope 'zones/asia-east2-b'." } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ], "message": "No results for the scope 'zones/asia-east2-c'." } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ], "message": "No results for the scope 'zones/asia-northeast1-a'." } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ], "message": "No results for the scope 'zones/asia-northeast1-b'." } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ], "message": "No results for the scope 'zones/asia-northeast1-c'." } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ], "message": "No results for the scope 'zones/asia-northeast2-a'." } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ], "message": "No results for the scope 'zones/asia-northeast2-b'." } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ], "message": "No results for the scope 'zones/asia-northeast2-c'." } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ], "message": "No results for the scope 'zones/asia-northeast3-a'." } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ], "message": "No results for the scope 'zones/asia-northeast3-b'." } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ], "message": "No results for the scope 'zones/asia-northeast3-c'." } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ], "message": "No results for the scope 'zones/asia-south1-a'." } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ], "message": "No results for the scope 'zones/asia-south1-b'." } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ], "message": "No results for the scope 'zones/asia-south1-c'." } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ], "message": "No results for the scope 'zones/asia-south2-a'." } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ], "message": "No results for the scope 'zones/asia-south2-b'." } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ], "message": "No results for the scope 'zones/asia-south2-c'." } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ], "message": "No results for the scope 'zones/asia-southeast1-a'." } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ], "message": "No results for the scope 'zones/asia-southeast1-b'." } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ], "message": "No results for the scope 'zones/asia-southeast1-c'." } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ], "message": "No results for the scope 'zones/asia-southeast2-a'." } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ], "message": "No results for the scope 'zones/asia-southeast2-b'." } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ], "message": "No results for the scope 'zones/asia-southeast2-c'." } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ], "message": "No results for the scope 'zones/australia-southeast1-a'." } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ], "message": "No results for the scope 'zones/australia-southeast1-b'." } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ], "message": "No results for the scope 'zones/australia-southeast1-c'." } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ], "message": "No results for the scope 'zones/australia-southeast2-a'." } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ], "message": "No results for the scope 'zones/australia-southeast2-b'." } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ], "message": "No results for the scope 'zones/australia-southeast2-c'." } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ], "message": "No results for the scope 'zones/europe-central2-a'." } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ], "message": "No results for the scope 'zones/europe-central2-b'." } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ], "message": "No results for the scope 'zones/europe-central2-c'." } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ], "message": "No results for the scope 'zones/europe-north1-a'." } }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ], "message": "No results for the scope 'zones/europe-north1-b'." } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ], "message": "No results for the scope 'zones/europe-north1-c'." } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ], "message": "No results for the scope 'zones/europe-north2-a'." } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ], "message": "No results for the scope 'zones/europe-north2-b'." } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ], "message": "No results for the scope 'zones/europe-north2-c'." } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ], "message": "No results for the scope 'zones/europe-southwest1-a'." } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ], "message": "No results for the scope 'zones/europe-southwest1-b'." } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ], "message": "No results for the scope 'zones/europe-southwest1-c'." } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ], "message": "No results for the scope 'zones/europe-west1-b'." } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ], "message": "No results for the scope 'zones/europe-west1-c'." } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ], "message": "No results for the scope 'zones/europe-west1-d'." } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ], "message": "No results for the scope 'zones/europe-west10-a'." } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ], "message": "No results for the scope 'zones/europe-west10-b'." } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ], "message": "No results for the scope 'zones/europe-west10-c'." } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ], "message": "No results for the scope 'zones/europe-west12-a'." } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ], "message": "No results for the scope 'zones/europe-west12-b'." } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ], "message": "No results for the scope 'zones/europe-west12-c'." } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ], "message": "No results for the scope 'zones/europe-west2-a'." } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ], "message": "No results for the scope 'zones/europe-west2-b'." } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ], "message": "No results for the scope 'zones/europe-west2-c'." } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ], "message": "No results for the scope 'zones/europe-west3-a'." } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ], "message": "No results for the scope 'zones/europe-west3-b'." } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ], "message": "No results for the scope 'zones/europe-west3-c'." } }, "zones/europe-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west4-a" } ], "message": "No results for the scope 'zones/europe-west4-a'." } }, "zones/europe-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west4-b" } ], "message": "No results for the scope 'zones/europe-west4-b'." } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ], "message": "No results for the scope 'zones/europe-west4-c'." } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ], "message": "No results for the scope 'zones/europe-west6-a'." } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ], "message": "No results for the scope 'zones/europe-west6-b'." } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ], "message": "No results for the scope 'zones/europe-west6-c'." } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ], "message": "No results for the scope 'zones/europe-west8-a'." } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ], "message": "No results for the scope 'zones/europe-west8-b'." } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ], "message": "No results for the scope 'zones/europe-west8-c'." } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ], "message": "No results for the scope 'zones/europe-west9-a'." } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ], "message": "No results for the scope 'zones/europe-west9-b'." } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ], "message": "No results for the scope 'zones/europe-west9-c'." } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ], "message": "No results for the scope 'zones/me-central1-a'." } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ], "message": "No results for the scope 'zones/me-central1-b'." } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ], "message": "No results for the scope 'zones/me-central1-c'." } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ], "message": "No results for the scope 'zones/me-central2-a'." } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ], "message": "No results for the scope 'zones/me-central2-b'." } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ], "message": "No results for the scope 'zones/me-central2-c'." } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ], "message": "No results for the scope 'zones/me-west1-a'." } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ], "message": "No results for the scope 'zones/me-west1-b'." } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ], "message": "No results for the scope 'zones/me-west1-c'." } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ], "message": "No results for the scope 'zones/northamerica-northeast1-a'." } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ], "message": "No results for the scope 'zones/northamerica-northeast1-b'." } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ], "message": "No results for the scope 'zones/northamerica-northeast1-c'." } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ], "message": "No results for the scope 'zones/northamerica-northeast2-a'." } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ], "message": "No results for the scope 'zones/northamerica-northeast2-b'." } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ], "message": "No results for the scope 'zones/northamerica-northeast2-c'." } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ], "message": "No results for the scope 'zones/northamerica-south1-a'." } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ], "message": "No results for the scope 'zones/northamerica-south1-b'." } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ], "message": "No results for the scope 'zones/northamerica-south1-c'." } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ], "message": "No results for the scope 'zones/southamerica-east1-a'." } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ], "message": "No results for the scope 'zones/southamerica-east1-b'." } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ], "message": "No results for the scope 'zones/southamerica-east1-c'." } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ], "message": "No results for the scope 'zones/southamerica-west1-a'." } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ], "message": "No results for the scope 'zones/southamerica-west1-b'." } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ], "message": "No results for the scope 'zones/southamerica-west1-c'." } }, "zones/us-central1-a": { "operations": [ { "clientOperationId": "82a1b31b-6373-3331-9530-2246f3476861", "endTime": "2025-03-13T19:19:25.366-07:00", "error": { "errors": [ { "code": "RESOURCE_NOT_FOUND", "message": "The resource 'projects/gcpdiag-gce5-aaaa/zones/us-central1-a/instances/start-and-stop-vm' was not found" } ] }, "httpErrorMessage": "NOT FOUND", "httpErrorStatusCode": 404, "id": "5142704469367991548", "insertTime": "2025-03-13T19:18:59.172-07:00", "kind": "compute#operation", "name": "operation-1741918738719-630440fa6229d-59e249ee-f410fbb2", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a/operations/operation-1741918738719-630440fa6229d-59e249ee-f410fbb2", "startTime": "2025-03-13T19:19:25.366-07:00", "status": "DONE", "targetId": "2921551815730149289", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a" } ] }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ], "message": "No results for the scope 'zones/us-central1-b'." } }, "zones/us-central1-c": { "operations": [ { "clientOperationId": "903bfa26-1989-37e2-a172-4a6992307012", "endTime": "2025-03-13T20:05:46.622-07:00", "id": "7447814499462947379", "insertTime": "2025-03-13T20:05:00.884-07:00", "kind": "compute#operation", "name": "operation-1741921500429-63044b4427c45-4ad07f79-bcebd9f2", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741921500429-63044b4427c45-4ad07f79-bcebd9f2", "startTime": "2025-03-13T20:05:00.908-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c8885640-3ac2-380b-b907-f4c341fea0c2", "endTime": "2025-03-13T20:05:48.204-07:00", "id": "5950188132383990323", "insertTime": "2025-03-13T20:05:00.873-07:00", "kind": "compute#operation", "name": "operation-1741921500438-63044b442a161-1581efe9-6b85ea6d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741921500438-63044b442a161-1581efe9-6b85ea6d", "startTime": "2025-03-13T20:05:00.900-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0aa9a16c-fdcb-3ee5-b842-55fddd8e5d57", "endTime": "2025-03-13T21:05:53.126-07:00", "id": "7276012521972962307", "insertTime": "2025-03-13T21:05:00.787-07:00", "kind": "compute#operation", "name": "operation-1741925100415-630458ad5e8ef-e6cdb23a-d7270dd9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741925100415-630458ad5e8ef-e6cdb23a-d7270dd9", "startTime": "2025-03-13T21:05:00.809-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "8972c0aa-3872-397f-b757-b2be5c868ec1", "endTime": "2025-03-13T21:05:52.170-07:00", "id": "8525480033785877507", "insertTime": "2025-03-13T21:05:00.851-07:00", "kind": "compute#operation", "name": "operation-1741925100428-630458ad61eb9-06ed216f-88ee8061", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741925100428-630458ad61eb9-06ed216f-88ee8061", "startTime": "2025-03-13T21:05:00.870-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ddc8b8e6-ce29-3b31-8e26-38621264f47b", "endTime": "2025-03-13T22:05:58.826-07:00", "id": "8310898683084146195", "insertTime": "2025-03-13T22:05:00.879-07:00", "kind": "compute#operation", "name": "operation-1741928700427-630466169bbda-2a0d8b7b-8a0e496c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741928700427-630466169bbda-2a0d8b7b-8a0e496c", "startTime": "2025-03-13T22:05:00.904-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "17592de3-9336-3cb4-833e-c35e85f48982", "endTime": "2025-03-13T22:05:55.209-07:00", "id": "5584102677899249171", "insertTime": "2025-03-13T22:05:00.766-07:00", "kind": "compute#operation", "name": "operation-1741928700427-630466169bcab-0bc18660-67d66c81", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741928700427-630466169bcab-0bc18660-67d66c81", "startTime": "2025-03-13T22:05:00.795-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e3532ee4-be53-3b65-9248-eeb978ab1912", "endTime": "2025-03-13T23:05:51.767-07:00", "id": "799716153348749795", "insertTime": "2025-03-13T23:05:00.938-07:00", "kind": "compute#operation", "name": "operation-1741932300442-6304737fd9c73-22b54b5f-272bb249", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741932300442-6304737fd9c73-22b54b5f-272bb249", "startTime": "2025-03-13T23:05:00.960-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c02206ce-51eb-3fac-867d-00b862477255", "endTime": "2025-03-13T23:06:19.419-07:00", "id": "3698190342181255651", "insertTime": "2025-03-13T23:05:00.905-07:00", "kind": "compute#operation", "name": "operation-1741932300447-6304737fdb055-892d663a-81cd5142", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741932300447-6304737fdb055-892d663a-81cd5142", "startTime": "2025-03-13T23:05:00.936-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0b219e6a-4799-39d8-a869-15ed9dcaed7c", "endTime": "2025-03-14T00:05:56.364-07:00", "id": "3354028140237057011", "insertTime": "2025-03-14T00:05:00.911-07:00", "kind": "compute#operation", "name": "operation-1741935900513-630480e925484-31433525-9e79b78f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741935900513-630480e925484-31433525-9e79b78f", "startTime": "2025-03-14T00:05:00.935-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e9b91542-f376-3232-93af-1da5adfeef04", "endTime": "2025-03-14T00:05:58.969-07:00", "id": "4627895932489198579", "insertTime": "2025-03-14T00:05:00.867-07:00", "kind": "compute#operation", "name": "operation-1741935900515-630480e925b9f-d0a819ad-b11dfebe", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741935900515-630480e925b9f-d0a819ad-b11dfebe", "startTime": "2025-03-14T00:05:00.890-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "dfc953d7-291e-3a18-9291-bae31b4aba65", "endTime": "2025-03-14T01:05:57.236-07:00", "id": "913323647555231171", "insertTime": "2025-03-14T01:05:00.892-07:00", "kind": "compute#operation", "name": "operation-1741939500493-63048e525a946-f2c0bb34-b74ab2fa", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741939500493-63048e525a946-f2c0bb34-b74ab2fa", "startTime": "2025-03-14T01:05:00.916-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "51cc27a5-0e2e-3efb-a544-bf33103a7a7d", "endTime": "2025-03-14T01:05:48.656-07:00", "id": "8780992598912163266", "insertTime": "2025-03-14T01:05:01.581-07:00", "kind": "compute#operation", "name": "operation-1741939500603-63048e52756ab-62a16aec-19796c26", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741939500603-63048e52756ab-62a16aec-19796c26", "startTime": "2025-03-14T01:05:01.729-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0a17a771-91c0-35b1-86e0-7a8f0bc2b084", "endTime": "2025-03-14T02:05:43.657-07:00", "id": "5631482502250909650", "insertTime": "2025-03-14T02:05:01.023-07:00", "kind": "compute#operation", "name": "operation-1741943100499-63049bbb96793-2dcfcf22-8619106f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741943100499-63049bbb96793-2dcfcf22-8619106f", "startTime": "2025-03-14T02:05:01.051-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "fb45cee5-764d-3c3a-b0b9-552c82f4c201", "endTime": "2025-03-14T02:05:46.884-07:00", "id": "264451245584830419", "insertTime": "2025-03-14T02:05:00.879-07:00", "kind": "compute#operation", "name": "operation-1741943100506-63049bbb97fea-be0e51c2-8c7ba899", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741943100506-63049bbb97fea-be0e51c2-8c7ba899", "startTime": "2025-03-14T02:05:00.902-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "47f5b7bb-70f4-30f2-899f-cc68f29f52aa", "endTime": "2025-03-14T03:05:47.335-07:00", "id": "4257542440153399715", "insertTime": "2025-03-14T03:05:00.911-07:00", "kind": "compute#operation", "name": "operation-1741946700445-6304a924c385a-0caf2cd2-64665c25", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741946700445-6304a924c385a-0caf2cd2-64665c25", "startTime": "2025-03-14T03:05:00.943-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ccdf5384-a8a6-3f3b-b261-a83cec2beefa", "endTime": "2025-03-14T03:05:47.300-07:00", "id": "9132074770559287715", "insertTime": "2025-03-14T03:05:00.914-07:00", "kind": "compute#operation", "name": "operation-1741946700453-6304a924c5785-95d7c140-241a5918", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741946700453-6304a924c5785-95d7c140-241a5918", "startTime": "2025-03-14T03:05:00.949-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "71dd1d28-b0c0-341e-8051-81b760dd1374", "endTime": "2025-03-14T04:05:47.252-07:00", "id": "7933924133589070771", "insertTime": "2025-03-14T04:05:00.767-07:00", "kind": "compute#operation", "name": "operation-1741950300389-6304b68df00ff-2b415ed0-f0f3fe37", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741950300389-6304b68df00ff-2b415ed0-f0f3fe37", "startTime": "2025-03-14T04:05:00.788-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6cad29a8-baff-3e4e-adb6-88ead99bae9e", "endTime": "2025-03-14T04:05:47.999-07:00", "id": "204432423402451891", "insertTime": "2025-03-14T04:05:00.774-07:00", "kind": "compute#operation", "name": "operation-1741950300404-6304b68df3cfc-8153a63b-cd1dd2f9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741950300404-6304b68df3cfc-8153a63b-cd1dd2f9", "startTime": "2025-03-14T04:05:00.801-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "42948b78-801c-372e-81a7-4a962cfb15b7", "endTime": "2025-03-14T05:05:48.551-07:00", "id": "6534545542838068611", "insertTime": "2025-03-14T05:05:00.866-07:00", "kind": "compute#operation", "name": "operation-1741953900469-6304c3f73db41-149b271a-f73b7677", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741953900469-6304c3f73db41-149b271a-f73b7677", "startTime": "2025-03-14T05:05:00.887-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "793b7985-6756-3a94-a0ed-9b64f848e27c", "endTime": "2025-03-14T05:05:50.203-07:00", "id": "7451319785481676163", "insertTime": "2025-03-14T05:05:00.881-07:00", "kind": "compute#operation", "name": "operation-1741953900489-6304c3f742a57-8f118b59-bc49ed23", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741953900489-6304c3f742a57-8f118b59-bc49ed23", "startTime": "2025-03-14T05:05:00.907-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "4c7b6a41-83d6-30ef-ac37-de6ced77f699", "endTime": "2025-03-14T06:05:49.308-07:00", "id": "335893061571286931", "insertTime": "2025-03-14T06:05:00.891-07:00", "kind": "compute#operation", "name": "operation-1741957500475-6304d1607991c-cde382ce-f6582b69", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741957500475-6304d1607991c-cde382ce-f6582b69", "startTime": "2025-03-14T06:05:00.913-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0222ca14-fdfe-3d97-957c-b6e9c55f6d07", "endTime": "2025-03-14T06:05:47.647-07:00", "id": "6656091356378273683", "insertTime": "2025-03-14T06:05:00.876-07:00", "kind": "compute#operation", "name": "operation-1741957500497-6304d1607ef7c-99ec7090-dc77f09e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741957500497-6304d1607ef7c-99ec7090-dc77f09e", "startTime": "2025-03-14T06:05:00.897-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d28236dc-b53a-3215-aeb7-fb6e44d05685", "endTime": "2025-03-14T07:06:03.022-07:00", "id": "4390548321655687523", "insertTime": "2025-03-14T07:05:00.880-07:00", "kind": "compute#operation", "name": "operation-1741961100460-6304dec9b0067-363b1249-e386d5e6", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741961100460-6304dec9b0067-363b1249-e386d5e6", "startTime": "2025-03-14T07:05:00.937-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ceb4e70b-7798-32dc-82fd-84d9b9663fcb", "endTime": "2025-03-14T07:05:48.101-07:00", "id": "4102537285188815203", "insertTime": "2025-03-14T07:05:00.891-07:00", "kind": "compute#operation", "name": "operation-1741961100467-6304dec9b1e0c-8e0c803e-e41013d7", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741961100467-6304dec9b1e0c-8e0c803e-e41013d7", "startTime": "2025-03-14T07:05:00.921-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c035e3bd-61e6-3e87-9288-d7511804b895", "endTime": "2025-03-14T08:05:56.211-07:00", "id": "8970635252074150770", "insertTime": "2025-03-14T08:05:01.986-07:00", "kind": "compute#operation", "name": "operation-1741964701486-6304ec33e4dc7-76d477a8-22e25a66", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741964701486-6304ec33e4dc7-76d477a8-22e25a66", "startTime": "2025-03-14T08:05:02.020-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "f2b3dceb-f99e-3306-974d-7304c880ebb7", "endTime": "2025-03-14T08:05:53.057-07:00", "id": "5193768104349006706", "insertTime": "2025-03-14T08:05:01.878-07:00", "kind": "compute#operation", "name": "operation-1741964701487-6304ec33e5287-2dc89aad-9c882f06", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741964701487-6304ec33e5287-2dc89aad-9c882f06", "startTime": "2025-03-14T08:05:01.904-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d66cc275-7ff5-34ea-9a7f-69499343b78d", "endTime": "2025-03-14T09:05:58.658-07:00", "id": "6730176003181243715", "insertTime": "2025-03-14T09:05:00.892-07:00", "kind": "compute#operation", "name": "operation-1741968300482-6304f99c29ea5-abb45cf0-3493b639", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741968300482-6304f99c29ea5-abb45cf0-3493b639", "startTime": "2025-03-14T09:05:00.923-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e13282a5-d2d2-32bb-86cf-e2ad2036ceb4", "endTime": "2025-03-14T09:05:58.338-07:00", "id": "2034394323234712899", "insertTime": "2025-03-14T09:05:00.889-07:00", "kind": "compute#operation", "name": "operation-1741968300497-6304f99c2d97f-206f8b3f-73bf817c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741968300497-6304f99c2d97f-206f8b3f-73bf817c", "startTime": "2025-03-14T09:05:00.909-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "92fc4be3-fc50-353b-b757-1b2c3d59b924", "endTime": "2025-03-14T10:05:51.804-07:00", "id": "3425064683109474131", "insertTime": "2025-03-14T10:05:00.922-07:00", "kind": "compute#operation", "name": "operation-1741971900505-6305070569cf9-17f7ca6c-d01b0a59", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741971900505-6305070569cf9-17f7ca6c-d01b0a59", "startTime": "2025-03-14T10:05:00.949-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "7b4b6ca6-845b-39ed-be32-bf28a778b8ca", "endTime": "2025-03-14T10:05:52.380-07:00", "id": "7360805411302793043", "insertTime": "2025-03-14T10:05:00.872-07:00", "kind": "compute#operation", "name": "operation-1741971900508-630507056a8db-0059bb38-79770f47", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741971900508-630507056a8db-0059bb38-79770f47", "startTime": "2025-03-14T10:05:00.923-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "cd25aa5a-d98e-3647-87da-1b3d75d54d75", "endTime": "2025-03-14T11:06:01.938-07:00", "id": "1306212189047738659", "insertTime": "2025-03-14T11:05:00.874-07:00", "kind": "compute#operation", "name": "operation-1741975500472-6305146e9c018-f420ac1b-64131e4e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741975500472-6305146e9c018-f420ac1b-64131e4e", "startTime": "2025-03-14T11:05:00.902-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "cd68a406-7e80-31eb-91a4-e2a5a05e5dcb", "endTime": "2025-03-14T11:05:47.903-07:00", "id": "8901619439774585123", "insertTime": "2025-03-14T11:05:00.923-07:00", "kind": "compute#operation", "name": "operation-1741975500473-6305146e9c672-1a101a06-aa690df2", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741975500473-6305146e9c672-1a101a06-aa690df2", "startTime": "2025-03-14T11:05:00.960-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c260c91a-af75-305a-aac9-e2b4c18e6a6b", "endTime": "2025-03-14T12:05:52.267-07:00", "id": "5319631283439649586", "insertTime": "2025-03-14T12:05:01.881-07:00", "kind": "compute#operation", "name": "operation-1741979101449-630521d8c4ed2-44b710c8-1a232728", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741979101449-630521d8c4ed2-44b710c8-1a232728", "startTime": "2025-03-14T12:05:01.914-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "fdc85d06-2656-30de-a2d5-8d4c967c5923", "endTime": "2025-03-14T12:05:48.774-07:00", "id": "355152730013680434", "insertTime": "2025-03-14T12:05:01.906-07:00", "kind": "compute#operation", "name": "operation-1741979101452-630521d8c5a92-5fc2248b-2a18500c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741979101452-630521d8c5a92-5fc2248b-2a18500c", "startTime": "2025-03-14T12:05:01.951-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "4ef5113f-df42-3f35-a958-9c883491bff7", "endTime": "2025-03-14T13:05:51.411-07:00", "id": "3589538265276429571", "insertTime": "2025-03-14T13:05:00.890-07:00", "kind": "compute#operation", "name": "operation-1741982700475-63052f4111511-8c720f82-8962eae0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741982700475-63052f4111511-8c720f82-8962eae0", "startTime": "2025-03-14T13:05:00.923-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c8fe6f3c-cca5-3084-a4d7-71400e047c3b", "endTime": "2025-03-14T13:05:53.375-07:00", "id": "4046261247832306947", "insertTime": "2025-03-14T13:05:00.893-07:00", "kind": "compute#operation", "name": "operation-1741982700482-63052f4112ec9-5aaa15de-1b593d8e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741982700482-63052f4112ec9-5aaa15de-1b593d8e", "startTime": "2025-03-14T13:05:00.918-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "17926a3d-c1df-361a-bf7f-959af5acd048", "endTime": "2025-03-14T14:05:49.725-07:00", "id": "2553869483814496019", "insertTime": "2025-03-14T14:05:00.773-07:00", "kind": "compute#operation", "name": "operation-1741986300376-63053caa3368f-06e18d34-24f96aec", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741986300376-63053caa3368f-06e18d34-24f96aec", "startTime": "2025-03-14T14:05:00.799-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c0d42991-8f6b-3c58-8184-9d2a1a6d02af", "endTime": "2025-03-14T14:07:00.393-07:00", "id": "5277460008877500179", "insertTime": "2025-03-14T14:05:00.788-07:00", "kind": "compute#operation", "name": "operation-1741986300380-63053caa34510-cb70bd93-5b4fe45e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741986300380-63053caa34510-cb70bd93-5b4fe45e", "startTime": "2025-03-14T14:05:00.809-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "7c4e33fb-e0d6-3702-a09f-f2caf23c78e3", "endTime": "2025-03-14T15:05:47.886-07:00", "id": "5503736426677212899", "insertTime": "2025-03-14T15:05:00.883-07:00", "kind": "compute#operation", "name": "operation-1741989900504-63054a138cedf-3754de93-f606b617", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741989900504-63054a138cedf-3754de93-f606b617", "startTime": "2025-03-14T15:05:00.909-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "28ac4a61-b401-3426-a201-4338ef492935", "endTime": "2025-03-14T15:05:51.374-07:00", "id": "8019628741396862691", "insertTime": "2025-03-14T15:05:00.895-07:00", "kind": "compute#operation", "name": "operation-1741989900508-63054a138dbc4-7952a289-b7124478", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741989900508-63054a138dbc4-7952a289-b7124478", "startTime": "2025-03-14T15:05:00.922-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "f4e7158f-af59-346b-a14a-25369fef3378", "endTime": "2025-03-14T16:05:48.583-07:00", "id": "5513089581252675827", "insertTime": "2025-03-14T16:05:00.815-07:00", "kind": "compute#operation", "name": "operation-1741993500404-6305577caec94-a57aca31-de4d7c84", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741993500404-6305577caec94-a57aca31-de4d7c84", "startTime": "2025-03-14T16:05:00.847-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "82301474-b403-35bf-8bd2-e890e3b7f008", "endTime": "2025-03-14T16:05:46.780-07:00", "id": "1055817506951334131", "insertTime": "2025-03-14T16:05:00.765-07:00", "kind": "compute#operation", "name": "operation-1741993500412-6305577cb0969-e2edc84b-25658108", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741993500412-6305577cb0969-e2edc84b-25658108", "startTime": "2025-03-14T16:05:00.803-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e8aad69c-5d53-33ac-b480-35eb43031047", "endTime": "2025-03-14T17:05:48.790-07:00", "id": "8266840358805666499", "insertTime": "2025-03-14T17:05:00.760-07:00", "kind": "compute#operation", "name": "operation-1741997100407-630564e5e9aaf-0e82e6aa-644f9947", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741997100407-630564e5e9aaf-0e82e6aa-644f9947", "startTime": "2025-03-14T17:05:00.781-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "76afa6f6-c9fd-3cbd-b1fa-1bf3d741b87a", "endTime": "2025-03-14T17:06:02.977-07:00", "id": "1552765800286878403", "insertTime": "2025-03-14T17:05:00.921-07:00", "kind": "compute#operation", "name": "operation-1741997100413-630564e5eb1f9-0a198294-06ac927f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741997100413-630564e5eb1f9-0a198294-06ac927f", "startTime": "2025-03-14T17:05:00.959-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2e4cc108-36cf-3793-8f0c-86254ffc880f", "endTime": "2025-03-14T18:05:54.635-07:00", "id": "5188101006671047891", "insertTime": "2025-03-14T18:05:00.750-07:00", "kind": "compute#operation", "name": "operation-1742000700408-6305724f2449c-72304ea1-29f2f232", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742000700408-6305724f2449c-72304ea1-29f2f232", "startTime": "2025-03-14T18:05:00.769-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "369cb09d-5d11-3095-a75f-eae9f4582240", "endTime": "2025-03-14T18:05:50.949-07:00", "id": "7279980461868805331", "insertTime": "2025-03-14T18:05:00.762-07:00", "kind": "compute#operation", "name": "operation-1742000700410-6305724f24ba4-d0c79188-bf6c2adf", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742000700410-6305724f24ba4-d0c79188-bf6c2adf", "startTime": "2025-03-14T18:05:00.781-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "46e85d9c-2609-345e-8552-3ef7d685c7b8", "endTime": "2025-03-14T19:05:51.033-07:00", "id": "7047327014066937507", "insertTime": "2025-03-14T19:05:00.774-07:00", "kind": "compute#operation", "name": "operation-1742004300399-63057fb85c311-09708aec-af15af35", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742004300399-63057fb85c311-09708aec-af15af35", "startTime": "2025-03-14T19:05:00.802-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0872b1ac-2ca0-33a2-ab54-9488b6cf64ff", "endTime": "2025-03-14T19:05:51.258-07:00", "id": "5679044995856293539", "insertTime": "2025-03-14T19:05:00.896-07:00", "kind": "compute#operation", "name": "operation-1742004300438-63057fb865ba4-3755b1f7-513f9457", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742004300438-63057fb865ba4-3755b1f7-513f9457", "startTime": "2025-03-14T19:05:00.920-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "3c81f538-9890-32f4-aa02-a9efbfbc1870", "endTime": "2025-03-14T20:05:47.036-07:00", "id": "624019740032585907", "insertTime": "2025-03-14T20:05:00.926-07:00", "kind": "compute#operation", "name": "operation-1742007900461-63058d21a58d1-464c3549-18146d8d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742007900461-63058d21a58d1-464c3549-18146d8d", "startTime": "2025-03-14T20:05:00.957-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "99d5bde8-9d21-32e0-aa55-e119eb73d078", "endTime": "2025-03-14T20:05:47.510-07:00", "id": "5110182770843930803", "insertTime": "2025-03-14T20:05:00.952-07:00", "kind": "compute#operation", "name": "operation-1742007900476-63058d21a94f9-4bfe3d2d-c10f5f61", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742007900476-63058d21a94f9-4bfe3d2d-c10f5f61", "startTime": "2025-03-14T20:05:01.007-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2378f179-82b4-344a-8aa6-97729972c388", "endTime": "2025-03-14T21:05:48.552-07:00", "id": "4100357795444507267", "insertTime": "2025-03-14T21:05:00.757-07:00", "kind": "compute#operation", "name": "operation-1742011500386-63059a8acd74d-d35cd225-284e9829", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742011500386-63059a8acd74d-d35cd225-284e9829", "startTime": "2025-03-14T21:05:00.779-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b1af841c-ccf9-364a-a3a2-e93854aade0b", "endTime": "2025-03-14T21:05:48.245-07:00", "id": "7280566248163328643", "insertTime": "2025-03-14T21:05:00.756-07:00", "kind": "compute#operation", "name": "operation-1742011500392-63059a8acefd1-e1b1bb6c-9fb98719", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742011500392-63059a8acefd1-e1b1bb6c-9fb98719", "startTime": "2025-03-14T21:05:00.780-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c1593de9-15e9-363f-b03b-e54b7eddc1a2", "endTime": "2025-03-14T22:05:46.242-07:00", "id": "4093538443940377747", "insertTime": "2025-03-14T22:05:00.875-07:00", "kind": "compute#operation", "name": "operation-1742015100476-6305a7f41de03-ecae7d49-b4b55ebb", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742015100476-6305a7f41de03-ecae7d49-b4b55ebb", "startTime": "2025-03-14T22:05:00.900-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "760ae48b-673f-3071-abb0-f4360d676858", "endTime": "2025-03-14T22:05:46.951-07:00", "id": "6509899388405986451", "insertTime": "2025-03-14T22:05:00.889-07:00", "kind": "compute#operation", "name": "operation-1742015100483-6305a7f41f7db-f488ef14-1fa060d6", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742015100483-6305a7f41f7db-f488ef14-1fa060d6", "startTime": "2025-03-14T22:05:00.919-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2484d9de-5a8d-3c1f-b926-5d87c3bd6fb9", "endTime": "2025-03-14T23:05:51.802-07:00", "id": "116948359104210530", "insertTime": "2025-03-14T23:05:01.871-07:00", "kind": "compute#operation", "name": "operation-1742018701486-6305b55e4e99e-e4a94c34-9a33135c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742018701486-6305b55e4e99e-e4a94c34-9a33135c", "startTime": "2025-03-14T23:05:01.899-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "bf330747-3fc9-354e-9ef7-0ca34690a03f", "endTime": "2025-03-14T23:05:57.746-07:00", "id": "8499822066662942306", "insertTime": "2025-03-14T23:05:01.864-07:00", "kind": "compute#operation", "name": "operation-1742018701495-6305b55e50bf8-57b95901-388e7303", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742018701495-6305b55e50bf8-57b95901-388e7303", "startTime": "2025-03-14T23:05:01.885-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "885bac9b-7af1-3d12-b8bb-fbfe441d179b", "endTime": "2025-03-15T00:05:48.280-07:00", "id": "2929682029907318899", "insertTime": "2025-03-15T00:05:00.880-07:00", "kind": "compute#operation", "name": "operation-1742022300480-6305c2c693599-8c994fdf-080e0af6", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742022300480-6305c2c693599-8c994fdf-080e0af6", "startTime": "2025-03-15T00:05:00.906-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e0b3384d-cb8c-37af-bbc3-3008218c706a", "endTime": "2025-03-15T00:06:26.290-07:00", "id": "5951765545022429299", "insertTime": "2025-03-15T00:05:00.862-07:00", "kind": "compute#operation", "name": "operation-1742022300482-6305c2c693bf4-13ca2d43-ccb3258e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742022300482-6305c2c693bf4-13ca2d43-ccb3258e", "startTime": "2025-03-15T00:05:00.882-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ab6e9cc8-ccf8-31ad-8a55-f49c3ddc7959", "endTime": "2025-03-15T01:05:51.619-07:00", "id": "2055725218180663875", "insertTime": "2025-03-15T01:05:00.881-07:00", "kind": "compute#operation", "name": "operation-1742025900468-6305d02fca96e-6b1599d3-79f099d8", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742025900468-6305d02fca96e-6b1599d3-79f099d8", "startTime": "2025-03-15T01:05:00.907-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "7e8d0da0-3c12-3c0f-92c3-bf506a9f5cef", "endTime": "2025-03-15T01:05:47.078-07:00", "id": "1564871444783467075", "insertTime": "2025-03-15T01:05:00.914-07:00", "kind": "compute#operation", "name": "operation-1742025900480-6305d02fcd9ae-c81145e8-c661f006", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742025900480-6305d02fcd9ae-c81145e8-c661f006", "startTime": "2025-03-15T01:05:00.951-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "259f5465-6b44-3f64-b1ce-94f370942e25", "endTime": "2025-03-15T02:05:47.296-07:00", "id": "1432642604469124179", "insertTime": "2025-03-15T02:05:00.839-07:00", "kind": "compute#operation", "name": "operation-1742029500497-6305dd990bec2-da14209e-10f13e75", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742029500497-6305dd990bec2-da14209e-10f13e75", "startTime": "2025-03-15T02:05:00.852-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "4dbc50b2-ad6e-3281-ba86-80cc187366da", "endTime": "2025-03-15T02:05:47.073-07:00", "id": "811280988448029779", "insertTime": "2025-03-15T02:05:00.852-07:00", "kind": "compute#operation", "name": "operation-1742029500511-6305dd990f6ca-a678e03a-ef99d42e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742029500511-6305dd990f6ca-a678e03a-ef99d42e", "startTime": "2025-03-15T02:05:00.873-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "8c1a1a58-9d8f-3de3-9549-806b1ca40ec7", "endTime": "2025-03-15T03:05:52.391-07:00", "id": "3682189299785723427", "insertTime": "2025-03-15T03:05:00.892-07:00", "kind": "compute#operation", "name": "operation-1742033100441-6305eb023872f-6078b60e-491e8088", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742033100441-6305eb023872f-6078b60e-491e8088", "startTime": "2025-03-15T03:05:00.923-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "45ea5c00-9f7f-3127-b9e2-3a3ab3f727b2", "endTime": "2025-03-15T03:05:52.407-07:00", "id": "3057704478036258339", "insertTime": "2025-03-15T03:05:00.931-07:00", "kind": "compute#operation", "name": "operation-1742033100444-6305eb023944b-2cf81c90-7254cd30", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742033100444-6305eb023944b-2cf81c90-7254cd30", "startTime": "2025-03-15T03:05:00.964-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b4c5328c-b9e6-3e26-9014-0130c25499f1", "endTime": "2025-03-15T04:05:47.043-07:00", "id": "2222249647231524915", "insertTime": "2025-03-15T04:05:00.868-07:00", "kind": "compute#operation", "name": "operation-1742036700448-6305f86b746de-9a2a7d80-baa519ed", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742036700448-6305f86b746de-9a2a7d80-baa519ed", "startTime": "2025-03-15T04:05:00.888-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "56f1b7de-d646-3d15-955a-a79295b55088", "endTime": "2025-03-15T04:05:47.825-07:00", "id": "2539882660822048819", "insertTime": "2025-03-15T04:05:00.857-07:00", "kind": "compute#operation", "name": "operation-1742036700475-6305f86b7aed3-e7afb938-4d16a505", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742036700475-6305f86b7aed3-e7afb938-4d16a505", "startTime": "2025-03-15T04:05:00.876-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "95d40d31-91a5-3e50-aeb4-e02feab29e2d", "endTime": "2025-03-15T05:05:58.338-07:00", "id": "5472593614518931971", "insertTime": "2025-03-15T05:05:00.859-07:00", "kind": "compute#operation", "name": "operation-1742040300463-630605d4b258c-f73ee5ab-1a7d7774", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742040300463-630605d4b258c-f73ee5ab-1a7d7774", "startTime": "2025-03-15T05:05:00.882-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "7deed09b-4951-3804-a7fd-bb34cc4b6624", "endTime": "2025-03-15T05:05:47.335-07:00", "id": "2159451852359913987", "insertTime": "2025-03-15T05:05:00.829-07:00", "kind": "compute#operation", "name": "operation-1742040300463-630605d4b2676-b8ece8e1-4fb4698e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742040300463-630605d4b2676-b8ece8e1-4fb4698e", "startTime": "2025-03-15T05:05:00.846-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "90944a15-6d82-3875-bef5-b741093f5397", "endTime": "2025-03-15T06:06:01.470-07:00", "id": "8703677166039647251", "insertTime": "2025-03-15T06:05:00.862-07:00", "kind": "compute#operation", "name": "operation-1742043900456-6306133deac87-57d1b953-54e44801", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742043900456-6306133deac87-57d1b953-54e44801", "startTime": "2025-03-15T06:05:00.883-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "29f9eea0-13a4-3005-9b21-6680b2b1fef2", "endTime": "2025-03-15T06:06:00.938-07:00", "id": "1510862767907193875", "insertTime": "2025-03-15T06:05:00.880-07:00", "kind": "compute#operation", "name": "operation-1742043900463-6306133dec824-7e00f0da-79c53b9c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742043900463-6306133dec824-7e00f0da-79c53b9c", "startTime": "2025-03-15T06:05:00.909-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "52243139-59cf-30c1-afb4-18fea2ddb9dd", "endTime": "2025-03-15T07:05:48.401-07:00", "id": "3468943116977321954", "insertTime": "2025-03-15T07:05:01.866-07:00", "kind": "compute#operation", "name": "operation-1742047501483-630620a81fc38-c0ce1d7e-3e897030", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742047501483-630620a81fc38-c0ce1d7e-3e897030", "startTime": "2025-03-15T07:05:01.889-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "a9979b1e-dea1-32c0-b318-4f56b882f502", "endTime": "2025-03-15T07:05:48.859-07:00", "id": "2427689452101449698", "insertTime": "2025-03-15T07:05:01.882-07:00", "kind": "compute#operation", "name": "operation-1742047501487-630620a820da4-512fe8b4-9a84a24c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742047501487-630620a820da4-512fe8b4-9a84a24c", "startTime": "2025-03-15T07:05:01.911-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "5a7c34a6-6c86-3b86-907f-9ba1a7723cf2", "endTime": "2025-03-15T08:05:49.428-07:00", "id": "2148160237309798899", "insertTime": "2025-03-15T08:05:00.784-07:00", "kind": "compute#operation", "name": "operation-1742051100394-63062e1050471-422586b7-54d95a5f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742051100394-63062e1050471-422586b7-54d95a5f", "startTime": "2025-03-15T08:05:00.813-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "3b09bf66-b831-3840-97d9-cf1ffd1d3e61", "endTime": "2025-03-15T08:05:50.435-07:00", "id": "3443324934136801779", "insertTime": "2025-03-15T08:05:00.775-07:00", "kind": "compute#operation", "name": "operation-1742051100401-63062e105211b-4a3eff64-c5060446", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742051100401-63062e105211b-4a3eff64-c5060446", "startTime": "2025-03-15T08:05:00.802-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "16b82b00-b980-38cb-8f72-5f1b893575d5", "endTime": "2025-03-15T09:05:52.252-07:00", "id": "7438667563446836163", "insertTime": "2025-03-15T09:05:00.786-07:00", "kind": "compute#operation", "name": "operation-1742054700416-63063b798ff46-c3272795-e5444119", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742054700416-63063b798ff46-c3272795-e5444119", "startTime": "2025-03-15T09:05:00.819-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "fa42148d-a34d-3d00-81c4-bcecc57ede11", "endTime": "2025-03-15T09:05:47.238-07:00", "id": "6277805549072948163", "insertTime": "2025-03-15T09:05:00.759-07:00", "kind": "compute#operation", "name": "operation-1742054700416-63063b798ffba-be6c4361-5c9dcc56", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742054700416-63063b798ffba-be6c4361-5c9dcc56", "startTime": "2025-03-15T09:05:00.785-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "cdb640cb-082d-3016-93bf-3b3fbf79d917", "endTime": "2025-03-15T10:05:46.919-07:00", "id": "805549096893418962", "insertTime": "2025-03-15T10:05:01.972-07:00", "kind": "compute#operation", "name": "operation-1742058301536-630648e3db86f-38a9a850-2b7fdae6", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742058301536-630648e3db86f-38a9a850-2b7fdae6", "startTime": "2025-03-15T10:05:01.998-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "7c09676b-9e5c-3226-b7b5-87182f4342f8", "endTime": "2025-03-15T10:05:47.744-07:00", "id": "8167286633246756306", "insertTime": "2025-03-15T10:05:01.956-07:00", "kind": "compute#operation", "name": "operation-1742058301537-630648e3dbd0c-79e61a6f-65d3c5e2", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742058301537-630648e3dbd0c-79e61a6f-65d3c5e2", "startTime": "2025-03-15T10:05:01.985-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e3e1303f-5739-3996-8046-31773333ced3", "endTime": "2025-03-15T11:05:47.708-07:00", "id": "2763862052802428835", "insertTime": "2025-03-15T11:05:00.861-07:00", "kind": "compute#operation", "name": "operation-1742061900445-6306564c0b58d-ecc6a805-eb830722", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742061900445-6306564c0b58d-ecc6a805-eb830722", "startTime": "2025-03-15T11:05:00.887-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "cad60fa3-d1ac-350f-b07e-168eb687dfc2", "endTime": "2025-03-15T11:05:57.804-07:00", "id": "5499539577909051299", "insertTime": "2025-03-15T11:05:00.892-07:00", "kind": "compute#operation", "name": "operation-1742061900456-6306564c0e272-601161a2-08cd53ce", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742061900456-6306564c0e272-601161a2-08cd53ce", "startTime": "2025-03-15T11:05:00.921-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "75d4cdcd-dfd5-3374-9846-1a821436f8ef", "endTime": "2025-03-15T12:05:47.050-07:00", "id": "2651378371148673459", "insertTime": "2025-03-15T12:05:00.876-07:00", "kind": "compute#operation", "name": "operation-1742065500464-630663b54a3b9-5b2e3c4a-bbf9f011", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742065500464-630663b54a3b9-5b2e3c4a-bbf9f011", "startTime": "2025-03-15T12:05:00.899-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b67c55e3-9863-3cd5-aef7-90add3d92bbe", "endTime": "2025-03-15T12:05:59.920-07:00", "id": "893496347644686771", "insertTime": "2025-03-15T12:05:00.884-07:00", "kind": "compute#operation", "name": "operation-1742065500471-630663b54c1f0-0e78e4e6-d826a580", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742065500471-630663b54c1f0-0e78e4e6-d826a580", "startTime": "2025-03-15T12:05:00.911-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "4d893fe6-f742-3475-b7fa-c37090af90a9", "endTime": "2025-03-15T13:05:47.109-07:00", "id": "3654474202242114435", "insertTime": "2025-03-15T13:05:00.900-07:00", "kind": "compute#operation", "name": "operation-1742069100476-6306711e876b8-537f953c-f272c9ce", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742069100476-6306711e876b8-537f953c-f272c9ce", "startTime": "2025-03-15T13:05:00.934-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2d75b350-efc4-3f37-a50b-d0a212ab01b6", "endTime": "2025-03-15T13:05:49.742-07:00", "id": "674026941908018051", "insertTime": "2025-03-15T13:05:00.937-07:00", "kind": "compute#operation", "name": "operation-1742069100483-6306711e89484-3e91db20-5fa79213", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742069100483-6306711e89484-3e91db20-5fa79213", "startTime": "2025-03-15T13:05:01.012-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9c57d22c-bf55-38bb-bde0-469472e23156", "endTime": "2025-03-15T14:05:47.636-07:00", "id": "7048653218363495827", "insertTime": "2025-03-15T14:05:00.783-07:00", "kind": "compute#operation", "name": "operation-1742072700428-63067e87b61b5-bd6dcec3-6936c3f6", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742072700428-63067e87b61b5-bd6dcec3-6936c3f6", "startTime": "2025-03-15T14:05:00.806-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "a39b7c32-9d9b-3d59-842e-c7e0f8753216", "endTime": "2025-03-15T14:05:48.091-07:00", "id": "1068667374791054739", "insertTime": "2025-03-15T14:05:00.901-07:00", "kind": "compute#operation", "name": "operation-1742072700445-63067e87ba22c-31a2b0c0-c9886558", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742072700445-63067e87ba22c-31a2b0c0-c9886558", "startTime": "2025-03-15T14:05:00.928-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "5817803d-8dcf-3637-af41-aa8fe25c26b9", "endTime": "2025-03-15T15:05:47.969-07:00", "id": "9190125793344767843", "insertTime": "2025-03-15T15:05:00.881-07:00", "kind": "compute#operation", "name": "operation-1742076300436-63068bf0f2240-4e45862e-1578eb71", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742076300436-63068bf0f2240-4e45862e-1578eb71", "startTime": "2025-03-15T15:05:00.906-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "440cdc18-7b9e-3e72-af99-34120bfcce01", "endTime": "2025-03-15T15:05:55.623-07:00", "id": "1097724095563843427", "insertTime": "2025-03-15T15:05:00.855-07:00", "kind": "compute#operation", "name": "operation-1742076300446-63068bf0f4b2c-110351ad-70ec0689", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742076300446-63068bf0f4b2c-110351ad-70ec0689", "startTime": "2025-03-15T15:05:00.874-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e39a0c2c-e2bd-3ab2-b478-dcecca70c7b6", "endTime": "2025-03-15T16:05:58.027-07:00", "id": "1407325623390288243", "insertTime": "2025-03-15T16:05:00.898-07:00", "kind": "compute#operation", "name": "operation-1742079900457-6306995a31b71-7d6ed5a4-863a536b", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742079900457-6306995a31b71-7d6ed5a4-863a536b", "startTime": "2025-03-15T16:05:00.924-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "507ae77a-182d-384d-9513-1e37597c5cd7", "endTime": "2025-03-15T16:05:49.512-07:00", "id": "4504889391981508979", "insertTime": "2025-03-15T16:05:00.959-07:00", "kind": "compute#operation", "name": "operation-1742079900490-6306995a39a26-0815482d-e758a3ed", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742079900490-6306995a39a26-0815482d-e758a3ed", "startTime": "2025-03-15T16:05:01.009-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "12ca5765-ee80-32b4-a418-c0f41d062f92", "endTime": "2025-03-15T17:05:56.520-07:00", "id": "562621863981460291", "insertTime": "2025-03-15T17:05:00.878-07:00", "kind": "compute#operation", "name": "operation-1742083500454-6306a6c36b0df-7b694281-911a15c5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742083500454-6306a6c36b0df-7b694281-911a15c5", "startTime": "2025-03-15T17:05:00.928-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "cdad129b-b3fa-3453-a45b-0a5fdabb1c8e", "endTime": "2025-03-15T17:05:53.536-07:00", "id": "2663622923477822275", "insertTime": "2025-03-15T17:05:00.876-07:00", "kind": "compute#operation", "name": "operation-1742083500460-6306a6c36cabb-b8b3be24-409705e7", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742083500460-6306a6c36cabb-b8b3be24-409705e7", "startTime": "2025-03-15T17:05:00.900-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "002d051f-4e5f-3b75-b08e-7cfaa900b650", "endTime": "2025-03-15T18:05:48.696-07:00", "id": "2310454677625085267", "insertTime": "2025-03-15T18:05:00.877-07:00", "kind": "compute#operation", "name": "operation-1742087100461-6306b42ca72bf-8f25feab-9f0609e5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742087100461-6306b42ca72bf-8f25feab-9f0609e5", "startTime": "2025-03-15T18:05:00.897-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "21d1602a-3de3-35ea-bb87-1c6a582933c3", "endTime": "2025-03-15T18:05:47.023-07:00", "id": "4476698261737676115", "insertTime": "2025-03-15T18:05:00.868-07:00", "kind": "compute#operation", "name": "operation-1742087100472-6306b42ca9b05-5abc1038-3a40cd7c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742087100472-6306b42ca9b05-5abc1038-3a40cd7c", "startTime": "2025-03-15T18:05:00.891-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "1806c0db-a0bd-3a2d-8b86-1225cdd383dd", "endTime": "2025-03-15T19:05:47.001-07:00", "id": "7528264377992711971", "insertTime": "2025-03-15T19:05:00.910-07:00", "kind": "compute#operation", "name": "operation-1742090700458-6306c195e0918-97dca515-cb25dfe6", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742090700458-6306c195e0918-97dca515-cb25dfe6", "startTime": "2025-03-15T19:05:00.945-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c88ef42a-15be-3db5-9e94-57b65e8a7ba0", "endTime": "2025-03-15T19:05:48.399-07:00", "id": "8636976319637983011", "insertTime": "2025-03-15T19:05:00.876-07:00", "kind": "compute#operation", "name": "operation-1742090700467-6306c195e2c34-318770b3-21bcdab3", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742090700467-6306c195e2c34-318770b3-21bcdab3", "startTime": "2025-03-15T19:05:00.903-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ddc2b415-4c0e-393b-8710-9682c2c1fde7", "endTime": "2025-03-15T20:05:51.160-07:00", "id": "40585627287912755", "insertTime": "2025-03-15T20:05:00.835-07:00", "kind": "compute#operation", "name": "operation-1742094300464-6306ceff1c6c6-47aa06c1-83063214", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742094300464-6306ceff1c6c6-47aa06c1-83063214", "startTime": "2025-03-15T20:05:00.852-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "7f69b131-7f8b-3513-8be6-d9123c708567", "endTime": "2025-03-15T20:05:47.218-07:00", "id": "961991850426335539", "insertTime": "2025-03-15T20:05:00.858-07:00", "kind": "compute#operation", "name": "operation-1742094300471-6306ceff1e0c2-b1c0e558-74a447d0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742094300471-6306ceff1e0c2-b1c0e558-74a447d0", "startTime": "2025-03-15T20:05:00.878-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0789a604-66c9-3d05-b9b4-2bec4134c32d", "endTime": "2025-03-15T21:05:47.202-07:00", "id": "123675197012964099", "insertTime": "2025-03-15T21:05:00.871-07:00", "kind": "compute#operation", "name": "operation-1742097900427-6306dc684d7dc-49fce950-04ba6942", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742097900427-6306dc684d7dc-49fce950-04ba6942", "startTime": "2025-03-15T21:05:00.893-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "8eb2667e-d94f-3a53-b796-f0f2502b5b07", "endTime": "2025-03-15T21:05:47.755-07:00", "id": "357920986759951107", "insertTime": "2025-03-15T21:05:00.859-07:00", "kind": "compute#operation", "name": "operation-1742097900453-6306dc6853d71-1f236005-53d1e06d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742097900453-6306dc6853d71-1f236005-53d1e06d", "startTime": "2025-03-15T21:05:00.881-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "375949f5-8f02-37af-9504-59411ffecbcf", "endTime": "2025-03-15T22:05:47.012-07:00", "id": "489271038110852371", "insertTime": "2025-03-15T22:05:00.846-07:00", "kind": "compute#operation", "name": "operation-1742101500471-6306e9d192a96-28f0a9e3-f709b92e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742101500471-6306e9d192a96-28f0a9e3-f709b92e", "startTime": "2025-03-15T22:05:00.864-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "a6603357-b8eb-324e-ab48-03f55d4cd0b5", "endTime": "2025-03-15T22:05:47.552-07:00", "id": "6055421810457699602", "insertTime": "2025-03-15T22:05:01.089-07:00", "kind": "compute#operation", "name": "operation-1742101500604-6306e9d1b2e6e-c4e76ca7-b0f003a2", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742101500604-6306e9d1b2e6e-c4e76ca7-b0f003a2", "startTime": "2025-03-15T22:05:01.113-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ec737e64-5b07-3601-92ac-f31eb9994fe6", "endTime": "2025-03-15T23:05:46.649-07:00", "id": "6810126334065104099", "insertTime": "2025-03-15T23:05:00.883-07:00", "kind": "compute#operation", "name": "operation-1742105100458-6306f73ac9b86-c67e597f-607d5d06", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742105100458-6306f73ac9b86-c67e597f-607d5d06", "startTime": "2025-03-15T23:05:00.921-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "35b5ce55-4f25-32d4-8685-2dad7364c5da", "endTime": "2025-03-15T23:05:51.663-07:00", "id": "895672577509020899", "insertTime": "2025-03-15T23:05:00.844-07:00", "kind": "compute#operation", "name": "operation-1742105100471-6306f73accb3c-38b38535-dc709aea", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742105100471-6306f73accb3c-38b38535-dc709aea", "startTime": "2025-03-15T23:05:00.863-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9b05495d-af9a-3f4f-a476-3f8b343ca460", "endTime": "2025-03-16T00:05:48.071-07:00", "id": "1521282388632258290", "insertTime": "2025-03-16T00:05:01.093-07:00", "kind": "compute#operation", "name": "operation-1742108700640-630704a4305f6-f749c0fb-a1ad664c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742108700640-630704a4305f6-f749c0fb-a1ad664c", "startTime": "2025-03-16T00:05:01.131-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "077a270e-b00b-3909-8ffa-ece6406684c2", "endTime": "2025-03-16T00:05:47.114-07:00", "id": "8740051488882804466", "insertTime": "2025-03-16T00:05:01.068-07:00", "kind": "compute#operation", "name": "operation-1742108700648-630704a4324e2-15b3db40-35077b8a", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742108700648-630704a4324e2-15b3db40-35077b8a", "startTime": "2025-03-16T00:05:01.090-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "adee1aa2-36ac-375b-8fbc-707580ac4002", "endTime": "2025-03-16T01:05:47.958-07:00", "id": "1242018748848355522", "insertTime": "2025-03-16T01:05:01.881-07:00", "kind": "compute#operation", "name": "operation-1742112301474-6307120e36170-19fff6c6-f0a2c923", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742112301474-6307120e36170-19fff6c6-f0a2c923", "startTime": "2025-03-16T01:05:01.903-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d5eb490d-1bf6-3478-a8cf-49421084c66f", "endTime": "2025-03-16T01:05:48.130-07:00", "id": "4624811235437394114", "insertTime": "2025-03-16T01:05:01.873-07:00", "kind": "compute#operation", "name": "operation-1742112301492-6307120e3aadc-0b126065-5e093176", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742112301492-6307120e3aadc-0b126065-5e093176", "startTime": "2025-03-16T01:05:01.898-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6d9bd146-a677-3795-9d8c-8fab4d88b22c", "endTime": "2025-03-16T02:05:47.469-07:00", "id": "2838340410667641555", "insertTime": "2025-03-16T02:05:00.889-07:00", "kind": "compute#operation", "name": "operation-1742115900452-63071f7676e22-f63c0f69-f11d94a5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742115900452-63071f7676e22-f63c0f69-f11d94a5", "startTime": "2025-03-16T02:05:00.927-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "f80314c3-c16b-3922-806b-ae47c829ade4", "endTime": "2025-03-16T02:05:47.387-07:00", "id": "751517772654783187", "insertTime": "2025-03-16T02:05:00.874-07:00", "kind": "compute#operation", "name": "operation-1742115900453-63071f7677127-b5ec4f3b-638bfb8c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742115900453-63071f7677127-b5ec4f3b-638bfb8c", "startTime": "2025-03-16T02:05:00.895-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "90d8bf3f-1d38-36c5-a856-f2335771d4f5", "endTime": "2025-03-16T03:05:48.221-07:00", "id": "5279457774260657315", "insertTime": "2025-03-16T03:05:00.749-07:00", "kind": "compute#operation", "name": "operation-1742119500414-63072cdfa7dce-6b5caf87-09c581e4", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742119500414-63072cdfa7dce-6b5caf87-09c581e4", "startTime": "2025-03-16T03:05:00.774-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d24aa9d7-82a3-3ff0-a570-11efba5bf982", "endTime": "2025-03-16T03:05:47.686-07:00", "id": "2447056808259034275", "insertTime": "2025-03-16T03:05:00.775-07:00", "kind": "compute#operation", "name": "operation-1742119500415-63072cdfa81a4-37f1b3af-b86ed21a", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742119500415-63072cdfa81a4-37f1b3af-b86ed21a", "startTime": "2025-03-16T03:05:00.803-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "3623332c-a6f0-3302-9a75-4b5c4eb63260", "endTime": "2025-03-16T04:05:58.373-07:00", "id": "9066564574991027891", "insertTime": "2025-03-16T04:05:00.868-07:00", "kind": "compute#operation", "name": "operation-1742123100453-63073a48eb89a-ea294815-57459459", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742123100453-63073a48eb89a-ea294815-57459459", "startTime": "2025-03-16T04:05:00.890-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "169108bd-6b2e-3884-b35f-f00ac93c37f9", "endTime": "2025-03-16T04:05:57.086-07:00", "id": "1331086801380249267", "insertTime": "2025-03-16T04:05:00.900-07:00", "kind": "compute#operation", "name": "operation-1742123100459-63073a48ed1a2-3e9dbf3d-c1c6f6bf", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742123100459-63073a48ed1a2-3e9dbf3d-c1c6f6bf", "startTime": "2025-03-16T04:05:00.927-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b6ce79da-efac-3e2f-984d-b8c4b571a2c7", "endTime": "2025-03-16T05:05:53.320-07:00", "id": "3823631841382563971", "insertTime": "2025-03-16T05:05:00.910-07:00", "kind": "compute#operation", "name": "operation-1742126700428-630747b21fb33-06c18774-8e94f8b0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742126700428-630747b21fb33-06c18774-8e94f8b0", "startTime": "2025-03-16T05:05:00.948-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "5bdbf2c3-9837-3610-8117-08484e9734c8", "endTime": "2025-03-16T05:05:52.775-07:00", "id": "7194823333542297731", "insertTime": "2025-03-16T05:05:00.881-07:00", "kind": "compute#operation", "name": "operation-1742126700429-630747b21ff7b-94585338-67ee3278", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742126700429-630747b21ff7b-94585338-67ee3278", "startTime": "2025-03-16T05:05:00.905-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6972ca9c-99d9-33cb-872d-b72e41e1adc8", "endTime": "2025-03-16T06:05:46.953-07:00", "id": "7967409455270425235", "insertTime": "2025-03-16T06:05:00.849-07:00", "kind": "compute#operation", "name": "operation-1742130300459-6307551b61826-a69876e2-10bc5adc", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742130300459-6307551b61826-a69876e2-10bc5adc", "startTime": "2025-03-16T06:05:00.870-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6087be88-3a8c-3984-a779-c5cd296818ef", "endTime": "2025-03-16T06:05:48.068-07:00", "id": "8374176530745225875", "insertTime": "2025-03-16T06:05:00.891-07:00", "kind": "compute#operation", "name": "operation-1742130300465-6307551b63136-e2b3dfd8-a713f2d0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742130300465-6307551b63136-e2b3dfd8-a713f2d0", "startTime": "2025-03-16T06:05:00.921-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "be0b29da-915d-3e9f-b749-77c04eebae42", "endTime": "2025-03-16T07:05:48.742-07:00", "id": "3362224535565460579", "insertTime": "2025-03-16T07:05:00.911-07:00", "kind": "compute#operation", "name": "operation-1742133900435-6307628495ecb-0c47d6f3-5af4c22f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742133900435-6307628495ecb-0c47d6f3-5af4c22f", "startTime": "2025-03-16T07:05:00.963-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6b3c40fd-b64b-3323-b8bd-0fec56547189", "endTime": "2025-03-16T07:05:47.802-07:00", "id": "3019579139976553571", "insertTime": "2025-03-16T07:05:00.862-07:00", "kind": "compute#operation", "name": "operation-1742133900436-6307628496545-4d626181-3fb91ebd", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742133900436-6307628496545-4d626181-3fb91ebd", "startTime": "2025-03-16T07:05:00.882-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "45c7373d-431e-32cf-9e32-74b405e77ba6", "endTime": "2025-03-16T08:05:50.797-07:00", "id": "5301808418996835954", "insertTime": "2025-03-16T08:05:01.765-07:00", "kind": "compute#operation", "name": "operation-1742137501410-63076feebe635-2b912c8d-caddce8b", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742137501410-63076feebe635-2b912c8d-caddce8b", "startTime": "2025-03-16T08:05:01.790-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b63ed324-837d-35cb-bdf2-b3b02d20028c", "endTime": "2025-03-16T08:05:47.252-07:00", "id": "3917134104050226802", "insertTime": "2025-03-16T08:05:01.890-07:00", "kind": "compute#operation", "name": "operation-1742137501433-63076feec3d84-04d8c2d7-5d142b27", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742137501433-63076feec3d84-04d8c2d7-5d142b27", "startTime": "2025-03-16T08:05:01.918-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0b5f9c13-6dca-3698-ab7a-4f1dea85a32d", "endTime": "2025-03-16T09:05:51.150-07:00", "id": "4313882983623510082", "insertTime": "2025-03-16T09:05:01.898-07:00", "kind": "compute#operation", "name": "operation-1742141101459-63077d58048c4-b1f9f479-34fc6308", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742141101459-63077d58048c4-b1f9f479-34fc6308", "startTime": "2025-03-16T09:05:01.928-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "1cad6be8-b843-3cbb-8c25-b0f4e1d8b51a", "endTime": "2025-03-16T09:05:48.519-07:00", "id": "8348525774872725570", "insertTime": "2025-03-16T09:05:01.883-07:00", "kind": "compute#operation", "name": "operation-1742141101479-63077d580979e-2dc3368c-52ec64bb", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742141101479-63077d580979e-2dc3368c-52ec64bb", "startTime": "2025-03-16T09:05:01.908-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6399dd40-ee5f-35e0-816b-7e8ebd59dfd3", "endTime": "2025-03-16T10:06:02.245-07:00", "id": "4188659574271294035", "insertTime": "2025-03-16T10:05:00.888-07:00", "kind": "compute#operation", "name": "operation-1742144700511-63078ac0575cd-d2de7ad0-1ec89694", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742144700511-63078ac0575cd-d2de7ad0-1ec89694", "startTime": "2025-03-16T10:05:00.913-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "95a40f26-ae91-370d-9f17-79d97891541d", "endTime": "2025-03-16T10:05:01.627-07:00", "id": "5405305495763991123", "insertTime": "2025-03-16T10:05:00.876-07:00", "kind": "compute#operation", "name": "operation-1742144700525-63078ac05ac0d-a937059d-a7199d3a", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742144700525-63078ac05ac0d-a937059d-a7199d3a", "startTime": "2025-03-16T10:05:00.900-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "fec3cca5-1082-3af1-9705-a02db132a964", "endTime": "2025-03-16T11:06:18.274-07:00", "id": "5638564031443414050", "insertTime": "2025-03-16T11:05:01.852-07:00", "kind": "compute#operation", "name": "operation-1742148301499-6307982a82e33-a1ba55a9-dfa8cab0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742148301499-6307982a82e33-a1ba55a9-dfa8cab0", "startTime": "2025-03-16T11:05:01.871-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "bd00ed0e-25c2-3bd3-b16c-b6372e895f87", "endTime": "2025-03-16T11:06:13.329-07:00", "id": "4973081732513967138", "insertTime": "2025-03-16T11:05:01.861-07:00", "kind": "compute#operation", "name": "operation-1742148301500-6307982a8306f-c41b2b8e-42425e87", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742148301500-6307982a8306f-c41b2b8e-42425e87", "startTime": "2025-03-16T11:05:01.884-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b9a1ca18-685f-3374-8de8-109c1e7f2418", "endTime": "2025-03-16T12:06:00.082-07:00", "id": "3733337180550635059", "insertTime": "2025-03-16T12:05:00.855-07:00", "kind": "compute#operation", "name": "operation-1742151900433-6307a592b8b28-48184d87-a3ed3c85", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742151900433-6307a592b8b28-48184d87-a3ed3c85", "startTime": "2025-03-16T12:05:00.876-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0c15e91c-62d5-3def-9494-3db03156ade7", "endTime": "2025-03-16T12:05:51.972-07:00", "id": "6286918881264705075", "insertTime": "2025-03-16T12:05:00.903-07:00", "kind": "compute#operation", "name": "operation-1742151900444-6307a592bb5d3-27a8559e-97211d40", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742151900444-6307a592bb5d3-27a8559e-97211d40", "startTime": "2025-03-16T12:05:00.943-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "377c50a3-cb67-34ee-95f4-1b86f67e36a0", "endTime": "2025-03-16T13:06:02.623-07:00", "id": "8089833185895682051", "insertTime": "2025-03-16T13:05:00.740-07:00", "kind": "compute#operation", "name": "operation-1742155500403-6307b2fbebb83-30b7dba8-5be00357", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742155500403-6307b2fbebb83-30b7dba8-5be00357", "startTime": "2025-03-16T13:05:00.755-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "060c2ed6-442a-3374-8ff2-987826c1eba3", "endTime": "2025-03-16T13:06:08.068-07:00", "id": "362708221732491267", "insertTime": "2025-03-16T13:05:00.788-07:00", "kind": "compute#operation", "name": "operation-1742155500418-6307b2fbef7b3-2ee5c633-a6622f14", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742155500418-6307b2fbef7b3-2ee5c633-a6622f14", "startTime": "2025-03-16T13:05:00.823-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "1658cb4d-04ba-3761-910a-ad7b1cee2716", "endTime": "2025-03-16T14:05:53.674-07:00", "id": "1545603753342304786", "insertTime": "2025-03-16T14:05:01.877-07:00", "kind": "compute#operation", "name": "operation-1742159101462-6307c0662862a-f3091a94-5dc05095", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742159101462-6307c0662862a-f3091a94-5dc05095", "startTime": "2025-03-16T14:05:01.902-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ffe4f935-95b0-389f-81b7-80152565d715", "endTime": "2025-03-16T14:05:53.975-07:00", "id": "631428502783689234", "insertTime": "2025-03-16T14:05:01.893-07:00", "kind": "compute#operation", "name": "operation-1742159101473-6307c0662b32e-4f529a8d-ddc1eabc", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742159101473-6307c0662b32e-4f529a8d-ddc1eabc", "startTime": "2025-03-16T14:05:01.926-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2193d103-efe7-3b79-a13e-31f21d8180a8", "endTime": "2025-03-16T15:05:46.592-07:00", "id": "4855294535048820195", "insertTime": "2025-03-16T15:05:00.889-07:00", "kind": "compute#operation", "name": "operation-1742162700442-6307cdce69bb0-ec5af1f0-6cc56814", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742162700442-6307cdce69bb0-ec5af1f0-6cc56814", "startTime": "2025-03-16T15:05:00.921-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e1d45552-0d66-384e-84a7-bdb3d622ae86", "endTime": "2025-03-16T15:05:46.903-07:00", "id": "3505216593988351459", "insertTime": "2025-03-16T15:05:00.874-07:00", "kind": "compute#operation", "name": "operation-1742162700446-6307cdce6abc6-be72f830-2533d5c5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742162700446-6307cdce6abc6-be72f830-2533d5c5", "startTime": "2025-03-16T15:05:00.902-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "794393d0-43d7-3b5a-83bf-606b9dbb2c25", "endTime": "2025-03-16T16:05:47.978-07:00", "id": "3715562724684130291", "insertTime": "2025-03-16T16:05:00.898-07:00", "kind": "compute#operation", "name": "operation-1742166300484-6307db37ae218-0ea846c2-4bc865df", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742166300484-6307db37ae218-0ea846c2-4bc865df", "startTime": "2025-03-16T16:05:00.935-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "1e0cffdd-28e4-326b-a652-4a260d68aae2", "endTime": "2025-03-16T16:05:47.400-07:00", "id": "8708253320549689331", "insertTime": "2025-03-16T16:05:00.873-07:00", "kind": "compute#operation", "name": "operation-1742166300488-6307db37af44c-07d09439-5dbe2a43", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742166300488-6307db37af44c-07d09439-5dbe2a43", "startTime": "2025-03-16T16:05:00.896-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "f8635845-4a29-3d30-a0dd-6fba45ac409c", "endTime": "2025-03-16T17:05:47.162-07:00", "id": "4570733104644938179", "insertTime": "2025-03-16T17:05:00.926-07:00", "kind": "compute#operation", "name": "operation-1742169900414-6307e8a0d7752-85ab6434-566f79da", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742169900414-6307e8a0d7752-85ab6434-566f79da", "startTime": "2025-03-16T17:05:00.956-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "79dae10d-d048-3bab-afb8-070c72f9be40", "endTime": "2025-03-16T17:05:47.048-07:00", "id": "4086572230324705731", "insertTime": "2025-03-16T17:05:00.930-07:00", "kind": "compute#operation", "name": "operation-1742169900423-6307e8a0d98dd-8015b29a-e82ca9b0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742169900423-6307e8a0d98dd-8015b29a-e82ca9b0", "startTime": "2025-03-16T17:05:00.965-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "777d6498-286a-323f-b15d-8f9f8d69470d", "endTime": "2025-03-16T18:05:47.006-07:00", "id": "1862171889921346515", "insertTime": "2025-03-16T18:05:00.830-07:00", "kind": "compute#operation", "name": "operation-1742173500450-6307f60a1a6d7-cd4a0b5d-1dc21511", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742173500450-6307f60a1a6d7-cd4a0b5d-1dc21511", "startTime": "2025-03-16T18:05:00.842-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0adc817f-0b5e-3ddd-84fb-833868186adc", "endTime": "2025-03-16T18:05:47.038-07:00", "id": "9164113478535531475", "insertTime": "2025-03-16T18:05:00.859-07:00", "kind": "compute#operation", "name": "operation-1742173500454-6307f60a1b5fc-18091759-68f6f0cb", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742173500454-6307f60a1b5fc-18091759-68f6f0cb", "startTime": "2025-03-16T18:05:00.884-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c675d88f-977b-3f77-8401-01ebfca73a88", "endTime": "2025-03-16T19:05:52.508-07:00", "id": "586448469933833635", "insertTime": "2025-03-16T19:05:00.887-07:00", "kind": "compute#operation", "name": "operation-1742177100433-630803735099b-d75c885b-2aab1b70", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742177100433-630803735099b-d75c885b-2aab1b70", "startTime": "2025-03-16T19:05:00.914-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "f4366233-6a9f-39e8-9df5-438d393ee346", "endTime": "2025-03-16T19:05:51.897-07:00", "id": "6016968100673109411", "insertTime": "2025-03-16T19:05:00.954-07:00", "kind": "compute#operation", "name": "operation-1742177100440-630803735251d-c5f3ce4a-c0475f8d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742177100440-630803735251d-c5f3ce4a-c0475f8d", "startTime": "2025-03-16T19:05:01.001-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "370d9b57-dee4-334a-b8d8-d53afe680126", "endTime": "2025-03-16T20:05:46.901-07:00", "id": "5144094857655627699", "insertTime": "2025-03-16T20:05:00.777-07:00", "kind": "compute#operation", "name": "operation-1742180700402-630810dc832c5-68aded47-d576fddb", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742180700402-630810dc832c5-68aded47-d576fddb", "startTime": "2025-03-16T20:05:00.803-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "18f3d8fb-3c72-3e94-a3c3-8dfe7893a7ab", "endTime": "2025-03-16T20:05:46.807-07:00", "id": "8248066683092742067", "insertTime": "2025-03-16T20:05:00.746-07:00", "kind": "compute#operation", "name": "operation-1742180700420-630810dc87af0-000fb955-828baad7", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742180700420-630810dc87af0-000fb955-828baad7", "startTime": "2025-03-16T20:05:00.766-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "19c2a23d-8ca8-3540-a118-437cd95d5b58", "endTime": "2025-03-16T21:05:47.246-07:00", "id": "8677004036152107395", "insertTime": "2025-03-16T21:05:00.864-07:00", "kind": "compute#operation", "name": "operation-1742184300420-63081e45c1f77-7d1b1ca2-60282daf", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742184300420-63081e45c1f77-7d1b1ca2-60282daf", "startTime": "2025-03-16T21:05:00.886-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "3aeade87-751b-37c7-ab83-32cc14deba95", "endTime": "2025-03-16T21:05:51.380-07:00", "id": "5027148138045645187", "insertTime": "2025-03-16T21:05:00.816-07:00", "kind": "compute#operation", "name": "operation-1742184300424-63081e45c2b60-33f86c31-da1af708", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742184300424-63081e45c2b60-33f86c31-da1af708", "startTime": "2025-03-16T21:05:00.846-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9a039a9e-aa4a-3a56-b55f-b3236cc35f77", "endTime": "2025-03-16T22:05:50.747-07:00", "id": "3680600277850395539", "insertTime": "2025-03-16T22:05:00.866-07:00", "kind": "compute#operation", "name": "operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "startTime": "2025-03-16T22:05:00.892-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "1f625775-22aa-3da9-a4f9-078a3d9ac5ca", "endTime": "2025-03-16T22:05:48.633-07:00", "id": "1997219379833082771", "insertTime": "2025-03-16T22:05:00.835-07:00", "kind": "compute#operation", "name": "operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "startTime": "2025-03-16T22:05:00.859-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "228c3a95-7e97-39d2-a42b-72b0adc5d0ce", "endTime": "2025-03-16T23:05:50.406-07:00", "id": "6961858272978142563", "insertTime": "2025-03-16T23:05:00.749-07:00", "kind": "compute#operation", "name": "operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "startTime": "2025-03-16T23:05:00.765-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2f7c2bdd-17a5-37b0-a054-384123557e3c", "endTime": "2025-03-16T23:05:01.629-07:00", "id": "6934820581971461475", "insertTime": "2025-03-16T23:05:00.874-07:00", "kind": "compute#operation", "name": "operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "startTime": "2025-03-16T23:05:00.897-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6dff77c0-13f6-318b-84b9-5151d30343cc", "endTime": "2025-03-17T00:05:55.525-07:00", "id": "3740911845003392883", "insertTime": "2025-03-17T00:05:00.944-07:00", "kind": "compute#operation", "name": "operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "startTime": "2025-03-17T00:05:00.966-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "a24d4b9b-1407-33a7-99fa-7304fe264401", "endTime": "2025-03-17T00:05:50.494-07:00", "id": "3089115558146897779", "insertTime": "2025-03-17T00:05:00.877-07:00", "kind": "compute#operation", "name": "operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "startTime": "2025-03-17T00:05:00.899-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "328315d5-6524-3192-82b7-1f3dbc08f284", "endTime": "2025-03-17T01:05:50.908-07:00", "id": "1611150172664523075", "insertTime": "2025-03-17T01:05:00.940-07:00", "kind": "compute#operation", "name": "operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "startTime": "2025-03-17T01:05:00.967-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "fcb006d0-173e-36b8-92ea-bd1c1dcd7850", "endTime": "2025-03-17T01:05:46.844-07:00", "id": "8855413064912759107", "insertTime": "2025-03-17T01:05:00.926-07:00", "kind": "compute#operation", "name": "operation-1742198700434-630853eaae478-17646b34-881b1b8d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700434-630853eaae478-17646b34-881b1b8d", "startTime": "2025-03-17T01:05:00.957-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d7810d6a-995d-3376-a953-8ae106dcda9b", "endTime": "2025-03-17T02:05:51.459-07:00", "id": "8251782474048887635", "insertTime": "2025-03-17T02:05:00.908-07:00", "kind": "compute#operation", "name": "operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "startTime": "2025-03-17T02:05:00.940-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "04e95874-78a5-3493-ba1b-bd51f83091d1", "endTime": "2025-03-17T02:05:47.728-07:00", "id": "3752343553296718675", "insertTime": "2025-03-17T02:05:00.892-07:00", "kind": "compute#operation", "name": "operation-1742202300494-63086153f7274-6fd35b80-033034f7", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300494-63086153f7274-6fd35b80-033034f7", "startTime": "2025-03-17T02:05:00.926-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ed6db565-f2f3-3b1e-adad-a3a76947481c", "endTime": "2025-03-17T03:05:44.489-07:00", "id": "1217808525006884131", "insertTime": "2025-03-17T03:05:00.771-07:00", "kind": "compute#operation", "name": "operation-1742205900390-63086ebd18036-e00520e6-947a413b", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900390-63086ebd18036-e00520e6-947a413b", "startTime": "2025-03-17T03:05:00.793-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "8040b0aa-3213-3c16-a2ff-dabc2d5e3081", "endTime": "2025-03-17T03:05:47.006-07:00", "id": "4660076975681588515", "insertTime": "2025-03-17T03:05:00.796-07:00", "kind": "compute#operation", "name": "operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "startTime": "2025-03-17T03:05:00.820-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "a29316da-08fc-398f-836c-5bfa3dbb015b", "endTime": "2025-03-17T04:05:47.531-07:00", "id": "8685308845044907827", "insertTime": "2025-03-17T04:05:00.892-07:00", "kind": "compute#operation", "name": "operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "startTime": "2025-03-17T04:05:00.919-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "5782653c-010e-30f4-b5d4-1b9a6549c14c", "endTime": "2025-03-17T04:05:51.554-07:00", "id": "4870494097891508019", "insertTime": "2025-03-17T04:05:00.912-07:00", "kind": "compute#operation", "name": "operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "startTime": "2025-03-17T04:05:00.937-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d2c535c4-023a-3717-a281-e33166745b63", "endTime": "2025-03-17T05:05:50.522-07:00", "id": "4832203330576298243", "insertTime": "2025-03-17T05:05:00.766-07:00", "kind": "compute#operation", "name": "operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "startTime": "2025-03-17T05:05:00.789-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "7b781502-2cb7-3062-bcfb-084e1c5425ef", "endTime": "2025-03-17T05:05:47.068-07:00", "id": "3040197087530955011", "insertTime": "2025-03-17T05:05:00.775-07:00", "kind": "compute#operation", "name": "operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "startTime": "2025-03-17T05:05:00.802-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ae3b4eb5-7045-38dd-8eb9-8c72816759df", "endTime": "2025-03-17T06:05:47.694-07:00", "id": "3348071879590388499", "insertTime": "2025-03-17T06:05:00.844-07:00", "kind": "compute#operation", "name": "operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "startTime": "2025-03-17T06:05:00.862-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b91f6458-64f5-3560-9db5-b0d899839441", "endTime": "2025-03-17T06:05:48.099-07:00", "id": "6080248924746392339", "insertTime": "2025-03-17T06:05:00.857-07:00", "kind": "compute#operation", "name": "operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "startTime": "2025-03-17T06:05:00.880-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d7e53791-6f52-3a32-a244-6edda5df971f", "endTime": "2025-03-17T07:05:50.937-07:00", "id": "1799997165955027683", "insertTime": "2025-03-17T07:05:00.870-07:00", "kind": "compute#operation", "name": "operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "startTime": "2025-03-17T07:05:00.896-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "04ed471a-7a09-3568-a375-941867872ee4", "endTime": "2025-03-17T07:05:50.814-07:00", "id": "3825094303516300003", "insertTime": "2025-03-17T07:05:00.880-07:00", "kind": "compute#operation", "name": "operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "startTime": "2025-03-17T07:05:00.908-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d5196fd6-848d-342a-b624-b79c47fa992f", "endTime": "2025-03-17T08:05:51.004-07:00", "id": "4017972179448988915", "insertTime": "2025-03-17T08:05:00.874-07:00", "kind": "compute#operation", "name": "operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "startTime": "2025-03-17T08:05:00.899-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "fa521aa2-b88f-39a7-9163-85be5ab11a2c", "endTime": "2025-03-17T08:05:47.113-07:00", "id": "5477583477458437363", "insertTime": "2025-03-17T08:05:00.869-07:00", "kind": "compute#operation", "name": "operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "startTime": "2025-03-17T08:05:00.891-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "1e16fe82-2bc0-39b3-b7d5-51438e75def7", "endTime": "2025-03-17T09:05:52.784-07:00", "id": "2631688583206270658", "insertTime": "2025-03-17T09:05:01.876-07:00", "kind": "compute#operation", "name": "operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "startTime": "2025-03-17T09:05:01.897-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "8146f34f-9fd8-3e91-98a5-0393c793632c", "endTime": "2025-03-17T09:05:50.652-07:00", "id": "3618352801433122498", "insertTime": "2025-03-17T09:05:01.887-07:00", "kind": "compute#operation", "name": "operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "startTime": "2025-03-17T09:05:01.912-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2a88371a-e7f2-340a-83c1-54db9a8678bd", "endTime": "2025-03-17T10:05:52.194-07:00", "id": "8616019215695341779", "insertTime": "2025-03-17T10:05:00.888-07:00", "kind": "compute#operation", "name": "operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "startTime": "2025-03-17T10:05:00.914-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "20757f02-52e5-3a1f-b849-ed9f5d54fdc4", "endTime": "2025-03-17T10:05:53.161-07:00", "id": "5707824721303038163", "insertTime": "2025-03-17T10:05:00.896-07:00", "kind": "compute#operation", "name": "operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "startTime": "2025-03-17T10:05:00.957-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "3616fbed-9c8d-3988-951b-670a42f2ca41", "endTime": "2025-03-17T11:05:50.528-07:00", "id": "6752826638497864355", "insertTime": "2025-03-17T11:05:00.881-07:00", "kind": "compute#operation", "name": "operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "startTime": "2025-03-17T11:05:00.904-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9bf8c762-6c20-3c14-88cf-144d1ac58915", "endTime": "2025-03-17T11:05:51.180-07:00", "id": "4359848204661283491", "insertTime": "2025-03-17T11:05:00.858-07:00", "kind": "compute#operation", "name": "operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "startTime": "2025-03-17T11:05:00.878-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b1007a2d-dac4-35be-b52d-45d688b9df64", "endTime": "2025-03-17T12:05:59.528-07:00", "id": "3571285728010030258", "insertTime": "2025-03-17T12:05:01.867-07:00", "kind": "compute#operation", "name": "operation-1742238301436-6308e77123a71-a066b438-164eefaa", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301436-6308e77123a71-a066b438-164eefaa", "startTime": "2025-03-17T12:05:01.889-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "b410ec84-1c11-3693-ae76-8342c61310d2", "endTime": "2025-03-17T12:05:52.014-07:00", "id": "9055858643155930290", "insertTime": "2025-03-17T12:05:01.869-07:00", "kind": "compute#operation", "name": "operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "startTime": "2025-03-17T12:05:01.898-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "4b4fd0b8-88e0-3b10-b7b0-62761b517c1e", "endTime": "2025-03-17T13:05:51.182-07:00", "id": "1424445689449234051", "insertTime": "2025-03-17T13:05:00.878-07:00", "kind": "compute#operation", "name": "operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "startTime": "2025-03-17T13:05:00.899-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "970b17b0-9b76-3e39-9f01-94dfdadd760f", "endTime": "2025-03-17T13:05:49.852-07:00", "id": "750893701021384323", "insertTime": "2025-03-17T13:05:00.845-07:00", "kind": "compute#operation", "name": "operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "startTime": "2025-03-17T13:05:00.866-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "49477e9c-8e6a-3f9b-81fa-3dd97ca77da1", "endTime": "2025-03-17T14:05:47.345-07:00", "id": "8685744822880120979", "insertTime": "2025-03-17T14:05:00.863-07:00", "kind": "compute#operation", "name": "operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "startTime": "2025-03-17T14:05:00.887-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e8ec1c70-0a74-3531-9429-65f8512b35c6", "endTime": "2025-03-17T14:05:51.248-07:00", "id": "1355885036308869267", "insertTime": "2025-03-17T14:05:00.856-07:00", "kind": "compute#operation", "name": "operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "startTime": "2025-03-17T14:05:00.879-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "487874bd-8c8e-3d08-850a-2f7651392633", "endTime": "2025-03-17T15:05:47.671-07:00", "id": "1647750505276187235", "insertTime": "2025-03-17T15:05:00.893-07:00", "kind": "compute#operation", "name": "operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "startTime": "2025-03-17T15:05:00.922-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "74692df8-d203-3bba-bae5-0c26d55957cd", "endTime": "2025-03-17T15:05:47.491-07:00", "id": "457574256775340643", "insertTime": "2025-03-17T15:05:00.882-07:00", "kind": "compute#operation", "name": "operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "startTime": "2025-03-17T15:05:00.907-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "f2781d82-d1f5-3fae-9668-8be251b2956d", "endTime": "2025-03-17T16:05:47.019-07:00", "id": "5641947885851710579", "insertTime": "2025-03-17T16:05:00.855-07:00", "kind": "compute#operation", "name": "operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "startTime": "2025-03-17T16:05:00.875-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ff649886-78e9-3f93-8ff8-14c745b50f2d", "endTime": "2025-03-17T16:05:48.376-07:00", "id": "2919161447385994355", "insertTime": "2025-03-17T16:05:00.873-07:00", "kind": "compute#operation", "name": "operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "startTime": "2025-03-17T16:05:00.900-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0aa7e93e-ff03-3175-88bb-c534337e929f", "endTime": "2025-03-17T17:05:46.790-07:00", "id": "6013897942085469763", "insertTime": "2025-03-17T17:05:00.862-07:00", "kind": "compute#operation", "name": "operation-1742256300451-63092a7e5686e-1efa5298-652d8ed6", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742256300451-63092a7e5686e-1efa5298-652d8ed6", "startTime": "2025-03-17T17:05:00.888-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "159c3d20-a328-3995-8122-37245ebb72e4", "endTime": "2025-03-17T17:05:50.947-07:00", "id": "5890613835021485635", "insertTime": "2025-03-17T17:05:00.909-07:00", "kind": "compute#operation", "name": "operation-1742256300464-63092a7e59b27-2cb5f984-1eb2d23f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742256300464-63092a7e59b27-2cb5f984-1eb2d23f", "startTime": "2025-03-17T17:05:00.930-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "5df6a5a9-587c-364d-8948-9e32983bc32a", "endTime": "2025-03-17T18:05:55.803-07:00", "id": "237966690530719827", "insertTime": "2025-03-17T18:05:00.887-07:00", "kind": "compute#operation", "name": "operation-1742259900422-630937e7897e4-68dcda93-b856f1b9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742259900422-630937e7897e4-68dcda93-b856f1b9", "startTime": "2025-03-17T18:05:00.915-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "88865240-98a1-3606-bb0f-96b96f01e71f", "endTime": "2025-03-17T18:05:54.520-07:00", "id": "4237186812020619347", "insertTime": "2025-03-17T18:05:00.895-07:00", "kind": "compute#operation", "name": "operation-1742259900426-630937e78a887-c554fa45-78c7dc6e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742259900426-630937e78a887-c554fa45-78c7dc6e", "startTime": "2025-03-17T18:05:00.929-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "972c9036-8edb-3b7b-b689-4f256b81b950", "endTime": "2025-03-17T19:05:51.582-07:00", "id": "155442428696160803", "insertTime": "2025-03-17T19:05:00.863-07:00", "kind": "compute#operation", "name": "operation-1742263500481-63094550d22bc-1ba59776-aab9f29f", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742263500481-63094550d22bc-1ba59776-aab9f29f", "startTime": "2025-03-17T19:05:00.891-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "61a7e686-503f-3716-be92-c3d2150ef0f2", "endTime": "2025-03-17T19:05:47.022-07:00", "id": "6838889313434167843", "insertTime": "2025-03-17T19:05:00.870-07:00", "kind": "compute#operation", "name": "operation-1742263500492-63094550d50b8-d0baa2f4-dae22c67", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742263500492-63094550d50b8-d0baa2f4-dae22c67", "startTime": "2025-03-17T19:05:00.891-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6026209c-d10c-3958-9379-d1b26897c41f", "endTime": "2025-03-17T20:05:01.474-07:00", "id": "3853753748404132915", "insertTime": "2025-03-17T20:05:01.005-07:00", "kind": "compute#operation", "name": "operation-1742267100512-630952ba142e3-a300782f-5b25bef9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742267100512-630952ba142e3-a300782f-5b25bef9", "startTime": "2025-03-17T20:05:01.030-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "50586435-f9e8-3d18-bbdc-fbd74328de50", "endTime": "2025-03-17T20:05:51.519-07:00", "id": "9014149734708108339", "insertTime": "2025-03-17T20:05:00.971-07:00", "kind": "compute#operation", "name": "operation-1742267100523-630952ba16dcb-b6d0d111-752b88b1", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742267100523-630952ba16dcb-b6d0d111-752b88b1", "startTime": "2025-03-17T20:05:00.991-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "62b4bcbf-905b-3805-9cfd-601b3cd8ab76", "endTime": "2025-03-17T21:05:51.263-07:00", "id": "8221297053879586307", "insertTime": "2025-03-17T21:05:00.858-07:00", "kind": "compute#operation", "name": "operation-1742270700416-6309602336ddf-88106400-aa6b2b8b", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742270700416-6309602336ddf-88106400-aa6b2b8b", "startTime": "2025-03-17T21:05:00.892-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c1ab475c-c209-37c1-8594-e7ade694b09c", "endTime": "2025-03-17T21:05:47.299-07:00", "id": "7986854030644432387", "insertTime": "2025-03-17T21:05:00.934-07:00", "kind": "compute#operation", "name": "operation-1742270700416-6309602336ded-bbfad9d4-654fdfc7", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742270700416-6309602336ded-bbfad9d4-654fdfc7", "startTime": "2025-03-17T21:05:00.980-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "031aea22-a7a5-38a4-ad0e-8124b35867a8", "endTime": "2025-03-17T22:05:51.095-07:00", "id": "5260235536457875475", "insertTime": "2025-03-17T22:05:00.870-07:00", "kind": "compute#operation", "name": "operation-1742274300447-63096d8c78b87-99eb660e-f88f4baf", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742274300447-63096d8c78b87-99eb660e-f88f4baf", "startTime": "2025-03-17T22:05:00.891-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e364c026-a1c6-3b8f-b440-974fc97daf22", "endTime": "2025-03-17T22:05:47.412-07:00", "id": "8373230422463954963", "insertTime": "2025-03-17T22:05:00.886-07:00", "kind": "compute#operation", "name": "operation-1742274300453-63096d8c7a2f7-eb7c1e2d-1d621ca5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742274300453-63096d8c7a2f7-eb7c1e2d-1d621ca5", "startTime": "2025-03-17T22:05:00.914-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "a0e4b16d-00a2-34b0-ad01-48c8093520dc", "endTime": "2025-03-17T23:05:51.952-07:00", "id": "7622249223185282018", "insertTime": "2025-03-17T23:05:01.858-07:00", "kind": "compute#operation", "name": "operation-1742277901460-63097af6aa288-0f87aefd-0ee06572", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742277901460-63097af6aa288-0f87aefd-0ee06572", "startTime": "2025-03-17T23:05:01.879-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "1f183fd7-1878-39b4-8682-7cce0bf5c194", "endTime": "2025-03-17T23:05:56.797-07:00", "id": "8591359394677306338", "insertTime": "2025-03-17T23:05:01.867-07:00", "kind": "compute#operation", "name": "operation-1742277901463-63097af6ab159-bd7b2d1e-bd79ec22", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742277901463-63097af6ab159-bd7b2d1e-bd79ec22", "startTime": "2025-03-17T23:05:01.897-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2ed1a60b-8a9a-37dd-8a55-2ceec67b8595", "endTime": "2025-03-18T00:05:50.842-07:00", "id": "275737865587303923", "insertTime": "2025-03-18T00:05:00.768-07:00", "kind": "compute#operation", "name": "operation-1742281500402-6309885ee250f-cd7a931f-0f4679c0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742281500402-6309885ee250f-cd7a931f-0f4679c0", "startTime": "2025-03-18T00:05:00.801-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9b358bb9-0fb9-3362-bfae-db1391c87652", "endTime": "2025-03-18T00:05:54.250-07:00", "id": "32374723559335411", "insertTime": "2025-03-18T00:05:00.775-07:00", "kind": "compute#operation", "name": "operation-1742281500408-6309885ee3b80-9a035798-bcfc3fd0", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742281500408-6309885ee3b80-9a035798-bcfc3fd0", "startTime": "2025-03-18T00:05:00.800-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "5217ffb5-3426-3c3e-8e35-26a94875f3cb", "endTime": "2025-03-18T01:05:48.383-07:00", "id": "2997960727034369986", "insertTime": "2025-03-18T01:05:01.884-07:00", "kind": "compute#operation", "name": "operation-1742285101422-630995c9157b6-350deb7f-07eb91a7", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742285101422-630995c9157b6-350deb7f-07eb91a7", "startTime": "2025-03-18T01:05:01.903-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "790c701b-5849-34b5-9452-05d63024fa16", "endTime": "2025-03-18T01:05:48.953-07:00", "id": "7288260497390213058", "insertTime": "2025-03-18T01:05:01.900-07:00", "kind": "compute#operation", "name": "operation-1742285101429-630995c9171f5-eb4a51e4-e4603956", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742285101429-630995c9171f5-eb4a51e4-e4603956", "startTime": "2025-03-18T01:05:01.944-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "fe9e88e3-d884-30f1-874f-39e3ecc68973", "endTime": "2025-03-18T02:05:47.257-07:00", "id": "9031800293652990419", "insertTime": "2025-03-18T02:05:00.794-07:00", "kind": "compute#operation", "name": "operation-1742288700420-6309a3315b12b-4bb617f1-bb52badd", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742288700420-6309a3315b12b-4bb617f1-bb52badd", "startTime": "2025-03-18T02:05:00.823-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "5264ca3d-436e-34df-9974-eedb7fa777ae", "endTime": "2025-03-18T02:05:48.230-07:00", "id": "5880900465833839059", "insertTime": "2025-03-18T02:05:00.878-07:00", "kind": "compute#operation", "name": "operation-1742288700424-6309a3315c17d-7e11d9fb-4d2db9c9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742288700424-6309a3315c17d-7e11d9fb-4d2db9c9", "startTime": "2025-03-18T02:05:00.898-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "55ea6acf-6a4b-377f-ae0f-79e838c23eac", "endTime": "2025-03-18T03:05:52.157-07:00", "id": "8560539396555996067", "insertTime": "2025-03-18T03:05:00.874-07:00", "kind": "compute#operation", "name": "operation-1742292300456-6309b09a9e07c-36860013-73c0052e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742292300456-6309b09a9e07c-36860013-73c0052e", "startTime": "2025-03-18T03:05:00.899-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "eeeffe7c-42d4-39a5-a381-164d20465f96", "endTime": "2025-03-18T03:05:47.193-07:00", "id": "7330097864014887843", "insertTime": "2025-03-18T03:05:00.902-07:00", "kind": "compute#operation", "name": "operation-1742292300480-6309b09aa3fbc-1bb0c914-5d8cf6d5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742292300480-6309b09aa3fbc-1bb0c914-5d8cf6d5", "startTime": "2025-03-18T03:05:00.934-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "139170bf-e7b3-37c9-aab8-a41a14c803e8", "endTime": "2025-03-18T04:05:47.284-07:00", "id": "6216816730001698227", "insertTime": "2025-03-18T04:05:00.853-07:00", "kind": "compute#operation", "name": "operation-1742295900433-6309be03d2a75-7527ba37-0a66956d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742295900433-6309be03d2a75-7527ba37-0a66956d", "startTime": "2025-03-18T04:05:00.877-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6f86a68c-8c54-3336-a93b-424d6735fd9a", "endTime": "2025-03-18T04:05:48.110-07:00", "id": "5537964348203658675", "insertTime": "2025-03-18T04:05:00.947-07:00", "kind": "compute#operation", "name": "operation-1742295900447-6309be03d6293-b9691c3a-6a1ffdc5", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742295900447-6309be03d6293-b9691c3a-6a1ffdc5", "startTime": "2025-03-18T04:05:00.986-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T04:51:32.993-07:00", "id": "2337017207809433832", "insertTime": "2025-03-18T04:50:31.620-07:00", "kind": "compute#operation", "name": "operation-1742298631375-6309c83040b5e-43e832b7-37383d59", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742298631375-6309c83040b5e-43e832b7-37383d59", "startTime": "2025-03-18T04:50:31.639-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "testuser@example.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "5b977265-c77d-37ce-9841-218df698ef52", "endTime": "2025-03-18T05:05:46.998-07:00", "id": "1254103081716866947", "insertTime": "2025-03-18T05:05:00.867-07:00", "kind": "compute#operation", "name": "operation-1742299500441-6309cb6d0efd2-d0d586a4-08cadb7c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742299500441-6309cb6d0efd2-d0d586a4-08cadb7c", "startTime": "2025-03-18T05:05:00.887-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9940aa8b-e8d7-3226-8ba6-b4d7a9e9f9a1", "endTime": "2025-03-18T05:05:51.056-07:00", "id": "3732966988729081731", "insertTime": "2025-03-18T05:05:00.862-07:00", "kind": "compute#operation", "name": "operation-1742299500444-6309cb6d0fae1-533bbd52-97cfffa2", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742299500444-6309cb6d0fae1-533bbd52-97cfffa2", "startTime": "2025-03-18T05:05:00.887-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "04f6b60f-2811-36b4-a5cc-6f4ddd57f874", "endTime": "2025-03-18T06:05:48.393-07:00", "id": "1126187750072308114", "insertTime": "2025-03-18T06:05:01.909-07:00", "kind": "compute#operation", "name": "operation-1742303101464-6309d8d74304a-9bd9a74d-57dabed4", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742303101464-6309d8d74304a-9bd9a74d-57dabed4", "startTime": "2025-03-18T06:05:01.939-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "dee89855-292f-32d1-9611-a5639f8d40c8", "endTime": "2025-03-18T06:05:52.296-07:00", "id": "6368168581489021330", "insertTime": "2025-03-18T06:05:01.870-07:00", "kind": "compute#operation", "name": "operation-1742303101478-6309d8d7466af-a3f6c3d5-c1eaa166", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742303101478-6309d8d7466af-a3f6c3d5-c1eaa166", "startTime": "2025-03-18T06:05:01.894-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ec0a26c0-cc66-3782-be14-d7b7b29428f9", "endTime": "2025-03-18T07:05:44.122-07:00", "id": "9132950291052020579", "insertTime": "2025-03-18T07:05:00.887-07:00", "kind": "compute#operation", "name": "operation-1742306700465-6309e63f89462-2d7a1f01-ae57b34a", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742306700465-6309e63f89462-2d7a1f01-ae57b34a", "startTime": "2025-03-18T07:05:00.912-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "903fbcf3-c651-3f9d-ab79-afbe887d85e3", "endTime": "2025-03-18T07:05:46.848-07:00", "id": "9216434327753376611", "insertTime": "2025-03-18T07:05:00.896-07:00", "kind": "compute#operation", "name": "operation-1742306700467-6309e63f89ba7-af2570cc-4e015e3c", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742306700467-6309e63f89ba7-af2570cc-4e015e3c", "startTime": "2025-03-18T07:05:00.924-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "05980849-d11b-3195-bef8-9add06677d11", "endTime": "2025-03-18T08:05:50.859-07:00", "id": "8872164897655633267", "insertTime": "2025-03-18T08:05:00.866-07:00", "kind": "compute#operation", "name": "operation-1742310300495-6309f3a8cad24-b321d3ba-6af16a4a", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742310300495-6309f3a8cad24-b321d3ba-6af16a4a", "startTime": "2025-03-18T08:05:00.891-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "65a68dad-4ea9-33d8-b9e7-b02226329b32", "endTime": "2025-03-18T08:05:52.209-07:00", "id": "3447834181645907315", "insertTime": "2025-03-18T08:05:00.879-07:00", "kind": "compute#operation", "name": "operation-1742310300510-6309f3a8ce8d8-6b04dcb9-1d68752a", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742310300510-6309f3a8ce8d8-6b04dcb9-1d68752a", "startTime": "2025-03-18T08:05:00.906-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "45091c2e-7037-33ae-8887-350606536c56", "endTime": "2025-03-18T09:05:51.913-07:00", "id": "4674004132987938627", "insertTime": "2025-03-18T09:05:00.849-07:00", "kind": "compute#operation", "name": "operation-1742313900474-630a0111fff78-9589b808-b20790e8", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742313900474-630a0111fff78-9589b808-b20790e8", "startTime": "2025-03-18T09:05:00.870-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "3624a8ec-fbac-3534-927d-394f0769d59b", "endTime": "2025-03-18T09:05:49.324-07:00", "id": "4727992700827346755", "insertTime": "2025-03-18T09:05:00.852-07:00", "kind": "compute#operation", "name": "operation-1742313900481-630a011201ab5-b2fbb2c2-9b1a5744", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742313900481-630a011201ab5-b2fbb2c2-9b1a5744", "startTime": "2025-03-18T09:05:00.872-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "de83c827-1adf-381d-9657-a7f0220cd767", "endTime": "2025-03-18T10:05:47.109-07:00", "id": "5759242081200773459", "insertTime": "2025-03-18T10:05:00.763-07:00", "kind": "compute#operation", "name": "operation-1742317500404-630a0e7b294b4-a4b179d4-3ad61d5e", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742317500404-630a0e7b294b4-a4b179d4-3ad61d5e", "startTime": "2025-03-18T10:05:00.787-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "e55a8949-3c70-3be8-bda1-b6baf6ed5bf3", "endTime": "2025-03-18T10:05:56.340-07:00", "id": "6585911290113562963", "insertTime": "2025-03-18T10:05:00.880-07:00", "kind": "compute#operation", "name": "operation-1742317500431-630a0e7b2fdd7-81ddb8b9-a6274bd4", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742317500431-630a0e7b2fdd7-81ddb8b9-a6274bd4", "startTime": "2025-03-18T10:05:00.906-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "d5934063-f2ac-3066-af11-27dc747e40db", "endTime": "2025-03-18T11:06:06.301-07:00", "id": "1359430398667655970", "insertTime": "2025-03-18T11:05:01.872-07:00", "kind": "compute#operation", "name": "operation-1742321101430-630a1be55de20-e3e8f485-7600f2ae", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742321101430-630a1be55de20-e3e8f485-7600f2ae", "startTime": "2025-03-18T11:05:01.891-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6aa83a3f-100e-31ce-8c70-e7b59c88a069", "endTime": "2025-03-18T11:05:51.808-07:00", "id": "7412941448077904674", "insertTime": "2025-03-18T11:05:01.904-07:00", "kind": "compute#operation", "name": "operation-1742321101434-630a1be55ef62-51eb3e54-5b659a41", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742321101434-630a1be55ef62-51eb3e54-5b659a41", "startTime": "2025-03-18T11:05:01.932-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "ef2a6b70-b75d-395d-a16f-8010416f6342", "endTime": "2025-03-18T12:05:52.136-07:00", "id": "3616693453703118130", "insertTime": "2025-03-18T12:05:01.853-07:00", "kind": "compute#operation", "name": "operation-1742324701473-630a294ea2ad9-6edd6c3d-3b35c379", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742324701473-630a294ea2ad9-6edd6c3d-3b35c379", "startTime": "2025-03-18T12:05:01.876-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "147cc4c3-87d7-357b-b53c-da4856d5421b", "endTime": "2025-03-18T12:05:56.206-07:00", "id": "7720352791691296050", "insertTime": "2025-03-18T12:05:01.892-07:00", "kind": "compute#operation", "name": "operation-1742324701480-630a294ea45aa-a66f8b03-adcff6af", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742324701480-630a294ea45aa-a66f8b03-adcff6af", "startTime": "2025-03-18T12:05:01.937-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "2c934b16-5cb0-3888-ba27-9cc39a50bd19", "endTime": "2025-03-18T13:05:52.716-07:00", "id": "1170775399004925698", "insertTime": "2025-03-18T13:05:01.768-07:00", "kind": "compute#operation", "name": "operation-1742328301417-630a36b7cf3cc-975421f1-8454083d", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742328301417-630a36b7cf3cc-975421f1-8454083d", "startTime": "2025-03-18T13:05:01.788-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "040fa15c-21c3-3844-8313-0b7925784dcb", "endTime": "2025-03-18T13:05:52.788-07:00", "id": "7826094834979204866", "insertTime": "2025-03-18T13:05:01.887-07:00", "kind": "compute#operation", "name": "operation-1742328301438-630a36b7d4577-e443c142-2ba6b550", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742328301438-630a36b7d4577-e443c142-2ba6b550", "startTime": "2025-03-18T13:05:01.918-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "c2a99dde-1ca2-3ef7-8fd9-4729f1d9262e", "endTime": "2025-03-18T14:05:51.389-07:00", "id": "1885523150367908115", "insertTime": "2025-03-18T14:05:00.892-07:00", "kind": "compute#operation", "name": "operation-1742331900452-630a44201df59-3181d036-8a61956b", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742331900452-630a44201df59-3181d036-8a61956b", "startTime": "2025-03-18T14:05:00.915-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9ea370d6-2e23-394c-a23a-3a43f1824031", "endTime": "2025-03-18T14:05:47.917-07:00", "id": "5318028448889069843", "insertTime": "2025-03-18T14:05:00.906-07:00", "kind": "compute#operation", "name": "operation-1742331900453-630a44201e3ff-596d5ff8-df0d09bf", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742331900453-630a44201e3ff-596d5ff8-df0d09bf", "startTime": "2025-03-18T14:05:00.948-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "0f39a0c2-61e6-3ea7-8545-70f43811e1eb", "endTime": "2025-03-18T15:05:51.029-07:00", "id": "4582697753954767075", "insertTime": "2025-03-18T15:05:00.877-07:00", "kind": "compute#operation", "name": "operation-1742335500431-630a5189531d2-9855916b-608d2561", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742335500431-630a5189531d2-9855916b-608d2561", "startTime": "2025-03-18T15:05:00.898-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "6a3c4af7-c360-3aa9-860c-2a4fa6ced0e4", "endTime": "2025-03-18T15:05:48.186-07:00", "id": "4356896131904721123", "insertTime": "2025-03-18T15:05:00.900-07:00", "kind": "compute#operation", "name": "operation-1742335500444-630a51895625f-59a2baa1-316d30c9", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742335500444-630a51895625f-59a2baa1-316d30c9", "startTime": "2025-03-18T15:05:00.929-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "32c81f3e-f51f-3327-8809-21c8a06be23b", "endTime": "2025-03-18T16:05:50.781-07:00", "id": "735884559848325875", "insertTime": "2025-03-18T16:05:00.756-07:00", "kind": "compute#operation", "name": "operation-1742339100417-630a5ef289d7c-401abaab-e5ea1d59", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742339100417-630a5ef289d7c-401abaab-e5ea1d59", "startTime": "2025-03-18T16:05:00.779-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "febccb5d-a0e1-3d13-a90c-fd433888a430", "endTime": "2025-03-18T16:05:55.831-07:00", "id": "5104387292298232563", "insertTime": "2025-03-18T16:05:00.893-07:00", "kind": "compute#operation", "name": "operation-1742339100421-630a5ef28ac61-8b2bae0a-1d0481e1", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742339100421-630a5ef28ac61-8b2bae0a-1d0481e1", "startTime": "2025-03-18T16:05:00.920-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9f761fac-a817-3ec7-a5fd-e263272b8466", "endTime": "2025-03-18T17:05:47.989-07:00", "id": "361283954742375619", "insertTime": "2025-03-18T17:05:00.875-07:00", "kind": "compute#operation", "name": "operation-1742342700427-630a6c5bc6a0f-020b99ff-63041055", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742342700427-630a6c5bc6a0f-020b99ff-63041055", "startTime": "2025-03-18T17:05:00.900-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "7c9863a5-e94f-3f01-abc0-1369c30191a0", "endTime": "2025-03-18T17:05:48.468-07:00", "id": "7393282446461482179", "insertTime": "2025-03-18T17:05:00.901-07:00", "kind": "compute#operation", "name": "operation-1742342700440-630a6c5bc9bb5-badcb292-06e1caf8", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742342700440-630a6c5bc9bb5-badcb292-06e1caf8", "startTime": "2025-03-18T17:05:00.928-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "21501373-f752-3be8-bd7b-272616fd8504", "endTime": "2025-03-18T18:05:51.619-07:00", "id": "1089006724997162707", "insertTime": "2025-03-18T18:05:00.808-07:00", "kind": "compute#operation", "name": "operation-1742346300382-630a79c4f5da4-cc9ed2d7-1fa2b799", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742346300382-630a79c4f5da4-cc9ed2d7-1fa2b799", "startTime": "2025-03-18T18:05:00.834-07:00", "status": "DONE", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "clientOperationId": "9ef53c6b-28c5-3bb1-8414-13b95b84177c", "endTime": "2025-03-18T18:05:50.921-07:00", "id": "3104884891351230163", "insertTime": "2025-03-18T18:05:00.920-07:00", "kind": "compute#operation", "name": "operation-1742346300390-630a79c4f7ca5-fc6a1ee7-3da14d48", "operationType": "stop", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742346300390-630a79c4f7ca5-fc6a1ee7-3da14d48", "startTime": "2025-03-18T18:05:00.957-07:00", "status": "DONE", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T14:27:30.053-07:00", "id": "955370196266408877", "insertTime": "2025-03-18T14:27:30.053-07:00", "kind": "compute#operation", "name": "repair-1742333250053-630a492732605-67c0d2dc-a95be921", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742333250053-630a492732605-67c0d2dc-a95be921", "startTime": "2025-03-18T14:27:30.053-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T14:36:30.345-07:00", "id": "3622175296556652977", "insertTime": "2025-03-18T14:36:30.345-07:00", "kind": "compute#operation", "name": "repair-1742333790345-630a4b2a758ed-6e571884-5b35c262", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742333790345-630a4b2a758ed-6e571884-5b35c262", "startTime": "2025-03-18T14:36:30.345-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T14:45:31.227-07:00", "id": "2823263602284451732", "insertTime": "2025-03-18T14:45:31.227-07:00", "kind": "compute#operation", "name": "repair-1742334331227-630a4d2e48d8f-4035bc5b-1cfb2488", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742334331227-630a4d2e48d8f-4035bc5b-1cfb2488", "startTime": "2025-03-18T14:45:31.227-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T14:54:26.794-07:00", "id": "2569906642589341053", "insertTime": "2025-03-18T14:54:26.794-07:00", "kind": "compute#operation", "name": "repair-1742334866794-630a4f2d0a67c-311cf18f-d0007da9", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742334866794-630a4f2d0a67c-311cf18f-d0007da9", "startTime": "2025-03-18T14:54:26.794-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T15:03:26.321-07:00", "id": "4760431510777254721", "insertTime": "2025-03-18T15:03:26.321-07:00", "kind": "compute#operation", "name": "repair-1742335406321-630a512f92e53-4bbfe414-a078f9ef", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742335406321-630a512f92e53-4bbfe414-a078f9ef", "startTime": "2025-03-18T15:03:26.321-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T15:12:32.157-07:00", "id": "4473260917805830463", "insertTime": "2025-03-18T15:12:32.157-07:00", "kind": "compute#operation", "name": "repair-1742335952157-630a53381fbeb-70e6cd6c-e85463e5", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742335952157-630a53381fbeb-70e6cd6c-e85463e5", "startTime": "2025-03-18T15:12:32.157-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T15:25:21.806-07:00", "id": "3236923211211099198", "insertTime": "2025-03-18T15:25:21.806-07:00", "kind": "compute#operation", "name": "repair-1742336721806-630a56161e526-e8aeea81-4d2a0802", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742336721806-630a56161e526-e8aeea81-4d2a0802", "startTime": "2025-03-18T15:25:21.806-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T15:43:42.606-07:00", "id": "3118600646072486385", "insertTime": "2025-03-18T15:43:42.606-07:00", "kind": "compute#operation", "name": "repair-1742337822606-630a5a2fec442-e5de551a-ac28cda9", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742337822606-630a5a2fec442-e5de551a-ac28cda9", "startTime": "2025-03-18T15:43:42.606-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T16:10:37.370-07:00", "id": "575080636393735042", "insertTime": "2025-03-18T16:10:37.370-07:00", "kind": "compute#operation", "name": "repair-1742339437370-630a6033e1c30-e65f33a2-e3116a2b", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742339437370-630a6033e1c30-e65f33a2-e3116a2b", "startTime": "2025-03-18T16:10:37.370-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T16:50:14.854-07:00", "id": "1278959990194288729", "insertTime": "2025-03-18T16:50:14.854-07:00", "kind": "compute#operation", "name": "repair-1742341814854-630a690f3a3c2-68b36104-516360ab", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742341814854-630a690f3a3c2-68b36104-516360ab", "startTime": "2025-03-18T16:50:14.854-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T17:49:14.114-07:00", "id": "55663256009157221", "insertTime": "2025-03-18T17:49:14.114-07:00", "kind": "compute#operation", "name": "repair-1742345354114-630a763e876cb-7bf97b4a-041cd431", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742345354114-630a763e876cb-7bf97b4a-041cd431", "startTime": "2025-03-18T17:49:14.114-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6200748239440076168", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-16T10:04:01.491-07:00", "id": "261300229942983278", "insertTime": "2025-03-16T10:04:01.491-07:00", "kind": "compute#operation", "name": "systemevent-1742144641491-63078a880e052-82605118-2dca95ea", "operationType": "compute.instances.preempted", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/systemevent-1742144641491-63078a880e052-82605118-2dca95ea", "startTime": "2025-03-16T10:04:01.491-07:00", "status": "DONE", "statusMessage": "Instance was preempted.", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "system", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-16T23:00:14.262-07:00", "id": "2390636099224077441", "insertTime": "2025-03-16T23:00:14.262-07:00", "kind": "compute#operation", "name": "systemevent-1742191214262-630838074f9b5-9fa4f9d5-b984944c", "operationType": "compute.instances.preempted", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/systemevent-1742191214262-630838074f9b5-9fa4f9d5-b984944c", "startTime": "2025-03-16T23:00:14.262-07:00", "status": "DONE", "statusMessage": "Instance was preempted.", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "system", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-17T20:00:07.433-07:00", "id": "267705641088671576", "insertTime": "2025-03-17T20:00:07.433-07:00", "kind": "compute#operation", "name": "systemevent-1742266807433-630951a293789-4c05440d-84c2084d", "operationType": "compute.instances.preempted", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/systemevent-1742266807433-630951a293789-4c05440d-84c2084d", "startTime": "2025-03-17T20:00:07.433-07:00", "status": "DONE", "statusMessage": "Instance was preempted.", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "system", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-18T07:45:31.560-07:00", "id": "6232547060608154024", "insertTime": "2025-03-18T07:45:31.560-07:00", "kind": "compute#operation", "name": "systemevent-1742309131560-6309ef4e02817-7ac90e7a-fcf0f4d4", "operationType": "compute.instances.guestTerminate", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/systemevent-1742309131560-6309ef4e02817-7ac90e7a-fcf0f4d4", "startTime": "2025-03-18T07:45:31.560-07:00", "status": "DONE", "statusMessage": "Instance terminated by guest OS shutdown.", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "system", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } ] }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ], "message": "No results for the scope 'zones/us-central1-f'." } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ], "message": "No results for the scope 'zones/us-east1-b'." } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ], "message": "No results for the scope 'zones/us-east1-c'." } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ], "message": "No results for the scope 'zones/us-east1-d'." } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ], "message": "No results for the scope 'zones/us-east4-a'." } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ], "message": "No results for the scope 'zones/us-east4-b'." } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ], "message": "No results for the scope 'zones/us-east4-c'." } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ], "message": "No results for the scope 'zones/us-east5-a'." } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ], "message": "No results for the scope 'zones/us-east5-b'." } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ], "message": "No results for the scope 'zones/us-east5-c'." } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ], "message": "No results for the scope 'zones/us-south1-a'." } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ], "message": "No results for the scope 'zones/us-south1-b'." } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ], "message": "No results for the scope 'zones/us-south1-c'." } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ], "message": "No results for the scope 'zones/us-west1-a'." } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ], "message": "No results for the scope 'zones/us-west1-b'." } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ], "message": "No results for the scope 'zones/us-west1-c'." } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ], "message": "No results for the scope 'zones/us-west2-a'." } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ], "message": "No results for the scope 'zones/us-west2-b'." } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ], "message": "No results for the scope 'zones/us-west2-c'." } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ], "message": "No results for the scope 'zones/us-west3-a'." } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ], "message": "No results for the scope 'zones/us-west3-b'." } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ], "message": "No results for the scope 'zones/us-west3-c'." } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ], "message": "No results for the scope 'zones/us-west4-a'." } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ], "message": "No results for the scope 'zones/us-west4-b'." } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ], "message": "No results for the scope 'zones/us-west4-c'." } } }, "kind": "compute#operationAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/aggregated/operations" } ================================================ FILE: test-data/gce5/json-dumps/healthChecks.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-gce5-aaaa/global/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "7922431857666579912", "creationTimestamp": "2025-03-18T14:18:31.147-07:00", "name": "apache-health-check", "checkIntervalSec": 10, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/healthChecks/apache-health-check" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/healthChecks/" } ================================================ FILE: test-data/gce5/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-123456012345@compute-system.iam.gserviceaccount.com" ], "role": "projects/gcpdiag-gce5-aaaa/roles/instanceScheduler" }, { "members": [ "serviceAccount:service-123456012345@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:123456012345-compute@developer.gserviceaccount.com", "serviceAccount:123456012345@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-123456012345@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ], "role": "roles/websecurityscanner.serviceAgent" } ], "etag": "BwYwTlwh9Vo=", "version": 1 } ================================================ FILE: test-data/gce5/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Compute Engine default service account", "email": "123456012345-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce5-aaaa/serviceAccounts/123456012345-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce5-aaaa", "uniqueId": "112026732876443057743" } ] } ================================================ FILE: test-data/gce5/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "insertId": "-mg77tldhknc", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T23:05:49.019156357Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T23:05:48.381630Z" }, { "insertId": "fjh0xudbtr2", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T23:05:47.113209466Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T23:05:47.024917Z" }, { "insertId": "-3kpfhrdus74", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "ff649886-78e9-3f93-8ff8-14c745b50f2d" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "ff649886-78e9-3f93-8ff8-14c745b50f2d", "id": "2919161447385994355", "insertTime": "2025-03-17T16:05:00.873-07:00", "name": "operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2919161447385994355", "startTime": "2025-03-17T16:05:00.900-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T23:05:01.002643188Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T23:05:00.954233Z" }, { "insertId": "-3kpfhrdus72", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "f2781d82-d1f5-3fae-9668-8be251b2956d" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "f2781d82-d1f5-3fae-9668-8be251b2956d", "id": "5641947885851710579", "insertTime": "2025-03-17T16:05:00.855-07:00", "name": "operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5641947885851710579", "startTime": "2025-03-17T16:05:00.875-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T23:05:01.002643188Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T23:05:00.920872Z" }, { "insertId": "u8w6xue538k0", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "f2781d82-d1f5-3fae-9668-8be251b2956d" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T23:05:00.910396Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "f2781d82-d1f5-3fae-9668-8be251b2956d", "id": "5641947885851710579", "insertTime": "2025-03-17T16:05:00.855-07:00", "name": "operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5641947885851710579", "startTime": "2025-03-17T16:05:00.875-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T23:05:01.025031424Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T23:05:00.419086Z" }, { "insertId": "-n0eptue32cs2", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "ff649886-78e9-3f93-8ff8-14c745b50f2d" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T23:05:00.937936Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "ff649886-78e9-3f93-8ff8-14c745b50f2d", "id": "2919161447385994355", "insertTime": "2025-03-17T16:05:00.873-07:00", "name": "operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2919161447385994355", "startTime": "2025-03-17T16:05:00.900-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T23:05:01.247494127Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T23:05:00.415879Z" }, { "insertId": "-yelho5dywbc", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742252401994-63091bf87a9c6-814a5188-36322e94", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "8b91c7fe-c25e-3f0e-85aa-c106191d9303" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "8b91c7fe-c25e-3f0e-85aa-c106191d9303", "endTime": "2025-03-17T16:00:03.476-07:00", "id": "4085618842073896860", "insertTime": "2025-03-17T16:00:03.462-07:00", "name": "operation-1742252401994-63091bf87a9c6-814a5188-36322e94", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252401994-63091bf87a9c6-814a5188-36322e94", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4085618842073896860", "startTime": "2025-03-17T16:00:03.476-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T23:00:03.957425869Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T23:00:03.529895Z" }, { "insertId": "1z3k6xdwx9e", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742252401684-63091bf82f188-e24a1a44-287f83dd", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "c547046a-782a-34bf-8283-05e7990b9177" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "c547046a-782a-34bf-8283-05e7990b9177", "id": "7653346074898536348", "insertTime": "2025-03-17T16:00:03.286-07:00", "name": "operation-1742252401684-63091bf82f188-e24a1a44-287f83dd", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252401684-63091bf82f188-e24a1a44-287f83dd", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/7653346074898536348", "startTime": "2025-03-17T16:00:03.324-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T23:00:04.342051519Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T23:00:03.375134Z" }, { "insertId": "1z3k6xdwx9c", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742252401662-63091bf829c0d-e25b8e59-d0f094a9", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "485e8727-ba83-3712-b33d-18e8fec4bb1c" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "485e8727-ba83-3712-b33d-18e8fec4bb1c", "id": "1738976916313282460", "insertTime": "2025-03-17T16:00:03.252-07:00", "name": "operation-1742252401662-63091bf829c0d-e25b8e59-d0f094a9", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252401662-63091bf829c0d-e25b8e59-d0f094a9", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1738976916313282460", "startTime": "2025-03-17T16:00:03.272-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T23:00:03.348516591Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T23:00:03.319911Z" }, { "insertId": "-6n48d9d9swk", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T22:05:48.637707452Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T22:05:47.677700Z" }, { "insertId": "hhdp05dm4pc", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T22:05:48.181427151Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T22:05:47.496879Z" }, { "insertId": "1z3k6xdwkc0", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "487874bd-8c8e-3d08-850a-2f7651392633" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "487874bd-8c8e-3d08-850a-2f7651392633", "id": "1647750505276187235", "insertTime": "2025-03-17T15:05:00.893-07:00", "name": "operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1647750505276187235", "startTime": "2025-03-17T15:05:00.922-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T22:05:01.104328462Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T22:05:00.972464Z" }, { "insertId": "1z3k6xdwkby", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "74692df8-d203-3bba-bae5-0c26d55957cd" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "74692df8-d203-3bba-bae5-0c26d55957cd", "id": "457574256775340643", "insertTime": "2025-03-17T15:05:00.882-07:00", "name": "operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/457574256775340643", "startTime": "2025-03-17T15:05:00.907-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T22:05:01.104328462Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T22:05:00.960196Z" }, { "insertId": "-lm4yw0e4dd6q", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "74692df8-d203-3bba-bae5-0c26d55957cd" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T22:05:00.944013Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "74692df8-d203-3bba-bae5-0c26d55957cd", "id": "457574256775340643", "insertTime": "2025-03-17T15:05:00.882-07:00", "name": "operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100446-63090fabe0944-9b170c77-a11c5375", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/457574256775340643", "startTime": "2025-03-17T15:05:00.907-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T22:05:01.752149951Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T22:05:00.410218Z" }, { "insertId": "3nkncqe3n4lq", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "487874bd-8c8e-3d08-850a-2f7651392633" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T22:05:00.962755Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "487874bd-8c8e-3d08-850a-2f7651392633", "id": "1647750505276187235", "insertTime": "2025-03-17T15:05:00.893-07:00", "name": "operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100445-63090fabe06d2-bf84d04c-98662000", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1647750505276187235", "startTime": "2025-03-17T15:05:00.922-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T22:05:01.272002888Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T22:05:00.406067Z" }, { "insertId": "1z3k6xdwj86", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742248801494-63090e8ec6708-050ed621-7be93ab8", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "d67c3e8e-7664-34f5-976f-669e00aa8698" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d67c3e8e-7664-34f5-976f-669e00aa8698", "endTime": "2025-03-17T15:00:03.253-07:00", "id": "3848785218566956428", "insertTime": "2025-03-17T15:00:03.218-07:00", "name": "operation-1742248801494-63090e8ec6708-050ed621-7be93ab8", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742248801494-63090e8ec6708-050ed621-7be93ab8", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3848785218566956428", "startTime": "2025-03-17T15:00:03.253-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T22:00:04.038409652Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T22:00:03.315089Z" }, { "insertId": "-omopezdrj5q", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742248801596-63090e8edf5d9-4286f753-28679149", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "858592d1-edd9-348d-b827-df3526a3083b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "858592d1-edd9-348d-b827-df3526a3083b", "id": "2373641592238318988", "insertTime": "2025-03-17T15:00:03.198-07:00", "name": "operation-1742248801596-63090e8edf5d9-4286f753-28679149", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742248801596-63090e8edf5d9-4286f753-28679149", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2373641592238318988", "startTime": "2025-03-17T15:00:03.224-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T22:00:04.212957341Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T22:00:03.280666Z" }, { "insertId": "-omopezdrj5o", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742248801594-63090e8ededf8-4450bf48-3626c199", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "abecd5c1-6573-391f-8324-017c183e3a33" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "abecd5c1-6573-391f-8324-017c183e3a33", "id": "3819483993895937420", "insertTime": "2025-03-17T15:00:03.178-07:00", "name": "operation-1742248801594-63090e8ededf8-4450bf48-3626c199", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742248801594-63090e8ededf8-4450bf48-3626c199", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3819483993895937420", "startTime": "2025-03-17T15:00:03.206-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T22:00:04.212957341Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T22:00:03.248032Z" }, { "insertId": "-itrzpzdi8d8", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T21:05:51.568455739Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T21:05:51.254862Z" }, { "insertId": "tgci4add53y", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T21:05:47.989594931Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T21:05:47.353407Z" }, { "insertId": "-7px7v0dqfdq", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "49477e9c-8e6a-3f9b-81fa-3dd97ca77da1" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "49477e9c-8e6a-3f9b-81fa-3dd97ca77da1", "id": "8685744822880120979", "insertTime": "2025-03-17T14:05:00.863-07:00", "name": "operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8685744822880120979", "startTime": "2025-03-17T14:05:00.887-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T21:05:01.087413741Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T21:05:00.943373Z" }, { "insertId": "-7px7v0dqfdo", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "e8ec1c70-0a74-3531-9429-65f8512b35c6" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "e8ec1c70-0a74-3531-9429-65f8512b35c6", "id": "1355885036308869267", "insertTime": "2025-03-17T14:05:00.856-07:00", "name": "operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1355885036308869267", "startTime": "2025-03-17T14:05:00.879-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T21:05:01.087413741Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T21:05:00.933617Z" }, { "insertId": "-cftnmze42hyg", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "e8ec1c70-0a74-3531-9429-65f8512b35c6" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T21:05:00.916535Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "e8ec1c70-0a74-3531-9429-65f8512b35c6", "id": "1355885036308869267", "insertTime": "2025-03-17T14:05:00.856-07:00", "name": "operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1355885036308869267", "startTime": "2025-03-17T14:05:00.879-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T21:05:00.980321735Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T21:05:00.416674Z" }, { "insertId": "-lb10cae5l1iu", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "49477e9c-8e6a-3f9b-81fa-3dd97ca77da1" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T21:05:00.925584Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "49477e9c-8e6a-3f9b-81fa-3dd97ca77da1", "id": "8685744822880120979", "insertTime": "2025-03-17T14:05:00.863-07:00", "name": "operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500442-63090242a58d7-f4ec298e-750d0efd", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8685744822880120979", "startTime": "2025-03-17T14:05:00.887-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T21:05:01.333789320Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T21:05:00.410284Z" }, { "insertId": "h8y58ydyydo", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742245201632-63090125addb7-56c549b1-19f68e56", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "46155372-45f1-3830-81ad-7115a7236145" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "46155372-45f1-3830-81ad-7115a7236145", "endTime": "2025-03-17T14:00:03.200-07:00", "id": "8568738227131069372", "insertTime": "2025-03-17T14:00:03.185-07:00", "name": "operation-1742245201632-63090125addb7-56c549b1-19f68e56", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245201632-63090125addb7-56c549b1-19f68e56", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8568738227131069372", "startTime": "2025-03-17T14:00:03.200-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T21:00:03.915213889Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T21:00:03.249004Z" }, { "insertId": "dx29k5dyp2m", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742245201620-63090125aae33-73bc2c1d-1c80352f", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "6a1d1b91-4831-328a-b6eb-21372665308b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "6a1d1b91-4831-328a-b6eb-21372665308b", "id": "8939227766850925500", "insertTime": "2025-03-17T14:00:03.165-07:00", "name": "operation-1742245201620-63090125aae33-73bc2c1d-1c80352f", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245201620-63090125aae33-73bc2c1d-1c80352f", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8939227766850925500", "startTime": "2025-03-17T14:00:03.186-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T21:00:03.320081831Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T21:00:03.228850Z" }, { "insertId": "dx29k5dyp2k", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742245201601-63090125a63bb-265e11ab-0bfe955a", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "da48e2bf-050f-3985-b50c-57f08f8fded5" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "da48e2bf-050f-3985-b50c-57f08f8fded5", "id": "2496167306862080956", "insertTime": "2025-03-17T14:00:03.037-07:00", "name": "operation-1742245201601-63090125a63bb-265e11ab-0bfe955a", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245201601-63090125a63bb-265e11ab-0bfe955a", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2496167306862080956", "startTime": "2025-03-17T14:00:03.055-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T21:00:03.320081831Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T21:00:03.094737Z" }, { "insertId": "-hha3rrdkgrk", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T20:05:51.515059046Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T20:05:51.188255Z" }, { "insertId": "l4ll2rdewag", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T20:05:50.213688296Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T20:05:49.857788Z" }, { "insertId": "-y3nuqgdmegi", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "4b4fd0b8-88e0-3b10-b7b0-62761b517c1e" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "4b4fd0b8-88e0-3b10-b7b0-62761b517c1e", "id": "1424445689449234051", "insertTime": "2025-03-17T13:05:00.878-07:00", "name": "operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1424445689449234051", "startTime": "2025-03-17T13:05:00.899-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T20:05:01.593013765Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T20:05:00.950906Z" }, { "insertId": "-y3nuqgdmegg", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "970b17b0-9b76-3e39-9f01-94dfdadd760f" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "970b17b0-9b76-3e39-9f01-94dfdadd760f", "id": "750893701021384323", "insertTime": "2025-03-17T13:05:00.845-07:00", "name": "operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/750893701021384323", "startTime": "2025-03-17T13:05:00.866-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T20:05:01.593013765Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T20:05:00.919156Z" }, { "insertId": "-qajnqde4xkaa", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "970b17b0-9b76-3e39-9f01-94dfdadd760f" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T20:05:00.902400Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "970b17b0-9b76-3e39-9f01-94dfdadd760f", "id": "750893701021384323", "insertTime": "2025-03-17T13:05:00.845-07:00", "name": "operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900442-6308f4d96b215-3652df20-a7e4447d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/750893701021384323", "startTime": "2025-03-17T13:05:00.866-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T20:05:01.576125285Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T20:05:00.408612Z" }, { "insertId": "-f7t3rae2msow", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "4b4fd0b8-88e0-3b10-b7b0-62761b517c1e" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T20:05:00.932384Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "4b4fd0b8-88e0-3b10-b7b0-62761b517c1e", "id": "1424445689449234051", "insertTime": "2025-03-17T13:05:00.878-07:00", "name": "operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1424445689449234051", "startTime": "2025-03-17T13:05:00.899-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T20:05:01.881865633Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T20:05:00.406120Z" }, { "insertId": "dx29k5dy8r8", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742241602342-6308f3bd20de5-86522337-b3d34d70", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "cbf5b6d6-5bad-3695-9a6a-83e1f9f57056" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "cbf5b6d6-5bad-3695-9a6a-83e1f9f57056", "endTime": "2025-03-17T13:00:04.060-07:00", "id": "8087362278325076395", "insertTime": "2025-03-17T13:00:04.036-07:00", "name": "operation-1742241602342-6308f3bd20de5-86522337-b3d34d70", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241602342-6308f3bd20de5-86522337-b3d34d70", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8087362278325076395", "startTime": "2025-03-17T13:00:04.060-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T20:00:04.870841069Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T20:00:04.114199Z" }, { "insertId": "-omopezdqxl6", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742241601534-6308f3bc5bada-6623bfbf-fbdf6b1a", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "610dba90-611f-3133-bec2-f84412654fed" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "610dba90-611f-3133-bec2-f84412654fed", "id": "1282806567199424940", "insertTime": "2025-03-17T13:00:03.046-07:00", "name": "operation-1742241601534-6308f3bc5bada-6623bfbf-fbdf6b1a", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241601534-6308f3bc5bada-6623bfbf-fbdf6b1a", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1282806567199424940", "startTime": "2025-03-17T13:00:03.069-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T20:00:03.741032970Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T20:00:03.115878Z" }, { "insertId": "-omopezdqxl2", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742241601526-6308f3bc59a1b-f8d0f8a5-6984863a", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "7302c121-1829-3a4c-afc6-7f2736f8fd77" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "7302c121-1829-3a4c-afc6-7f2736f8fd77", "id": "3891675831431709101", "insertTime": "2025-03-17T13:00:02.078-07:00", "name": "operation-1742241601526-6308f3bc59a1b-f8d0f8a5-6984863a", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241601526-6308f3bc59a1b-f8d0f8a5-6984863a", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3891675831431709101", "startTime": "2025-03-17T13:00:02.097-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T20:00:02.740151907Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T20:00:02.139158Z" }, { "insertId": "jgn3ekd4678", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742238301436-6308e77123a71-a066b438-164eefaa", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T19:06:00.397506245Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T19:05:59.532912Z" }, { "insertId": "ptfhlgd96jk", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T19:05:52.629274404Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T19:05:52.017672Z" }, { "insertId": "1z3k6xdvkcs", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "b410ec84-1c11-3693-ae76-8342c61310d2" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b410ec84-1c11-3693-ae76-8342c61310d2", "id": "9055858643155930290", "insertTime": "2025-03-17T12:05:01.869-07:00", "name": "operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/9055858643155930290", "startTime": "2025-03-17T12:05:01.898-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T19:05:02.054628453Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T19:05:01.953020Z" }, { "insertId": "1z3k6xdvkcq", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742238301436-6308e77123a71-a066b438-164eefaa", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "b1007a2d-dac4-35be-b52d-45d688b9df64" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b1007a2d-dac4-35be-b52d-45d688b9df64", "id": "3571285728010030258", "insertTime": "2025-03-17T12:05:01.867-07:00", "name": "operation-1742238301436-6308e77123a71-a066b438-164eefaa", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301436-6308e77123a71-a066b438-164eefaa", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3571285728010030258", "startTime": "2025-03-17T12:05:01.889-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T19:05:02.054628453Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T19:05:01.936751Z" }, { "insertId": "2i6d4he2m412", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "b410ec84-1c11-3693-ae76-8342c61310d2" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T19:05:01.936652Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b410ec84-1c11-3693-ae76-8342c61310d2", "id": "9055858643155930290", "insertTime": "2025-03-17T12:05:01.869-07:00", "name": "operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/9055858643155930290", "startTime": "2025-03-17T12:05:01.898-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T19:05:02.568858787Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T19:05:01.410577Z" }, { "insertId": "-oduxbre2xrgo", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742238301436-6308e77123a71-a066b438-164eefaa", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "b1007a2d-dac4-35be-b52d-45d688b9df64" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T19:05:01.927047Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b1007a2d-dac4-35be-b52d-45d688b9df64", "id": "3571285728010030258", "insertTime": "2025-03-17T12:05:01.867-07:00", "name": "operation-1742238301436-6308e77123a71-a066b438-164eefaa", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301436-6308e77123a71-a066b438-164eefaa", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3571285728010030258", "startTime": "2025-03-17T12:05:01.889-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T19:05:02.901031822Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T19:05:01.403214Z" }, { "insertId": "-omopezdql5e", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742238001614-6308e65335094-f059ea10-55fe2e09", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "5976e362-588b-346d-af2c-7fff7bfc5a30" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "5976e362-588b-346d-af2c-7fff7bfc5a30", "id": "1818935755527278556", "insertTime": "2025-03-17T12:00:03.399-07:00", "name": "operation-1742238001614-6308e65335094-f059ea10-55fe2e09", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238001614-6308e65335094-f059ea10-55fe2e09", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1818935755527278556", "startTime": "2025-03-17T12:00:03.433-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T19:00:03.694650473Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T19:00:03.499166Z" }, { "insertId": "-omopezdql5c", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742238001597-6308e65330c25-1e332116-97724366", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "2ff47e8d-c436-38a2-a69b-e36c37d4398b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "2ff47e8d-c436-38a2-a69b-e36c37d4398b", "id": "1943232852102860764", "insertTime": "2025-03-17T12:00:03.175-07:00", "name": "operation-1742238001597-6308e65330c25-1e332116-97724366", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238001597-6308e65330c25-1e332116-97724366", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1943232852102860764", "startTime": "2025-03-17T12:00:03.199-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T19:00:03.694650473Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T19:00:03.254265Z" }, { "insertId": "h8y58ydy8ry", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742238001501-6308e6531968b-940917e8-b3d252e6", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "8a9cbe91-8c14-3f4a-a632-06115e962b2b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "8a9cbe91-8c14-3f4a-a632-06115e962b2b", "endTime": "2025-03-17T12:00:03.112-07:00", "id": "428730712409362396", "insertTime": "2025-03-17T12:00:03.094-07:00", "name": "operation-1742238001501-6308e6531968b-940917e8-b3d252e6", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238001501-6308e6531968b-940917e8-b3d252e6", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/428730712409362396", "startTime": "2025-03-17T12:00:03.112-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T19:00:04.038993527Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T19:00:03.166422Z" }, { "insertId": "-lmzj08dil0s", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T18:05:52.126350721Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T18:05:51.183672Z" }, { "insertId": "-eeckr3db8pk", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T18:05:51.285129064Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T18:05:50.532033Z" }, { "insertId": "1z3k6xdv99u", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "3616fbed-9c8d-3988-951b-670a42f2ca41" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "3616fbed-9c8d-3988-951b-670a42f2ca41", "id": "6752826638497864355", "insertTime": "2025-03-17T11:05:00.881-07:00", "name": "operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6752826638497864355", "startTime": "2025-03-17T11:05:00.904-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T18:05:01.227211613Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T18:05:00.955322Z" }, { "insertId": "1z3k6xdv99q", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "9bf8c762-6c20-3c14-88cf-144d1ac58915" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "9bf8c762-6c20-3c14-88cf-144d1ac58915", "id": "4359848204661283491", "insertTime": "2025-03-17T11:05:00.858-07:00", "name": "operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4359848204661283491", "startTime": "2025-03-17T11:05:00.878-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T18:05:01.227211613Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T18:05:00.916070Z" }, { "insertId": "ht4kmwe4ltvq", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "9bf8c762-6c20-3c14-88cf-144d1ac58915" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T18:05:00.906233Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "9bf8c762-6c20-3c14-88cf-144d1ac58915", "id": "4359848204661283491", "insertTime": "2025-03-17T11:05:00.858-07:00", "name": "operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700439-6308da06f614e-8f091290-e3aacde9", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4359848204661283491", "startTime": "2025-03-17T11:05:00.878-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T18:05:01.336485969Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T18:05:00.405649Z" }, { "insertId": "-hr37f8e36ytc", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "3616fbed-9c8d-3988-951b-670a42f2ca41" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T18:05:00.938991Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "3616fbed-9c8d-3988-951b-670a42f2ca41", "id": "6752826638497864355", "insertTime": "2025-03-17T11:05:00.881-07:00", "name": "operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700433-6308da06f4762-4df0a83c-3386df6f", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6752826638497864355", "startTime": "2025-03-17T11:05:00.904-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T18:05:01.502337309Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T18:05:00.398580Z" }, { "insertId": "-7px7v0dpn98", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742234401937-6308d8ea496b2-5ae1a297-cc23b8ba", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "2d705521-5336-3d53-a03d-63f1c635f2c0" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "2d705521-5336-3d53-a03d-63f1c635f2c0", "endTime": "2025-03-17T11:00:03.716-07:00", "id": "5923532964049051084", "insertTime": "2025-03-17T11:00:03.658-07:00", "name": "operation-1742234401937-6308d8ea496b2-5ae1a297-cc23b8ba", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234401937-6308d8ea496b2-5ae1a297-cc23b8ba", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5923532964049051084", "startTime": "2025-03-17T11:00:03.716-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T18:00:04.275024484Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T18:00:03.797665Z" }, { "insertId": "-59kb7jdvqdu", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742234401724-6308d8ea1576a-f0db294f-380389f1", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "d4c82b0b-4902-367a-9969-4a17ba74a8c9" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d4c82b0b-4902-367a-9969-4a17ba74a8c9", "id": "1701266824281578956", "insertTime": "2025-03-17T11:00:03.270-07:00", "name": "operation-1742234401724-6308d8ea1576a-f0db294f-380389f1", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234401724-6308d8ea1576a-f0db294f-380389f1", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1701266824281578956", "startTime": "2025-03-17T11:00:03.295-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T18:00:03.889583503Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T18:00:03.346980Z" }, { "insertId": "-59kb7jdvqds", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742234401685-6308d8ea0be25-afc06d66-7fc96857", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "10dec03e-100a-3f29-8880-ed57d294a84b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "10dec03e-100a-3f29-8880-ed57d294a84b", "id": "5752300185689906636", "insertTime": "2025-03-17T11:00:03.172-07:00", "name": "operation-1742234401685-6308d8ea0be25-afc06d66-7fc96857", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234401685-6308d8ea0be25-afc06d66-7fc96857", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5752300185689906636", "startTime": "2025-03-17T11:00:03.191-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T18:00:03.889583503Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T18:00:03.241523Z" }, { "insertId": "rheikxdmnui", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T17:05:53.650202219Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T17:05:53.165983Z" }, { "insertId": "3nttiudvei4", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T17:05:52.643043287Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T17:05:52.199015Z" }, { "insertId": "-s9y1ksdbki2", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "20757f02-52e5-3a1f-b849-ed9f5d54fdc4" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "20757f02-52e5-3a1f-b849-ed9f5d54fdc4", "id": "5707824721303038163", "insertTime": "2025-03-17T10:05:00.896-07:00", "name": "operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5707824721303038163", "startTime": "2025-03-17T10:05:00.957-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T17:05:01.798746474Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T17:05:01.026179Z" }, { "insertId": "-s9y1ksdbki0", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "2a88371a-e7f2-340a-83c1-54db9a8678bd" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "2a88371a-e7f2-340a-83c1-54db9a8678bd", "id": "8616019215695341779", "insertTime": "2025-03-17T10:05:00.888-07:00", "name": "operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8616019215695341779", "startTime": "2025-03-17T10:05:00.914-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T17:05:01.798746474Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T17:05:00.970367Z" }, { "insertId": "-fskjm6e24bny", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "20757f02-52e5-3a1f-b849-ed9f5d54fdc4" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T17:05:01.005461Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "20757f02-52e5-3a1f-b849-ed9f5d54fdc4", "id": "5707824721303038163", "insertTime": "2025-03-17T10:05:00.896-07:00", "name": "operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100453-6308cc9dbf221-009ae266-64234ed9", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5707824721303038163", "startTime": "2025-03-17T10:05:00.957-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T17:05:01.765893150Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T17:05:00.407126Z" }, { "insertId": "cs1roce3jv0i", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "2a88371a-e7f2-340a-83c1-54db9a8678bd" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T17:05:00.960919Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "2a88371a-e7f2-340a-83c1-54db9a8678bd", "id": "8616019215695341779", "insertTime": "2025-03-17T10:05:00.888-07:00", "name": "operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8616019215695341779", "startTime": "2025-03-17T10:05:00.914-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T17:05:01.794080807Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T17:05:00.406464Z" }, { "insertId": "-yelho5dwhm8", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742230801560-6308cb80b359b-6e738ab5-bc25ff0d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "cc88ac38-2c3c-327a-a43d-0b5862405b36" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "cc88ac38-2c3c-327a-a43d-0b5862405b36", "id": "5983124286661323772", "insertTime": "2025-03-17T10:00:03.219-07:00", "name": "operation-1742230801560-6308cb80b359b-6e738ab5-bc25ff0d", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742230801560-6308cb80b359b-6e738ab5-bc25ff0d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5983124286661323772", "startTime": "2025-03-17T10:00:03.251-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T17:00:03.963204742Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T17:00:03.301116Z" }, { "insertId": "-yelho5dwhm6", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742230801525-6308cb80aa98c-5849d3b9-b398320e", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "6d48133c-376d-3083-8676-02cc2e5c9b92" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "6d48133c-376d-3083-8676-02cc2e5c9b92", "id": "6551260683675495420", "insertTime": "2025-03-17T10:00:03.096-07:00", "name": "operation-1742230801525-6308cb80aa98c-5849d3b9-b398320e", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742230801525-6308cb80aa98c-5849d3b9-b398320e", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6551260683675495420", "startTime": "2025-03-17T10:00:03.124-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T17:00:03.963204742Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T17:00:03.170387Z" }, { "insertId": "-7px7v0dpelu", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742230802002-6308cb811f0a4-bee55080-d0245c6e", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "1bbd2f6b-89f5-31b3-ba71-ced3054c7380" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "1bbd2f6b-89f5-31b3-ba71-ced3054c7380", "endTime": "2025-03-17T10:00:02.617-07:00", "id": "4839343623511600125", "insertTime": "2025-03-17T10:00:02.598-07:00", "name": "operation-1742230802002-6308cb811f0a4-bee55080-d0245c6e", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742230802002-6308cb811f0a4-bee55080-d0245c6e", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4839343623511600125", "startTime": "2025-03-17T10:00:02.617-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T17:00:02.847786203Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T17:00:02.665901Z" }, { "insertId": "az9sbdgmmq", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T16:05:53.015386446Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T16:05:52.791276Z" }, { "insertId": "ptgzy0dj1yc", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T16:05:51.555624770Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T16:05:50.663645Z" }, { "insertId": "h8y58ydx73m", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "8146f34f-9fd8-3e91-98a5-0393c793632c" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "8146f34f-9fd8-3e91-98a5-0393c793632c", "id": "3618352801433122498", "insertTime": "2025-03-17T09:05:01.887-07:00", "name": "operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3618352801433122498", "startTime": "2025-03-17T09:05:01.912-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T16:05:02.842969498Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T16:05:01.963446Z" }, { "insertId": "h8y58ydx73k", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "1e16fe82-2bc0-39b3-b7d5-51438e75def7" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "1e16fe82-2bc0-39b3-b7d5-51438e75def7", "id": "2631688583206270658", "insertTime": "2025-03-17T09:05:01.876-07:00", "name": "operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2631688583206270658", "startTime": "2025-03-17T09:05:01.897-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T16:05:02.842969498Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T16:05:01.949430Z" }, { "insertId": "-x8u8j0e40e28", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "8146f34f-9fd8-3e91-98a5-0393c793632c" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T16:05:01.947639Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "8146f34f-9fd8-3e91-98a5-0393c793632c", "id": "3618352801433122498", "insertTime": "2025-03-17T09:05:01.887-07:00", "name": "operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3618352801433122498", "startTime": "2025-03-17T09:05:01.912-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T16:05:02.382558715Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T16:05:01.422391Z" }, { "insertId": "-qbtbvde3z2h0", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "1e16fe82-2bc0-39b3-b7d5-51438e75def7" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T16:05:01.933655Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "1e16fe82-2bc0-39b3-b7d5-51438e75def7", "id": "2631688583206270658", "insertTime": "2025-03-17T09:05:01.876-07:00", "name": "operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2631688583206270658", "startTime": "2025-03-17T09:05:01.897-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T16:05:02.138836050Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T16:05:01.419114Z" }, { "insertId": "-omopezdpr3i", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742227201572-6308be177c015-a2d48b3a-6687fa45", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "24766046-69be-3477-80cb-b5e384263f66" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "24766046-69be-3477-80cb-b5e384263f66", "id": "6650129014058252780", "insertTime": "2025-03-17T09:00:03.196-07:00", "name": "operation-1742227201572-6308be177c015-a2d48b3a-6687fa45", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227201572-6308be177c015-a2d48b3a-6687fa45", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6650129014058252780", "startTime": "2025-03-17T09:00:03.218-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T16:00:03.572044305Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T16:00:03.260036Z" }, { "insertId": "-yelho5dw2te", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742227201477-6308be1764b48-3e4d4d9e-b12db2d8", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "f0560c42-4ce1-3ba9-908f-62f7cd6b1ef9" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "f0560c42-4ce1-3ba9-908f-62f7cd6b1ef9", "endTime": "2025-03-17T09:00:03.147-07:00", "id": "5593526935657773548", "insertTime": "2025-03-17T09:00:03.118-07:00", "name": "operation-1742227201477-6308be1764b48-3e4d4d9e-b12db2d8", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227201477-6308be1764b48-3e4d4d9e-b12db2d8", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5593526935657773548", "startTime": "2025-03-17T09:00:03.147-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T16:00:03.422701554Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T16:00:03.201928Z" }, { "insertId": "-omopezdpr3g", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742227201556-6308be1777f8f-c60fbe93-d5e32061", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "4325022e-d593-3167-9613-31b8a41837e7" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "4325022e-d593-3167-9613-31b8a41837e7", "id": "4638665940940487148", "insertTime": "2025-03-17T09:00:03.070-07:00", "name": "operation-1742227201556-6308be1777f8f-c60fbe93-d5e32061", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227201556-6308be1777f8f-c60fbe93-d5e32061", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4638665940940487148", "startTime": "2025-03-17T09:00:03.090-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T16:00:03.572044305Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T16:00:03.140902Z" }, { "insertId": "8docjydteri", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T15:05:51.721688294Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T15:05:51.007315Z" }, { "insertId": "-1c7wjzdpveo", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T15:05:47.357937720Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T15:05:47.118714Z" }, { "insertId": "dx29k5dw7qe", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "fa521aa2-b88f-39a7-9163-85be5ab11a2c" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "fa521aa2-b88f-39a7-9163-85be5ab11a2c", "id": "5477583477458437363", "insertTime": "2025-03-17T08:05:00.869-07:00", "name": "operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5477583477458437363", "startTime": "2025-03-17T08:05:00.891-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T15:05:01.278641425Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T15:05:00.957872Z" }, { "insertId": "dx29k5dw7qc", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "d5196fd6-848d-342a-b624-b79c47fa992f" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d5196fd6-848d-342a-b624-b79c47fa992f", "id": "4017972179448988915", "insertTime": "2025-03-17T08:05:00.874-07:00", "name": "operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4017972179448988915", "startTime": "2025-03-17T08:05:00.899-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T15:05:01.278641425Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T15:05:00.952283Z" }, { "insertId": "-qm10d0e3b9vm", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "fa521aa2-b88f-39a7-9163-85be5ab11a2c" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T15:05:00.940717Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "fa521aa2-b88f-39a7-9163-85be5ab11a2c", "id": "5477583477458437363", "insertTime": "2025-03-17T08:05:00.869-07:00", "name": "operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5477583477458437363", "startTime": "2025-03-17T08:05:00.891-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T15:05:01.577989663Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T15:05:00.480081Z" }, { "insertId": "-y3humge4jzni", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "d5196fd6-848d-342a-b624-b79c47fa992f" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T15:05:00.942611Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d5196fd6-848d-342a-b624-b79c47fa992f", "id": "4017972179448988915", "insertTime": "2025-03-17T08:05:00.874-07:00", "name": "operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4017972179448988915", "startTime": "2025-03-17T08:05:00.899-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T15:05:01.469694422Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T15:05:00.467694Z" }, { "insertId": "-59kb7jduls4", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742223602658-6308b0af4ae95-5040c88d-3d45ca7f", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "14854925-b5a9-335f-803d-59da45294459" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "14854925-b5a9-335f-803d-59da45294459", "id": "7753500576187778587", "insertTime": "2025-03-17T08:00:04.313-07:00", "name": "operation-1742223602658-6308b0af4ae95-5040c88d-3d45ca7f", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223602658-6308b0af4ae95-5040c88d-3d45ca7f", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/7753500576187778587", "startTime": "2025-03-17T08:00:04.340-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T15:00:04.884930777Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T15:00:04.390700Z" }, { "insertId": "-59kb7jduls2", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742223602659-6308b0af4aeec-06dfba2b-fd92145d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "47396e2e-c48e-3861-a12e-f6c9d247499f" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "47396e2e-c48e-3861-a12e-f6c9d247499f", "id": "4341070311290406427", "insertTime": "2025-03-17T08:00:04.221-07:00", "name": "operation-1742223602659-6308b0af4aeec-06dfba2b-fd92145d", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223602659-6308b0af4aeec-06dfba2b-fd92145d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4341070311290406427", "startTime": "2025-03-17T08:00:04.251-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T15:00:04.884930777Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T15:00:04.310650Z" }, { "insertId": "-omopezdpf9m", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742223601565-6308b0ae3ff18-ca984b02-52304b26", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "10772da0-581b-304e-b469-1e28bc279ede" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "10772da0-581b-304e-b469-1e28bc279ede", "endTime": "2025-03-17T08:00:03.247-07:00", "id": "3964271185439852060", "insertTime": "2025-03-17T08:00:03.204-07:00", "name": "operation-1742223601565-6308b0ae3ff18-ca984b02-52304b26", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223601565-6308b0ae3ff18-ca984b02-52304b26", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3964271185439852060", "startTime": "2025-03-17T08:00:03.247-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T15:00:03.361573498Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T15:00:03.302324Z" }, { "insertId": "abnib6dbo52", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T14:05:51.693776443Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T14:05:50.942165Z" }, { "insertId": "jfq3ynd9qai", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T14:05:51.063152720Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T14:05:50.819651Z" }, { "insertId": "1z3k6xdtxb6", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "04ed471a-7a09-3568-a375-941867872ee4" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "04ed471a-7a09-3568-a375-941867872ee4", "id": "3825094303516300003", "insertTime": "2025-03-17T07:05:00.880-07:00", "name": "operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3825094303516300003", "startTime": "2025-03-17T07:05:00.908-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T14:05:01.316922954Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T14:05:00.956814Z" }, { "insertId": "1z3k6xdtxb4", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "d7e53791-6f52-3a32-a244-6edda5df971f" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d7e53791-6f52-3a32-a244-6edda5df971f", "id": "1799997165955027683", "insertTime": "2025-03-17T07:05:00.870-07:00", "name": "operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1799997165955027683", "startTime": "2025-03-17T07:05:00.896-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T14:05:01.316922954Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T14:05:00.947310Z" }, { "insertId": "nwc85ae3ai7a", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "04ed471a-7a09-3568-a375-941867872ee4" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T14:05:00.947208Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "04ed471a-7a09-3568-a375-941867872ee4", "id": "3825094303516300003", "insertTime": "2025-03-17T07:05:00.880-07:00", "name": "operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3825094303516300003", "startTime": "2025-03-17T07:05:00.908-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T14:05:01.031192458Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T14:05:00.405293Z" }, { "insertId": "jpwqwte1d4f6", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "d7e53791-6f52-3a32-a244-6edda5df971f" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T14:05:00.930191Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d7e53791-6f52-3a32-a244-6edda5df971f", "id": "1799997165955027683", "insertTime": "2025-03-17T07:05:00.870-07:00", "name": "operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1799997165955027683", "startTime": "2025-03-17T07:05:00.896-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T14:05:01.594097712Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T14:05:00.400688Z" }, { "insertId": "-59kb7jdu984", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742220001612-6308a34511268-376aa0ed-5f5ea20d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "62bb69c9-4500-3b3a-b251-52a906c3ee6c" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "62bb69c9-4500-3b3a-b251-52a906c3ee6c", "id": "2106490460308870156", "insertTime": "2025-03-17T07:00:03.175-07:00", "name": "operation-1742220001612-6308a34511268-376aa0ed-5f5ea20d", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220001612-6308a34511268-376aa0ed-5f5ea20d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2106490460308870156", "startTime": "2025-03-17T07:00:03.201-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T14:00:03.992451794Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T14:00:03.255544Z" }, { "insertId": "-59kb7jdu982", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742220001611-6308a34510d6b-1c07cf62-91ec1f96", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "11b28918-9a1d-3fa1-8c61-41a23e562a61" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "11b28918-9a1d-3fa1-8c61-41a23e562a61", "id": "2992722735244088332", "insertTime": "2025-03-17T07:00:03.163-07:00", "name": "operation-1742220001611-6308a34510d6b-1c07cf62-91ec1f96", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220001611-6308a34510d6b-1c07cf62-91ec1f96", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2992722735244088332", "startTime": "2025-03-17T07:00:03.185-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T14:00:03.992451794Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T14:00:03.232407Z" }, { "insertId": "-3kpfhrds096", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742220001489-6308a344f30b6-74d42837-05378b31", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "583f5631-8316-3090-9455-c80fadf9e9f2" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "583f5631-8316-3090-9455-c80fadf9e9f2", "endTime": "2025-03-17T07:00:03.169-07:00", "id": "1681197700532769804", "insertTime": "2025-03-17T07:00:03.145-07:00", "name": "operation-1742220001489-6308a344f30b6-74d42837-05378b31", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220001489-6308a344f30b6-74d42837-05378b31", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1681197700532769804", "startTime": "2025-03-17T07:00:03.169-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T14:00:04.141158775Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T14:00:03.220995Z" }, { "insertId": "-yohl49dupf4", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T13:05:49.129648027Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T13:05:48.106747Z" }, { "insertId": "ehpckgd80fa", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T13:05:48.722798595Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T13:05:47.701713Z" }, { "insertId": "-yelho5duyb0", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "b91f6458-64f5-3560-9db5-b0d899839441" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b91f6458-64f5-3560-9db5-b0d899839441", "id": "6080248924746392339", "insertTime": "2025-03-17T06:05:00.857-07:00", "name": "operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6080248924746392339", "startTime": "2025-03-17T06:05:00.880-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T13:05:01.234903830Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T13:05:00.923337Z" }, { "insertId": "-yelho5duyay", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "ae3b4eb5-7045-38dd-8eb9-8c72816759df" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "ae3b4eb5-7045-38dd-8eb9-8c72816759df", "id": "3348071879590388499", "insertTime": "2025-03-17T06:05:00.844-07:00", "name": "operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3348071879590388499", "startTime": "2025-03-17T06:05:00.862-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T13:05:01.234903830Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T13:05:00.915438Z" }, { "insertId": "-sstd50e3vty0", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "b91f6458-64f5-3560-9db5-b0d899839441" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T13:05:00.906505Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b91f6458-64f5-3560-9db5-b0d899839441", "id": "6080248924746392339", "insertTime": "2025-03-17T06:05:00.857-07:00", "name": "operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700444-630896f8d3d80-c91fbe17-b331f814", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6080248924746392339", "startTime": "2025-03-17T06:05:00.880-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T13:05:01.473340541Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T13:05:00.414867Z" }, { "insertId": "6zervge313eu", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "ae3b4eb5-7045-38dd-8eb9-8c72816759df" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T13:05:00.898484Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "ae3b4eb5-7045-38dd-8eb9-8c72816759df", "id": "3348071879590388499", "insertTime": "2025-03-17T06:05:00.844-07:00", "name": "operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3348071879590388499", "startTime": "2025-03-17T06:05:00.862-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T13:05:01.431668403Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T13:05:00.412911Z" }, { "insertId": "1z3k6xdtkom", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742216401728-630895dbf34b9-c23e2fd0-47e3ca4f", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "b8a5934f-2586-3dcc-ba10-9c4d00d420ee" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b8a5934f-2586-3dcc-ba10-9c4d00d420ee", "endTime": "2025-03-17T06:00:03.428-07:00", "id": "5233967228712755772", "insertTime": "2025-03-17T06:00:03.407-07:00", "name": "operation-1742216401728-630895dbf34b9-c23e2fd0-47e3ca4f", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216401728-630895dbf34b9-c23e2fd0-47e3ca4f", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5233967228712755772", "startTime": "2025-03-17T06:00:03.428-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T13:00:03.615641266Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T13:00:03.479815Z" }, { "insertId": "h8y58ydw03e", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742216401683-630895dbe8325-76d0534b-b308bdb3", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "64c19fe1-450e-3eb1-ae55-f065a0c78460" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "64c19fe1-450e-3eb1-ae55-f065a0c78460", "id": "3251719403610677820", "insertTime": "2025-03-17T06:00:03.397-07:00", "name": "operation-1742216401683-630895dbe8325-76d0534b-b308bdb3", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216401683-630895dbe8325-76d0534b-b308bdb3", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3251719403610677820", "startTime": "2025-03-17T06:00:03.425-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T13:00:03.660246631Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T13:00:03.477210Z" }, { "insertId": "h8y58ydw03c", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742216401694-630895dbeb110-06dcda50-488e9311", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "f8c66c65-ffac-34ee-ab39-a218d083075b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "f8c66c65-ffac-34ee-ab39-a218d083075b", "id": "3728978484529570364", "insertTime": "2025-03-17T06:00:03.282-07:00", "name": "operation-1742216401694-630895dbeb110-06dcda50-488e9311", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216401694-630895dbeb110-06dcda50-488e9311", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3728978484529570364", "startTime": "2025-03-17T06:00:03.308-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T13:00:03.660246631Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T13:00:03.357554Z" }, { "insertId": "5vgq25d5jlg", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T12:05:51.148518842Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T12:05:50.527938Z" }, { "insertId": "-3llzmeddsso", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T12:05:48.126130795Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T12:05:47.078294Z" }, { "insertId": "h8y58ydvkky", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "7b781502-2cb7-3062-bcfb-084e1c5425ef" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "7b781502-2cb7-3062-bcfb-084e1c5425ef", "id": "3040197087530955011", "insertTime": "2025-03-17T05:05:00.775-07:00", "name": "operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3040197087530955011", "startTime": "2025-03-17T05:05:00.802-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T12:05:00.917821148Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T12:05:00.851709Z" }, { "insertId": "h8y58ydvkkw", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "d2c535c4-023a-3717-a281-e33166745b63" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d2c535c4-023a-3717-a281-e33166745b63", "id": "4832203330576298243", "insertTime": "2025-03-17T05:05:00.766-07:00", "name": "operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4832203330576298243", "startTime": "2025-03-17T05:05:00.789-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T12:05:00.917821148Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T12:05:00.840258Z" }, { "insertId": "-oejtqke2jeqs", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "7b781502-2cb7-3062-bcfb-084e1c5425ef" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T12:05:00.835359Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "7b781502-2cb7-3062-bcfb-084e1c5425ef", "id": "3040197087530955011", "insertTime": "2025-03-17T05:05:00.775-07:00", "name": "operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100420-6308898f93d7f-231dfbcf-5347074f", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3040197087530955011", "startTime": "2025-03-17T05:05:00.802-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T12:05:01.604747150Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T12:05:00.378819Z" }, { "insertId": "lpu43e4023e", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "d2c535c4-023a-3717-a281-e33166745b63" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T12:05:00.824122Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d2c535c4-023a-3717-a281-e33166745b63", "id": "4832203330576298243", "insertTime": "2025-03-17T05:05:00.766-07:00", "name": "operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100412-6308898f91f66-0874ad58-f4c283a3", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4832203330576298243", "startTime": "2025-03-17T05:05:00.789-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T12:05:01.594076483Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T12:05:00.376612Z" }, { "insertId": "-yelho5dudp4", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742212801979-63088872f62bc-6bb1362a-bcfd5910", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "db7e5497-5e2a-3c33-a65c-d7e12fafc015" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "db7e5497-5e2a-3c33-a65c-d7e12fafc015", "endTime": "2025-03-17T05:00:03.536-07:00", "id": "1580285352264183852", "insertTime": "2025-03-17T05:00:03.513-07:00", "name": "operation-1742212801979-63088872f62bc-6bb1362a-bcfd5910", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742212801979-63088872f62bc-6bb1362a-bcfd5910", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1580285352264183852", "startTime": "2025-03-17T05:00:03.536-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T12:00:04.295602557Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T12:00:03.592709Z" }, { "insertId": "-3kpfhrdrcd0", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742212801498-6308887280dc6-ff089f27-d2289f8d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "b0e491e8-c738-336d-8010-4c2e25de26f6" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b0e491e8-c738-336d-8010-4c2e25de26f6", "id": "4476352100258132012", "insertTime": "2025-03-17T05:00:03.081-07:00", "name": "operation-1742212801498-6308887280dc6-ff089f27-d2289f8d", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742212801498-6308887280dc6-ff089f27-d2289f8d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4476352100258132012", "startTime": "2025-03-17T05:00:03.106-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T12:00:03.594400473Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T12:00:03.157211Z" }, { "insertId": "-3kpfhrdrccy", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742212801485-630888727dbfc-366585df-8582039b", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "8f1e713b-4f60-3c97-aa56-aae0f86bc37e" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "8f1e713b-4f60-3c97-aa56-aae0f86bc37e", "id": "4549950664137355308", "insertTime": "2025-03-17T05:00:03.068-07:00", "name": "operation-1742212801485-630888727dbfc-366585df-8582039b", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742212801485-630888727dbfc-366585df-8582039b", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4549950664137355308", "startTime": "2025-03-17T05:00:03.091-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T12:00:03.594400473Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T12:00:03.144145Z" }, { "insertId": "-zh2vmad5wcm", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T11:05:52.599214899Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T11:05:51.558834Z" }, { "insertId": "-hha3rrdj85a", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T11:05:48.383713972Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T11:05:47.536211Z" }, { "insertId": "-59kb7jdt270", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "5782653c-010e-30f4-b5d4-1b9a6549c14c" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "5782653c-010e-30f4-b5d4-1b9a6549c14c", "id": "4870494097891508019", "insertTime": "2025-03-17T04:05:00.912-07:00", "name": "operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4870494097891508019", "startTime": "2025-03-17T04:05:00.937-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T11:05:01.431434590Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T11:05:00.988978Z" }, { "insertId": "-59kb7jdt26y", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "a29316da-08fc-398f-836c-5bfa3dbb015b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "a29316da-08fc-398f-836c-5bfa3dbb015b", "id": "8685308845044907827", "insertTime": "2025-03-17T04:05:00.892-07:00", "name": "operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8685308845044907827", "startTime": "2025-03-17T04:05:00.919-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T11:05:01.431434590Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T11:05:00.976861Z" }, { "insertId": "-6mimo8e2o0ye", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "5782653c-010e-30f4-b5d4-1b9a6549c14c" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T11:05:00.972828Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "5782653c-010e-30f4-b5d4-1b9a6549c14c", "id": "4870494097891508019", "insertTime": "2025-03-17T04:05:00.912-07:00", "name": "operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cda8-83134814-a57aeb2d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4870494097891508019", "startTime": "2025-03-17T04:05:00.937-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T11:05:01.673687830Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T11:05:00.395835Z" }, { "insertId": "d22dq2e3crf4", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "a29316da-08fc-398f-836c-5bfa3dbb015b" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T11:05:00.960326Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "a29316da-08fc-398f-836c-5bfa3dbb015b", "id": "8685308845044907827", "insertTime": "2025-03-17T04:05:00.892-07:00", "name": "operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cb71-0518509e-c43d9ec3", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8685308845044907827", "startTime": "2025-03-17T04:05:00.919-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T11:05:01.516328972Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T11:05:00.393942Z" }, { "insertId": "-59kb7jdt10e", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742209201672-63087b097104f-2d777f53-d0d41d89", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "0464ff21-b4ad-315c-b5fd-483b4c10c087" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "0464ff21-b4ad-315c-b5fd-483b4c10c087", "id": "1835572135254670940", "insertTime": "2025-03-17T04:00:03.178-07:00", "name": "operation-1742209201672-63087b097104f-2d777f53-d0d41d89", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209201672-63087b097104f-2d777f53-d0d41d89", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1835572135254670940", "startTime": "2025-03-17T04:00:03.205-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T11:00:03.397740553Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T11:00:03.264068Z" }, { "insertId": "-59kb7jdt10c", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742209201675-63087b0971c4f-220d763b-e41147e4", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "17d7a058-7766-34f9-bb3f-b40a00d2a51b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "17d7a058-7766-34f9-bb3f-b40a00d2a51b", "id": "4308413493095546460", "insertTime": "2025-03-17T04:00:03.166-07:00", "name": "operation-1742209201675-63087b0971c4f-220d763b-e41147e4", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209201675-63087b0971c4f-220d763b-e41147e4", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4308413493095546460", "startTime": "2025-03-17T04:00:03.190-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T11:00:03.397740553Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T11:00:03.235422Z" }, { "insertId": "1z3k6xdsu0u", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742209201528-63087b094dd8b-9051521f-88b4157e", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "19ded723-d842-3701-8ebc-e44fd37b07ef" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "19ded723-d842-3701-8ebc-e44fd37b07ef", "endTime": "2025-03-17T04:00:03.121-07:00", "id": "7651373795851484764", "insertTime": "2025-03-17T04:00:03.104-07:00", "name": "operation-1742209201528-63087b094dd8b-9051521f-88b4157e", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209201528-63087b094dd8b-9051521f-88b4157e", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/7651373795851484764", "startTime": "2025-03-17T04:00:03.121-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T11:00:03.433270780Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T11:00:03.171838Z" }, { "insertId": "8lxz6rd60ai", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T10:05:47.497394563Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T10:05:47.013208Z" }, { "insertId": "204bindlzkk", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742205900390-63086ebd18036-e00520e6-947a413b", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T10:05:45.033414575Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T10:05:44.493316Z" }, { "insertId": "h8y58ydui24", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "8040b0aa-3213-3c16-a2ff-dabc2d5e3081" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "8040b0aa-3213-3c16-a2ff-dabc2d5e3081", "id": "4660076975681588515", "insertTime": "2025-03-17T03:05:00.796-07:00", "name": "operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4660076975681588515", "startTime": "2025-03-17T03:05:00.820-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T10:05:01.022276546Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T10:05:00.873411Z" }, { "insertId": "h8y58ydui22", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742205900390-63086ebd18036-e00520e6-947a413b", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "ed6db565-f2f3-3b1e-adad-a3a76947481c" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "ed6db565-f2f3-3b1e-adad-a3a76947481c", "id": "1217808525006884131", "insertTime": "2025-03-17T03:05:00.771-07:00", "name": "operation-1742205900390-63086ebd18036-e00520e6-947a413b", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900390-63086ebd18036-e00520e6-947a413b", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1217808525006884131", "startTime": "2025-03-17T03:05:00.793-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T10:05:01.022276546Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T10:05:00.835765Z" }, { "insertId": "-e58qmpe4u46g", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "8040b0aa-3213-3c16-a2ff-dabc2d5e3081" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T10:05:00.857242Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "8040b0aa-3213-3c16-a2ff-dabc2d5e3081", "id": "4660076975681588515", "insertTime": "2025-03-17T03:05:00.796-07:00", "name": "operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4660076975681588515", "startTime": "2025-03-17T03:05:00.820-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T10:05:01.464743362Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T10:05:00.363309Z" }, { "insertId": "-fizg8ke3d5ly", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742205900390-63086ebd18036-e00520e6-947a413b", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "ed6db565-f2f3-3b1e-adad-a3a76947481c" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T10:05:00.825580Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "ed6db565-f2f3-3b1e-adad-a3a76947481c", "id": "1217808525006884131", "insertTime": "2025-03-17T03:05:00.771-07:00", "name": "operation-1742205900390-63086ebd18036-e00520e6-947a413b", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900390-63086ebd18036-e00520e6-947a413b", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1217808525006884131", "startTime": "2025-03-17T03:05:00.793-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T10:05:01.463946941Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T10:05:00.356300Z" }, { "insertId": "dx29k5dtvj4", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742205602178-63086da0b23f9-04d6ca06-32a0c58c", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "46385011-4e63-3d0f-b42c-96ccf500eea1" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "46385011-4e63-3d0f-b42c-96ccf500eea1", "id": "370003438433094732", "insertTime": "2025-03-17T03:00:03.836-07:00", "name": "operation-1742205602178-63086da0b23f9-04d6ca06-32a0c58c", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205602178-63086da0b23f9-04d6ca06-32a0c58c", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/370003438433094732", "startTime": "2025-03-17T03:00:03.910-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T10:00:04.123802245Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T10:00:03.969698Z" }, { "insertId": "dx29k5dtvj2", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742205602184-63086da0b3ccd-d2cc1389-d7306187", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "2363c50d-5c8e-3e29-b4ed-92b75b164c00" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "2363c50d-5c8e-3e29-b4ed-92b75b164c00", "id": "7924389576774929484", "insertTime": "2025-03-17T03:00:03.795-07:00", "name": "operation-1742205602184-63086da0b3ccd-d2cc1389-d7306187", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205602184-63086da0b3ccd-d2cc1389-d7306187", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/7924389576774929484", "startTime": "2025-03-17T03:00:03.831-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T10:00:04.123802245Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T10:00:03.888399Z" }, { "insertId": "-yelho5dt87a", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742205601633-63086da02d645-e9c8679f-77cbe1c7", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "b74b1360-33b4-3d04-b5b6-b3879887c1a8" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "b74b1360-33b4-3d04-b5b6-b3879887c1a8", "endTime": "2025-03-17T03:00:03.190-07:00", "id": "456590589005810764", "insertTime": "2025-03-17T03:00:03.175-07:00", "name": "operation-1742205601633-63086da02d645-e9c8679f-77cbe1c7", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205601633-63086da02d645-e9c8679f-77cbe1c7", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/456590589005810764", "startTime": "2025-03-17T03:00:03.190-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T10:00:04.196590534Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T10:00:03.235407Z" }, { "insertId": "-f8kp2edf5wu", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T09:05:51.622350160Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T09:05:51.466494Z" }, { "insertId": "mr9rd7dh7a4", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742202300494-63086153f7274-6fd35b80-033034f7", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T09:05:47.861013648Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T09:05:47.735468Z" }, { "insertId": "-7px7v0dn7ao", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "d7810d6a-995d-3376-a953-8ae106dcda9b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d7810d6a-995d-3376-a953-8ae106dcda9b", "id": "8251782474048887635", "insertTime": "2025-03-17T02:05:00.908-07:00", "name": "operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8251782474048887635", "startTime": "2025-03-17T02:05:00.940-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T09:05:01.438553092Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T09:05:00.991397Z" }, { "insertId": "-7px7v0dn7am", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742202300494-63086153f7274-6fd35b80-033034f7", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "04e95874-78a5-3493-ba1b-bd51f83091d1" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "04e95874-78a5-3493-ba1b-bd51f83091d1", "id": "3752343553296718675", "insertTime": "2025-03-17T02:05:00.892-07:00", "name": "operation-1742202300494-63086153f7274-6fd35b80-033034f7", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300494-63086153f7274-6fd35b80-033034f7", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3752343553296718675", "startTime": "2025-03-17T02:05:00.926-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T09:05:01.438553092Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T09:05:00.980937Z" }, { "insertId": "979rzwe3eihg", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "d7810d6a-995d-3376-a953-8ae106dcda9b" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T09:05:00.972280Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "d7810d6a-995d-3376-a953-8ae106dcda9b", "id": "8251782474048887635", "insertTime": "2025-03-17T02:05:00.908-07:00", "name": "operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300474-63086153f2443-4f1ceda5-09d288e5", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8251782474048887635", "startTime": "2025-03-17T02:05:00.940-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T09:05:01.705344598Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T09:05:00.438426Z" }, { "insertId": "29ypole2urd6", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742202300494-63086153f7274-6fd35b80-033034f7", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "04e95874-78a5-3493-ba1b-bd51f83091d1" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T09:05:00.964788Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "04e95874-78a5-3493-ba1b-bd51f83091d1", "id": "3752343553296718675", "insertTime": "2025-03-17T02:05:00.892-07:00", "name": "operation-1742202300494-63086153f7274-6fd35b80-033034f7", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300494-63086153f7274-6fd35b80-033034f7", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3752343553296718675", "startTime": "2025-03-17T02:05:00.926-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T09:05:01.802759428Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T09:05:00.427973Z" }, { "insertId": "-7px7v0dn6j0", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742202001517-63086036d6a8a-ae23f2dc-ad3c9255", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "7271611d-ccfc-3a46-a8ff-951ce90a3fcf" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "7271611d-ccfc-3a46-a8ff-951ce90a3fcf", "id": "9021552441555573372", "insertTime": "2025-03-17T02:00:03.205-07:00", "name": "operation-1742202001517-63086036d6a8a-ae23f2dc-ad3c9255", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202001517-63086036d6a8a-ae23f2dc-ad3c9255", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/9021552441555573372", "startTime": "2025-03-17T02:00:03.235-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T09:00:03.345254116Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T09:00:03.292155Z" }, { "insertId": "h8y58ydu2rm", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742202001502-63086036d32e5-594f8e13-ecb1fd44", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "6613554b-979a-34ae-b7cb-c99fd92706b6" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "6613554b-979a-34ae-b7cb-c99fd92706b6", "endTime": "2025-03-17T02:00:03.136-07:00", "id": "8758086571954690684", "insertTime": "2025-03-17T02:00:03.113-07:00", "name": "operation-1742202001502-63086036d32e5-594f8e13-ecb1fd44", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202001502-63086036d32e5-594f8e13-ecb1fd44", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8758086571954690684", "startTime": "2025-03-17T02:00:03.136-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T09:00:03.589518263Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T09:00:03.186629Z" }, { "insertId": "-7px7v0dn6iw", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742202001504-63086036d379f-50fbbe80-6012875f", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "36e1d41e-6bbb-3ed3-aa10-0b34de17b35c" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "36e1d41e-6bbb-3ed3-aa10-0b34de17b35c", "id": "6360484137672530556", "insertTime": "2025-03-17T02:00:03.103-07:00", "name": "operation-1742202001504-63086036d379f-50fbbe80-6012875f", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202001504-63086036d379f-50fbbe80-6012875f", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6360484137672530556", "startTime": "2025-03-17T02:00:03.124-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T09:00:03.345254116Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T09:00:03.176145Z" }, { "insertId": "bzc6tedkg42", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T08:05:51.676085160Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T08:05:50.911617Z" }, { "insertId": "-yohl49dtfz8", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742198700434-630853eaae478-17646b34-881b1b8d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T08:05:47.567456782Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T08:05:46.851980Z" }, { "insertId": "-yelho5dsfwq", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "328315d5-6524-3192-82b7-1f3dbc08f284" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "328315d5-6524-3192-82b7-1f3dbc08f284", "id": "1611150172664523075", "insertTime": "2025-03-17T01:05:00.940-07:00", "name": "operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1611150172664523075", "startTime": "2025-03-17T01:05:00.967-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T08:05:01.338826662Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T08:05:01.022027Z" }, { "insertId": "-yelho5dsfwo", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742198700434-630853eaae478-17646b34-881b1b8d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "fcb006d0-173e-36b8-92ea-bd1c1dcd7850" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "fcb006d0-173e-36b8-92ea-bd1c1dcd7850", "id": "8855413064912759107", "insertTime": "2025-03-17T01:05:00.926-07:00", "name": "operation-1742198700434-630853eaae478-17646b34-881b1b8d", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700434-630853eaae478-17646b34-881b1b8d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8855413064912759107", "startTime": "2025-03-17T01:05:00.957-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T08:05:01.338826662Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T08:05:01.010954Z" }, { "insertId": "-kqxo60djd1c", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "328315d5-6524-3192-82b7-1f3dbc08f284" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T08:05:01.005093Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "328315d5-6524-3192-82b7-1f3dbc08f284", "id": "1611150172664523075", "insertTime": "2025-03-17T01:05:00.940-07:00", "name": "operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1611150172664523075", "startTime": "2025-03-17T01:05:00.967-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T08:05:01.440670312Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T08:05:00.384315Z" }, { "insertId": "-ai5awve4be0s", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742198700434-630853eaae478-17646b34-881b1b8d", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "fcb006d0-173e-36b8-92ea-bd1c1dcd7850" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T08:05:00.997983Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "fcb006d0-173e-36b8-92ea-bd1c1dcd7850", "id": "8855413064912759107", "insertTime": "2025-03-17T01:05:00.926-07:00", "name": "operation-1742198700434-630853eaae478-17646b34-881b1b8d", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700434-630853eaae478-17646b34-881b1b8d", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8855413064912759107", "startTime": "2025-03-17T01:05:00.957-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T08:05:01.604856546Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T08:05:00.380612Z" }, { "insertId": "-omopezdn59u", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742198401772-630852cddaab1-3b988d75-67c8479a", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "ade8fe00-98dc-3c83-8d61-d9fd453b1469" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "ade8fe00-98dc-3c83-8d61-d9fd453b1469", "id": "4266489488390908012", "insertTime": "2025-03-17T01:00:03.270-07:00", "name": "operation-1742198401772-630852cddaab1-3b988d75-67c8479a", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198401772-630852cddaab1-3b988d75-67c8479a", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4266489488390908012", "startTime": "2025-03-17T01:00:03.295-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T08:00:03.630892708Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T08:00:03.344851Z" }, { "insertId": "-omopezdn59s", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742198401654-630852cdbe069-cf002b41-141afc64", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "a2a78cab-19cf-3f7f-b87f-66b2a2e51097" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "a2a78cab-19cf-3f7f-b87f-66b2a2e51097", "id": "898084506588309612", "insertTime": "2025-03-17T01:00:03.220-07:00", "name": "operation-1742198401654-630852cdbe069-cf002b41-141afc64", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198401654-630852cdbe069-cf002b41-141afc64", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/898084506588309612", "startTime": "2025-03-17T01:00:03.243-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T08:00:03.630892708Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T08:00:03.296573Z" }, { "insertId": "1z3k6xdrhfc", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742198401467-630852cd90442-52109b10-07b423f6", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "dd3cf273-c4ce-3357-abc4-89a1c3713ad4" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "dd3cf273-c4ce-3357-abc4-89a1c3713ad4", "endTime": "2025-03-17T01:00:03.005-07:00", "id": "8870525607423404141", "insertTime": "2025-03-17T01:00:02.983-07:00", "name": "operation-1742198401467-630852cd90442-52109b10-07b423f6", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198401467-630852cd90442-52109b10-07b423f6", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8870525607423404141", "startTime": "2025-03-17T01:00:03.005-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T08:00:03.965126898Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T08:00:03.043570Z" }, { "insertId": "-fh0zncdddsu", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T07:05:56.190651100Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T07:05:55.534044Z" }, { "insertId": "lnh08fdj2wu", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T07:05:50.547487373Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T07:05:50.497213Z" }, { "insertId": "-59kb7jdrd06", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "6dff77c0-13f6-318b-84b9-5151d30343cc" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "6dff77c0-13f6-318b-84b9-5151d30343cc", "id": "3740911845003392883", "insertTime": "2025-03-17T00:05:00.944-07:00", "name": "operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3740911845003392883", "startTime": "2025-03-17T00:05:00.966-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T07:05:01.482207061Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T07:05:01.013631Z" }, { "insertId": "-59kb7jdrd02", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "a24d4b9b-1407-33a7-99fa-7304fe264401" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "a24d4b9b-1407-33a7-99fa-7304fe264401", "id": "3089115558146897779", "insertTime": "2025-03-17T00:05:00.877-07:00", "name": "operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3089115558146897779", "startTime": "2025-03-17T00:05:00.899-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T07:05:01.482207061Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T07:05:00.951013Z" }, { "insertId": "ezh0yse1x5m6", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "a24d4b9b-1407-33a7-99fa-7304fe264401" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T07:05:00.933363Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "a24d4b9b-1407-33a7-99fa-7304fe264401", "id": "3089115558146897779", "insertTime": "2025-03-17T00:05:00.877-07:00", "name": "operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100456-63084681796c2-78e9a7bc-e316df2c", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3089115558146897779", "startTime": "2025-03-17T00:05:00.899-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T07:05:01.115581184Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T07:05:00.426801Z" }, { "insertId": "-k6t0ene2xnam", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "6dff77c0-13f6-318b-84b9-5151d30343cc" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T07:05:00.996883Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "6dff77c0-13f6-318b-84b9-5151d30343cc", "id": "3740911845003392883", "insertTime": "2025-03-17T00:05:00.944-07:00", "name": "operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3740911845003392883", "startTime": "2025-03-17T00:05:00.966-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T07:05:01.910445883Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T07:05:00.420933Z" }, { "insertId": "-59kb7jdrbia", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742194802004-63084564d93b4-f0f0c00c-ed534c14", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "f5b1ea71-de9a-355e-b755-113f6d8f649b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "f5b1ea71-de9a-355e-b755-113f6d8f649b", "endTime": "2025-03-17T00:00:03.448-07:00", "id": "5612317855664731804", "insertTime": "2025-03-17T00:00:03.439-07:00", "name": "operation-1742194802004-63084564d93b4-f0f0c00c-ed534c14", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742194802004-63084564d93b4-f0f0c00c-ed534c14", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5612317855664731804", "startTime": "2025-03-17T00:00:03.448-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T07:00:04.336920653Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T07:00:03.481522Z" }, { "insertId": "-omopezdmu2c", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742194801672-630845648824f-c06174f0-98071a61", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "f7d0a9a4-1f6f-3e99-b476-5f29cacdde8a" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "f7d0a9a4-1f6f-3e99-b476-5f29cacdde8a", "id": "3321539500076332700", "insertTime": "2025-03-17T00:00:03.278-07:00", "name": "operation-1742194801672-630845648824f-c06174f0-98071a61", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742194801672-630845648824f-c06174f0-98071a61", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3321539500076332700", "startTime": "2025-03-17T00:00:03.302-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T07:00:04.005604813Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T07:00:03.358007Z" }, { "insertId": "-omopezdmu2a", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742194801638-630845647fdf9-b74913a8-47db26e5", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "ef0738cc-2e68-36cc-b2d2-3f7ab4d5d00f" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "ef0738cc-2e68-36cc-b2d2-3f7ab4d5d00f", "id": "2096134448049976988", "insertTime": "2025-03-17T00:00:03.167-07:00", "name": "operation-1742194801638-630845647fdf9-b74913a8-47db26e5", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742194801638-630845647fdf9-b74913a8-47db26e5", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2096134448049976988", "startTime": "2025-03-17T00:00:03.194-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T07:00:04.005604813Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T07:00:03.258747Z" }, { "insertId": "-3uz2hcdg3x8", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T06:05:50.985076330Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T06:05:50.409603Z" }, { "insertId": "-hha3rrdihgq", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T06:05:01.948139051Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T06:05:01.633995Z" }, { "insertId": "-3kpfhrdp2tw", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "2f7c2bdd-17a5-37b0-a054-384123557e3c" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "2f7c2bdd-17a5-37b0-a054-384123557e3c", "id": "6934820581971461475", "insertTime": "2025-03-16T23:05:00.874-07:00", "name": "operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6934820581971461475", "startTime": "2025-03-16T23:05:00.897-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T06:05:01.808329749Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T06:05:01.032018Z" }, { "insertId": "-3kpfhrdp2tu", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "228c3a95-7e97-39d2-a42b-72b0adc5d0ce" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "228c3a95-7e97-39d2-a42b-72b0adc5d0ce", "id": "6961858272978142563", "insertTime": "2025-03-16T23:05:00.749-07:00", "name": "operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6961858272978142563", "startTime": "2025-03-16T23:05:00.765-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T06:05:01.808329749Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T06:05:00.818479Z" }, { "insertId": "-eedetce3axe8", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "228c3a95-7e97-39d2-a42b-72b0adc5d0ce" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T06:05:00.801658Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "228c3a95-7e97-39d2-a42b-72b0adc5d0ce", "id": "6961858272978142563", "insertTime": "2025-03-16T23:05:00.749-07:00", "name": "operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6961858272978142563", "startTime": "2025-03-16T23:05:00.765-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T06:05:01.780529218Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T06:05:00.392670Z" }, { "insertId": "-jxmvt6e4u4m8", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "2f7c2bdd-17a5-37b0-a054-384123557e3c" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T06:05:00.950374Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "2f7c2bdd-17a5-37b0-a054-384123557e3c", "id": "6934820581971461475", "insertTime": "2025-03-16T23:05:00.874-07:00", "name": "operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500437-630839183a77a-5f37e983-2f0b3d30", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6934820581971461475", "startTime": "2025-03-16T23:05:00.897-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T06:05:01.215206553Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T06:05:00.391729Z" }, { "insertId": "-ugcy3ke3z2p0", "labels": { "compute.googleapis.com/root_trigger_id": "2ebc4490-e78d-46c2-8a7d-2bb8b1f51e05" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "systemevent-1742191214262-630838074f9b5-9fa4f9d5-b984944c", "last": true, "producer": "compute.instances.preempted" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "compute.instances.preempted", "request": { "@type": "type.googleapis.com/compute.instances.preempted" }, "resourceName": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com", "status": { "message": "Instance was preempted." } }, "receiveTimestamp": "2025-03-17T06:00:15.268708125Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T06:00:14.413235Z" }, { "insertId": "-yelho5drd66", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "first": true, "id": "operation-1742191201500-630837fb23cd2-62b7fbcf-8c982415", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "be3d872a-d079-354e-b94c-1385b2f4759d" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "be3d872a-d079-354e-b94c-1385b2f4759d", "endTime": "2025-03-16T23:00:03.098-07:00", "id": "1577044047820358796", "insertTime": "2025-03-16T23:00:03.082-07:00", "name": "operation-1742191201500-630837fb23cd2-62b7fbcf-8c982415", "operationType": "start", "progress": "100", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191201500-630837fb23cd2-62b7fbcf-8c982415", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1577044047820358796", "startTime": "2025-03-16T23:00:03.098-07:00", "status": "DONE", "targetId": "4632680981323459323", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T06:00:03.811045521Z", "resource": { "labels": { "instance_id": "4632680981323459323", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T06:00:03.146410Z" }, { "insertId": "1z3k6xdqnuw", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742191200597-630837fa4765c-05879ae4-850faba3", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "e7e2a588-ff5b-341e-8c6f-f369660e3a6b" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "e7e2a588-ff5b-341e-8c6f-f369660e3a6b", "id": "156629282779169933", "insertTime": "2025-03-16T23:00:02.195-07:00", "name": "operation-1742191200597-630837fa4765c-05879ae4-850faba3", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191200597-630837fa4765c-05879ae4-850faba3", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/156629282779169933", "startTime": "2025-03-16T23:00:02.225-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T06:00:02.879977208Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T06:00:02.287016Z" }, { "insertId": "1z3k6xdqnus", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742191200552-630837fa3c535-8f9f5f56-118677c0", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "4285db01-a162-3fdc-98af-00926129505e" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "4285db01-a162-3fdc-98af-00926129505e", "id": "2873388348825273485", "insertTime": "2025-03-16T23:00:02.048-07:00", "name": "operation-1742191200552-630837fa3c535-8f9f5f56-118677c0", "operationType": "start", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191200552-630837fa3c535-8f9f5f56-118677c0", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2873388348825273485", "startTime": "2025-03-16T23:00:02.076-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T06:00:02.879977208Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T06:00:02.114280Z" }, { "insertId": "le2sshdbhzc", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T05:05:51.242382847Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T05:05:50.753174Z" }, { "insertId": "-bxihpedgahe", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop" }, "requestMetadata": {}, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T05:05:49.500218382Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T05:05:48.640735Z" }, { "insertId": "1z3k6xdqcsy", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "9a039a9e-aa4a-3a56-b55f-b3236cc35f77" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "9a039a9e-aa4a-3a56-b55f-b3236cc35f77", "id": "3680600277850395539", "insertTime": "2025-03-16T22:05:00.866-07:00", "name": "operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3680600277850395539", "startTime": "2025-03-16T22:05:00.892-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T05:05:01.448768073Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T05:05:00.940264Z" }, { "insertId": "1z3k6xdqcsw", "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event", "operation": { "id": "operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "testuser@example.com" }, "methodName": "ScheduledVMs", "request": { "requestId": "1f625775-22aa-3da9-a4f9-078a3d9ac5ca" }, "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "1f625775-22aa-3da9-a4f9-078a3d9ac5ca", "id": "1997219379833082771", "insertTime": "2025-03-16T22:05:00.835-07:00", "name": "operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1997219379833082771", "startTime": "2025-03-16T22:05:00.859-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" } }, "receiveTimestamp": "2025-03-17T05:05:01.448768073Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "INFO", "timestamp": "2025-03-17T05:05:00.903791Z" }, { "insertId": "-jyi9s7e4kdds", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "1f625775-22aa-3da9-a4f9-078a3d9ac5ca" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T05:05:00.885926Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/spot-vm-termination", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "1f625775-22aa-3da9-a4f9-078a3d9ac5ca", "id": "1997219379833082771", "insertTime": "2025-03-16T22:05:00.835-07:00", "name": "operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900450-63082baf0386c-d658e68b-bbceea79", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1997219379833082771", "startTime": "2025-03-16T22:05:00.859-07:00", "status": "RUNNING", "targetId": "2093000891450668968", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T05:05:01.727482429Z", "resource": { "labels": { "instance_id": "2093000891450668968", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T05:05:00.420633Z" }, { "insertId": "-q1k7dqe36zgc", "labels": { "compute.googleapis.com/root_trigger_id": "fde31b4c-de43-4879-9a41-dd8643efd707" }, "logName": "projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "first": true, "id": "operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-123456012345@compute-system.iam.gserviceaccount.com" }, "authorizationInfo": [ { "granted": true, "permission": "compute.instances.stop", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "resourceAttributes": { "name": "projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.stop", "request": { "@type": "type.googleapis.com/compute.instances.stop", "requestId": "9a039a9e-aa4a-3a56-b55f-b3236cc35f77" }, "requestMetadata": { "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-17T05:05:00.930441Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm", "response": { "@type": "type.googleapis.com/operation", "clientOperationId": "9a039a9e-aa4a-3a56-b55f-b3236cc35f77", "id": "3680600277850395539", "insertTime": "2025-03-16T22:05:00.866-07:00", "name": "operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "operationType": "stop", "progress": "0", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3680600277850395539", "startTime": "2025-03-16T22:05:00.892-07:00", "status": "RUNNING", "targetId": "3670725117245009111", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm", "user": "service-123456012345@compute-system.iam.gserviceaccount.com", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c" }, "serviceName": "compute.googleapis.com" }, "receiveTimestamp": "2025-03-17T05:05:01.169307440Z", "resource": { "labels": { "instance_id": "3670725117245009111", "project_id": "gcpdiag-gce5-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "NOTICE", "timestamp": "2025-03-17T05:05:00.413179Z" } ], "nextPageToken": "esQGCr8GAfQucPhs5YYIgtzUM5uQL7hVQJn7Zos9TrBtAKiunoNiDZHQgASl4BzdIYbSdZIiioAu_J1yaEly4jLCKESyy19nry0DKBJAJRKMIVsNlAw1uo9g7MMvlKTbC3BaPc_-MjDheOEroVS9HS6v16t9n9Pn81EWZiny02-C3LqBggY7Im5FsJr50NX_yw_j_3OEYMP5wz0k-rdkh9NNwHfAHHr1ysFV5PhzfgqlGKp39UnzIAOZlkzPmPBuZDGdl27PR00UCXfFJlh0Qrlfv1z06jyp2TU5llOsdp7WnkKgkCaP3YGVUO8iU7IkpNymhtXI2f90cd3RdytWi9lhRdi2axnimJm1kSoii55oxeuplNZoz9n-04oA-XrGMZrPsAc46kO67YJLcVFuJD0ZQrWd32BtpJ28fF7avhbxPDWp1hkQ3y-qR-kXKY3NbwxuTc7pedkwpKchZw6pd-2tN3eyLdUpnJ2w2IB4hxcVALWOoxAy4dHPAIOnVubZYbd4satLFr8O3bK_POsII9EoACvd12Zm0Nnmp3C3pipmZL54nnQdeYkdJP8W4tgQTc-pBSpQ2plFFUL08MzP068_M8AtDC4GGBjzq6l0kr9a-bJh2-C67UhdrlPPI8jc4zUw9l_7GtBvedoxwbiVnBDbJaL4OTC8v2C4tNzwEJy1Uf101ke7zyxwrzmoM5G0FidhB1-KOI1_UaVKOu5e3_BbCEHqRTUoom44RsdF5SQRya4er8OU6Q4_4NEjABsDIqJ0bYKM5g2vFGEKscMlYKnYl09fp6totU0g4iwGf4L1U1XiGSqz1UKH_YcyD--ouc8dj-D20P4QMt7bcMQJtO3LVigJUeeiuq3NX7IEKxiBNR0Py3H4khEnhr93QlOXhozyAmjfSQbOEBBU_20x58UP-fSwz4CQ3AOYcL5QyUq0g8uJNveX0YI6_LQ0XgX_1wX1945gM_rqy7kWGxRZPJ-I-ogo52EFXP-0L2g4FtmFRU9JkIacB0f0Tf_dJQPFDIvSL6_bUj1vA37fCBGY3midBTDAGOIEKIwNLWOm8UEhYDbPSKiJNcN5UKQRaXUqH7cEkKe5ZJq2WjsiyHxTb8fFANhLEAE" } ================================================ FILE: test-data/gce5/json-dumps/project.json ================================================ { "name": "projects/123456012345", "parent": "folders/348077457356", "projectId": "gcpdiag-gce5-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - VM Termination", "createTime": "2025-03-14T01:23:25.611225Z", "updateTime": "2025-03-14T01:23:25.611225Z", "etag": "W/\"3760d729cfab7713\"", "labels": { "gcpdiag": "test", "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/gce5/json-dumps/services.json ================================================ { "services": [ { "name": "projects/123456012345/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/NetworkPathQuotasResource", "displayName": "Network Path Quotas Resource", "description": "Network Path Quotas Resource.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "network_path_id", "description": "The network path custom dimension." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded", "compute.googleapis.com/tpus_per_tpu_family" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded", "compute.googleapis.com/quota/wire_groups_per_interconnect/exceeded", "compute.googleapis.com/wire_groups_per_interconnect" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state", "compute.googleapis.com/reservation/internal/unobtainable_slots" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/limit", "compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage", "compute.googleapis.com/quota/wire_groups_per_interconnect/limit", "compute.googleapis.com/quota/wire_groups_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/NetworkPathQuotasResource", "metrics": [ "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/wire_groups_gold_unmetered_bandwidth_gbps" ] }, { "monitoredResource": "compute.googleapis.com/NetworkPathQuotasResource", "metrics": [ "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/usage", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/usage", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/123456012345" }, { "name": "projects/123456012345/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123456012345" }, { "name": "projects/123456012345/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/123456012345" } ] } ================================================ FILE: test-data/gce5/main.tf ================================================ /** * Copyright 2025 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. */ resource "google_project_iam_custom_role" "start_stop" { role_id = "instanceScheduler" title = "Instance Scheduler" description = "Minimum permissions required for Compute Engine System service account to be able to start/stop instances" permissions = ["compute.instances.start", "compute.instances.stop"] project = google_project.project.project_id } resource "google_project_iam_member" "member" { project = google_project.project.project_id role = google_project_iam_custom_role.start_stop.name member = "serviceAccount:service-${google_project.project.number}@compute-system.iam.gserviceaccount.com" } data "google_compute_resource_policy" "hourly_startup" { name = "gce-policy" region = var.region project = google_project.project.project_id } data "google_compute_resource_policy" "hourly_startup_and_stop" { name = "gce-policy-stop-and-start" region = var.region project = google_project.project.project_id } resource "google_compute_resource_policy" "hourly_startup" { count = length(data.google_compute_resource_policy.hourly_startup) == 0 ? 1 : 0 name = "gce-policy" region = var.region description = "Only Start instances" instance_schedule_policy { vm_start_schedule { schedule = "0 * * * *" } time_zone = "US/Central" } project = google_project.project.project_id } resource "google_compute_resource_policy" "hourly_startup_and_stop" { count = length(data.google_compute_resource_policy.hourly_startup_and_stop) == 0 ? 1 : 0 name = "gce-policy-stop-and-start" region = var.region description = "Start and stop instances" instance_schedule_policy { vm_start_schedule { schedule = "0 * * * *" } vm_stop_schedule { schedule = "5 * * * *" } time_zone = "US/Central" } project = google_project.project.project_id } resource "google_compute_instance" "vm_instance" { name = "start-and-stop-vm" machine_type = "f1-micro" zone = var.zone boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { # A default network is created for all GCP projects network = "default" access_config { } } project = google_project.project.project_id resource_policies = [data.google_compute_resource_policy.hourly_startup_and_stop.id] } resource "google_compute_instance" "spot_vm_instance" { name = "spot-vm-termination" machine_type = "f1-micro" zone = var.zone boot_disk { initialize_params { image = "debian-cloud/debian-11" } } scheduling { preemptible = true automatic_restart = false provisioning_model = "SPOT" instance_termination_action = "STOP" } network_interface { # A default network is created for all GCP projects network = "default" access_config { } } project = google_project.project.project_id resource_policies = [data.google_compute_resource_policy.hourly_startup_and_stop.id] } resource "google_compute_instance" "shielded_vm_integrity_failure" { name = "shielded-vm-integrity-failure" machine_type = "f1-micro" zone = var.zone boot_disk { initialize_params { image = "ubuntu-os-cloud/ubuntu-2204-lts" } } network_interface { # A default network is created for all GCP projects network = "default" access_config { } } project = google_project.project.project_id resource_policies = [data.google_compute_resource_policy.hourly_startup.id] shielded_instance_config { enable_secure_boot = true enable_vtpm = true enable_integrity_monitoring = true } metadata_startup_script = <<-EOF #! /bin/bash apt-get upgrade -y update-grub reboot EOF } resource "google_compute_instance_template" "apache_template" { name = "apache-instance-template" machine_type = "e2-micro" can_ip_forward = false tags = ["apache-server"] disk { auto_delete = true boot = true source_image = "debian-cloud/debian-11" } network_interface { network = "default" access_config {} } project = google_project.project.project_id } resource "google_compute_health_check" "apache_health_check" { name = "apache-health-check" check_interval_sec = 10 timeout_sec = 5 healthy_threshold = 2 unhealthy_threshold = 2 http_health_check { port = 80 } project = google_project.project.project_id } resource "google_compute_instance_group_manager" "apache_mig" { name = "apache-mig-timeout" base_instance_name = "apache-instance" version { instance_template = google_compute_instance_template.apache_template.id } target_size = 2 auto_healing_policies { health_check = google_compute_health_check.apache_health_check.id initial_delay_sec = 300 } project = google_project.project.project_id zone = var.zone } ================================================ FILE: test-data/gce5/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 numeric = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - VM Termination" project_id = var.project_id != "" ? var.project_id : "gcpdiag-gce5-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_compute_project_metadata_item" "serial_logging" { project = google_project.project.project_id depends_on = [google_project_service.compute] key = "serial-port-logging-enable" value = "true" } data "google_compute_default_service_account" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] } data "google_compute_image" "debian" { family = "debian-11" project = "debian-cloud" } data "google_compute_image" "windows" { family = "windows-2019-core" project = "windows-cloud" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gce5/variables.tf ================================================ variable "project_id" { //default = "use-an-existing-test-project" } variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } variable "region" { type = string description = "The GCP region to create resources in." default = "us-central1" } variable "zone" { type = string description = "The GCP zone to create resources in." default = "us-central1-c" } ================================================ FILE: test-data/gce6/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner ZONE_1 = us-central1-c FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 1234560123456 FAKE_ORG_ID = 11112222 COMPUTE_INSTANCES_MAXRESULTS=3 INSTANCE_NAME_GCE1=existing-instance INSTANCE_NAME_GCE2=non-existing-gpu-instance START_TIMESTAMP = 2025-03-28T00:00:00+00:00 END_TIMESTAMP = 2025-03-29T00:00:00+00:00 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ -e "s/[a-zA-Z0-9._%+-]+@google.com/$(FAKE_USER_ACCOUNT)/" all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-disks-$(ZONE_1).json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/global-operations.json \ json-dumps/logging-entries-1.json \ json-dumps/compute-migs-aggregated.json \ json-dumps/healthChecks.json \ json-dumps/compute-instances-aggregated.json include ../Makefile.inc TERMINATION_OPERATION_FILTER="%28operationType%3D%22compute.instances.repair.recreateInstance%22%29%20OR%20%28operationType%3D%22compute.instances.hostError%22%29%20OR%20%28operationType%3D%22compute.instances.guestTerminate%22%29%20OR%20%28operationType%3D%22compute.instances.preempted%22%29%20OR%20%28operationType%3D%22compute.instances.terminateOnHostMaintenance%22%29%20OR%20%28operationType%3D%22stop%22%29%20OR%20%28operationType%3D%22suspend%22%29%20OR%20%28operationType%3D%22reset%22%29%20OR%20%28operationType%3D%22compute.instanceGroupManagers.resizeAdvanced%22%29%20OR%20%28operationType%3D%22compute.autoscalers.resize%22%29%0A" json-dumps/global-operations.json: $(CURL) -fsS \ "https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/operations?filter=$(TERMINATION_OPERATION_FILTER)" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # protoPayload.methodName=~\"compute.instances.(hostError|guestTerminate|preempted|terminateOnHostMaintenance|stop|suspend|repair.recreateInstance|ScheduledVMs)\" OR define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "pageSize": 200, "filter": "resource.type=\"gce_instance\" AND log_id(\"cloudaudit.googleapis.com/activity\") AND (protoPayload.resourceName=\"projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$(INSTANCE_NAME_GCE1)\" OR protoPayload.resourceName=\"projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$(INSTANCE_NAME_GCE2)\") AND protoPayload.methodName=~\"compute.instances.insert\" AND severity=\"ERROR\" AND (protoPayload.status.message=\"QUOTA_EXCEEDED\" OR protoPayload.response.error.errors.reason=\"alreadyExists\" OR protoPayload.response.error.message=~\"Required '.*' permission for '.*'\")" } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/healthChecks.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gce6/json-dumps/compute-disks-europe-west2-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce6-aaaa/zones/europe-west2-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/europe-west2-b/disks" } ================================================ FILE: test-data/gce6/json-dumps/compute-disks-us-central1-c.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks", "items": [ { "kind": "compute#disk", "id": "3842325145369422477", "creationTimestamp": "2025-03-27T20:15:46.925-07:00", "name": "apache-instance-7b70", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-7b70", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311", "sourceImageId": "6139874332219611556", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-27T20:16:43.101-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "1899967056662214939", "creationTimestamp": "2025-03-27T19:22:44.425-07:00", "name": "apache-instance-bnb7", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-bnb7", "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311", "sourceImageId": "6139874332219611556", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-27T19:22:45.277-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-bnb7" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "3853522013536123851" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "8346470418270107629", "creationTimestamp": "2025-03-27T19:27:15.942-07:00", "name": "existing-instance", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance", "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2204-jammy-v20250312", "sourceImageId": "6817663366014267458", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "IDPF" }, { "type": "TDX_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-27T19:27:17.008-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "5511465778777431107" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "9013476464221990385", "creationTimestamp": "2025-03-27T20:10:22.326-07:00", "name": "gpu-instance-creator", "sizeGb": "10", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/gpu-instance-creator", "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2204-jammy-v20250312", "sourceImageId": "6817663366014267458", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "IDPF" }, { "type": "TDX_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2025-03-27T20:10:23.041-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/gpu-instance-creator" ], "labelFingerprint": "42WmSpB8rSM=", "licenseCodes": [ "5511465778777431107" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true, "architecture": "X86_64" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks" } ================================================ FILE: test-data/gce6/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "4890289301508307417", "creationTimestamp": "2025-03-27T19:19:34.782-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "7339912822061251033", "creationTimestamp": "2025-03-27T19:19:34.648-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "4175891559915174361", "creationTimestamp": "2025-03-27T19:19:34.580-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "3147982427147450841", "creationTimestamp": "2025-03-27T19:19:34.715-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/firewalls/default-allow-rdp" } ], "firewallPolicys": [ { "name": "902824820698", "type": "HIERARCHY", "shortName": "default-firewall-policy", "displayName": "default-firewall-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 0, "match": { "srcIpRanges": [ "34.168.226.0/26", "34.102.114.64/26", "34.16.224.64/26", "34.48.81.64/26", "34.168.146.160/27", "34.16.224.160/27", "34.82.66.0/24", "34.82.90.0/24", "34.82.98.0/24", "34.82.160.0/24", "34.82.166.128/25" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 1, "match": { "destIpRanges": [ "34.83.160.25/32", "34.125.160.60/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 600, "match": { "srcIpRanges": [ "35.235.240.0/20" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "22", "3389", "5900-5901" ] } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 601, "match": { "srcIpRanges": [ "35.191.0.0/16", "130.211.0.0/22", "209.85.152.0/22", "209.85.204.0/22", "169.254.169.254", "108.170.220.0/23" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 602, "match": { "srcIpRanges": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10", "240.0.0.0/4" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 603, "match": { "srcIpRanges": [ "35.199.192.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "53", "80", "443" ] }, { "ipProtocol": "udp", "ports": [ "53" ] } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 604, "match": { "srcIpRanges": [ "107.178.230.64/26", "35.199.224.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "667" ] }, { "ipProtocol": "udp", "ports": [ "665-666" ] }, { "ipProtocol": "icmp" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 700, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "deny", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483645, "match": { "srcIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false } ] } ] } ================================================ FILE: test-data/gce6/json-dumps/compute-instances-aggregated.json ================================================ { "kind": "compute#instanceAggregatedList", "id": "projects/gcpdiag-gce6-aaaa/aggregated/instances", "items": { "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "instances": [ { "kind": "compute#instance", "id": "6199621613681096987", "creationTimestamp": "2025-03-27T19:22:44.707-07:00", "name": "apache-instance-7b70", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.4", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "104.198.226.122", "networkTier": "PREMIUM" } ], "fingerprint": "J07dpzzjjDU=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-7b70", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "c8WcYqzkGbU=", "items": [ { "key": "instance-template", "value": "projects/1234560123456/global/instanceTemplates/apache-instance-template" }, { "key": "created-by", "value": "projects/1234560123456/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "i-nouvmUFmw=", "lastStartTimestamp": "2025-03-27T20:16:56.742-07:00", "lastStopTimestamp": "2025-03-27T20:16:38.411-07:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "8213709800874948891", "creationTimestamp": "2025-03-27T19:22:44.414-07:00", "name": "apache-instance-bnb7", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.3", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "34.66.230.36", "networkTier": "PREMIUM" } ], "fingerprint": "XgaQmfsmLK4=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-bnb7", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "c8WcYqzkGbU=", "items": [ { "key": "instance-template", "value": "projects/1234560123456/global/instanceTemplates/apache-instance-template" }, { "key": "created-by", "value": "projects/1234560123456/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-bnb7", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "25I3W_Ws1Wk=", "lastStartTimestamp": "2025-03-27T19:23:04.083-07:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "4912196469396322285", "creationTimestamp": "2025-03-27T19:27:15.933-07:00", "name": "existing-instance", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/f1-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.5", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "35.184.107.186", "networkTier": "PREMIUM" } ], "fingerprint": "uIgqJezw-ck=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "IDPF" }, { "type": "TDX_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "shieldedInstanceInitialState": { "dbxs": [ { "content": "2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndKvSt9o7kmKqTR9N1ZlpzCCDPUCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggsIMIIFGDCCBACgAwIBAgITMwAAABNryScg3e1ZiAAAAAAAEzANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMB4XDTE2MDEwNjE4MzQxNVoXDTE3MDQwNjE4MzQxNVowgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIxMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5kb3dzIFVFRkkgS2V5IEV4Y2hhbmdlIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXiCkZgbboTnVZnS1h_JbnlcVst9wtFK8NQjTpeB9wirml3h-fzi8vzki0hSNBD2Dg49lGEvs4egyowmTsLu1TnBUH1f_Hi8Noa7fKXV6F93qYrTPajx5v9L7NedplWnMEPsRvJrQdrysTZwtoXMLYDhc8bQHI5nlJDfgqrB8JiC4A3vL9i19lkQOTq4PZb5AcVcE0wlG7lR_btoQN0g5B4_7pI2S_9mU1PXr1NBSEl48Kl4cJwO2GyvOVvxQ6wUSFTExmCBKrT3LnPU5lZY68n3MpZ5VY4skhrEt2dyf5bZNzkYTTouxC0n37OrMbGGq3tpv7JDD6E_Rfqua3dXYECAwEAAaOCAXIwggFuMBQGA1UdJQQNMAsGCSsGAQQBgjdPATAdBgNVHQ4EFgQUVsJIppTfox2XYoAJRIlnxAUOy2owUQYDVR0RBEowSKRGMEQxDTALBgNVBAsTBE1PUFIxMzAxBgNVBAUTKjMxNjMxKzJjNDU2Y2JjLTA1NDItNDdkOS05OWU1LWQzOWI4MTVjNTczZTAfBgNVHSMEGDAWgBRi_EPNoD6ky2cS0lvZVax7zLaKXzBTBgNVHR8ETDBKMEigRqBEhkJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb3JLRUtDQTIwMTFfMjAxMS0wNi0yNC5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvcktFS0NBMjAxMV8yMDExLTA2LTI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCGjTFLjxsKmyLESJueg0S2Cp8N7MOq2IALsitZHwfYw2jMhY9b9kmKvIdSqVna1moZ6_zJSOS_JY6HkWZr6dDJe9Lj7xiW_e4qPP-KDrCVb02vBnK4EktVjTdJpyMhxBMdXUcq1eGl6518oCkQ27tu0-WZjaWEVsEY_gpQj0ye2UA4HYUYgJlpT24oJRi7TeQ03Nebb-ZrUkbf9uxl0OVV_mg2R5FDwOc3REoRAgv5jnw6X7ha5hlRCl2cLF27TFrFIRQQT4eSM33eDiitXXpYmD13jqKeHhLVXr07QSwqvKe1o1UYokJngP0pTwoDnt2qRuLnZ71jw732dSPN9B57MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9zb2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcNMTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxOi1ir-tVyawJsPq5_tXekQCXQcN2krldCrmsA_sbevsf7njWmMyfBEXTw7jC6c4FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX_IhU-PIIbO_i_hn_-CwO3pzc70U2piOgtDueIl_f4F-dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC_lme4kiwPsjfKL6sNK-0MREgt-tUeSbNzmBInr9TME6xABKnHl-YMTPP8lCS9odkb_uk--3K1xKliq-w7SeT3km2U7zCkqn_xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGveUCEeYd_41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH_MB8GA1UdIwQYMBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBhck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUHMAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhpUGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJnvveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr_pvbNFaE7ILKrkElcJxr6f6QD9eWH-XnlB-yKgyNS_8oKRB799d8pdF2uQXIee0PkJKcwv7fb35sD3vUwUXdNFGWOQ_lXlbYGAWW9AemQrOgd_0IGfJxVsyfhiOkh8um_Vh-1GlnFZF-gfJ_E-UNi4o8h4Tr4869Q-WtLYSTjmorWnxE-lKqgcgtHLvgUt8AEfiaPcFgsOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv_Y0uvDm25-bD4OTNJ4TvlELvKYuQRkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk_FBBQHngLU8Kaid2blLtlml7rw_3hwXQRcKtUxSBH_swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx_fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX-MoUrgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS_njGCAcQwggHAAgEBMIGYMIGAMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSowKAYDVQQDEyFNaWNyb3NvZnQgQ29ycG9yYXRpb24gS0VLIENBIDIwMTECEzMAAAATa8knIN3tWYgAAAAAABMwDQYJYIZIAWUDBAIBBQAwDQYJKoZIhvcNAQEBBQAEggEAhabaxRIJ7nUZ-m__mIG0lII6yD-lxoeI8S83ZKTP8Qx5h5asySWl7420eGhna7zyaVRvVVIhkjOMIfcKr29LgzQpYDqPUc8aYAdGCsZKZGmHCMjEulnq5TDK79GKinzZfb2sAWXEJ68N8oNnY7faBKjHjmmJbAEz8ufE4DijgJ_NBov2xmhTZyNHQ7pB1iCdrEUGObzdJc0Qtmh3CNOEcmH0ukd8sTHE9acBBTFHS8dvreR_sP7dXClZJbJiWAFKvQn3EjCTiYizkZ4I_5xiqjHELht_ORQKN-Hnoqnl4kcRINhZRV7JlgAQDlBJLv3OTjShRO_ZWCdcu7PtwhweiSYWxMFMUJJArKlB-TaTQyiMDgAAAAAAADAAAAC9mvp3WQMyTb1gKPTnj3hLgLTZaTG_DQL9kaYeGdFPHaRS5m2yQIyoYE1BH5Jlnwq9mvp3WQMyTb1gKPTnj3hL9S-Do_qc-9aSD3IoJNvkA0U00luFByRrO5V9rG4bznq9mvp3WQMyTb1gKPTnj3hLxdnYoYbiyC0Jr6oqb38uc4cNPmT3LE4I72d5aoQPD729mvp3WQMyTb1gKPTnj3hLNjOE0U0fLgt4FWJkhMRZrVejGO9DliZgSNBYxaGbv3a9mvp3WQMyTb1gKPTnj3hLGuyEuEtsZaUSIKm-cYGWUjAhDWLW0zxImZxrKVorCga9mvp3WQMyTb1gKPTnj3hL5spo6UFGYprwP2nC-G5r72L5MLN8b7zIeLeN-YwDNOW9mvp3WQMyTb1gKPTnj3hLw6maRg2kZKBXw1htg8719K4ItxA5ee2JMnQt8O1TDGa9mvp3WQMyTb1gKPTnj3hLWPuUGu-VollDs_tfJRCg3z_kTFjJXgq4BIcpdWirl3G9mvp3WQMyTb1gKPTnj3hLU5HDovsRIQKmqh7cJa534Z9dbwnNCe6yUJkiv81Zkuq9mvp3WQMyTb1gKPTnj3hL1iYVfh1qcYvBJKuNony7ZQcsoDp7ayV9vcu9YPZe89G9mvp3WQMyTb1gKPTnj3hL0GPsKPZ-ulPxZC2_ff8zxqMq3YafYBP-Fi4sMvHL5W29mvp3WQMyTb1gKPTnj3hLKcbrUrQ8OqGLLNjtbqhgfO88-uG6_hFldVzy5hSESkS9mvp3WQMyTb1gKPTnj3hLkPvnDmnWM0CNPhcMaDLbstIJ4CclJ9-2PUnSlXKm9Ey9mvp3WQMyTb1gKPTnj3hLB17qBgWJVIugYLL-7RDaPCDH_psXzQJrlOimg7gRUji9mvp3WQMyTb1gKPTnj3hLB-bGqFhkb7HvxnkD_iixFgEfI2f-kua-KzaZnv850J69mvp3WQMyTb1gKPTnj3hLCd9fTlESCOx4uW0S0IEl_bYDho3jn29yknhSWZtlnCa9mvp3WQMyTb1gKPTnj3hLC7tDktqseribMKSsZXUxuXv6qwT5Cw2v5fm265CgY3S9mvp3WQMyTb1gKPTnj3hLDBiTOXYt8zarPdAGpGPfcVo5z7D0kkZcYA5sa9e9iYy9mvp3WQMyTb1gKPTnj3hLDQ2-ym8p7KBvMxp9cuSISxIJf7NImDoqFKDXP08QFA-9mvp3WQMyTb1gKPTnj3hLDcnz-5mWIUjDyoM2MnWNPtT8jQsAB7lbMeZSjyrNW_y9mvp3WQMyTb1gKPTnj3hLEG-s6s_s_U4wO3T0gKCAmOLQgCuTb47HdM4h8xaGaJy9mvp3WQMyTb1gKPTnj3hLF046C1tDxqYHu9NATwU0Hj3POWJnzpT4tQ4uI6nakgy9mvp3WQMyTb1gKPTnj3hLGDM0Kf8FYu2flwM-EUjc7uUtvi5JbVQQtc_WyGTS0Q-9mvp3WQMyTb1gKPTnj3hLK5nPJkIukv42X79Lww0nCGye4Ut6b_9E-y9rkAFpmTm9mvp3WQMyTb1gKPTnj3hLK78sp7jx2R8n7lK2-ypd0Em4WiubUpxdZmIGgQSwVfi9mvp3WQMyTb1gKPTnj3hLLHPZMyW6bcvlidSkxjxbk1VZ75L78FDtUMTiCFIG8X29mvp3WQMyTb1gKPTnj3hLLnCRZ4am93NRH6cYH6sPHXC1V8YyLqkjsqjTuStRr329mvp3WQMyTb1gKPTnj3hLMGYo-lR3MFcoukpGfefQOHpU9WnTdp_OXnXsidKNFZO9mvp3WQMyTb1gKPTnj3hLNgjtuvWtD0GkFKF3er8vr15nAzRnXsOZXmk1gp4MqtK9mvp3WQMyTb1gKPTnj3hLOEHSITaNFYPXXAoC5iFgOU1sTgpnYLb2B7kDYryFWwK9mvp3WQMyTb1gKPTnj3hLP86bn98-8J1UUrD5XuSBwrfwbXQ6c3lxVY5wE2rOPnO9mvp3WQMyTb1gKPTnj3hLQ5fayoOef2MHfLUMkt9DvC0vsqj1nyb8eg5L1Nl1FpK9mvp3WQMyTb1gKPTnj3hLR8wIYSfiBpqG4Dpr7yzUEPjFWm1r2zYhaMMbLOMqWt-9mvp3WQMyTb1gKPTnj3hLUYgx_nOCtRTQPhXGISKLirZUeb0Mv6PFwdD0jZwwYTW9mvp3WQMyTb1gKPTnj3hLWulJ6ohV65PkOdvGW9ouQoUsL99nifoUZzbjw0EPK1y9mvp3WQMyTb1gKPTnj3hLax0TgHjkQYqmjet7s14GYJLPR57rjOTNEufQcsy0L2a9mvp3WQMyTb1gKPTnj3hLbIhUR43VWeKTUbgmwGy4v-8rlK01ODWHctGT-C7RyhG9mvp3WQMyTb1gKPTnj3hLbxQo_3HJ2w7Vrx8ue7_Lq2R8wmXd9bKTzbYm9Qo6eF69mvp3WQMyTb1gKPTnj3hLcfKQb9IiSX5Uo0ZiqySX_MgQIHcP9RNo6ePZv8v9Y3W9mvp3WQMyTb1gKPTnj3hLcms-tlQEajDz-D2bls4D9nDpqAbRcIoDceYtxJ0sI8G9mvp3WQMyTb1gKPTnj3hLcuC9GGfPXZ1WqxWK3zvdvIK_MqjYqh2MXi9t8pQo1ti9mvp3WQMyTb1gKPTnj3hLeCevmTYs-vBxfa3ksb_gQ4rRccFa3cJIt1v4yqRLssW9mvp3WQMyTb1gKPTnj3hLgai5ZbuE04drlCmpVIHMlVMYz6oUEtgIyKM7_TP_8OS9mvp3WQMyTb1gKPTnj3hLgts7zrT2CEPOnZfD0YfNm1lBzT3oEA5YbyvaVjdXX2e9mvp3WQMyTb1gKPTnj3hLiVqXhfYXyh1-1E_BoUcLcfPxIjhi2f-dzDri35IWPa-9mvp3WQMyTb1gKPTnj3hLitZIWfGVtfWNr6qUC2phZ6zWeohuj0aTZBdyIcVZRbm9mvp3WQMyTb1gKPTnj3hLi_Q0tJ4AzPcVAqLNkAhlywHsOz2gPDW-UF_fe9Vj9SG9mvp3WQMyTb1gKPTnj3hLjY6iic_nChwHq3NlyyjuUe3TPPJQbeiI-63WDr-ASBy9mvp3WQMyTb1gKPTnj3hLmZjTY8SRvha9dLoQuU2SkQAWEXNv3KZDo2ZkvA8xWkK9mvp3WQMyTb1gKPTnj3hLnkppFzFhaC5V_ej-9WDriOwf_tyvBAAfZsDK9weytzS9mvp3WQMyTb1gKPTnj3hLprUVHzZV06KvDUcnWXlr5KQgDlSVp9hpdUxISIV0CKe9mvp3WQMyTb1gKPTnj3hLp_MvUI1OsP6tmgh--U7RugrsXeb372_wpiuTvt9dRY29mvp3WQMyTb1gKPTnj3hLrWgm4ZRtJtPq82hciNl9hd47Tcs9DuKugccFYNE8VyC9mvp3WQMyTb1gKPTnj3hLruuuMVEnEnPtlaouZxE57TGphWcwOjMimPg3CanVWqG9mvp3WQMyTb1gKPTnj3hLr-IDCvt9LNoT-fozOgLjT2dRr-wRsBDbzUQf30xAArO9mvp3WQMyTb1gKPTnj3hLtU8e5jZjH61oBY07CTcDGsG5DMsXBio5HMpor9vkDVW9mvp3WQMyTb1gKPTnj3hLuPB42YOiSsQzIWOTiDUUzZMsM68Y591wiEyCNfQnVza9mvp3WQMyTb1gKPTnj3hLuXoIiQWcA1_x1UtttTsRuXZmaNn5VSR8AosoN9egTNm9mvp3WQMyTb1gKPTnj3hLvIemaOgZZkictQjugFGDwZ5qzSTPF3mcoGLS44TaDqe9mvp3WQMyTb1gKPTnj3hLxAm9rEd1rdjbkqoitbcY-4yUoUYsH-mkFrldijOIwvy9mvp3WQMyTb1gKPTnj3hLxhfBqLHuKoEcKLWoG0yD18mLWwwnKB1hAgfr5pLCln-9mvp3WQMyTb1gKPTnj3hLyQ8zZhe45_mDl1QTyZfxC3PrJn_YoQy5472_xmer24u9mvp3WQMyTb1gKPTnj3hLy2uFi0DToJh2WBW1ksFRSklgT6_WCBnaiNenbpd4_ve9mvp3WQMyTb1gKPTnj3hLzjv6vlnWfOisjf1KFvfEPvnCJFE_vGVZV9c1-in1QM69mvp3WQMyTb1gKPTnj3hL2MvrlzX1Zys2fk-WzcdJaWFdFwdK6WxyTULOAhb48_q9mvp3WQMyTb1gKPTnj3hL6Swi6ztWQtZcHsLK8kfSWUc47rt_s4QaRJVvWeKw0fq9mvp3WQMyTb1gKPTnj3hL_d1uPSnqhMd0Pa1KG9vHALX-wbOR-TJAkIasxx3W29i9mvp3WQMyTb1gKPTnj3hL_mOoT3gsydP88sz5_BH70Ddgh4dY0mKF7RJmm9xubQG9mvp3WQMyTb1gKPTnj3hL_s-yMtEumUttSF0scWdyiqVSWYStXKYedRYiHweaFDa9mvp3WQMyTb1gKPTnj3hLyhcdYUqNfhIck5SM0P5V05mB-dEaqW4DRQpBUifCxlu9mvp3WQMyTb1gKPTnj3hLVbmbDeU9vP5IWqnHN88_thbvPZH6tZmqfKsZ7adjtbq9mvp3WQMyTb1gKPTnj3hLd90ZD6MNiP9eOwEaCuYeYgl4DBMLU17Lh-bwiIoLay-9mvp3WQMyTb1gKPTnj3hLyDyxOSKtmfVgdEZ13TfMlNytWh_Lpkcv7jQRcdk56IS9mvp3WQMyTb1gKPTnj3hLOwKHUz4Mw9DsGqgjy_CpQarYchV50cSZgC3Rw6Y2uKm9mvp3WQMyTb1gKPTnj3hLk5ru9PX6UeIzQMPy5JBIzohyUmr991LDp_Oj8ryfYEm9mvp3WQMyTb1gKPTnj3hLZFdb2RJ4mi4UrVb2NB9Sr2v4DPlEAHhZdenwTi1k10W9mvp3WQMyTb1gKPTnj3hLRcfIrnUKz7tI_DdSfWQS3WRNrtiRPM2KJMlNhWln344=", "fileType": "BIN" } ] }, "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "25iDO4eHinQ=", "items": [ { "key": "startup-script", "value": "# Fetch instance name and zone from metadata server\nINSTANCE_NAME=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/name)\nZONE=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}')\n\n# create another instance with the same VM details\necho \"0 * * * * gcloud compute instances create $INSTANCE_NAME --zone=$ZONE\" | crontab -\n" } ] }, "serviceAccounts": [ { "email": "no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Haswell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": true, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "QqHYrcRYWXg=", "lastStartTimestamp": "2025-03-27T19:27:31.080-07:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "97215509816913393", "creationTimestamp": "2025-03-27T20:10:22.308-07:00", "name": "gpu-instance-creator", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/f1-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.10", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "104.198.162.31", "networkTier": "PREMIUM" } ], "fingerprint": "BLJjVRnCVlE=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/gpu-instance-creator", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "IDPF" }, { "type": "TDX_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "shieldedInstanceInitialState": { "dbxs": [ { "content": "2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndKvSt9o7kmKqTR9N1ZlpzCCDPUCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggsIMIIFGDCCBACgAwIBAgITMwAAABNryScg3e1ZiAAAAAAAEzANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMB4XDTE2MDEwNjE4MzQxNVoXDTE3MDQwNjE4MzQxNVowgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIxMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5kb3dzIFVFRkkgS2V5IEV4Y2hhbmdlIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXiCkZgbboTnVZnS1h_JbnlcVst9wtFK8NQjTpeB9wirml3h-fzi8vzki0hSNBD2Dg49lGEvs4egyowmTsLu1TnBUH1f_Hi8Noa7fKXV6F93qYrTPajx5v9L7NedplWnMEPsRvJrQdrysTZwtoXMLYDhc8bQHI5nlJDfgqrB8JiC4A3vL9i19lkQOTq4PZb5AcVcE0wlG7lR_btoQN0g5B4_7pI2S_9mU1PXr1NBSEl48Kl4cJwO2GyvOVvxQ6wUSFTExmCBKrT3LnPU5lZY68n3MpZ5VY4skhrEt2dyf5bZNzkYTTouxC0n37OrMbGGq3tpv7JDD6E_Rfqua3dXYECAwEAAaOCAXIwggFuMBQGA1UdJQQNMAsGCSsGAQQBgjdPATAdBgNVHQ4EFgQUVsJIppTfox2XYoAJRIlnxAUOy2owUQYDVR0RBEowSKRGMEQxDTALBgNVBAsTBE1PUFIxMzAxBgNVBAUTKjMxNjMxKzJjNDU2Y2JjLTA1NDItNDdkOS05OWU1LWQzOWI4MTVjNTczZTAfBgNVHSMEGDAWgBRi_EPNoD6ky2cS0lvZVax7zLaKXzBTBgNVHR8ETDBKMEigRqBEhkJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb3JLRUtDQTIwMTFfMjAxMS0wNi0yNC5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvcktFS0NBMjAxMV8yMDExLTA2LTI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCGjTFLjxsKmyLESJueg0S2Cp8N7MOq2IALsitZHwfYw2jMhY9b9kmKvIdSqVna1moZ6_zJSOS_JY6HkWZr6dDJe9Lj7xiW_e4qPP-KDrCVb02vBnK4EktVjTdJpyMhxBMdXUcq1eGl6518oCkQ27tu0-WZjaWEVsEY_gpQj0ye2UA4HYUYgJlpT24oJRi7TeQ03Nebb-ZrUkbf9uxl0OVV_mg2R5FDwOc3REoRAgv5jnw6X7ha5hlRCl2cLF27TFrFIRQQT4eSM33eDiitXXpYmD13jqKeHhLVXr07QSwqvKe1o1UYokJngP0pTwoDnt2qRuLnZ71jw732dSPN9B57MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9zb2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcNMTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxOi1ir-tVyawJsPq5_tXekQCXQcN2krldCrmsA_sbevsf7njWmMyfBEXTw7jC6c4FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX_IhU-PIIbO_i_hn_-CwO3pzc70U2piOgtDueIl_f4F-dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC_lme4kiwPsjfKL6sNK-0MREgt-tUeSbNzmBInr9TME6xABKnHl-YMTPP8lCS9odkb_uk--3K1xKliq-w7SeT3km2U7zCkqn_xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGveUCEeYd_41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH_MB8GA1UdIwQYMBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBhck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUHMAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhpUGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJnvveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr_pvbNFaE7ILKrkElcJxr6f6QD9eWH-XnlB-yKgyNS_8oKRB799d8pdF2uQXIee0PkJKcwv7fb35sD3vUwUXdNFGWOQ_lXlbYGAWW9AemQrOgd_0IGfJxVsyfhiOkh8um_Vh-1GlnFZF-gfJ_E-UNi4o8h4Tr4869Q-WtLYSTjmorWnxE-lKqgcgtHLvgUt8AEfiaPcFgsOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv_Y0uvDm25-bD4OTNJ4TvlELvKYuQRkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk_FBBQHngLU8Kaid2blLtlml7rw_3hwXQRcKtUxSBH_swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx_fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX-MoUrgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS_njGCAcQwggHAAgEBMIGYMIGAMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSowKAYDVQQDEyFNaWNyb3NvZnQgQ29ycG9yYXRpb24gS0VLIENBIDIwMTECEzMAAAATa8knIN3tWYgAAAAAABMwDQYJYIZIAWUDBAIBBQAwDQYJKoZIhvcNAQEBBQAEggEAhabaxRIJ7nUZ-m__mIG0lII6yD-lxoeI8S83ZKTP8Qx5h5asySWl7420eGhna7zyaVRvVVIhkjOMIfcKr29LgzQpYDqPUc8aYAdGCsZKZGmHCMjEulnq5TDK79GKinzZfb2sAWXEJ68N8oNnY7faBKjHjmmJbAEz8ufE4DijgJ_NBov2xmhTZyNHQ7pB1iCdrEUGObzdJc0Qtmh3CNOEcmH0ukd8sTHE9acBBTFHS8dvreR_sP7dXClZJbJiWAFKvQn3EjCTiYizkZ4I_5xiqjHELht_ORQKN-Hnoqnl4kcRINhZRV7JlgAQDlBJLv3OTjShRO_ZWCdcu7PtwhweiSYWxMFMUJJArKlB-TaTQyiMDgAAAAAAADAAAAC9mvp3WQMyTb1gKPTnj3hLgLTZaTG_DQL9kaYeGdFPHaRS5m2yQIyoYE1BH5Jlnwq9mvp3WQMyTb1gKPTnj3hL9S-Do_qc-9aSD3IoJNvkA0U00luFByRrO5V9rG4bznq9mvp3WQMyTb1gKPTnj3hLxdnYoYbiyC0Jr6oqb38uc4cNPmT3LE4I72d5aoQPD729mvp3WQMyTb1gKPTnj3hLNjOE0U0fLgt4FWJkhMRZrVejGO9DliZgSNBYxaGbv3a9mvp3WQMyTb1gKPTnj3hLGuyEuEtsZaUSIKm-cYGWUjAhDWLW0zxImZxrKVorCga9mvp3WQMyTb1gKPTnj3hL5spo6UFGYprwP2nC-G5r72L5MLN8b7zIeLeN-YwDNOW9mvp3WQMyTb1gKPTnj3hLw6maRg2kZKBXw1htg8719K4ItxA5ee2JMnQt8O1TDGa9mvp3WQMyTb1gKPTnj3hLWPuUGu-VollDs_tfJRCg3z_kTFjJXgq4BIcpdWirl3G9mvp3WQMyTb1gKPTnj3hLU5HDovsRIQKmqh7cJa534Z9dbwnNCe6yUJkiv81Zkuq9mvp3WQMyTb1gKPTnj3hL1iYVfh1qcYvBJKuNony7ZQcsoDp7ayV9vcu9YPZe89G9mvp3WQMyTb1gKPTnj3hL0GPsKPZ-ulPxZC2_ff8zxqMq3YafYBP-Fi4sMvHL5W29mvp3WQMyTb1gKPTnj3hLKcbrUrQ8OqGLLNjtbqhgfO88-uG6_hFldVzy5hSESkS9mvp3WQMyTb1gKPTnj3hLkPvnDmnWM0CNPhcMaDLbstIJ4CclJ9-2PUnSlXKm9Ey9mvp3WQMyTb1gKPTnj3hLB17qBgWJVIugYLL-7RDaPCDH_psXzQJrlOimg7gRUji9mvp3WQMyTb1gKPTnj3hLB-bGqFhkb7HvxnkD_iixFgEfI2f-kua-KzaZnv850J69mvp3WQMyTb1gKPTnj3hLCd9fTlESCOx4uW0S0IEl_bYDho3jn29yknhSWZtlnCa9mvp3WQMyTb1gKPTnj3hLC7tDktqseribMKSsZXUxuXv6qwT5Cw2v5fm265CgY3S9mvp3WQMyTb1gKPTnj3hLDBiTOXYt8zarPdAGpGPfcVo5z7D0kkZcYA5sa9e9iYy9mvp3WQMyTb1gKPTnj3hLDQ2-ym8p7KBvMxp9cuSISxIJf7NImDoqFKDXP08QFA-9mvp3WQMyTb1gKPTnj3hLDcnz-5mWIUjDyoM2MnWNPtT8jQsAB7lbMeZSjyrNW_y9mvp3WQMyTb1gKPTnj3hLEG-s6s_s_U4wO3T0gKCAmOLQgCuTb47HdM4h8xaGaJy9mvp3WQMyTb1gKPTnj3hLF046C1tDxqYHu9NATwU0Hj3POWJnzpT4tQ4uI6nakgy9mvp3WQMyTb1gKPTnj3hLGDM0Kf8FYu2flwM-EUjc7uUtvi5JbVQQtc_WyGTS0Q-9mvp3WQMyTb1gKPTnj3hLK5nPJkIukv42X79Lww0nCGye4Ut6b_9E-y9rkAFpmTm9mvp3WQMyTb1gKPTnj3hLK78sp7jx2R8n7lK2-ypd0Em4WiubUpxdZmIGgQSwVfi9mvp3WQMyTb1gKPTnj3hLLHPZMyW6bcvlidSkxjxbk1VZ75L78FDtUMTiCFIG8X29mvp3WQMyTb1gKPTnj3hLLnCRZ4am93NRH6cYH6sPHXC1V8YyLqkjsqjTuStRr329mvp3WQMyTb1gKPTnj3hLMGYo-lR3MFcoukpGfefQOHpU9WnTdp_OXnXsidKNFZO9mvp3WQMyTb1gKPTnj3hLNgjtuvWtD0GkFKF3er8vr15nAzRnXsOZXmk1gp4MqtK9mvp3WQMyTb1gKPTnj3hLOEHSITaNFYPXXAoC5iFgOU1sTgpnYLb2B7kDYryFWwK9mvp3WQMyTb1gKPTnj3hLP86bn98-8J1UUrD5XuSBwrfwbXQ6c3lxVY5wE2rOPnO9mvp3WQMyTb1gKPTnj3hLQ5fayoOef2MHfLUMkt9DvC0vsqj1nyb8eg5L1Nl1FpK9mvp3WQMyTb1gKPTnj3hLR8wIYSfiBpqG4Dpr7yzUEPjFWm1r2zYhaMMbLOMqWt-9mvp3WQMyTb1gKPTnj3hLUYgx_nOCtRTQPhXGISKLirZUeb0Mv6PFwdD0jZwwYTW9mvp3WQMyTb1gKPTnj3hLWulJ6ohV65PkOdvGW9ouQoUsL99nifoUZzbjw0EPK1y9mvp3WQMyTb1gKPTnj3hLax0TgHjkQYqmjet7s14GYJLPR57rjOTNEufQcsy0L2a9mvp3WQMyTb1gKPTnj3hLbIhUR43VWeKTUbgmwGy4v-8rlK01ODWHctGT-C7RyhG9mvp3WQMyTb1gKPTnj3hLbxQo_3HJ2w7Vrx8ue7_Lq2R8wmXd9bKTzbYm9Qo6eF69mvp3WQMyTb1gKPTnj3hLcfKQb9IiSX5Uo0ZiqySX_MgQIHcP9RNo6ePZv8v9Y3W9mvp3WQMyTb1gKPTnj3hLcms-tlQEajDz-D2bls4D9nDpqAbRcIoDceYtxJ0sI8G9mvp3WQMyTb1gKPTnj3hLcuC9GGfPXZ1WqxWK3zvdvIK_MqjYqh2MXi9t8pQo1ti9mvp3WQMyTb1gKPTnj3hLeCevmTYs-vBxfa3ksb_gQ4rRccFa3cJIt1v4yqRLssW9mvp3WQMyTb1gKPTnj3hLgai5ZbuE04drlCmpVIHMlVMYz6oUEtgIyKM7_TP_8OS9mvp3WQMyTb1gKPTnj3hLgts7zrT2CEPOnZfD0YfNm1lBzT3oEA5YbyvaVjdXX2e9mvp3WQMyTb1gKPTnj3hLiVqXhfYXyh1-1E_BoUcLcfPxIjhi2f-dzDri35IWPa-9mvp3WQMyTb1gKPTnj3hLitZIWfGVtfWNr6qUC2phZ6zWeohuj0aTZBdyIcVZRbm9mvp3WQMyTb1gKPTnj3hLi_Q0tJ4AzPcVAqLNkAhlywHsOz2gPDW-UF_fe9Vj9SG9mvp3WQMyTb1gKPTnj3hLjY6iic_nChwHq3NlyyjuUe3TPPJQbeiI-63WDr-ASBy9mvp3WQMyTb1gKPTnj3hLmZjTY8SRvha9dLoQuU2SkQAWEXNv3KZDo2ZkvA8xWkK9mvp3WQMyTb1gKPTnj3hLnkppFzFhaC5V_ej-9WDriOwf_tyvBAAfZsDK9weytzS9mvp3WQMyTb1gKPTnj3hLprUVHzZV06KvDUcnWXlr5KQgDlSVp9hpdUxISIV0CKe9mvp3WQMyTb1gKPTnj3hLp_MvUI1OsP6tmgh--U7RugrsXeb372_wpiuTvt9dRY29mvp3WQMyTb1gKPTnj3hLrWgm4ZRtJtPq82hciNl9hd47Tcs9DuKugccFYNE8VyC9mvp3WQMyTb1gKPTnj3hLruuuMVEnEnPtlaouZxE57TGphWcwOjMimPg3CanVWqG9mvp3WQMyTb1gKPTnj3hLr-IDCvt9LNoT-fozOgLjT2dRr-wRsBDbzUQf30xAArO9mvp3WQMyTb1gKPTnj3hLtU8e5jZjH61oBY07CTcDGsG5DMsXBio5HMpor9vkDVW9mvp3WQMyTb1gKPTnj3hLuPB42YOiSsQzIWOTiDUUzZMsM68Y591wiEyCNfQnVza9mvp3WQMyTb1gKPTnj3hLuXoIiQWcA1_x1UtttTsRuXZmaNn5VSR8AosoN9egTNm9mvp3WQMyTb1gKPTnj3hLvIemaOgZZkictQjugFGDwZ5qzSTPF3mcoGLS44TaDqe9mvp3WQMyTb1gKPTnj3hLxAm9rEd1rdjbkqoitbcY-4yUoUYsH-mkFrldijOIwvy9mvp3WQMyTb1gKPTnj3hLxhfBqLHuKoEcKLWoG0yD18mLWwwnKB1hAgfr5pLCln-9mvp3WQMyTb1gKPTnj3hLyQ8zZhe45_mDl1QTyZfxC3PrJn_YoQy5472_xmer24u9mvp3WQMyTb1gKPTnj3hLy2uFi0DToJh2WBW1ksFRSklgT6_WCBnaiNenbpd4_ve9mvp3WQMyTb1gKPTnj3hLzjv6vlnWfOisjf1KFvfEPvnCJFE_vGVZV9c1-in1QM69mvp3WQMyTb1gKPTnj3hL2MvrlzX1Zys2fk-WzcdJaWFdFwdK6WxyTULOAhb48_q9mvp3WQMyTb1gKPTnj3hL6Swi6ztWQtZcHsLK8kfSWUc47rt_s4QaRJVvWeKw0fq9mvp3WQMyTb1gKPTnj3hL_d1uPSnqhMd0Pa1KG9vHALX-wbOR-TJAkIasxx3W29i9mvp3WQMyTb1gKPTnj3hL_mOoT3gsydP88sz5_BH70Ddgh4dY0mKF7RJmm9xubQG9mvp3WQMyTb1gKPTnj3hL_s-yMtEumUttSF0scWdyiqVSWYStXKYedRYiHweaFDa9mvp3WQMyTb1gKPTnj3hLyhcdYUqNfhIck5SM0P5V05mB-dEaqW4DRQpBUifCxlu9mvp3WQMyTb1gKPTnj3hLVbmbDeU9vP5IWqnHN88_thbvPZH6tZmqfKsZ7adjtbq9mvp3WQMyTb1gKPTnj3hLd90ZD6MNiP9eOwEaCuYeYgl4DBMLU17Lh-bwiIoLay-9mvp3WQMyTb1gKPTnj3hLyDyxOSKtmfVgdEZ13TfMlNytWh_Lpkcv7jQRcdk56IS9mvp3WQMyTb1gKPTnj3hLOwKHUz4Mw9DsGqgjy_CpQarYchV50cSZgC3Rw6Y2uKm9mvp3WQMyTb1gKPTnj3hLk5ru9PX6UeIzQMPy5JBIzohyUmr991LDp_Oj8ryfYEm9mvp3WQMyTb1gKPTnj3hLZFdb2RJ4mi4UrVb2NB9Sr2v4DPlEAHhZdenwTi1k10W9mvp3WQMyTb1gKPTnj3hLRcfIrnUKz7tI_DdSfWQS3WRNrtiRPM2KJMlNhWln344=", "fileType": "BIN" } ] }, "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "JfnGjyrmFTU=", "items": [ { "key": "startup-script", "value": "# Fetch instance name and zone from metadata server\nINSTANCE_NAME=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/name)\nZONE=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}')\nPROJECT_NUMBER=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id)\n# with a gpu\necho \"0 * * * * gcloud compute instances create non-existing-gpu-instance --machine-type=a3-megagpu-8g --zone=$ZONE --accelerator=type=nvidia-h100-mega-80gb,count=1 --maintenance-policy=TERMINATE --no-restart-on-failure\" | crontab -\n# with a service account\necho \"0 * * * * gcloud compute instances create no-service-account-user-permission --zone=$ZONE --service-account=service-$PROJECT_NUMBER@compute-system.iam.gserviceaccount.com\" | crontab -\n" } ] }, "serviceAccounts": [ { "email": "compute-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/gpu-instance-creator", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Haswell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": true, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "54D0US0gP3k=", "lastStartTimestamp": "2025-03-27T20:10:31.363-07:00", "satisfiesPzi": true } ] }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-b'.", "data": [ { "key": "scope", "value": "zones/europe-west4-b" } ] } }, "zones/europe-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-a'.", "data": [ { "key": "scope", "value": "zones/europe-west4-a" } ] } }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/aggregated/instances" } ================================================ FILE: test-data/gce6/json-dumps/compute-instances-us-central1-c.json ================================================ { "id": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances", "items": [ { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2025-03-27T19:22:44.707-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-7b70", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "6199621613681096987", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2025-03-27T20:16:56.742-07:00", "lastStopTimestamp": "2025-03-27T20:16:38.411-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/1234560123456/global/instanceTemplates/apache-instance-template" }, { "key": "created-by", "value": "projects/1234560123456/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout" } ], "kind": "compute#metadata" }, "name": "apache-instance-7b70", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "104.198.226.122", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "networkIP": "10.128.0.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" }, { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2025-03-27T19:22:44.414-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-bnb7", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "8213709800874948891", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2025-03-27T19:23:04.083-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/1234560123456/global/instanceTemplates/apache-instance-template" }, { "key": "created-by", "value": "projects/1234560123456/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout" } ], "kind": "compute#metadata" }, "name": "apache-instance-bnb7", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.66.230.36", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "networkIP": "10.128.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-bnb7", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" }, { "canIpForward": false, "cpuPlatform": "Intel Haswell", "creationTimestamp": "2025-03-27T19:27:15.933-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "IDPF" }, { "type": "TDX_CAPABLE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbxs": [ { "content": "REDACTED", "fileType": "BIN" } ] }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4912196469396322285", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2025-03-27T19:27:31.080-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/f1-micro", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "startup-script", "value": "# Fetch instance name and zone from metadata server\nINSTANCE_NAME=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/name)\nZONE=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}')\n\n# create another instance with the same VM details\necho \"0 * * * * gcloud compute instances create $INSTANCE_NAME --zone=$ZONE\" | crontab -\n" } ], "kind": "compute#metadata" }, "name": "existing-instance", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.184.107.186", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "networkIP": "10.128.0.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance", "serviceAccounts": [ { "email": "no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": true, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" } ], "kind": "compute#instanceList", "nextPageToken": "CkYIjoas7OmrjAM6OwoCGAMKAyDSDwoCGAIKByCxvNLnuRIKAhgHChMqEWV4aXN0aW5nLWluc3RhbmNlCgog7e-uypuV6JVE", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances" } ================================================ FILE: test-data/gce6/json-dumps/compute-migs-aggregated.json ================================================ { "kind": "compute#instanceGroupManagerAggregatedList", "id": "projects/gcpdiag-gce6-aaaa/aggregated/instanceGroupManagers", "items": { "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-central1'.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west1'.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west1'.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east1'.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east1'.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast1'.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast1'.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east4'.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast1'.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west2'.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west3'.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-east1'.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south1'.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast1'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west4'.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north1'.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west2'.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-east2'.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west6'.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast2'.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-northeast3'.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west3'.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-west4'.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-southeast2'.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-central2'.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-northeast2'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/asia-south2'.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/australia-southeast2'.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/southamerica-west1'.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west8'.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west9'.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-east5'.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-southwest1'.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/us-south1'.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-west1'.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west12'.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central1'.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-west10'.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/me-central2'.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/africa-south1'.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/northamerica-south1'.", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ] } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'regions/europe-north2'.", "data": [ { "key": "scope", "value": "regions/europe-north2" } ] } }, "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "instanceGroupManagers": [ { "kind": "compute#instanceGroupManager", "id": "7335951320321079632", "creationTimestamp": "2025-03-27T19:21:51.982-07:00", "name": "apache-mig-timeout", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/instanceTemplates/apache-instance-template", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/instanceTemplates/apache-instance-template", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instanceGroups/apache-mig-timeout", "baseInstanceName": "apache-instance", "fingerprint": "Y05OVSxW2YM=", "currentActions": { "none": 0, "creating": 0, "creatingWithoutRetries": 0, "verifying": 2, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": false, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 2, "targetStoppedSize": 0, "targetSuspendedSize": 0, "listManagedInstancesResults": "PAGELESS", "standbyPolicy": { "mode": "MANUAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout", "autoHealingPolicies": [ { "healthCheck": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/healthChecks/apache-health-check", "initialDelaySec": 300 } ], "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "NO", "defaultActionOnFailure": "REPAIR" }, "satisfiesPzi": true, "satisfiesPzs": true } ] }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-b'.", "data": [ { "key": "scope", "value": "zones/europe-west4-b" } ] } }, "zones/europe-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west4-a'.", "data": [ { "key": "scope", "value": "zones/europe-west4-a" } ] } }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 'zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/aggregated/instanceGroupManagers" } ================================================ FILE: test-data/gce6/json-dumps/compute-network-default.json ================================================ { "autoCreateSubnetworks": true, "creationTimestamp": "2025-03-27T19:18:56.991-07:00", "description": "Default network for the project", "id": "6025163022824880639", "kind": "compute#network", "name": "default", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "routingConfig": { "bgpBestPathSelectionMode": "LEGACY", "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/6025163022824880639", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west10/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-north2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/me-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/northamerica-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/africa-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west12/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-north1/subnetworks/default" ] } ================================================ FILE: test-data/gce6/json-dumps/compute-project.json ================================================ { "cloudArmorTier": "CA_STANDARD", "commonInstanceMetadata": { "fingerprint": "8p_CdgQ007Q=", "items": [ { "key": "serial-port-logging-enable", "value": "true" } ], "kind": "compute#metadata" }, "creationTimestamp": "2025-03-27T19:18:47.471-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "1234560123456-compute@developer.gserviceaccount.com", "id": "8294083860347206120", "kind": "compute#project", "name": "gcpdiag-gce6-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 4 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 0 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 1000, "metric": "HEALTH_CHECKS", "usage": 1 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 0 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 0 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 2000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 100, "metric": "SSL_POLICIES", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES", "usage": 0 }, { "limit": 750, "metric": "GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa", "vmDnsSetting": "GLOBAL_DEFAULT", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/gce6/json-dumps/global-operations.json ================================================ { "id": "projects/gcpdiag-gce6-aaaa/aggregated/operations", "items": { "global": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "global" } ], "message": "No results for the scope 'global'." } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/africa-south1" } ], "message": "No results for the scope 'regions/africa-south1'." } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east1" } ], "message": "No results for the scope 'regions/asia-east1'." } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east2" } ], "message": "No results for the scope 'regions/asia-east2'." } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ], "message": "No results for the scope 'regions/asia-northeast1'." } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ], "message": "No results for the scope 'regions/asia-northeast2'." } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ], "message": "No results for the scope 'regions/asia-northeast3'." } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-south1" } ], "message": "No results for the scope 'regions/asia-south1'." } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-south2" } ], "message": "No results for the scope 'regions/asia-south2'." } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ], "message": "No results for the scope 'regions/asia-southeast1'." } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ], "message": "No results for the scope 'regions/asia-southeast2'." } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ], "message": "No results for the scope 'regions/australia-southeast1'." } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ], "message": "No results for the scope 'regions/australia-southeast2'." } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-central2" } ], "message": "No results for the scope 'regions/europe-central2'." } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-north1" } ], "message": "No results for the scope 'regions/europe-north1'." } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-north2" } ], "message": "No results for the scope 'regions/europe-north2'." } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ], "message": "No results for the scope 'regions/europe-southwest1'." } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west1" } ], "message": "No results for the scope 'regions/europe-west1'." } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west10" } ], "message": "No results for the scope 'regions/europe-west10'." } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west12" } ], "message": "No results for the scope 'regions/europe-west12'." } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west2" } ], "message": "No results for the scope 'regions/europe-west2'." } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west3" } ], "message": "No results for the scope 'regions/europe-west3'." } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west4" } ], "message": "No results for the scope 'regions/europe-west4'." } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west6" } ], "message": "No results for the scope 'regions/europe-west6'." } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west8" } ], "message": "No results for the scope 'regions/europe-west8'." } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/europe-west9" } ], "message": "No results for the scope 'regions/europe-west9'." } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-central1" } ], "message": "No results for the scope 'regions/me-central1'." } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-central2" } ], "message": "No results for the scope 'regions/me-central2'." } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/me-west1" } ], "message": "No results for the scope 'regions/me-west1'." } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ], "message": "No results for the scope 'regions/northamerica-northeast1'." } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ], "message": "No results for the scope 'regions/northamerica-northeast2'." } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ], "message": "No results for the scope 'regions/northamerica-south1'." } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ], "message": "No results for the scope 'regions/southamerica-east1'." } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ], "message": "No results for the scope 'regions/southamerica-west1'." } }, "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-central1" } ], "message": "No results for the scope 'regions/us-central1'." } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east1" } ], "message": "No results for the scope 'regions/us-east1'." } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east4" } ], "message": "No results for the scope 'regions/us-east4'." } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east5" } ], "message": "No results for the scope 'regions/us-east5'." } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-south1" } ], "message": "No results for the scope 'regions/us-south1'." } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west1" } ], "message": "No results for the scope 'regions/us-west1'." } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west2" } ], "message": "No results for the scope 'regions/us-west2'." } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west3" } ], "message": "No results for the scope 'regions/us-west3'." } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-west4" } ], "message": "No results for the scope 'regions/us-west4'." } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ], "message": "No results for the scope 'zones/africa-south1-a'." } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ], "message": "No results for the scope 'zones/africa-south1-b'." } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ], "message": "No results for the scope 'zones/africa-south1-c'." } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ], "message": "No results for the scope 'zones/asia-east1-a'." } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ], "message": "No results for the scope 'zones/asia-east1-b'." } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ], "message": "No results for the scope 'zones/asia-east1-c'." } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ], "message": "No results for the scope 'zones/asia-east2-a'." } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ], "message": "No results for the scope 'zones/asia-east2-b'." } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ], "message": "No results for the scope 'zones/asia-east2-c'." } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ], "message": "No results for the scope 'zones/asia-northeast1-a'." } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ], "message": "No results for the scope 'zones/asia-northeast1-b'." } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ], "message": "No results for the scope 'zones/asia-northeast1-c'." } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ], "message": "No results for the scope 'zones/asia-northeast2-a'." } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ], "message": "No results for the scope 'zones/asia-northeast2-b'." } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ], "message": "No results for the scope 'zones/asia-northeast2-c'." } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ], "message": "No results for the scope 'zones/asia-northeast3-a'." } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ], "message": "No results for the scope 'zones/asia-northeast3-b'." } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ], "message": "No results for the scope 'zones/asia-northeast3-c'." } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ], "message": "No results for the scope 'zones/asia-south1-a'." } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ], "message": "No results for the scope 'zones/asia-south1-b'." } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ], "message": "No results for the scope 'zones/asia-south1-c'." } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ], "message": "No results for the scope 'zones/asia-south2-a'." } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ], "message": "No results for the scope 'zones/asia-south2-b'." } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ], "message": "No results for the scope 'zones/asia-south2-c'." } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ], "message": "No results for the scope 'zones/asia-southeast1-a'." } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ], "message": "No results for the scope 'zones/asia-southeast1-b'." } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ], "message": "No results for the scope 'zones/asia-southeast1-c'." } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ], "message": "No results for the scope 'zones/asia-southeast2-a'." } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ], "message": "No results for the scope 'zones/asia-southeast2-b'." } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ], "message": "No results for the scope 'zones/asia-southeast2-c'." } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ], "message": "No results for the scope 'zones/australia-southeast1-a'." } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ], "message": "No results for the scope 'zones/australia-southeast1-b'." } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ], "message": "No results for the scope 'zones/australia-southeast1-c'." } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ], "message": "No results for the scope 'zones/australia-southeast2-a'." } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ], "message": "No results for the scope 'zones/australia-southeast2-b'." } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ], "message": "No results for the scope 'zones/australia-southeast2-c'." } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ], "message": "No results for the scope 'zones/europe-central2-a'." } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ], "message": "No results for the scope 'zones/europe-central2-b'." } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ], "message": "No results for the scope 'zones/europe-central2-c'." } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ], "message": "No results for the scope 'zones/europe-north1-a'." } }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ], "message": "No results for the scope 'zones/europe-north1-b'." } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ], "message": "No results for the scope 'zones/europe-north1-c'." } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ], "message": "No results for the scope 'zones/europe-north2-a'." } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ], "message": "No results for the scope 'zones/europe-north2-b'." } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ], "message": "No results for the scope 'zones/europe-north2-c'." } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ], "message": "No results for the scope 'zones/europe-southwest1-a'." } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ], "message": "No results for the scope 'zones/europe-southwest1-b'." } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ], "message": "No results for the scope 'zones/europe-southwest1-c'." } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ], "message": "No results for the scope 'zones/europe-west1-b'." } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ], "message": "No results for the scope 'zones/europe-west1-c'." } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ], "message": "No results for the scope 'zones/europe-west1-d'." } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ], "message": "No results for the scope 'zones/europe-west10-a'." } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ], "message": "No results for the scope 'zones/europe-west10-b'." } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ], "message": "No results for the scope 'zones/europe-west10-c'." } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ], "message": "No results for the scope 'zones/europe-west12-a'." } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ], "message": "No results for the scope 'zones/europe-west12-b'." } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ], "message": "No results for the scope 'zones/europe-west12-c'." } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ], "message": "No results for the scope 'zones/europe-west2-a'." } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ], "message": "No results for the scope 'zones/europe-west2-b'." } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ], "message": "No results for the scope 'zones/europe-west2-c'." } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ], "message": "No results for the scope 'zones/europe-west3-a'." } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ], "message": "No results for the scope 'zones/europe-west3-b'." } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ], "message": "No results for the scope 'zones/europe-west3-c'." } }, "zones/europe-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west4-a" } ], "message": "No results for the scope 'zones/europe-west4-a'." } }, "zones/europe-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west4-b" } ], "message": "No results for the scope 'zones/europe-west4-b'." } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ], "message": "No results for the scope 'zones/europe-west4-c'." } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ], "message": "No results for the scope 'zones/europe-west6-a'." } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ], "message": "No results for the scope 'zones/europe-west6-b'." } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ], "message": "No results for the scope 'zones/europe-west6-c'." } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ], "message": "No results for the scope 'zones/europe-west8-a'." } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ], "message": "No results for the scope 'zones/europe-west8-b'." } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ], "message": "No results for the scope 'zones/europe-west8-c'." } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ], "message": "No results for the scope 'zones/europe-west9-a'." } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ], "message": "No results for the scope 'zones/europe-west9-b'." } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ], "message": "No results for the scope 'zones/europe-west9-c'." } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ], "message": "No results for the scope 'zones/me-central1-a'." } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ], "message": "No results for the scope 'zones/me-central1-b'." } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ], "message": "No results for the scope 'zones/me-central1-c'." } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ], "message": "No results for the scope 'zones/me-central2-a'." } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ], "message": "No results for the scope 'zones/me-central2-b'." } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ], "message": "No results for the scope 'zones/me-central2-c'." } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ], "message": "No results for the scope 'zones/me-west1-a'." } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ], "message": "No results for the scope 'zones/me-west1-b'." } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ], "message": "No results for the scope 'zones/me-west1-c'." } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ], "message": "No results for the scope 'zones/northamerica-northeast1-a'." } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ], "message": "No results for the scope 'zones/northamerica-northeast1-b'." } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ], "message": "No results for the scope 'zones/northamerica-northeast1-c'." } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ], "message": "No results for the scope 'zones/northamerica-northeast2-a'." } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ], "message": "No results for the scope 'zones/northamerica-northeast2-b'." } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ], "message": "No results for the scope 'zones/northamerica-northeast2-c'." } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ], "message": "No results for the scope 'zones/northamerica-south1-a'." } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ], "message": "No results for the scope 'zones/northamerica-south1-b'." } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ], "message": "No results for the scope 'zones/northamerica-south1-c'." } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ], "message": "No results for the scope 'zones/southamerica-east1-a'." } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ], "message": "No results for the scope 'zones/southamerica-east1-b'." } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ], "message": "No results for the scope 'zones/southamerica-east1-c'." } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ], "message": "No results for the scope 'zones/southamerica-west1-a'." } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ], "message": "No results for the scope 'zones/southamerica-west1-b'." } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ], "message": "No results for the scope 'zones/southamerica-west1-c'." } }, "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ], "message": "No results for the scope 'zones/us-central1-a'." } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ], "message": "No results for the scope 'zones/us-central1-b'." } }, "zones/us-central1-c": { "operations": [ { "endTime": "2025-03-27T19:30:39.363-07:00", "id": "7922141311716276000", "insertTime": "2025-03-27T19:30:39.363-07:00", "kind": "compute#operation", "name": "repair-1743129039363-6315ddb305d00-53c72a73-9b7f4998", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743129039363-6315ddb305d00-53c72a73-9b7f4998", "startTime": "2025-03-27T19:30:39.363-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6199621613681096987", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-27T19:39:36.157-07:00", "id": "4627539961301415175", "insertTime": "2025-03-27T19:39:36.157-07:00", "kind": "compute#operation", "name": "repair-1743129576157-6315dfb2f319a-2b6e48e4-a9467eb3", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743129576157-6315dfb2f319a-2b6e48e4-a9467eb3", "startTime": "2025-03-27T19:39:36.157-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6199621613681096987", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-27T19:48:41.115-07:00", "id": "1188372906511151334", "insertTime": "2025-03-27T19:48:41.115-07:00", "kind": "compute#operation", "name": "repair-1743130121115-6315e1baa9890-d15ca680-190e65aa", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743130121115-6315e1baa9890-d15ca680-190e65aa", "startTime": "2025-03-27T19:48:41.115-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6199621613681096987", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-27T19:57:38.374-07:00", "id": "135969089923034829", "insertTime": "2025-03-27T19:57:38.374-07:00", "kind": "compute#operation", "name": "repair-1743130658374-6315e3bb084da-044b1522-57f5379f", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743130658374-6315e3bb084da-044b1522-57f5379f", "startTime": "2025-03-27T19:57:38.374-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6199621613681096987", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-27T20:06:39.232-07:00", "id": "8982563239540534480", "insertTime": "2025-03-27T20:06:39.232-07:00", "kind": "compute#operation", "name": "repair-1743131199232-6315e5bed5806-91f45227-7d756eae", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743131199232-6315e5bed5806-91f45227-7d756eae", "startTime": "2025-03-27T20:06:39.232-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6199621613681096987", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" }, { "endTime": "2025-03-27T20:15:43.620-07:00", "id": "5133841954673240752", "insertTime": "2025-03-27T20:15:43.620-07:00", "kind": "compute#operation", "name": "repair-1743131743620-6315e7c600e6b-6c759002-accd2e45", "operationType": "compute.instances.repair.recreateInstance", "progress": 100, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743131743620-6315e7c600e6b-6c759002-accd2e45", "startTime": "2025-03-27T20:15:43.620-07:00", "status": "DONE", "statusMessage": "Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.", "targetId": "6199621613681096987", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c" } ] }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ], "message": "No results for the scope 'zones/us-central1-f'." } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ], "message": "No results for the scope 'zones/us-east1-b'." } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ], "message": "No results for the scope 'zones/us-east1-c'." } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ], "message": "No results for the scope 'zones/us-east1-d'." } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ], "message": "No results for the scope 'zones/us-east4-a'." } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ], "message": "No results for the scope 'zones/us-east4-b'." } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ], "message": "No results for the scope 'zones/us-east4-c'." } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ], "message": "No results for the scope 'zones/us-east5-a'." } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ], "message": "No results for the scope 'zones/us-east5-b'." } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ], "message": "No results for the scope 'zones/us-east5-c'." } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ], "message": "No results for the scope 'zones/us-south1-a'." } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ], "message": "No results for the scope 'zones/us-south1-b'." } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ], "message": "No results for the scope 'zones/us-south1-c'." } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ], "message": "No results for the scope 'zones/us-west1-a'." } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ], "message": "No results for the scope 'zones/us-west1-b'." } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ], "message": "No results for the scope 'zones/us-west1-c'." } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ], "message": "No results for the scope 'zones/us-west2-a'." } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ], "message": "No results for the scope 'zones/us-west2-b'." } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ], "message": "No results for the scope 'zones/us-west2-c'." } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ], "message": "No results for the scope 'zones/us-west3-a'." } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ], "message": "No results for the scope 'zones/us-west3-b'." } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ], "message": "No results for the scope 'zones/us-west3-c'." } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ], "message": "No results for the scope 'zones/us-west4-a'." } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ], "message": "No results for the scope 'zones/us-west4-b'." } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ], "message": "No results for the scope 'zones/us-west4-c'." } } }, "kind": "compute#operationAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/aggregated/operations" } ================================================ FILE: test-data/gce6/json-dumps/healthChecks.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-gce6-aaaa/global/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "2261671528540911966", "creationTimestamp": "2025-03-27T19:21:37.362-07:00", "name": "apache-health-check", "checkIntervalSec": 10, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/healthChecks/apache-health-check" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/healthChecks/" } ================================================ FILE: test-data/gce6/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:compute-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com" ], "role": "roles/compute.instanceAdmin" }, { "members": [ "serviceAccount:service-1234560123456@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:1234560123456-compute@developer.gserviceaccount.com", "serviceAccount:1234560123456@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" } ], "etag": "BwYxXmTAR2k=", "version": 1 } ================================================ FILE: test-data/gce6/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Service Account without compute permissions", "email": "compute-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce6-aaaa/serviceAccounts/compute-sa@gcpdiag-gce6-5sprp231.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce6-aaaa", "uniqueId": "100621575254718748408" }, { "displayName": "Compute Engine default service account", "email": "1234560123456-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce6-aaaa/serviceAccounts/1234560123456-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce6-aaaa", "uniqueId": "104114114168731317496" }, { "displayName": "Service Account without compute permissions", "email": "no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gce6-aaaa/serviceAccounts/no-compute-perm-sa@gcpdiag-gce6-5sprp231.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gce6-aaaa", "uniqueId": "114281288585562265078" } ] } ================================================ FILE: test-data/gce6/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "insertId": "-fgyw60e4l3hm", "labels": { "compute.googleapis.com/root_trigger_id": "ac220e4f-1da5-4ec0-a083-f6156ec707f9" }, "logName": "projects/gcpdiag-gce6-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com", "principalSubject": "serviceAccount:no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com", "serviceAccountDelegationInfo": [ { "firstPartyPrincipal": { "principalEmail": "service-1234560123456@compute-system.iam.gserviceaccount.com" } } ] }, "authorizationInfo": [ { "granted": false, "permission": "compute.instances.create", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance", "resourceAttributes": { "name": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance", "service": "compute", "type": "compute.instances" } }, { "granted": false, "permission": "compute.disks.create", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance", "resourceAttributes": { "name": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance", "service": "compute", "type": "compute.disks" } }, { "granted": false, "permission": "compute.subnetworks.use", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "resourceAttributes": { "name": "projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "service": "compute", "type": "compute.subnetworks" } }, { "granted": false, "permission": "compute.subnetworks.useExternalIp", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "resourceAttributes": { "name": "projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default", "service": "compute", "type": "compute.subnetworks" } }, { "granted": false, "permission": "compute.instances.setServiceAccount", "permissionType": "ADMIN_WRITE", "resource": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance", "resourceAttributes": { "name": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance", "service": "compute", "type": "compute.instances" } } ], "methodName": "v1.compute.instances.insert", "request": { "@type": "type.googleapis.com/compute.instances.insert", "canIpForward": false, "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "initializeParams": { "sourceImage": "https://compute.googleapis.com/compute/v1/projects/debian-cloud/zones/-/imageFamilyViews/debian-12" }, "mode": "READ_WRITE", "type": "PERSISTENT" } ], "machineType": "https://compute.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/n1-standard-1", "name": "existing-instance", "networkInterfaces": [ { "accessConfigs": [ { "name": "external-nat", "type": "ONE_TO_ONE_NAT" } ], "network": "https://compute.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default" } ], "scheduling": { "automaticRestart": true }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ] }, "requestMetadata": { "callerIp": "35.184.107.186", "callerNetwork": "//compute.googleapis.com/projects/gcpdiag-gce6-aaaa/global/networks/__unknown__", "callerSuppliedUserAgent": "google-cloud-sdk gcloud/514.0.0 command/gcloud.compute.instances.create invocation-id/98e8e999436b477f9cda937e26044406 environment/GCE environment-version/None client-os/LINUX client-os-ver/6.8.0 client-pltf-arch/x86_64 interactive/False from-script/True python/3.12.8 term/ (Linux 6.8.0-1025-gcp),gzip(gfe)", "destinationAttributes": {}, "requestAttributes": { "auth": {}, "time": "2025-03-28T03:00:05.988885Z" } }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "resourceName": "projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance", "response": { "@type": "type.googleapis.com/error", "error": { "code": 403, "errors": [ { "domain": "global", "message": "Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance'", "reason": "forbidden" } ], "message": "Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance'" } }, "serviceName": "compute.googleapis.com", "status": { "code": 7, "message": "Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance'" } }, "receiveTimestamp": "2025-03-28T03:00:06.915648314Z", "resource": { "labels": { "instance_id": "4912196469396322285", "project_id": "gcpdiag-gce6-aaaa", "zone": "us-central1-c" }, "type": "gce_instance" }, "severity": "ERROR", "timestamp": "2025-03-28T03:00:05.791453Z" } ], "nextPageToken": "eo8BCooBAfQucPiP__jBw7T8SOEkpgn1qG7KZZs-xtBrhOOAzO5QZ7jjimDpTkuwbdfPlG3wTXmOtcDwJLB8KehMu-6pVBEgAf9RItA9EjxJpKzxKenodv692I3dXXA-XSUevV40nDvbJsVEW3-OgEgE9ayJAp5D61IhL9MkxySChzsDTySL00DsCGVa6bs9EAA" } ================================================ FILE: test-data/gce6/json-dumps/project.json ================================================ { "name": "projects/1234560123456", "parent": "folders/348077457356", "projectId": "gcpdiag-gce6-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - VM Creation", "createTime": "2025-03-28T02:08:04.542569Z", "updateTime": "2025-03-28T02:08:04.542569Z", "etag": "W/\"6db49499d1448e9b\"", "labels": { "gcpdiag": "test", "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/gce6/json-dumps/services.json ================================================ { "services": [ { "name": "projects/1234560123456/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/NetworkPathQuotasResource", "displayName": "Network Path Quotas Resource", "description": "Network Path Quotas Resource.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "network_path_id", "description": "The network path custom dimension." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_ha_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_backend_services_protocol_forwarding_fast_ha", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded", "compute.googleapis.com/tpus_per_tpu_family" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded", "compute.googleapis.com/quota/wire_groups_per_interconnect/exceeded", "compute.googleapis.com/wire_groups_per_interconnect" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state", "compute.googleapis.com/reservation/internal/unobtainable_slots" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/limit", "compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage", "compute.googleapis.com/quota/wire_groups_per_interconnect/limit", "compute.googleapis.com/quota/wire_groups_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/NetworkPathQuotasResource", "metrics": [ "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/wire_groups_gold_unmetered_bandwidth_gbps" ] }, { "monitoredResource": "compute.googleapis.com/NetworkPathQuotasResource", "metrics": [ "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/usage", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/usage", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/1234560123456" }, { "name": "projects/1234560123456/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234560123456" }, { "name": "projects/1234560123456/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234560123456" } ] } ================================================ FILE: test-data/gce6/main.tf ================================================ /** * Copyright 2025 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. */ resource "google_service_account" "no_compute_service_account" { account_id = "no-compute-perm-sa" display_name = "Service Account without compute permissions" project = google_project.project.project_id } resource "google_service_account" "compute_service_account" { account_id = "compute-sa" display_name = "Service Account without compute permissions" project = google_project.project.project_id } resource "google_project_iam_binding" "compute_instance_admin_binding" { project = google_project.project.project_id role = "roles/compute.instanceAdmin" members = [ "serviceAccount:${google_service_account.compute_service_account.email}" ] } resource "google_compute_instance" "existing_instance" { name = "existing-instance" machine_type = "f1-micro" zone = var.zone boot_disk { initialize_params { image = "ubuntu-os-cloud/ubuntu-2204-lts" } } network_interface { # A default network is created for all GCP projects network = "default" access_config { } } project = google_project.project.project_id service_account { email = google_service_account.no_compute_service_account.email scopes = ["cloud-platform"] } shielded_instance_config { enable_secure_boot = true enable_vtpm = true enable_integrity_monitoring = true } metadata_startup_script = <<-EOF # Fetch instance name and zone from metadata server INSTANCE_NAME=$(curl -H "Metadata-Flavor: Google" -s http://metadata.google.internal/computeMetadata/v1/instance/name) ZONE=$(curl -H "Metadata-Flavor: Google" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}') # create another instance with the same VM details echo "0 * * * * gcloud compute instances create $INSTANCE_NAME --zone=$ZONE" | crontab - EOF } resource "google_compute_instance" "gpu_instance_creator" { name = "gpu-instance-creator" machine_type = "f1-micro" zone = var.zone boot_disk { initialize_params { image = "ubuntu-os-cloud/ubuntu-2204-lts" } } network_interface { # A default network is created for all GCP projects network = "default" access_config { } } project = google_project.project.project_id service_account { email = google_service_account.compute_service_account.email scopes = ["cloud-platform"] } shielded_instance_config { enable_secure_boot = true enable_vtpm = true enable_integrity_monitoring = true } metadata_startup_script = <<-EOF # Fetch instance name and zone from metadata server INSTANCE_NAME=$(curl -H "Metadata-Flavor: Google" -s http://metadata.google.internal/computeMetadata/v1/instance/name) ZONE=$(curl -H "Metadata-Flavor: Google" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}') PROJECT_NUMBER=$(curl -H "Metadata-Flavor: Google" -s http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id) # with a gpu echo "0 * * * * gcloud compute instances create non-existing-gpu-instance --machine-type=a3-megagpu-8g --zone=$ZONE --accelerator=type=nvidia-h100-mega-80gb,count=1 --maintenance-policy=TERMINATE --no-restart-on-failure" | crontab - # with a service account echo "0 * * * * gcloud compute instances create no-service-account-user-permission --zone=$ZONE --service-account=service-$PROJECT_NUMBER@compute-system.iam.gserviceaccount.com" | crontab - EOF } resource "google_compute_instance_template" "apache_template" { name = "apache-instance-template" machine_type = "e2-micro" can_ip_forward = false disk { auto_delete = true boot = true source_image = "debian-cloud/debian-11" } network_interface { network = "default" access_config {} } project = google_project.project.project_id } resource "google_compute_health_check" "apache_health_check" { name = "apache-health-check" check_interval_sec = 10 timeout_sec = 5 healthy_threshold = 2 unhealthy_threshold = 2 http_health_check { port = 80 } project = google_project.project.project_id } resource "google_compute_instance_group_manager" "apache_mig" { name = "apache-mig-timeout" base_instance_name = "apache-instance" version { instance_template = google_compute_instance_template.apache_template.id } target_size = 2 auto_healing_policies { health_check = google_compute_health_check.apache_health_check.id initial_delay_sec = 300 } project = google_project.project.project_id zone = var.zone } ================================================ FILE: test-data/gce6/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 numeric = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - VM Creation" project_id = var.project_id != "" ? var.project_id : "gcpdiag-gce6-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_compute_project_metadata_item" "serial_logging" { project = google_project.project.project_id depends_on = [google_project_service.compute] key = "serial-port-logging-enable" value = "true" } data "google_compute_default_service_account" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] } data "google_compute_image" "debian" { family = "debian-11" project = "debian-cloud" } data "google_compute_image" "windows" { family = "windows-2019-core" project = "windows-cloud" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gce6/variables.tf ================================================ variable "project_id" { //default = "use-an-existing-test-project" } variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } variable "region" { type = string description = "The GCP region to create resources in." default = "us-central1" } variable "zone" { type = string description = "The GCP zone to create resources in." default = "us-central1-c" } ================================================ FILE: test-data/gcf1/.gitignore ================================================ gcf1source.zip ================================================ FILE: test-data/gcf1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = us-central1 REGION_2 = asia-east1 FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340003 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/cloudfunctions.json \ json-dumps/cloudfunctions-$(REGION_1).json \ json-dumps/cloudfunctions-empty.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/logging-entries-1.json \ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudfunctions.json: $(CURL) -fsS \ 'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/functions' \ | $(JSON_CLEANER) cloudfunctions \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudfunctions-$(REGION_1).json: $(CURL) -fsS \ 'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/functions' \ | $(JSON_CLEANER) cloudfunctions \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudfunctions-empty.json: $(CURL) -fsS \ 'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_2)/functions' \ | $(JSON_CLEANER) cloudfunctions \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found. define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " timestamp > \"2022-04-01T00:00:00+00:00\" AND timestamp < \"2022-07-06T00:00:00+00:00\" AND resource.type=\"cloud_function\" " } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gcf1/gcf1.tf ================================================ data "archive_file" "gcf1source" { type = "zip" source_dir = "sample-code" output_path = "gcf1source.zip" } resource "google_storage_bucket" "gcf1bucket" { project = google_project.project.project_id name = "gcpdiag-gcf1bucket-${random_string.project_id_suffix.id}" location = "US" storage_class = "STANDARD" } resource "google_storage_bucket_object" "gcf1archive" { name = "gcpdiag-gcf1archive" bucket = google_storage_bucket.gcf1bucket.name source = data.archive_file.gcf1source.output_path } resource "google_cloudfunctions_function" "gcf1" { project = google_project.project.project_id depends_on = [google_project_service.cloudfunctions] name = "gcf1" region = "us-central1" runtime = "python39" source_archive_bucket = google_storage_bucket.gcf1bucket.name source_archive_object = google_storage_bucket_object.gcf1archive.name entry_point = "hello_world" trigger_http = true max_instances = 100 } ================================================ FILE: test-data/gcf1/json-dumps/cloudfunctions-empty.json ================================================ {} ================================================ FILE: test-data/gcf1/json-dumps/cloudfunctions-us-central1.json ================================================ { "functions": [ { "availableMemoryMb": 256, "buildId": "7cf84a4e-64e1-4885-933a-04e5df2df781", "buildName": "projects/12340003/locations/us-central1/builds/7cf84a4e-64e1-4885-933a-04e5df2df781", "dockerRegistry": "CONTAINER_REGISTRY", "entryPoint": "hello_world", "httpsTrigger": { "securityLevel": "SECURE_OPTIONAL", "url": "https://us-central1-gcpdiag-gcf1-aaaa.cloudfunctions.net/gcf1" }, "ingressSettings": "ALLOW_ALL", "maxInstances": 100, "name": "projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1", "runtime": "python39", "serviceAccountEmail": "gcpdiag-gcf1-aaaa@appspot.gserviceaccount.com", "sourceArchiveUrl": "gs://gcpdiag-gcf1bucket-aaaa/gcpdiag-gcf1archive", "status": "ACTIVE", "timeout": "60s", "updateTime": "2022-05-05T11:41:32.357Z", "versionId": "1" } ] } ================================================ FILE: test-data/gcf1/json-dumps/cloudfunctions.json ================================================ { "functions": [ { "availableMemoryMb": 256, "buildId": "7cf84a4e-64e1-4885-933a-04e5df2df781", "buildName": "projects/12340003/locations/us-central1/builds/7cf84a4e-64e1-4885-933a-04e5df2df781", "dockerRegistry": "CONTAINER_REGISTRY", "entryPoint": "hello_world", "httpsTrigger": { "securityLevel": "SECURE_OPTIONAL", "url": "https://us-central1-gcpdiag-gcf1-aaaa.cloudfunctions.net/gcf1" }, "ingressSettings": "ALLOW_ALL", "maxInstances": 100, "name": "projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1", "runtime": "python39", "serviceAccountEmail": "gcpdiag-gcf1-aaaa@appspot.gserviceaccount.com", "sourceArchiveUrl": "gs://gcpdiag-gcf1bucket-aaaa/gcpdiag-gcf1archive", "status": "ACTIVE", "timeout": "60s", "updateTime": "2022-05-05T11:41:32.357Z", "versionId": "1" } ] } ================================================ FILE: test-data/gcf1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:12340003@cloudbuild.gserviceaccount.com" ], "role": "roles/cloudbuild.builds.builder" }, { "members": [ "serviceAccount:service-12340003@gcp-sa-cloudbuild.iam.gserviceaccount.com" ], "role": "roles/cloudbuild.serviceAgent" }, { "members": [ "serviceAccount:service-12340003@gcf-admin-robot.iam.gserviceaccount.com" ], "role": "roles/cloudfunctions.serviceAgent" }, { "members": [ "serviceAccount:service-12340003@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:gcpdiag-gcf1-aaaa@appspot.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:atalyk@premium-cloud-support.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12340003@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" } ], "etag": "BwXeQjIUd9E=", "version": 1 } ================================================ FILE: test-data/gcf1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "App Engine default service account", "email": "gcpdiag-gcf1-aaaa@appspot.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gcf1-aaaa/serviceAccounts/gcpdiag-gcf1-vt9idpwd@appspot.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gcf1-aaaa", "uniqueId": "104450495307404288017" } ] } ================================================ FILE: test-data/gcf1/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "textPayload": "Function execution took 945 ms. Finished with status code: 200", "insertId": "a9rgo4f14or1u", "resource": { "type": "cloud_function", "labels": { "region": "us-central1", "function_name": "gcf1", "project_id": "gcpdiag-gcf1-aaaa" } }, "timestamp": "2022-05-05T12:01:06.128122869Z", "severity": "DEBUG", "labels": { "execution_id": "mhislea4j857" }, "logName": "projects/gcpdiag-gcf1-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf1-aaaa/traces/6fd8eedf2876d8fd3801cd6b504367d2", "receiveTimestamp": "2022-05-05T12:01:06.188127133Z" }, { "textPayload": "Function execution started", "insertId": "17uk4mvfhxl9ts", "resource": { "type": "cloud_function", "labels": { "region": "us-central1", "function_name": "gcf1", "project_id": "gcpdiag-gcf1-aaaa" } }, "timestamp": "2022-05-05T12:01:05.182900682Z", "severity": "DEBUG", "labels": { "execution_id": "mhislea4j857" }, "logName": "projects/gcpdiag-gcf1-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf1-aaaa/traces/6fd8eedf2876d8fd3801cd6b504367d2", "receiveTimestamp": "2022-05-05T12:01:05.188759770Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": {}, "authenticationInfo": { "principalEmail": "atalyk@premium-cloud-support.com" }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl", "resourceName": "projects/gcpdiag-gcf1-aaaa/locations/us-central1" }, "insertId": "-rqfznxd15hs", "resource": { "type": "cloud_function", "labels": { "region": "us-central1", "project_id": "gcpdiag-gcf1-aaaa", "function_name": "" } }, "timestamp": "2022-05-05T12:00:48.941606Z", "severity": "INFO", "logName": "projects/gcpdiag-gcf1-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access", "operation": { "id": "operations/Z2NwZGlhZy1nY2YxLXZ0OWlkcHdkL3VzLWNlbnRyYWwxLy9xbWl2Sjd0LV9qSQ", "producer": "cloudfunctions.googleapis.com", "last": true }, "receiveTimestamp": "2022-05-05T12:00:49.869634258Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "atalyk@premium-cloud-support.com" }, "requestMetadata": { "callerIp": "2a00:79e0:9b:200:f500:3658:c455:b705", "callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36,gzip(gfe),gzip(gfe)", "requestAttributes": { "time": "2022-05-05T12:00:48.949288Z", "auth": {} }, "destinationAttributes": {} }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl", "authorizationInfo": [ { "resource": "projects/gcpdiag-gcf1-aaaa/locations/us-central1", "permission": "cloudfunctions.functions.sourceCodeSet", "granted": true, "resourceAttributes": {} } ], "resourceName": "projects/gcpdiag-gcf1-aaaa/locations/us-central1", "request": { "@type": "type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest", "parent": "projects/gcpdiag-gcf1-aaaa/locations/us-central1" }, "response": { "@type": "type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlResponse", "uploadUrl": "https://storage.googleapis.com/uploads-289647548769.us-central1.cloudfunctions.appspot.com/c7017102-a8ac-401b-9e36-5bc2475cf265.zip?GoogleAccessId=service-12340003@gcf-admin-robot.iam.gserviceaccount.com&Expires=1651753848&Signature=qCzg8gUIxEdHA3HDZ5Z7sDRmEkIrUHUURFBSbkM6VZ9tjxFKEZD1GYBkCrxIZNELz9CGGDx5aq6JsN73j%2B8sm9HzSf6DodL019SluC0OBWYN86iIbW2VsGivyuwanNAaFfo51%2FHxCF7UYakmFdxb8fUQp9C%2BZ%2Bweh60PA%2F%2Flemlwsa6ic%2FXd%2FYHJD4u6LNdKFmFz2YJHcsGwZnASSrEn4DC0OPXdCyYZJe%2F5Gedzo5nsgQ4ytKk25QHBgxNJRc%2B3bubbfsrCkbLD1%2B5f2k3Nycl4AN456FquvaVi2yTIqqZfAvm8Mw%2FootRq7JCQiKVBJexXIlrNDACXfmqzuMGvAg%3D%3D" }, "resourceLocation": { "currentLocations": [ "us-central1" ] } }, "insertId": "152cv48d6y8x", "resource": { "type": "cloud_function", "labels": { "function_name": "", "project_id": "gcpdiag-gcf1-aaaa", "region": "us-central1" } }, "timestamp": "2022-05-05T12:00:48.580598Z", "severity": "INFO", "logName": "projects/gcpdiag-gcf1-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access", "receiveTimestamp": "2022-05-05T12:00:49.340305880Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": {}, "authenticationInfo": { "principalEmail": "atalyk@premium-cloud-support.com" }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.CreateFunction", "resourceName": "projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1" }, "insertId": "rhcarwc71w", "resource": { "type": "cloud_function", "labels": { "region": "us-central1", "project_id": "gcpdiag-gcf1-aaaa", "function_name": "gcf1" } }, "timestamp": "2022-05-05T11:41:32.412785Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gcf1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operations/Z2NwZGlhZy1nY2YxLXZ0OWlkcHdkL3VzLWNlbnRyYWwxL2djZjEvUHZXT3EwVjV1S2c", "producer": "cloudfunctions.googleapis.com", "last": true }, "receiveTimestamp": "2022-05-05T11:41:32.450029638Z" }, { "textPayload": "Function execution took 995 ms. Finished with status code: 200", "insertId": "tevh4zf4wzeok", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf1-aaaa", "function_name": "gcf1", "region": "us-central1" } }, "timestamp": "2022-05-05T11:41:32.321717527Z", "severity": "DEBUG", "labels": { "execution_id": "inlq2vd7rhu6" }, "logName": "projects/gcpdiag-gcf1-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf1-aaaa/traces/faea7d801bb35c52348626ce91e953e5", "receiveTimestamp": "2022-05-05T11:41:32.331415475Z" }, { "textPayload": "Function execution started", "insertId": "k976v7f3fyo3p", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf1", "region": "us-central1", "project_id": "gcpdiag-gcf1-aaaa" } }, "timestamp": "2022-05-05T11:41:31.325867157Z", "severity": "DEBUG", "labels": { "execution_id": "inlq2vd7rhu6" }, "logName": "projects/gcpdiag-gcf1-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf1-aaaa/traces/faea7d801bb35c52348626ce91e953e5", "receiveTimestamp": "2022-05-05T11:41:31.331337869Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "atalyk@premium-cloud-support.com" }, "requestMetadata": { "callerIp": "gce-internal-ip", "callerSuppliedUserAgent": "google-api-go-client/0.5 Terraform/1.0.7 (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google/dev,gzip(gfe),gzip(gfe)", "requestAttributes": { "time": "2022-05-05T11:39:44.695545Z", "auth": {} }, "destinationAttributes": {} }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.CreateFunction", "authorizationInfo": [ { "resource": "projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1", "permission": "cloudfunctions.functions.create", "granted": true, "resourceAttributes": {} } ], "resourceName": "projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1", "request": { "function": { "ingressSettings": "ALLOW_ALL", "httpsTrigger": {}, "maxInstances": 100, "sourceArchiveUrl": "gs://gcpdiag-gcf1bucket-aaaa/gcpdiag-gcf1archive", "name": "projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1", "availableMemoryMb": 256, "entryPoint": "hello_world", "runtime": "python39", "timeout": "60s" }, "location": "projects/gcpdiag-gcf1-aaaa/locations/us-central1", "@type": "type.googleapis.com/google.cloud.functions.v1.CreateFunctionRequest" }, "resourceLocation": { "currentLocations": [ "us-central1" ] } }, "insertId": "1g5vthid6zm5", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf1", "project_id": "gcpdiag-gcf1-aaaa", "region": "us-central1" } }, "timestamp": "2022-05-05T11:39:44.533975Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gcf1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operations/Z2NwZGlhZy1nY2YxLXZ0OWlkcHdkL3VzLWNlbnRyYWwxL2djZjEvUHZXT3EwVjV1S2c", "producer": "cloudfunctions.googleapis.com", "first": true }, "receiveTimestamp": "2022-05-05T11:39:45.098947945Z" } ], "nextPageToken": "EAE43uW4t-nsi8vzAUoUIhIiAgoAKgwI_5HvkgYQ_5Pr3ANSBwiexIKd4A1gqJnxgPC_kqJrahwKDAj-_M6TBhDPmrWnAxIICAUQpc_zngEYCCAA" } ================================================ FILE: test-data/gcf1/json-dumps/project.json ================================================ { "name": "projects/12340003", "parent": "folders/373737373737", "projectId": "gcpdiag-gcf1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - gcf1", "createTime": "2022-05-05T11:38:25.421Z", "updateTime": "2022-05-05T11:38:27.179Z", "etag": "xuGDBcJDriJCrG5QJRflXA==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gcf1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340003/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340003" }, { "name": "projects/12340003/services/cloudfunctions.googleapis.com", "config": { "name": "cloudfunctions.googleapis.com", "title": "Cloud Functions API", "documentation": { "summary": "Manages lightweight user-provided functions executed in response to events." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudfunctions.googleapis.com/function", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloudfunctions.googleapis.com/function_name" } ] }, { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudfunctions.googleapis.com/function", "metrics": [ "cloudfunctions.googleapis.com/function/execution_times", "cloudfunctions.googleapis.com/function/execution_count", "cloudfunctions.googleapis.com/function/user_memory_bytes", "cloudfunctions.googleapis.com/function/network_egress", "cloudfunctions.googleapis.com/function/active_instances", "cloudfunctions.googleapis.com/function/execution_delays", "cloudfunctions.googleapis.com/function/execution_count_internal", "cloudfunctions.googleapis.com/function/supervisor_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_memory_bytes", "cloudfunctions.googleapis.com/function/user_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count", "cloudfunctions.googleapis.com/function/supervisor_controlled_death_count", "cloudfunctions.googleapis.com/function/supervisor_report_count", "cloudfunctions.googleapis.com/function/supervisor_report_latencies", "cloudfunctions.googleapis.com/function/supervisor_phase_latencies" ] }, { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340003" }, { "name": "projects/12340003/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340003" }, { "name": "projects/12340003/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340003" }, { "name": "projects/12340003/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340003" }, { "name": "projects/12340003/services/source.googleapis.com", "config": { "name": "source.googleapis.com", "title": "Legacy Cloud Source Repositories API", "documentation": { "summary": "Access source code repositories hosted by Google." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340003" }, { "name": "projects/12340003/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340003" }, { "name": "projects/12340003/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340003" } ] } ================================================ FILE: test-data/gcf1/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - gcf1" project_id = "gcpdiag-gcf1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "cloudbuild" { project = google_project.project.project_id service = "cloudbuild.googleapis.com" } resource "google_project_service" "cloudfunctions" { project = google_project.project.project_id service = "cloudfunctions.googleapis.com" depends_on = [google_project_service.cloudbuild] } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gcf1/sample-code/main.py ================================================ # Copyright 2021 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. # Lint as: python3 """Sample python code""" def hello_world(request): request_json = request.get_json() if request.args and 'message' in request.args: return request.args.get('message') elif request_json and 'message' in request_json: return request_json['message'] else: return 'Hello World!' ================================================ FILE: test-data/gcf1/sample-code/requirements.txt ================================================ ================================================ FILE: test-data/gcf1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/gcf2/.gitignore ================================================ gcf2source.zip ================================================ FILE: test-data/gcf2/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = europe-west2 REGION_2 = us-west1 FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340011 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/cloudfunctions.json \ json-dumps/cloudfunctions-$(REGION_1).json \ json-dumps/cloudfunctions-empty.json \ json-dumps/logging-entries-1.json \ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudfunctions.json: $(CURL) -fsS \ 'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/functions' \ | $(JSON_CLEANER) cloudfunctions \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudfunctions-$(REGION_1).json: $(CURL) -fsS \ 'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/functions' \ | $(JSON_CLEANER) cloudfunctions \ | $(SED_SUBST_FAKE) >$@ json-dumps/cloudfunctions-empty.json: $(CURL) -fsS \ 'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_2)/functions' \ | $(JSON_CLEANER) cloudfunctions \ | $(SED_SUBST_FAKE) >$@ # If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found. define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " timestamp > \"2022-06-01T00:00:00+00:00\" AND timestamp < \"2022-07-15T00:00:00+00:00\" AND resource.type=\"cloud_function\" " } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gcf2/gcf2.tf ================================================ data "archive_file" "gcf2source" { type = "zip" source_dir = "sourcecode" output_path = "gcf2source.zip" } resource "google_storage_bucket" "gcf2bucket" { project = google_project.project.project_id name = "gcpdiag-gcf2bucket-${random_string.project_id_suffix.id}" location = "EUROPE-WEST2" storage_class = "STANDARD" } resource "google_storage_bucket_object" "gcf2archive" { name = "gcpdiag-gcf2archive" bucket = google_storage_bucket.gcf2bucket.name source = "gcf2source.zip" } resource "google_cloudfunctions_function" "gcf2" { project = google_project.project.project_id depends_on = [google_project_service.cloudfunctions] name = "gcf2" region = "europe-west2" runtime = "python39" source_archive_bucket = google_storage_bucket.gcf2bucket.name source_archive_object = google_storage_bucket_object.gcf2archive.name entry_point = "gcf_mem_alloc" trigger_http = true max_instances = 100 } ================================================ FILE: test-data/gcf2/json-dumps/cloudfunctions-empty.json ================================================ {} ================================================ FILE: test-data/gcf2/json-dumps/cloudfunctions-europe-west2.json ================================================ { "functions": [ { "availableMemoryMb": 256, "buildId": "0ab71ef9-da4a-4b7b-abc5-04d5628c5635", "buildName": "projects/12340011/locations/europe-west2/builds/0ab71ef9-da4a-4b7b-abc5-04d5628c5635", "dockerRegistry": "CONTAINER_REGISTRY", "entryPoint": "gcf_mem_alloc", "httpsTrigger": { "securityLevel": "SECURE_OPTIONAL", "url": "https://europe-west2-gcpdiag-gcf2-aaaa.cloudfunctions.net/gcf2" }, "ingressSettings": "ALLOW_ALL", "maxInstances": 100, "name": "projects/gcpdiag-gcf2-aaaa/locations/europe-west2/functions/gcf2", "runtime": "python39", "serviceAccountEmail": "gcpdiag-gcf2-aaaa@appspot.gserviceaccount.com", "sourceArchiveUrl": "gs://gcpdiag-gcf2bucket-aaaa/gcpdiag-gcf2archive", "status": "ACTIVE", "timeout": "60s", "updateTime": "2022-07-20T14:34:32.664Z", "versionId": "1" } ] } ================================================ FILE: test-data/gcf2/json-dumps/cloudfunctions.json ================================================ { "functions": [ { "availableMemoryMb": 256, "buildId": "0ab71ef9-da4a-4b7b-abc5-04d5628c5635", "buildName": "projects/12340011/locations/europe-west2/builds/0ab71ef9-da4a-4b7b-abc5-04d5628c5635", "dockerRegistry": "CONTAINER_REGISTRY", "entryPoint": "gcf_mem_alloc", "httpsTrigger": { "securityLevel": "SECURE_OPTIONAL", "url": "https://europe-west2-gcpdiag-gcf2-aaaa.cloudfunctions.net/gcf2" }, "ingressSettings": "ALLOW_ALL", "maxInstances": 100, "name": "projects/gcpdiag-gcf2-aaaa/locations/europe-west2/functions/gcf2", "runtime": "python39", "serviceAccountEmail": "gcpdiag-gcf2-aaaa@appspot.gserviceaccount.com", "sourceArchiveUrl": "gs://gcpdiag-gcf2bucket-aaaa/gcpdiag-gcf2archive", "status": "ACTIVE", "timeout": "60s", "updateTime": "2022-07-20T14:34:32.664Z", "versionId": "1" }, { "availableMemoryMb": 256, "buildId": "ebcb24aa-439b-4ac5-b9c8-91a9c97594d4", "buildName": "projects/12340011/locations/us-central1/builds/ebcb24aa-439b-4ac5-b9c8-91a9c97594d4", "dockerRegistry": "CONTAINER_REGISTRY", "entryPoint": "HelloWorld", "httpsTrigger": { "securityLevel": "SECURE_ALWAYS", "url": "https://us-central1-gcpdiag-gcf2-aaaa.cloudfunctions.net/allowonly-in-us-central1-a" }, "ingressSettings": "ALLOW_ALL", "labels": { "deployment-tool": "console-cloud" }, "maxInstances": 3000, "name": "projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a", "runtime": "go116", "serviceAccountEmail": "gcpdiag-gcf2-aaaa@appspot.gserviceaccount.com", "sourceUploadUrl": "https://storage.googleapis.com/uploads-383446567905.us-central1.cloudfunctions.appspot.com/cba7573b-28d4-4725-b26e-ae837e1b6113.zip", "status": "OFFLINE", "timeout": "60s", "updateTime": "2022-07-21T17:17:14.429Z", "versionId": "1" } ] } ================================================ FILE: test-data/gcf2/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 9, "message": "The request has violated one or more Org Policies. Please refer to the respective violations for more information." }, "authenticationInfo": { "principalEmail": "bhargavak@premium-cloud-support.com" }, "requestMetadata": { "callerIp": "49.205.147.106", "callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)", "requestAttributes": { "time": "2022-07-21T17:17:48.674636Z", "auth": {} }, "destinationAttributes": {} }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl", "authorizationInfo": [ { "resource": "projects/gcpdiag-gcf2-aaaa/locations/us-central1", "permission": "cloudfunctions.functions.sourceCodeSet", "granted": true, "resourceAttributes": {} } ], "resourceName": "projects/gcpdiag-gcf2-aaaa/locations/us-central1", "request": { "@type": "type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest", "parent": "projects/gcpdiag-gcf2-aaaa/locations/us-central1" }, "resourceLocation": { "currentLocations": [ "us-central1" ] } }, "insertId": "148povgd1p9t", "resource": { "type": "cloud_function", "labels": { "function_name": "", "region": "us-central1", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-21T17:17:48.653705Z", "severity": "ERROR", "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access", "receiveTimestamp": "2022-07-21T17:17:48.924780001Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 3, "message": "Build failed: {\"metrics\":{},\"error\":{\"buildpackId\":\"\",\"buildpackVersion\":\"\",\"errorType\":\"OK\",\"canonicalCode\":\"OK\",\"errorId\":\"\",\"errorMessage\":\"\"},\"stats\":[{\"buildpackId\":\"google.utils.archive-source\",\"buildpackVersion\":\"0.0.1\",\"totalDurationMs\":59,\"userDurationMs\":58},{\"buildpackId\":\"google.go.runtime\",\"buildpackVersion\":\"0.9.1\",\"totalDurationMs\":4165,\"userDurationMs\":4078},{\"buildpackId\":\"google.go.functions-framework\",\"buildpackVersion\":\"0.9.4\",\"totalDurationMs\":8894,\"userDurationMs\":8868},{\"buildpackId\":\"google.go.build\",\"buildpackVersion\":\"0.9.0\",\"totalDurationMs\":4970,\"userDurationMs\":4970},{\"buildpackId\":\"google.utils.label\",\"buildpackVersion\":\"0.0.2\",\"totalDurationMs\":0,\"userDurationMs\":0}],\"warnings\":null,\"customImage\":false}" }, "authenticationInfo": { "principalEmail": "bhargavak@premium-cloud-support.com" }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.CreateFunction", "resourceName": "projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a" }, "insertId": "b41r1ecb0c", "resource": { "type": "cloud_function", "labels": { "region": "us-central1", "function_name": "allowonly-in-us-central1-a", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-21T17:17:14.470345Z", "severity": "ERROR", "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operations/Z2NwZGlhZy1nY2YyLWp4cXJsdHBmL3VzLWNlbnRyYWwxL2FsbG93b25seS1pbi11cy1jZW50cmFsMS1hLzVpOXFha0FDUktz", "producer": "cloudfunctions.googleapis.com", "last": true }, "receiveTimestamp": "2022-07-21T17:17:15.095534131Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "bhargavak@premium-cloud-support.com" }, "requestMetadata": { "callerIp": "49.205.147.106", "callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)", "requestAttributes": { "time": "2022-07-21T17:16:19.256451Z", "reason": "8uSywAYQGg5Db2xpc2V1bSBGbG93cw", "auth": {} }, "destinationAttributes": {} }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.CreateFunction", "authorizationInfo": [ { "resource": "projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a", "permission": "cloudfunctions.functions.create", "granted": true, "resourceAttributes": {} } ], "resourceName": "projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a", "request": { "function": { "serviceAccountEmail": "gcpdiag-gcf2-aaaa@appspot.gserviceaccount.com", "availableMemoryMb": 256, "httpsTrigger": { "securityLevel": "SECURE_ALWAYS" }, "entryPoint": "HelloWorld", "maxInstances": 3000, "sourceUploadUrl": "https://storage.googleapis.com/uploads-383446567905.us-central1.cloudfunctions.appspot.com/cba7573b-28d4-4725-b26e-ae837e1b6113.zip?GoogleAccessId=service-12340011@gcf-admin-robot.iam.gserviceaccount.com&Expires=1658425577&Signature=W5vW12zk8ydOWxRzrQDZ4wjoBBlZ00lhwyLOplzrYFGcQ4at2RZOwEA9GaDsx%2B3M1Yijd1J75GPwsfIbqNesUYozsOAYbuwP8GLUIVMK0iUrYzc6fVsxKFakh4yw1YhaSaYUjaGMO3tSPj%2BPYojOW%2BgITNIR6MprmuruIQ23z0gb0K1bLgSgqmmHlJeiMUroEXGjdmSbX6hf2Js5f9J839ehDr%2B%2BPp3Krt32fHP%2BtiEfEI123Hxw40CiAXzGY8ZeMd6oO7qW0lk52H2wf%2FrefUlOTBDB3s7SKb%2BTkRskcIAgzjeLfLMiylIfYXsPXymJiCXnd32s%2F3jItYoML9PK%2FQ%3D%3D", "dockerRegistry": "CONTAINER_REGISTRY", "labels": { "deployment-tool": "console-cloud" }, "ingressSettings": "ALLOW_ALL", "timeout": "60s", "runtime": "go116", "name": "projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a" }, "@type": "type.googleapis.com/google.cloud.functions.v1.CreateFunctionRequest", "location": "projects/gcpdiag-gcf2-aaaa/locations/us-central1" }, "resourceLocation": { "currentLocations": [ "us-central1" ] } }, "insertId": "w6r5fhd1nmg", "resource": { "type": "cloud_function", "labels": { "function_name": "allowonly-in-us-central1-a", "project_id": "gcpdiag-gcf2-aaaa", "region": "us-central1" } }, "timestamp": "2022-07-21T17:16:18.990548Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operations/Z2NwZGlhZy1nY2YyLWp4cXJsdHBmL3VzLWNlbnRyYWwxL2FsbG93b25seS1pbi11cy1jZW50cmFsMS1hLzVpOXFha0FDUktz", "producer": "cloudfunctions.googleapis.com", "first": true }, "receiveTimestamp": "2022-07-21T17:16:19.447401364Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": {}, "authenticationInfo": { "principalEmail": "bhargavak@premium-cloud-support.com" }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl", "resourceName": "projects/gcpdiag-gcf2-aaaa/locations/us-central1" }, "insertId": "gxhbqrc690", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "us-central1", "function_name": "" } }, "timestamp": "2022-07-21T17:16:17.282217Z", "severity": "INFO", "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access", "operation": { "id": "operations/Z2NwZGlhZy1nY2YyLWp4cXJsdHBmL3VzLWNlbnRyYWwxLy9HY2VqUzhJdDZySQ", "producer": "cloudfunctions.googleapis.com", "last": true }, "receiveTimestamp": "2022-07-21T17:16:18.025883217Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "bhargavak@premium-cloud-support.com" }, "requestMetadata": { "callerIp": "49.205.147.106", "callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)", "requestAttributes": { "time": "2022-07-21T17:16:17.291274Z", "auth": {} }, "destinationAttributes": {} }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl", "authorizationInfo": [ { "resource": "projects/gcpdiag-gcf2-aaaa/locations/us-central1", "permission": "cloudfunctions.functions.sourceCodeSet", "granted": true, "resourceAttributes": {} } ], "resourceName": "projects/gcpdiag-gcf2-aaaa/locations/us-central1", "request": { "@type": "type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest", "parent": "projects/gcpdiag-gcf2-aaaa/locations/us-central1" }, "response": { "uploadUrl": "https://storage.googleapis.com/uploads-383446567905.us-central1.cloudfunctions.appspot.com/cba7573b-28d4-4725-b26e-ae837e1b6113.zip?GoogleAccessId=service-12340011@gcf-admin-robot.iam.gserviceaccount.com&Expires=1658425577&Signature=W5vW12zk8ydOWxRzrQDZ4wjoBBlZ00lhwyLOplzrYFGcQ4at2RZOwEA9GaDsx%2B3M1Yijd1J75GPwsfIbqNesUYozsOAYbuwP8GLUIVMK0iUrYzc6fVsxKFakh4yw1YhaSaYUjaGMO3tSPj%2BPYojOW%2BgITNIR6MprmuruIQ23z0gb0K1bLgSgqmmHlJeiMUroEXGjdmSbX6hf2Js5f9J839ehDr%2B%2BPp3Krt32fHP%2BtiEfEI123Hxw40CiAXzGY8ZeMd6oO7qW0lk52H2wf%2FrefUlOTBDB3s7SKb%2BTkRskcIAgzjeLfLMiylIfYXsPXymJiCXnd32s%2F3jItYoML9PK%2FQ%3D%3D", "@type": "type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlResponse" }, "resourceLocation": { "currentLocations": [ "us-central1" ] } }, "insertId": "1de0dsud1rqe", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "us-central1", "function_name": "" } }, "timestamp": "2022-07-21T17:16:16.864720Z", "severity": "INFO", "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access", "receiveTimestamp": "2022-07-21T17:16:17.984793385Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 9, "message": "The request has violated one or more Org Policies. Please refer to the respective violations for more information." }, "authenticationInfo": { "principalEmail": "bhargavak@premium-cloud-support.com" }, "requestMetadata": { "callerIp": "49.205.147.106", "callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)", "requestAttributes": { "time": "2022-07-21T17:11:35.000649Z", "auth": {} }, "destinationAttributes": {} }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl", "authorizationInfo": [ { "resource": "projects/gcpdiag-gcf2-aaaa/locations/europe-west2", "permission": "cloudfunctions.functions.sourceCodeSet", "granted": true, "resourceAttributes": {} } ], "resourceName": "projects/gcpdiag-gcf2-aaaa/locations/europe-west2", "request": { "parent": "projects/gcpdiag-gcf2-aaaa/locations/europe-west2", "@type": "type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest" }, "resourceLocation": { "currentLocations": [ "europe-west2" ] } }, "insertId": "w6r5fhd1nj7", "resource": { "type": "cloud_function", "labels": { "function_name": "", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-21T17:11:34.989814Z", "severity": "ERROR", "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access", "receiveTimestamp": "2022-07-21T17:11:35.160987808Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": {}, "authenticationInfo": { "principalEmail": "bhargavak@premium-cloud-support.com" }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl", "resourceName": "projects/gcpdiag-gcf2-aaaa/locations/us-central1" }, "insertId": "-w68dawcte8", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "function_name": "", "region": "us-central1" } }, "timestamp": "2022-07-21T13:21:47.358208Z", "severity": "INFO", "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access", "operation": { "id": "operations/Z2NwZGlhZy1nY2YyLWp4cXJsdHBmL3VzLWNlbnRyYWwxLy9ESmpRelRUbWdHbw", "producer": "cloudfunctions.googleapis.com", "last": true }, "receiveTimestamp": "2022-07-21T13:21:47.407497014Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "bhargavak@premium-cloud-support.com" }, "requestMetadata": { "callerIp": "49.205.147.106", "callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)", "requestAttributes": { "time": "2022-07-21T13:21:47.365653Z", "auth": {} }, "destinationAttributes": {} }, "serviceName": "cloudfunctions.googleapis.com", "methodName": "google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl", "authorizationInfo": [ { "resource": "projects/gcpdiag-gcf2-aaaa/locations/us-central1", "permission": "cloudfunctions.functions.sourceCodeSet", "granted": true, "resourceAttributes": {} } ], "resourceName": "projects/gcpdiag-gcf2-aaaa/locations/us-central1", "request": { "parent": "projects/gcpdiag-gcf2-aaaa/locations/us-central1", "@type": "type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest" }, "response": { "@type": "type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlResponse", "uploadUrl": "https://storage.googleapis.com/uploads-383446567905.us-central1.cloudfunctions.appspot.com/95478639-a8dd-4c5b-9e05-0c940caf5ab1.zip?GoogleAccessId=service-12340011@gcf-admin-robot.iam.gserviceaccount.com&Expires=1658411507&Signature=fYWodtZcRpzHz3Q8XJk7hEIovNbSzutfVxgQAiG%2F3q%2B4WJtVj2%2Fd1IocBNH4RJ8wt3k3nQtNTXn5OEpVzeyMVhUk9qJtpawtI6tLPjg5inQc8omCJhmU1O2zBdSNU9xx3f53%2BdCrr3H3cJkSr3rkAqWZZNHLmwpmH8zeS17y828cYFPx61jqAd%2FqGiqKlIAk25%2BpU2PqiRAy%2FUFadsgG3%2F%2Bq1q1ZxQaGbpEyDF7oXVM39S6id3Ssu69sdZ4pLctD4iwp9KbJNoyJL9THvhU8LmkniF4I%2BETb5FIwOMW5v4HKzch57JBRzfaDArJBRwE8o78q6%2FAPQRuxc%2F%2BtwurwDQ%3D%3D" }, "resourceLocation": { "currentLocations": [ "us-central1" ] } }, "insertId": "95nyuud1nfi", "resource": { "type": "cloud_function", "labels": { "region": "us-central1", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "" } }, "timestamp": "2022-07-21T13:21:46.896558Z", "severity": "INFO", "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access", "receiveTimestamp": "2022-07-21T13:21:48.347735141Z" }, { "textPayload": "Function execution took 1415 ms. Finished with status code: 200", "insertId": "z8lpz0f7bq381", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:20:25.578050904Z", "severity": "DEBUG", "labels": { "execution_id": "krdv6djejwxt" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/8ff9dae4374a45deb44c3f23a6fdb70d", "receiveTimestamp": "2022-07-20T18:20:25.744677341Z" }, { "textPayload": "Function execution started", "insertId": "sawsk3g5meacu8", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:20:24.162214011Z", "severity": "DEBUG", "labels": { "execution_id": "krdv6djejwxt" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/8ff9dae4374a45deb44c3f23a6fdb70d", "receiveTimestamp": "2022-07-20T18:20:24.417927578Z" }, { "textPayload": "Function execution took 1377 ms. Finished with status code: 200", "insertId": "116shewf4jvdpu", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:20:21.277142476Z", "severity": "DEBUG", "labels": { "execution_id": "66diijbieyj2" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/d5fa400def3a65c6ccb3c47fcccf469e", "receiveTimestamp": "2022-07-20T18:20:21.415705819Z" }, { "textPayload": "Function execution started", "insertId": "oozzpqf7a41ja", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:20:19.899637231Z", "severity": "DEBUG", "labels": { "execution_id": "66diijbieyj2" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/d5fa400def3a65c6ccb3c47fcccf469e", "receiveTimestamp": "2022-07-20T18:20:20.089175643Z" }, { "textPayload": "Function execution took 1175 ms. Finished with status code: 0", "insertId": "1h0dp5rg2n31du4", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2", "region": "europe-west2" } }, "timestamp": "2022-07-20T18:20:18.449244401Z", "severity": "DEBUG", "labels": { "execution_id": "w1miim9k6foq" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/fec5d7e033f594aaa61661a9988d6851", "receiveTimestamp": "2022-07-20T18:20:18.755143658Z" }, { "textPayload": "Function invocation was interrupted. Error: memory limit exceeded.\n", "insertId": "000000-07bcaa17-d313-40c4-9951-37c5a1988854", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2" } }, "timestamp": "2022-07-20T18:20:18.300702796Z", "severity": "ERROR", "labels": { "execution_id": "w1miim9k6foq" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/fec5d7e033f594aaa61661a9988d6851", "receiveTimestamp": "2022-07-20T18:20:18.852346744Z" }, { "textPayload": "Function execution started", "insertId": "rqxea8f4lyuyu", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:20:17.273833101Z", "severity": "DEBUG", "labels": { "execution_id": "w1miim9k6foq" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/fec5d7e033f594aaa61661a9988d6851", "receiveTimestamp": "2022-07-20T18:20:17.419230687Z" }, { "textPayload": "Function execution took 1272 ms. Finished with status code: 200", "insertId": "wh1ftkf6ck6xv", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:20:15.776647459Z", "severity": "DEBUG", "labels": { "execution_id": "w1miflp8bwu9" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/2f4ba9d1f94ceab78eea675fe8d7b5b8", "receiveTimestamp": "2022-07-20T18:20:16.087264605Z" }, { "textPayload": "Function execution started", "insertId": "tpagglf78r0dt", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:20:14.503763739Z", "severity": "DEBUG", "labels": { "execution_id": "w1miflp8bwu9" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/2f4ba9d1f94ceab78eea675fe8d7b5b8", "receiveTimestamp": "2022-07-20T18:20:14.757665589Z" }, { "textPayload": "Function execution took 1226 ms. Finished with status code: 200", "insertId": "1gfy8bkf71mu05", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:20:11.584766828Z", "severity": "DEBUG", "labels": { "execution_id": "w1mipq5hivgo" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/1966c4876e567294c1b8a4626eb8ab33", "receiveTimestamp": "2022-07-20T18:20:11.763874940Z" }, { "textPayload": "Function execution started", "insertId": "epgffuf3vg2jr", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:20:10.358704487Z", "severity": "DEBUG", "labels": { "execution_id": "w1mipq5hivgo" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/1966c4876e567294c1b8a4626eb8ab33", "receiveTimestamp": "2022-07-20T18:20:10.430819346Z" }, { "textPayload": "Function execution took 1169 ms. Finished with status code: 200", "insertId": "1e0tytfakykr7", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:20:07.477682925Z", "severity": "DEBUG", "labels": { "execution_id": "4f3v5fkax3m7" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/3ff36e586498d95e0a16a657bdda2ec0", "receiveTimestamp": "2022-07-20T18:20:07.765147532Z" }, { "textPayload": "Function invocation was interrupted. Error: memory limit exceeded.\n", "insertId": "000000-a36085e8-1633-4bab-bb63-915008c1d17d", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:20:07.324737342Z", "severity": "ERROR", "labels": { "execution_id": "4f3v5fkax3m7" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/3ff36e586498d95e0a16a657bdda2ec0", "receiveTimestamp": "2022-07-20T18:20:07.755100133Z" }, { "textPayload": "Function execution started", "insertId": "11qhhlvf7cfgah", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:20:06.308348120Z", "severity": "DEBUG", "labels": { "execution_id": "4f3v5fkax3m7" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/3ff36e586498d95e0a16a657bdda2ec0", "receiveTimestamp": "2022-07-20T18:20:06.434035185Z" }, { "textPayload": "Function execution took 1282 ms. Finished with status code: 200", "insertId": "8c1k6af9k7cdc", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:20:03.488632332Z", "severity": "DEBUG", "labels": { "execution_id": "4f3vrmvx02b9" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/cf1a648a6beb4d48c78115c200bdb0ac", "receiveTimestamp": "2022-07-20T18:20:03.765508514Z" }, { "textPayload": "Function execution started", "insertId": "1m9vw7sf70vjud", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:20:02.206413830Z", "severity": "DEBUG", "labels": { "execution_id": "4f3vrmvx02b9" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/cf1a648a6beb4d48c78115c200bdb0ac", "receiveTimestamp": "2022-07-20T18:20:02.437970675Z" }, { "textPayload": "Function execution took 1397 ms. Finished with status code: 200", "insertId": "o53e67g6jhhf2v", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:19:59.343249386Z", "severity": "DEBUG", "labels": { "execution_id": "7hbhc0cczrml" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/02d76e87bdf4396bd7eebee4e5440527", "receiveTimestamp": "2022-07-20T18:19:59.441086222Z" }, { "textPayload": "Function invocation was interrupted. Error: memory limit exceeded.\n", "insertId": "000000-14962ee8-265a-48e4-ab5c-2f7dcfa6a172", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2" } }, "timestamp": "2022-07-20T18:19:59.093176777Z", "severity": "ERROR", "labels": { "execution_id": "7hbhc0cczrml" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/02d76e87bdf4396bd7eebee4e5440527", "receiveTimestamp": "2022-07-20T18:20:00.383040936Z" }, { "textPayload": "Function execution started", "insertId": "7i67elg2lcinwd", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:57.945675506Z", "severity": "DEBUG", "labels": { "execution_id": "7hbhc0cczrml" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/02d76e87bdf4396bd7eebee4e5440527", "receiveTimestamp": "2022-07-20T18:19:58.108924897Z" }, { "textPayload": "Function execution took 1247 ms. Finished with status code: 0", "insertId": "vmql3lf68tp39", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:19:55.055388756Z", "severity": "DEBUG", "labels": { "execution_id": "w5laaqtgif43" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/4321ed0bd46a2ad4e0c1c0607b22173c", "receiveTimestamp": "2022-07-20T18:19:55.113151260Z" }, { "textPayload": "Function invocation was interrupted. Error: memory limit exceeded.\n", "insertId": "000000-8aea88f4-6908-4b19-b613-d0c2731da5f1", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:19:54.901914686Z", "severity": "ERROR", "labels": { "execution_id": "w5laaqtgif43" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/4321ed0bd46a2ad4e0c1c0607b22173c", "receiveTimestamp": "2022-07-20T18:19:55.245243907Z" }, { "textPayload": "Function execution started", "insertId": "17acllif75q1ew", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2", "region": "europe-west2" } }, "timestamp": "2022-07-20T18:19:53.807762995Z", "severity": "DEBUG", "labels": { "execution_id": "w5laaqtgif43" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/4321ed0bd46a2ad4e0c1c0607b22173c", "receiveTimestamp": "2022-07-20T18:19:54.112667356Z" }, { "textPayload": "Function execution took 1242 ms. Finished with status code: 200", "insertId": "1w9a5jxg3mii5tr", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:50.977777843Z", "severity": "DEBUG", "labels": { "execution_id": "w5layj8e3mal" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/e11cb896f1d3fa0519c080ad20243f51", "receiveTimestamp": "2022-07-20T18:19:51.115721293Z" }, { "textPayload": "Function execution started", "insertId": "1xxfskqf4d1kwr", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:19:49.735046429Z", "severity": "DEBUG", "labels": { "execution_id": "w5layj8e3mal" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/e11cb896f1d3fa0519c080ad20243f51", "receiveTimestamp": "2022-07-20T18:19:49.778952566Z" }, { "textPayload": "Function execution took 1238 ms. Finished with status code: 0", "insertId": "z8lpz0f7blrll", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2", "region": "europe-west2" } }, "timestamp": "2022-07-20T18:19:46.865175781Z", "severity": "DEBUG", "labels": { "execution_id": "qnwb7a3a2b3g" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/be1dbfb8cb3b437feb2002c769733873", "receiveTimestamp": "2022-07-20T18:19:47.121158763Z" }, { "textPayload": "Function invocation was interrupted. Error: memory limit exceeded.\n", "insertId": "000000-0a51268d-d283-45b8-9ed9-099adadcdcf2", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:19:46.707346197Z", "severity": "ERROR", "labels": { "execution_id": "qnwb7a3a2b3g" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/be1dbfb8cb3b437feb2002c769733873", "receiveTimestamp": "2022-07-20T18:19:47.082722874Z" }, { "textPayload": "Function execution started", "insertId": "116shewf4jquuy", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:45.626333412Z", "severity": "DEBUG", "labels": { "execution_id": "qnwb7a3a2b3g" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/be1dbfb8cb3b437feb2002c769733873", "receiveTimestamp": "2022-07-20T18:19:45.788225044Z" }, { "textPayload": "Function execution took 1052 ms. Finished with status code: 200", "insertId": "1m029y5f74gl2k", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:42.583104354Z", "severity": "DEBUG", "labels": { "execution_id": "qnwb2cjyfffx" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/81926f0ca073e05a83d1ff1292a792bb", "receiveTimestamp": "2022-07-20T18:19:42.791945488Z" }, { "textPayload": "Function execution started", "insertId": "lnc8b0g1571bet", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:41.530504553Z", "severity": "DEBUG", "labels": { "execution_id": "qnwb2cjyfffx" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/81926f0ca073e05a83d1ff1292a792bb", "receiveTimestamp": "2022-07-20T18:19:41.789709003Z" }, { "textPayload": "Function execution took 1261 ms. Finished with status code: 200", "insertId": "rqxea8f4luu5f", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:40.077596453Z", "severity": "DEBUG", "labels": { "execution_id": "qnwb20qmimhy" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/8a0200e844530c261811b376a210238d", "receiveTimestamp": "2022-07-20T18:19:40.124975595Z" }, { "textPayload": "Function execution started", "insertId": "wh1ftkf6cfkml", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:38.816066542Z", "severity": "DEBUG", "labels": { "execution_id": "qnwb20qmimhy" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/8a0200e844530c261811b376a210238d", "receiveTimestamp": "2022-07-20T18:19:39.123198288Z" }, { "textPayload": "Function execution took 1240 ms. Finished with status code: 200", "insertId": "zir5ljf6c484o", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:19:35.978719689Z", "severity": "DEBUG", "labels": { "execution_id": "qnwb7rjjyh0h" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/e72c649c184ae23e188c2b5beb054128", "receiveTimestamp": "2022-07-20T18:19:36.128124231Z" }, { "textPayload": "Function execution started", "insertId": "7rpxcwg5vf2o5o", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:34.737885850Z", "severity": "DEBUG", "labels": { "execution_id": "qnwb7rjjyh0h" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/e72c649c184ae23e188c2b5beb054128", "receiveTimestamp": "2022-07-20T18:19:34.798657118Z" }, { "textPayload": "Function execution took 1313 ms. Finished with status code: 200", "insertId": "1ubsmarg2jf2jo7", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:19:33.269623420Z", "severity": "DEBUG", "labels": { "execution_id": "po6i149qvm9r" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/a33d3e03a7cf75afa4c02789864df3d6", "receiveTimestamp": "2022-07-20T18:19:33.466340500Z" }, { "textPayload": "Function invocation was interrupted. Error: memory limit exceeded.\n", "insertId": "000000-1662203b-a967-41bc-9e39-3f6857c08d58", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:33.110231276Z", "severity": "ERROR", "labels": { "execution_id": "po6i149qvm9r" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/a33d3e03a7cf75afa4c02789864df3d6", "receiveTimestamp": "2022-07-20T18:19:34.300203484Z" }, { "textPayload": "Function execution started", "insertId": "tp7p41f5xunfb", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:31.955934062Z", "severity": "DEBUG", "labels": { "execution_id": "po6i149qvm9r" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/a33d3e03a7cf75afa4c02789864df3d6", "receiveTimestamp": "2022-07-20T18:19:32.133475267Z" }, { "textPayload": "Function execution took 1013 ms. Finished with status code: 200", "insertId": "8c1k6af9k46lg", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:30.476142859Z", "severity": "DEBUG", "labels": { "execution_id": "po6iap8z4mvg" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/784135fd7ca775bdc61f449c82d167a4", "receiveTimestamp": "2022-07-20T18:19:30.802974183Z" }, { "textPayload": "Function execution started", "insertId": "s1fb6ng1y1i3sk", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "project_id": "gcpdiag-gcf2-aaaa", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:29.463068362Z", "severity": "DEBUG", "labels": { "execution_id": "po6iap8z4mvg" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/784135fd7ca775bdc61f449c82d167a4", "receiveTimestamp": "2022-07-20T18:19:29.466212860Z" }, { "textPayload": "Function execution took 1134 ms. Finished with status code: 200", "insertId": "wqv9z4f6c461k", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2" } }, "timestamp": "2022-07-20T18:19:26.588031047Z", "severity": "DEBUG", "labels": { "execution_id": "po6ichifbwiy" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/b9ff41787778e002730306a68fe78c4a", "receiveTimestamp": "2022-07-20T18:19:26.803772189Z" }, { "textPayload": "Function execution started", "insertId": "z8rrk5f6bnrhp", "resource": { "type": "cloud_function", "labels": { "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2" } }, "timestamp": "2022-07-20T18:19:25.453856824Z", "severity": "DEBUG", "labels": { "execution_id": "po6ichifbwiy" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/b9ff41787778e002730306a68fe78c4a", "receiveTimestamp": "2022-07-20T18:19:25.474413268Z" }, { "textPayload": "Function execution took 1105 ms. Finished with status code: 200", "insertId": "9zu6iyf91bfnk", "resource": { "type": "cloud_function", "labels": { "region": "europe-west2", "function_name": "gcf2", "project_id": "gcpdiag-gcf2-aaaa" } }, "timestamp": "2022-07-20T18:19:23.989689274Z", "severity": "DEBUG", "labels": { "execution_id": "po6iey4isns4" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/0788de9e2bbe7e6f5546e68439d84a5f", "receiveTimestamp": "2022-07-20T18:19:24.138510260Z" }, { "textPayload": "Function execution started", "insertId": "1qg1fq3f4o2527", "resource": { "type": "cloud_function", "labels": { "project_id": "gcpdiag-gcf2-aaaa", "region": "europe-west2", "function_name": "gcf2" } }, "timestamp": "2022-07-20T18:19:22.884269309Z", "severity": "DEBUG", "labels": { "execution_id": "po6iey4isns4" }, "logName": "projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions", "trace": "projects/gcpdiag-gcf2-aaaa/traces/0788de9e2bbe7e6f5546e68439d84a5f", "receiveTimestamp": "2022-07-20T18:19:23.144910967Z" } ], "nextPageToken": "EAE4vaP9oda7wJFTSswFIiAiEAoOMXFnMWZxM2Y0bzI1MjcqDAiqjuGWBhD9wdOlA0qnBQqBBUr-BADQLyAGQzUQD9BZrZ2IU7SShpruXcL7PXlrH7GGisGPOB_HVImeSgI9TwQh37IyqyOJAW-UHmZ7ko_6aVY7ZRHe_uu36aCKn3byz8k96gAZdthBmE_Ntn9FQidzx8jQs-hVWEwqIZKBbcQfZ5Yya-xCXI0KllUX0Ipof6OA9Jv21vbK8K2JfNpQcmARLLcAjfOFCXwcyF4BYtFs8xt6yTM6oK9RE5j2Q9Xvs6rsQE-M2WWHOFsPc1tqt4agsCkbbYob8pmNhV349TGHjq3opk1RYvDD_FCMbwDtEc7S60nyJTiQ3YGGied5VoRRq1dSss-eyzk6DH6f_K04B39O9q-2FosItdgQI2eYRWrGz8fRTW-2ctbl_VECVH9AdAV-0zew7V0bSYGuUX132QJouud8LA-1X_-BXhWtFB_YThELHqOhk-nSBnd2MJn9S0wewGJKs2EQkJFsyR_UF8ykLe7TqtqlMp0Ac6XFySy5NS_hz7Sy71dF3bzf2xWjLtO7r0EAA7RRrl0MxQY_ylOq1USHAJK1Nd6wcgaYzDBPBrZNV0sDUR7xLwMNfLgxlyfU8YHfSajj7TwuFuHSBzsCxWuXl_kL0onN58nWyz8oVfKbBLZ0V8BIdojrvVubg94KUXNZ4jeWtMRpRazcTKGGdj90tUI9DxEIqkxOOOZuG_EK9AzqW6B_VjaQ28SPsXBy11BElgNjRkrAwTrXy3Bi1FeJc2Kwx68fJ_OVKf7ujM2Ys5vsfrhY7xuScdwIP0XukyY09_vVCV64t-olp79tvTf72_T8yZCWl9AtbAuMMsf8X-DEtqbJAzmhlEZd29fWTuKAf8uM0-6UValiT8BfEhYaBgiAzeCWBiIMCP_v5ZYGEP-T69wDUNjXoeDZ9LqEsAFSBwjUzvXLgxBgis6bxcXLw6eoAWocCgwIrIXrlgYQo_76xAESCAgCELyMyvgBGDIgAA" } ================================================ FILE: test-data/gcf2/json-dumps/project.json ================================================ { "name": "projects/12340011", "parent": "folders/373737373737", "projectId": "gcpdiag-gcf2-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - gcf2", "createTime": "2022-07-20T14:31:40.566Z", "updateTime": "2022-07-20T14:31:42.430Z", "etag": "hXVLwy0HyzXyIqWR2/n7eQ==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gcf2/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340011/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/cloudfunctions.googleapis.com", "config": { "name": "cloudfunctions.googleapis.com", "title": "Cloud Functions API", "documentation": { "summary": "Manages lightweight user-provided functions executed in response to events." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudfunctions.googleapis.com/function", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloudfunctions.googleapis.com/function_name" } ] }, { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudfunctions.googleapis.com/function", "metrics": [ "cloudfunctions.googleapis.com/function/execution_times", "cloudfunctions.googleapis.com/function/execution_count", "cloudfunctions.googleapis.com/function/user_memory_bytes", "cloudfunctions.googleapis.com/function/network_egress", "cloudfunctions.googleapis.com/function/active_instances", "cloudfunctions.googleapis.com/function/execution_delays", "cloudfunctions.googleapis.com/function/execution_count_internal", "cloudfunctions.googleapis.com/function/supervisor_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_memory_bytes", "cloudfunctions.googleapis.com/function/user_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count", "cloudfunctions.googleapis.com/function/supervisor_controlled_death_count", "cloudfunctions.googleapis.com/function/supervisor_report_count", "cloudfunctions.googleapis.com/function/supervisor_report_latencies", "cloudfunctions.googleapis.com/function/supervisor_phase_latencies" ] }, { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/cloudresourcemanager.googleapis.com", "config": { "name": "cloudresourcemanager.googleapis.com", "title": "Cloud Resource Manager API", "documentation": { "summary": "Creates, reads, and updates metadata for Google Cloud Platform resource containers." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/serviceusage.googleapis.com", "config": { "name": "serviceusage.googleapis.com", "title": "Service Usage API", "documentation": { "summary": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/source.googleapis.com", "config": { "name": "source.googleapis.com", "title": "Legacy Cloud Source Repositories API", "documentation": { "summary": "Access source code repositories hosted by Google." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340011" }, { "name": "projects/12340011/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340011" } ] } ================================================ FILE: test-data/gcf2/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - gcf2" project_id = "gcpdiag-gcf2-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "cloudbuild" { project = google_project.project.project_id service = "cloudbuild.googleapis.com" } resource "google_project_service" "cloudfunctions" { project = google_project.project.project_id service = "cloudfunctions.googleapis.com" depends_on = [google_project_service.cloudbuild] } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gcf2/sourcecode/memalloc.py ================================================ # Copyright 2021 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. # Lint as: python3 """ Allocates memory to bytearray based on payload specified in HTTP Request. Args: request (flask.Request): HTTP request object. Returns: sum_dict: Python Dictionary containing payload:bytearray memory size (key/value format) """ import sys def gcf_mem_alloc(request): request_json = request.get_json() if request.args and 'payload' in request.args: return request.args.get('payload') elif request_json and 'payload' in request_json: num = int(request_json['payload']) sum_dict = {} x = bytearray(1024 * 1024 * num) sum_dict[num] = str(sys.getsizeof(x)) del x return sum_dict else: return 'Payload not found. Please check again!' ================================================ FILE: test-data/gcf2/sourcecode/requirements.txt ================================================ ================================================ FILE: test-data/gcf2/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/gcs1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) BUCKET_WITH_RETENTION := $(shell terraform output -raw bucket_with_retention) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner BUCKET_ID = gcpdiag-gcs1bucket-aaaa FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340008 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/storage.json \ json-dumps/bucket-gcpdiag-gcs1bucket2-aaaa.json \ json-dumps/bucket-roles.json json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/storage.json: $(CURL) -fv \ 'https://storage.googleapis.com/storage/v1/b?project=$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/bucket-roles.json: $(CURL) -fv \ 'https://storage.googleapis.com/storage/v1/b/${BUCKET_ID}/iam' \ | $(SED_SUBST_FAKE) >$@ json-dumps/bucket-gcpdiag-gcs1bucket2-aaaa.json: $(CURL) -fv \ 'https://storage.googleapis.com/storage/v1/b/${BUCKET_WITH_RETENTION}' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gcs1/gcs1.tf ================================================ resource "google_storage_bucket" "gcs1bucket" { project = google_project.project.project_id name = "gcpdiag-gcs1bucket-${random_string.project_id_suffix.id}" location = "US" storage_class = "STANDARD" } resource "google_storage_bucket" "gcs1bucket-labels" { project = google_project.project.project_id name = "gcpdiag-gcs1bucket-labels-${random_string.project_id_suffix.id}" location = "US" storage_class = "STANDARD" labels = { "label1" = "value1" } } resource "google_storage_bucket" "bucket_with_retention" { project = google_project.project.project_id name = "gcpdiag-gcs1bucket2-${random_string.project_id_suffix.id}" location = "US" storage_class = "STANDARD" retention_policy { retention_period = 10 } } output "bucket_with_retention" { value = google_storage_bucket.bucket_with_retention.name } ================================================ FILE: test-data/gcs1/json-dumps/bucket-gcpdiag-gcs1bucket2-aaaa.json ================================================ { "kind": "storage#bucket", "selfLink": "https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket2-aaaa", "id": "gcpdiag-gcs1bucket2-aaaa", "name": "gcpdiag-gcs1bucket2-aaaa", "projectNumber": "12340008", "metageneration": "1", "location": "US", "storageClass": "STANDARD", "etag": "CAE=", "timeCreated": "2022-05-20T11:09:54.481Z", "updated": "2022-05-20T11:09:54.481Z", "retentionPolicy": { "retentionPeriod": "10", "effectiveTime": "2022-05-20T11:09:54.481Z" }, "iamConfiguration": { "bucketPolicyOnly": { "enabled": false }, "uniformBucketLevelAccess": { "enabled": false }, "publicAccessPrevention": "inherited" }, "locationType": "multi-region", "rpo": "DEFAULT" } ================================================ FILE: test-data/gcs1/json-dumps/bucket-roles.json ================================================ { "kind": "storage#policy", "resourceId": "projects/_/buckets/gcpdiag-gcs1bucket-aaaa", "version": 1, "etag": "CAE=", "bindings": [ { "role": "roles/storage.legacyBucketOwner", "members": [ "projectEditor:gcpdiag-gcs1-aaaa", "projectOwner:gcpdiag-gcs1-aaaa" ] }, { "role": "roles/storage.legacyBucketReader", "members": [ "projectViewer:gcpdiag-gcs1-aaaa" ] } ] } ================================================ FILE: test-data/gcs1/json-dumps/project.json ================================================ { "name": "projects/12340008", "parent": "organizations/11112222", "projectId": "gcpdiag-gcs1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - gcs1", "createTime": "2022-01-01T01:44:52.786Z", "updateTime": "2022-01-01T01:44:54.432Z", "etag": "1k3YTPogq+IJ3F8nGjfbqg==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gcs1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340008/services/serviceusage.googleapis.com", "config": { "name": "serviceusage.googleapis.com", "title": "Service Usage API", "documentation": { "summary": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/storage.googleapis.com", "config": { "name": "storage.googleapis.com", "title": "Cloud Storage API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "storage.googleapis.com/StorageLocation", "displayName": "Storage Location of GCS Buckets", "description": "Storage Location of GCS Buckets.", "labels": [ { "key": "resource_container", "description": "The project number of the bucket." }, { "key": "location", "description": "The storage location of the bucket." } ], "launchStage": "EARLY_ACCESS" }, { "type": "storage.googleapis.com/Location", "displayName": "GCS Location", "description": "GCS Location.", "labels": [ { "key": "resource_container", "description": "The project number of the bucket." }, { "key": "location", "description": "The location of the bucket." } ], "launchStage": "ALPHA" }, { "type": "storage.googleapis.com/storage", "labels": [ { "key": "storage.googleapis.com/bucket_name" }, { "key": "storage.googleapis.com/bucket_storage_class" }, { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/project" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "storage.googleapis.com/storage", "metrics": [ "storage.googleapis.com/storage/total_bytes", "storage.googleapis.com/storage/object_count" ] }, { "monitoredResource": "storage.googleapis.com/StorageLocation", "metrics": [ "storage.googleapis.com/quota/in_multi_region_read_bandwidth/exceeded", "storage.googleapis.com/quota/in_multi_region_read_bandwidth/usage", "storage.googleapis.com/quota/in_multi_region_read_bandwidth_preview/exceeded", "storage.googleapis.com/quota/in_multi_region_read_bandwidth_preview/usage" ] }, { "monitoredResource": "storage.googleapis.com/Location", "metrics": [ "storage.googleapis.com/quota/turbo_replication_ingress_bandwidth/exceeded", "storage.googleapis.com/quota/turbo_replication_ingress_bandwidth/usage" ] }, { "monitoredResource": "storage.googleapis.com/StorageLocation", "metrics": [ "storage.googleapis.com/quota/in_multi_region_read_bandwidth/limit", "storage.googleapis.com/quota/in_multi_region_read_bandwidth_preview/limit" ] }, { "monitoredResource": "storage.googleapis.com/Location", "metrics": [ "storage.googleapis.com/quota/turbo_replication_ingress_bandwidth/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340008" } ] } ================================================ FILE: test-data/gcs1/json-dumps/storage.json ================================================ { "kind": "storage#buckets", "items": [ { "kind": "storage#bucket", "selfLink": "https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket-aaaa", "id": "gcpdiag-gcs1bucket-aaaa", "name": "gcpdiag-gcs1bucket-aaaa", "projectNumber": "12340008", "metageneration": "1", "location": "US", "storageClass": "STANDARD", "etag": "CAE=", "timeCreated": "2022-05-20T11:09:54.411Z", "updated": "2022-05-20T11:09:54.411Z", "iamConfiguration": { "bucketPolicyOnly": { "enabled": false }, "uniformBucketLevelAccess": { "enabled": false }, "publicAccessPrevention": "inherited" }, "locationType": "multi-region", "rpo": "DEFAULT" }, { "kind": "storage#bucket", "selfLink": "https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket-labels-aaaa", "id": "gcpdiag-gcs1bucket-labels-aaaa", "name": "gcpdiag-gcs1bucket-labels-aaaa", "projectNumber": "12340008", "metageneration": "1", "location": "US", "storageClass": "STANDARD", "etag": "CAE=", "timeCreated": "2022-05-20T11:32:54.003Z", "updated": "2022-05-20T11:32:54.003Z", "labels": { "label1": "value1" }, "iamConfiguration": { "bucketPolicyOnly": { "enabled": false }, "uniformBucketLevelAccess": { "enabled": false }, "publicAccessPrevention": "inherited" }, "locationType": "multi-region", "rpo": "DEFAULT" }, { "kind": "storage#bucket", "selfLink": "https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket2-aaaa", "id": "gcpdiag-gcs1bucket2-aaaa", "name": "gcpdiag-gcs1bucket2-aaaa", "projectNumber": "12340008", "metageneration": "1", "location": "US", "storageClass": "STANDARD", "etag": "CAE=", "timeCreated": "2022-05-20T11:09:54.481Z", "updated": "2022-05-20T11:09:54.481Z", "retentionPolicy": { "retentionPeriod": "10", "effectiveTime": "2022-05-20T11:09:54.481Z" }, "iamConfiguration": { "bucketPolicyOnly": { "enabled": false }, "uniformBucketLevelAccess": { "enabled": false }, "publicAccessPrevention": "inherited" }, "locationType": "multi-region", "rpo": "DEFAULT" } ] } ================================================ FILE: test-data/gcs1/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - gcs1" project_id = "gcpdiag-gcs1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "storage" { project = google_project.project.project_id service = "storage.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gcs1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/gke1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) GKE2_SA := $(shell terraform output -raw gke2_sa) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = europe-west4 ZONE_1 = europe-west4-a ZONE_EMPTY = europe-west1-b SUBNETWORK_1 = gke1-subnet FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340002 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-interconnects.json \ json-dumps/compute-migs-$(ZONE_1).json \ json-dumps/compute-migs-empty.json \ json-dumps/compute-disks-$(ZONE_1).json \ json-dumps/compute-disks-empty.json \ json-dumps/compute-igs-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-subnetworks-aggregated.json \ json-dumps/compute-subnetwork-policy.json \ json-dumps/compute-templates.json \ json-dumps/compute-regions.json \ json-dumps/compute-zones.json \ json-dumps/compute-routers-europe-west4.json \ json-dumps/container-clusters.json \ json-dumps/container-server-config-$(REGION_1).json \ json-dumps/container-server-config-$(ZONE_1).json \ json-dumps/iam-policy.json \ json-dumps/iam-roles-custom.json \ json-dumps/iam-roles-predefined-1.json.gz \ json-dumps/iam-roles-predefined-2.json.gz \ json-dumps/iam-roles-get.json \ json-dumps/iam-service-accounts.json \ json-dumps/iam-service-account-policy.json \ json-dumps/logging-entries-1.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-instances-aggregated.json \ json-dumps/compute-migs-aggregated.json \ json-dumps/org-constraints.json \ json-dumps/org-constraint-custom.arEnforceImmutableTags.json include ../Makefile.inc # compute.googleapis.com json-dumps/compute-regions.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-zones.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-$(ZONE_1).json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances' \ | $(JSON_CLEANER) instances \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-migs-$(ZONE_1).json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instanceGroupManagers' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-empty.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instances' \ | $(JSON_CLEANER) instances \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-migs-empty.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instanceGroupManagers' \ | $(JSON_CLEANER) instances \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-igs-empty.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instanceGroups' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-project.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)' \ | $(JSON_CLEANER) compute-project \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-network-default.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/default' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-effective-firewalls-default.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/default/getEffectiveFirewalls' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-templates.json: ZONE=$(subst json-dumps/,,$%); \ $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/instanceTemplates' \ | $(JSON_CLEANER) compute-templates \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-subnetwork-policy.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/subnetworks/$(SUBNETWORK_1)/getIamPolicy' \ --header "Content-Type:text/json" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-routers-%.json: REGION=$(subst json-dumps/,,$*); \ $(CURL) -fsS \ "https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$$REGION/routers" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-disks-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/disks' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-disks-empty.json: json-dumps/compute-disks-$(ZONE_EMPTY).json ln -sf $(notdir $<) $@ # cloudresourcemanager.googleapis.com json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # iam.googleapis.com json-dumps/iam-roles-predefined-1.json.gz: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/roles?view=FULL&pageSize=500' \ | $(SED_SUBST_FAKE) \ | gzip -c >$@ json-dumps/iam-roles-predefined-2.json.gz: json-dumps/iam-roles-predefined-1.json.gz $(CURL) -fsS \ 'https://iam.googleapis.com/v1/roles?view=FULL&pageSize=500&pageToken=$(shell zcat json-dumps/iam-roles-predefined-1.json.gz | jq -r '.nextPageToken')' \ | $(SED_SUBST_FAKE) \ | gzip -c >$@ json-dumps/iam-roles-custom.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/roles?view=FULL&pageSize=500' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-roles-get.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/roles/container.nodeServiceAgent' \ | $(SED_SUBST_FAKE) \ | jq '{"roles": [.]}' >$@.tmp $(CURL) -fsS \ 'https://iam.googleapis.com/v1/roles/container.defaultNodeServiceAccount' \ | $(SED_SUBST_FAKE) \ | jq '{"roles": [.]}' >>$@.tmp jq -s '. | {"roles": map(.)}' $@.tmp > $@ rm $@.tmp json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-account-policy.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/$(GKE2_SA):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # container.googleapis.com json-dumps/container-clusters.json: $(CURL) -fsS \ 'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/clusters' \ | $(JSON_CLEANER) clusters \ | $(SED_SUBST_FAKE) >$@ json-dumps/container-server-config-$(REGION_1).json: $(CURL) -fsS \ 'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/serverConfig' \ | $(SED_SUBST_FAKE) >$@ json-dumps/container-server-config-$(ZONE_1).json: $(CURL) -fsS \ 'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/serverconfig' \ | $(SED_SUBST_FAKE) >$@ # serviceusage.googleapis.com json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ # If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found. define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " timestamp > \"2021-11-24T00:00:00+00:00\" AND timestamp < \"2021-11-25T00:00:00+00:00\" AND resource.type=\"gce_instance_group_manager\" AND operation.last=\"true\" AND log_id(\"cloudaudit.googleapis.com%2Factivity\") " } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gke1/firewall.tf.old ================================================ resource "google_compute_firewall" "fw-test-800" { project = google_project.project.project_id name = "fw-test-800" network = "default" priority = 800 source_ranges = ["10.100.0.0/24"] deny { protocol = "tcp" ports = ["1001-1002"] } } resource "google_compute_firewall" "fw-test-900" { project = google_project.project.project_id name = "fw-test-900" network = "default" priority = 900 source_ranges = ["10.100.0.0/24"] source_tags = ["foobar", "foo", "bar"] allow { protocol = "tcp" ports = ["1234", "1000-2000", "2033"] } } resource "google_compute_firewall" "fw-test-901" { project = google_project.project.project_id name = "fw-test-901" network = "default" priority = 901 source_service_accounts = ["service-12340002@compute-system.iam.gserviceaccount.com"] allow { protocol = "tcp" ports = ["1234", "1000-2000", "2033"] } } resource "google_compute_firewall" "fw-test-950" { project = google_project.project.project_id name = "fw-test-950" network = "default" priority = 950 source_ranges = ["0.0.0.0/0"] deny { protocol = "tcp" ports = ["1006"] } } ================================================ FILE: test-data/gke1/gke1.tf ================================================ /** * Copyright 2021 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. */ # GKE cluster with monitoring disabled # And with small pod CIDR resource "google_service_account" "gke1_sa" { project = google_project.project.project_id account_id = "gke1sa" display_name = "GKE 1 Service Account" } resource "google_compute_subnetwork" "secondary_ip_range_pod" { project = google_project.project.project_id depends_on = [google_project_service.compute] network = "default" name = "gke1-subnet" ip_cidr_range = "192.168.0.0/24" region = "europe-west4" secondary_ip_range { range_name = "gke1-secondary-range-pod" ip_cidr_range = "192.168.1.0/24" } secondary_ip_range { range_name = "gke1-secondary-range-svc" ip_cidr_range = "192.168.2.0/24" } } resource "google_compute_subnetwork_iam_member" "gke1_subnet" { project = google_compute_subnetwork.secondary_ip_range_pod.project region = google_compute_subnetwork.secondary_ip_range_pod.region subnetwork = google_compute_subnetwork.secondary_ip_range_pod.name role = "roles/compute.networkUser" member = "serviceAccount:${google_service_account.gke1_sa.email}" } resource "google_container_cluster" "gke1" { provider = google-beta project = google_project.project.project_id depends_on = [google_project_service.container] name = "gke1" subnetwork = google_compute_subnetwork.secondary_ip_range_pod.name location = "europe-west4-a" release_channel { channel = "UNSPECIFIED" } ip_allocation_policy { cluster_secondary_range_name = "gke1-secondary-range-pod" services_secondary_range_name = "gke1-secondary-range-svc" } initial_node_count = 1 cluster_telemetry { type = "DISABLED" } resource_labels = { foo = "bar" } addons_config { http_load_balancing { disabled = true } } } ================================================ FILE: test-data/gke1/gke2.tf ================================================ /** * Copyright 2021 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. */ # This custom role is used to test iam.py's code that deals # with verifying permissions including custom roles. resource "google_project_iam_custom_role" "gke2_custom_role" { project = google_project.project.project_id role_id = "gke2_custom_role" title = "GKE Custom Role" description = "A description" permissions = [ # monitoring.viewer "cloudnotifications.activities.list", "monitoring.alertPolicies.get", "monitoring.alertPolicies.list", "monitoring.dashboards.get", "monitoring.dashboards.list", "monitoring.groups.get", "monitoring.groups.list", "monitoring.metricDescriptors.get", "monitoring.metricDescriptors.list", "monitoring.monitoredResourceDescriptors.get", "monitoring.monitoredResourceDescriptors.list", "monitoring.notificationChannelDescriptors.get", "monitoring.notificationChannelDescriptors.list", "monitoring.notificationChannels.get", "monitoring.notificationChannels.list", "monitoring.publicWidgets.get", "monitoring.publicWidgets.list", "monitoring.services.get", "monitoring.services.list", "monitoring.slos.get", "monitoring.slos.list", "monitoring.timeSeries.list", "monitoring.uptimeCheckConfigs.get", "monitoring.uptimeCheckConfigs.list", # only for org-level: #"resourcemanager.projects.get", #"resourcemanager.projects.list", # monitoring.metricWriter "monitoring.metricDescriptors.create", "monitoring.metricDescriptors.get", "monitoring.metricDescriptors.list", "monitoring.monitoredResourceDescriptors.get", "monitoring.monitoredResourceDescriptors.list", "monitoring.timeSeries.create", #"logging.logWriter", "logging.logEntries.create", #"stackdriver.resourceMetadata.writer" "stackdriver.resourceMetadata.write", "opsconfigmonitoring.resourceMetadata.list", # container.nodeServiceAgent "autoscaling.sites.writeMetrics", "logging.logEntries.create", "monitoring.metricDescriptors.create", "monitoring.metricDescriptors.list", "monitoring.timeSeries.create", #"resourcemanager.projects.get", #"resourcemanager.projects.list", "storage.objects.get", "storage.objects.list", ] } resource "google_service_account" "gke2_sa" { project = google_project.project.project_id account_id = "gke2sa" display_name = "GKE Service Account" } resource "google_project_iam_member" "gke2_sa" { project = google_project.project.project_id role = google_project_iam_custom_role.gke2_custom_role.name member = "serviceAccount:${google_service_account.gke2_sa.email}" } resource "google_service_account_iam_member" "gke2_sa" { service_account_id = google_service_account.gke2_sa.name role = "roles/iam.serviceAccountUser" member = "serviceAccount:${google_service_account.gke2_sa.email}" } # GKE cluster with monitoring enabled and service account using a custom role resource "google_container_cluster" "gke2" { provider = google-beta project = google_project.project.project_id depends_on = [google_project_service.container] name = "gke2" location = "europe-west4" initial_node_count = 1 release_channel { channel = "UNSPECIFIED" } cluster_telemetry { type = "SYSTEM_ONLY" } node_config { service_account = google_service_account.gke2_sa.email oauth_scopes = [ "https://www.googleapis.com/auth/cloud-platform" ] tags = ["gke-gke2-custom-tag"] } workload_identity_config { workload_pool = "${google_project.project.project_id}.svc.id.goog" } } resource "google_container_node_pool" "low_pod_per_node_pool" { name = "low-pod-per-node-pool" project = google_project.project.project_id cluster = google_container_cluster.gke2.id node_count = 1 max_pods_per_node = 8 node_config { preemptible = true } } # firewall configuration used for connectivity testing resource "google_compute_firewall" "vms_test_deny" { name = "gke-gke2-vms-test-deny" network = "default" project = google_project.project.project_id priority = 900 deny { ports = ["1-1000"] protocol = "udp" } source_ranges = ["10.128.0.0/9"] target_tags = google_container_cluster.gke2.node_config[0].tags depends_on = [google_container_cluster.gke2] } resource "google_compute_firewall" "all_test_deny" { name = "gke-gke2-all-test-deny" network = "default" project = google_project.project.project_id priority = 900 deny { ports = ["1-1000"] protocol = "tcp" } source_ranges = ["10.0.0.0/8"] target_tags = google_container_cluster.gke2.node_config[0].tags depends_on = [google_container_cluster.gke2] } output "gke2_sa" { value = google_service_account.gke2_sa.name } ================================================ FILE: test-data/gke1/gke3.tf ================================================ /** * Copyright 2021 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. */ # Another custom role with just a few permissions resource "google_project_iam_custom_role" "gke3_custom_role" { project = google_project.project.project_id role_id = "gke3_custom_role" title = "GKE 3 Custom Role" description = "A description" permissions = [ # monitoring.viewer "cloudnotifications.activities.list", ] } resource "google_service_account" "gke3_sa" { project = google_project.project.project_id account_id = "gke3sa" display_name = "GKE 3 Service Account" } resource "google_project_iam_member" "gke3_sa" { project = google_project.project.project_id role = google_project_iam_custom_role.gke3_custom_role.name member = "serviceAccount:${google_service_account.gke3_sa.email}" } resource "google_container_cluster" "gke3" { provider = google-beta project = google_project.project.project_id depends_on = [google_project_service.container] name = "gke3" location = "europe-west4" initial_node_count = 5 cluster_ipv4_cidr = "10.1.0.0/19" authenticator_groups_config { security_group = "gke-security-groups@gcpdiag.dev" } node_config { service_account = google_service_account.gke3_sa.email oauth_scopes = [ "https://www.googleapis.com/auth/cloud-platform" ] } } # configure external ingress for web application # authenticate kubernetes provider with cluster data "google_client_config" "gke3" { depends_on = [google_container_cluster.gke3] } data "google_container_cluster" "gke3" { project = google_project.project.project_id name = "gke3" location = "europe-west4" depends_on = [google_container_cluster.gke3] } provider "kubernetes" { alias = "gke3" host = "https://${data.google_container_cluster.gke3.endpoint}" token = data.google_client_config.gke3.access_token cluster_ca_certificate = base64decode( data.google_container_cluster.gke3.master_auth[0].cluster_ca_certificate, ) } # configure simple web application resource "kubernetes_deployment" "web_at_gke3" { provider = kubernetes.gke3 metadata { name = "web" namespace = "default" } spec { replicas = 4 selector { match_labels = { run = "web" } } template { metadata { labels = { run = "web" } } spec { container { image = "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" name = "web" port { container_port = 8080 } } } } } depends_on = [google_container_cluster.gke3] } resource "kubernetes_service" "web_at_gke3" { provider = kubernetes.gke3 metadata { name = "web" namespace = "default" } spec { selector = { run = "web" } type = "NodePort" port { port = 8080 target_port = 8080 } } depends_on = [google_container_cluster.gke3] } resource "kubernetes_ingress_v1" "web_at_gke3" { provider = kubernetes.gke3 metadata { name = "web" namespace = "default" } spec { default_backend { service { name = "web" port { number = 8080 } } } } depends_on = [google_container_cluster.gke3] } ================================================ FILE: test-data/gke1/gke4.tf ================================================ resource "google_container_cluster" "gke4" { provider = google-beta project = google_project.project.project_id depends_on = [google_project_service.container] name = "gke4" location = "europe-west4-a" initial_node_count = 1 ip_allocation_policy { cluster_ipv4_cidr_block = "/14" services_ipv4_cidr_block = "/20" } private_cluster_config { enable_private_nodes = true enable_private_endpoint = false master_ipv4_cidr_block = "10.0.1.0/28" } workload_identity_config { workload_pool = "${google_project.project.project_id}.svc.id.goog" } } # configure cloud nat data "google_compute_network" "default" { name = "default" project = google_project.project.project_id depends_on = [google_project_service.compute] } data "google_compute_subnetwork" "default" { name = "default" project = google_project.project.project_id region = "europe-west4" depends_on = [google_project_service.compute] } resource "google_compute_router" "router" { name = "gke-default-router" project = google_project.project.project_id region = "europe-west4" network = data.google_compute_network.default.id } resource "google_compute_router_nat" "nat" { name = "gke-default-router-nat" project = google_project.project.project_id router = google_compute_router.router.name region = google_compute_router.router.region nat_ip_allocate_option = "AUTO_ONLY" # source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES" source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS" subnetwork { name = data.google_compute_subnetwork.default.id source_ip_ranges_to_nat = ["ALL_IP_RANGES"] } } # configure internal ingress for simple web application # authenticate kubernetes provider with cluster data "google_client_config" "gke4" { depends_on = [google_container_cluster.gke4] } data "google_container_cluster" "gke4" { project = google_project.project.project_id name = "gke4" location = "europe-west4-a" depends_on = [google_container_cluster.gke4] } provider "kubernetes" { alias = "gke4" host = "https://${data.google_container_cluster.gke4.endpoint}" token = data.google_client_config.gke4.access_token cluster_ca_certificate = base64decode( data.google_container_cluster.gke4.master_auth[0].cluster_ca_certificate, ) } # configure simple web application resource "kubernetes_deployment" "web_at_gke4" { provider = kubernetes.gke4 metadata { name = "web" namespace = "default" } spec { replicas = 2 selector { match_labels = { run = "web" } } template { metadata { labels = { run = "web" } } spec { container { image = "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" name = "web" port { container_port = 8080 } } } } } depends_on = [google_container_cluster.gke4] } resource "kubernetes_service" "web_at_gke4" { provider = kubernetes.gke4 metadata { name = "web" namespace = "default" annotations = { "cloud.google.com/neg" = jsonencode( { ingress = true } ) } } spec { selector = { run = "web" } type = "NodePort" port { port = 8080 target_port = 8080 } } depends_on = [google_container_cluster.gke4] } resource "kubernetes_ingress_v1" "web_at_gke4" { provider = kubernetes.gke4 metadata { name = "web" namespace = "default" annotations = { "kubernetes.io/ingress.class" = "gce-internal" } } spec { default_backend { service { name = "web" port { number = 8080 } } } } depends_on = [google_container_cluster.gke4] } resource "google_compute_firewall" "ingress_test_deny" { name = "gke-gke4-ingress-test-deny" network = "default" project = google_project.project.project_id priority = 900 deny { ports = ["1024-10000"] protocol = "tcp" } source_ranges = ["35.191.0.0/16"] depends_on = [google_project_service.compute] } ================================================ FILE: test-data/gke1/gke5.tf ================================================ # public autopilot cluster resource "google_container_cluster" "autopilot-gke1" { provider = google-beta project = google_project.project.project_id depends_on = [google_project_service.container] name = "autopilot-gke1" location = "europe-west4" initial_node_count = 1 enable_autopilot = true # https://github.com/hashicorp/terraform-provider-google/issues/10782 ip_allocation_policy {} } # private autopilot cluster resource "google_container_cluster" "autopilot-gke2" { provider = google-beta project = google_project.project.project_id depends_on = [google_project_service.container] name = "autopilot-gke2" location = "europe-west4" initial_node_count = 1 enable_autopilot = true ip_allocation_policy { cluster_ipv4_cidr_block = "/17" services_ipv4_cidr_block = "/22" } private_cluster_config { enable_private_nodes = true enable_private_endpoint = false master_ipv4_cidr_block = "172.16.114.128/28" } } ================================================ FILE: test-data/gke1/gke6.tf ================================================ /** * 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. */ # This is to test GKE with GPU. resource "google_container_cluster" "gke6" { provider = google project = google_project.project.project_id depends_on = [google_project_service.container] name = "gke6" location = "europe-west4-a" initial_node_count = 1 node_config { machine_type = "n1-standard-2" guest_accelerator { type = "nvidia-tesla-v100" count = 1 } } maintenance_policy { recurring_window { start_time = "2023-02-01T09:00:00Z" end_time = "2023-02-01T17:00:00Z" recurrence = "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR" } } resource_labels = { gcpdiag_test = "gke" } } ================================================ FILE: test-data/gke1/json-dumps/backendServices.json ================================================ { "kind": "compute#backendServiceList", "id": "projects/gcpdiag-gke1-aaaa/global/backendServices/", "items": [ { "kind": "compute#backendService", "id": "3538406228716304628", "creationTimestamp": "2022-08-25T07:24:27.356-07:00", "name": "web-backend-service", "description": "", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/backendServices/web-backend-service", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example", "balancingMode": "UTILIZATION", "capacityScaler": 1 } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/healthChecks/http-basic-check" ], "timeoutSec": 30, "port": 80, "protocol": "HTTP", "fingerprint": "uf9A59CplJc=", "portName": "http", "enableCDN": false, "sessionAffinity": "NONE", "affinityCookieTtlSec": 0, "loadBalancingScheme": "EXTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 }, "iap": { "enabled": false, "oauth2ClientId": "", "oauth2ClientSecretSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/backendServices/" } ================================================ FILE: test-data/gke1/json-dumps/compute-addresses.json ================================================ { "kind": "compute#addressAggregatedList", "id": "projects/gcpdiag-gke1-aaaa/aggregated/addresses", "items": { "regions/us-central1": { "addresses": [ { "kind": "compute#address", "id": "7997470120382759841", "creationTimestamp": "2024-01-07T07:03:42.222-08:00", "name": "address1", "description": "", "address": "10.128.0.26", "status": "IN_USE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/addresses/address1", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/forwardingRules/gk3-us-central1-composer-test-7ff47cd0-g-c4d8afc4-8j765f778-pe" ], "networkTier": "PREMIUM", "labelFingerprint": "42WmS008rSM=", "addressType": "INTERNAL", "purpose": "GCE_ENDPOINT", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default" }, { "kind": "compute#address", "id": "5823057272250092066", "creationTimestamp": "2024-01-03T06:53:01.418-08:00", "name": "address2", "description": "", "address": "192.168.0.18", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/addresses/address2", "networkTier": "PREMIUM", "labelFingerprint": "42WmS008rSM=", "addressType": "INTERNAL", "purpose": "GCE_ENDPOINT", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/subnet-us1" }, { "kind": "compute#address", "id": "2295464241063840289", "creationTimestamp": "2024-01-03T06:53:02.536-08:00", "name": "address3", "description": "", "address": "192.168.0.26", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/addresses/address3", "networkTier": "PREMIUM", "labelFingerprint": "42WmS008rSM=", "addressType": "INTERNAL", "purpose": "GCE_ENDPOINT", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/subnet-us1" } ] }, "regions/asia-east1": { "addresses": [ { "kind": "compute#address", "id": "5969362064718299255", "creationTimestamp": "2024-01-05T00:32:24.377-08:00", "name": "address4", "description": "", "address": "10.0.3.3", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/addresses/address4", "networkTier": "PREMIUM", "labelFingerprint": "42WmS008rSM=", "ipVersion": "IPV4", "addressType": "INTERNAL", "purpose": "GCE_ENDPOINT", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/sub-2" } ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/addresses" } ================================================ FILE: test-data/gke1/json-dumps/compute-disks-europe-west1-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/disks" } ================================================ FILE: test-data/gke1/json-dumps/compute-disks-europe-west4-a.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks", "items": [ { "kind": "compute#disk", "id": "4441671901552043189", "creationTimestamp": "2022-05-10T05:28:11.507-07:00", "name": "gke-gke1-default-pool-04b3bdb9-0skf", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-04b3bdb9-0skf", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:11.508-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-04b3bdb9-0skf" ], "labels": { "foo": "bar", "goog-gke-node": "" }, "labelFingerprint": "yaFVeZPybGM=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "8124138391120372870", "creationTimestamp": "2022-05-10T05:28:26.282-07:00", "name": "gke-gke2-default-pool-30a8ab02-58xp", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke2-default-pool-30a8ab02-58xp", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:26.283-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke2-default-pool-30a8ab02-58xp" ], "labels": { "goog-gke-node": "" }, "labelFingerprint": "2ixRno2sGuM=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "34712422775776388", "creationTimestamp": "2022-05-10T05:28:27.663-07:00", "name": "gke-gke3-default-pool-29bdaa65-g3jz", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-29bdaa65-g3jz", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:28:27.663-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-29bdaa65-g3jz" ], "labels": { "goog-gke-node": "" }, "labelFingerprint": "2ixRno2sGuM=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "6222679188618863647", "creationTimestamp": "2022-05-10T05:30:41.407-07:00", "name": "gke-gke4-default-pool-2906fccc-0bqt", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke4-default-pool-2906fccc-0bqt", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre", "sourceImageId": "8040052912969817984", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:30:41.408-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke4-default-pool-2906fccc-0bqt" ], "labels": { "goog-gke-node": "" }, "labelFingerprint": "2ixRno2sGuM=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" }, { "kind": "compute#disk", "id": "4138877407263712298", "creationTimestamp": "2022-05-10T05:29:57.808-07:00", "name": "gke-gke6-default-pool-2cd637f5-fdtn", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke6-default-pool-2cd637f5-fdtn", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre-nvda", "sourceImageId": "2684852521677692810", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid" ], "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" } ], "lastAttachTimestamp": "2022-05-10T05:29:57.809-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke6-default-pool-2cd637f5-fdtn" ], "labels": { "gcpdiag_test": "gke", "goog-gke-node": "" }, "labelFingerprint": "PKb1LeSIlTc=", "licenseCodes": [ "1001003", "1001010", "166739712233658766", "6880041984096540132" ], "physicalBlockSizeBytes": "4096" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks" } ================================================ FILE: test-data/gke1/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "4836848367819690668", "creationTimestamp": "2022-08-19T08:29:07.600-07:00", "name": "gke-gke6-44734575-ssh", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "34.141.129.122/32" ], "targetTags": [ "gke-gke6-44734575-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-44734575-ssh" }, { "kind": "compute#firewall", "id": "5133291219634822972", "creationTimestamp": "2023-05-09T12:41:07.620-07:00", "name": "gke-gke1-c10b95be-exkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "gke-gke1-c10b95be-node" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke1-c10b95be-exkubelet" }, { "kind": "compute#firewall", "id": "9079063342186893856", "creationTimestamp": "2022-08-19T08:31:27.432-07:00", "name": "gke-autopilot-gke2-86b60f8a-master", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "172.16.114.128/28" ], "targetTags": [ "gke-autopilot-gke2-86b60f8a-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "10250", "443" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke2-86b60f8a-master" }, { "kind": "compute#firewall", "id": "5182252197541614417", "creationTimestamp": "2023-05-08T10:13:34.631-07:00", "name": "k8s-fw-l7--086980d560943668", "description": "GCE L7 firewall rule", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "gke-gke3-15974e23-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "30000-32767" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/k8s-fw-l7--086980d560943668" }, { "kind": "compute#firewall", "id": "8778554569341048908", "creationTimestamp": "2023-05-08T09:43:15.426-07:00", "name": "gke-gke3-15974e23-inkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 999, "sourceRanges": [ "10.1.0.0/19" ], "sourceTags": [ "gke-gke3-15974e23-node" ], "targetTags": [ "gke-gke3-15974e23-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke3-15974e23-inkubelet" }, { "kind": "compute#firewall", "id": "4067421465120740027", "creationTimestamp": "2022-08-19T08:29:24.937-07:00", "name": "gke-gke2-12cd17cd-ssh", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "34.90.21.34/32", "35.204.19.74/32", "34.90.215.178/32" ], "targetTags": [ "gke-gke2-12cd17cd-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-12cd17cd-ssh" }, { "kind": "compute#firewall", "id": "3597968916736156282", "creationTimestamp": "2023-05-08T09:00:21.426-07:00", "name": "gke-gke6-ae0d6714-exkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "gke-gke6-ae0d6714-node" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-ae0d6714-exkubelet" }, { "kind": "compute#firewall", "id": "4726893399701066394", "creationTimestamp": "2022-08-19T08:29:57.556-07:00", "name": "gke-autopilot-gke1-f7bb291d-ssh", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "34.91.149.118/32", "34.147.126.99/32", "34.90.230.30/32" ], "targetTags": [ "gke-autopilot-gke1-f7bb291d-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke1-f7bb291d-ssh" }, { "kind": "compute#firewall", "id": "2039920923990168468", "creationTimestamp": "2022-08-19T08:34:19.807-07:00", "name": "gke-gke2-all-test-deny", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 900, "sourceRanges": [ "10.0.0.0/8" ], "targetTags": [ "gke-gke2-custom-tag" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "1-1000" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-all-test-deny" }, { "kind": "compute#firewall", "id": "5990185058302369596", "creationTimestamp": "2023-05-09T12:41:07.832-07:00", "name": "gke-gke1-c10b95be-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9", "192.168.0.0/24" ], "targetTags": [ "gke-gke1-c10b95be-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke1-c10b95be-vms" }, { "kind": "compute#firewall", "id": "2813774035300783084", "creationTimestamp": "2022-08-19T08:32:19.454-07:00", "name": "gke-gke4-3520a9df-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gke4-3520a9df-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke4-3520a9df-vms" }, { "kind": "compute#firewall", "id": "3144871397702111776", "creationTimestamp": "2022-08-19T08:31:27.556-07:00", "name": "gke-autopilot-gke2-86b60f8a-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.60.0.0/17" ], "targetTags": [ "gke-autopilot-gke2-86b60f8a-node" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke2-86b60f8a-all" }, { "kind": "compute#firewall", "id": "2544394691518010043", "creationTimestamp": "2022-08-19T08:29:24.939-07:00", "name": "gke-gke2-12cd17cd-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.4.0.0/14" ], "targetTags": [ "gke-gke2-12cd17cd-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" }, { "IPProtocol": "tcp" }, { "IPProtocol": "udp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-12cd17cd-all" }, { "kind": "compute#firewall", "id": "6611309922841043578", "creationTimestamp": "2023-05-08T09:00:21.498-07:00", "name": "gke-gke6-ae0d6714-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.12.0.0/14" ], "targetTags": [ "gke-gke6-ae0d6714-node" ], "allowed": [ { "IPProtocol": "ah" }, { "IPProtocol": "sctp" }, { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-ae0d6714-all" }, { "kind": "compute#firewall", "id": "7739524705409962988", "creationTimestamp": "2022-08-19T08:32:19.252-07:00", "name": "gke-gke4-3520a9df-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.56.0.0/14" ], "targetTags": [ "gke-gke4-3520a9df-node" ], "allowed": [ { "IPProtocol": "sctp" }, { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke4-3520a9df-all" }, { "kind": "compute#firewall", "id": "4960132874292895548", "creationTimestamp": "2023-05-09T12:41:07.596-07:00", "name": "gke-gke1-c10b95be-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "192.168.1.0/24" ], "targetTags": [ "gke-gke1-c10b95be-node" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke1-c10b95be-all" }, { "kind": "compute#firewall", "id": "2315135668016423546", "creationTimestamp": "2023-05-08T09:00:21.714-07:00", "name": "gke-gke6-ae0d6714-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gke6-ae0d6714-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-ae0d6714-vms" }, { "kind": "compute#firewall", "id": "2509592257985909740", "creationTimestamp": "2022-08-19T08:32:19.149-07:00", "name": "gke-gke4-3520a9df-master", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.0.1.0/28" ], "targetTags": [ "gke-gke4-3520a9df-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "10250", "443" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke4-3520a9df-master" }, { "kind": "compute#firewall", "id": "8287498013380842772", "creationTimestamp": "2022-08-19T08:27:55.939-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "6732398889299908684", "creationTimestamp": "2023-05-08T09:43:15.408-07:00", "name": "gke-gke3-15974e23-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.1.0.0/19" ], "targetTags": [ "gke-gke3-15974e23-node" ], "allowed": [ { "IPProtocol": "ah" }, { "IPProtocol": "sctp" }, { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke3-15974e23-all" }, { "kind": "compute#firewall", "id": "5045719177249296928", "creationTimestamp": "2022-08-19T08:31:27.952-07:00", "name": "gke-autopilot-gke2-86b60f8a-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-autopilot-gke2-86b60f8a-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke2-86b60f8a-vms" }, { "kind": "compute#firewall", "id": "1153852545006965402", "creationTimestamp": "2022-08-19T08:29:57.822-07:00", "name": "gke-autopilot-gke1-f7bb291d-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-autopilot-gke1-f7bb291d-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke1-f7bb291d-vms" }, { "kind": "compute#firewall", "id": "8470598718386738452", "creationTimestamp": "2022-08-19T08:27:55.917-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "12687766025705548", "creationTimestamp": "2023-05-08T09:43:15.410-07:00", "name": "gke-gke3-15974e23-exkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "gke-gke3-15974e23-node" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke3-15974e23-exkubelet" }, { "kind": "compute#firewall", "id": "8942050874672419514", "creationTimestamp": "2022-08-19T08:29:25.162-07:00", "name": "gke-gke2-12cd17cd-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gke2-12cd17cd-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-12cd17cd-vms" }, { "kind": "compute#firewall", "id": "4377979765631620372", "creationTimestamp": "2022-08-19T08:27:55.962-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "8604329212411777690", "creationTimestamp": "2022-08-19T08:29:57.559-07:00", "name": "gke-autopilot-gke1-f7bb291d-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.85.0.0/17" ], "targetTags": [ "gke-autopilot-gke1-f7bb291d-node" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke1-f7bb291d-all" }, { "kind": "compute#firewall", "id": "8001462545906012918", "creationTimestamp": "2022-08-19T08:28:25.987-07:00", "name": "gke-gke4-ingress-test-deny", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 900, "sourceRanges": [ "35.191.0.0/16" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "1024-10000" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke4-ingress-test-deny" }, { "kind": "compute#firewall", "id": "4904669075404362644", "creationTimestamp": "2022-08-19T08:34:19.924-07:00", "name": "gke-gke2-vms-test-deny", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 900, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gke2-custom-tag" ], "denied": [ { "IPProtocol": "udp", "ports": [ "1-1000" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-vms-test-deny" }, { "kind": "compute#firewall", "id": "8772404347971871354", "creationTimestamp": "2023-05-08T09:00:21.369-07:00", "name": "gke-gke6-ae0d6714-inkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 999, "sourceRanges": [ "10.12.0.0/14" ], "sourceTags": [ "gke-gke6-ae0d6714-node" ], "targetTags": [ "gke-gke6-ae0d6714-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-ae0d6714-inkubelet" }, { "kind": "compute#firewall", "id": "4293052083025157948", "creationTimestamp": "2023-05-09T12:41:07.707-07:00", "name": "gke-gke1-c10b95be-inkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 999, "sourceRanges": [ "192.168.1.0/24" ], "sourceTags": [ "gke-gke1-c10b95be-node" ], "targetTags": [ "gke-gke1-c10b95be-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke1-c10b95be-inkubelet" }, { "kind": "compute#firewall", "id": "4020290834771612948", "creationTimestamp": "2022-08-19T08:27:55.983-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "5958356284032194636", "creationTimestamp": "2023-05-08T09:43:15.679-07:00", "name": "gke-gke3-15974e23-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gke3-15974e23-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke3-15974e23-vms" }, { "kind": "compute#firewall", "id": "4119149565902459121", "creationTimestamp": "2022-08-19T08:37:02.572-07:00", "name": "k8s-fw-l7--8b12f35ea8442830", "description": "GCE L7 firewall rule", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "gke-gke4-3520a9df-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "8080" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/k8s-fw-l7--8b12f35ea8442830" } ], "firewallPolicys": [ { "name": "902824820698", "type": "HIERARCHY", "shortName": "default-firewall-policy", "displayName": "default-firewall-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 0, "match": { "srcIpRanges": [ "34.82.66.0/24", "34.82.90.0/24", "34.82.98.0/24", "34.82.160.0/24", "34.82.166.128/25" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 1, "match": { "destIpRanges": [ "34.83.160.25/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2, "match": { "destIpRanges": [ "34.66.22.47/32", "34.66.157.124/32", "34.66.164.57/32", "34.66.184.118/32", "34.66.236.234/32", "34.73.86.171/32", "34.73.183.215/32", "34.76.42.179/32", "34.76.71.13/32", "34.76.143.192/32", "34.76.244.236/32", "35.184.49.127/32", "35.184.70.255/32", "35.184.144.234/32", "35.184.228.49/32", "35.185.65.36/32", "35.185.252.238/32", "35.186.160.196/32", "35.186.167.183/32", "35.186.182.184/32", "35.187.2.178/32", "35.187.82.234/32", "35.187.121.21/32", "35.187.169.157/32", "35.187.189.105/32", "35.188.28.255/32", "35.188.58.237/32", "35.188.97.47/32", "35.188.225.200/32", "35.188.244.131/32", "35.189.66.48/32", "35.189.85.77/32", "35.189.87.27/32", "35.189.87.89/32", "35.189.88.203/32", "35.189.93.96/32", "35.189.99.57/32", "35.189.109.1/32", "35.189.114.89/32", "35.189.228.0/32", "35.189.236.145/32", "35.190.139.214/32", "35.190.154.170/32", "35.190.196.20/32", "35.192.2.32/32", "35.192.62.107/32", "35.192.160.155/32", "35.192.233.245/32", "35.192.235.233/32", "35.193.56.224/32", "35.193.76.157/32", "35.193.123.0/32", "35.193.195.38/32", "35.193.200.222/32", "35.193.229.109/32", "35.193.242.255/32", "35.194.66.217/32", "35.194.70.28/32", "35.195.3.83/32", "35.195.53.78/32", "35.195.68.98/32", "35.195.101.29/32", "35.195.113.177/32", "35.195.114.253/32", "35.195.123.113/32", "35.195.140.251/32", "35.195.156.23/32", "35.195.206.55/32", "35.196.5.130/32", "35.196.20.59/32", "35.196.89.212/32", "35.196.115.11/32", "35.196.138.125/32", "35.196.140.152/32", "35.196.217.248/32", "35.196.220.144/32", "35.197.30.80/32", "35.197.38.28/32", "35.197.50.103/32", "35.197.53.127/32", "35.197.55.215/32", "35.197.56.191/32", "35.197.65.24/32", "35.197.75.108/32", "35.197.85.13/32", "35.197.107.117/32", "35.197.108.157/32", "35.197.112.50/32", "35.197.115.114/32", "35.197.125.130/32", "35.197.192.22/32", "35.197.205.253/32", "35.197.210.140/32", "35.197.226.207/32", "35.197.233.133/32", "35.197.246.39/32", "35.197.252.73/32", "35.197.252.248/32", "35.197.254.244/32", "35.198.78.35/32", "35.198.79.98/32", "35.198.84.172/32", "35.198.106.28/32", "35.198.140.217/32", "35.198.158.161/32", "35.198.159.26/32", "35.199.12.20/32", "35.199.27.54/32", "35.199.39.165/32", "35.199.40.52/32", "35.199.54.197/32", "35.199.56.100/32", "35.199.58.90/32", "35.199.154.123/32", "35.199.162.95/32", "35.199.162.137/32", "35.199.175.152/32", "35.202.32.145/32", "35.202.62.128/32", "35.202.98.132/32", "35.202.118.10/32", "35.202.240.183/32", "35.203.142.250/32", "35.203.145.190/32", "35.203.151.233/32", "35.203.155.169/32", "35.203.161.173/32", "35.203.175.233/32", "35.203.184.97/32", "35.203.191.135/32", "35.204.1.221/32", "35.204.12.60/32", "35.204.14.12/32", "35.204.15.55/32", "35.204.15.122/32", "35.204.24.135/32", "35.204.37.76/32", "35.204.46.52/32", "35.204.50.90/32", "35.204.52.86/32", "35.204.60.99/32", "35.204.66.9/32", "35.204.66.56/32", "35.204.74.72/32", "35.204.78.201/32", "35.204.88.26/32", "35.204.98.108/32", "35.204.105.22/32", "35.204.108.151/32", "35.204.115.3/32", "35.204.119.162/32", "35.204.122.243/32", "35.204.123.133/32", "35.204.126.58/32", "35.204.126.80/32", "35.204.129.200/32", "35.204.130.59/32", "35.204.131.109/32", "35.204.141.187/32", "35.204.142.195/32", "35.204.152.168/32", "35.204.162.183/32", "35.204.167.122/32", "35.204.169.211/32", "35.204.172.80/32", "35.204.178.217/32", "35.204.179.111/32", "35.204.190.183/32", "35.204.195.27/32", "35.204.195.49/32", "35.204.196.11/32", "35.204.201.70/32", "35.204.203.109/32", "35.204.207.219/32", "35.204.208.228/32", "35.204.215.87/32", "35.204.217.46/32", "35.204.223.176/32", "35.204.225.30/32", "35.204.225.143/32", "35.204.231.201/32", "35.204.241.10/32", "35.204.251.54/32", "35.204.255.0/32", "35.205.72.232/32", "35.205.138.68/32", "35.205.159.40/32", "35.205.227.167/32", "35.205.228.216/32", "35.221.0.61/32", "35.221.3.121/32", "35.221.3.125/32", "35.221.5.200/32", "35.221.6.218/32", "35.221.13.23/32", "35.221.13.133/32", "35.221.15.163/32", "35.221.16.189/32", "35.221.23.24/32", "35.221.24.229/32", "35.221.24.236/32", "35.221.28.149/32", "35.221.32.150/32", "35.221.32.171/32", "35.221.48.160/32", "35.221.51.129/32", "35.221.55.211/32", "35.221.57.195/32", "35.222.15.64/32", "35.222.245.253/32", "35.224.62.254/32", "35.224.106.23/32", "35.224.115.137/32", "35.224.231.238/32", "35.225.8.27/32", "35.225.39.39/32", "35.225.49.103/32", "35.225.181.33/32", "35.225.226.221/32", "35.226.0.100/32", "35.226.37.22/32", "35.226.94.146/32", "35.226.134.67/32", "35.226.227.112/32", "35.227.24.50/32", "35.227.63.36/32", "35.227.148.154/32", "35.227.164.46/32", "35.227.166.150/32", "35.227.169.20/32", "35.227.185.153/32", "35.228.12.151/32", "35.228.23.19/32", "35.228.24.225/32", "35.228.24.253/32", "35.228.43.115/32", "35.228.46.55/32", "35.228.50.150/32", "35.228.61.168/32", "35.228.62.248/32", "35.228.73.69/32", "35.228.126.203/32", "35.228.133.241/32", "35.228.136.253/32", "35.228.141.80/32", "35.228.151.221/32", "35.228.153.106/32", "35.228.153.173/32", "35.228.165.20/32", "35.228.182.144/32", "35.228.194.236/32", "35.228.207.201/32", "35.228.211.51/32", "35.228.225.15/32", "35.228.240.231/32", "35.228.241.74/32", "35.228.243.184/32", "35.228.247.232/32", "35.228.248.131/32", "35.228.248.202/32", "35.229.32.120/32", "35.229.40.166/32", "35.229.98.55/32", "35.229.121.90/32", "35.230.1.88/32", "35.230.9.24/32", "35.230.25.200/32", "35.230.49.71/32", "35.230.81.240/32", "35.230.85.180/32", "35.230.108.26/32", "35.230.119.89/32", "35.230.125.171/32", "35.230.130.62/32", "35.230.133.130/32", "35.230.136.123/32", "35.230.136.172/32", "35.230.137.112/32", "35.230.138.244/32", "35.230.144.1/32", "35.230.149.124/32", "35.230.150.81/32", "35.230.150.240/32", "35.230.154.90/32", "35.230.174.232/32", "35.230.177.25/32", "35.230.177.73/32", "35.230.182.231/32", "35.230.189.18/32", "35.231.27.146/32", "35.231.37.13/32", "35.231.76.215/32", "35.231.79.129/32", "35.231.92.50/32", "35.231.193.144/32", "35.231.200.66/32", "35.231.205.62/32", "35.231.250.82/32", "35.232.45.232/32", "35.232.94.168/32", "35.232.103.119/32", "35.232.127.101/32", "35.232.139.151/32", "35.232.180.7/32", "35.233.28.18/32", "35.233.40.72/32", "35.233.72.242/32", "35.233.89.166/32", "35.233.99.60/32", "35.233.123.101/32", "35.233.131.47/32", "35.233.132.228/32", "35.233.135.75/32", "35.233.136.180/32", "35.233.139.203/32", "35.233.139.255/32", "35.233.141.127/32", "35.233.146.241/32", "35.233.152.253/32", "35.233.155.27/32", "35.233.159.73/32", "35.233.160.114/32", "35.233.170.137/32", "35.233.177.225/32", "35.233.181.13/32", "35.233.209.158/32", "35.233.211.146/32", "35.233.215.174/32", "35.233.230.10/32", "35.233.237.249/32", "35.233.240.97/32", "35.233.242.76/32", "35.233.243.235/32", "35.233.248.120/32", "35.233.251.200/32", "35.234.74.152/32", "35.234.76.60/32", "35.234.82.93/32", "35.234.97.50/32", "35.234.101.43/32", "35.234.113.47/32", "35.234.124.92/32", "35.234.131.84/32", "35.234.133.222/32", "35.234.141.85/32", "35.234.145.128/32", "35.234.149.213/32", "35.234.150.44/32", "35.234.154.126/32", "35.234.156.114/32", "35.235.66.156/32", "35.235.67.142/32", "35.235.70.49/32", "35.235.77.169/32", "35.235.78.149/32", "35.235.79.199/32", "35.235.82.180/32", "35.235.87.249/32", "35.235.91.184/32", "35.235.92.0/32", "35.235.93.225/32", "35.235.96.28/32", "35.235.100.190/32", "35.235.103.216/32", "35.235.109.42/32", "35.235.110.23/32", "35.235.111.166/32", "35.235.114.124/32", "35.235.114.133/32", "35.235.115.36/32", "35.235.119.204/32", "35.235.120.50/32", "35.235.122.190/32", "35.235.123.217/32", "35.235.124.32/32", "35.235.127.151/32", "35.236.3.134/32", "35.236.6.28/32", "35.236.8.4/32", "35.236.9.102/32", "35.236.10.36/32", "35.236.11.136/32", "35.236.13.104/32", "35.236.16.239/32", "35.236.17.90/32", "35.236.18.17/32", "35.236.23.120/32", "35.236.23.130/32", "35.236.24.148/32", "35.236.27.126/32", "35.236.30.92/32", "35.236.32.83/32", "35.236.41.7/32", "35.236.45.102/32", "35.236.48.119/32", "35.236.48.252/32", "35.236.49.204/32", "35.236.50.63/32", "35.236.50.98/32", "35.236.52.137/32", "35.236.52.183/32", "35.236.54.197/32", "35.236.54.236/32", "35.236.54.249/32", "35.236.66.213/32", "35.236.68.82/32", "35.236.69.183/32", "35.236.72.182/32", "35.236.76.220/32", "35.236.77.63/32", "35.236.77.180/32", "35.236.80.100/32", "35.236.82.58/32", "35.236.83.60/32", "35.236.84.168/32", "35.236.86.111/32", "35.236.87.95/32", "35.236.90.57/32", "35.236.94.222/32", "35.236.97.24/32", "35.236.100.13/32", "35.236.103.215/32", "35.236.107.110/32", "35.236.109.101/32", "35.236.110.188/32", "35.236.111.104/32", "35.236.113.26/32", "35.236.114.139/32", "35.236.116.189/32", "35.236.118.35/32", "35.236.120.14/32", "35.236.123.127/32", "35.236.124.70/32", "35.236.125.16/32", "35.236.126.78/32", "35.236.194.140/32", "35.236.196.78/32", "35.236.204.22/32", "35.236.207.204/32", "35.236.209.10/32", "35.236.219.57/32", "35.236.225.160/32", "35.236.226.16/32", "35.236.228.33/32", "35.236.228.41/32", "35.236.241.145/32", "35.236.242.169/32", "35.237.6.119/32", "35.237.16.252/32", "35.237.32.116/32", "35.237.33.255/32", "35.237.61.35/32", "35.237.129.145/32", "35.237.134.39/32", "35.237.182.230/32", "35.237.209.128/32", "35.237.210.45/32", "35.237.222.50/32", "35.237.235.241/32", "35.237.241.81/32", "35.237.241.194/32", "35.237.245.143/32", "35.237.248.171/32", "35.239.35.153/32", "35.239.51.8/32", "35.239.54.20/32", "35.239.68.63/32", "35.240.58.39/32", "35.240.104.231/32", "35.241.144.57/32", "35.241.145.54/32", "35.241.197.193/32", "35.241.216.166/32", "35.241.229.156/32", "35.241.233.190/32", "35.242.129.249/32", "35.242.129.253/32", "35.242.138.94/32", "35.242.140.69/32", "35.242.142.106/32", "35.242.152.55/32", "35.242.154.29/32", "35.242.154.92/32", "35.242.158.36/32", "35.242.164.105/32", "35.242.166.56/32", "35.242.170.95/32", "35.242.173.23/32", "35.242.175.90/32", "35.242.175.97/32", "35.242.180.151/32", "35.242.181.42/32", "35.242.185.45/32", "35.242.204.141/32", "35.242.205.212/32", "35.242.207.188/32", "35.242.214.46/32", "35.242.217.158/32", "35.242.241.237/32", "35.242.245.200/32", "35.242.248.79/32", "35.242.254.63/32", "35.243.170.35/32", "35.243.182.120/32", "35.243.196.214/32", "35.243.220.101/32", "35.245.1.43/32", "35.245.9.122/32", "35.245.22.62/32", "35.245.24.132/32", "35.245.27.85/32", "35.245.30.90/32", "35.245.34.81/32", "35.245.42.72/32", "35.245.45.3/32", "35.245.57.50/32", "35.245.75.145/32", "35.245.78.59/32", "35.245.88.198/32", "35.245.93.125/32", "35.245.96.171/32", "35.245.98.28/32", "35.245.110.144/32", "35.245.120.13/32", "35.245.145.56/32", "35.245.159.53/32", "35.245.170.193/32", "35.245.174.162/32", "35.245.189.22/32", "35.245.216.119/32", "35.245.237.81/32", "35.245.246.95/32", "35.245.247.140/32", "35.245.248.36/32", "35.246.2.43/32", "35.246.4.121/32", "35.246.7.114/32", "35.246.10.143/32", "35.246.10.171/32", "35.246.37.189/32", "35.246.42.142/32", "35.246.43.190/32", "35.246.48.237/32", "35.246.49.124/32", "35.246.52.251/32", "35.246.54.37/32", "35.246.54.181/32", "35.246.63.228/32", "35.246.66.175/32", "35.246.68.114/32", "35.246.70.66/32", "35.246.71.83/32", "35.246.73.137/32", "35.246.73.145/32", "35.246.75.188/32", "35.246.77.251/32", "35.246.85.156/32", "35.246.87.183/32", "35.246.90.190/32", "35.246.94.110/32", "35.246.97.150/32", "35.246.105.99/32", "35.246.111.223/32", "35.247.1.109/32", "35.247.43.108/32", "35.247.43.209/32", "35.247.50.154/32", "35.247.65.167/32", "35.247.118.218/32", "104.154.113.115/32", "104.154.208.253/32", "104.154.209.62/32", "104.155.18.24/32", "104.155.21.175/32", "104.155.33.97/32", "104.155.105.38/32", "104.155.111.169/32", "104.155.121.201/32", "104.155.143.151/32", "104.196.4.14/32", "104.196.46.139/32", "104.196.49.118/32", "104.196.100.39/32", "104.196.171.139/32", "104.196.231.87/32", "104.196.241.37/32", "104.196.244.23/32", "104.196.246.50/32", "104.197.115.25/32", "104.197.119.104/32", "104.197.181.96/32", "104.197.193.37/32", "104.197.239.95/32", "104.198.14.68/32", "104.198.99.186/32", "104.198.179.193/32", "104.198.223.59/32", "104.198.228.146/32", "104.198.255.246/32", "104.199.4.115/32", "146.148.12.186/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 600, "match": { "srcIpRanges": [ "35.235.240.0/20" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "22", "3389", "5900-5901" ] } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 601, "match": { "srcIpRanges": [ "35.191.0.0/16", "130.211.0.0/22", "209.85.152.0/22", "209.85.204.0/22", "169.254.169.254", "108.170.220.0/23" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 602, "match": { "srcIpRanges": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 603, "match": { "srcIpRanges": [ "35.199.192.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "53" ] }, { "ipProtocol": "udp", "ports": [ "53" ] } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 604, "match": { "srcIpRanges": [ "107.178.230.64/26", "35.199.224.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "667" ] }, { "ipProtocol": "udp", "ports": [ "665-666" ] }, { "ipProtocol": "icmp" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 700, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "deny", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false } ] } ] } ================================================ FILE: test-data/gke1/json-dumps/compute-igs-empty.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroups", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroups" } ================================================ FILE: test-data/gke1/json-dumps/compute-instances-aggregated.json ================================================ { "kind": "compute#instanceAggregatedList", "id": "projects/gcpdiag-gke1-aaaa/aggregated/instances", "items": { "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-c'.", "data": [ { "key": "scope", "value": "zones/us-central1-c" } ] } }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/us-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-b'.", "data": [ { "key": "scope", "value": "zones/us-central2-b" } ] } }, "zones/us-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-a'.", "data": [ { "key": "scope", "value": "zones/us-central2-a" } ] } }, "zones/us-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-c'.", "data": [ { "key": "scope", "value": "zones/us-central2-c" } ] } }, "zones/us-central2-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-d'.", "data": [ { "key": "scope", "value": "zones/us-central2-d" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "instances": [ { "kind": "compute#instance", "id": "4008916034740216135", "creationTimestamp": "2025-02-05T04:55:05.216-08:00", "name": "gce1", "tags": { "items": [ "secured-instance" ], "fingerprint": "OcWEGzD6ieA=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/machineTypes/f1-micro", "status": "TERMINATED", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.9", "name": "nic0", "fingerprint": "H5InLKvqNRc=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/disks/gce1", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "diskSizeGb": "32", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "b5_sNtXJEts=" }, "serviceAccounts": [ { "email": "12340002-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instances/gce1", "scheduling": { "onHostMaintenance": "TERMINATE", "automaticRestart": false, "preemptible": true }, "cpuPlatform": "Unknown CPU Platform", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "fpNWOUBPGaA=", "lastStartTimestamp": "2025-02-05T04:55:18.444-08:00", "lastStopTimestamp": "2025-02-06T04:56:34.303-08:00", "satisfiesPzi": true } ] }, "zones/europe-west4-a": { "instances": [ { "kind": "compute#instance", "id": "7734413015668154695", "creationTimestamp": "2025-02-05T04:55:04.917-08:00", "name": "gce1", "tags": { "items": [ "secured-instance" ], "fingerprint": "OcWEGzD6ieA=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "status": "TERMINATED", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.7", "name": "nic0", "fingerprint": "b5ArkV8JkXs=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gce1", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "diskSizeGb": "32", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "b5_sNtXJEts=" }, "serviceAccounts": [ { "email": "12340002-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gce1", "scheduling": { "onHostMaintenance": "TERMINATE", "automaticRestart": false, "preemptible": true }, "cpuPlatform": "Unknown CPU Platform", "labels": { "foo": "bar", "goog-terraform-provisioned": "true" }, "labelFingerprint": "cLOO6l7pJAo=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "mcHgMmrzi8c=", "lastStartTimestamp": "2025-02-05T04:55:12.951-08:00", "lastStopTimestamp": "2025-02-06T04:58:01.352-08:00", "satisfiesPzi": true }, { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-05-09T12:41:30.493-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-671518f6-zsnm", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "714758298644455174", "kind": "compute#instance", "labelFingerprint": "yaFVeZPybGM=", "labels": { "foo": "bar", "goog-gke-node": "" }, "lastStartTimestamp": "2023-05-09T12:41:36.364-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke1-default-pool-671518f6" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 192.168.2.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://192.168.0.34\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "c10b95be9dbb48d09af2e5c299c655c01f02e38cc157489eb8ec454d30b7ecb7" }, { "key": "cluster-location", "value": "europe-west4-a" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-671518f6-zsnm", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.90.1.21", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "192.168.1.0/24", "subnetworkRangeName": "gke1-secondary-range-pod" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "192.168.0.35", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-671518f6-zsnm", "serviceAccounts": [ { "email": "12340002-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-c10b95be-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "kind": "compute#instance", "id": "3427402889068208455", "creationTimestamp": "2025-02-05T04:55:05.013-08:00", "name": "gce2", "tags": { "items": [ "secured-instance" ], "fingerprint": "OcWEGzD6ieA=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "status": "TERMINATED", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.8", "name": "nic0", "fingerprint": "WAEC9EDWZGs=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gce2", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc", "https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "MULTI_IP_SUBNET" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "WINDOWS" } ], "diskSizeGb": "32", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "xkTdem40Dus=", "items": [ { "key": "serial-port-logging-enable", "value": "false" } ] }, "serviceAccounts": [ { "email": "12340002-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gce2", "scheduling": { "onHostMaintenance": "TERMINATE", "automaticRestart": false, "preemptible": true }, "cpuPlatform": "Unknown CPU Platform", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "Lqnk1p0Yzf0=", "lastStartTimestamp": "2025-02-05T04:55:16.921-08:00", "lastStopTimestamp": "2025-02-05T07:09:43.379-08:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "2177354220935146682", "creationTimestamp": "2025-02-06T07:16:37.639-08:00", "name": "gke-gke1-default-pool-dee670f4-b27s", "tags": { "items": [ "gke-gke1-848e1694-node" ], "fingerprint": "oapYuKPqeNg=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "networkIP": "192.168.0.3", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "34.90.120.22", "networkTier": "PREMIUM" } ], "aliasIpRanges": [ { "ipCidrRange": "192.168.1.0/24", "subnetworkRangeName": "gke1-secondary-range-pod" } ], "fingerprint": "BR9LA1osAHE=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-dee670f4-b27s", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "GVNIC" }, { "type": "UEFI_COMPATIBLE" }, { "type": "IDPF" } ], "diskSizeGb": "100", "shieldedInstanceInitialState": { "pk": { "content": "MIIEGTCCAwGgAwIBAgIQYB8C9RH--O1hXkpp2FVSXjANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMR4wHAYDVQQDExVVRUZJIFBsYXRmb3JtIEtleSB2MTAwHhcNMjAwODA2MTk0ODQ0WhcNMzAwODA0MTk0ODQ0WjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMR4wHAYDVQQDExVVRUZJIFBsYXRmb3JtIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClSQ15LUf193eJfM6b5etGgz8auvdI72Cclo3fHvwXBzsm5T1QamwYAqrCTcS7MxauCTkmkXTS9ejM4NNpQWF6KG82nR88vRyKO_MnSNL8ZP-rtRu0p1X_mUYXwi0_nPkyPKLR2QJ9H2EOrw_RChWvwnu281WtfUPCYs2t2SjBCF_mgzZI8o3s8wOtL8y-Dmi9T0bGO1wYX2okz51PKbhgVGQA7KJRmeekIxEkiN7GOb_2VQqcdM9c846OlC-8abwgDvrL3YqKqhw8DnSM2AbNpZIgUTd1Ut3X-PWXVKBj3qdxjAyRez8dPWymXDji-CBoBzLsWEkUW87S1coggOABAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEIMk0-K2sxOjtSpl-2pXmBWwwvSMGEIThmdDsSxQk2XZQMCsGA1UdIwQkMCKAIMk0-K2sxOjtSpl-2pXmBWwwvSMGEIThmdDsSxQk2XZQMA0GCSqGSIb3DQEBCwUAA4IBAQA7Pmaixb0FuDtpesNGvaBkTGWWMO7bDtx4rQom7zprEnliFJZung08FS3r73ob1urH0lzZm9022nRp8xqcSGk3wDkE9xQppWhvjhf6SOHdwM9_OxVq6no_BPz1PkRYsg4V07cgYPCtp7Ck7ZBI7m3MbLUyg8EG14_tvjKX9Xh2h0FSGuGg8_jjGYCGDtaSPkXBpAWurZ5mC2o9CzGaBJR4f_51I5C2AfHMG0H5T0Kehuyb_IzX9mAwArGmt62e4T9SxdP7LZUNPMEzOrhW1RzXvsD6Vod4uA9h2n_lbZHiBBExM2PMwuoobb-io-W0ARL4OCN5jah0a7q1ax6UYJK-", "fileType": "X509" }, "keks": [ { "content": "MIIEIjCCAwqgAwIBAgIRAKxVeWkn5a0pF1C0o_HUM6owDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEfMB0GA1UECxMWQ29udGFpbmVyIE9wdGltaXplZCBPUzEiMCAGA1UEAxMZVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMDAeFw0yMDA4MDYxOTQ4NTBaFw0zMDA4MDQxOTQ4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIExMQy4xHzAdBgNVBAsTFkNvbnRhaW5lciBPcHRpbWl6ZWQgT1MxIjAgBgNVBAMTGVVFRkkgS2V5IEV4Y2hhbmdlIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6ZCJ4Oldm1z3gwwAjWqiHRMFrXPwq0XmVmLWoaGUBzeL41VwHK76iQTxl11HYhqaAr_0nmVQAM3M6so6cmydd7l1RPYJpZ3Shy3qO4xxgy30kp4zW00m9EVEdkmh9-9zi_G89uutz7wOb34M2Wrybwa7D5U102DmSoJAoq5z2YrvpjZoGLRGqBBP6A1l-_gRGMAgUMqKbhD1HF1VKXZnIGq9UJcpHhRvQxOG3nlVWk6z8dH-Rnp_9YfEPRORAUF5PUnUL5-I3wr5derIIoeYxc7G2ZuTyRWsF9WVyZ7OquYwxAY4l4xkDJpAvSomHkbfNgtCZyTm2pMIkRou0up5lAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEINDkWV5HwgIi6aogGQUbZwWC5Es_Vx9SX5kG8i1xiXxKMCsGA1UdIwQkMCKAINDkWV5HwgIi6aogGQUbZwWC5Es_Vx9SX5kG8i1xiXxKMA0GCSqGSIb3DQEBCwUAA4IBAQCOTmuK7QQ4sP_8qYI2-bkvbQg1Vpq0W_aWtm0AQDw2iEVgfIq8JxNHu61ZhkmBiEhsdaaj7bYt_8owpvxfRnmzMPhQ6iB51vkExjWipD9spgSb8tfp0te6MqTT3omyYI9x4L13wn9ufZtlhZXlVgbjUN1QyevHwNt7Kms8Nd9Jbk9JCV9JoOIjkBpUjpCWCDfdGDD-iGIPzGdS-KjrNiA4udnzkdkO83dFMMvu69a1snCRUshNvHBNPbPRwbRYV9lS_QTwfft7EgbNF0455gblZbejvGJgR1Vhyen0jIPouVWxXe0X7AnGK8Mc3DUQBPVGT4ZR0WChbcwiOavh2t2X", "fileType": "X509" } ], "dbs": [ { "content": "MIIEDTCCAvWgAwIBAgIQRtEbux4j2WDjYimBMkIBYjANBgkqhkiG9w0BAQsFADCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMRgwFgYDVQQDEw9VRUZJIERCIEtleSB2MTAwHhcNMjAwODA2MTk0ODU1WhcNMzAwODA0MTk0ODU1WjCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMRgwFgYDVQQDEw9VRUZJIERCIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQzJHu5A61uBNU6UUUZ5MiXjXwy8Du44BHhisNBpi6cTVHZddJ85iNldE5cPL7hZFJP9n77KyFRCCLxT2CVDNkwMyE2jvJkTz2x2qWvJ-uIuL25Asfgbrv7t1h2Jn790ZLwb9U3qQvqMLvIh_cTtNLat0DaZJsdnJo1MTnFAWrYZZ19KB4j6JJpG_QBnQ-s8XibeSSoa_bMEQTn2OEQFeEcume3CeuZKzXyytMLKkV_z4z-CYddyRwkOFivWUHWq2nVecQQgdyDNWYxGnY4MNsTMYFfv-mhyRzMwhxBFMwMAaEwhTFWsIP6VNwrwIgQaDw3o1fUEuzavTfdNhULaJLAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEIEtOsnFY2N1KW7dg9Wd_GEcIwV_a-U2DCn5ZyUsGWickMCsGA1UdIwQkMCKAIEtOsnFY2N1KW7dg9Wd_GEcIwV_a-U2DCn5ZyUsGWickMA0GCSqGSIb3DQEBCwUAA4IBAQCOd9V3WYv589dVov5ZOYo4zSs5PXpts1_8sYvMwvzLBr46LaejfG7KjjIY665Cnik__Zy9N3ZS9-fEeGKrBPE8ClwC06QhLbWDSFIqj2y9qq5FyBW0k1no2UQBnvx4CnLw_BgU3eae0wjv1lpDIbMwxe3E_aucVmzaIX3O83cw2JL9lLm1Psum0L2VHDZSCTP24vzrWoXXo4USHO_tBt_NkYrdkQH5CqGJYtxzKRwHHKEar3vzsiW4DPzlW8kUjRual1eBOKT5YKGbrOA_PJXV9x_7v1f2uAIrqh3HyppDTaGJ7Lux1MDf_hKuwAFI5QJTy9NEojbuUk1tzB4ys_W8", "fileType": "X509" } ], "dbxs": [ { "content": "MIIEaDCCA1CgAwIBAgIJAKqfsrCdjyCoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEUMBIGA1UECxMLQ2hyb21pdW0gT1MxFzAVBgNVBAMTDlVFRkkgREIgS2V5IHYxMB4XDTE4MTIwODAxMTk0MVoXDTI4MTIwNTAxMTk0MVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEXMBUGA1UEAxMOVUVGSSBEQiBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtZ9U4P5aWlBwiTocmkUjOn2XpvHUlUOnsnhvsm994hAb0MNk2d3fXa8Nz14v9JiBTSf70KU2Zhxb_bSN3KAIv-f7F2AuXte7U9SnzZ02UDmK4TU1bFQW67Y3Gc2hWprCHYEjiRQD4J3WPWhuZnAXqzXQk3uDWVPETi-G9KAM1R-yNxZfoEjfIKhLabDsWqDtnMSovObLoVfwTdnm0WCuYTFtY_CKNxuxeKuzDsC5Su9N3dSFbpGhXJjwUaXPLWY5MFIqIQNBfhmWzDd4PItXaXV3V44IqWTXclE2aSUqkwNrEZ1cRpHG4PYM1aHVmjcO_dWlvthcepTIMIEMAXg2LAgMBAAGjgeYwgeMwHQYDVR0OBBYEFNXbmmdkM0aIsPMyEIv25JRaOPA-MIGzBgNVHSMEgaswgaiAFNXbmmdkM0aIsPMyEIv25JRaOPA-oYGEpIGBMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEUMBIGA1UECxMLQ2hyb21pdW0gT1MxFzAVBgNVBAMTDlVFRkkgREIgS2V5IHYxggkAqp-ysJ2PIKgwDAYDVR0TBAUwAwEB_zANBgkqhkiG9w0BAQsFAAOCAQEAJ2vbNymAKTUbRvxnAohHozVUByrKHCq1o8b-bKrgv7Ch0X4itfG8Uwvt0xG7CTpl_Dno92MtpOpFv4ydqox-pP1kTsRcnFNggndXdjpGILIB94KmFiYJvB6RzocJsXsXBa0tULOR24qiB9f93kfITS7Ec60WjFfpgYKEnuEgcV0yBuZzAZbxo1uF4n1hhmVUnKtEI9pX-8geYIIqIYiwwT2jnhFogWw4PeSyg-HMR1CLwwJeH2XDa924LpgHFuR-AbikipAE2vIE0yqJzo0o4tn9-sRuMaQcZ4VQqIzMiniW5H7nGeoQY3ktHX5eq6x-4jFvdLnzzq_D4sS-UWHzOA==", "fileType": "X509" }, { "content": "MIIEiTCCA3GgAwIBAgIJAOzm3xz71Vu6MA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIExMQy4xFDASBgNVBAsTC0Nocm9taXVtIE9TMSEwHwYDVQQDExhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwHhcNMTgxMjA4MDExOTQwWhcNMjgxMjA1MDExOTQwWjCBiTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEhMB8GA1UEAxMYVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwg5hvVH6fJSBNji7ynBl1SQzWceL5P3ul6RcB-1s5wXqzXlIHiyRqBdj4hj2pLzpKJGmXWnerIwJOkdsFg7IwZpA4xHE1F-M8XlpuuUn_Xdfccef36ddZEUH6QLwNm96T89F4ujt0omJ-0GV37vBsxEY-hwR3O8XBgyx8TvvYxNnVyTgi19qQdb2ES8-yWJkebdzgugcmNf9K-55fnEiyxWtrvEQb2sowWIS3-b1I_BP85pW2pldh9yQWfb3OY2NJhGSbQSnLi3J0IhRXROEtAXCU4MLTq2cHOpGX0DtJP_g_jD1pnC1O6CCZgVycK4DgZXeDzOG_2Uimhr0y1rcewIDAQABo4HxMIHuMB0GA1UdDgQWBBQEqlpkrYWCzJe69eMUdF1byztBmzCBvgYDVR0jBIG2MIGzgBQEqlpkrYWCzJe69eMUdF1byztBm6GBj6SBjDCBiTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEhMB8GA1UEAxMYVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxggkA7ObfHPvVW7owDAYDVR0TBAUwAwEB_zANBgkqhkiG9w0BAQsFAAOCAQEAWsd3mq0dADTD7Tx2uYcDeJcJHO0x91hO26p2cqUSox4wPgc4_xk5yiteMgDB5CWLwgcuneDAYYMO1PmktpEvLu9a82gCGxGiww-w78OJTOrs68VM1zB0jqA3X5EyVSwVJqi8idgrnnGsJAcSBosnUI8pNi9SDC3MRPE1q1EUjuDNjsE7t_ItBe-MSMWCH2hpG8unZ7uwWCRfAV3Fkdnq_S5HzDy6-kKyGdj-rprhVeDz2xSyMOlNIJig4uuqU166DTfoQA2TxnMG_TuHt69Z4uZcVwx_HwPs2-vUCCYqZDwuuHKNIEm8kIK8sSPSsp22sC8h-7Klb8wj_d0lzShgkg==", "fileType": "X509" }, { "content": "MIID0zCCArugAwIBAgIJANuXsNG_1HHxMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgTExDLjEUMBIGA1UECwwLQ2hyb21pdW0gT1MxFzAVBgNVBAMMDlVFRkkgREIgS2V5IHYxMCAXDTE4MDQyNzE1MDYzN1oYDzIyMTgwMzEwMTUwNjM3WjB_MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMRcwFQYDVQQDDA5VRUZJIERCIEtleSB2MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWzFg8obysKXCjnbBTpAM8dMFC2pHX7GpwESNG-FYQI218Y1Ao1p5BttGqPoU5lGNeYUXxgxIqfN18ALHH10gRCRfqbC54faPU1lMr0e0jvi67GgGztyLl4ltAgK7HHTHmtZwghYNS45pKz_LFGm-TlKg-HPZBFT9GtbjRZe5IS2xdKkWM_sPA8qXwzvqmLN3OQckf0KchSUQmB3-wh4vYFV2TEjz10oR0FZO8LFFOOeooukcRDYy219XrdM21APnfszHmfKhzAFddOcYdwKwOL-w9TKVUwCIM70GL_YOtywA17mQkEm0ON79oyQ0daDlZ0ngDxC8xUIASYsRRPOkkCAwEAAaNQME4wHQYDVR0OBBYEFFO6MYgG9CvYp6qAqn_Jm-MANGpvMB8GA1UdIwQYMBaAFFO6MYgG9CvYp6qAqn_Jm-MANGpvMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAIGyOB_3oFo6f3WoFrdBzimb_weH8hejtCggpcL-8Wdex9VRl5MKi_1GlGbietMDsr1alwdaagam9RafuIQplohTSBnQrU-u-LbtRlCF9C25GDQ70S0QlxAQmt41Sc7kSFTPm6BHauF3b_Raf9AX30MamptoXoAhgMnHAitCn6yCOsRJ_d1t04lqsiqefhf26xItvRnkuxG7-IQnbyGFCGPcjFNAE1thLpL_6y_dprVwTLsvZnsWYj-1Gg1yUkOnCN8Kl3Q3RDVqo98mORUc0bKB-B8_FQsbtmzbb-29nXQJW1FJx0ejqJyDGGBPHAGpwEJTVB3mwWXzBU6Ny7T3dlk=", "fileType": "X509" }, { "content": "MIID6TCCAtGgAwIBAgIJAKgdcZ45rGMDMA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSEwHwYDVQQDDBhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwIBcNMTgwNDI3MTUwNjM3WhgPMjIxODAzMTAxNTA2MzdaMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSEwHwYDVQQDDBhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbIdHPMQZZU68jI5kz5rmwvo-DQZZJ5amRnAUnBpNllhNQB6TaLUS_D9TIo_0X1e8T21Xk4Pf3D5ckbuQxsJzQ5OVEOb59sJ9AhjVUoxQxuVW-iBzD0mWbxKf2cASy2YRIEcaAAI5QT2SwO8gZy_G8LwAk-vO0vIbynN0WuFLl1Dp2cMQ3CxLSPH-QPSZyGd6o6ewUU9JzboppujXpk43EQH5ZJE_wJb_ujUFWcFzKHb_EkV1hI1TmBJ1-vR2kao4_1hQO6k1zLUR-MyBHY0SRU2OQxBpSez-qt7oItMBc1EanXvq9tqx0ndCTmXQYQplT5wtkPbE9sd5zwbDt8btHAgMBAAGjUDBOMB0GA1UdDgQWBBS5Tmmv3JM8w1mfP9V5xAIdjBhb7TAfBgNVHSMEGDAWgBS5Tmmv3JM8w1mfP9V5xAIdjBhb7TAMBgNVHRMEBTADAQH_MA0GCSqGSIb3DQEBCwUAA4IBAQB9BRTP37ik4jF2BmJJspMA6NHS7mxIckFCYKl-TO8zGFd3mlA6dnEw5WY-tUcBNJpAaHNJV_rzagGPpWMIoy-nAaLSSpnyhEXYTnQvzejYRijN3N0V9tmM0qgViHNBqTxdfcwlst5OUesGHPqgBOt5RRu5OGJ0rkuymWwxHOKIw43hz5FW7vhumbtJ3iy8HSFQIjSYMkr0sOzJhmvnHlpZ4pOoPNyNA9DM6smriH-2-MnJFM9w8bg6zsV5X-6KL464_FuXL_X_IWmAsAbi8Ge8ZMJjEaDrF1qkD4aLvu0MshzEdvrvQO-3Gn3Lmi_RYKR0HKZp7jXTySj76sxt9QK4", "fileType": "X509" } ] }, "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "EVspfRhp7rs=", "items": [ { "key": "instance-template", "value": "projects/12340002/regions/europe-west4/instanceTemplates/gke-gke1-default-pool-dee670f4" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dee670f4-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-memory-gb-scaling-level=4,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 192.168.2.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DisableKubeletCloudCredentialProviders: true\n ExecProbeTimeout: false\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://192.168.0.2\n certificate-authority: 11112222/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "#!/usr/bin/env bash\n\n# Copyright 2016 The Kubernetes Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Due to the GCE custom metadata size limit, we split the entire script into two\n# files configure.sh and configure-helper.sh. The functionality of downloading\n# kubernetes configuration, manifests, docker images, and binary files are\n# put in configure.sh, which is uploaded via GCE custom metadata.\n\nset -o errexit\nset -o nounset\nset -o pipefail\n\n### Hardcoded constants\n\nDEFAULT_CNI_VERSION=11112222v1.5.0-gke.3'\nDEFAULT_CNI_HASH_LINUX_AMD64='b53474f2a4109e9c54a4f526386a6311622e96b739109abdd77d7f063220c8be04f2b36e23f5c8eba37dc664b833b3a920acbfe04e170667835f30ccdbba0bbf'\nDEFAULT_CNI_HASH_LINUX_ARM64='32c0093c87fe46a4243d382b16184d98cd14411dfb590552baaad10d2ba115682c77e39ed60fffb9e06ed3e9ea666ee6618fd7ecbc81ba9f3b49e700991e5d38'\n\nDEFAULT_NPD_VERSION='v0.8.19-12-g5efc8884-gke.1'\nDEFAULT_NPD_HASH_AMD64='c9d652c18ab2e90f5b0de0384f0af7d9bb0abf14c7120828fdb8f1aad7950178195547cf9be49d4647e86366d2f4a462d2b9d3d7550840c48545a2268f97abd2'\nDEFAULT_NPD_HASH_ARM64='4520a9642525f6f271b76cfcb23a0d6a385860098d247aa63bc68b6b1e5aca198b50fd03c6354c8109e7f816260b47b4658ee70c617460dbb0263b7a7977e5a8'\n\nNPD_CUSTOM_PLUGINS_VERSION=\"v1.0.20\"\nNPD_CUSTOM_PLUGINS_TAR_AMD64_HASH=\"0907d1949013577cb13f90d10274e37f4ff6962fb97d23454b38562966f31d0d50da960278da7353215ecc6ec777b7a87c2972f3244ba7a8c9444282cc5dd84c\"\nNPD_CUSTOM_PLUGINS_TAR_ARM64_HASH=\"773062478605e5bf6d65c7e1374bff6b6cb2a99fc59ea46472c2fe4b15451f8547c740495961f1a9c50077ea67d16e32106733326d7e197dac60a07d8b05a375\"\n\nDEFAULT_CRICTL_VERSION='v1.31.1-gke.0'\nDEFAULT_CRICTL_AMD64_SHA512='7c0ea3355b53c79e00772cfdf0bf67d262a9a0e827fdcf5be956ff68be25b47d7cb5cd6b065e3de251efc7b4534961e37a37b9f0e3f1efa22dfe2b5149702889'\nDEFAULT_CRICTL_ARM64_SHA512='05c8a74117288def73c430aa7f207432c2b0e6f0560bb795f90debb65902a76e1d001e876a319cdf090c78ca4cbafa8021dd1a93e938aa74fd800677020446f6'\nDEFAULT_MOUNTER_ROOTFS_VERSION='v1.0.0'\nDEFAULT_MOUNTER_ROOTFS_TAR_AMD64_SHA512='631330b7fa911d67e400b1d014df65a7763667d4afd4ecefe11a4a89dc9b8be626e5610d53b536c255a3ab488408ab2da8a0699d9fdad280cb3aa24bc2f30ab0'\nDEFAULT_MOUNTER_ROOTFS_TAR_ARM64_SHA512='83cf9ab7961627359654131abd2d4c4b72875d395c50cda9e417149b2eb53b784dfe5c2f744ddbccfe516e36dd64c716d69d161d8bc8b4f42a9207fe676d0bc1'\n\nRIPTIDE_FUSE_VERSION=\"v0.237.1.patch\"\nRIPTIDE_FUSE_ARM64_SHA512='611a54c566cd156ee18f63b4f590cef6f044f4dd3f4ad77164a2f03e2ea00db1902c2253ac03eb760332aee214cf28a852f41075113b0350a478e01fcad641bd'\nRIPTIDE_FUSE_BIN_ARM64_SHA512='bf17276292fb7b9acf76a3b80a4f7023cf1e97f64df6feef23940be3dfdeeecdfacbaf8babc754a9280a9d22f0d1039eee3c0d59fcd0951b7a3228c35a68d4c8'\nRIPTIDE_FUSE_AMD64_SHA512='d28deb2df0ef7d60fe520113f4e59dd4d0238713b2e99d8147a3e101c8c2e91f830296601cdb1044880ac9709bd33f461b7c60fa301254889d733f7a653e569d'\nRIPTIDE_FUSE_BIN_AMD64_SHA512='d62c20fa299c738359b400da2171bafbcf4550b77de74dcfa53cf86b5a6c480b4ae91fe9c2cc564e188e4fb60f7cf3b6448199cd147105c655e37583a93c80e3'\n\nRIPTIDE_SNAPSHOTTER_VERSION=\"v1.31-1\"\nRIPTIDE_SNAPSHOTTER_SHA512='f8ea490a719e4e3dd3177f48f85e066802173e36a8bdcfcc1e5507f05c88ac8296fd9a82e79292e23007c7e574dc054d28ac405427c9f4eb9778270339bf24e8'\nRIPTIDE_SNAPSHOTTER_BIN_ARM64_SHA512='1d7d0dd3ce52f831adba1037142e6b315e2de7919e8fa4ab86892d353e2a642697915011c165a20386b047acf8c7a5764a9674569746f141f0376f0060671b9f'\nRIPTIDE_SNAPSHOTTER_BIN_AMD64_SHA512='1e81cee5ac33bef018029ddd39db307c3f0044bc9ac52621066094e05ea4e87ece75294be19de21875dbd2a65d1a52ce03f7b2fec132d785d6485e25ee90c597'\n\nAUTH_PROVIDER_GCP_VERSION=\"v0.0.2-gke.4\"\nAUTH_PROVIDER_GCP_HASH_LINUX_AMD64=\"156058e5b3994cba91c23831774033e0d505d6d8b80f43541ef6af91b320fd9dfaabe42ec8a8887b51d87104c2b57e1eb895649d681575ffc80dd9aee8e563db\"\nAUTH_PROVIDER_GCP_HASH_LINUX_ARM64=\"1aa3b0bea10a9755231989ffc150cbfa770f1d96932db7535473f7bfeb1108bafdae80202ae738d59495982512e716ff7366d5f414d0e76dd50519f98611f9ab\"\n\n# gke-exec-auth-plugin local version.\n# The URLs below are relative to ${STORAGE_ENDPOINT}/${EXEC_AUTH_PLUGIN_BUCKET}\nEXEC_AUTH_PLUGIN_BUCKET=\"gke-prod-binaries\"\nEXEC_AUTH_PLUGIN_VERSION=\"internal/gke-internal-branch-v1-31/c41916da792183068bb56af4129dbd4718fa1708\"\nEXEC_AUTH_PLUGIN_LINUX_AMD64_HASH=\"026795bdf3e8cb1d384e1f69d7f01ad35221fd57a2dc7e778d9a9847f0b987d3cce38f4fcc20234bba405a6796723687ca40c130837b7e74fafdd99f74566e9c\"\nEXEC_AUTH_PLUGIN_LINUX_ARM64_HASH=\"71aa357a8c3f7d4216a6a58d1a9a0f952df131bb2ba53d83308f2f234fdba7d165501b4842fbeaea9db0e0b3126b084538c44bf4c644733a3a578822b396d5f4\"\n\n###\n\n# Backend endpoints (configurable for TPC).\n# May be overridden when kube-env is sourced.\n#\n# NOTE: Endpoints should behave exactly like a GDU (Google Default Universe)\n# endpoint. E.g., An alternative `STORAGE_ENDPOINT` must have the same buckets\n# and paths as the `storage.googleapis.com` that this script depends on.\nSTORAGE_ENDPOINT=\"${STORAGE_ENDPOINT:-https://storage.googleapis.com}\"\nPGA_ENDPOINT=\"${PGA_ENDPOINT:-private.googleapis.com}\"\nKUBE_DOCKER_REGISTRY=\"${KUBE_DOCKER_REGISTRY:-gke.gcr.io}\"\n\n# Whether to configure private google access or not (defaults to true).\n# May be overridden when kube-env is sourced.\nCONFIGURE_PGA=\"${CONFIGURE_PGA:-true}\"\n\n# Standard curl flags.\nCURL_FLAGS='--fail --silent --show-error --retry 5 --retry-delay 3 --connect-timeout 10 --retry-connrefused'\n\n# This version needs to be the same as in gke/cluster/gce/gci/configure-helper.sh\nGKE_CONTAINERD_INFRA_CONTAINER=\"pause:3.8@sha256:880e63f94b145e46f1b1082bb71b85e21f16b99b180b9996407d61240ceb9830\"\n\n# Set max reboot retry 3 plus the inital boot count\nMAX_BOOT_COUNT=\"${MAX_BOOT_COUNT:-4}\"\n\nfunction set-broken-motd {\n cat \u003e /etc/motd \u003c\u003cEOF\nBroken (or in progress) Kubernetes node setup! Check the cluster initialization status\nusing the following commands.\n\nMaster instance:\n - sudo systemctl status kube-master-installation\n - sudo systemctl status kube-master-configuration\n\nNode instance:\n - sudo systemctl status kube-node-installation\n - sudo systemctl status kube-node-configuration\nEOF\n}\n\n# A function that fetches a GCE metadata value and echoes it out.\n# Args:\n# $1 : URL path after /computeMetadata/v1/ (without heading slash).\n# $2 : An optional default value to echo out if the fetch fails.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction get-metadata-value {\n local default=\"${2:-}\"\n\n local status\n # shellcheck disable=SC2086\n curl ${CURL_FLAGS} \\\n -H 'Metadata-Flavor: Google' \\\n \"http://metadata/computeMetadata/v1/${1}\" \\\n || status=\"$?\"\n status=\"${status:-0}\"\n\n if [[ \"${status}\" -eq 0 || -z \"${default}\" ]]; then\n return \"${status}\"\n else\n echo \"${default}\"\n fi\n}\n\n# A function to fetch kube-env from GCE metadata server\n# or using hurl on the master if available\nfunction download-kube-env {\n (\n umask 077\n local kube_env_path=\"/tmp/kube-env.yaml\"\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n local kube_env_path=\"${KUBE_HOME}/kube-env.yaml\"\n download-kube-env-hurl \"${kube_env_path}\"\n else\n local meta_path=\"http://metadata.google.internal/computeMetadata/v1/instance/attributes/kube-env\"\n echo \"Downloading kube-env via GCE metadata from ${meta_path} to ${kube_env_path}\"\n # shellcheck disable=SC2086\n retry-forever 10 curl ${CURL_FLAGS} \\\n -H \"X-Google-Metadata-Request: True\" \\\n -o \"${kube_env_path}\" \\\n \"${meta_path}\"\n fi\n\n # Convert the yaml format file into a shell-style file.\n eval \"$(python3 -c '''\nimport pipes,sys,yaml\nitems = yaml.load(sys.stdin, Loader=yaml.BaseLoader).items()\nfor k, v in items:\n print(\"readonly {var}={value}\".format(var=k, value=pipes.quote(str(v))))\n''' \u003c \"${kube_env_path}\" \u003e \"${KUBE_HOME}/kube-env\")\"\n\n # Leave kube-env if we are a master\n if [[ \"${KUBERNETES_MASTER:-}\" != \"true\" ]]; then\n rm -f \"${kube_env_path}\"\n fi\n )\n}\n\n# A function to pull kube-env from HMS using hurl\nfunction download-kube-env-hurl {\n local -r kube_env_path=\"$1\"\n local -r endpoint=$(get-metadata-value \"instance/attributes/gke-api-endpoint\")\n local -r kube_env_hms_path=$(get-metadata-value \"instance/attributes/kube-env-path\")\n\n echo \"Downloading kube-env via hurl from ${kube_env_hms_path} to ${kube_env_path}\"\n retry-forever 30 ${KUBE_HOME}/bin/hurl --hms_address $endpoint \\\n --dst \"${kube_env_path}\" \\\n \"${kube_env_hms_path}\"\n chmod 600 \"${kube_env_path}\"\n}\n\nfunction download-kubelet-config {\n local -r dest=\"$1\"\n echo \"Downloading Kubelet config file, if it exists\"\n # Fetch kubelet config file from GCE metadata server.\n (\n umask 077\n local -r tmp_kubelet_config=\"/tmp/kubelet-config.yaml\"\n # shellcheck disable=SC2086\n retry-forever 10 curl ${CURL_FLAGS} \\\n -H \"X-Google-Metadata-Request: True\" \\\n -o \"${tmp_kubelet_config}\" \\\n http://metadata.google.internal/computeMetadata/v1/instance/attributes/kubelet-config\n # only write to the final location if curl succeeds\n mv \"${tmp_kubelet_config}\" \"${dest}\"\n )\n}\n\n# A function to pull kube-master-certs from HMS using hurl\nfunction download-kube-master-certs-hurl {\n local -r endpoint=$(get-metadata-value \"instance/attributes/gke-api-endpoint\")\n local -r tmp_kube_master_certs_path=\"/tmp/kube-master-certs.yaml\"\n local -r kube_master_certs_path=\"${KUBE_HOME}/kube-master-certs\"\n local -r kube_master_certs_hms_path=$(get-metadata-value \"instance/attributes/kube-master-certs-path\")\n\n echo \"Downloading kube-master-certs via hurl from ${kube_master_certs_hms_path} to ${tmp_kube_master_certs_path}\"\n retry-forever 30 ${KUBE_HOME}/bin/hurl --hms_address $endpoint \\\n --dst \"${tmp_kube_master_certs_path}\" \\\n \"${kube_master_certs_hms_path}\"\n\n # Convert the yaml format file into a shell-style file.\n eval \"$(python3 -c '''\nimport pipes,sys,yaml\nitems = yaml.load(sys.stdin, Loader=yaml.BaseLoader).items()\nfor k, v in items:\n print(\"readonly {var}={value}\".format(var=k, value=pipes.quote(str(v))))\n''' \u003c \"${tmp_kube_master_certs_path}\" \u003e \"${kube_master_certs_path}\")\"\n\n # Remove the temp certs and strip perms for other users\n rm -f \"${tmp_kube_master_certs_path}\"\n chmod 600 \"${kube_master_certs_path}\"\n}\n\nfunction validate-hash {\n local -r file=\"$1\"\n local -r expected=\"$2\"\n\n actual_sha1=$(sha1sum \"${file}\" | awk '{ print $1 }') || true\n actual_sha512=$(sha512sum \"${file}\" | awk '{ print $1 }') || true\n if [[ \"${actual_sha1}\" != \"${expected}\" ]] && [[ \"${actual_sha512}\" != \"${expected}\" ]]; then\n echo \"== ${file} corrupted, sha1 ${actual_sha1}/sha512 ${actual_sha512} doesn't match expected ${expected} ==\"\n return 1\n fi\n}\n\n# Get default service account credentials of the VM.\nGCE_METADATA_INTERNAL=\"http://metadata.google.internal/computeMetadata/v1/instance\"\nfunction get-credentials {\n # shellcheck disable=SC2086\n curl ${CURL_FLAGS} \\\n -H \"Metadata-Flavor: Google\" \\\n \"${GCE_METADATA_INTERNAL}/service-accounts/default/token\" \\\n | python3 -c 'import sys; import json; print(json.loads(sys.stdin.read())[\"access_token\"])'\n}\n\nfunction valid-storage-scope {\n # shellcheck disable=SC2086\n curl ${CURL_FLAGS} \\\n -H \"Metadata-Flavor: Google\" \\\n \"${GCE_METADATA_INTERNAL}/service-accounts/default/scopes\" \\\n | grep -E \"auth/devstorage|auth/cloud-platform\"\n}\n\n# Retry a download until we get it. Takes a hash and a set of URLs.\n#\n# $1 is the sha512/sha1 hash of the URL. Can be \"\" if the sha512/sha1 hash is unknown.\n# $2+ are the URLs to download.\n# env var FORCE_USE_CREDENTIAL indicates whether to force using credential.\nfunction download-or-bust {\n if [[ \"${ARTIFACT_DOWNLOAD_RESTRICTED:-}\" == \"true\" ]]; then\n echo \"Cannot download: $* as downloading is restricted, exiting\"\n exit 1\n fi\n\n local -r hash=\"$1\"\n shift 1\n\n while true; do\n for url in \"$@\"; do\n local file=\"${url##*/}\"\n rm -f \"${file}\"\n # if the url belongs to GCS API we should use oauth2_token in the headers if the VM service account has storage scopes\n local curl_headers=\"\"\n\n if [[ \"$url\" =~ ^${STORAGE_ENDPOINT}/.* ]] || [[ \"${FORCE_USE_CREDENTIAL:-false}\" == \"true\" ]] ; then\n local canUseCredentials=0\n\n echo \"Getting the scope of service account configured for VM.\"\n if ! valid-storage-scope ; then\n canUseCredentials=1\n # this behavior is preserved for backward compatibility. We want to fail fast if SA is not available\n # and try to download without SA if scope does not exist on SA\n echo \"No service account or service account without storage scope. Attempt to download without service account token.\"\n fi\n\n if [[ \"${canUseCredentials}\" == \"0\" ]] ; then\n echo \"Getting the service account access token configured for VM.\"\n local access_token=\"\";\n if access_token=$(get-credentials); then\n echo \"Service account access token is received. Downloading ${url} using this token.\"\n else\n echo \"Cannot get a service account token. Exiting.\"\n exit 1\n fi\n\n curl_headers=${access_token:+Authorization: Bearer \"${access_token}\"}\n fi\n fi\n if ! curl ${curl_headers:+-H \"${curl_headers}\"} -f --ipv4 -Lo \"${file}\" --connect-timeout 20 --retry 6 --retry-delay 10 --retry-connrefused \"${url}\"; then\n echo \"== Failed to download ${url}. Retrying. ==\"\n elif [[ -n \"${hash}\" ]] && ! validate-hash \"${file}\" \"${hash}\"; then\n echo \"== Hash validation of ${url} failed. Retrying. ==\"\n else\n if [[ -n \"${hash}\" ]]; then\n echo \"== Downloaded ${url} (HASH = ${hash}) ==\"\n else\n echo \"== Downloaded ${url} ==\"\n fi\n return\n fi\n done\n done\n}\n\nfunction record-preload-info {\n echo \"$1,$2\" \u003e\u003e \"${KUBE_HOME}/preload_info\"\n echo \"Recording preload info for ${1} ${2}\"\n}\n\nfunction is-preloaded {\n local -r key=$1\n local -r value=$2\n\n if ! grep -qs \"${key},${value}\" \"${KUBE_HOME}/preload_info\"; then\n if [[ \"${ARTIFACT_DOWNLOAD_RESTRICTED:-}\" == \"true\" ]]; then\n echo \"No preload record found for ${key} and ${value} and downloading is restricted, exiting\"\n exit 1\n fi\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n echo \"No preload record found for ${key} and ${value}\"\n fi\n return 1\n fi\n}\n\nfunction is-ubuntu {\n [[ -f \"/etc/os-release\" && $(grep ^NAME= /etc/os-release) == 'NAME=\"Ubuntu\"' ]]\n}\n\nfunction split-commas {\n echo -e \"${1//,/'\\n'}\"\n}\n\nfunction remount-flexvolume-directory {\n local -r flexvolume_plugin_dir=$1\n mkdir -p \"$flexvolume_plugin_dir\"\n mount --bind \"$flexvolume_plugin_dir\" \"$flexvolume_plugin_dir\"\n mount -o remount,exec \"$flexvolume_plugin_dir\"\n}\n\nfunction install-gci-mounter-tools {\n CONTAINERIZED_MOUNTER_HOME=\"${KUBE_HOME}/containerized_mounter\"\n if [[ -n \"${MOUNTER_ROOTFS_VERSION:-}\" ]]; then\n local -r mounter_rootfs_version=\"${MOUNTER_ROOTFS_VERSION}\"\n local -r mounter_rootfs_tar_sha=\"${MOUNTER_ROOTFS_TAR_SHA512}\"\n else\n local -r mounter_rootfs_version=\"${DEFAULT_MOUNTER_ROOTFS_VERSION}\"\n case \"${HOST_PLATFORM}/${HOST_ARCH}\" in\n linux/amd64)\n local -r mounter_rootfs_tar_sha=\"${DEFAULT_MOUNTER_ROOTFS_TAR_AMD64_SHA512}\"\n ;;\n linux/arm64)\n local -r mounter_rootfs_tar_sha=\"${DEFAULT_MOUNTER_ROOTFS_TAR_ARM64_SHA512}\"\n ;;\n *)\n echo \"Unrecognized version and platform/arch combination:\"\n echo \"$mounter_rootfs_version $HOST_PLATFORM/$HOST_ARCH\"\n echo \"Set MOUNTER_ROOTFS_VERSION and MOUNTER_ROOTFS_TAR_SHA512 to overwrite\"\n exit 1\n ;;\n esac\n fi\n\n if is-preloaded \"mounter\" \"${mounter_rootfs_tar_sha}\"; then\n echo \"mounter is preloaded.\"\n return\n fi\n\n echo \"Downloading gci mounter tools.\"\n mkdir -p \"${CONTAINERIZED_MOUNTER_HOME}\"\n chmod a+x \"${CONTAINERIZED_MOUNTER_HOME}\"\n\n # Copy the mounter binary downloaded with the k8s binaries tar file\n cp \"${KUBE_HOME}/kubernetes/server/bin/mounter\" \"${CONTAINERIZED_MOUNTER_HOME}/mounter\"\n chmod a+x \"${CONTAINERIZED_MOUNTER_HOME}/mounter\"\n # Download the debian rootfs required for the mounter container\n mkdir -p \"${CONTAINERIZED_MOUNTER_HOME}/rootfs\"\n local -r mounter_rootfs_tar=\"containerized-mounter-${mounter_rootfs_version}_${HOST_PLATFORM}_${HOST_ARCH}.tar.gz\"\n download-or-bust \"${mounter_rootfs_tar_sha}\" \"${STORAGE_ENDPOINT}/gke-release/containerized-mounter/${mounter_rootfs_version}/${mounter_rootfs_tar}\"\n mv \"${KUBE_HOME}/${mounter_rootfs_tar}\" \"/tmp/${mounter_rootfs_tar}\"\n tar xzf \"/tmp/${mounter_rootfs_tar}\" -C \"${CONTAINERIZED_MOUNTER_HOME}/rootfs\"\n rm \"/tmp/${mounter_rootfs_tar}\"\n mkdir -p \"${CONTAINERIZED_MOUNTER_HOME}/rootfs/var/lib/kubelet\"\n\n record-preload-info \"mounter\" \"${mounter_rootfs_tar_sha}\"\n}\n\nfunction docker-installed {\n if systemctl cat docker.service &\u003e /dev/null ; then\n return 0\n else\n return 1\n fi\n}\n\nfunction disable_aufs() {\n # disable aufs module if aufs is loaded\n if lsmod | grep \"aufs\" &\u003e /dev/null ; then\n sudo modprobe -r aufs\n fi\n}\n\nfunction detect_mtu {\n local MTU=1460\n if [[ \"${DETECT_MTU:-}\" == \"true\" ]];then\n local default_nic=$(ip route get 8.8.8.8 | sed -nr \"s/.*dev ([^\\ ]+).*/\\1/p\")\n if [ -f \"/sys/class/net/$default_nic/mtu\" ]; then\n MTU=$(cat /sys/class/net/$default_nic/mtu)\n fi\n fi\n echo $MTU\n}\n\n# This function cofigures docker. It has no conditional logic.\n# It will restart docker service so new settings will be picked up.\n# This method cannot be preloaded as the boot disk changes will not be persistet thru the reboots.\nfunction assemble-docker-flags {\n # log the contents of the /etc/docker/daemon.json if already exists\n if [ -f /etc/docker/daemon.json ]; then\n echo \"Contents of the old docker config\"\n cat /etc/docker/daemon.json\n fi\n\n disable_aufs\n\n # COS and Ubuntu have different docker options configured as command line arguments.\n # Use systemctl show docker to see the full list of options.\n # When configuring Docker options you can use daemon.json or command line arguments\n # The same option cannot be configured by both, even if it is a list option and can be repeated in the command line multiple times.\n # This is why we are not simply configuring everything in daemon.json.\n\n local MTU=\"$(detect_mtu)\"\n\n # options to be set on COS, registry-mirror is pre-configured on COS\n local os_specific_options=\"\\\"live-restore\\\": true,\\\n \\\"storage-driver\\\": \\\"overlay2\\\",\\\n \\\"mtu\\\": ${MTU},\"\n\n if is-ubuntu; then\n # Ubuntu already have everthing set\n os_specific_options=\"\"\n fi\n\n # Important setting: set docker0 cidr to private ip address range to avoid conflict with cbr0 cidr range (\"bip\": \"169.254.123.1/24\")\n cat \u003e /etc/docker/daemon.json \u003c\u003cEOF\n{\n \"pidfile\": \"/var/run/docker.pid\",\n \"iptables\": false,\n \"ip-masq\": false,\n \"log-level\": \"warn\",\n \"bip\": \"169.254.123.1/24\",\n \"log-driver\": \"json-file\",\n ${os_specific_options}\n \"log-opts\": {\n \"max-size\": \"10m\",\n \"max-file\": \"5\"\n }\n}\nEOF\n\n # Do not move to the daemon.json file for backward compatibility.\n # Command line and config file options cannot be both defined and custoemr customization may break.\n # insecure-registry setting was inherited from the past, see b/203231428. Keeping for backward compatibility.\n echo \"DOCKER_OPTS=\\\"--registry-mirror=https://mirror.gcr.io --insecure-registry 10.0.0.0/8\\\"\" \u003e /etc/default/docker\n\n echo \"Docker command line and configuration are updated. Restart docker to pick it up\"\n systemctl restart docker\n}\n\n# Install node problem detector binary.\nfunction install-node-problem-detector {\n if [[ -n \"${NODE_PROBLEM_DETECTOR_VERSION:-}\" ]]; then\n local -r npd_version=\"${NODE_PROBLEM_DETECTOR_VERSION}\"\n local -r npd_hash=\"${NODE_PROBLEM_DETECTOR_TAR_HASH}\"\n else\n local -r npd_version=\"${DEFAULT_NPD_VERSION}\"\n case \"${HOST_PLATFORM}/${HOST_ARCH}\" in\n linux/amd64)\n local -r npd_hash=\"${DEFAULT_NPD_HASH_AMD64}\"\n ;;\n linux/arm64)\n local -r npd_hash=\"${DEFAULT_NPD_HASH_ARM64}\"\n ;;\n # no other architectures are supported currently.\n # Assumption is that this script only runs on linux,\n # see cluster/gce/windows/k8s-node-setup.psm1 for windows\n # https://github.com/kubernetes/node-problem-detector/releases/\n *)\n echo \"Unrecognized version and platform/arch combination:\"\n echo \"$DEFAULT_NPD_VERSION $HOST_PLATFORM/$HOST_ARCH\"\n echo \"Set NODE_PROBLEM_DETECTOR_VERSION and NODE_PROBLEM_DETECTOR_TAR_HASH to overwrite\"\n exit 1\n ;;\n esac\n fi\n local -r npd_tar=\"node-problem-detector-${npd_version}-${HOST_PLATFORM}_${HOST_ARCH}.tar.gz\"\n\n if is-preloaded \"${npd_tar}\" \"${npd_hash}\"; then\n echo \"${npd_tar} is preloaded.\"\n return\n fi\n\n echo \"Downloading ${npd_tar}.\"\n local -r npd_release_path=\"${NODE_PROBLEM_DETECTOR_RELEASE_PATH:-${STORAGE_ENDPOINT}/gke-release}\"\n download-or-bust \"${npd_hash}\" \"${npd_release_path}/node-problem-detector/${npd_tar}\"\n local -r npd_dir=\"${KUBE_HOME}/node-problem-detector\"\n mkdir -p \"${npd_dir}\"\n tar xzf \"${KUBE_HOME}/${npd_tar}\" -C \"${npd_dir}\" --overwrite\n mv \"${npd_dir}/bin\"/* \"${KUBE_BIN}\"\n chmod a+x \"${KUBE_BIN}/node-problem-detector\"\n rmdir \"${npd_dir}/bin\"\n rm -f \"${KUBE_HOME}/${npd_tar}\"\n\n record-preload-info \"${npd_tar}\" \"${npd_hash}\"\n}\n\n# Install node problem detector custom plugins.\nfunction install-npd-custom-plugins {\n local -r version=\"${NPD_CUSTOM_PLUGINS_VERSION}\"\n case \"${HOST_PLATFORM}/${HOST_ARCH}\" in\n linux/amd64)\n local -r hash=\"${NPD_CUSTOM_PLUGINS_TAR_AMD64_HASH}\"\n ;;\n linux/arm64)\n local -r hash=\"${NPD_CUSTOM_PLUGINS_TAR_ARM64_HASH}\"\n ;;\n *)\n echo \"Unrecognized version and platform/arch combination:\"\n echo \"$NPD_CUSTOM_PLUGINS_VERSION $HOST_PLATFORM/$HOST_ARCH\"\n exit 1\n esac\n local -r tar=\"npd-custom-plugins-${version}-${HOST_PLATFORM}-${HOST_ARCH}.tar.gz\"\n\n if is-preloaded \"${tar}\" \"${hash}\"; then\n echo \"${tar} is preloaded.\"\n return\n fi\n\n echo \"Downloading ${tar}.\"\n download-or-bust \"${hash}\" \"${STORAGE_ENDPOINT}/gke-release/npd-custom-plugins/${version}/${tar}\"\n local -r dir=\"${KUBE_HOME}/npd-custom-plugins\"\n mkdir -p \"${dir}\"\n tar xzf \"${KUBE_HOME}/${tar}\" -C \"${dir}\" --overwrite\n local -r kube_bin_dir=\"${KUBE_HOME}/bin\"\n cp -r \"${dir}/bins\"/* \"${kube_bin_dir}\"\n rm -f \"${KUBE_HOME}/${tar}\"\n\n record-preload-info \"${tar}\" \"${hash}\"\n}\n\nfunction install-cni-binaries {\n local -r cni_version=${CNI_VERSION:-$DEFAULT_CNI_VERSION}\n if [[ -n \"${CNI_VERSION:-}\" ]]; then\n local -r cni_hash=\"${CNI_HASH:-}\"\n else\n local -r cni_hash_var=\"DEFAULT_CNI_HASH_${HOST_PLATFORM^^}_${HOST_ARCH^^}\"\n local -r cni_hash=\"${!cni_hash_var}\"\n fi\n\n local -r cni_tar=\"cni-plugins-${HOST_PLATFORM}-${HOST_ARCH}-${cni_version}.tgz\"\n local -r cni_url=\"${STORAGE_ENDPOINT}/gke-release/cni-plugins/${cni_version}/${cni_tar}\"\n\n if is-preloaded \"${cni_tar}\" \"${cni_hash}\"; then\n echo \"${cni_tar} is preloaded.\"\n return\n fi\n\n echo \"Downloading cni binaries\"\n download-or-bust \"${cni_hash}\" \"${cni_url}\"\n local -r cni_dir=\"${KUBE_HOME}/cni\"\n mkdir -p \"${cni_dir}/bin\"\n tar xzf \"${KUBE_HOME}/${cni_tar}\" -C \"${cni_dir}/bin\" --overwrite\n mv \"${cni_dir}/bin\"/* \"${KUBE_BIN}\"\n rmdir \"${cni_dir}/bin\"\n rm -f \"${KUBE_HOME}/${cni_tar}\"\n\n record-preload-info \"${cni_tar}\" \"${cni_hash}\"\n}\n\n# Install crictl binary.\n# Assumptions: HOST_PLATFORM and HOST_ARCH are specified by calling detect_host_info.\nfunction install-crictl {\n if [[ -n \"${CRICTL_VERSION:-}\" ]]; then\n local -r crictl_version=\"${CRICTL_VERSION}\"\n local -r crictl_hash=\"${CRICTL_TAR_HASH}\"\n else\n local -r crictl_version=\"${DEFAULT_CRICTL_VERSION}\"\n case \"${HOST_PLATFORM}/${HOST_ARCH}\" in\n linux/amd64)\n local -r crictl_hash=\"${DEFAULT_CRICTL_AMD64_SHA512}\"\n ;;\n linux/arm64)\n local -r crictl_hash=\"${DEFAULT_CRICTL_ARM64_SHA512}\"\n ;;\n *)\n echo \"Unrecognized version and platform/arch combination:\"\n echo \"$DEFAULT_CRICTL_VERSION $HOST_PLATFORM/$HOST_ARCH\"\n echo \"Set CRICTL_VERSION and CRICTL_TAR_HASH to overwrite\"\n exit 1\n esac\n fi\n local -r crictl=\"crictl-${crictl_version}-${HOST_PLATFORM}-${HOST_ARCH}.tar.gz\"\n\n # Create crictl config file.\n cat \u003e /etc/crictl.yaml \u003c\u003cEOF\nruntime-endpoint: ${CONTAINER_RUNTIME_ENDPOINT:-unix:///run/containerd/containerd.sock}\nEOF\n\n if is-preloaded \"${crictl}\" \"${crictl_hash}\"; then\n echo \"crictl is preloaded\"\n return\n fi\n\n echo \"Downloading crictl\"\n local -r crictl_path=\"${STORAGE_ENDPOINT}/gke-release/cri-tools/${crictl_version}\"\n download-or-bust \"${crictl_hash}\" \"${crictl_path}/${crictl}\"\n tar xf \"${crictl}\"\n mv crictl \"${KUBE_BIN}/crictl\"\n rm -f \"${crictl}\"\n\n record-preload-info \"${crictl}\" \"${crictl_hash}\"\n}\n\nfunction preload-pause-image {\n local -r pause_image=\"${KUBE_DOCKER_REGISTRY}/${GKE_CONTAINERD_INFRA_CONTAINER}\"\n local pause_sha=\"${GKE_CONTAINERD_INFRA_CONTAINER#*@}\"\n if [ -z \"$pause_sha\" ]; then\n echo \"found no digest in GKE_CONTAINERD_INFRA_CONTAINER\"\n else\n for img in $(ctr -n=k8s.io images list -q | grep \"${pause_sha}\"); do\n echo \"pause image ${img} of the same version is preloaded, retagging\"\n if [[ \"${pause_image}\" != \"${img}\" ]]; then\n ctr -n=k8s.io image tag --force ${img} ${pause_image}\n fi\n return\n done\n fi\n\n # preloading pause image. It will be used in preloader and will be\n # useful for staging builds where access_token is needed to pull the image\n local access_token=\"\";\n\n if access_token=$(get-credentials); then\n ctr -n=k8s.io image pull --user=\"oauth2accesstoken:${access_token}\" \"${pause_image}\"\n else\n echo \"No access token. Pulling without it.\"\n ctr -n=k8s.io image pull \"${pause_image}\"\n fi\n pin-docker-image \"pause\"\n}\n\nfunction install-exec-auth-plugin {\n # We always use the URL/VERSION/HASH\n # set at the top of this file,\n # Values from kube-env are ignored in this version.\n local -r plugin_base_url=\"${STORAGE_ENDPOINT}/${EXEC_AUTH_PLUGIN_BUCKET}/gke-exec-auth-plugin/${EXEC_AUTH_PLUGIN_VERSION}\"\n case \"${HOST_PLATFORM}_${HOST_ARCH}\" in\n linux_amd64)\n local -r plugin_url=\"${plugin_base_url}/${HOST_PLATFORM}_${HOST_ARCH}/gke-exec-auth-plugin\"\n local -r plugin_hash=\"${EXEC_AUTH_PLUGIN_LINUX_AMD64_HASH}\"\n ;;\n\n linux_arm64)\n local -r plugin_url=\"${plugin_base_url}/${HOST_PLATFORM}_${HOST_ARCH}/gke-exec-auth-plugin\"\n local -r plugin_hash=\"${EXEC_AUTH_PLUGIN_LINUX_ARM64_HASH}\"\n ;;\n\n *)\n echo \"Unrecognized version and platform/arch combination: ${HOST_PLATFORM}/${HOST_ARCH}\"\n exit 1\n esac\n\n if is-preloaded \"gke-exec-auth-plugin\" \"${plugin_hash}\"; then\n echo \"gke-exec-auth-plugin is preloaded\"\n return\n fi\n\n echo \"Downloading gke-exec-auth-plugin binary\"\n download-or-bust \"${plugin_hash}\" \"${plugin_url}\"\n mv \"${KUBE_HOME}/gke-exec-auth-plugin\" \"${KUBE_BIN}/gke-exec-auth-plugin\"\n chmod a+x \"${KUBE_BIN}/gke-exec-auth-plugin\"\n\n local -r license_url=\"${plugin_base_url}/LICENSE\"\n echo \"Downloading gke-exec-auth-plugin license\"\n download-or-bust \"\" \"${license_url}\"\n mv \"${KUBE_HOME}/LICENSE\" \"${KUBE_BIN}/gke-exec-auth-plugin-license\"\n\n record-preload-info \"gke-exec-auth-plugin\" \"${plugin_hash}\"\n}\n\nfunction install-kube-manifests {\n # Put kube-system pods manifests in ${KUBE_HOME}/kube-manifests/.\n local dst_dir=\"${KUBE_HOME}/kube-manifests\"\n mkdir -p \"${dst_dir}\"\n local manifests_tar_urls\n while IFS= read -r url; do\n manifests_tar_urls+=(\"$url\")\n done \u003c \u003c(split-commas \"${KUBE_MANIFESTS_TAR_URL}\")\n local -r manifests_tar=\"${manifests_tar_urls[0]##*/}\"\n if [ -n \"${KUBE_MANIFESTS_TAR_HASH:-}\" ]; then\n local -r manifests_tar_hash=\"${KUBE_MANIFESTS_TAR_HASH}\"\n else\n echo \"Downloading k8s manifests hash (not found in env)\"\n download-or-bust \"\" \"${manifests_tar_urls[@]/.tar.gz/.tar.gz.sha512}\"\n local -r manifests_tar_hash=$(cat \"${manifests_tar}.sha512\")\n fi\n\n if is-preloaded \"${manifests_tar}\" \"${manifests_tar_hash}\"; then\n echo \"${manifests_tar} is preloaded.\"\n return\n fi\n\n echo \"Downloading k8s manifests tar\"\n download-or-bust \"${manifests_tar_hash}\" \"${manifests_tar_urls[@]}\"\n tar xzf \"${KUBE_HOME}/${manifests_tar}\" -C \"${dst_dir}\" --overwrite\n local -r kube_addon_registry=\"${KUBE_ADDON_REGISTRY:-k8s.gcr.io}\"\n if [[ \"${kube_addon_registry}\" != \"k8s.gcr.io\" ]]; then\n find \"${dst_dir}\" \\(-name '*.yaml' -or -name '*.yaml.in'\\) -print0 | \\\n xargs -0 sed -ri \"s@(image:\\s.*)k8s.gcr.io@\\1${kube_addon_registry}@\"\n find \"${dst_dir}\" \\(-name '*.manifest' -or -name '*.json'\\) -print0 | \\\n xargs -0 sed -ri \"s@(image\\\":\\s+\\\")k8s.gcr.io@\\1${kube_addon_registry}@\"\n fi\n cp \"${dst_dir}/kubernetes/gci-trusty/gci-configure-helper.sh\" \"${KUBE_BIN}/configure-helper.sh\"\n cp \"${dst_dir}/kubernetes/gci-trusty/configure-kubeapiserver.sh\" \"${KUBE_BIN}/configure-kubeapiserver.sh\"\n if [[ -e \"${dst_dir}/kubernetes/gci-trusty/gke-internal-configure-helper.sh\" ]]; then\n cp \"${dst_dir}/kubernetes/gci-trusty/gke-internal-configure-helper.sh\" \"${KUBE_BIN}/\"\n fi\n if [[ -e \"${dst_dir}/kubernetes/gci-trusty/node-registration-checker.sh\" ]]; then\n cp \"${dst_dir}/kubernetes/gci-trusty/node-registration-checker.sh\" \"${KUBE_BIN}/\"\n fi\n cp \"${dst_dir}/kubernetes/gci-trusty/health-monitor.sh\" \"${KUBE_BIN}/health-monitor.sh\"\n cp \"${dst_dir}/kubernetes/gci-trusty/networkd-monitor.sh\" \"${KUBE_BIN}/networkd-monitor.sh\"\n\n rm -f \"${KUBE_HOME}/${manifests_tar}\"\n rm -f \"${KUBE_HOME}/${manifests_tar}.sha512\"\n\n record-preload-info \"${manifests_tar}\" \"${manifests_tar_hash}\"\n}\n\n# Installs hurl to ${KUBE_HOME}/bin/hurl if not already installed.\nfunction install-hurl {\n cd \"${KUBE_HOME}\"\n\n local -r hurl_bin=\"hurl\"\n local -r hurl_gcs_att=\"instance/attributes/hurl-gcs-url\"\n local -r hurl_gcs_url=${HURL_GCS_URL:-$(get-metadata-value \"${hurl_gcs_att}\")}\n local -r hurl_hash=${HURL_HASH:-$(get-metadata-value \"instance/attributes/hurl-bin-hash\")}\n\n ### Fallback to old logic in case hurl_hash is not set\n # extracting version from url, example:\n # $ echo \"https://storage.googleapis.com/gke-master-startup/hurl/gke_master_hurl_20230824.00_p0/hurl\" | sed -n 's/.*gke_master_hurl_\\(.*\\)\\/hurl/\\1/p'\n # 20230824.00_p0\n local -r hurl_version=$(echo \"${hurl_gcs_url}\" | sed -n 's/.*gke_master_hurl_\\(.*\\)\\/hurl/\\1/p')\n\n local -r hurl_preload_digest=${hurl_hash:-$hurl_version}\n\n if is-preloaded \"${hurl_bin}\" \"${hurl_preload_digest}\"; then\n echo \"install-hurl: hurl already installed\"\n return\n fi\n\n if [[ -z \"${hurl_gcs_url}\" ]]; then\n # URL not present in GCE Instance Metadata\n echo \"install-hurl: Unable to find GCE metadata ${hurl_gcs_att}\"\n return\n fi\n\n # Download hurl binary from a GCS bucket.\n echo \"install-hurl: Installing hurl from ${hurl_gcs_url} ... \"\n FORCE_USE_CREDENTIAL=true download-or-bust \"${hurl_hash}\" \"${hurl_gcs_url}\"\n if [[ -f \"${KUBE_HOME}/${hurl_bin}\" ]]; then\n chmod a+x ${KUBE_HOME}/${hurl_bin}\n mv \"${KUBE_HOME}/${hurl_bin}\" \"${KUBE_BIN}/${hurl_bin}\"\n echo \"install-hurl: hurl installed to ${KUBE_BIN}/${hurl_bin}\"\n record-preload-info \"${hurl_bin}\" \"${hurl_preload_digest}\"\n return\n fi\n}\n\nfunction install-k8s-pki {\n local -r k8s_pki_url=\"${STORAGE_ENDPOINT}/${K8S_PKI_GCS_PATH}\"\n local -r k8s_pki_hash=\"${K8S_PKI_HASH}\"\n\n if is-preloaded \"k8s_pki\" \"${k8s_pki_hash}\"; then\n echo \"k8s_pki is preloaded\"\n return\n fi\n\n echo \"Downloading k8s_pki binary\"\n download-or-bust \"${k8s_pki_hash}\" \"${k8s_pki_url}\"\n mv \"${KUBE_HOME}/k8s_pki\" \"${KUBE_BIN}/k8s_pki\"\n chmod a+x \"${KUBE_BIN}/k8s_pki\"\n\n echo \"Record k8s_pki preload info\"\n record-preload-info \"k8s_pki\" \"${k8s_pki_hash}\"\n}\n\n\nfunction install-auger {\n echo \"Downloading auger binary\"\n if [[ -f \"${KUBE_HOME}/bin/auger\" ]]; then\n echo \"auger is already installed\"\n return\n fi\n AUGER_STORE_PATH=\"${AUGER_STORE_PATH:-${STORAGE_ENDPOINT}/gke-release-staging/auger}\"\n AUGER_VERSION=\"${AUGER_VERSION:-v1.0.0-gke.1}\"\n download-or-bust \"\" \"${AUGER_STORE_PATH}/${AUGER_VERSION}/auger.sha1\"\n sha1=\"$(cat auger.sha1)\"\n readonly sha1 # Declare readonly separately to avoid masking error values.\n rm -f \"auger.sha1\"\n download-or-bust \"${sha1}\" \"${AUGER_STORE_PATH}/${AUGER_VERSION}/auger\"\n mv \"${KUBE_HOME}/auger\" \"${KUBE_HOME}/bin/auger\"\n chmod a+x \"${KUBE_HOME}/bin/auger\"\n record-preload-info \"auger\" \"${sha1}\"\n}\n\n# Extract etcdctl binary from etcd image.\nfunction install-etcdctl {\n echo \"Installing etcdctl binary\"\n if [[ -f \"${KUBE_HOME}/bin/etcdctl\" ]]; then\n echo \"etcdctl is already installed\"\n return\n fi\n local -r etcd_image=\"gcr.io/gke-master-images/etcd:${ETCDCTL_VERSION}\"\n container_id=\"$(docker create \"${etcd_image}\" sh)\"\n readonly containerId\n docker cp \"${container_id}:usr/local/bin/etcdctl\" \"${KUBE_HOME}/bin/etcdctl\"\n chmod a+x \"${KUBE_HOME}/bin/etcdctl\"\n docker rm \"${container_id}\"\n docker rmi \"${etcd_image}\"\n}\n\nfunction install-gcfsd {\n echo \"Downloading Riptide FUSE client\"\n if is-preloaded \"gcfsd\" \"${RIPTIDE_FUSE_VERSION}\"; then\n echo \"gcfsd is preloaded.\"\n return\n fi\n\n if [[ \"${HOST_ARCH}\" == \"arm64\" ]]; then\n RIPTIDE_FUSE_STORE_PATH=\"${STORAGE_ENDPOINT}/gke-release/gcfsd/${RIPTIDE_FUSE_VERSION}/arm64\"\n TAR_SHA=\"${RIPTIDE_FUSE_ARM64_SHA512}\"\n BIN_SHA=\"${RIPTIDE_FUSE_BIN_ARM64_SHA512}\"\n else\n RIPTIDE_FUSE_STORE_PATH=\"${STORAGE_ENDPOINT}/gke-release/gcfsd/${RIPTIDE_FUSE_VERSION}\"\n TAR_SHA=\"${RIPTIDE_FUSE_AMD64_SHA512}\"\n BIN_SHA=\"${RIPTIDE_FUSE_BIN_AMD64_SHA512}\"\n fi\n\n echo \"Downloading tarball for gcfsd\"\n download-or-bust \"${TAR_SHA}\" \"${RIPTIDE_FUSE_STORE_PATH}/gcfsd.tar.gz\"\n\n download-or-bust \"${BIN_SHA}\" \"${RIPTIDE_FUSE_STORE_PATH}/gcfsd\"\n mv \"${KUBE_HOME}/gcfsd\" \"${KUBE_HOME}/bin/gcfsd\"\n chmod a+x \"${KUBE_HOME}/bin/gcfsd\"\n record-preload-info \"gcfsd\" \"${RIPTIDE_FUSE_VERSION}\"\n}\n\nfunction install-riptide-snapshotter {\n echo \"Downloading Riptide snapshotter\"\n if is-preloaded \"containerd-gcfs-grpc\" \"${RIPTIDE_SNAPSHOTTER_VERSION}\"; then\n echo \"containerd-gcfs-grpc is preloaded.\"\n return\n fi\n RIPTIDE_SNAPSHOTTER_STORE_PATH=\"${STORAGE_ENDPOINT}/gke-release/gcfs-snapshotter/${RIPTIDE_SNAPSHOTTER_VERSION}\"\n\n echo \"Downloading tarball for riptide-snapshotter\"\n download-or-bust \"${RIPTIDE_SNAPSHOTTER_SHA512}\" \"${RIPTIDE_SNAPSHOTTER_STORE_PATH}/containerd-gcfs-grpc.tar.gz\"\n\n if [[ \"${HOST_ARCH}\" == \"arm64\" ]]; then\n RIPTIDE_SNAPSHOTTER_BINARY=\"containerd-gcfs-grpc-arm64\"\n RIPTIDE_SNAPSHOTTER_BIN_SHA512=\"${RIPTIDE_SNAPSHOTTER_BIN_ARM64_SHA512}\"\n else\n RIPTIDE_SNAPSHOTTER_BINARY=\"containerd-gcfs-grpc\"\n RIPTIDE_SNAPSHOTTER_BIN_SHA512=\"${RIPTIDE_SNAPSHOTTER_BIN_AMD64_SHA512}\"\n fi\n\n download-or-bust \"${RIPTIDE_SNAPSHOTTER_BIN_SHA512}\" \"${RIPTIDE_SNAPSHOTTER_STORE_PATH}/${RIPTIDE_SNAPSHOTTER_BINARY}\"\n mv \"${KUBE_HOME}/${RIPTIDE_SNAPSHOTTER_BINARY}\" \"${KUBE_HOME}/bin/containerd-gcfs-grpc\"\n chmod a+x \"${KUBE_HOME}/bin/containerd-gcfs-grpc\"\n record-preload-info \"containerd-gcfs-grpc\" \"${RIPTIDE_SNAPSHOTTER_VERSION}\"\n}\n\n# Install Riptide FUSE client and Riptide snapshotter\nfunction install-riptide {\n install-gcfsd\n install-riptide-snapshotter\n}\n\nfunction prepare-riptide-snapshotter-preloader {\n source ${KUBE_BIN}/gke-internal-configure-helper.sh\n log-wrap 'GKESetupContainerd' gke-setup-containerd\n}\n\nfunction install-auth-provider-gcp {\n case \"${HOST_ARCH}\" in\n amd64)\n local -r auth_provider_gcp_hash=\"${AUTH_PROVIDER_GCP_HASH_LINUX_AMD64}\"\n ;;\n arm64)\n local -r auth_provider_gcp_hash=\"${AUTH_PROVIDER_GCP_HASH_LINUX_ARM64}\"\n ;;\n *)\n echo \"Unrecognized version and platform/arch combination: ${HOST_PLATFORM}/${HOST_ARCH}\"\n exit 1\n esac\n\n if is-preloaded \"auth-provider-gcp\" \"${auth_provider_gcp_hash}\"; then\n echo \"auth-provider-gcp is preloaded.\"\n return\n fi\n\n local -r auth_provider_storage_url=\"${STORAGE_ENDPOINT}/gke-release/auth-provider-gcp/${AUTH_PROVIDER_GCP_VERSION}/${HOST_PLATFORM}_${HOST_ARCH}/auth-provider-gcp\"\n echo \"Downloading auth-provider-gcp ${auth_provider_storage_url}\" .\n download-or-bust \"${auth_provider_gcp_hash}\" \"${auth_provider_storage_url}\"\n\n # Keep in sync with --image-credential-provider-bin-dir in cloud/kubernetes/distro/legacy/kube_env.go\n mv \"${KUBE_HOME}/auth-provider-gcp\" \"${KUBE_BIN}\"\n chmod a+x \"${KUBE_BIN}/auth-provider-gcp\"\n\n record-preload-info \"auth-provider-gcp\" \"${auth_provider_gcp_hash}\"\n}\n\nfunction download-gvisor-installer {\n local -r installer_image_hash=$1\n local -r installer_image=\"${KUBE_DOCKER_REGISTRY}/gke-gvisor-installer@sha256:${installer_image_hash}\"\n if access_token=$(get-credentials); then\n \"${KUBE_BIN}/crictl\" pull --creds \"oauth2accesstoken:${access_token}\" \"${installer_image}\"\n else\n \"${KUBE_BIN}/crictl\" pull \"${installer_image}\"\n fi\n}\n\nfunction configure-cgroup-mode {\n if which cgroup_helper \u003e /dev/null 2\u003e&1; then\n if [[ \"${CGROUP_MODE:-}\" == \"v1\" ]] && cgroup_helper show | grep -q 'unified'; then\n cgroup_helper set hybrid\n echo \"set cgroup config to hybrid, now rebooting...\"\n reboot\n elif [[ \"${CGROUP_MODE:-}\" == \"v2\" ]] && cgroup_helper show | grep -q 'hybrid'; then\n cgroup_helper set unified\n echo \"set cgroup config to unified, now rebooting...\"\n reboot\n fi\n fi\n}\n\n# To improve the shieded VM reliability b/327650100\nfunction check-tpm-file {\n if [[ -z \"${TPM_BOOTSTRAP_KEY:-}\" ]]; then\n echo \"TPM_BOOTSTRAP_KEY is empty, thus vTPM is disabled, skip tpm file check\"\n return 0\n else\n echo \"TPM_BOOTSTRAP_KEY is not empty, thus vTPM is enabled, checking tpm file\"\n if [[ -e \"/dev/tpm0\" ]]; then\n echo \"/dev/tpm0 exists.\"\n return 0\n else\n echo \"/dev/tpm0 doesn't exist.\"\n return 1\n fi\n fi\n}\n\nfunction detect-reboot-needed {\n # Exit if it is on the master\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n return\n fi\n\n if [[ \"${ENABLE_BEST_EFFORT_NODE_REBOOT:-}\" == \"true\" ]]; then\n if check-tpm-file; then\n echo \"TPM is present; continuing bootstrap...\"\n return\n fi\n\n echo \"TPM file check doesn't pass!\"\n if ! REBOOT_HISTORY=$(journalctl --list-boots --quiet | wc -l); then\n echo \"skip reboot attempt due to the journalctl error\"\n return\n fi\n if [[ $(($REBOOT_HISTORY)) -gt ${MAX_BOOT_COUNT} ]]; then\n echo \"best effort reboot attempt ${REBOOT_HISTORY} exceed ${MAX_BOOT_COUNT}! stop rebooting!\"\n else\n # write to a persistent file after reboot for NPD reporting event\n # used in npd-custom-plugins/configs/node-reboot-monitor.json\n mkdir -p /var/lib/gke\n echo '1' \u003e\u003e /var/lib/gke/best_effort_reboot_marker\n echo \"best effort reboot attempt ${REBOOT_HISTORY}! rebooting...\"\n reboot\n fi\n fi\n}\n\n# A helper function for loading a docker image. It keeps trying up to 5 times.\n#\n# $1: Full path of the docker image\nfunction try-load-docker-image {\n local -r img=$1\n echo \"Try to load docker image file ${img}\"\n # Temporarily turn off errexit, because we don't want to exit on first failure.\n set +e\n local -r max_attempts=5\n local -i attempt_num=1\n\n if [[ \"${CONTAINER_RUNTIME_NAME:-}\" == \"containerd\" || \"${CONTAINERD_TEST:-}\" == \"containerd\" ]]; then\n load_image_command=${LOAD_IMAGE_COMMAND:-ctr -n=k8s.io images import}\n else\n load_image_command=\"${LOAD_IMAGE_COMMAND:-}\"\n fi\n\n # Deliberately word split load_image_command\n # shellcheck disable=SC2086\n until timeout 30 ${load_image_command} \"${img}\"; do\n if [[ \"${attempt_num}\" == \"${max_attempts}\" ]]; then\n echo \"Fail to load docker image file ${img} using ${load_image_command} after ${max_attempts} retries. Exit!!\"\n exit 1\n else\n attempt_num=$((attempt_num+1))\n sleep 5\n fi\n done\n # Re-enable errexit.\n set -e\n}\n\n# Loads kube-system docker images. It is better to do it before starting kubelet,\n# as kubelet will restart docker daemon, which may interfere with loading images.\nfunction load-docker-images {\n echo \"Start loading kube-system docker images\"\n local -r img_dir=\"${KUBE_HOME}/kube-docker-files\"\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n try-load-docker-image \"${img_dir}/kube-apiserver.tar\"\n try-load-docker-image \"${img_dir}/kube-controller-manager.tar\"\n try-load-docker-image \"${img_dir}/kube-scheduler.tar\"\n else\n try-load-docker-image \"${img_dir}/kube-proxy.tar\"\n fi\n}\n\n# A helper function for retagging a docker image with new tag and new registry.\n# $1: Image prefix\n# $2: Image tag\n# $3: Destination tag\n# $4: Destination registry\nfunction retag-docker-image {\n local -r img_prefix=$1\n local -r img_tag=$2\n local -r dest_tag=$3\n local -r dest_registry=$4\n echo \"Retagging all images with prefix: ${img_prefix} and tag: ${img_tag} with new tag: ${dest_tag} and new registry: ${dest_registry}\"\n local src_img=\"\"\n for src_img in $(ctr -n=k8s.io images list -q | grep \"/${img_prefix}\" | grep \":${img_tag}$\"); do\n dest_img=${src_img/:${img_tag}/:${dest_tag}}\n dest_img=${dest_registry}/${dest_img##*/}\n if [[ \"${dest_img}\" != \"${src_img}\" ]]; then\n cmd=\"ctr -n=k8s.io image tag --force ${src_img} ${dest_img}\"\n echo \"Retag command: ${cmd}\"\n ${cmd}\n fi\n done\n}\n\n# Retags kube-system docker images with passed in kube-apiserver/kubelet versions.\nfunction retag-docker-images {\n echo \"Start retagging kube-system docker images\"\n local src_tag=\"\"\n local dest_tag=\"\"\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n src_tag=$(cat /home/kubernetes/kube-docker-files/kube-apiserver.docker_tag)\n # Keep the tag the same unless overridden\n dest_tag=\"${src_tag}\"\n if [[ -n \"${KUBE_APISERVER_VERSION:-}\" ]]; then\n # Docker tags cannot contain '+', make CI versions a valid docker tag.\n dest_tag=${KUBE_APISERVER_VERSION/+/_}\n fi\n retag-docker-image \"kube-apiserver\" \"${src_tag}\" \"${dest_tag}\" \"${KUBE_DOCKER_REGISTRY}\"\n retag-docker-image \"kube-controller-manager\" \"${src_tag}\" \"${dest_tag}\" \"${KUBE_DOCKER_REGISTRY}\"\n retag-docker-image \"kube-scheduler\" \"${src_tag}\" \"${dest_tag}\" \"${KUBE_DOCKER_REGISTRY}\"\n else\n src_tag=$(cat /home/kubernetes/kube-docker-files/kube-proxy.docker_tag)\n # Keep the tag the same unless overridden\n dest_tag=\"${src_tag}\"\n if [[ -n \"${KUBELET_VERSION:-}\" ]]; then\n # Docker tags cannot contain '+', make CI versions a valid docker tag.\n dest_tag=${KUBELET_VERSION/+/_}\n fi\n retag-docker-image \"kube-proxy\" \"${src_tag}\" \"${dest_tag}\" \"${KUBE_DOCKER_REGISTRY}\"\n fi\n}\n\nfunction ensure-container-runtime {\n if [[ \"${CONTAINER_RUNTIME}\" == \"docker\" ]]; then\n echo \"Dockershim is not supported. Container runtime must be set to containerd\"\n exit 2\n fi\n}\n\nfunction pin-docker-image {\n local -r img_prefix=$1\n echo \"Pinning: ${img_prefix}\"\n for img in $(ctr -n=k8s.io images list -q | grep \"/${img_prefix}\"); do\n cmd=\"ctr -n k8s.io images label ${img} io.cri-containerd.pinned=pinned\"\n ${cmd}\n done\n}\n\nfunction pin-docker-images {\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n pin-docker-image \"kube-apiserver\"\n pin-docker-image \"kube-controller-manager\"\n pin-docker-image \"kube-scheduler\"\n else\n pin-docker-image \"kube-proxy\"\n fi\n}\n\n# Downloads kubernetes binaries and kube-system manifest tarball, unpacks them,\n# and places them into suitable directories. Files are placed in /home/kubernetes.\nfunction install-kube-binary-config {\n cd \"${KUBE_HOME}\"\n local server_binary_tar_urls\n while IFS= read -r url; do\n server_binary_tar_urls+=(\"$url\")\n done \u003c \u003c(split-commas \"${SERVER_BINARY_TAR_URL}\")\n local -r server_binary_tar=\"${server_binary_tar_urls[0]##*/}\"\n if [[ -n \"${SERVER_BINARY_TAR_HASH:-}\" ]]; then\n local -r server_binary_tar_hash=\"${SERVER_BINARY_TAR_HASH}\"\n else\n echo \"Downloading binary release sha512 (not found in env)\"\n download-or-bust \"\" \"${server_binary_tar_urls[@]/.tar.gz/.tar.gz.sha512}\"\n local -r server_binary_tar_hash=$(cat \"${server_binary_tar}.sha512\")\n fi\n\n if is-preloaded \"${server_binary_tar}\" \"${server_binary_tar_hash}\"; then\n echo \"${server_binary_tar} is preloaded.\"\n else\n echo \"Downloading binary release tar\"\n download-or-bust \"${server_binary_tar_hash}\" \"${server_binary_tar_urls[@]}\"\n tar xzf \"${KUBE_HOME}/${server_binary_tar}\" -C \"${KUBE_HOME}\" --overwrite\n # Copy docker_tag and image files to ${KUBE_HOME}/kube-docker-files.\n local -r src_dir=\"${KUBE_HOME}/kubernetes/server/bin\"\n local dst_dir=\"${KUBE_HOME}/kube-docker-files\"\n mkdir -p \"${dst_dir}\"\n cp \"${src_dir}/\"*.docker_tag \"${dst_dir}\"\n if [[ \"${KUBERNETES_MASTER:-}\" == \"false\" ]]; then\n cp \"${src_dir}/kube-proxy.tar\" \"${dst_dir}\"\n else\n cp \"${src_dir}/kube-apiserver.tar\" \"${dst_dir}\"\n cp \"${src_dir}/kube-controller-manager.tar\" \"${dst_dir}\"\n cp \"${src_dir}/kube-scheduler.tar\" \"${dst_dir}\"\n cp -r \"${KUBE_HOME}/kubernetes/addons\" \"${dst_dir}\"\n fi\n load-docker-images\n mv \"${src_dir}/kubelet\" \"${KUBE_BIN}\"\n mv \"${src_dir}/kubectl\" \"${KUBE_BIN}\"\n\n # Some older images have LICENSES baked-in as a file. Presumably they will\n # have the directory baked-in eventually.\n rm -rf \"${KUBE_HOME}\"/LICENSES\n mv \"${KUBE_HOME}/kubernetes/LICENSES\" \"${KUBE_HOME}\"\n mv \"${KUBE_HOME}/kubernetes/kubernetes-src.tar.gz\" \"${KUBE_HOME}\"\n\n # Pin docker images to avoid GC\n pin-docker-images\n\n record-preload-info \"${server_binary_tar}\" \"${server_binary_tar_hash}\"\n fi\n\n retag-docker-images\n\n if [[ \"${NETWORK_PROVIDER:-}\" == \"kubenet\" ]] || \\\n [[ \"${NETWORK_PROVIDER:-}\" == \"cni\" ]]; then\n install-cni-binaries\n fi\n\n # Put kube-system pods manifests in ${KUBE_HOME}/kube-manifests/.\n install-kube-manifests\n chmod -R 755 \"${KUBE_BIN}\"\n\n # Install gci mounter related artifacts to allow mounting storage volumes in GCI\n install-gci-mounter-tools\n\n # Remount the Flexvolume directory with the \"exec\" option, if needed.\n if [[ \"${REMOUNT_VOLUME_PLUGIN_DIR:-}\" == \"true\" && -n \"${VOLUME_PLUGIN_DIR:-}\" ]]; then\n remount-flexvolume-directory \"${VOLUME_PLUGIN_DIR}\"\n fi\n\n # Install crictl on each node.\n install-crictl\n\n # Preload pause image\n preload-pause-image\n\n # Copy health check binaries to a tmpfs mount to reduce block IO usage.\n setup-shm-healthcheck-binaries\n\n # TODO(awly): include the binary and license in the OS image.\n install-exec-auth-plugin\n\n if [[ \"${KUBERNETES_MASTER:-}\" == \"false\" ]] && \\\n [[ \"${ENABLE_NODE_PROBLEM_DETECTOR:-}\" == \"standalone\" ]]; then\n install-node-problem-detector\n install-npd-custom-plugins\n fi\n\n # Clean up.\n rm -rf \"${KUBE_HOME}/kubernetes\"\n rm -f \"${KUBE_HOME}/${server_binary_tar}\"\n rm -f \"${KUBE_HOME}/${server_binary_tar}.sha512\"\n}\n\nfunction setup-shm-healthcheck-binaries() {\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n return\n fi\n if [[ \"${ENABLE_SHM_HEALTHCHECK_BINARIES:-}\" != \"true\" ]];then\n return\n fi\n\n local -r shm_dir=\"${HEALTHCHECK_SHM_DIR:-/dev/kube_shm}\"\n local -r shm_bin_dir=\"${shm_dir}/bin\"\n\n mkdir -p \"$shm_dir\"\n mount -t tmpfs -o exec none \"$shm_dir\"\n mkdir \"${shm_bin_dir}\"\n\n cp -f \"${KUBE_BIN}/crictl\" \"${shm_bin_dir}/crictl\"\n cp -f \"$(which curl)\" \"${shm_bin_dir}/curl\"\n}\n\nfunction configure-pga-if-needed() {\n echo \"Detecting connectivity to ${STORAGE_ENDPOINT}...\"\n local status=0\n curl --ipv4 -L --connect-timeout 10 --retry 3 --retry-connrefused ${STORAGE_ENDPOINT} || status=\"$?\"\n # connection is refused(7) or timeout(28).\n if [[ \"${status}\" == \"7\" || \"${status}\" == \"28\" ]]; then\n status=0\n local pga_ip\n pga_ip=`curl ${PGA_ENDPOINT} -w '%{remote_ip}' --connect-timeout 10 -s -o /dev/null` || status=\"$?\"\n registry_domain=\"$(echo \"${KUBE_DOCKER_REGISTRY}\" | cut -d '/' -f 1)\"\n if [[ \"${status}\" == \"0\" ]]; then\n echo \"Configure /etc/hosts to use private google access\"\n echo \"$pga_ip ${STORAGE_ENDPOINT#https://}\" \u003e\u003e /etc/hosts\n echo \"$pga_ip ${registry_domain}\" \u003e\u003e /etc/hosts\n # continue pga support for domain gke.gcr.io\n echo \"$pga_ip gke.gcr.io\" \u003e\u003e /etc/hosts\n fi\n fi\n}\n\n# This function detects the platform/arch of the machine where the script runs,\n# and sets the HOST_PLATFORM and HOST_ARCH environment variables accordingly.\n# Callers can specify HOST_PLATFORM_OVERRIDE and HOST_ARCH_OVERRIDE to skip the detection.\n# This function is adapted from the detect_client_info function in cluster/get-kube-binaries.sh\n# and kube::util::host_os, kube::util::host_arch functions in hack/lib/util.sh\n# This function should be synced with detect_host_info in ./configure-helper.sh\nfunction detect_host_info() {\n HOST_PLATFORM=${HOST_PLATFORM_OVERRIDE:-\"$(uname -s)\"}\n case \"${HOST_PLATFORM}\" in\n Linux|linux)\n HOST_PLATFORM=\"linux\"\n ;;\n *)\n echo \"Unknown, unsupported platform: ${HOST_PLATFORM}.\" \u003e&2\n echo \"Supported platform(s): linux.\" \u003e&2\n echo \"Bailing out.\" \u003e&2\n exit 2\n esac\n\n HOST_ARCH=${HOST_ARCH_OVERRIDE:-\"$(uname -m)\"}\n case \"${HOST_ARCH}\" in\n x86_64*|i?86_64*|amd64*)\n HOST_ARCH=\"amd64\"\n ;;\n aHOST_arch64*|aarch64*|arm64*)\n HOST_ARCH=\"arm64\"\n ;;\n *)\n echo \"Unknown, unsupported architecture (${HOST_ARCH}).\" \u003e&2\n echo \"Supported architecture(s): amd64 and arm64.\" \u003e&2\n echo \"Bailing out.\" \u003e&2\n exit 2\n ;;\n esac\n}\n\n# Retries a command forever with a delay between retries.\n# Args:\n# $1 : delay between retries, in seconds.\n# $2... : the command to run.\nfunction retry-forever {\n local -r delay=\"$1\"\n shift 1\n\n until \"$@\"; do\n echo \"== $* failed, retrying after ${delay}s\"\n sleep \"${delay}\"\n done\n}\n\n# Initializes variables used by the log-* functions.\n#\n# get-metadata-value must be defined before calling this function.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction log-init {\n # Used by log-* functions.\n LOG_CLUSTER_ID=${LOG_CLUSTER_ID:-$(get-metadata-value 'instance/attributes/cluster-uid' 'get-metadata-value-error')}\n LOG_INSTANCE_NAME=$(hostname || echo 'hostname-error')\n LOG_BOOT_ID=$(journalctl --list-boots | grep -E '^ *0' | awk '{print $2}' || echo 'journalctl-error')\n declare -Ag LOG_START_TIMES\n declare -ag LOG_TRAP_STACK\n\n LOG_STATUS_STARTED='STARTED'\n LOG_STATUS_COMPLETED='COMPLETED'\n LOG_STATUS_ERROR='ERROR'\n}\n\n# Sets an EXIT trap.\n# Args:\n# $1:... : the trap command.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction log-trap-push {\n local t=\"${*:1}\"\n LOG_TRAP_STACK+=(\"${t}\")\n # shellcheck disable=2064\n trap \"${t}\" EXIT\n}\n\n# Removes and restores an EXIT trap.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction log-trap-pop {\n # Remove current trap.\n unset 'LOG_TRAP_STACK[-1]'\n\n # Restore previous trap.\n if [ ${#LOG_TRAP_STACK[@]} -ne 0 ]; then\n local t=\"${LOG_TRAP_STACK[-1]}\"\n # shellcheck disable=2064\n trap \"${t}\" EXIT\n else\n # If no traps in stack, clear.\n trap EXIT\n fi\n}\n\n# Logs the end of a bootstrap step that errored.\n# Args:\n# $1 : bootstrap step name.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction log-error {\n local bootstep=\"$1\"\n\n log-proto \"${bootstep}\" \"${LOG_STATUS_ERROR}\" \"encountered non-zero exit code\"\n}\n\n# Wraps a command with bootstrap logging.\n# Args:\n# $1 : bootstrap step name.\n# $2... : the command to run.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction log-wrap {\n local bootstep=\"$1\"\n local command=\"${*:2}\"\n\n log-trap-push \"log-error ${bootstep}\"\n log-proto \"${bootstep}\" \"${LOG_STATUS_STARTED}\"\n $command\n log-proto \"${bootstep}\" \"${LOG_STATUS_COMPLETED}\"\n log-trap-pop\n}\n\n# Logs a bootstrap step start. Prefer log-wrap.\n# Args:\n# $1 : bootstrap step name.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction log-start {\n local bootstep=\"$1\"\n\n log-trap-push \"log-error ${bootstep}\"\n log-proto \"${bootstep}\" \"${LOG_STATUS_STARTED}\"\n}\n\n# Logs a bootstrap step end. Prefer log-wrap.\n# Args:\n# $1 : bootstrap step name.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction log-end {\n local bootstep=\"$1\"\n\n log-proto \"${bootstep}\" \"${LOG_STATUS_COMPLETED}\"\n log-trap-pop\n}\n\n# Writes a log proto to stdout.\n# Args:\n# $1: bootstrap step name.\n# $2: status. Either 'STARTED', 'COMPLETED', or 'ERROR'.\n# $3: optional status reason.\n#\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\n# should be duplicated there as well.\nfunction log-proto {\n local bootstep=\"$1\"\n local status=\"$2\"\n local status_reason=\"${3:-}\"\n\n # Get current time.\n local current_time\n current_time=\"$(date --utc '+%s.%N')\"\n # ...formatted as UTC RFC 3339.\n local timestamp\n timestamp=\"$(date --utc --date=\"@${current_time}\" '+%FT%T.%NZ')\"\n\n # Calculate latency.\n local latency='null'\n if [ \"${status}\" == \"${LOG_STATUS_STARTED}\" ]; then\n LOG_START_TIMES[\"${bootstep}\"]=\"${current_time}\"\n else\n local start_time=\"${LOG_START_TIMES[\"${bootstep}\"]}\"\n unset 'LOG_START_TIMES['\"${bootstep}\"']'\n\n # Bash cannot do non-integer math, shell out to awk.\n latency=\"$(echo \"${current_time} ${start_time}\" | awk '{print $1 - $2}')s\"\n\n # The default latency is null which cannot be wrapped as a string so we must\n # do it here instead of the printf.\n latency=\"\\\"${latency}\\\"\"\n fi\n\n printf '[cloud.kubernetes.monitoring.proto.SerialportLog] {\"cluster_hash\":\"%s\",\"vm_instance_name\":\"%s\",\"boot_id\":\"%s\",\"timestamp\":\"%s\",\"bootstrap_status\":{\"step_name\":\"%s\",\"status\":\"%s\",\"status_reason\":\"%s\",\"latency\":%s}}\\n' \\\n \"${LOG_CLUSTER_ID}\" \"${LOG_INSTANCE_NAME}\" \"${LOG_BOOT_ID}\" \"${timestamp}\" \"${bootstep}\" \"${status}\" \"${status_reason}\" \"${latency}\"\n}\n\n# Prelaod components for both - preloader and runtime\n# Variables needed for this function to work will be set by the preloader\nfunction preload {\n cd \"${KUBE_HOME}\"\n if [[ \"${ENABLE_AUTH_PROVIDER_GCP:-\"\"}\" == \"true\" ]]; then\n log-wrap 'InstallExternalCredentialProvider' install-auth-provider-gcp\n fi\n\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n log-wrap 'InstallHurl' install-hurl\n fi\n\n if [[ \"${KUBERNETES_MASTER:-}\" == \"true\" && -n \"${K8S_PKI_GCS_PATH:-}\" ]]; then\n log-wrap \"InstallK8sPki\" install-k8s-pki\n fi\n\n if [[ \"${KUBERNETES_MASTER:-}\" != \"true\" && -n \"${GVISOR_INSTALLER_IMAGE_HASH:-}\" ]]; then\n log-wrap 'DownloadGvisorInstaller' download-gvisor-installer \"${GVISOR_INSTALLER_IMAGE_HASH}\"\n fi\n}\n\n######### Main Function ##########\nlog-init\ndetect_host_info\n\n# Preloader will source this script, and skip the main function. The preloader\n# will choose what to preload by calling install-X functions directly.\n# When configure.sh is sourced by the preload script, $0 and $BASH_SOURCE are\n# different. $BASH_SOURCE still contains the path of configure.sh, while $0 is\n# the path of the preload script.\nif [[ \"$0\" != \"$BASH_SOURCE\" && \"${IS_PRELOADER:-\"false\"}\" == \"true\" ]]; then\n # preload common components\n preload\n echo \"Running in preloader instead of VM bootsrapping. Skipping installation steps as preloader script will source configure.sh and call all non-common functions.\"\n return\nfi\n\nlog-start 'ConfigureMain'\necho \"Start to install kubernetes files\"\n\n# if install fails, message-of-the-day (motd) will warn at login shell\nlog-wrap 'SetBrokenMotd' set-broken-motd\n\nKUBE_HOME=\"/home/kubernetes\"\nKUBE_BIN=\"${KUBE_HOME}/bin\"\n\nif [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n if [[ \"${IS_PRELOADER:-}\" != \"true\" ]] &&\\\n grep -qs \"PRELOADED,\" \"${KUBE_HOME}/preload_info\" &&\\\n [[ $(get-metadata-value \"instance/attributes/fail-on-artifact-mismatch\" \"false\") == \"true\" ]]; then\n # Disallow artifact downloads when:\n # - running on master VMs\n # - && not in preloader (running in bootstrap)\n # - && VM image is preloaded\n # - && failure on artifact mismatch feature is enabled\n ARTIFACT_DOWNLOAD_RESTRICTED=\"true\"\n fi\n\n log-wrap 'InstallHurl' install-hurl\nfi\n\n# download and source kube-env\nlog-wrap 'DownloadKubeEnv' download-kube-env\nlog-wrap 'SourceKubeEnv' source \"${KUBE_HOME}/kube-env\"\n\nif [[ \"${CONFIGURE_PGA}\" == \"true\" ]]; then\n configure-pga-if-needed\nfi\n\nlog-wrap 'ConfigureCgroupMode' configure-cgroup-mode\n\nlog-wrap 'BestEffortRebootDetection' detect-reboot-needed\n\nlog-wrap 'DownloadKubeletConfig' download-kubelet-config \"${KUBE_HOME}/kubelet-config.yaml\"\n\nif [[ \"${KUBERNETES_MASTER:-}\" == \"true\" ]]; then\n log-wrap 'DownloadKubeMasterCerts' download-kube-master-certs-hurl\nfi\n\nif docker-installed; then\n # We still need to configure docker so it wouldn't reserver the 172.17.0/16 subnet\n # And if somebody will start docker to build or pull something, logging will also be set up\n log-wrap 'AssembleDockerFlags' assemble-docker-flags\nfi\n\n# preload common components\npreload\n\n# ensure chosen container runtime is present\nlog-wrap 'EnsureContainerRuntime' ensure-container-runtime\n\n# binaries and kube-system manifests\nlog-wrap 'InstallKubeBinaryConfig' install-kube-binary-config\n\n# install Riptide components on non-Ubuntu nodes\nif ! is-ubuntu && [[ \"${KUBERNETES_MASTER:-}\" != \"true\" ]]; then\n log-wrap 'InstallRiptide' install-riptide\nfi\n\necho \"Done for installing kubernetes files\"\nlog-end 'ConfigureMain'\n" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "#cloud-config\n\nusers:\n - name: kube-bootstrap-logs-forwarder\n gecos: User the kube-bootstrap-logs-forwarder.service runs as.\n system: true\n shell: /sbin/nologin\n\nwrite_files:\n - path: /etc/systemd/system/kube-bootstrap-logs-forwarder.service\n permissions: 111122220644'\n owner: root\n content: |\n [Unit]\n Description=Forwards Kubernetes bootstrap logs to serial port.\n Before=setup-kubernetes-dir.service\n\n [Service]\n User=kube-bootstrap-logs-forwarder\n Group=systemd-journal\n SupplementaryGroups=serial\n ExecStart=journalctl --no-tail --no-pager --follow --utc --output short-iso --unit setup-kubernetes-dir --unit placeholders-presuspend-setup --unit kube-node-installation --unit kube-node-configuration --unit kubelet\n StandardOutput=tty\n TTYPath=/dev/ttyS2\n\n [Install]\n WantedBy=kubernetes.target\n\n - path: /etc/systemd/system/setup-kubernetes-dir.service\n permissions: 0644\n owner: root\n content: |\n [Unit]\n Description=Sets up required directories and mounts.\n After=network-online.target\n\n [Service]\n Type=oneshot\n RemainAfterExit=yes\n ExecStart=/bin/mkdir -p /home/kubernetes/bin\n ExecStart=/bin/mount --bind /home/kubernetes/bin /home/kubernetes/bin\n ExecStart=/bin/mount -o remount,exec /home/kubernetes/bin\n\n [Install]\n WantedBy=kubernetes.target\n\n - path: /etc/systemd/system/placeholders-presuspend-setup.service\n permissions: 0644\n owner: root\n content: |\n [Unit]\n Description=Perform required presuspend logic for Placeholders VM, skip for Non-Placeholders VMs.\n After=setup-kubernetes-dir.service\n\n [Service]\n Type=oneshot\n RemainAfterExit=yes\n ExecCondition=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H \"X-Google-Metadata-Request: True\" -o /home/kubernetes/bin/placeholders-presuspend.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/placeholders-presuspend-sh\n ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/placeholders-presuspend.sh\n ExecStart=/home/kubernetes/bin/placeholders-presuspend.sh\n\n [Install]\n WantedBy=kubernetes.target\n\n\n - path: /etc/systemd/system/kube-node-installation.service\n permissions: '0644'\n owner: root\n content: |\n [Unit]\n Description=Download and install k8s binaries and configurations\n After=placeholders-presuspend-setup.service\n\n [Service]\n Environment=KUBERNETES_MASTER=false\n Type=oneshot\n RemainAfterExit=yes\n ExecStartPre=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H \"X-Google-Metadata-Request: True\" -o /home/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh\n ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/configure.sh\n ExecStart=/home/kubernetes/bin/configure.sh\n\n [Install]\n WantedBy=kubernetes.target\n\n - path: /etc/systemd/system/kube-node-configuration.service\n permissions: '0644'\n owner: root\n content: |\n [Unit]\n Description=Configure kubernetes node\n After=kube-node-installation.service\n\n [Service]\n Type=oneshot\n RemainAfterExit=yes\n ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/configure-helper.sh\n ExecStart=/home/kubernetes/bin/configure-helper.sh\n ExecStartPost=systemctl stop kube-bootstrap-logs-forwarder.service\n\n [Install]\n WantedBy=kubernetes.target\n\n - path: /etc/systemd/system/kube-container-runtime-monitor.service\n permissions: '0644'\n owner: root\n content: |\n [Unit]\n Description=Kubernetes health monitoring for container runtime\n After=kube-node-configuration.service\n\n [Service]\n Restart=always\n RestartSec=10\n RemainAfterExit=yes\n RemainAfterExit=yes\n ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/health-monitor.sh\n ExecStart=/home/kubernetes/bin/health-monitor.sh container-runtime\n\n [Install]\n WantedBy=kubernetes.target\n\n - path: /etc/systemd/system/kubelet-monitor.service\n permissions: '0644'\n owner: root\n content: |\n [Unit]\n Description=Kubernetes health monitoring for kubelet\n After=kube-node-configuration.service\n\n [Service]\n Restart=always\n RestartSec=10\n RemainAfterExit=yes\n RemainAfterExit=yes\n ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/health-monitor.sh\n ExecStart=/home/kubernetes/bin/health-monitor.sh kubelet\n\n [Install]\n WantedBy=kubernetes.target\n\n - path: /etc/systemd/system/kube-logrotate.timer\n permissions: '0644'\n owner: root\n content: |\n [Unit]\n Description=Hourly kube-logrotate invocation\n\n [Timer]\n OnCalendar=hourly\n\n [Install]\n WantedBy=kubernetes.target\n\n - path: /etc/systemd/system/kube-logrotate.service\n permissions: '0644'\n owner: root\n content: |\n [Unit]\n Description=Kubernetes log rotation\n After=kube-node-configuration.service\n\n [Service]\n Type=oneshot\n # The relative path is being used as the path is different between image types - for example between Ubuntu and COS. See ExecSearchPath for allowed paths.\n ExecSearchPath=/usr/bin:/usr/sbin\n ExecStart=logrotate /etc/logrotate.conf\n\n [Install]\n WantedBy=kubernetes.target\n\n - path: /etc/systemd/system/kubernetes.target\n permissions: '0644'\n owner: root\n content: |\n [Unit]\n Description=Kubernetes\n\n [Install]\n WantedBy=multi-user.target\n\n - path: /etc/modprobe.d/sunrpc.conf\n permissions: '0644'\n owner: root\n # The GKE metadata server uses ports 987-989, so the sunrpc range should be restricted to be below.\n content: |\n options sunrpc max_resvport=986\n\nruncmd:\n - systemctl enable\n kube-bootstrap-logs-forwarder.service\n setup-kubernetes-dir.service\n placeholders-presuspend-setup.service\n kube-node-installation.service\n kube-node-configuration.service\n kubelet-monitor.service\n kube-logrotate.timer\n kube-logrotate.service\n kubernetes.target\n - systemctl start kubernetes.target\n" }, { "key": "kube-env", "value": "ALLOCATE_NODE_CIDRS: \"true\"\nAPI_SERVER_TEST_LOG_LEVEL: --v=3\nAUTOSCALER_ENV_VARS: kube_reserved=cpu=1060m,memory=1019Mi,ephemeral-storage=41Gi;node_labels=cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-memory-gb-scaling-level=4,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true;arch=amd64;os=linux;os_distribution=cos;evictionHard=memory.available=100Mi,nodefs.available=10%,nodefs.inodesFree=5%,pid.available=10%\nCA_CERT: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMVENDQXBXZ0F3SUJBZ0lSQVB6WFg4K0ZYWXFHcCthdmYwU09vdkl3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa05tUmxNbVpsTUdFdFlUTXlNUzAwTjJOaExUZ3lPR0l0Wm1GaU9UUTBaV05sWkdJMgpNQ0FYRFRJMU1ESXdOakUwTVRVeU4xb1lEekl3TlRVd01UTXdNVFV4TlRJM1dqQXZNUzB3S3dZRFZRUURFeVEyClpHVXlabVV3WVMxaE16SXhMVFEzWTJFdE9ESTRZaTFtWVdJNU5EUmxZMlZrWWpZd2dnR2lNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCandBd2dnR0tBb0lCZ1FDNjRvdHdhMW0yb0JHSTcvb1ZKQVJlRWgrY3JoY1hTTzZIT3N6SApvY0ZNUXpPS3RsNXhiNDdwT1JFbTFQM2FiRmg2UGxmVmp5NzVIVEM3UXJGb0NvQ1pnNjdoTzBIKzdCRVN4NzcyCnora3BLRDZ6aEZUSUtkdnVmZUZBcDZqaG10WlhpVlhpbjFaU3ltM29jczJwZVY4RHNEaUpCakFwUkRYZmc5bFkKN1ZIWFFXYmtxQml0ZnpMeEE0UmlSSDU1NWwwNnJwUGlacDhnRFFMMGc3KzkrMlQ4RkJNSnp3bEdqOVhMNHMyTwo1WWd1THlIMUJVVG4vTmR3blVZRForNFBxbTNjbmRlcE9TUnFGYXIrOSs1aUJmQXgyZjBETnFrZCtTN09kcDJ2CkpuZlNEeVpJc0JGTXdHRm0xYkc4SGJLWHJtdVMzTWxHL3VMWTFVTSswYUNQQ05vKzhtcDN6MjBkbW5rNUxzZHUKNkdwM1c1UEJYOWJrUDBZWVBraHRyT25kWDBGOTkxbjIzTDk5QkNkeGRYUmI3ZHRlbHFRbTh2Z1RBd2RvMDVMRgpDYUVRNFU2Ym9QQTBIR3dyRk4xOWQ2SEFZOC9EOUQ3TVZ2aUZLTjZTTjA4dktYQUptT3o5ZHFyTFBCVWVsNlRUCkpZamFnV0d0b2l4WlZpTllNUlF6QUJqc1hiVUNBd0VBQWFOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdJRU1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGT1dwL2R3LzJuejdRZ1ZKSkR2VTFpcHZlWHNWTUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQmdRQlowOGZpdkRwZ0R6ZXhPMEozekt4bHpJWWpZWHlkeVdsd3hSbzdwbGJSCkMvNmphelBBLzlYUG43amZ1cTQyREJFUVE0Y21EcXRxQ3pSdkhRREMxM1lFR3o0Y2JIbGowVThqOVVMNkwyd0kKQmRmMUw4endSRy9LYXNQQzhjWHZMM1VHSmZ3amtBQ3lwS0FVbHNIVEVneG51QVdiOFV1MEZwMGplaXUxUGhSeQpweW54bXo0eVBSR3lmeFJsRzZGVGVIQmVDZkpkQmpiU1lvMkoyb2NrU2hUOXdPczBIUzZjSDJzTk5aUmdQOUpaClFKN1EzZjI0SHhRMmN5c2Nqc3drZkNOTTRPcGQ5VGlHc3NHeS9iM201SEw4OGFoZUpuSXZlUzZadGZKZVB5eU0KYnIvTEgrNjNPQVB2eWZ5b0JtZWZZYUNzbnZWRUZpWmhTNXNUWnlKeG9QTDlSakpEN3puM2N5bUgxMTBoSWZvawowT0EzcVhBaHR4UGlwNnZiTU5ScmVVL3NYc3ZzTHFvK0R5NkMvWmhXSkx0MjdieSt0WDhpTXY2dDNteGhNTUozCmNoRXgvZlJkeGJDNGpLUDVyQWEwQ1p3MGFPM2lUMXUxZDVMaVkrWnFGam1WTmo5S05XSkR6Z2xwTXlCZDBFN2IKL2pibk45OHZ5Y2xoWC9JUkRmSGtDWGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\nCLOUD_MONARCH_ENDPOINT: https://monitoring.googleapis.com/\nCLUSTER_IP_RANGE: 192.168.1.0/24\nCLUSTER_NAME: gke1\nCONFIGURE_PGA: \"true\"\nCONTAINER_RUNTIME: containerd\nCONTAINER_RUNTIME_ENDPOINT: unix:///run/containerd/containerd.sock\nCONTAINER_RUNTIME_NAME: containerd\nCONTAINERD_DEPRECATION_CHECKER: \"true\"\nCONTAINERD_MAX_CONTAINER_LOG_LINE: \"262144\"\nCREATE_BOOTSTRAP_KUBECONFIG: \"false\"\nDETECT_LOCAL_MODE: NodeCIDR\nDETECT_MTU: \"true\"\nDNS_DOMAIN: cluster.local\nDNS_SERVER_IP: 192.168.2.10\nDOCKER_REGISTRY_MIRROR_URL: https://mirror.gcr.io\nELASTICSEARCH_LOGGING_REPLICAS: \"1\"\nENABLE_AUTH_PROVIDER_GCP: \"true\"\nENABLE_CLUSTER_DNS: \"true\"\nENABLE_CLUSTER_LOGGING: \"false\"\nENABLE_CLUSTER_MONITORING: none\nENABLE_CLUSTER_REGISTRY: \"false\"\nENABLE_CLUSTER_UI: \"true\"\nENABLE_CONNTRACK_EXEMPT_HC: \"true\"\nENABLE_CONTAINERD_METRICS: \"true\"\nENABLE_L7_LOADBALANCING: none\nENABLE_LATEST_NPD: \"true\"\nENABLE_METADATA_AGENT: \"\"\nENABLE_METRICS_SERVER: \"true\"\nENABLE_NODE_BFQ_IO_SCHEDULER: \"true\"\nENABLE_NODE_LOGGING: \"false\"\nENABLE_NODE_PROBLEM_DETECTOR: standalone\nENABLE_NODE_REGISTRATION_CHECKER: \"true\"\nENABLE_NODELOCAL_DNS: \"false\"\nENABLE_SHM_HEALTHCHECK_BINARIES: \"true\"\nENABLE_SYSCTL_TUNING: \"true\"\nENV_TIMESTAMP: \"2025-02-06T15:15:26+00:00\"\nEXTRA_DOCKER_OPTS: --insecure-registry 10.0.0.0/8\nEXTRA_POD_SYSCTLS: net.ipv6.conf.all.disable_ipv6=1,net.ipv6.conf.default.disable_ipv6=1\nFEATURE_GATES: DisableKubeletCloudCredentialProviders=true,RotateKubeletServerCertificate=true,ExecProbeTimeout=false\nFLUENTD_CONTAINER_RUNTIME_SERVICE: containerd\nGVISOR_HOST_SETTINGS: enforce\nGVISOR_METRIC_SERVER: 127.0.0.1:9115\nHEAPSTER_USE_NEW_STACKDRIVER_RESOURCES: \"true\"\nHEAPSTER_USE_OLD_STACKDRIVER_RESOURCES: \"false\"\nHPA_USE_REST_CLIENTS: \"true\"\nINSTANCE_PREFIX: gke-gke1-848e1694\nKUBE_ADDON_REGISTRY: k8s.gcr.io\nKUBE_CLUSTER_DNS: 192.168.2.10\nKUBE_DOCKER_REGISTRY: europe-west4-artifactregistry.gcr.io/gke-release/gke-release\nKUBE_MANIFESTS_TAR_HASH: 66cbfb77203dd732d322d524697a80e11bb553bd7f06c667f4afcf8336929c274bc17da4c6e7f1f4dd28dd3d997cb2c1cf5da7b359bbdd22b6b03aa8b8ab2b50\nKUBE_MANIFESTS_TAR_URL: https://storage.googleapis.com/gke-release-eu/kubernetes/release/v1.31.4-gke.1256000/kubernetes-manifests.tar.gz,https://storage.googleapis.com/gke-release/kubernetes/release/v1.31.4-gke.1256000/kubernetes-manifests.tar.gz,https://storage.googleapis.com/gke-release-asia/kubernetes/release/v1.31.4-gke.1256000/kubernetes-manifests.tar.gz\nKUBE_PROXY_TOKEN: pbgJw-P-A4TUHflfzyyNiGp78ssesaTcXsgvbaePicQ=\nKUBELET_ARGS: --v=2 --cloud-provider=external --experimental-mounter-path=/home/kubernetes/containerized_mounter/mounter\n --cert-dir=/var/lib/kubelet/pki/ --kubeconfig=/var/lib/kubelet/kubeconfig --image-credential-provider-config=/etc/srv/kubernetes/cri_auth_config.yaml\n --image-credential-provider-bin-dir=/home/kubernetes/bin --max-pods=110 --node-labels=cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-memory-gb-scaling-level=4,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true\n --volume-plugin-dir=/home/kubernetes/flexvolume --node-status-max-images=25 --container-runtime-endpoint=unix:///run/containerd/containerd.sock\n --runtime-cgroups=/system.slice/containerd.service --registry-qps=10 --registry-burst=20\nKUBELET_HTTP2_PING_TIMEOUT_SECONDS: \"5\"\nKUBELET_HTTP2_READ_IDLE_TIMEOUT_SECONDS: \"10\"\nKUBELET_VERSION: v1.31.4-gke.1256000\nKUBERNETES_MASTER: \"false\"\nKUBERNETES_MASTER_NAME: 192.168.0.2\nLOAD_IMAGE_COMMAND: ctr -n=k8s.io images import\nLOGGING_DESTINATION: \"\"\nLOGGING_STACKDRIVER_RESOURCE_TYPES: \"\"\nMONITORING_FLAG_SET: \"true\"\nNETWORK_PROVIDER: kubenet\nNODE_BFQ_IO_SCHEDULER_IO_WEIGHT: \"1200\"\nNODE_LOCAL_SSDS_EXT: \"\"\nNON_MASQUERADE_CIDR: 0.0.0.0/0\nREMOUNT_VOLUME_PLUGIN_DIR: \"true\"\nREQUIRE_METADATA_KUBELET_CONFIG_FILE: \"true\"\nSALT_TAR_HASH: \"\"\nSALT_TAR_URL: https://storage.googleapis.com/gke-release-eu/kubernetes/release/v1.31.4-gke.1256000/kubernetes-salt.tar.gz,https://storage.googleapis.com/gke-release/kubernetes/release/v1.31.4-gke.1256000/kubernetes-salt.tar.gz,https://storage.googleapis.com/gke-release-asia/kubernetes/release/v1.31.4-gke.1256000/kubernetes-salt.tar.gz\nSERVER_BINARY_TAR_HASH: 39ba60c7d1d3bd252782428e14294e0433864f8317cabbd88c3d34832f5a0a9ce23c4a570ae310a370074b7bc2cc156012d7a2d53cea34b73cf2198eae17df81\nSERVER_BINARY_TAR_URL: https://storage.googleapis.com/gke-release-eu/kubernetes/release/v1.31.4-gke.1256000/kubernetes-server-linux-amd64.tar.gz,https://storage.googleapis.com/gke-release/kubernetes/release/v1.31.4-gke.1256000/kubernetes-server-linux-amd64.tar.gz,https://storage.googleapis.com/gke-release-asia/kubernetes/release/v1.31.4-gke.1256000/kubernetes-server-linux-amd64.tar.gz\nSERVICE_CLUSTER_IP_RANGE: 192.168.2.0/24\nSTACKDRIVER_ENDPOINT: https://logging.googleapis.com\nSTORAGE_ENDPOINT: https://storage.googleapis.com\nSYSCTL_OVERRIDES: \"\"\nTPM_BOOTSTRAP_CERT: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURyRENDQWhTZ0F3SUJBZ0lSQVBucnY5dlJWck5nbVVaRDIzeCtDWEV3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa05tUmxNbVpsTUdFdFlUTXlNUzAwTjJOaExUZ3lPR0l0Wm1GaU9UUTBaV05sWkdJMgpNQjRYRFRJMU1ESXdOakUxTVRNeU4xb1hEVE13TURJd05URTFNVFV5TjFvd0hERWFNQmdHQTFVRUF4TVJhM1ZpClpXeGxkQzFpYjI5MGMzUnlZWEF3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREUKZ1BzbmRkN2h2bE0rVjBKQ2NuSGlEOGxLVVowcGpuMi8ycmRvOFlEVElSam9SU0RlbFhIQWZpeEVwUk1vclMzbwp6b05YN3VmbHQ5ZlNsTjByaWRPZmpJTFI4UFpBdFB5dUtyZzUvS1FSU2pGRVdyY0prcW1uRE13Uzc1c251ZjhPCjY1YWJDMDRiVlVlUlJMZWRrTEgyWGRCdFNzdklrdmsyUFdhdzRCUHY2bUF0OHpXNVhlZHM3d1F3ODRQcUNvT28KamVwdHdCdGFTTzVqbUU1NVFDdjBjNmEwM29ERXMzVFFEVjJ0YnFPUmlWNDk5UFpDNlRBd1RCTkFiUHhLRUtKWgpROUNFNEhqenQ1NVJJT0huMDRhWnMvUjFoK1NYN1lMcDJyTXFaeEsrbVVUOHkvVTZJdGphYThJV2NrV216eWVRCmlidWpxN1o2WVBBSXptTkVyUTJIQWdNQkFBR2pWakJVTUE0R0ExVWREd0VCL3dRRUF3SUZvREFUQmdOVkhTVUUKRERBS0JnZ3JCZ0VGQlFjREFqQU1CZ05WSFJNQkFmOEVBakFBTUI4R0ExVWRJd1FZTUJhQUZPV3AvZHcvMm56NwpRZ1ZKSkR2VTFpcHZlWHNWTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCZ1FDYXRyYm9iaXJmZ3ZGZnU0VGZkSURrCkxPZndsQlBZUDlWUUFLamEyeHhrZ0pQQXJ4V1N1MHYwQ2ozS2taRnMrZGtOdHlEVGMraHp5dnBiSXVka0tNZTcKbnQ1M09GSzlDRnREc0dpWEpGdmkzVUgvNHE5UTQ5aTVWNzNrTkpkYlhtdkZSUGhDUDJPMytyOHlIWEhhcGplbAptUHMrNks4MVpwNSt4L3BCTzc3VEhoSmFHU09xNDJRUm00aDlBelVldFVObXJNWCtjdUc3VGM1S3g0YmMrRm1JClpNUGlIQks0TzdZbjB5eHJYZkJuVlpZZ3lwdkJNb2lVeHlBa1ZZQkJqcTdBSEdHMW0vZ2xWL05BbkNmTlFTcnkKYVZ2Q25yZXU3VWhGVFpuT04ra3NRbFdLdDJieC8yOFdHQndaRG1OZFpqMDk2ZVNDOXFoU3JqMzluWVp6YmpPcApBNVFDMlkvRzdqUlRpRnZRaGNlTTFZRnVsbGtYanNSL25uaHdDVWc0a0FHYlBBeE9maWJVVEpxSEc1UXF4dk1FCkRqYWx0Wk1ZMGtVdElIa2JIcEZsRFJFcWRCei8rZm5CZFhEcTZaRG1aVVJaaFNJVkNFMmhkODdla2EzMXAxNm8KRUh3ZURCRjIxQ2Vrc0l3M0tibWVPeUUzbjVMYlRJKy9FdEtVQy9sT2h2ST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\nTPM_BOOTSTRAP_KEY: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBeElEN0ozWGU0YjVUUGxkQ1FuSng0Zy9KU2xHZEtZNTl2OXEzYVBHQTB5RVk2RVVnCjNwVnh3SDRzUktVVEtLMHQ2TTZEVis3bjViZlgwcFRkSzRuVG40eUMwZkQyUUxUOHJpcTRPZnlrRVVveFJGcTMKQ1pLcHB3ek1FdStiSjduL0R1dVdtd3RPRzFWSGtVUzNuWkN4OWwzUWJVckx5Skw1TmoxbXNPQVQ3K3BnTGZNMQp1VjNuYk84RU1QT0Q2Z3FEcUkzcWJjQWJXa2p1WTVoT2VVQXI5SE9tdE42QXhMTjAwQTFkclc2amtZbGVQZlQyClF1a3dNRXdUUUd6OFNoQ2lXVVBRaE9CNDg3ZWVVU0RoNTlPR21iUDBkWWZrbCsyQzZkcXpLbWNTdnBsRS9NdjEKT2lMWTJtdkNGbkpGcHM4bmtJbTdvNnUyZW1Ed0NNNWpSSzBOaHdJREFRQUJBb0lCQUZsWmlwbmhRMFNqUFllcAp0cU92RlRCazNES3lWSU9LV294cm41MFV2dTZCYktsa2tYTVVRZUowbkoxajhBZTlZeFFxSHRmVGRsZGlWanpXCjJwQksvZEpjMmprcTExWUoxYUUrSklHZGFsN0FQUkduSy9ZcTNZQnJWYm5BZ0d5NmFvcjJ2WWJuUjQ4dklqa2cKSlZ0OGFTY3NkakxUNFVCazcvTmxUUFhkRmNPdklad1Z1VTFreG5ZVVhKQ1NuNWxFZWVBT2ZvSUxzc1lJK0RyRwpIS3FjRjJzR2w3SWNnS2ErOG9QYkpOSXlrdngxdTNuUzFrMHlVMlV5SStYdFh6QzVHYkZWUDROQlZ2QXNkZXpzCksweUYrL05RbFBMbVc4c3djdmtTUWFuNnJKUkFZN2FDOGIzRDZENXhybDZBdFNlZDVBcXVVakNTQzNoN2VYWUkKY2ZLZ0VtRUNnWUVBL2ZQLzFMTUNjcVJjNkQ2SWVEOTlrOEV4WjA4d25UU2g0OUozcWFoT09WaERWbXlGZ3RZUAp1RWM4YitRcE1aMW54UWwzY0FzdXFPRkh5U0w4emI5azFUaE5JTTBMc0I0S3NoZGJWUjRKazdUUzIwQUFnMmtEClQ2azRqWEVOM3UyNXRYb1FOTzFjNWpEcllvZGo1cFpIZ2VZQyszYzlUbHNiVnRQbXdQckx6R2NDZ1lFQXhoWngKT0xkTjlRS2V0TTE5UENsejBpTHp4TmpMRkdvWTRqT0FxdHVkN1BjSktlVzdrN3hLN0U0VFZYVFl1a1pKZC9yVwo1SXhRKzFrV3ozT1ArOWFaRWVQQ1pEeEdxV3duKy8vUlUzS1lPY3l0eXRHVTJBMlRqRmpSbEVOeEd3eW0rM015CkdGdUpBREdlUXhpWS83ZWxNcXlPRWpRSU5ma3l1WjZXeVZ6dUFlRUNnWUVBcFJEQ0N4akgwSWh4TXl2aVBIYlkKUXYvaUFzcUFTTTU3SThBYnM1VUlNMUhoZ3YxSzByNGN2YVRmN2NLWjIvdjZCU0tnRlozUEdFcEdCTURQSFZUNApUM2NtK3RrTWJjODVHSVVDQXBOaG1qYUFqNjVNSng1TTNxeVphNlkrWTlhVlRSWW9EcDd5TVZVK3ltNUNTeEVICkxiRzU0b1dndlp1T2E2T1VhMzhZbEtVQ2dZQUtVYVQ0UldSRVBTeXpVbmtScHo4blZUYkpyRmwzNk1iL0VadkUKU3NpQlRhVW1qNWNqN1EwaUhqY1hub3lqdDRHZ1JHcnBZUDNlK2hjY0czTUd0WGtuMjJ1RytUVGRJb3M2cjJyaQpJL2dXR3JsNjlVd0JyVU5nYmtnTXB5Ni9ML3VLNGNkY1NYaHJrQ29rYUtXZnZKdFlkbkM0TmdtdmRoblVYWlNSClRNd0JRUUtCZ1FEQVl3SG5OZGJhM2F3WnhLM1hCdTdXbzlUd1RRQ3VpZHB3NCtNMlhxM3YvYXlNTU9iQUl4YjAKVEF5enk0elJIYXBLSko5YUNZRUZLZ3FyNnowWGZ4ejIxeVdhRE5wdlpHNlhXRW1PUGROZ1dpN2hUTmtTajNXbgpyWmNMbi9Rd24wYVFZMUEzQUtiZHlHSVdnbVNYWHJJRHdvek9aUk90VFZ2Y2dkL29meU1SWUE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=\nVOLUME_PLUGIN_DIR: /home/kubernetes/flexvolume\nZONE: europe-west4-a\n" }, { "key": "cluster-uid", "value": "848e1694ad01483185c46c3f8e1fdea4db9d86e7b2d5451ebc2536bf7f049693" }, { "key": "cluster-location", "value": "europe-west4-a" } ] }, "serviceAccounts": [ { "email": "12340002-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-dee670f4-b27s", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "foo": "bar", "goog-gke-cluster-id-base32": "qshbnffnafeddboenq7y4h66utnz3bxhwlkukhv4eu3l67yes2jq", "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west4-a", "goog-k8s-cluster-name": "gke1", "goog-k8s-node-pool-name": "default-pool", "goog-terraform-provisioned": "true" }, "labelFingerprint": "YRhvLFslxOM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "9DZfLBNLpIc=", "lastStartTimestamp": "2025-02-06T07:16:48.126-08:00", "satisfiesPzi": true, "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" } }, { "kind": "compute#instance", "id": "7382059078434873685", "creationTimestamp": "2025-02-05T04:55:23.067-08:00", "name": "mig-lpq6", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.10", "name": "nic0", "fingerprint": "YE4urDTfRbo=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/mig-lpq6", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "QiZsHXut0E8=", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/mig" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/mig-lpq6", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "odPKCHpc7DM=", "lastStartTimestamp": "2025-02-05T04:55:32.781-08:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "7593829016559083860", "creationTimestamp": "2025-02-05T04:55:23.272-08:00", "name": "mig-mv82", "tags": { "fingerprint": "42WmSpB8rSM=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-micro", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "networkIP": "10.164.0.11", "name": "nic0", "fingerprint": "gtxiVRuJigg=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/mig-mv82", "deviceName": "persistent-disk-0", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "diskSizeGb": "10", "architecture": "X86_64" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "QiZsHXut0E8=", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/mig-template" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/mig" } ] }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/mig-mv82", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "goog-terraform-provisioned": "true" }, "labelFingerprint": "vezUS-42LLM=", "startRestricted": false, "deletionProtection": false, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "6WMPctzA2pQ=", "lastStartTimestamp": "2025-02-05T04:55:32.069-08:00", "satisfiesPzi": true } ] }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/us-east7-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-a'.", "data": [ { "key": "scope", "value": "zones/us-east7-a" } ] } }, "zones/us-east7-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-b'.", "data": [ { "key": "scope", "value": "zones/us-east7-b" } ] } }, "zones/us-east7-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-c'.", "data": [ { "key": "scope", "value": "zones/us-east7-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/us-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-c'.", "data": [ { "key": "scope", "value": "zones/us-west8-c" } ] } }, "zones/us-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-a'.", "data": [ { "key": "scope", "value": "zones/us-west8-a" } ] } }, "zones/us-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-b'.", "data": [ { "key": "scope", "value": "zones/us-west8-b" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/instances" } ================================================ FILE: test-data/gke1/json-dumps/compute-instances-empty.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instances" } ================================================ FILE: test-data/gke1/json-dumps/compute-instances-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances", "items": [ { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-05-09T12:41:30.493-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-671518f6-zsnm", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "714758298644455174", "kind": "compute#instance", "labelFingerprint": "yaFVeZPybGM=", "labels": { "foo": "bar", "goog-gke-node": "" }, "lastStartTimestamp": "2023-05-09T12:41:36.364-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke1-default-pool-671518f6" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 192.168.2.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://192.168.0.34\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke1" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "c10b95be9dbb48d09af2e5c299c655c01f02e38cc157489eb8ec454d30b7ecb7" }, { "key": "cluster-location", "value": "europe-west4-a" } ], "kind": "compute#metadata" }, "name": "gke-gke1-default-pool-671518f6-zsnm", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.90.1.21", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "192.168.1.0/24", "subnetworkRangeName": "gke1-secondary-range-pod" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "192.168.0.35", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-671518f6-zsnm", "serviceAccounts": [ { "email": "12340002-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke1-c10b95be-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "canIpForward": true, "cpuPlatform": "AMD Rome", "creationTimestamp": "2023-04-27T00:58:54.957-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "GVNIC" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke2-default-pool-dabb2ff4-76fs", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "7304700068855518674", "kind": "compute#instance", "labelFingerprint": "2ixRno2sGuM=", "labels": { "goog-gke-node": "" }, "lastStartTimestamp": "2023-04-27T00:59:02.795-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke2-default-pool-913244b5" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke2-default-pool-dabb2ff4-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.7.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "cluster-name", "value": "gke2" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://34.91.246.188\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b" }, { "key": "cluster-location", "value": "europe-west4" } ], "kind": "compute#metadata" }, "name": "gke-gke2-default-pool-dabb2ff4-76fs", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.90.78.101", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "10.164.15.224", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke2-default-pool-dabb2ff4-76fs", "serviceAccounts": [ { "email": "gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke2-12cd17cd-node", "gke-gke2-custom-tag" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-05-08T09:43:36.667-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-b4ct", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3078209961897269336", "kind": "compute#instance", "labelFingerprint": "2ixRno2sGuM=", "labels": { "goog-gke-node": "" }, "lastStartTimestamp": "2023-05-08T09:43:43.107-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.1.16.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.229\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke3" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6" }, { "key": "cluster-location", "value": "europe-west4" } ], "kind": "compute#metadata" }, "name": "gke-gke3-default-pool-bf4b1ef1-b4ct", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.204.203.90", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "10.164.15.233", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-b4ct", "serviceAccounts": [ { "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke3-15974e23-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-05-08T09:43:37.000-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-dpj4", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1931601969021229143", "kind": "compute#instance", "labelFingerprint": "2ixRno2sGuM=", "labels": { "goog-gke-node": "" }, "lastStartTimestamp": "2023-05-08T09:43:42.347-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.1.16.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.229\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke3" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6" }, { "key": "cluster-location", "value": "europe-west4" } ], "kind": "compute#metadata" }, "name": "gke-gke3-default-pool-bf4b1ef1-dpj4", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.32.144.140", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "10.164.15.234", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-dpj4", "serviceAccounts": [ { "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke3-15974e23-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "canIpForward": true, "cpuPlatform": "AMD Rome", "creationTimestamp": "2023-05-08T09:43:36.600-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-h17r", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1557070143521331288", "kind": "compute#instance", "labelFingerprint": "2ixRno2sGuM=", "labels": { "goog-gke-node": "" }, "lastStartTimestamp": "2023-05-08T09:43:42.698-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.1.16.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.229\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke3" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6" }, { "key": "cluster-location", "value": "europe-west4" } ], "kind": "compute#metadata" }, "name": "gke-gke3-default-pool-bf4b1ef1-h17r", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.147.58.77", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "10.164.15.230", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-h17r", "serviceAccounts": [ { "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke3-15974e23-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "canIpForward": true, "cpuPlatform": "AMD Rome", "creationTimestamp": "2023-05-08T09:43:37.103-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-p3vt", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3464266086595467351", "kind": "compute#instance", "labelFingerprint": "2ixRno2sGuM=", "labels": { "goog-gke-node": "" }, "lastStartTimestamp": "2023-05-08T09:43:43.135-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.1.16.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.229\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke3" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6" }, { "key": "cluster-location", "value": "europe-west4" } ], "kind": "compute#metadata" }, "name": "gke-gke3-default-pool-bf4b1ef1-p3vt", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.204.230.44", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "10.164.15.232", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-p3vt", "serviceAccounts": [ { "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke3-15974e23-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "canIpForward": true, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-05-08T09:43:36.942-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-w0lj", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "5612281984122656855", "kind": "compute#instance", "labelFingerprint": "2ixRno2sGuM=", "labels": { "goog-gke-node": "" }, "lastStartTimestamp": "2023-05-08T09:43:42.548-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.1.16.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.229\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke3" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6" }, { "key": "cluster-location", "value": "europe-west4" } ], "kind": "compute#metadata" }, "name": "gke-gke3-default-pool-bf4b1ef1-w0lj", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.91.208.137", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "10.164.15.231", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-w0lj", "serviceAccounts": [ { "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke3-15974e23-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2023-04-17T22:19:38.086-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "SEV_CAPABLE" }, { "type": "GVNIC" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SECURE_BOOT" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke4-default-pool-4c934268-yzb0", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "8228233902822758022", "kind": "compute#instance", "labelFingerprint": "2ixRno2sGuM=", "labels": { "goog-gke-node": "" }, "lastStartTimestamp": "2023-04-17T22:19:42.542-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke4-default-pool-bcb6be97" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.60.144.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.0.1.2\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke4" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "3520a9df187f4f07bb3eb43779a93e2b7f41daea55e74f62a45f6821abd9771e" }, { "key": "cluster-location", "value": "europe-west4-a" } ], "kind": "compute#metadata" }, "name": "gke-gke4-default-pool-4c934268-yzb0", "networkInterfaces": [ { "aliasIpRanges": [ { "ipCidrRange": "10.56.1.0/24", "subnetworkRangeName": "gke-gke4-pods-3520a9df" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "10.164.15.222", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke4-default-pool-4c934268-yzb0", "serviceAccounts": [ { "email": "12340002-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke4-3520a9df-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" }, { "canIpForward": true, "cpuPlatform": "Intel Skylake", "creationTimestamp": "2023-05-08T09:00:44.503-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SECURE_BOOT" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke6-default-pool-d8412db4-pb55", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "guestAccelerators": [ { "acceleratorCount": 1, "acceleratorType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/acceleratorTypes/nvidia-tesla-v100" } ], "id": "8425029699468829252", "kind": "compute#instance", "labelFingerprint": "PKb1LeSIlTc=", "labels": { "gcpdiag_test": "gke", "goog-gke-node": "" }, "lastStartTimestamp": "2023-05-08T09:01:38.456-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/n1-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340002/global/instanceTemplates/gke-gke6-default-pool-d8412db4" }, { "key": "created-by", "value": "projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke6-default-pool-d8412db4-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-accelerator=nvidia-tesla-v100,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n1,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.15.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DevicePlugins: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n GracefulNodeShutdown: true\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 70m\n ephemeral-storage: 41Gi\n memory: 1736Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nshutdownGracePeriod: 30s\nshutdownGracePeriodCriticalPods: 15s\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.226\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gke6" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-uid", "value": "ae0d671440334d958774869fae41fba7c463b87d933b485b982794440b09202e" }, { "key": "cluster-location", "value": "europe-west4-a" } ], "kind": "compute#metadata" }, "name": "gke-gke6-default-pool-d8412db4-pb55", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.141.239.85", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "networkIP": "10.164.15.227", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "TERMINATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke6-default-pool-d8412db4-pb55", "serviceAccounts": [ { "email": "12340002-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gke6-ae0d6714-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances" } ================================================ FILE: test-data/gke1/json-dumps/compute-interconnect1.json ================================================ { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/bos-zone1-219", "name": "dummy-interconnect1", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1", "state": "ACTIVE" } ================================================ FILE: test-data/gke1/json-dumps/compute-interconnect2.json ================================================ { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/bos-zone2-219", "name": "dummy-interconnect2", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2", "state": "ACTIVE" } ================================================ FILE: test-data/gke1/json-dumps/compute-interconnect3.json ================================================ { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone1-6", "name": "dummy-interconnect3", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect3", "state": "ACTIVE" } ================================================ FILE: test-data/gke1/json-dumps/compute-interconnect4.json ================================================ { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone2-6", "name": "dummy-interconnect4", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "state": "ACTIVE" } ================================================ FILE: test-data/gke1/json-dumps/compute-interconnects.json ================================================ [ { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/bos-zone1-219", "name": "dummy-interconnect1", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1", "state": "ACTIVE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/bos-zone2-219", "name": "dummy-interconnect2", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2", "state": "ACTIVE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone1-6", "name": "dummy-interconnect3", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect3", "state": "ACTIVE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone2-6", "name": "dummy-interconnect4", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "state": "ACTIVE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone2-6", "name": "dummy-interconnect4", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "state": "ACTIVE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone2-6", "name": "dummy-interconnect5", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "state": "UNDER_MAINTENANCE" } ] ================================================ FILE: test-data/gke1/json-dumps/compute-migs-aggregated.json ================================================ { "kind": "compute#instanceGroupManagerAggregatedList", "id": "projects/gcpdiag-gke1-aaaa/aggregated/instanceGroupManagers", "items": { "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-central1'.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/us-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-central2'.", "data": [ { "key": "scope", "value": "regions/us-central2" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west1'.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west1'.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-east1'.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-east1'.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-northeast1'.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-southeast1'.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-east4'.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/australia-southeast1'.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west2'.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west3'.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/southamerica-east1'.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-south1'.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/northamerica-northeast1'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west4'.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-north1'.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west2'.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-east2'.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west6'.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-northeast2'.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-northeast3'.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west3'.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west4'.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-southeast2'.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-central2'.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/northamerica-northeast2'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-south2'.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/australia-southeast2'.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/southamerica-west1'.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/us-east7": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-east7'.", "data": [ { "key": "scope", "value": "regions/us-east7" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west8'.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west9'.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-east5'.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-southwest1'.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-south1'.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/me-west1'.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west12'.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/me-central1'.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west10'.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/me-central2'.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/africa-south1'.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } }, "regions/us-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west8'.", "data": [ { "key": "scope", "value": "regions/us-west8" } ] } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/northamerica-south1'.", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ] } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-north2'.", "data": [ { "key": "scope", "value": "regions/europe-north2" } ] } }, "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-c'.", "data": [ { "key": "scope", "value": "zones/us-central1-c" } ] } }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/us-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-b'.", "data": [ { "key": "scope", "value": "zones/us-central2-b" } ] } }, "zones/us-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-a'.", "data": [ { "key": "scope", "value": "zones/us-central2-a" } ] } }, "zones/us-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-c'.", "data": [ { "key": "scope", "value": "zones/us-central2-c" } ] } }, "zones/us-central2-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-d'.", "data": [ { "key": "scope", "value": "zones/us-central2-d" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east1-b'.", "data": [ { "key": "scope", "value": "zones/us-east1-b" } ] } }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west4-b'.", "data": [ { "key": "scope", "value": "zones/europe-west4-b" } ] } }, "zones/europe-west4-a": { "instanceGroupManagers": [ { "kind": "compute#instanceGroupManager", "id": "8122805250387700905", "creationTimestamp": "2025-02-06T07:16:22.950-08:00", "name": "gke-gke1-default-pool-671518f6-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6", "targetSize": { "calculated": 1 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke1-default-pool-671518f6-grp", "baseInstanceName": "gke-gke1-default-pool-671518f6", "fingerprint": "1CgCkMYBqiQ=", "currentActions": { "none": 1, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 1, "targetStoppedSize": 0, "targetSuspendedSize": 0, "listManagedInstancesResults": "PAGINATED", "standbyPolicy": { "mode": "MANUAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "YES", "defaultActionOnFailure": "REPAIR" }, "satisfiesPzi": true, "satisfiesPzs": true }, { "kind": "compute#instanceGroupManager", "id": "8396330882583945539", "creationTimestamp": "2025-02-05T04:55:08.081-08:00", "name": "mig", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/mig-template", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/mig-template", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/mig", "baseInstanceName": "mig", "fingerprint": "d0207oZUlXA=", "currentActions": { "none": 2, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 2, "targetStoppedSize": 0, "targetSuspendedSize": 0, "listManagedInstancesResults": "PAGELESS", "standbyPolicy": { "mode": "MANUAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "NO", "defaultActionOnFailure": "REPAIR" }, "satisfiesPzi": true, "satisfiesPzs": true }, { "kind": "compute#instanceGroupManager", "id": "8396330882583945500", "creationTimestamp": "2025-02-05T04:55:08.081-08:00", "name": "gke-gke4-default-pool-4c934268-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-4c934268", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-4c934268", "targetSize": { "calculated": 2 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke4-default-pool-4c934268-grp", "baseInstanceName": "gke-gke4-default-pool-4c934268", "fingerprint": "d0207oZUlXA=", "currentActions": { "none": 2, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 2, "targetStoppedSize": 0, "targetSuspendedSize": 0, "listManagedInstancesResults": "PAGELESS", "standbyPolicy": { "mode": "MANUAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "NO", "defaultActionOnFailure": "REPAIR" }, "satisfiesPzi": true, "satisfiesPzs": true } ] }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/us-east7-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-a'.", "data": [ { "key": "scope", "value": "zones/us-east7-a" } ] } }, "zones/us-east7-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-b'.", "data": [ { "key": "scope", "value": "zones/us-east7-b" } ] } }, "zones/us-east7-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-c'.", "data": [ { "key": "scope", "value": "zones/us-east7-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/us-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-c'.", "data": [ { "key": "scope", "value": "zones/us-west8-c" } ] } }, "zones/us-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-a'.", "data": [ { "key": "scope", "value": "zones/us-west8-a" } ] } }, "zones/us-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-b'.", "data": [ { "key": "scope", "value": "zones/us-west8-b" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/instanceGroupManagers" } ================================================ FILE: test-data/gke1/json-dumps/compute-migs-empty.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers" } ================================================ FILE: test-data/gke1/json-dumps/compute-migs-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "5811787561528926004", "creationTimestamp": "2023-05-09T12:41:15.699-07:00", "name": "gke-gke1-default-pool-671518f6-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6", "targetSize": { "calculated": 1 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke1-default-pool-671518f6-grp", "baseInstanceName": "gke-gke1-default-pool-671518f6", "fingerprint": "nKHmN1fIGTM=", "currentActions": { "none": 1, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 1, "listManagedInstancesResults": "PAGELESS", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } }, { "kind": "compute#instanceGroupManager", "id": "772940322250560176", "creationTimestamp": "2022-08-19T08:29:36.070-07:00", "name": "gke-gke2-default-pool-dabb2ff4-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-913244b5", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-913244b5", "targetSize": { "calculated": 1 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke2-default-pool-dabb2ff4-grp", "baseInstanceName": "gke-gke2-default-pool-dabb2ff4", "fingerprint": "CYbKDiBjjD4=", "currentActions": { "none": 1, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 1, "listManagedInstancesResults": "PAGELESS", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke2-default-pool-dabb2ff4-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } }, { "kind": "compute#instanceGroupManager", "id": "2694980432485980228", "creationTimestamp": "2023-05-08T09:43:23.174-07:00", "name": "gke-gke3-default-pool-bf4b1ef1-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1", "targetSize": { "calculated": 5 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke3-default-pool-bf4b1ef1-grp", "baseInstanceName": "gke-gke3-default-pool-bf4b1ef1", "fingerprint": "z-Jjdtcpm70=", "currentActions": { "none": 5, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 5, "listManagedInstancesResults": "PAGELESS", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } }, { "kind": "compute#instanceGroupManager", "id": "7086373352076612579", "creationTimestamp": "2022-08-19T08:32:28.378-07:00", "name": "gke-gke4-default-pool-4c934268-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-bcb6be97", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-bcb6be97", "targetSize": { "calculated": 1 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke4-default-pool-4c934268-grp", "baseInstanceName": "gke-gke4-default-pool-4c934268", "fingerprint": "m475O9ssRrI=", "currentActions": { "none": 1, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 1, "listManagedInstancesResults": "PAGELESS", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } }, { "kind": "compute#instanceGroupManager", "id": "2397452774988358258", "creationTimestamp": "2023-05-08T09:00:29.110-07:00", "name": "gke-gke6-default-pool-d8412db4-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke6-default-pool-d8412db4", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke6-default-pool-d8412db4", "targetSize": { "calculated": 1 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke6-default-pool-d8412db4-grp", "baseInstanceName": "gke-gke6-default-pool-d8412db4", "fingerprint": "NlFeJvFiNII=", "currentActions": { "none": 1, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 1, "listManagedInstancesResults": "PAGELESS", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke6-default-pool-d8412db4-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gke1/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "7246553118008778977", "creationTimestamp": "2022-03-30T02:08:30.014-07:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/7246553118008778977", "autoCreateSubnetworks": true, "mtu": 1460, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2/subnetworks/default" ], "peerings": [ { "name": "gke-ne6f5d919f4c34558948-1e4e-2883-peer", "network": "https://www.googleapis.com/compute/v1/projects/gke-prod-europe-west4-a-55a0/global/networks/gke-ne6f5d919f4c34558948-1e4e-e59b-net", "state": "ACTIVE", "stateDetails": "[2022-03-30T02:11:12.613-07:00]: Connected.", "autoCreateRoutes": true, "exportCustomRoutes": false, "importCustomRoutes": false, "exchangeSubnetRoutes": true, "exportSubnetRoutesWithPublicIp": true, "importSubnetRoutesWithPublicIp": false }, { "name": "gke-ne6f5d919f4c34558948-e4c5-1a39-peer", "network": "https://www.googleapis.com/compute/v1/projects/gke-prod-europe-west4-559c/global/networks/gke-ne6f5d919f4c34558948-e4c5-32e2-net", "state": "ACTIVE", "stateDetails": "[2022-03-30T02:12:15.512-07:00]: Connected.", "autoCreateRoutes": true, "exportCustomRoutes": false, "importCustomRoutes": false, "exchangeSubnetRoutes": true, "exportSubnetRoutesWithPublicIp": true, "importSubnetRoutesWithPublicIp": false } ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/gke1/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "Tz3suBrdUu4=", "items": [ { "key": "gke-gke4-93befb7e-secondary-ranges", "value": "services:default:default:gke-gke4-services-93befb7e,pods:default:default:gke-gke4-pods-93befb7e" }, { "key": "gke-gke2-7cf59b1c-cidr", "value": "default:10.4.0.0/14" }, { "key": "gke-gke3-b4ccfbf1-cidr", "value": "default:10.8.0.0/14" }, { "key": "gke-gke1-8a964d6d-secondary-ranges", "value": "services:default:gke1-subnet:gke1-secondary-range-svc,shareable-pods:default:gke1-subnet:gke1-secondary-range-pod" }, { "key": "gke-autopilot-gke1-19977223-secondary-ranges", "value": "services:default:default:gke-autopilot-gke1-services-19977223,pods:default:default:gke-autopilot-gke1-pods-19977223" }, { "key": "gke-autopilot-gke2-65d1ba15-secondary-ranges", "value": "services:default:default:gke-autopilot-gke2-services-65d1ba15,pods:default:default:gke-autopilot-gke2-pods-65d1ba15" }, { "key": "gke-gke6-e660e8cd-cidr", "value": "default:10.12.0.0/14" } ], "kind": "compute#metadata" }, "creationTimestamp": "2022-03-30T02:08:23.669-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12340002-compute@developer.gserviceaccount.com", "id": "1543636336255803624", "kind": "compute#project", "name": "gcpdiag-gke1-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 30 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 8 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 1 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 500, "metric": "HEALTH_CHECKS", "usage": 2 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 1 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 2 }, { "limit": 100, "metric": "URL_MAPS", "usage": 2 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 2 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 13 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 1 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 30 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/gke1/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-gke1-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3", "supportsPzs": false }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 14 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 1300 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 10 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 16 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 13 }, { "metric": "INSTANCES", "limit": 6000, "usage": 13 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 1 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 1 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6", "supportsPzs": false }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3", "supportsPzs": false }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions" } ================================================ FILE: test-data/gke1/json-dumps/compute-routers-europe-west4.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/routers", "items": [ { "kind": "compute#router", "id": "6498501077836079272", "creationTimestamp": "2022-03-30T02:09:27.014-07:00", "name": "gke-default-router", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/routers/gke-default-router", "nats": [ { "name": "gke-default-router-nat", "sourceSubnetworkIpRangesToNat": "LIST_OF_SUBNETWORKS", "subnetworks": [ { "name": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "sourceIpRangesToNat": [ "ALL_IP_RANGES" ] } ], "natIpAllocateOption": "AUTO_ONLY", "udpIdleTimeoutSec": 30, "icmpIdleTimeoutSec": 30, "tcpEstablishedIdleTimeoutSec": 1200, "tcpTransitoryIdleTimeoutSec": 30, "enableEndpointIndependentMapping": true } ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/routers" } ================================================ FILE: test-data/gke1/json-dumps/compute-routers-us-east4.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-gke1-aaaa/regions/us-east4/routers", "items": [ { "kind": "compute#router", "id": "6983339776642073481", "creationTimestamp": "2019-05-13T09:37:58.875-07:00", "name": "dummy-router1", "description": "Interconnect Lab Juniper", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "bgp": { "asn": 65000, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router1", "encryptedInterconnectRouter": false }, { "kind": "compute#router", "id": "978493875024232350", "creationTimestamp": "2023-10-02T15:17:21.172-07:00", "name": "dummy-router2", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "bgp": { "asn": 65001, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router2", "encryptedInterconnectRouter": true }, { "kind": "compute#router", "id": "920222616522135406", "creationTimestamp": "2022-12-20T11:14:09.645-08:00", "name": "dummy-router3", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "bgp": { "asn": 64512, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router3", "encryptedInterconnectRouter": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers" } ================================================ FILE: test-data/gke1/json-dumps/compute-routers-us-west2.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-gke1-aaaa/regions/us-west2/routers", "items": [ { "kind": "compute#router", "id": "920111616522135406", "creationTimestamp": "2022-12-20T11:14:09.645-08:00", "name": "dummy-router3", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "bgp": { "asn": 64512, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router3", "encryptedInterconnectRouter": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers" } ================================================ FILE: test-data/gke1/json-dumps/compute-subnetwork-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com" ], "role": "roles/compute.networkUser" } ], "etag": "BwXba-kLoiA=", "version": 1 } ================================================ FILE: test-data/gke1/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/aggregated/subnetworks", "items": { "regions/asia-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.626-07:00", "fingerprint": "ExVityxQ7Zw=", "gatewayAddress": "10.140.0.1", "id": "7865289181883843690", "ipCidrRange": "10.140.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.735-07:00", "fingerprint": "WEPpLpqTaII=", "gatewayAddress": "10.170.0.1", "id": "1625232185091474538", "ipCidrRange": "10.170.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.546-07:00", "fingerprint": "bQ24OL6A-_g=", "gatewayAddress": "10.146.0.1", "id": "1533136348119614570", "ipCidrRange": "10.146.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.673-07:00", "fingerprint": "V5llMO8nmmI=", "gatewayAddress": "10.174.0.1", "id": "9108510720326681706", "ipCidrRange": "10.174.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.690-07:00", "fingerprint": "YvlSkRtP_4s=", "gatewayAddress": "10.178.0.1", "id": "4106072082002527338", "ipCidrRange": "10.178.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.687-07:00", "fingerprint": "wpauE-6Ls5k=", "gatewayAddress": "10.160.0.1", "id": "799045077667726442", "ipCidrRange": "10.160.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.745-07:00", "fingerprint": "Q7YnvFsvcIs=", "gatewayAddress": "10.190.0.1", "id": "5569943562367845482", "ipCidrRange": "10.190.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.680-07:00", "fingerprint": "9qw_IGoz63I=", "gatewayAddress": "10.148.0.1", "id": "1399967472608134250", "ipCidrRange": "10.148.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.669-07:00", "fingerprint": "A364yIYGdbo=", "gatewayAddress": "10.184.0.1", "id": "925018594468217962", "ipCidrRange": "10.184.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.681-07:00", "fingerprint": "nW5ufndV5Es=", "gatewayAddress": "10.152.0.1", "id": "3491955985615471722", "ipCidrRange": "10.152.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.656-07:00", "fingerprint": "DrRYoQz8MQQ=", "gatewayAddress": "10.192.0.1", "id": "3881444575162188906", "ipCidrRange": "10.192.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-central2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.681-07:00", "fingerprint": "Fkp5Ia_kWjU=", "gatewayAddress": "10.186.0.1", "id": "7309165993080177770", "ipCidrRange": "10.186.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.676-07:00", "fingerprint": "uAKn9PpojKc=", "gatewayAddress": "10.166.0.1", "id": "5895305034600072298", "ipCidrRange": "10.166.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-southwest1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:34.478-07:00", "fingerprint": "7puHFtbgohs=", "gatewayAddress": "10.204.0.1", "id": "6503801733215994985", "ipCidrRange": "10.204.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.565-07:00", "fingerprint": "RYxGa4BdqVw=", "gatewayAddress": "10.132.0.1", "id": "4254674819412968554", "ipCidrRange": "10.132.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.592-07:00", "fingerprint": "InwBX-PAmxE=", "gatewayAddress": "10.154.0.1", "id": "8673388756094993514", "ipCidrRange": "10.154.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:34.435-07:00", "fingerprint": "jtqiYE_BvSA=", "gatewayAddress": "10.156.0.1", "id": "2730999123496453225", "ipCidrRange": "10.156.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.623-07:00", "fingerprint": "sfuW5PvbdEI=", "gatewayAddress": "10.164.0.1", "id": "1461822054006834282", "ipCidrRange": "10.164.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "secondaryIpRanges": [ { "ipCidrRange": "10.85.0.0/17", "rangeName": "gke-autopilot-gke1-pods-6a0c2f5b" }, { "ipCidrRange": "10.85.128.0/22", "rangeName": "gke-autopilot-gke1-services-6a0c2f5b" }, { "ipCidrRange": "10.60.0.0/20", "rangeName": "gke-gke4-services-e4411110" }, { "ipCidrRange": "10.56.0.0/14", "rangeName": "gke-gke4-pods-e4411110" }, { "ipCidrRange": "10.60.96.0/22", "rangeName": "gke-autopilot-gke2-services-3fbbc734" }, { "ipCidrRange": "10.60.128.0/17", "rangeName": "gke-autopilot-gke2-pods-3fbbc734" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "stackType": "IPV4_ONLY" }, { "creationTimestamp": "2022-10-11T07:16:29.795-07:00", "enableFlowLogs": false, "fingerprint": "PE0z2PNqD2Y=", "gatewayAddress": "192.168.0.1", "id": "7423481761753515090", "ipCidrRange": "192.168.0.0/24", "kind": "compute#subnetwork", "logConfig": { "aggregationInterval": "INTERVAL_5_SEC", "enable": false, "flowSampling": 0.5, "metadata": "INCLUDE_ALL_METADATA" }, "name": "gke1-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "secondaryIpRanges": [ { "ipCidrRange": "192.168.1.0/24", "rangeName": "gke1-secondary-range-pod" }, { "ipCidrRange": "192.168.2.0/24", "rangeName": "gke1-secondary-range-svc" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west6": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.530-07:00", "fingerprint": "Ic4Y34BRjOE=", "gatewayAddress": "10.172.0.1", "id": "3567972882370315370", "ipCidrRange": "10.172.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west8": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.586-07:00", "fingerprint": "_MhtvVpnR5c=", "gatewayAddress": "10.198.0.1", "id": "5905962051052291178", "ipCidrRange": "10.198.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west9": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.638-07:00", "fingerprint": "0uz_7VhFjLE=", "gatewayAddress": "10.200.0.1", "id": "5697832252330263658", "ipCidrRange": "10.200.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.741-07:00", "fingerprint": "70g6IoCP0CM=", "gatewayAddress": "10.208.0.1", "id": "2381367997960340586", "ipCidrRange": "10.208.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.499-07:00", "fingerprint": "vNYpwgnkSCI=", "gatewayAddress": "10.162.0.1", "id": "5798419596128601194", "ipCidrRange": "10.162.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.493-07:00", "fingerprint": "7ik2BWFfN84=", "gatewayAddress": "10.188.0.1", "id": "711542983096845418", "ipCidrRange": "10.188.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.668-07:00", "fingerprint": "pqhad5TnzVc=", "gatewayAddress": "10.158.0.1", "id": "2301799042992620650", "ipCidrRange": "10.158.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.648-07:00", "fingerprint": "ea50MPZjruA=", "gatewayAddress": "10.194.0.1", "id": "6124576470534243434", "ipCidrRange": "10.194.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.382-07:00", "fingerprint": "pb4O-4ISjAE=", "gatewayAddress": "10.128.0.1", "id": "6250438653192488042", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.368-07:00", "fingerprint": "bvN-N8FS9U4=", "gatewayAddress": "10.142.0.1", "id": "1443866556678849642", "ipCidrRange": "10.142.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.486-07:00", "fingerprint": "jew6EZUeYrM=", "gatewayAddress": "10.150.0.1", "id": "5871230243962405994", "ipCidrRange": "10.150.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east5": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.504-07:00", "fingerprint": "KVZisxAl1CI=", "gatewayAddress": "10.202.0.1", "id": "4332627157280408682", "ipCidrRange": "10.202.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east7": { "subnetworks": [ { "creationTimestamp": "2022-10-11T09:13:19.272-07:00", "fingerprint": "BEZq6cSPkco=", "gatewayAddress": "10.196.0.1", "id": "7977046348344600816", "ipCidrRange": "10.196.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-south1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.435-07:00", "fingerprint": "1Se61ZXzpjY=", "gatewayAddress": "10.206.0.1", "id": "7154466601132672106", "ipCidrRange": "10.206.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west1": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.499-07:00", "fingerprint": "E0k7cQEp7_I=", "gatewayAddress": "10.138.0.1", "id": "5323136092791686250", "ipCidrRange": "10.138.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west2": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.549-07:00", "fingerprint": "-JD9bbh-QlA=", "gatewayAddress": "10.168.0.1", "id": "4458757238523741290", "ipCidrRange": "10.168.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west3": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.524-07:00", "fingerprint": "P01BE480Q2I=", "gatewayAddress": "10.180.0.1", "id": "1135562538472752234", "ipCidrRange": "10.180.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west4": { "subnetworks": [ { "creationTimestamp": "2022-10-11T07:15:33.521-07:00", "fingerprint": "2k-WBaR7JKQ=", "gatewayAddress": "10.182.0.1", "id": "7061406355024299114", "ipCidrRange": "10.182.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/subnetworks" } ================================================ FILE: test-data/gke1/json-dumps/compute-subnetworks-europe-west4.json ================================================ { "kind": "compute#subnetworkList", "id": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks", "items": [ { "kind": "compute#subnetwork", "id": "4774247690482065659", "creationTimestamp": "2022-03-30T02:08:36.021-07:00", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "ipCidrRange": "10.164.0.0/20", "gatewayAddress": "10.164.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default", "privateIpGoogleAccess": true, "secondaryIpRanges": [ { "rangeName": "gke-gke4-services-93befb7e", "ipCidrRange": "10.60.0.0/20" }, { "rangeName": "gke-gke4-pods-93befb7e", "ipCidrRange": "10.56.0.0/14" }, { "rangeName": "gke-autopilot-gke1-services-19977223", "ipCidrRange": "10.85.128.0/22" }, { "rangeName": "gke-autopilot-gke1-pods-19977223", "ipCidrRange": "10.85.0.0/17" }, { "rangeName": "gke-autopilot-gke2-pods-65d1ba15", "ipCidrRange": "10.60.128.0/17" }, { "rangeName": "gke-autopilot-gke2-services-65d1ba15", "ipCidrRange": "10.60.96.0/22" } ], "fingerprint": "-9hqGif0SQ0=", "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "stackType": "IPV4_ONLY" }, { "kind": "compute#subnetwork", "id": "1818761461517361320", "creationTimestamp": "2022-03-30T02:09:27.964-07:00", "name": "gke1-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "ipCidrRange": "192.168.0.0/24", "gatewayAddress": "192.168.0.1", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "privateIpGoogleAccess": false, "secondaryIpRanges": [ { "rangeName": "gke1-secondary-range-pod", "ipCidrRange": "192.168.1.0/24" }, { "rangeName": "gke1-secondary-range-svc", "ipCidrRange": "192.168.2.0/24" } ], "fingerprint": "Ir2p9uebpiE=", "enableFlowLogs": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "logConfig": { "enable": false }, "stackType": "IPV4_ONLY" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks" } ================================================ FILE: test-data/gke1/json-dumps/compute-templates.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/global/instanceTemplates", "items": [ { "creationTimestamp": "2023-05-09T12:41:11.352-07:00", "description": "", "id": "6940990255272501048", "kind": "compute#instanceTemplate", "name": "gke-gke1-default-pool-671518f6", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "foo": "bar", "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "foo": "bar", "goog-gke-node": "" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://192.168.0.34\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "europe-west4-a" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 192.168.2.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "cluster-name", "value": "gke1" }, { "key": "cluster-uid", "value": "c10b95be9dbb48d09af2e5c299c655c01f02e38cc157489eb8ec454d30b7ecb7" }, { "key": "kube-env", "value": "REDACTED" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke1-secondary-range-pod" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke1-c10b95be-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6" }, { "creationTimestamp": "2023-04-27T00:58:35.201-07:00", "description": "", "id": "8948768169139869124", "kind": "compute#instanceTemplate", "name": "gke-gke2-default-pool-913244b5", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-standard", "labels": { "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12410-gke2300-cos-97-16919-235-13-v230222-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "cluster-uid", "value": "12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.7.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "europe-west4" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-name", "value": "gke2" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://34.91.246.188\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "disable-legacy-endpoints", "value": "true" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke2-custom-tag", "gke-gke2-12cd17cd-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-913244b5" }, { "creationTimestamp": "2023-04-27T00:55:01.348-07:00", "description": "", "id": "648527463397692602", "kind": "compute#instanceTemplate", "name": "gke-gke2-default-pool-c10d4546", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-standard", "labels": { "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12410-gke2300-cos-97-16919-235-13-v230222-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "cluster-uid", "value": "12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.7.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "europe-west4" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-name", "value": "gke2" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://34.91.246.188\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "disable-legacy-endpoints", "value": "true" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke2-custom-tag", "gke-gke2-12cd17cd-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-c10d4546" }, { "creationTimestamp": "2023-04-27T01:01:57.423-07:00", "description": "", "id": "2678767759871415578", "kind": "compute#instanceTemplate", "name": "gke-gke2-default-pool-ce8825d8", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-standard", "labels": { "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12410-gke2300-cos-97-16919-235-13-v230222-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "cluster-location", "value": "europe-west4" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "enable-oslogin", "value": "false" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "cluster-name", "value": "gke2" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://34.91.246.188\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "cluster-uid", "value": "12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.7.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true" }, { "key": "serial-port-logging-enable", "value": "true" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke2-custom-tag", "gke-gke2-12cd17cd-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-ce8825d8" }, { "creationTimestamp": "2023-05-08T09:43:19.158-07:00", "description": "", "id": "6861440528873199688", "kind": "compute#instanceTemplate", "name": "gke-gke3-default-pool-afabcbd4", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "cluster-uid", "value": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.1.16.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "cluster-name", "value": "gke3" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.229\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-location", "value": "europe-west4" }, { "key": "configure-sh", "value": "REDACTED" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke3-15974e23-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-afabcbd4" }, { "creationTimestamp": "2023-05-08T09:43:19.493-07:00", "description": "", "id": "3234518948673525832", "kind": "compute#instanceTemplate", "name": "gke-gke3-default-pool-bf4b1ef1", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "europe-west4" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.229\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-uid", "value": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "cluster-name", "value": "gke3" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.1.16.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke3-15974e23-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1" }, { "creationTimestamp": "2023-05-08T09:43:20.164-07:00", "description": "", "id": "2668028894228289607", "kind": "compute#instanceTemplate", "name": "gke-gke3-default-pool-feacc705", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "user-data", "value": "REDACTED" }, { "key": "kube-env", "value": "REDACTED" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.229\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-location", "value": "europe-west4" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "cluster-uid", "value": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.1.16.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "cluster-name", "value": "gke3" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "gci-update-strategy", "value": "update_disabled" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke3-15974e23-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-feacc705" }, { "creationTimestamp": "2023-04-17T22:19:20.035-07:00", "description": "", "id": "3070886385521235639", "kind": "compute#instanceTemplate", "name": "gke-gke4-default-pool-4c934268", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-standard", "labels": { "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12410-gke2300-cos-97-16919-235-13-v230222-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.0.1.2\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.60.144.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "cluster-name", "value": "gke4" }, { "key": "cluster-uid", "value": "3520a9df187f4f07bb3eb43779a93e2b7f41daea55e74f62a45f6821abd9771e" }, { "key": "cluster-location", "value": "europe-west4-a" }, { "key": "kube-env", "value": "REDACTED" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-gke4-pods-3520a9df" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke4-3520a9df-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-4c934268" }, { "creationTimestamp": "2023-05-08T09:00:24.820-07:00", "description": "", "id": "929784290130305655", "kind": "compute#instanceTemplate", "name": "gke-gke6-default-pool-d8412db4", "properties": { "canIpForward": true, "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "gcpdiag_test": "gke", "goog-gke-node": "", "goog-gke-volume": "" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-nvda" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "guestAccelerators": [ { "acceleratorCount": 1, "acceleratorType": "nvidia-tesla-v100" } ], "labels": { "gcpdiag_test": "gke", "goog-gke-node": "" }, "machineType": "n1-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "kube-env", "value": "REDACTED" }, { "key": "kube-labels", "value": "cloud.google.com/gke-accelerator=nvidia-tesla-v100,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n1,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.164.15.226\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "cluster-name", "value": "gke6" }, { "key": "cluster-uid", "value": "ae0d671440334d958774869fae41fba7c463b87d933b485b982794440b09202e" }, { "key": "cluster-location", "value": "europe-west4-a" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.15.240.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n DevicePlugins: true\n DisableKubeletCloudCredentialProviders: false\n DynamicKubeletConfig: false\n ExecProbeTimeout: false\n GracefulNodeShutdown: true\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginOpenStackUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 70m\n ephemeral-storage: 41Gi\n memory: 1736Mi\nreadOnlyPort: 10255\nserverTLSBootstrap: true\nshutdownGracePeriod: 30s\nshutdownGracePeriodCriticalPods: 15s\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "serial-port-logging-enable", "value": "true" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "TERMINATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gke6-ae0d6714-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke6-default-pool-d8412db4" } ], "kind": "compute#instanceTemplateList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates" } ================================================ FILE: test-data/gke1/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-gke1-aaaa/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-f", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Intel Ice Lake", "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Haswell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Skylake", "Intel Broadwell", "Intel Ivy Bridge", "AMD Milan", "AMD Rome" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones" } ================================================ FILE: test-data/gke1/json-dumps/container-clusters.json ================================================ { "clusters": [ { "addonsConfig": { "dnsCacheConfig": { "enabled": true }, "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "gcpFilestoreCsiDriverConfig": { "enabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "autopilot": { "enabled": true }, "autoscaling": { "autoprovisioningNodePoolDefaults": { "imageType": "COS_CONTAINERD", "management": { "autoRepair": true, "autoUpgrade": true }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" } }, "autoscalingProfile": "OPTIMIZE_UTILIZATION", "enableNodeAutoprovisioning": true, "resourceLimits": [ { "maximum": "1000000000", "resourceType": "cpu" }, { "maximum": "1000000000", "resourceType": "memory" }, { "maximum": "1000000000", "resourceType": "nvidia-tesla-t4" }, { "maximum": "1000000000", "resourceType": "nvidia-tesla-a100" } ] }, "binaryAuthorization": {}, "clusterIpv4Cidr": "10.85.0.0/17", "createTime": "2022-08-19T15:28:56+00:00", "currentMasterVersion": "1.24.10-gke.2300", "currentNodeVersion": "1.22.10-gke.600", "databaseEncryption": { "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "192.168.1.1", "etag": "8b60aa85-6f25-48c9-8a2d-36ee78653de2", "id": "f7bb291d77f44570ae0359d00e3f2e68f276e232a4b84ff1b1b26b8875b26f46", "initialClusterVersion": "1.22.10-gke.600", "initialNodeCount": 1, "ipAllocationPolicy": { "clusterIpv4Cidr": "10.85.0.0/17", "clusterIpv4CidrBlock": "10.85.0.0/17", "clusterSecondaryRangeName": "gke-autopilot-gke1-pods-f7bb291d", "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "10.85.128.0/22", "servicesIpv4CidrBlock": "10.85.128.0/22", "servicesSecondaryRangeName": "gke-autopilot-gke1-services-f7bb291d", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "europe-west4", "locations": [ "europe-west4-a", "europe-west4-c", "europe-west4-b" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clusterCaCertificate": "REAL_CERTIFICATE" }, "masterAuthorizedNetworksConfig": {}, "monitoringConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "autopilot-gke1", "network": "default", "networkConfig": { "datapathProvider": "ADVANCED_DATAPATH", "defaultSnatStatus": {}, "enableIntraNodeVisibility": true, "network": "projects/gcpdiag-gke1-aaaa/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" }, "nodePoolAutoConfig": {}, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "notificationConfig": { "pubsub": {} }, "releaseChannel": { "channel": "REGULAR" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1", "servicesIpv4Cidr": "10.85.128.0/22", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "default", "verticalPodAutoscaling": { "enabled": true }, "workloadIdentityConfig": { "workloadPool": "gcpdiag-gke1-aaaa.svc.id.goog" }, "zone": "europe-west4" }, { "addonsConfig": { "dnsCacheConfig": { "enabled": true }, "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "gcpFilestoreCsiDriverConfig": { "enabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "autopilot": { "enabled": true }, "autoscaling": { "autoprovisioningNodePoolDefaults": { "imageType": "COS_CONTAINERD", "management": { "autoRepair": true, "autoUpgrade": true }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" } }, "autoscalingProfile": "OPTIMIZE_UTILIZATION", "enableNodeAutoprovisioning": true, "resourceLimits": [ { "maximum": "1000000000", "resourceType": "cpu" }, { "maximum": "1000000000", "resourceType": "memory" }, { "maximum": "1000000000", "resourceType": "nvidia-tesla-t4" }, { "maximum": "1000000000", "resourceType": "nvidia-tesla-a100" } ] }, "binaryAuthorization": {}, "clusterIpv4Cidr": "10.60.0.0/17", "createTime": "2022-08-19T15:28:56+00:00", "currentMasterVersion": "1.24.10-gke.2300", "currentNodeVersion": "1.22.10-gke.600", "databaseEncryption": { "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "192.168.1.1", "etag": "5c5acb64-fd26-48bf-bf01-957774ba59e0", "id": "86b60f8aef344c66be3ce7bddacc99ca28e3b9690a9044e28be4b4c3c7d99941", "initialClusterVersion": "1.22.10-gke.600", "initialNodeCount": 1, "ipAllocationPolicy": { "clusterIpv4Cidr": "10.60.0.0/17", "clusterIpv4CidrBlock": "10.60.0.0/17", "clusterSecondaryRangeName": "gke-autopilot-gke2-pods-86b60f8a", "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "10.60.128.0/22", "servicesIpv4CidrBlock": "10.60.128.0/22", "servicesSecondaryRangeName": "gke-autopilot-gke2-services-86b60f8a", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "europe-west4", "locations": [ "europe-west4-c", "europe-west4-b", "europe-west4-a" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": {}, "monitoringConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "autopilot-gke2", "network": "default", "networkConfig": { "datapathProvider": "ADVANCED_DATAPATH", "defaultSnatStatus": {}, "enableIntraNodeVisibility": true, "network": "projects/gcpdiag-gke1-aaaa/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" }, "nodePoolAutoConfig": {}, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "enablePrivateNodes": true, "masterIpv4CidrBlock": "172.16.114.128/28", "peeringName": "gke-nc3da9ac52d810d8401c-8f66-920a-peer", "privateEndpoint": "172.16.114.130", "publicEndpoint": "34.147.14.62" }, "releaseChannel": { "channel": "REGULAR" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2", "servicesIpv4Cidr": "10.60.128.0/22", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "default", "verticalPodAutoscaling": { "enabled": true }, "workloadIdentityConfig": { "workloadPool": "gcpdiag-gke1-aaaa.svc.id.goog" }, "zone": "europe-west4" }, { "addonsConfig": { "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": {}, "clusterIpv4Cidr": "10.4.0.0/14", "createTime": "2022-08-19T15:28:56+00:00", "currentMasterVersion": "1.24.10-gke.2300", "currentNodeCount": 3, "currentNodeVersion": "1.24.10-gke.2300", "databaseEncryption": { "state": "DECRYPTED" }, "endpoint": "192.168.1.1", "etag": "eccc7396-ddce-4155-9123-02568890e1ba", "id": "12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b", "initialClusterVersion": "1.22.10-gke.600", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke2-default-pool-091396c6-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke2-default-pool-dabb2ff4-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c/instanceGroupManagers/gke-gke2-default-pool-a09fb83d-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke2-low-pod-per-node-pool-519eee7b-grp" ], "ipAllocationPolicy": { "podCidrOverprovisionConfig": {}, "stackType": "IPV4", "useRoutes": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "europe-west4", "locations": [ "europe-west4-b", "europe-west4-a", "europe-west4-c" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": {}, "monitoringConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "gke2", "network": "default", "networkConfig": { "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke1-aaaa/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-standard", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "serviceAccount": "gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "tags": [ "gke-gke2-custom-tag" ], "windowsNodeConfig": {}, "workloadMetadataConfig": { "mode": "GKE_METADATA" } }, "nodeIpv4CidrSize": 24, "nodePoolAutoConfig": {}, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "config": { "diskSizeGb": 100, "diskType": "pd-standard", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "serviceAccount": "gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "tags": [ "gke-gke2-custom-tag" ], "windowsNodeConfig": {}, "workloadMetadataConfig": { "mode": "GKE_METADATA" } }, "etag": "4f238f16-6866-405c-975e-48b4c9366d73", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke2-default-pool-091396c6-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke2-default-pool-dabb2ff4-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c/instanceGroupManagers/gke-gke2-default-pool-a09fb83d-grp" ], "locations": [ "europe-west4-b", "europe-west4-a", "europe-west4-c" ], "management": { "autoRepair": true, "autoUpgrade": true }, "name": "default-pool", "podIpv4CidrSize": 24, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.24.10-gke.2300" }, { "config": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "loggingConfig": {}, "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "preemptible": true, "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {}, "workloadMetadataConfig": { "mode": "GKE_METADATA" } }, "etag": "3e7fc5da-4313-4ed0-a3a9-e3707335c456", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke2-low-pod-per-node-pool-519eee7b-grp" ], "locations": [ "europe-west4-b" ], "management": { "autoRepair": true, "autoUpgrade": true }, "maxPodsConstraint": { "maxPodsPerNode": "8" }, "name": "low-pod-per-node-pool", "networkConfig": { "enablePrivateNodes": false, "podIpv4CidrBlock": "10.112.0.0/14", "podIpv4RangeUtilization": 0.0029999999999999996, "podRange": "gke-gke2-pods-e13eff26" }, "podIpv4CidrSize": 28, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.24.10-gke.2300" } ], "notificationConfig": { "pubsub": {} }, "releaseChannel": {}, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2", "servicesIpv4Cidr": "10.7.240.0/20", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "default", "workloadIdentityConfig": { "workloadPool": "gcpdiag-gke1-aaaa.svc.id.goog" }, "zone": "europe-west4" }, { "addonsConfig": { "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "authenticatorGroupsConfig": { "enabled": true, "securityGroup": "gke-security-groups@gcpdiag.dev" }, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": {}, "clusterIpv4Cidr": "10.1.0.0/19", "createTime": "2023-05-08T16:42:26+00:00", "currentMasterVersion": "1.25.7-gke.1000", "currentNodeCount": 15, "currentNodeVersion": "1.25.7-gke.1000", "databaseEncryption": { "state": "DECRYPTED" }, "endpoint": "192.168.1.1", "etag": "d717c164-0573-4667-a330-4324c508ddf4", "id": "15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6", "initialClusterVersion": "1.25.7-gke.1000", "initialNodeCount": 5, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c/instanceGroupManagers/gke-gke3-default-pool-feacc705-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke3-default-pool-afabcbd4-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp" ], "ipAllocationPolicy": { "podCidrOverprovisionConfig": {}, "stackType": "IPV4", "useRoutes": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "europe-west4", "locations": [ "europe-west4-c", "europe-west4-b", "europe-west4-a" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": { "gcpPublicCidrsAccessEnabled": true }, "monitoringConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "gke3", "network": "default", "networkConfig": { "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke1-aaaa/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "serviceAccount": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "nodeIpv4CidrSize": 24, "nodePoolAutoConfig": {}, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "config": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/cloud-platform" ], "serviceAccount": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "etag": "82c2b78f-a556-4362-8704-a48cc414105a", "initialNodeCount": 5, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c/instanceGroupManagers/gke-gke3-default-pool-feacc705-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke3-default-pool-afabcbd4-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp" ], "locations": [ "europe-west4-c", "europe-west4-b", "europe-west4-a" ], "management": { "autoRepair": true, "autoUpgrade": true }, "name": "default-pool", "networkConfig": { "enablePrivateNodes": false }, "podIpv4CidrSize": 24, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.25.7-gke.1000" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "privateEndpoint": "10.164.15.229", "publicEndpoint": "34.32.132.248" }, "releaseChannel": { "channel": "REGULAR" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3", "servicesIpv4Cidr": "10.1.16.0/20", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "default", "zone": "europe-west4" }, { "addonsConfig": { "dnsCacheConfig": { "enabled": true }, "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "httpLoadBalancing": { "disabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": {}, "clusterIpv4Cidr": "192.168.1.0/24", "createTime": "2023-05-09T19:40:22+00:00", "currentMasterVersion": "1.25.7-gke.1000", "currentNodeCount": 1, "currentNodeVersion": "1.25.7-gke.1000", "databaseEncryption": { "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "192.168.1.1", "etag": "9893fa0a-b5e0-416b-b5e0-dd94aaa80db3", "id": "c10b95be9dbb48d09af2e5c299c655c01f02e38cc157489eb8ec454d30b7ecb7", "initialClusterVersion": "1.25.7-gke.1000", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp" ], "ipAllocationPolicy": { "clusterIpv4Cidr": "192.168.1.0/24", "clusterIpv4CidrBlock": "192.168.1.0/24", "clusterSecondaryRangeName": "gke1-secondary-range-pod", "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "192.168.2.0/24", "servicesIpv4CidrBlock": "192.168.2.0/24", "servicesSecondaryRangeName": "gke1-secondary-range-svc", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "780e2898", "legacyAbac": {}, "location": "europe-west4-a", "locations": [ "europe-west4-a" ], "loggingConfig": { "componentConfig": {} }, "loggingService": "none", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": { "gcpPublicCidrsAccessEnabled": true }, "monitoringConfig": { "componentConfig": {} }, "monitoringService": "none", "name": "gke1", "network": "default", "networkConfig": { "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke1-aaaa/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet" }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "nodePoolAutoConfig": {}, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "config": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "etag": "fab6d275-ea28-40d6-90ca-bc52a13d038d", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp" ], "locations": [ "europe-west4-a" ], "management": { "autoRepair": true, "autoUpgrade": true }, "maxPodsConstraint": { "maxPodsPerNode": "110" }, "name": "default-pool", "networkConfig": { "enablePrivateNodes": false, "podIpv4CidrBlock": "192.168.1.0/24", "podRange": "gke1-secondary-range-pod" }, "podIpv4CidrSize": 24, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.25.7-gke.1000" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "privateEndpoint": "192.168.0.34", "publicEndpoint": "34.32.229.86" }, "releaseChannel": {}, "resourceLabels": { "foo": "bar" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1", "servicesIpv4Cidr": "192.168.2.0/24", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "gke1-subnet", "zone": "europe-west4-a" }, { "addonsConfig": { "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": {}, "clusterIpv4Cidr": "10.56.0.0/14", "createTime": "2022-08-19T15:28:56+00:00", "currentMasterVersion": "1.24.10-gke.2300", "currentNodeCount": 1, "currentNodeVersion": "1.24.10-gke.2300", "databaseEncryption": { "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "192.168.1.1", "etag": "f8017186-9d22-4a51-9a07-7fe1d555d5fd", "id": "3520a9df187f4f07bb3eb43779a93e2b7f41daea55e74f62a45f6821abd9771e", "initialClusterVersion": "1.22.10-gke.600", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp" ], "ipAllocationPolicy": { "clusterIpv4Cidr": "10.56.0.0/14", "clusterIpv4CidrBlock": "10.56.0.0/14", "clusterSecondaryRangeName": "gke-gke4-pods-3520a9df", "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "10.60.144.0/20", "servicesIpv4CidrBlock": "10.60.144.0/20", "servicesSecondaryRangeName": "gke-gke4-services-3520a9df", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "europe-west4-a", "locations": [ "europe-west4-a" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": {}, "monitoringConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "gke4", "network": "default", "networkConfig": { "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke1-aaaa/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-standard", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {}, "workloadMetadataConfig": { "mode": "GKE_METADATA" } }, "nodePoolAutoConfig": {}, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "config": { "diskSizeGb": 100, "diskType": "pd-standard", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {}, "workloadMetadataConfig": { "mode": "GKE_METADATA" } }, "etag": "c6fd15ab-c76f-4906-93f9-500f5e2a11d4", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp" ], "locations": [ "europe-west4-a" ], "management": { "autoRepair": true, "autoUpgrade": true }, "maxPodsConstraint": { "maxPodsPerNode": "110" }, "name": "default-pool", "networkConfig": { "podIpv4CidrBlock": "10.56.0.0/14", "podRange": "gke-gke4-pods-3520a9df" }, "podIpv4CidrSize": 24, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.24.10-gke.2300" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "enablePrivateNodes": true, "masterIpv4CidrBlock": "10.0.1.0/28", "peeringName": "gke-nc3da9ac52d810d8401c-d813-6d1b-peer", "privateEndpoint": "10.0.1.2", "publicEndpoint": "34.141.225.165" }, "releaseChannel": { "channel": "REGULAR" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4", "servicesIpv4Cidr": "10.60.144.0/20", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "default", "workloadIdentityConfig": { "workloadPool": "gcpdiag-gke1-aaaa.svc.id.goog" }, "zone": "europe-west4-a" }, { "addonsConfig": { "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": {}, "clusterIpv4Cidr": "10.12.0.0/14", "createTime": "2023-05-08T15:59:22+00:00", "currentMasterVersion": "1.25.7-gke.1000", "currentNodeCount": 1, "currentNodeVersion": "1.25.7-gke.1000", "databaseEncryption": { "state": "DECRYPTED" }, "endpoint": "192.168.1.1", "etag": "8cc36b5c-ca56-40ae-899d-b76741c66dd5", "id": "ae0d671440334d958774869fae41fba7c463b87d933b485b982794440b09202e", "initialClusterVersion": "1.25.7-gke.1000", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke6-default-pool-d8412db4-grp" ], "ipAllocationPolicy": { "podCidrOverprovisionConfig": {}, "stackType": "IPV4", "useRoutes": true }, "labelFingerprint": "146a4cc6", "legacyAbac": {}, "location": "europe-west4-a", "locations": [ "europe-west4-a" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "1e9f6cdb", "window": { "recurringWindow": { "recurrence": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR", "window": { "endTime": "2023-02-01T17:00:00Z", "startTime": "2023-02-01T09:00:00Z" } } } }, "masterAuth": { "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": { "gcpPublicCidrsAccessEnabled": true }, "monitoringConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "gke6", "network": "default", "networkConfig": { "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke1-aaaa/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default" }, "nodeConfig": { "accelerators": [ { "acceleratorCount": "1", "acceleratorType": "nvidia-tesla-v100" } ], "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "n1-standard-2", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "nodeIpv4CidrSize": 24, "nodePoolAutoConfig": {}, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "config": { "accelerators": [ { "acceleratorCount": "1", "acceleratorType": "nvidia-tesla-v100" } ], "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "n1-standard-2", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "etag": "aee17fa7-311c-44f8-ad80-9cdc338ec448", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke6-default-pool-d8412db4-grp" ], "locations": [ "europe-west4-a" ], "management": { "autoRepair": true, "autoUpgrade": true }, "name": "default-pool", "networkConfig": { "enablePrivateNodes": false }, "podIpv4CidrSize": 24, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.25.7-gke.1000" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "privateEndpoint": "10.164.15.226", "publicEndpoint": "34.90.127.139" }, "releaseChannel": { "channel": "REGULAR" }, "resourceLabels": { "gcpdiag_test": "gke" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6", "servicesIpv4Cidr": "10.15.240.0/20", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "default", "zone": "europe-west4-a" } ] } ================================================ FILE: test-data/gke1/json-dumps/container-kubectl.json ================================================ { "gcpdiag-gke1-aaaa/europe-west4/autopilot-gke1": { "resources": [ { "kind": "Ingress", "namespace": "default", "name": "ingress-1", "checks": [ { "name": "ServiceExistenceCheck", "message": "Service default/svc-1 found", "result": "PASSED" }, { "name": "AppProtocolAnnotationCheck", "message": "Service default/svc-1 does not have AppProtocolAnnotation", "result": "SKIPPED" }, { "name": "BackendConfigAnnotationCheck", "message": "BackendConfig annotation is valid in service default/svc-1", "result": "PASSED" }, { "name": "BackendConfigExistenceCheck", "message": "BackendConfig default/my-backendconfig in service default/svc-1 does not exist", "result": "FAILED" } ] }, { "kind": "Ingress", "namespace": "default", "name": "ingress-2", "checks": [ { "name": "ServiceExistenceCheck", "message": "Service default/svc-2 does not exist", "result": "FAILED" } ] } ] } } ================================================ FILE: test-data/gke1/json-dumps/container-server-config-europe-west4-a.json ================================================ { "defaultClusterVersion": "1.25.7-gke.1000", "validNodeVersions": [ "1.26.3-gke.1000", "1.26.3-gke.400", "1.26.2-gke.1000", "1.26.1-gke.1500", "1.25.8-gke.1000", "1.25.8-gke.500", "1.25.7-gke.1000", "1.25.6-gke.1000", "1.25.6-gke.200", "1.25.5-gke.2000", "1.25.5-gke.1500", "1.25.4-gke.2100", "1.25.3-gke.800", "1.24.12-gke.1000", "1.24.12-gke.500", "1.24.11-gke.1000", "1.24.10-gke.2300", "1.24.10-gke.1200", "1.24.9-gke.3200", "1.24.9-gke.2000", "1.24.9-gke.1500", "1.24.8-gke.2000", "1.24.8-gke.401", "1.24.7-gke.900", "1.24.6-gke.1500", "1.24.5-gke.600", "1.24.4-gke.800", "1.24.3-gke.2100", "1.24.3-gke.900", "1.24.3-gke.200", "1.24.2-gke.1900", "1.24.2-gke.300", "1.24.1-gke.1800", "1.24.1-gke.1400", "1.23.17-gke.2000", "1.23.17-gke.1700", "1.23.17-gke.300", "1.23.16-gke.2500", "1.23.16-gke.1400", "1.23.16-gke.1100", "1.23.16-gke.200", "1.23.15-gke.1900", "1.23.15-gke.1400", "1.23.14-gke.1800", "1.23.14-gke.401", "1.23.13-gke.900", "1.23.12-gke.1600", "1.23.12-gke.100", "1.23.11-gke.300", "1.23.10-gke.1000", "1.23.9-gke.2100", "1.23.9-gke.900", "1.23.8-gke.1900", "1.23.8-gke.400", "1.23.7-gke.1400", "1.23.6-gke.2200", "1.23.6-gke.1700", "1.23.6-gke.1501", "1.23.6-gke.1500", "1.23.5-gke.2400", "1.23.5-gke.1503", "1.23.5-gke.1501", "1.22.17-gke.8000", "1.22.17-gke.7500", "1.22.17-gke.6100", "1.22.17-gke.5400", "1.22.17-gke.4300", "1.22.17-gke.4000", "1.22.17-gke.3100", "1.22.17-gke.1900", "1.22.17-gke.1400", "1.22.16-gke.2000", "1.22.16-gke.1300", "1.22.15-gke.2500", "1.22.15-gke.1000", "1.22.15-gke.100", "1.22.14-gke.300", "1.22.13-gke.1000", "1.22.12-gke.2300", "1.22.12-gke.1200", "1.22.12-gke.500", "1.22.12-gke.300", "1.22.11-gke.400", "1.22.10-gke.600", "1.22.9-gke.2000", "1.22.9-gke.1500", "1.22.9-gke.1300", "1.22.8-gke.2200", "1.22.8-gke.202", "1.22.8-gke.201", "1.22.8-gke.200", "1.22.7-gke.1500", "1.22.7-gke.1300", "1.22.7-gke.900", "1.22.7-gke.300", "1.22.6-gke.1000", "1.22.6-gke.300", "1.22.4-gke.1501", "1.22.3-gke.1500", "1.21.14-gke.18800", "1.21.14-gke.18100", "1.21.14-gke.15800", "1.21.14-gke.14600", "1.21.14-gke.14100", "1.21.14-gke.8500", "1.21.14-gke.7100", "1.21.14-gke.5300", "1.21.14-gke.4300", "1.21.14-gke.3000", "1.21.14-gke.2700", "1.21.14-gke.2100", "1.21.14-gke.700", "1.21.13-gke.900", "1.21.12-gke.2200", "1.21.12-gke.1700", "1.21.12-gke.1500", "1.21.11-gke.1900", "1.21.11-gke.1100", "1.21.11-gke.900", "1.21.10-gke.2000", "1.21.10-gke.1500", "1.21.10-gke.1300", "1.21.10-gke.400", "1.21.9-gke.1002", "1.21.9-gke.1001", "1.21.9-gke.1000", "1.21.9-gke.300", "1.21.6-gke.1503", "1.21.6-gke.1501", "1.21.6-gke.1500", "1.21.5-gke.1805", "1.21.5-gke.1802", "1.21.5-gke.1302", "1.21.5-gke.1300", "1.21.4-gke.2302", "1.21.4-gke.2300", "1.21.3-gke.2003", "1.21.3-gke.2001", "1.20.15-gke.13700", "1.20.15-gke.13400", "1.20.15-gke.12800", "1.20.15-gke.11400", "1.20.15-gke.9900", "1.20.15-gke.8700", "1.20.15-gke.8200", "1.20.15-gke.8000", "1.20.15-gke.6000", "1.20.15-gke.5200", "1.20.15-gke.5000", "1.20.15-gke.4100", "1.20.15-gke.3600", "1.20.15-gke.3400", "1.20.15-gke.2500", "1.20.15-gke.1000", "1.20.15-gke.300", "1.20.12-gke.1500", "1.20.11-gke.1801", "1.20.11-gke.1300", "1.20.10-gke.2100", "1.20.10-gke.1600", "1.20.10-gke.301", "1.20.9-gke.2100", "1.20.9-gke.1001", "1.20.9-gke.1000", "1.20.9-gke.701", "1.20.9-gke.700", "1.20.8-gke.2101", "1.20.8-gke.2100", "1.20.8-gke.900", "1.20.8-gke.700", "1.20.7-gke.2200", "1.20.7-gke.1800", "1.20.6-gke.1400", "1.20.6-gke.1000", "1.19.16-gke.15700", "1.19.16-gke.14500", "1.19.16-gke.14000", "1.19.16-gke.13800", "1.19.16-gke.11800", "1.19.16-gke.11000", "1.19.16-gke.10800", "1.19.16-gke.9900", "1.19.16-gke.9400", "1.19.16-gke.9200", "1.19.16-gke.8300", "1.19.16-gke.6800", "1.19.16-gke.6100", "1.19.16-gke.3600", "1.19.15-gke.1801", "1.19.15-gke.1300", "1.19.15-gke.500", "1.19.14-gke.2300", "1.19.14-gke.1900", "1.19.14-gke.301", "1.19.14-gke.300", "1.19.13-gke.1900", "1.19.13-gke.1200", "1.19.13-gke.701", "1.19.13-gke.700", "1.19.12-gke.2101", "1.19.12-gke.2100", "1.19.12-gke.1100", "1.19.12-gke.900", "1.19.12-gke.700", "1.19.11-gke.2101", "1.19.11-gke.2100", "1.19.11-gke.1701", "1.19.11-gke.1700", "1.19.10-gke.1701", "1.19.10-gke.1700", "1.19.10-gke.1601", "1.19.10-gke.1600", "1.19.10-gke.1001", "1.19.10-gke.1000", "1.19.9-gke.1900", "1.19.9-gke.1400", "1.19.9-gke.700", "1.19.9-gke.100", "1.19.8-gke.2000", "1.19.8-gke.1600", "1.19.8-gke.1000", "1.19.7-gke.2503", "1.19.7-gke.1500", "1.19.7-gke.1302", "1.19.7-gke.800", "1.19.6-gke.1700", "1.19.6-gke.1100", "1.19.6-gke.600", "1.18.20-gke.6101", "1.18.20-gke.6000", "1.18.20-gke.4501", "1.18.20-gke.4500", "1.18.20-gke.4100", "1.18.20-gke.3300", "1.18.20-gke.3001", "1.18.20-gke.3000", "1.18.20-gke.2300", "1.18.20-gke.901", "1.18.20-gke.900", "1.18.20-gke.501", "1.18.19-gke.2101", "1.18.19-gke.2100", "1.18.19-gke.1701", "1.18.19-gke.1700", "1.18.18-gke.1701", "1.18.18-gke.1700", "1.18.18-gke.1101", "1.18.18-gke.1100", "1.18.17-gke.1901", "1.18.17-gke.1900", "1.18.17-gke.1201", "1.18.17-gke.1200", "1.18.17-gke.700", "1.18.17-gke.100", "1.18.16-gke.2100", "1.18.16-gke.1201", "1.18.16-gke.1200", "1.18.16-gke.502", "1.18.16-gke.500", "1.18.16-gke.302", "1.18.16-gke.300", "1.18.15-gke.2500", "1.18.15-gke.1502", "1.18.15-gke.1501", "1.18.15-gke.1500", "1.18.15-gke.1102", "1.18.15-gke.1100", "1.18.15-gke.800", "1.18.14-gke.1600", "1.18.14-gke.1200", "1.18.12-gke.1210", "1.18.12-gke.1206", "1.18.12-gke.1205", "1.18.12-gke.1201", "1.18.12-gke.1200", "1.18.12-gke.300", "1.18.10-gke.2701", "1.18.10-gke.2101", "1.18.10-gke.1500", "1.18.10-gke.601", "1.18.9-gke.2501", "1.18.9-gke.1501", "1.18.9-gke.801", "1.18.6-gke.4801", "1.18.6-gke.3504", "1.18.6-gke.3503", "1.17.17-gke.9100", "1.17.17-gke.8500", "1.17.17-gke.8200", "1.17.17-gke.7800", "1.17.17-gke.7200", "1.17.17-gke.6700", "1.17.17-gke.6000", "1.17.17-gke.5400", "1.17.17-gke.4900", "1.17.17-gke.4400", "1.17.17-gke.3700", "1.17.17-gke.3000", "1.17.17-gke.2800", "1.17.17-gke.2500", "1.17.17-gke.1500", "1.17.17-gke.1101", "1.17.17-gke.1100", "1.17.17-gke.600", "1.17.16-gke.1600", "1.17.16-gke.1300", "1.17.15-gke.800", "1.17.15-gke.300", "1.17.14-gke.1600", "1.17.14-gke.1200", "1.17.14-gke.400", "1.17.13-gke.2600", "1.17.13-gke.2001", "1.17.13-gke.1401", "1.17.13-gke.1400", "1.17.13-gke.600", "1.17.12-gke.2502", "1.17.12-gke.1504", "1.17.12-gke.1501", "1.17.12-gke.500", "1.17.9-gke.6300", "1.17.9-gke.1504", "1.16.15-gke.14800", "1.16.15-gke.12500", "1.16.15-gke.11800", "1.16.15-gke.10600", "1.16.15-gke.7801", "1.16.15-gke.7800", "1.16.15-gke.7300", "1.16.15-gke.6900", "1.16.15-gke.6000", "1.16.15-gke.5500", "1.16.15-gke.4901", "1.16.15-gke.4301", "1.16.15-gke.4300", "1.16.15-gke.3500", "1.16.15-gke.2601", "1.16.15-gke.1600", "1.16.15-gke.500", "1.16.13-gke.404", "1.16.13-gke.403", "1.16.13-gke.401", "1.16.13-gke.400", "1.16.13-gke.1", "1.16.11-gke.5", "1.16.10-gke.8", "1.16.9-gke.6", "1.16.9-gke.2", "1.16.8-gke.15", "1.16.8-gke.12", "1.16.8-gke.9", "1.15.12-gke.6002", "1.15.12-gke.6001", "1.15.12-gke.5000", "1.15.12-gke.4002", "1.15.12-gke.4000", "1.15.12-gke.20", "1.15.12-gke.17", "1.15.12-gke.16", "1.15.12-gke.13", "1.15.12-gke.9", "1.15.12-gke.6", "1.15.12-gke.3", "1.15.12-gke.2", "1.15.11-gke.17", "1.15.11-gke.15", "1.15.11-gke.13", "1.15.11-gke.12", "1.15.11-gke.11", "1.15.11-gke.9", "1.15.11-gke.5", "1.15.11-gke.3", "1.15.11-gke.1", "1.15.9-gke.26", "1.15.9-gke.24", "1.15.9-gke.22", "1.15.9-gke.12", "1.15.9-gke.9", "1.15.9-gke.8", "1.15.8-gke.3", "1.15.8-gke.2", "1.15.7-gke.23", "1.15.7-gke.2", "1.15.4-gke.22", "1.14.10-gke.1504", "1.14.10-gke.902", "1.14.10-gke.50", "1.14.10-gke.46", "1.14.10-gke.45", "1.14.10-gke.42", "1.14.10-gke.41", "1.14.10-gke.40", "1.14.10-gke.37", "1.14.10-gke.36", "1.14.10-gke.34", "1.14.10-gke.32", "1.14.10-gke.31", "1.14.10-gke.27", "1.14.10-gke.24", "1.14.10-gke.22", "1.14.10-gke.21", "1.14.10-gke.17", "1.14.10-gke.0", "1.14.9-gke.23", "1.14.9-gke.2", "1.14.9-gke.0", "1.14.8-gke.33", "1.14.8-gke.21", "1.14.8-gke.18", "1.14.8-gke.17", "1.14.8-gke.14", "1.14.8-gke.12", "1.14.8-gke.7", "1.14.8-gke.2", "1.14.7-gke.40", "1.14.7-gke.25", "1.14.7-gke.23", "1.14.7-gke.17", "1.14.7-gke.14", "1.14.7-gke.10", "1.14.6-gke.13", "1.14.6-gke.2", "1.14.6-gke.1", "1.14.3-gke.11", "1.14.3-gke.10", "1.14.3-gke.9", "1.14.2-gke.9", "1.14.1-gke.5", "1.13.12-gke.30", "1.13.12-gke.25", "1.13.12-gke.17", "1.13.12-gke.16", "1.13.12-gke.14", "1.13.12-gke.13", "1.13.12-gke.10", "1.13.12-gke.8", "1.13.12-gke.4", "1.13.12-gke.2", "1.13.11-gke.23", "1.13.11-gke.15", "1.13.11-gke.14", "1.13.11-gke.12", "1.13.11-gke.11", "1.13.11-gke.9", "1.13.11-gke.5", "1.13.10-gke.7", "1.13.10-gke.0", "1.13.9-gke.11", "1.13.9-gke.3", "1.13.7-gke.24", "1.13.7-gke.19", "1.13.7-gke.15", "1.13.7-gke.8", "1.13.7-gke.0", "1.13.6-gke.13", "1.13.6-gke.6", "1.13.6-gke.5", "1.13.6-gke.0", "1.13.5-gke.10", "1.12.10-gke.22", "1.12.10-gke.20", "1.12.10-gke.19", "1.12.10-gke.18", "1.12.10-gke.17", "1.12.10-gke.15", "1.12.10-gke.13", "1.12.10-gke.11", "1.12.10-gke.5", "1.12.9-gke.16", "1.12.9-gke.15", "1.12.9-gke.13", "1.12.9-gke.10", "1.12.9-gke.7", "1.12.9-gke.3", "1.12.8-gke.12", "1.12.8-gke.10", "1.12.8-gke.7", "1.12.8-gke.6", "1.12.7-gke.26", "1.12.7-gke.25", "1.12.7-gke.24", "1.12.7-gke.22", "1.12.7-gke.21", "1.12.7-gke.17", "1.12.7-gke.10", "1.12.7-gke.7", "1.12.6-gke.11", "1.12.6-gke.10", "1.12.6-gke.7", "1.12.5-gke.10", "1.12.5-gke.5", "1.11.10-gke.6", "1.11.10-gke.5" ], "defaultImageType": "COS_CONTAINERD", "validImageTypes": [ "COS_CONTAINERD", "COS", "UBUNTU", "UBUNTU_CONTAINERD", "WINDOWS_LTSC", "WINDOWS_LTSC_CONTAINERD", "WINDOWS_SAC", "WINDOWS_SAC_CONTAINERD" ], "validMasterVersions": [ "1.26.3-gke.1000", "1.26.2-gke.1000", "1.25.8-gke.1000", "1.25.8-gke.500", "1.25.7-gke.1000", "1.24.12-gke.1000", "1.24.12-gke.500", "1.24.11-gke.1000", "1.24.10-gke.2300", "1.24.10-gke.1200", "1.24.9-gke.3200", "1.23.17-gke.2000", "1.23.17-gke.1700", "1.23.17-gke.300", "1.23.16-gke.2500", "1.23.16-gke.1400", "1.22.17-gke.8000", "1.22.17-gke.7500", "1.22.17-gke.6100", "1.22.17-gke.5400", "1.21.14-gke.18800", "1.21.14-gke.18100", "1.21.14-gke.15800", "1.21.14-gke.8500" ], "channels": [ { "channel": "RAPID", "defaultVersion": "1.26.3-gke.400", "validVersions": [ "1.26.3-gke.1000", "1.26.3-gke.400", "1.25.8-gke.1000", "1.25.8-gke.500", "1.24.12-gke.1000", "1.23.17-gke.2000", "1.23.17-gke.1700", "1.23.17-gke.300", "1.22.17-gke.8000", "1.22.17-gke.7500", "1.21.14-gke.18800" ] }, { "channel": "REGULAR", "defaultVersion": "1.25.7-gke.1000", "validVersions": [ "1.26.2-gke.1000", "1.25.7-gke.1000", "1.24.11-gke.1000", "1.24.10-gke.2300", "1.23.17-gke.300", "1.22.17-gke.6100", "1.21.14-gke.18800" ] }, { "channel": "STABLE", "defaultVersion": "1.24.10-gke.2300", "validVersions": [ "1.24.11-gke.1000", "1.24.10-gke.2300", "1.24.9-gke.3200", "1.23.16-gke.1400", "1.22.17-gke.5400", "1.21.14-gke.18100", "1.21.14-gke.15800" ] } ] } ================================================ FILE: test-data/gke1/json-dumps/container-server-config-europe-west4.json ================================================ { "defaultClusterVersion": "1.25.7-gke.1000", "validNodeVersions": [ "1.26.3-gke.1000", "1.26.3-gke.400", "1.26.2-gke.1000", "1.26.1-gke.1500", "1.25.8-gke.1000", "1.25.8-gke.500", "1.25.7-gke.1000", "1.25.6-gke.1000", "1.25.6-gke.200", "1.25.5-gke.2000", "1.25.5-gke.1500", "1.25.4-gke.2100", "1.25.3-gke.800", "1.24.12-gke.1000", "1.24.12-gke.500", "1.24.11-gke.1000", "1.24.10-gke.2300", "1.24.10-gke.1200", "1.24.9-gke.3200", "1.24.9-gke.2000", "1.24.9-gke.1500", "1.24.8-gke.2000", "1.24.8-gke.401", "1.24.7-gke.900", "1.24.6-gke.1500", "1.24.5-gke.600", "1.24.4-gke.800", "1.24.3-gke.2100", "1.24.3-gke.900", "1.24.3-gke.200", "1.24.2-gke.1900", "1.24.2-gke.300", "1.24.1-gke.1800", "1.24.1-gke.1400", "1.23.17-gke.2000", "1.23.17-gke.1700", "1.23.17-gke.300", "1.23.16-gke.2500", "1.23.16-gke.1400", "1.23.16-gke.1100", "1.23.16-gke.200", "1.23.15-gke.1900", "1.23.15-gke.1400", "1.23.14-gke.1800", "1.23.14-gke.401", "1.23.13-gke.900", "1.23.12-gke.1600", "1.23.12-gke.100", "1.23.11-gke.300", "1.23.10-gke.1000", "1.23.9-gke.2100", "1.23.9-gke.900", "1.23.8-gke.1900", "1.23.8-gke.400", "1.23.7-gke.1400", "1.23.6-gke.2200", "1.23.6-gke.1700", "1.23.6-gke.1501", "1.23.6-gke.1500", "1.23.5-gke.2400", "1.23.5-gke.1503", "1.23.5-gke.1501", "1.22.17-gke.8000", "1.22.17-gke.7500", "1.22.17-gke.6100", "1.22.17-gke.5400", "1.22.17-gke.4300", "1.22.17-gke.4000", "1.22.17-gke.3100", "1.22.17-gke.1900", "1.22.17-gke.1400", "1.22.16-gke.2000", "1.22.16-gke.1300", "1.22.15-gke.2500", "1.22.15-gke.1000", "1.22.15-gke.100", "1.22.14-gke.300", "1.22.13-gke.1000", "1.22.12-gke.2300", "1.22.12-gke.1200", "1.22.12-gke.500", "1.22.12-gke.300", "1.22.11-gke.400", "1.22.10-gke.600", "1.22.9-gke.2000", "1.22.9-gke.1500", "1.22.9-gke.1300", "1.22.8-gke.2200", "1.22.8-gke.202", "1.22.8-gke.201", "1.22.8-gke.200", "1.22.7-gke.1500", "1.22.7-gke.1300", "1.22.7-gke.900", "1.22.7-gke.300", "1.22.6-gke.1000", "1.22.6-gke.300", "1.22.4-gke.1501", "1.22.3-gke.1500", "1.21.14-gke.18800", "1.21.14-gke.18100", "1.21.14-gke.15800", "1.21.14-gke.14600", "1.21.14-gke.14100", "1.21.14-gke.8500", "1.21.14-gke.7100", "1.21.14-gke.5300", "1.21.14-gke.4300", "1.21.14-gke.3000", "1.21.14-gke.2700", "1.21.14-gke.2100", "1.21.14-gke.700", "1.21.13-gke.900", "1.21.12-gke.2200", "1.21.12-gke.1700", "1.21.12-gke.1500", "1.21.11-gke.1900", "1.21.11-gke.1100", "1.21.11-gke.900", "1.21.10-gke.2000", "1.21.10-gke.1500", "1.21.10-gke.1300", "1.21.10-gke.400", "1.21.9-gke.1002", "1.21.9-gke.1001", "1.21.9-gke.1000", "1.21.9-gke.300", "1.21.6-gke.1503", "1.21.6-gke.1501", "1.21.6-gke.1500", "1.21.5-gke.1805", "1.21.5-gke.1802", "1.21.5-gke.1302", "1.21.5-gke.1300", "1.21.4-gke.2302", "1.21.4-gke.2300", "1.21.3-gke.2003", "1.21.3-gke.2001", "1.20.15-gke.13700", "1.20.15-gke.13400", "1.20.15-gke.12800", "1.20.15-gke.11400", "1.20.15-gke.9900", "1.20.15-gke.8700", "1.20.15-gke.8200", "1.20.15-gke.8000", "1.20.15-gke.6000", "1.20.15-gke.5200", "1.20.15-gke.5000", "1.20.15-gke.4100", "1.20.15-gke.3600", "1.20.15-gke.3400", "1.20.15-gke.2500", "1.20.15-gke.1000", "1.20.15-gke.300", "1.20.12-gke.1500", "1.20.11-gke.1801", "1.20.11-gke.1300", "1.20.10-gke.2100", "1.20.10-gke.1600", "1.20.10-gke.301", "1.20.9-gke.2100", "1.20.9-gke.1001", "1.20.9-gke.1000", "1.20.9-gke.701", "1.20.9-gke.700", "1.20.8-gke.2101", "1.20.8-gke.2100", "1.20.8-gke.900", "1.20.8-gke.700", "1.20.7-gke.2200", "1.20.7-gke.1800", "1.20.6-gke.1400", "1.20.6-gke.1000", "1.19.16-gke.15700", "1.19.16-gke.14500", "1.19.16-gke.14000", "1.19.16-gke.13800", "1.19.16-gke.11800", "1.19.16-gke.11000", "1.19.16-gke.10800", "1.19.16-gke.9900", "1.19.16-gke.9400", "1.19.16-gke.9200", "1.19.16-gke.8300", "1.19.16-gke.6800", "1.19.16-gke.6100", "1.19.16-gke.3600", "1.19.15-gke.1801", "1.19.15-gke.1300", "1.19.15-gke.500", "1.19.14-gke.2300", "1.19.14-gke.1900", "1.19.14-gke.301", "1.19.14-gke.300", "1.19.13-gke.1900", "1.19.13-gke.1200", "1.19.13-gke.701", "1.19.13-gke.700", "1.19.12-gke.2101", "1.19.12-gke.2100", "1.19.12-gke.1100", "1.19.12-gke.900", "1.19.12-gke.700", "1.19.11-gke.2101", "1.19.11-gke.2100", "1.19.11-gke.1701", "1.19.11-gke.1700", "1.19.10-gke.1701", "1.19.10-gke.1700", "1.19.10-gke.1601", "1.19.10-gke.1600", "1.19.10-gke.1001", "1.19.10-gke.1000", "1.19.9-gke.1900", "1.19.9-gke.1400", "1.19.9-gke.700", "1.19.9-gke.100", "1.19.8-gke.2000", "1.19.8-gke.1600", "1.19.8-gke.1000", "1.19.7-gke.2503", "1.19.7-gke.1500", "1.19.7-gke.1302", "1.19.7-gke.800", "1.19.6-gke.1700", "1.19.6-gke.1100", "1.19.6-gke.600", "1.18.20-gke.6101", "1.18.20-gke.6000", "1.18.20-gke.4501", "1.18.20-gke.4500", "1.18.20-gke.4100", "1.18.20-gke.3300", "1.18.20-gke.3001", "1.18.20-gke.3000", "1.18.20-gke.2300", "1.18.20-gke.901", "1.18.20-gke.900", "1.18.20-gke.501", "1.18.19-gke.2101", "1.18.19-gke.2100", "1.18.19-gke.1701", "1.18.19-gke.1700", "1.18.18-gke.1701", "1.18.18-gke.1700", "1.18.18-gke.1101", "1.18.18-gke.1100", "1.18.17-gke.1901", "1.18.17-gke.1900", "1.18.17-gke.1201", "1.18.17-gke.1200", "1.18.17-gke.700", "1.18.17-gke.100", "1.18.16-gke.2100", "1.18.16-gke.1201", "1.18.16-gke.1200", "1.18.16-gke.502", "1.18.16-gke.500", "1.18.16-gke.302", "1.18.16-gke.300", "1.18.15-gke.2500", "1.18.15-gke.1502", "1.18.15-gke.1501", "1.18.15-gke.1500", "1.18.15-gke.1102", "1.18.15-gke.1100", "1.18.15-gke.800", "1.18.14-gke.1600", "1.18.14-gke.1200", "1.18.12-gke.1210", "1.18.12-gke.1206", "1.18.12-gke.1205", "1.18.12-gke.1201", "1.18.12-gke.1200", "1.18.12-gke.300", "1.18.10-gke.2701", "1.18.10-gke.2101", "1.18.10-gke.1500", "1.18.10-gke.601", "1.18.9-gke.2501", "1.18.9-gke.1501", "1.18.9-gke.801", "1.18.6-gke.4801", "1.18.6-gke.3504", "1.18.6-gke.3503", "1.17.17-gke.9100", "1.17.17-gke.8500", "1.17.17-gke.8200", "1.17.17-gke.7800", "1.17.17-gke.7200", "1.17.17-gke.6700", "1.17.17-gke.6000", "1.17.17-gke.5400", "1.17.17-gke.4900", "1.17.17-gke.4400", "1.17.17-gke.3700", "1.17.17-gke.3000", "1.17.17-gke.2800", "1.17.17-gke.2500", "1.17.17-gke.1500", "1.17.17-gke.1101", "1.17.17-gke.1100", "1.17.17-gke.600", "1.17.16-gke.1600", "1.17.16-gke.1300", "1.17.15-gke.800", "1.17.15-gke.300", "1.17.14-gke.1600", "1.17.14-gke.1200", "1.17.14-gke.400", "1.17.13-gke.2600", "1.17.13-gke.2001", "1.17.13-gke.1401", "1.17.13-gke.1400", "1.17.13-gke.600", "1.17.12-gke.2502", "1.17.12-gke.1504", "1.17.12-gke.1501", "1.17.12-gke.500", "1.17.9-gke.6300", "1.17.9-gke.1504", "1.16.15-gke.14800", "1.16.15-gke.12500", "1.16.15-gke.11800", "1.16.15-gke.10600", "1.16.15-gke.7801", "1.16.15-gke.7800", "1.16.15-gke.7300", "1.16.15-gke.6900", "1.16.15-gke.6000", "1.16.15-gke.5500", "1.16.15-gke.4901", "1.16.15-gke.4301", "1.16.15-gke.4300", "1.16.15-gke.3500", "1.16.15-gke.2601", "1.16.15-gke.1600", "1.16.15-gke.500", "1.16.13-gke.404", "1.16.13-gke.403", "1.16.13-gke.401", "1.16.13-gke.400", "1.16.13-gke.1", "1.16.11-gke.5", "1.16.10-gke.8", "1.16.9-gke.6", "1.16.9-gke.2", "1.16.8-gke.15", "1.16.8-gke.12", "1.16.8-gke.9", "1.15.12-gke.6002", "1.15.12-gke.6001", "1.15.12-gke.5000", "1.15.12-gke.4002", "1.15.12-gke.4000", "1.15.12-gke.20", "1.15.12-gke.17", "1.15.12-gke.16", "1.15.12-gke.13", "1.15.12-gke.9", "1.15.12-gke.6", "1.15.12-gke.3", "1.15.12-gke.2", "1.15.11-gke.17", "1.15.11-gke.15", "1.15.11-gke.13", "1.15.11-gke.12", "1.15.11-gke.11", "1.15.11-gke.9", "1.15.11-gke.5", "1.15.11-gke.3", "1.15.11-gke.1", "1.15.9-gke.26", "1.15.9-gke.24", "1.15.9-gke.22", "1.15.9-gke.12", "1.15.9-gke.9", "1.15.9-gke.8", "1.15.8-gke.3", "1.15.8-gke.2", "1.15.7-gke.23", "1.15.7-gke.2", "1.15.4-gke.22", "1.14.10-gke.1504", "1.14.10-gke.902", "1.14.10-gke.50", "1.14.10-gke.46", "1.14.10-gke.45", "1.14.10-gke.42", "1.14.10-gke.41", "1.14.10-gke.40", "1.14.10-gke.37", "1.14.10-gke.36", "1.14.10-gke.34", "1.14.10-gke.32", "1.14.10-gke.31", "1.14.10-gke.27", "1.14.10-gke.24", "1.14.10-gke.22", "1.14.10-gke.21", "1.14.10-gke.17", "1.14.10-gke.0", "1.14.9-gke.23", "1.14.9-gke.2", "1.14.9-gke.0", "1.14.8-gke.33", "1.14.8-gke.21", "1.14.8-gke.18", "1.14.8-gke.17", "1.14.8-gke.14", "1.14.8-gke.12", "1.14.8-gke.7", "1.14.8-gke.2", "1.14.7-gke.40", "1.14.7-gke.25", "1.14.7-gke.23", "1.14.7-gke.17", "1.14.7-gke.14", "1.14.7-gke.10", "1.14.6-gke.13", "1.14.6-gke.2", "1.14.6-gke.1", "1.14.3-gke.11", "1.14.3-gke.10", "1.14.3-gke.9", "1.14.2-gke.9", "1.14.1-gke.5", "1.13.12-gke.30", "1.13.12-gke.25", "1.13.12-gke.17", "1.13.12-gke.16", "1.13.12-gke.14", "1.13.12-gke.13", "1.13.12-gke.10", "1.13.12-gke.8", "1.13.12-gke.4", "1.13.12-gke.2", "1.13.11-gke.23", "1.13.11-gke.15", "1.13.11-gke.14", "1.13.11-gke.12", "1.13.11-gke.11", "1.13.11-gke.9", "1.13.11-gke.5", "1.13.10-gke.7", "1.13.10-gke.0", "1.13.9-gke.11", "1.13.9-gke.3", "1.13.7-gke.24", "1.13.7-gke.19", "1.13.7-gke.15", "1.13.7-gke.8", "1.13.7-gke.0", "1.13.6-gke.13", "1.13.6-gke.6", "1.13.6-gke.5", "1.13.6-gke.0", "1.13.5-gke.10", "1.12.10-gke.22", "1.12.10-gke.20", "1.12.10-gke.19", "1.12.10-gke.18", "1.12.10-gke.17", "1.12.10-gke.15", "1.12.10-gke.13", "1.12.10-gke.11", "1.12.10-gke.5", "1.12.9-gke.16", "1.12.9-gke.15", "1.12.9-gke.13", "1.12.9-gke.10", "1.12.9-gke.7", "1.12.9-gke.3", "1.12.8-gke.12", "1.12.8-gke.10", "1.12.8-gke.7", "1.12.8-gke.6", "1.12.7-gke.26", "1.12.7-gke.25", "1.12.7-gke.24", "1.12.7-gke.22", "1.12.7-gke.21", "1.12.7-gke.17", "1.12.7-gke.10", "1.12.7-gke.7", "1.12.6-gke.11", "1.12.6-gke.10", "1.12.6-gke.7", "1.12.5-gke.10", "1.12.5-gke.5", "1.11.10-gke.6", "1.11.10-gke.5" ], "defaultImageType": "COS_CONTAINERD", "validImageTypes": [ "COS_CONTAINERD", "COS", "UBUNTU", "UBUNTU_CONTAINERD", "WINDOWS_LTSC", "WINDOWS_LTSC_CONTAINERD", "WINDOWS_SAC", "WINDOWS_SAC_CONTAINERD" ], "validMasterVersions": [ "1.26.3-gke.1000", "1.26.2-gke.1000", "1.25.8-gke.1000", "1.25.8-gke.500", "1.25.7-gke.1000", "1.24.12-gke.1000", "1.24.12-gke.500", "1.24.11-gke.1000", "1.24.10-gke.2300", "1.24.10-gke.1200", "1.24.9-gke.3200", "1.23.17-gke.2000", "1.23.17-gke.1700", "1.23.17-gke.300", "1.23.16-gke.2500", "1.23.16-gke.1400", "1.22.17-gke.8000", "1.22.17-gke.7500", "1.22.17-gke.6100", "1.22.17-gke.5400", "1.21.14-gke.18800", "1.21.14-gke.18100", "1.21.14-gke.15800", "1.21.14-gke.8500" ], "channels": [ { "channel": "RAPID", "defaultVersion": "1.26.3-gke.400", "validVersions": [ "1.26.3-gke.1000", "1.26.3-gke.400", "1.25.8-gke.1000", "1.25.8-gke.500", "1.24.12-gke.1000", "1.23.17-gke.2000", "1.23.17-gke.1700", "1.23.17-gke.300", "1.22.17-gke.8000", "1.22.17-gke.7500", "1.21.14-gke.18800" ] }, { "channel": "REGULAR", "defaultVersion": "1.25.7-gke.1000", "validVersions": [ "1.26.2-gke.1000", "1.25.7-gke.1000", "1.24.11-gke.1000", "1.24.10-gke.2300", "1.23.17-gke.300", "1.22.17-gke.6100", "1.21.14-gke.18800" ] }, { "channel": "STABLE", "defaultVersion": "1.24.10-gke.2300", "validVersions": [ "1.24.11-gke.1000", "1.24.10-gke.2300", "1.24.9-gke.3200", "1.23.16-gke.1400", "1.22.17-gke.5400", "1.21.14-gke.18100", "1.21.14-gke.15800" ] } ] } ================================================ FILE: test-data/gke1/json-dumps/forwardingRules.json ================================================ { "kind": "compute#forwardingRuleAggregatedList", "id": "projects/gcpdiag-gke1-aaaa/aggregated/forwardingRules", "items": { "regions/us-west1": { "forwardingRules": [ { "kind": "compute#forwardingRule", "id": "4245322038451922234", "creationTimestamp": "2024-02-02T22:21:59.365-08:00", "name": "forwardingRule1", "description": "", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1", "IPAddress": "9.1.2.7", "IPProtocol": "TCP", "portRange": "80-80", "target": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/targetHttpProxies/forwardingRule1-target-proxy", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/forwardingRules/forwardingRule1", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/backend-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/lb-network", "networkTier": "PREMIUM", "labelFingerprint": "42Wmu7y8rSM=", "fingerprint": "zUL2wdvikcQ=", "allowGlobalAccess": true } ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/forwardingRules" } ================================================ FILE: test-data/gke1/json-dumps/healthChecks.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-lb1-aaaa/global/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "6570916794820924287", "creationTimestamp": "2023-11-22T17:40:32.481-08:00", "name": "http-basic-check", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check", "logConfig": { "enable": true } }, { "kind": "compute#healthCheck", "id": "2011808073814110499", "creationTimestamp": "2023-11-22T11:00:28.722-08:00", "name": "http-basic-check-2", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check-2" }, { "kind": "compute#healthCheck", "id": "4700445592381550883", "creationTimestamp": "2023-11-22T11:00:28.748-08:00", "name": "tcp-basic-check-1", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "TCP", "tcpHealthCheck": { "port": 80, "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/tcp-basic-check-1", "logConfig": { "enable": true } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/" } ================================================ FILE: test-data/gke1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com" ], "role": "projects/gcpdiag-gke1-aaaa/roles/gke2_custom_role" }, { "members": [ "serviceAccount:gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com" ], "role": "projects/gcpdiag-gke1-aaaa/roles/gke3_custom_role" }, { "members": [ "serviceAccount:service-12340002@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-12340002@container-engine-robot.iam.gserviceaccount.com" ], "role": "roles/container.serviceAgent" }, { "members": [ "serviceAccount:service-12340002@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:12340002-compute@developer.gserviceaccount.com", "serviceAccount:12340002@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12340002@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" } ], "etag": "BwXSd+CQHPE=", "version": 1 } ================================================ FILE: test-data/gke1/json-dumps/iam-roles-custom.json ================================================ { "roles": [ { "name": "projects/gcpdiag-gke1-aaaa/roles/gke2_custom_role", "title": "GKE Custom Role", "description": "A description", "includedPermissions": [ "autoscaling.sites.writeMetrics", "cloudnotifications.activities.list", "logging.logEntries.create", "monitoring.alertPolicies.get", "monitoring.alertPolicies.list", "monitoring.dashboards.get", "monitoring.dashboards.list", "monitoring.groups.get", "monitoring.groups.list", "monitoring.metricDescriptors.create", "monitoring.metricDescriptors.get", "monitoring.metricDescriptors.list", "monitoring.monitoredResourceDescriptors.get", "monitoring.monitoredResourceDescriptors.list", "monitoring.notificationChannelDescriptors.get", "monitoring.notificationChannelDescriptors.list", "monitoring.notificationChannels.get", "monitoring.notificationChannels.list", "monitoring.publicWidgets.get", "monitoring.publicWidgets.list", "monitoring.services.get", "monitoring.services.list", "monitoring.slos.get", "monitoring.slos.list", "monitoring.timeSeries.create", "monitoring.timeSeries.list", "monitoring.uptimeCheckConfigs.get", "monitoring.uptimeCheckConfigs.list", "opsconfigmonitoring.resourceMetadata.list", "stackdriver.resourceMetadata.write", "storage.objects.get", "storage.objects.list" ], "stage": "GA", "etag": "BwXXp/+O7cs=" }, { "name": "projects/gcpdiag-gke1-aaaa/roles/gke3_custom_role", "title": "GKE 3 Custom Role", "description": "A description", "includedPermissions": [ "cloudnotifications.activities.list" ], "stage": "GA", "etag": "BwXXp/+Ke/c=" } ] } ================================================ FILE: test-data/gke1/json-dumps/iam-roles-get.json ================================================ { "roles": [ { "name": "roles/container.nodeServiceAgent", "title": "[Deprecated] Kubernetes Engine Node Service Agent", "description": "Minimal set of permission required by a GKE node to support standard capabilities such as logging and monitoring export, and image pulls.", "includedPermissions": [ "autoscaling.sites.writeMetrics", "logging.logEntries.create", "monitoring.metricDescriptors.create", "monitoring.metricDescriptors.list", "monitoring.timeSeries.create", "monitoring.timeSeries.list", "resourcemanager.projects.get", "resourcemanager.projects.list", "serviceusage.services.use", "storage.objects.get", "storage.objects.list" ], "stage": "GA", "etag": "AA==" }, { "name": "roles/container.defaultNodeServiceAccount", "title": "Kubernetes Engine Default Node Service Account", "description": "Least privilege role to use as the default service account for GKE Nodes.", "includedPermissions": [ "autoscaling.sites.writeMetrics", "logging.logEntries.create", "monitoring.metricDescriptors.create", "monitoring.metricDescriptors.list", "monitoring.timeSeries.create", "monitoring.timeSeries.list" ], "stage": "GA", "etag": "AA==" } ] } ================================================ FILE: test-data/gke1/json-dumps/iam-service-account-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com" ], "role": "roles/iam.serviceAccountUser" } ], "etag": "BwXXwOptVuE=", "version": 1 } ================================================ FILE: test-data/gke1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "GKE Service Account", "email": "gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke1-aaaa/serviceAccounts/gke2sa@gcpdiag-gke1-x1f4j4ed.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke1-aaaa", "uniqueId": "102417873155869406705" }, { "displayName": "Compute Engine default service account", "email": "12340002-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke1-aaaa/serviceAccounts/12340002-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke1-aaaa", "uniqueId": "112819826788395589395" }, { "displayName": "GKE 1 Service Account", "email": "gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke1-aaaa/serviceAccounts/gke1sa@gcpdiag-gke1-x1f4j4ed.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke1-aaaa", "uniqueId": "106302102062593675693" }, { "displayName": "GKE 3 Service Account", "email": "gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke1-aaaa/serviceAccounts/gke3sa@gcpdiag-gke1-x1f4j4ed.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke1-aaaa", "uniqueId": "104735732736559639086" } ] } ================================================ FILE: test-data/gke1/json-dumps/instances.json ================================================ ================================================ FILE: test-data/gke1/json-dumps/interconnect-attachment1.json ================================================ { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.1.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.1.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment1", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1101 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router-1", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1101 } ================================================ FILE: test-data/gke1/json-dumps/interconnect-attachments.json ================================================ { "id": "projects/gcpdiag-gke1-aaaa/aggregated/interconnectAttachments", "items": { "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east1" } ], "message": "There are no results " } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east2" } ], "message": "There are no results " } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east1" } ], "message": "There are no results " } }, "regions/us-east4": { "interconnectAttachments": [ { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.1.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.1.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment1", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1101 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "mtu": 1460, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router1", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1101 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.1.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.1.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment2", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1103 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "mtu": 1460, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router1", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1103 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.2.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.2.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment3", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1105 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "mtu": 1460, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router2", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1105 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.2.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.2.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment4", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1106 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4", "mtu": 1460, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router2", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1106 } ] }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east5" } ], "message": "There are no results " } }, "regions/us-west2": { "interconnectAttachments": [ { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.3.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.3.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect3", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment5", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1102 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "mtu": 1450, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1102 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.3.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.3.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment6", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1104 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.3.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.3.2/29", "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment7", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1104 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.3.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.3.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment8", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1104 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.3.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.3.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment9", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1104 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.3.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.3.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment10", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6", "stackType": "IPV4_ONLY", "state": "DEFUNCT", "type": "DEDICATED", "vlanTag8021q": 1104 } ] } }, "kind": "compute#interconnectAttachmentAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/interconnectAttachments" } ================================================ FILE: test-data/gke1/json-dumps/kms-key-destroyed.json ================================================ { "name": "projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-destroyed", "primary": { "name": "projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-destroyed/cryptoKeyVersions/3", "state": "DESTROYED", "createTime": "2021-02-21T16:19:08.796116258Z", "destroyEventTime": "2021-02-22T16:19:08.796116258Z", "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION", "generateTime": "2021-02-21T16:19:08.796116258Z" }, "purpose": "ENCRYPT_DECRYPT", "createTime": "2021-01-04T15:32:50.749517603Z", "nextRotationTime": "2021-04-03T23:00:00Z", "rotationPeriod": "7776000s", "versionTemplate": { "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION" } } ================================================ FILE: test-data/gke1/json-dumps/kms-key-disabled.json ================================================ { "name": "projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-disabled", "primary": { "name": "projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-disabled/cryptoKeyVersions/2", "state": "DISABLED", "createTime": "2021-02-21T16:19:08.796116258Z", "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION", "generateTime": "2021-02-21T16:19:08.796116258Z" }, "purpose": "ENCRYPT_DECRYPT", "createTime": "2021-01-04T15:32:50.749517603Z", "nextRotationTime": "2021-04-03T23:00:00Z", "rotationPeriod": "7776000s", "versionTemplate": { "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION" } } ================================================ FILE: test-data/gke1/json-dumps/kms-key-enabled.json ================================================ { "name": "projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-enabled", "primary": { "name": "projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-enabled/cryptoKeyVersions/1", "state": "ENABLED", "createTime": "2021-01-04T15:32:50.749517603Z", "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION", "generateTime": "2021-01-04T15:32:50.749517603Z" }, "purpose": "ENCRYPT_DECRYPT", "createTime": "2021-01-04T15:32:50.749517603Z", "nextRotationTime": "2021-04-03T23:00:00Z", "rotationPeriod": "7776000s", "versionTemplate": { "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION" } } ================================================ FILE: test-data/gke1/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9dartq", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_id": "8700821884762314590", "instance_group_manager_name": "gke-gke2-default-pool-11b6ca8e-grp", "project_id": "gcpdiag-gke1-aaaa", "location": "europe-west1-b" } }, "timestamp": "2021-11-24T16:35:22.615295Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:23.172680503Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-nuwdobe1byj2", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-98631c84-grp", "project_id": "gcpdiag-gke1-aaaa", "location": "europe-west1-d", "instance_group_manager_id": "6471686162526492481" } }, "timestamp": "2021-11-24T16:35:10.014049Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:10.306123333Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kpc", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-5e5781dd-grp", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "5205754198527039297", "location": "europe-west1-c" } }, "timestamp": "2021-11-24T16:35:08.922507Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693418-5d18b700269e6-19f4d541-4d012584", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:09.484397071Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kou", "resource": { "type": "gce_instance_group_manager", "labels": { "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "3383879657688651622", "location": "europe-west1-c", "instance_group_manager_name": "gke-gke3-default-pool-013fb293-grp" } }, "timestamp": "2021-11-24T16:34:38.479723Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:39.479072691Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9darqs", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west1-b", "instance_group_manager_id": "5404218744580069225", "instance_group_manager_name": "gke-gke3-default-pool-597c9ca2-grp", "project_id": "gcpdiag-gke1-aaaa" } }, "timestamp": "2021-11-24T16:34:37.484721Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:38.168845698Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-31olexd4rpi", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke3-default-pool-c125bae7-grp", "location": "europe-west1-d", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "1403931912127633256" } }, "timestamp": "2021-11-24T16:34:35.389660Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:35.872428070Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } ] } ================================================ FILE: test-data/gke1/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.zone" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_uptime_total_aggregate_mean", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "s" }, { "key": "value_uptime_total_aggregate_count", "valueType": "INT64", "metricKind": "DELTA", "unit": "1" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "mig-tcnm" } ], "pointData": [ { "values": [ { "doubleValue": 2071746 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2021-07-23T08:27:07.010750Z", "endTime": "2021-07-23T08:27:07.010750Z" } }, { "values": [ { "doubleValue": 2071476 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2021-07-23T08:22:07.010750Z", "endTime": "2021-07-23T08:22:07.010750Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "mig-6dlt" } ], "pointData": [ { "values": [ { "doubleValue": 2071745 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2021-07-23T08:27:07.010750Z", "endTime": "2021-07-23T08:27:07.010750Z" } }, { "values": [ { "doubleValue": 2071475 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2021-07-23T08:22:07.010750Z", "endTime": "2021-07-23T08:22:07.010750Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "gce2" } ], "pointData": [ { "values": [ { "doubleValue": 207 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2021-07-23T08:27:07.010750Z", "endTime": "2021-07-23T08:27:07.010750Z" } }, { "values": [ { "doubleValue": 28.5 }, { "int64Value": "2" } ], "timeInterval": { "startTime": "2021-07-23T08:22:07.010750Z", "endTime": "2021-07-23T08:22:07.010750Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "gce1" } ], "pointData": [ { "values": [ { "doubleValue": 3627 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2021-07-23T08:27:07.010750Z", "endTime": "2021-07-23T08:27:07.010750Z" } }, { "values": [ { "doubleValue": 3357 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2021-07-23T08:22:07.010750Z", "endTime": "2021-07-23T08:22:07.010750Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-564e261a-z7th" } ], "pointData": [ { "values": [ { "doubleValue": 2396843 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2021-07-23T08:27:07.010750Z", "endTime": "2021-07-23T08:27:07.010750Z" } }, { "values": [ { "doubleValue": 2396573 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2021-07-23T08:22:07.010750Z", "endTime": "2021-07-23T08:22:07.010750Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-564e261a-gzhv" } ], "pointData": [ { "values": [ { "doubleValue": 2396846 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2021-07-23T08:27:07.010750Z", "endTime": "2021-07-23T08:27:07.010750Z" } }, { "values": [ { "doubleValue": 2396576 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2021-07-23T08:22:07.010750Z", "endTime": "2021-07-23T08:22:07.010750Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-564e261a-dgx7" } ], "pointData": [ { "values": [ { "doubleValue": 2396845 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2021-07-23T08:27:07.010750Z", "endTime": "2021-07-23T08:27:07.010750Z" } }, { "values": [ { "doubleValue": 2396575 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2021-07-23T08:22:07.010750Z", "endTime": "2021-07-23T08:22:07.010750Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-564e261a-2j8p" } ], "pointData": [ { "values": [ { "doubleValue": 2396846 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2021-07-23T08:27:07.010750Z", "endTime": "2021-07-23T08:27:07.010750Z" } }, { "values": [ { "doubleValue": 2396576 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2021-07-23T08:22:07.010750Z", "endTime": "2021-07-23T08:22:07.010750Z" } } ] } ] } ================================================ FILE: test-data/gke1/json-dumps/org-constraint-compute.disableSerialPortAccess.json ================================================ { "booleanPolicy": { "enforced": true }, "constraint": "constraints/compute.disableSerialPortAccess" } ================================================ FILE: test-data/gke1/json-dumps/org-constraint-compute.disableSerialPortLogging.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.disableSerialPortLogging" } ================================================ FILE: test-data/gke1/json-dumps/org-constraint-compute.disableSshInBrowser.json ================================================ { "booleanPolicy": { "enforced": true }, "constraint": "constraints/compute.disableSshInBrowser" } ================================================ FILE: test-data/gke1/json-dumps/org-constraint-compute.requireOsLogin.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireOsLogin" } ================================================ FILE: test-data/gke1/json-dumps/org-constraint-compute.requireShieldedVm.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireShieldedVm" } ================================================ FILE: test-data/gke1/json-dumps/org-constraint-custom.arEnforceImmutableTags.json ================================================ { "constraint": "customConstraints/custom.arEnforceImmutableTags", "booleanPolicy": {} } ================================================ FILE: test-data/gke1/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json ================================================ { "booleanPolicy":{}, "constraint": "constraints/iam.automaticIamGrantsForDefaultServiceAccounts" } ================================================ FILE: test-data/gke1/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/iam.disableCrossProjectServiceAccountUsage" } ================================================ FILE: test-data/gke1/json-dumps/org-constraints.json ================================================ { "constraints": [ { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables serial port access to Compute Engine VMs belonging to the organization, project, or folder where this constraint is set to True. By default, customers can enable serial port access for Compute Engine VMs on a per-VM or per-project basis using metadata attributes. Enforcing this constraint will disable serial port access for Compute Engine VMs, regardless of the metadata attributes.", "displayName": "Disable VM serial port access", "name": "constraints/compute.disableSerialPortAccess" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables serial port logging to Stackdriver from Compute Engine VMs belonging to the organization, project, or folder where this constraint is being enforced. By default, serial port logging for Compute Engine VMs is disabled, and can be selectively enabled on a per-VM or per-project basis using metadata attributes. When enforced, this constraint disables serial port logging for new Compute Engine VMs whenever a new VM is created, as well as preventing users from changing the metadata attribute of any VMs (old or new) to True. Disabling serial port logging can cause certain services that rely on it, such as Google Kubernetes Engine clusters, to not function correctly. Before you enforce this constraint, verify that the products in your project do not rely on serial port logging.", "displayName": "Disable VM serial port logging to Stackdriver", "name": "constraints/compute.disableSerialPortLogging" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables the SSH-in-browser tool in the Cloud Console for VMs that use OS Login and App Engine flexible environment VMs. When enforced, the SSH-in-browser button is disabled. By default, using the SSH-in-browser tool is allowed.", "displayName": "Disable SSH-in-browser", "name": "constraints/compute.disableSshInBrowser" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when set to true, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. By default, the OS Login feature is disabled on Compute Engine projects.GKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.", "displayName": "Require OS Login", "name": "constraints/compute.requireOsLogin" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when set to True, requires that all new Compute Engine VM instances use Shielded disk images with Secure Boot, vTPM, and Integrity Monitoring options enabled. Secure Boot can be disabled after creation, if desired. Existing running instances will continue to work as usual. By default, Shielded VM features do not need to be enabled in order to create Compute Engine VM instances. Shielded VM features add verifiable integrity and exfiltration resistance to your VMs.", "displayName": "Shielded VMs", "name": "constraints/compute.requireShieldedVm" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when enforced, prevents the default App Engine and Compute Engine service accounts that are created in your projects from being automatically granted any IAM role on the project when the accounts are created. By default, these service accounts automatically receive the Editor role when they are created. To learn about default service accounts, see https://cloud.google.com/iam/help/service-accounts/default. To learn which roles to grant instead of the Editor role, see https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.", "displayName": "Disable Automatic IAM Grants for Default Service Accounts", "name": "constraints/iam.automaticIamGrantsForDefaultServiceAccounts" }, { "booleanConstraint": {}, "constraintDefault": "DENY", "description": "When enforced, service accounts can only be deployed (using ServiceAccountUser role) to jobs (vms, functions, etc) running in the same project as the service account.", "displayName": "Disable Cross-Project Service Account Usage", "name": "constraints/iam.disableCrossProjectServiceAccountUsage" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "All new Docker repositories must have tag immutability enabled.", "displayName": "Enforce Immutable Tags", "name": "customConstraints/custom.arEnforceImmutableTags" } ] } ================================================ FILE: test-data/gke1/json-dumps/org-policies.json ================================================ { "policies": [ { "version": 2, "constraint": "constraints/cloudbuild.allowedWorkerPools", "etag": "CNmNp74GEPCmnzw=", "updateTime": "2025-03-06T16:01:29.126342Z", "listPolicy": { "allowedValues": [ "projects/12340004/locations/us-central1/workerPools/test-pool" ] } }, { "constraint": "constraints/compute.skipDefaultNetworkCreation", "etag": "CL2Kp74GENDg7McD", "updateTime": "2025-03-06T15:54:37.955986Z", "booleanPolicy": {} } ] } ================================================ FILE: test-data/gke1/json-dumps/project.json ================================================ { "name": "projects/12340002", "parent": "folders/422810093603", "projectId": "gcpdiag-gke1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - gke1", "createTime": "2021-12-06T10:39:13.610Z", "updateTime": "2021-12-06T10:39:15.558Z", "etag": "NdRtoQbprleONiALgkn2uw==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gke1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340002/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/cloudresourcemanager.googleapis.com", "config": { "name": "cloudresourcemanager.googleapis.com", "title": "Cloud Resource Manager API", "documentation": { "summary": "Creates, reads, and updates metadata for Google Cloud Platform resource containers." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" }, { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] }, { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" is supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/points_count", "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340002" }, { "name": "projects/12340002/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340002" } ] } ================================================ FILE: test-data/gke1/json-dumps/subscriptions.json ================================================ {} ================================================ FILE: test-data/gke1/json-dumps/topics.json ================================================ {} ================================================ FILE: test-data/gke1/project.tf ================================================ /** * Copyright 2021 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. */ terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">= 2.0.3" } google = { source = "hashicorp/google" version = ">= 4.4.0" } google-beta = { source = "hashicorp/google-beta" version = ">= 4.4.0" } } } resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - gke1" project_id = "gcpdiag-gke1-${random_string.project_id_suffix.id}" billing_account = var.billing_account_id org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "container" { project = google_project.project.project_id service = "container.googleapis.com" depends_on = [google_project_service.compute] } resource "google_project_service" "cloudresourcemanager" { project = google_project.project.project_id service = "cloudresourcemanager.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gke1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/gke2/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner ZONE_1 = europe-west10-a REGION_1 = europe-west10 FAKE_PROJECT_ID_SUFFIX = rrrr FAKE_PROJECT_NR = 1234000173 FAKE_ORG_ID = 1111225422 all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-interconnects.json \ json-dumps/compute-migs-$(ZONE_1).json \ json-dumps/compute-migs-empty.json \ json-dumps/compute-disks-$(ZONE_1).json \ json-dumps/compute-disks-empty.json \ json-dumps/compute-igs-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-subnetworks-aggregated.json \ json-dumps/compute-subnetwork-policy.json \ json-dumps/compute-templates.json \ json-dumps/compute-regions.json \ json-dumps/compute-zones.json \ json-dumps/compute-routers-europe-west4.json \ json-dumps/container-clusters.json \ json-dumps/container-server-config-$(REGION_1).json \ json-dumps/container-server-config-$(ZONE_1).json \ json-dumps/iam-policy.json \ json-dumps/iam-roles-custom.json \ json-dumps/iam-roles-predefined-1.json.gz \ json-dumps/iam-roles-predefined-2.json.gz \ json-dumps/iam-roles-get.json \ json-dumps/iam-service-accounts.json \ json-dumps/iam-service-account-policy.json \ json-dumps/logging-entries-1.json \ json-dumps/monitoring-query.json \ json-dumps/project.json \ json-dumps/services.json include ../Makefile.inc # compute.googleapis.com json-dumps/compute-regions.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-zones.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-$(ZONE_1).json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances' \ | $(JSON_CLEANER) instances \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-migs-$(ZONE_1).json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instanceGroupManagers' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-empty.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instances' \ | $(JSON_CLEANER) instances \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-migs-empty.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instanceGroupManagers' \ | $(JSON_CLEANER) instances \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-igs-empty.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instanceGroups' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-project.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)' \ | $(JSON_CLEANER) compute-project \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-network-default.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/default' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-effective-firewalls-default.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/default/getEffectiveFirewalls' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-templates.json: ZONE=$(subst json-dumps/,,$%); \ $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/instanceTemplates' \ | $(JSON_CLEANER) compute-templates \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-subnetwork-policy.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/subnetworks/$(SUBNETWORK_1)/getIamPolicy' \ --header "Content-Type:text/json" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-routers-%.json: REGION=$(subst json-dumps/,,$*); \ $(CURL) -fsS \ "https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$$REGION/routers" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-disks-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/disks' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-disks-empty.json: json-dumps/compute-disks-$(ZONE_EMPTY).json ln -sf $(notdir $<) $@ # cloudresourcemanager.googleapis.com json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # iam.googleapis.com json-dumps/iam-roles-predefined-1.json.gz: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/roles?view=FULL&pageSize=500' \ | $(SED_SUBST_FAKE) \ | gzip -c >$@ json-dumps/iam-roles-predefined-2.json.gz: json-dumps/iam-roles-predefined-1.json.gz $(CURL) -fsS \ 'https://iam.googleapis.com/v1/roles?view=FULL&pageSize=500&pageToken=$(shell zcat json-dumps/iam-roles-predefined-1.json.gz | jq -r '.nextPageToken')' \ | $(SED_SUBST_FAKE) \ | gzip -c >$@ json-dumps/iam-roles-custom.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/roles?view=FULL&pageSize=500' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-roles-get.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/roles/container.nodeServiceAgent' \ | $(SED_SUBST_FAKE) \ | jq '{"roles": [.]}' >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(JSON_CLEANER) service-accounts \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-account-policy.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/$(GKE2_SA):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ # container.googleapis.com json-dumps/container-clusters.json: $(CURL) -fsS \ 'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/clusters' \ | $(JSON_CLEANER) clusters \ | $(SED_SUBST_FAKE) >$@ json-dumps/container-server-config-$(REGION_1).json: $(CURL) -fsS \ 'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/serverConfig' \ | $(SED_SUBST_FAKE) >$@ json-dumps/container-server-config-$(ZONE_1).json: $(CURL) -fsS \ 'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/serverconfig' \ | $(SED_SUBST_FAKE) >$@ # serviceusage.googleapis.com json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ # If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found. define LOGGING_ENTRIES_BODY {"orderBy": "timestamp desc", "filter":"timestamp > \"2024-04-16T00:00:00+00:00\" AND \ timestamp < \"2024-04-17T00:00:00+00:00\" AND resource.type=\"k8s_cluster\" AND \ log_id(\"container.googleapis.com/cluster-autoscaler-visibility\")",\ "projectIds":["${PROJECT_ID}"]} endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS --request POST \ 'https://logging.googleapis.com/v2/entries:list' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '${LOGGING_ENTRIES_BODY}' \ | $(SED_SUBST_FAKE) >$@ define MONITORING_QUERY { \ "query": "fetch consumer_quota \ | metric 'serviceruntime.googleapis.com/quota/exceeded' \ | group_by 1h, [value_exceeded_count_true: count_true(value.exceeded)] \ | within 1d \ " \ } endef export MONITORING_QUERY json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gke2/json-dumps/compute-disks-empty.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/disks" } ================================================ FILE: test-data/gke2/json-dumps/compute-disks-europe-west10-a.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks", "items": [ { "kind": "compute#disk", "id": "7236257982545695066", "creationTimestamp": "2024-04-09T05:08:22.957-07:00", "name": "gke-gcp-cluster-default-pool-82e0c046-8m8b", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-82e0c046-8m8b", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre", "sourceImageId": "8380329917531566231", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/diskTypes/pd-balanced", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "SECURE_BOOT" }, { "type": "SEV_CAPABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2024-04-09T05:08:22.958-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-82e0c046-8m8b" ], "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "europe-west10", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "labelFingerprint": "F5KkOPA8K4w=", "licenseCodes": [ "6880041984096540132", "1001010", "1001003", "166739712233658766" ], "physicalBlockSizeBytes": "4096", "satisfiesPzi": true, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "1694979954220712298", "creationTimestamp": "2024-04-10T05:01:10.021-07:00", "name": "gke-gcp-cluster-default-pool-c7891c09-b4qc", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-b4qc", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre", "sourceImageId": "8380329917531566231", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/diskTypes/pd-balanced", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "SECURE_BOOT" }, { "type": "SEV_CAPABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2024-04-10T05:01:10.021-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-b4qc" ], "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "europe-west10-a", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "labelFingerprint": "SThA_aBnyNs=", "licenseCodes": [ "6880041984096540132", "1001010", "1001003", "166739712233658766" ], "physicalBlockSizeBytes": "4096", "satisfiesPzi": true, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "8808034279930501129", "creationTimestamp": "2024-04-09T04:30:46.825-07:00", "name": "gke-gcp-cluster-default-pool-c7891c09-ck7c", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-ck7c", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre", "sourceImageId": "8380329917531566231", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/diskTypes/pd-balanced", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "SECURE_BOOT" }, { "type": "SEV_CAPABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2024-04-09T04:30:46.825-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-ck7c" ], "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "europe-west10-a", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "labelFingerprint": "SThA_aBnyNs=", "licenseCodes": [ "6880041984096540132", "1001010", "1001003", "166739712233658766" ], "physicalBlockSizeBytes": "4096", "satisfiesPzi": true, "architecture": "X86_64" }, { "kind": "compute#disk", "id": "3727191795301916253", "creationTimestamp": "2024-04-09T04:04:20.364-07:00", "name": "gke-gcp-cluster-default-pool-c7891c09-z2wh", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-z2wh", "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre", "sourceImageId": "8380329917531566231", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/diskTypes/pd-balanced", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "SECURE_BOOT" }, { "type": "SEV_CAPABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2024-04-09T04:04:20.364-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-z2wh" ], "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "europe-west10-a", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "labelFingerprint": "SThA_aBnyNs=", "licenseCodes": [ "6880041984096540132", "1001010", "1001003", "166739712233658766" ], "physicalBlockSizeBytes": "4096", "satisfiesPzi": true, "architecture": "X86_64" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks" } ================================================ FILE: test-data/gke2/json-dumps/compute-disks-europe-west2-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/disks" } ================================================ FILE: test-data/gke2/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "1849345197746858590", "creationTimestamp": "2023-05-22T00:07:29.737-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "4812275889196274033", "creationTimestamp": "2024-04-09T05:07:58.650-07:00", "name": "gke-gcp-cluster-714df7d8-exkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "gke-gcp-cluster-714df7d8-node" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-714df7d8-exkubelet" }, { "kind": "compute#firewall", "id": "6881457288343228785", "creationTimestamp": "2024-04-09T05:07:58.814-07:00", "name": "gke-gcp-cluster-714df7d8-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gcp-cluster-714df7d8-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-714df7d8-vms" }, { "kind": "compute#firewall", "id": "7998732574437970289", "creationTimestamp": "2024-04-09T05:07:58.525-07:00", "name": "gke-gcp-cluster-714df7d8-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 1000, "sourceRanges": [ "10.100.0.0/14" ], "targetTags": [ "gke-gcp-cluster-714df7d8-node" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-714df7d8-all" }, { "kind": "compute#firewall", "id": "7648164098059312759", "creationTimestamp": "2024-04-09T04:03:52.923-07:00", "name": "gke-gcp-cluster-1d08860d-exkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "gke-gcp-cluster-1d08860d-node" ], "denied": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-1d08860d-exkubelet" }, { "kind": "compute#firewall", "id": "2720921107203399287", "creationTimestamp": "2024-04-09T04:03:52.816-07:00", "name": "gke-gcp-cluster-1d08860d-all", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 1000, "sourceRanges": [ "10.40.0.0/14" ], "targetTags": [ "gke-gcp-cluster-1d08860d-node" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" }, { "IPProtocol": "esp" }, { "IPProtocol": "ah" }, { "IPProtocol": "sctp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-1d08860d-all" }, { "kind": "compute#firewall", "id": "8797693566344797814", "creationTimestamp": "2024-04-09T04:03:53.047-07:00", "name": "gke-gcp-cluster-1d08860d-vms", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 1000, "sourceRanges": [ "10.128.0.0/9" ], "targetTags": [ "gke-gcp-cluster-1d08860d-node" ], "allowed": [ { "IPProtocol": "icmp" }, { "IPProtocol": "tcp", "ports": [ "1-65535" ] }, { "IPProtocol": "udp", "ports": [ "1-65535" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-1d08860d-vms" }, { "kind": "compute#firewall", "id": "3236034084249050743", "creationTimestamp": "2024-04-09T04:03:52.890-07:00", "name": "gke-gcp-cluster-1d08860d-inkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 999, "sourceRanges": [ "10.40.0.0/14" ], "sourceTags": [ "gke-gcp-cluster-1d08860d-node" ], "targetTags": [ "gke-gcp-cluster-1d08860d-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-1d08860d-inkubelet" }, { "kind": "compute#firewall", "id": "3476414139596188254", "creationTimestamp": "2023-05-22T00:07:29.620-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "5841179551740635742", "creationTimestamp": "2023-05-22T00:07:29.796-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/default-allow-icmp" }, { "kind": "compute#firewall", "id": "1242951362329219441", "creationTimestamp": "2024-04-09T05:07:58.451-07:00", "name": "gke-gcp-cluster-714df7d8-inkubelet", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 999, "sourceRanges": [ "10.100.0.0/14" ], "sourceTags": [ "gke-gcp-cluster-714df7d8-node" ], "targetTags": [ "gke-gcp-cluster-714df7d8-node" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "10255" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-714df7d8-inkubelet" }, { "kind": "compute#firewall", "id": "5377060661278429196", "creationTimestamp": "2024-01-05T03:58:28.029-08:00", "name": "allow-http", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "http-server" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/allow-http" }, { "kind": "compute#firewall", "id": "1978749860840909406", "creationTimestamp": "2023-05-22T00:07:29.679-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/default-allow-ssh" } ], "firewallPolicys": [ { "name": "902824820698", "type": "HIERARCHY", "shortName": "default-firewall-policy", "displayName": "default-firewall-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 0, "match": { "srcIpRanges": [ "34.168.226.0/26", "34.102.114.64/26", "34.16.224.64/26", "34.48.81.64/26", "34.168.146.160/27", "34.16.224.160/27", "34.82.66.0/24", "34.82.90.0/24", "34.82.98.0/24", "34.82.160.0/24", "34.82.166.128/25" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 1, "match": { "destIpRanges": [ "34.83.160.25/32", "34.125.160.60/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 600, "match": { "srcIpRanges": [ "35.235.240.0/20" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "22", "3389", "5900-5901" ] } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 601, "match": { "srcIpRanges": [ "35.191.0.0/16", "130.211.0.0/22", "209.85.152.0/22", "209.85.204.0/22", "169.254.169.254", "108.170.220.0/23" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 602, "match": { "srcIpRanges": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10", "240.0.0.0/4" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 603, "match": { "srcIpRanges": [ "35.199.192.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "53" ] }, { "ipProtocol": "udp", "ports": [ "53" ] } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 604, "match": { "srcIpRanges": [ "107.178.230.64/26", "35.199.224.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "667" ] }, { "ipProtocol": "udp", "ports": [ "665-666" ] }, { "ipProtocol": "icmp" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 700, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "deny", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483645, "match": { "srcIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false } ] } ] } ================================================ FILE: test-data/gke2/json-dumps/compute-igs-empty.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroups", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroups" } ================================================ FILE: test-data/gke2/json-dumps/compute-igs-europe-west2-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroups", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroups" } ================================================ FILE: test-data/gke2/json-dumps/compute-instances-empty.json ================================================ { "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instances" } ================================================ FILE: test-data/gke2/json-dumps/compute-instances-europe-west10-a.json ================================================ { "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances", "items": [ { "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-04-09T05:08:22.952-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "SECURE_BOOT" }, { "type": "SEV_CAPABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-82e0c046-8m8b", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "5597139398278287706", "kind": "compute#instance", "labelFingerprint": "T-SJLQ2PEYg=", "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west10", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "lastStartTimestamp": "2024-04-09T05:08:28.588-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/1234000173/global/instanceTemplates/gke-gcp-cluster-default-pool-82e0c046" }, { "key": "created-by", "value": "projects/1234000173/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-82e0c046-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.110.80.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.214.0.8\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gcp-cluster" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "cluster-uid", "value": "714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4" }, { "key": "cluster-location", "value": "europe-west10" } ], "kind": "compute#metadata" }, "name": "gke-gcp-cluster-default-pool-82e0c046-8m8b", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.32.31.119", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "10.100.1.0/24", "subnetworkRangeName": "gke-gcp-cluster-pods-714df7d8" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "networkIP": "10.214.0.10", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-82e0c046-8m8b", "serviceAccounts": [ { "email": "1234000173-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gcp-cluster-714df7d8-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a" }, { "cpuPlatform": "Intel Cascade Lake", "creationTimestamp": "2024-04-10T05:01:10.015-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "SECURE_BOOT" }, { "type": "SEV_CAPABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-b4qc", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3775050014586028394", "kind": "compute#instance", "labelFingerprint": "346MPQKPPes=", "labels": { "goog-gke-cost-management": "", "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west10-a", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "lastStartTimestamp": "2024-04-10T05:01:15.002-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/machineTypes/n2-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/1234000173/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09" }, { "key": "created-by", "value": "projects/1234000173/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.108.192.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 70m\n ephemeral-storage: 41Gi\n memory: 1819Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.214.0.2\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gcp-cluster" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "cluster-uid", "value": "1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8" }, { "key": "cluster-location", "value": "europe-west10-a" } ], "kind": "compute#metadata" }, "name": "gke-gcp-cluster-default-pool-c7891c09-b4qc", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.32.67.110", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "10.40.2.0/24", "subnetworkRangeName": "gke-gcp-cluster-pods-1d08860d" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "networkIP": "10.214.0.21", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-b4qc", "serviceAccounts": [ { "email": "1234000173-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gcp-cluster-1d08860d-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a" }, { "cpuPlatform": "Intel Cascade Lake", "creationTimestamp": "2024-04-09T04:30:46.820-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "SECURE_BOOT" }, { "type": "SEV_CAPABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-ck7c", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "5977173652409980937", "kind": "compute#instance", "labelFingerprint": "346MPQKPPes=", "labels": { "goog-gke-cost-management": "", "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west10-a", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "lastStartTimestamp": "2024-04-09T04:30:51.968-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/machineTypes/n2-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/1234000173/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09" }, { "key": "created-by", "value": "projects/1234000173/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.108.192.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 70m\n ephemeral-storage: 41Gi\n memory: 1819Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.214.0.2\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gcp-cluster" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "cluster-uid", "value": "1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8" }, { "key": "cluster-location", "value": "europe-west10-a" } ], "kind": "compute#metadata" }, "name": "gke-gcp-cluster-default-pool-c7891c09-ck7c", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.32.42.247", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "10.40.1.0/24", "subnetworkRangeName": "gke-gcp-cluster-pods-1d08860d" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "networkIP": "10.214.0.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-ck7c", "serviceAccounts": [ { "email": "1234000173-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gcp-cluster-1d08860d-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a" }, { "cpuPlatform": "Intel Cascade Lake", "creationTimestamp": "2024-04-09T04:04:20.359-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "100", "guestOsFeatures": [ { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "SECURE_BOOT" }, { "type": "SEV_CAPABLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos" ], "mode": "READ_WRITE", "shieldedInstanceInitialState": { "dbs": [ { "content": "REDACTED", "fileType": "X509" } ], "dbxs": [ { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" }, { "content": "REDACTED", "fileType": "X509" } ], "keks": [ { "content": "REDACTED", "fileType": "X509" } ], "pk": { "content": "REDACTED", "fileType": "X509" } }, "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-z2wh", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1712930190213553757", "kind": "compute#instance", "labelFingerprint": "346MPQKPPes=", "labels": { "goog-gke-cost-management": "", "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west10-a", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "lastStartTimestamp": "2024-04-09T04:04:24.970-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/machineTypes/n2-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/1234000173/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09" }, { "key": "created-by", "value": "projects/1234000173/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n2,cloud.google.com/private-node=false" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.108.192.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 70m\n ephemeral-storage: 41Gi\n memory: 1819Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.214.0.2\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gcp-cluster" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "cluster-uid", "value": "1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8" }, { "key": "cluster-location", "value": "europe-west10-a" } ], "kind": "compute#metadata" }, "name": "gke-gcp-cluster-default-pool-c7891c09-z2wh", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.32.28.9", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "10.40.0.0/24", "subnetworkRangeName": "gke-gcp-cluster-pods-1d08860d" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "networkIP": "10.214.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-z2wh", "serviceAccounts": [ { "email": "1234000173-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "gke-gcp-cluster-1d08860d-node" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances" } ================================================ FILE: test-data/gke2/json-dumps/compute-instances-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instances" } ================================================ FILE: test-data/gke2/json-dumps/compute-interconnects.json ================================================ ================================================ FILE: test-data/gke2/json-dumps/compute-migs-empty.json ================================================ { "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroupManagers" } ================================================ FILE: test-data/gke2/json-dumps/compute-migs-europe-west10-a.json ================================================ { "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers", "items": [ { "kind": "compute#instanceGroupManager", "id": "4388285445108699464", "creationTimestamp": "2024-04-09T05:08:07.388-07:00", "name": "gke-gcp-cluster-default-pool-82e0c046-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-82e0c046", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-82e0c046", "targetSize": { "calculated": 1 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroups/gke-gcp-cluster-default-pool-82e0c046-grp", "baseInstanceName": "gke-gcp-cluster-default-pool-82e0c046", "fingerprint": "uvMBzl8LNAk=", "currentActions": { "none": 1, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 1, "listManagedInstancesResults": "PAGELESS", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-82e0c046-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "NO", "defaultActionOnFailure": "REPAIR" } }, { "kind": "compute#instanceGroupManager", "id": "4504168043621424718", "creationTimestamp": "2024-04-09T04:04:01.286-07:00", "name": "gke-gcp-cluster-default-pool-c7891c09-grp", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a", "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09", "versions": [ { "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09", "targetSize": { "calculated": 3 } } ], "instanceGroup": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroups/gke-gcp-cluster-default-pool-c7891c09-grp", "baseInstanceName": "gke-gcp-cluster-default-pool-c7891c09", "fingerprint": "77OP2eJ9NzY=", "currentActions": { "none": 3, "creating": 0, "creatingWithoutRetries": 0, "verifying": 0, "recreating": 0, "deleting": 0, "abandoning": 0, "restarting": 0, "refreshing": 0, "suspending": 0, "resuming": 0, "stopping": 0, "starting": 0 }, "status": { "isStable": true, "allInstancesConfig": { "effective": true }, "versionTarget": { "isReached": true }, "stateful": { "hasStatefulConfig": false, "perInstanceConfigs": { "allEffective": true } } }, "targetSize": 3, "listManagedInstancesResults": "PAGELESS", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp", "updatePolicy": { "type": "OPPORTUNISTIC", "minimalAction": "REPLACE", "maxSurge": { "fixed": 1, "calculated": 1 }, "maxUnavailable": { "fixed": 1, "calculated": 1 }, "replacementMethod": "SUBSTITUTE" }, "instanceLifecyclePolicy": { "forceUpdateOnRepair": "NO", "defaultActionOnFailure": "REPAIR" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gke2/json-dumps/compute-migs-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroupManagers", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroupManagers", "kind": "compute#instanceGroupManagerList" } ================================================ FILE: test-data/gke2/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "366075016552819302", "creationTimestamp": "2023-05-22T00:06:49.677-07:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/366075016552819302", "autoCreateSubnetworks": true, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3/subnetworks/default" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/gke2/json-dumps/compute-project.json ================================================ { "cloudArmorTier": "CA_STANDARD", "commonInstanceMetadata": { "fingerprint": "yMdKxUjmS4Q=", "items": [ { "key": "ssh-keys", "value": "rdoroschevici:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDL/PUtu9kxt0YfrroKogUgLPEPcKmA1oGxajew1nUrMYksWj4VLy7C8xpFAHDor3wUq5VAWq/tNWJGEW+OpjLfgJm/WjKR1bwTRvhC6paWOXZmdfjzE1NJM6gP/6xSFETUGj1d2GkDBn4vrXuFR1JSRUefsFXvmTnhY5YfBlJxVUOt6l61UcV6/pcmC2gmkSvWHbGMyJgmXpiogazF3v0YNWNuxuSh3U+5QzRIpPnEnIbKQp5WbxRYeQkWnIQA7qqA9qzgJq76f0wSAk2xPGL1eMzmv4Kss849uzysx1UTe4L9ir5XwYeMB5Iurel8zsDQF37EikOAXQFgbqvjx0D6SwoPVtVr0ikU5aRN78fLMp0KAlzBSNRhmtBOc8p3+m2epPr88C+PD3yoOlRP/qKP+M+RpvF0l96XvwCvELAsGQR592HSjdxZZ6LCgU+rFozG3HZ21yfAkFJJ3dcVhmCPb7vjcFeSUpHCnfSG3Wz5KNdUzv3DdIv/0HUVys5fzqU= rdoroschevici@cs-1054127041526-default\nroot:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDL/PUtu9kxt0YfrroKogUgLPEPcKmA1oGxajew1nUrMYksWj4VLy7C8xpFAHDor3wUq5VAWq/tNWJGEW+OpjLfgJm/WjKR1bwTRvhC6paWOXZmdfjzE1NJM6gP/6xSFETUGj1d2GkDBn4vrXuFR1JSRUefsFXvmTnhY5YfBlJxVUOt6l61UcV6/pcmC2gmkSvWHbGMyJgmXpiogazF3v0YNWNuxuSh3U+5QzRIpPnEnIbKQp5WbxRYeQkWnIQA7qqA9qzgJq76f0wSAk2xPGL1eMzmv4Kss849uzysx1UTe4L9ir5XwYeMB5Iurel8zsDQF37EikOAXQFgbqvjx0D6SwoPVtVr0ikU5aRN78fLMp0KAlzBSNRhmtBOc8p3+m2epPr88C+PD3yoOlRP/qKP+M+RpvF0l96XvwCvELAsGQR592HSjdxZZ6LCgU+rFozG3HZ21yfAkFJJ3dcVhmCPb7vjcFeSUpHCnfSG3Wz5KNdUzv3DdIv/0HUVys5fzqU= rdoroschevici@cs-1054127041526-default" }, { "key": "gke-gcp-cluster-1d08860d-secondary-ranges", "value": "pods:default:default:gke-gcp-cluster-pods-1d08860d,services:default:default:gke-gcp-cluster-services-1d08860d" }, { "key": "gke-gcp-cluster-714df7d8-secondary-ranges", "value": "services:default:default:gke-gcp-cluster-services-714df7d8,pods:default:default:gke-gcp-cluster-pods-714df7d8" } ], "kind": "compute#metadata" }, "creationTimestamp": "2023-05-22T00:06:43.088-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "1234000173-compute@developer.gserviceaccount.com", "id": "6891998134554503789", "kind": "compute#project", "name": "gcpdiag-gke-cluster-autoscaler-rrrr", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 13 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 0 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 1000, "metric": "HEALTH_CHECKS", "usage": 0 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 4 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 0 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES", "usage": 0 }, { "limit": 750, "metric": "GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr", "vmDnsSetting": "GLOBAL_DEFAULT", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/gke2/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions", "items": [ { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3", "supportsPzs": false }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 14 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 1300 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 10 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 16 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 13 }, { "metric": "INSTANCES", "limit": 6000, "usage": 13 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 1 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 1 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6", "supportsPzs": false }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 5, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3", "supportsPzs": false }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 20, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions" } ================================================ FILE: test-data/gke2/json-dumps/compute-routers-europe-west4.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4/routers", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4/routers" } ================================================ FILE: test-data/gke2/json-dumps/compute-subnetwork-policy.json ================================================ ================================================ FILE: test-data/gke2/json-dumps/compute-subnetworks-aggregated.json ================================================ { "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/aggregated/subnetworks", "items": { "regions/africa-south1": { "subnetworks": [ { "creationTimestamp": "2023-11-09T23:52:02.807-08:00", "fingerprint": "4VSv8H1H1lE=", "gatewayAddress": "10.218.0.1", "id": "673487854833262541", "ipCidrRange": "10.218.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.285-07:00", "fingerprint": "WcIGvkdYbJI=", "gatewayAddress": "10.140.0.1", "id": "7568045662190086781", "ipCidrRange": "10.140.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-east2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.436-07:00", "fingerprint": "L0EfUsthWHk=", "gatewayAddress": "10.170.0.1", "id": "8406943145505761917", "ipCidrRange": "10.170.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.155-07:00", "fingerprint": "VShMuLeTwio=", "gatewayAddress": "10.146.0.1", "id": "5786172346507635325", "ipCidrRange": "10.146.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.225-07:00", "fingerprint": "9pjY364j_cU=", "gatewayAddress": "10.174.0.1", "id": "7497066646109334141", "ipCidrRange": "10.174.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-northeast3": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.338-07:00", "fingerprint": "Ffkfa7eYmeo=", "gatewayAddress": "10.178.0.1", "id": "7192919653734591101", "ipCidrRange": "10.178.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:59.707-07:00", "fingerprint": "B45OPn2Buyw=", "gatewayAddress": "10.160.0.1", "id": "2613108967022701180", "ipCidrRange": "10.160.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-south2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:59.373-07:00", "fingerprint": "35s09c20cV0=", "gatewayAddress": "10.190.0.1", "id": "7989961894771731068", "ipCidrRange": "10.190.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.785-07:00", "fingerprint": "sWTfb8Q0Nd4=", "gatewayAddress": "10.148.0.1", "id": "5711462206437501565", "ipCidrRange": "10.148.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/asia-southeast2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.995-07:00", "fingerprint": "7k-YQ5Ovu-8=", "gatewayAddress": "10.184.0.1", "id": "2474765575042542205", "ipCidrRange": "10.184.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:59.310-07:00", "fingerprint": "08dVKgSafnI=", "gatewayAddress": "10.152.0.1", "id": "6937579531545258620", "ipCidrRange": "10.152.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/australia-southeast2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.795-07:00", "fingerprint": "oBTkqlK7Fcs=", "gatewayAddress": "10.192.0.1", "id": "1408639960713964157", "ipCidrRange": "10.192.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-central2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.785-07:00", "fingerprint": "zw_hkLZSOJI=", "gatewayAddress": "10.186.0.1", "id": "1077978447298865790", "ipCidrRange": "10.186.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-north1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.037-07:00", "fingerprint": "80uA2JRBgYo=", "gatewayAddress": "10.166.0.1", "id": "2809449870791191165", "ipCidrRange": "10.166.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-southwest1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.190-07:00", "fingerprint": "NNPblI1jl5o=", "gatewayAddress": "10.204.0.1", "id": "2215376217816083070", "ipCidrRange": "10.204.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.112-07:00", "fingerprint": "rKu-QZ58MyY=", "gatewayAddress": "10.132.0.1", "id": "723826645345413758", "ipCidrRange": "10.132.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west10": { "subnetworks": [ { "creationTimestamp": "2023-06-29T10:57:35.308-07:00", "fingerprint": "HwI0WItrEcM=", "gatewayAddress": "10.214.0.1", "id": "6322359151811918048", "ipCidrRange": "10.214.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10", "secondaryIpRanges": [ { "ipCidrRange": "10.40.0.0/14", "rangeName": "gke-gcp-cluster-pods-1d08860d", "reservedInternalRange": "https://networkconnectivity.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/global/internalRanges/gke-gcp-cluster-pods-1d08860d" }, { "ipCidrRange": "10.108.192.0/20", "rangeName": "gke-gcp-cluster-services-1d08860d", "reservedInternalRange": "https://networkconnectivity.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/global/internalRanges/gke-gcp-cluster-services-1d08860d" }, { "ipCidrRange": "10.100.0.0/14", "rangeName": "gke-gcp-cluster-pods-714df7d8", "reservedInternalRange": "https://networkconnectivity.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/global/internalRanges/gke-gcp-cluster-pods-714df7d8" }, { "ipCidrRange": "10.110.80.0/20", "rangeName": "gke-gcp-cluster-services-714df7d8", "reservedInternalRange": "https://networkconnectivity.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/global/internalRanges/gke-gcp-cluster-services-714df7d8" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west12": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.795-07:00", "fingerprint": "HyQJqn3kjSk=", "gatewayAddress": "10.210.0.1", "id": "7360532775390587518", "ipCidrRange": "10.210.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.196-07:00", "fingerprint": "9DCzARTgL5o=", "gatewayAddress": "10.154.0.1", "id": "2308300210381957758", "ipCidrRange": "10.154.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west3": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.677-07:00", "fingerprint": "CXU9NWt0mK4=", "gatewayAddress": "10.156.0.1", "id": "7671705028591528574", "ipCidrRange": "10.156.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west4": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.691-07:00", "fingerprint": "CK3vcBW1_KQ=", "gatewayAddress": "10.164.0.1", "id": "5418214698598705790", "ipCidrRange": "10.164.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west6": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.713-07:00", "fingerprint": "MQ9geHGNqEg=", "gatewayAddress": "10.172.0.1", "id": "382151822171089534", "ipCidrRange": "10.172.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west8": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.768-07:00", "fingerprint": "2K_gL14tmvo=", "gatewayAddress": "10.198.0.1", "id": "3183935100190894718", "ipCidrRange": "10.198.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/europe-west9": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.615-07:00", "fingerprint": "Y7pYVq5lePM=", "gatewayAddress": "10.200.0.1", "id": "1534621049541798526", "ipCidrRange": "10.200.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-central1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.482-07:00", "fingerprint": "6y0p9ptuH8w=", "gatewayAddress": "10.212.0.1", "id": "2502464596523526781", "ipCidrRange": "10.212.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-central2": { "subnetworks": [ { "creationTimestamp": "2023-09-19T08:38:42.393-07:00", "fingerprint": "YS907XyPIgQ=", "gatewayAddress": "10.216.0.1", "id": "3967899440704159341", "ipCidrRange": "10.216.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/me-west1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.047-07:00", "fingerprint": "0gEAcJTlZyk=", "gatewayAddress": "10.208.0.1", "id": "8633821816504625789", "ipCidrRange": "10.208.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.455-07:00", "fingerprint": "7UaO_Av4mwY=", "gatewayAddress": "10.162.0.1", "id": "6752088844742863486", "ipCidrRange": "10.162.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/northamerica-northeast2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.183-07:00", "fingerprint": "9FoebQ7DjTA=", "gatewayAddress": "10.188.0.1", "id": "3529922439897590398", "ipCidrRange": "10.188.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-east1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.519-07:00", "fingerprint": "fk_3Vjsdn5Y=", "gatewayAddress": "10.158.0.1", "id": "936347794724530813", "ipCidrRange": "10.158.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/southamerica-west1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:58.049-07:00", "fingerprint": "2NleeFOtqnY=", "gatewayAddress": "10.194.0.1", "id": "1775999955333720701", "ipCidrRange": "10.194.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-central1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.009-07:00", "fingerprint": "pLUyQdHdyB8=", "gatewayAddress": "10.128.0.1", "id": "1675478041067170430", "ipCidrRange": "10.128.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:56.955-07:00", "fingerprint": "_cYESLbgvfw=", "gatewayAddress": "10.142.0.1", "id": "370369824935029375", "ipCidrRange": "10.142.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east4": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.096-07:00", "fingerprint": "kb4FaBPcmVo=", "gatewayAddress": "10.150.0.1", "id": "3506313880844806782", "ipCidrRange": "10.150.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east5": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.225-07:00", "fingerprint": "fNs1wcyiH1U=", "gatewayAddress": "10.202.0.1", "id": "2258599725005974142", "ipCidrRange": "10.202.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-east7": { "subnetworks": [ { "creationTimestamp": "2023-05-22T17:06:37.584-07:00", "fingerprint": "c4xUfWHOO30=", "gatewayAddress": "10.196.0.1", "id": "5645870084367957346", "ipCidrRange": "10.196.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east7", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east7/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-south1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.211-07:00", "fingerprint": "9QmgcF7dz30=", "gatewayAddress": "10.206.0.1", "id": "8521904271670028926", "ipCidrRange": "10.206.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west1": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.513-07:00", "fingerprint": "7ca57iXVJFY=", "gatewayAddress": "10.138.0.1", "id": "5152948421657012862", "ipCidrRange": "10.138.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": true, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west2": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.634-07:00", "fingerprint": "6O1DqoZGA0k=", "gatewayAddress": "10.168.0.1", "id": "1831725790199720574", "ipCidrRange": "10.168.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west3": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.386-07:00", "fingerprint": "BzGlp8r_xWo=", "gatewayAddress": "10.180.0.1", "id": "864414196392438398", "ipCidrRange": "10.180.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west4": { "subnetworks": [ { "creationTimestamp": "2023-05-22T00:06:57.607-07:00", "fingerprint": "YVpv95djrGA=", "gatewayAddress": "10.182.0.1", "id": "4328457199249959550", "ipCidrRange": "10.182.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "privateIpv6GoogleAccess": "DISABLE_GOOGLE_ACCESS", "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4/subnetworks/default", "stackType": "IPV4_ONLY" } ] }, "regions/us-west8": { "subnetworks": [ { "creationTimestamp": "2023-11-16T13:27:45.680-08:00", "fingerprint": "Q3c9r2xwLzc=", "gatewayAddress": "10.220.0.1", "id": "9169510117869828030", "ipCidrRange": "10.220.0.0/20", "kind": "compute#subnetwork", "name": "default", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "privateIpGoogleAccess": false, "purpose": "PRIVATE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west8/subnetworks/default", "stackType": "IPV4_ONLY" } ] } }, "kind": "compute#subnetworkAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/aggregated/subnetworks" } ================================================ FILE: test-data/gke2/json-dumps/compute-templates.json ================================================ { "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates", "items": [ { "creationTimestamp": "2023-10-16T03:21:34.546-07:00", "description": "", "id": "5089088979601502273", "kind": "compute#instanceTemplate", "name": "gke-bg-test-default-pool-72c8f044", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "us-central1-c", "goog-k8s-cluster-name": "bg-test", "goog-k8s-node-pool-name": "default-pool" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-gke-cloud/global/images/ubuntu-gke-2204-1-27-v20230619" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "us-central1-c", "goog-k8s-cluster-name": "bg-test", "goog-k8s-node-pool-name": "default-pool" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.104.0.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-location", "value": "us-central1-c" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=ubuntu,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "cluster-name", "value": "bg-test" }, { "key": "cluster-uid", "value": "75a5fc089be44ed6baff77091e6250b04cdda54d0f06443a86233ccc51a97d22" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.128.0.19\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-bg-test-pods-75a5fc08" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-bg-test-75a5fc08-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-bg-test-default-pool-72c8f044" }, { "creationTimestamp": "2023-10-16T03:21:42.827-07:00", "description": "", "id": "8606936081453068377", "kind": "compute#instanceTemplate", "name": "gke-bg-test2-default-pool-5ffdc354", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "us-central1-c", "goog-k8s-cluster-name": "bg-test2", "goog-k8s-node-pool-name": "default-pool" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-gke-cloud/global/images/ubuntu-gke-2204-1-27-v20230619" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "us-central1-c", "goog-k8s-cluster-name": "bg-test2", "goog-k8s-node-pool-name": "default-pool" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "cluster-location", "value": "us-central1-c" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.40.0.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.128.0.53\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "bg-test2" }, { "key": "cluster-uid", "value": "8a344011c4fb444fa7e73f4bdd084768a05887e488d541fc96ecbaf35e4e7cdf" }, { "key": "user-data", "value": "REDACTED" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=ubuntu,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "serial-port-logging-enable", "value": "true" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-bg-test2-pods-8a344011" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-bg-test2-8a344011-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-bg-test2-default-pool-5ffdc354" }, { "creationTimestamp": "2023-10-13T07:52:33.084-07:00", "description": "", "id": "2960142015314323294", "kind": "compute#instanceTemplate", "name": "gke-blue-green-128-default-pool-999a27c3", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "us-central1-c", "goog-k8s-cluster-name": "blue-green-128", "goog-k8s-node-pool-name": "default-pool" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-gke-cloud/global/images/ubuntu-gke-2204-1-28-v20230919" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "us-central1-c", "goog-k8s-cluster-name": "blue-green-128", "goog-k8s-node-pool-name": "default-pool" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "cluster-uid", "value": "26fa20aacd804d428d230ab635aeb19a98b4e089b60c47869d1b4e515a4ff69a" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.120.0.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n DisableKubeletCloudCredentialProviders: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=ubuntu,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.128.0.40\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-name", "value": "blue-green-128" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "cluster-location", "value": "us-central1-c" }, { "key": "user-data", "value": "REDACTED" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-blue-green-128-pods-26fa20aa" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-blue-green-128-26fa20aa-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-blue-green-128-default-pool-999a27c3" }, { "creationTimestamp": "2023-10-12T05:54:00.148-07:00", "description": "", "id": "5727513216495014535", "kind": "compute#instanceTemplate", "name": "gke-blue-green-test-default-pool-c8ab4438", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "us-central1-c", "goog-k8s-cluster-name": "blue-green-test", "goog-k8s-node-pool-name": "default-pool" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-gke-cloud/global/images/ubuntu-gke-2204-1-27-v20230619" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "us-central1-c", "goog-k8s-cluster-name": "blue-green-test", "goog-k8s-node-pool-name": "default-pool" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "cluster-location", "value": "us-central1-c" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-name", "value": "blue-green-test" }, { "key": "cluster-uid", "value": "626e851dde8c47159b5d797c8f9dfb29487996073dc244bb868a88770c47500a" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.96.0.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.128.0.15\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=ubuntu,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-blue-green-test-pods-626e851d" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-blue-green-test-626e851d-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-blue-green-test-default-pool-c8ab4438" }, { "creationTimestamp": "2024-04-09T05:08:01.582-07:00", "description": "", "id": "6024509272958210382", "kind": "compute#instanceTemplate", "name": "gke-gcp-cluster-default-pool-2b1e5c3e", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "europe-west10", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west10", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "serial-port-logging-enable", "value": "true" }, { "key": "cluster-name", "value": "gcp-cluster" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.110.80.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "cluster-uid", "value": "714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.214.0.8\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "cluster-location", "value": "europe-west10" }, { "key": "configure-sh", "value": "REDACTED" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-gcp-cluster-pods-714df7d8" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gcp-cluster-714df7d8-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-2b1e5c3e" }, { "creationTimestamp": "2024-04-09T05:08:02.392-07:00", "description": "", "id": "2638761677070831950", "kind": "compute#instanceTemplate", "name": "gke-gcp-cluster-default-pool-82e0c046", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "europe-west10", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west10", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.110.80.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "cluster-location", "value": "europe-west10" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.214.0.8\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "user-data", "value": "REDACTED" }, { "key": "cluster-uid", "value": "714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "cluster-name", "value": "gcp-cluster" }, { "key": "configure-sh", "value": "REDACTED" }, { "key": "kube-rrrr", "value": "REDACTED" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-gcp-cluster-pods-714df7d8" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gcp-cluster-714df7d8-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-82e0c046" }, { "creationTimestamp": "2024-04-09T05:08:02.094-07:00", "description": "", "id": "297262158603391310", "kind": "compute#instanceTemplate", "name": "gke-gcp-cluster-default-pool-a66c21d9", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "europe-west10", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west10", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "machineType": "e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "gci-metrics-enabled", "value": "true" }, { "key": "cluster-uid", "value": "714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4" }, { "key": "cluster-location", "value": "europe-west10" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false" }, { "key": "user-data", "value": "REDACTED" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "cluster-name", "value": "gcp-cluster" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.214.0.8\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.110.80.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 1060m\n ephemeral-storage: 41Gi\n memory: 1019Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "configure-sh", "value": "REDACTED" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-gcp-cluster-pods-714df7d8" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gcp-cluster-714df7d8-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-a66c21d9" }, { "creationTimestamp": "2024-04-09T04:03:55.911-07:00", "description": "", "id": "398974435940933236", "kind": "compute#instanceTemplate", "name": "gke-gcp-cluster-default-pool-c7891c09", "properties": { "disks": [ { "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "index": 0, "initializeParams": { "diskSizeGb": "100", "diskType": "pd-balanced", "labels": { "goog-gke-node": "", "goog-gke-volume": "", "goog-k8s-cluster-location": "europe-west10-a", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "sourceImage": "https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre" }, "kind": "compute#attachedDisk", "mode": "READ_WRITE", "type": "PERSISTENT" } ], "labels": { "goog-gke-node": "", "goog-k8s-cluster-location": "europe-west10-a", "goog-k8s-cluster-name": "gcp-cluster", "goog-k8s-node-pool-name": "default-pool" }, "machineType": "n2-standard-2", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "configure-sh", "value": "REDACTED" }, { "key": "kubelet-config", "value": "apiVersion: kubelet.config.k8s.io/v1beta1\nauthentication:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n x509:\n clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\nauthorization:\n mode: Webhook\ncgroupRoot: /\nclusterDNS:\n- 10.108.192.10\nclusterDomain: cluster.local\nenableDebuggingHandlers: true\nevictionHard:\n memory.available: 100Mi\n nodefs.available: 10%\n nodefs.inodesFree: 5%\n pid.available: 10%\nfeatureGates:\n CSIMigrationGCE: true\n ExecProbeTimeout: false\n InTreePluginAWSUnregister: true\n InTreePluginAzureDiskUnregister: true\n InTreePluginvSphereUnregister: true\n RotateKubeletServerCertificate: true\nkernelMemcgNotification: true\nkind: KubeletConfiguration\nkubeReserved:\n cpu: 70m\n ephemeral-storage: 41Gi\n memory: 1819Mi\nmaxParallelImagePulls: 3\nreadOnlyPort: 10255\nserializeImagePulls: false\nserverTLSBootstrap: true\nstaticPodPath: /etc/kubernetes/manifests\n" }, { "key": "disable-legacy-endpoints", "value": "true" }, { "key": "google-compute-enable-pcid", "value": "true" }, { "key": "kube-labels", "value": "cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n2,cloud.google.com/private-node=false" }, { "key": "gci-metrics-enabled", "value": "true" }, { "key": "cluster-location", "value": "europe-west10-a" }, { "key": "kube-rrrr", "value": "REDACTED" }, { "key": "kubeconfig", "value": "apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: https://10.214.0.2\n certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\n name: default-cluster\ncontexts:\n- context:\n cluster: default-cluster\n namespace: default\n user: exec-plugin-auth\n name: default-context\ncurrent-context: default-context\nusers:\n- name: exec-plugin-auth\n user:\n exec:\n apiVersion: \"client.authentication.k8s.io/v1beta1\"\n command: '/home/kubernetes/bin/gke-exec-auth-plugin'\n args: [\"--cache-dir\", '/var/lib/kubelet/pki/']\n" }, { "key": "cluster-name", "value": "gcp-cluster" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "gci-update-strategy", "value": "update_disabled" }, { "key": "user-data", "value": "REDACTED" }, { "key": "cluster-uid", "value": "1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8" } ], "kind": "compute#metadata" }, "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "aliasIpRanges": [ { "ipCidrRange": "/24", "subnetworkRangeName": "gke-gcp-cluster-pods-1d08860d" } ], "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "DEFAULT" }, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "tags": { "items": [ "gke-gcp-cluster-1d08860d-node" ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09" } ], "kind": "compute#instanceTemplateList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates" } ================================================ FILE: test-data/gke2/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-f", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2611", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-a", "description": "africa-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/africa-south1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-b", "description": "africa-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/africa-south1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2612", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-c", "description": "africa-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/africa-south1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2541", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-a", "description": "europe-southwest1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-southwest1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-b", "description": "europe-southwest1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-southwest1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2542", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-c", "description": "europe-southwest1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-southwest1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2591", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-a", "description": "europe-west10-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2592", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-b", "description": "europe-west10-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-c", "description": "europe-west10-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2571", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-a", "description": "europe-west12-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west12-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2572", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-b", "description": "europe-west12-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west12-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-c", "description": "europe-west12-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west12-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2521", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-a", "description": "europe-west9-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west9-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-b", "description": "europe-west9-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west9-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2522", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-c", "description": "europe-west9-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west9-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-a", "description": "me-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2581", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-b", "description": "me-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2582", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-c", "description": "me-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2601", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-a", "description": "me-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2602", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-b", "description": "me-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-c", "description": "me-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2561", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-a", "description": "me-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-b", "description": "me-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2562", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-c", "description": "me-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2532", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-a", "description": "us-east5-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east5-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2531", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-b", "description": "us-east5-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east5-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-c", "description": "us-east5-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east5-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2551", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-a", "description": "us-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2552", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-b", "description": "us-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-c", "description": "us-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones" } ================================================ FILE: test-data/gke2/json-dumps/container-clusters.json ================================================ { "clusters": [ { "addonsConfig": { "dnsCacheConfig": {}, "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "gcsFuseCsiDriverConfig": {}, "horizontalPodAutoscaling": {}, "httpLoadBalancing": {}, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "authenticatorGroupsConfig": {}, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": { "evaluationMode": "DISABLED" }, "clusterIpv4Cidr": "10.40.0.0/14", "createTime": "2024-04-09T11:03:09+00:00", "currentMasterVersion": "1.27.8-gke.1067004", "currentNodeCount": 3, "currentNodeVersion": "1.27.8-gke.1067004", "databaseEncryption": { "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "192.168.1.1", "enterpriseConfig": { "clusterTier": "STANDARD" }, "etag": "7fbb04ca-73b8-4f61-96e3-eb0afc4bb00f", "id": "1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8", "initialClusterVersion": "1.27.8-gke.1067004", "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp" ], "ipAllocationPolicy": { "clusterIpv4Cidr": "10.40.0.0/14", "clusterIpv4CidrBlock": "10.40.0.0/14", "clusterSecondaryRangeName": "gke-gcp-cluster-pods-1d08860d", "defaultPodIpv4RangeUtilization": 0.0029, "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "10.108.192.0/20", "servicesIpv4CidrBlock": "10.108.192.0/20", "servicesSecondaryRangeName": "gke-gcp-cluster-services-1d08860d", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "europe-west10-a", "locations": [ "europe-west10-a" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "APISERVER", "CONTROLLER_MANAGER", "SCHEDULER", "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": { "gcpPublicCidrsAccessEnabled": true }, "monitoringConfig": { "advancedDatapathObservabilityConfig": {}, "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] }, "managedPrometheusConfig": { "enabled": true } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "gcp-cluster", "network": "default", "networkConfig": { "datapathProvider": "LEGACY_DATAPATH", "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "n2-standard-2", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "autoscaling": { "enabled": true, "locationPolicy": "BALANCED", "maxNodeCount": 100, "minNodeCount": 3 }, "config": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "n2-standard-2", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "etag": "b3894954-021a-4318-87bb-042b3518be33", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp" ], "locations": [ "europe-west10-a" ], "management": { "autoRepair": true, "autoUpgrade": true }, "maxPodsConstraint": { "maxPodsPerNode": "110" }, "name": "default-pool", "networkConfig": { "enablePrivateNodes": false, "podIpv4CidrBlock": "10.40.0.0/14", "podIpv4RangeUtilization": 0.0029, "podRange": "gke-gcp-cluster-pods-1d08860d" }, "podIpv4CidrSize": 24, "queuedProvisioning": {}, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/clusters/gcp-cluster/nodePools/default-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.27.8-gke.1067004" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "privateEndpoint": "10.214.0.2", "publicEndpoint": "34.32.43.168" }, "releaseChannel": { "channel": "REGULAR" }, "securityPostureConfig": { "mode": "BASIC", "vulnerabilityMode": "VULNERABILITY_DISABLED" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/clusters/gcp-cluster", "servicesIpv4Cidr": "10.108.192.0/20", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "default", "zone": "europe-west10-a" }, { "addonsConfig": { "dnsCacheConfig": {}, "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "gcsFuseCsiDriverConfig": {}, "horizontalPodAutoscaling": {}, "httpLoadBalancing": {}, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "authenticatorGroupsConfig": {}, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": { "evaluationMode": "DISABLED" }, "clusterIpv4Cidr": "10.100.0.0/14", "createTime": "2024-04-09T12:07:08+00:00", "currentMasterVersion": "1.27.8-gke.1067004", "currentNodeCount": 3, "currentNodeVersion": "1.27.8-gke.1067004", "databaseEncryption": { "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "192.168.1.1", "enterpriseConfig": { "clusterTier": "STANDARD" }, "etag": "a02a32a5-a762-4c32-87fd-e00ae08751d3", "id": "714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4", "initialClusterVersion": "1.27.8-gke.1067004", "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-82e0c046-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-c/instanceGroupManagers/gke-gcp-cluster-default-pool-a66c21d9-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-b/instanceGroupManagers/gke-gcp-cluster-default-pool-2b1e5c3e-grp" ], "ipAllocationPolicy": { "clusterIpv4Cidr": "10.100.0.0/14", "clusterIpv4CidrBlock": "10.100.0.0/14", "clusterSecondaryRangeName": "gke-gcp-cluster-pods-714df7d8", "defaultPodIpv4RangeUtilization": 0.0029, "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "10.110.80.0/20", "servicesIpv4CidrBlock": "10.110.80.0/20", "servicesSecondaryRangeName": "gke-gcp-cluster-services-714df7d8", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "europe-west10", "locations": [ "europe-west10-a", "europe-west10-c", "europe-west10-b" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "APISERVER", "CONTROLLER_MANAGER", "SCHEDULER", "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": { "gcpPublicCidrsAccessEnabled": true }, "monitoringConfig": { "advancedDatapathObservabilityConfig": {}, "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] }, "managedPrometheusConfig": { "enabled": true } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "gcp-cluster", "network": "default", "networkConfig": { "datapathProvider": "LEGACY_DATAPATH", "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default" }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "autoscaling": {}, "config": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "etag": "eecf33ae-1417-4032-9f42-e756e450361f", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-82e0c046-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-c/instanceGroupManagers/gke-gcp-cluster-default-pool-a66c21d9-grp", "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-b/instanceGroupManagers/gke-gcp-cluster-default-pool-2b1e5c3e-grp" ], "locations": [ "europe-west10-a", "europe-west10-c", "europe-west10-b" ], "management": { "autoRepair": true, "autoUpgrade": true }, "maxPodsConstraint": { "maxPodsPerNode": "110" }, "name": "default-pool", "networkConfig": { "enablePrivateNodes": false, "podIpv4CidrBlock": "10.100.0.0/14", "podIpv4RangeUtilization": 0.0029, "podRange": "gke-gcp-cluster-pods-714df7d8" }, "podIpv4CidrSize": 24, "queuedProvisioning": {}, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/europe-west10/clusters/gcp-cluster/nodePools/default-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.27.8-gke.1067004" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "privateEndpoint": "10.214.0.8", "publicEndpoint": "34.32.54.186" }, "releaseChannel": { "channel": "REGULAR" }, "securityPostureConfig": { "mode": "BASIC", "vulnerabilityMode": "VULNERABILITY_DISABLED" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/europe-west10/clusters/gcp-cluster", "servicesIpv4Cidr": "10.110.80.0/20", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "default", "zone": "europe-west10" } ] } ================================================ FILE: test-data/gke2/json-dumps/container-server-config-europe-west10-a.json ================================================ { "defaultClusterVersion": "1.27.8-gke.1067004", "validNodeVersions": [ "1.29.3-gke.1093000", "1.29.2-gke.1521000", "1.29.2-gke.1217000", "1.29.2-gke.1060000", "1.29.1-gke.1589018", "1.29.1-gke.1589017", "1.29.1-gke.1589000", "1.29.1-gke.1575000", "1.29.1-gke.1425000", "1.29.1-gke.1016000", "1.29.0-gke.1381000", "1.28.8-gke.1095000", "1.28.7-gke.1226000", "1.28.7-gke.1026000", "1.28.6-gke.1456000", "1.28.6-gke.1369000", "1.28.6-gke.1289000", "1.28.6-gke.1095000", "1.28.5-gke.1217000", "1.28.4-gke.1083000", "1.28.3-gke.1286000", "1.28.3-gke.1203001", "1.28.3-gke.1203000", "1.28.3-gke.1118000", "1.28.3-gke.1098000", "1.28.3-gke.1090000", "1.28.2-gke.1157000", "1.27.12-gke.1115000", "1.27.11-gke.1202000", "1.27.11-gke.1118000", "1.27.11-gke.1062000", "1.27.11-gke.1018000", "1.27.10-gke.1207000", "1.27.10-gke.1152000", "1.27.10-gke.1055000", "1.27.9-gke.1092000", "1.27.8-gke.1067004", "1.27.8-gke.1067000", "1.27.7-gke.1293000", "1.27.7-gke.1121002", "1.27.7-gke.1121000", "1.27.7-gke.1088000", "1.27.7-gke.1056000", "1.27.7-gke.1038000", "1.27.6-gke.1506000", "1.27.6-gke.1445000", "1.27.6-gke.1248000", "1.27.5-gke.200", "1.27.4-gke.900", "1.27.3-gke.1700", "1.27.3-gke.100", "1.27.2-gke.2100", "1.27.2-gke.1200", "1.26.15-gke.1090000", "1.26.14-gke.1133000", "1.26.14-gke.1076000", "1.26.14-gke.1044000", "1.26.14-gke.1006000", "1.26.13-gke.1189000", "1.26.13-gke.1144000", "1.26.13-gke.1052000", "1.26.12-gke.1111000", "1.26.11-gke.1055000", "1.26.10-gke.1235000", "1.26.10-gke.1101000", "1.26.10-gke.1073000", "1.26.10-gke.1038000", "1.26.10-gke.1024000", "1.26.9-gke.1507000", "1.26.9-gke.1437000", "1.26.8-gke.200", "1.26.7-gke.500", "1.26.6-gke.1700", "1.26.5-gke.2700", "1.26.5-gke.2100", "1.26.5-gke.1400", "1.26.5-gke.1200", "1.26.4-gke.1400", "1.26.4-gke.500", "1.26.3-gke.1000", "1.26.3-gke.400", "1.26.2-gke.1000", "1.26.1-gke.1500", "1.25.16-gke.1711000", "1.25.16-gke.1648000", "1.25.16-gke.1596000", "1.25.16-gke.1570000", "1.25.16-gke.1537000", "1.25.16-gke.1497000", "1.25.16-gke.1460000", "1.25.16-gke.1360000", "1.25.16-gke.1268000", "1.25.16-gke.1041000", "1.25.16-gke.1020000", "1.25.15-gke.1115000", "1.25.15-gke.1083000", "1.25.15-gke.1049000", "1.25.15-gke.1033000", "1.25.14-gke.1474000", "1.25.14-gke.1421000", "1.25.13-gke.200", "1.25.12-gke.500", "1.25.11-gke.1700", "1.25.10-gke.2700", "1.25.10-gke.2100", "1.25.10-gke.1400", "1.25.10-gke.1200", "1.25.9-gke.2300", "1.25.9-gke.400", "1.25.8-gke.1000", "1.25.8-gke.500", "1.25.7-gke.1000", "1.25.6-gke.1000", "1.25.6-gke.200", "1.25.5-gke.2000", "1.25.5-gke.1500", "1.25.4-gke.2100", "1.25.3-gke.800", "1.24.17-gke.2472000", "1.24.17-gke.2364000", "1.24.17-gke.2347000", "1.24.17-gke.2266000", "1.24.17-gke.2230000", "1.24.17-gke.2211000", "1.24.17-gke.2198000", "1.24.17-gke.2155000", "1.24.17-gke.2113000", "1.24.17-gke.200", "1.24.16-gke.500", "1.24.15-gke.1700", "1.24.14-gke.2700", "1.24.14-gke.2100", "1.24.14-gke.1400", "1.24.14-gke.1200", "1.24.13-gke.2500", "1.24.13-gke.500", "1.24.12-gke.1000", "1.24.12-gke.500", "1.24.11-gke.1000", "1.24.10-gke.2300", "1.24.10-gke.1200", "1.24.9-gke.3200", "1.24.9-gke.2000", "1.24.9-gke.1500", "1.24.8-gke.2000", "1.24.8-gke.401", "1.24.7-gke.900", "1.24.6-gke.1500", "1.24.5-gke.600", "1.24.4-gke.800", "1.24.3-gke.2100", "1.24.3-gke.900", "1.24.3-gke.200", "1.24.2-gke.1900", "1.24.2-gke.300", "1.24.1-gke.1800", "1.24.1-gke.1400", "1.23.17-gke.10700", "1.23.17-gke.10000", "1.23.17-gke.8400", "1.23.17-gke.7700", "1.23.17-gke.7000", "1.23.17-gke.6800", "1.23.17-gke.5600", "1.23.17-gke.3600", "1.23.17-gke.2000", "1.23.17-gke.1700", "1.23.17-gke.300", "1.23.16-gke.2500", "1.23.16-gke.1400", "1.23.16-gke.1100", "1.23.16-gke.200", "1.23.15-gke.1900", "1.23.15-gke.1400", "1.23.14-gke.1800", "1.23.14-gke.401", "1.23.13-gke.900", "1.23.12-gke.1600", "1.23.12-gke.100", "1.23.11-gke.300", "1.23.10-gke.1000", "1.23.9-gke.2100", "1.23.9-gke.900", "1.23.8-gke.1900", "1.23.8-gke.400", "1.23.7-gke.1400", "1.23.6-gke.2200", "1.23.6-gke.1700", "1.23.6-gke.1501", "1.23.6-gke.1500", "1.23.5-gke.2400", "1.23.5-gke.1503", "1.23.5-gke.1501", "1.22.17-gke.14100", "1.22.17-gke.13400", "1.22.17-gke.12700", "1.22.17-gke.11400", "1.22.17-gke.9400", "1.22.17-gke.8000", "1.22.17-gke.7500", "1.22.17-gke.6100", "1.22.17-gke.5400", "1.22.17-gke.4300", "1.22.17-gke.4000", "1.22.17-gke.3100", "1.22.17-gke.1900", "1.22.17-gke.1400", "1.22.16-gke.2000", "1.22.16-gke.1300", "1.22.15-gke.2500", "1.22.15-gke.1000", "1.22.15-gke.100", "1.22.14-gke.300", "1.22.13-gke.1000", "1.22.12-gke.2300", "1.22.12-gke.1200", "1.22.12-gke.500", "1.22.12-gke.300", "1.22.11-gke.400", "1.22.10-gke.600", "1.22.9-gke.2000", "1.22.9-gke.1500", "1.22.9-gke.1300", "1.22.8-gke.2200", "1.22.8-gke.202", "1.22.8-gke.201", "1.22.8-gke.200", "1.22.7-gke.1500", "1.22.7-gke.1300", "1.22.7-gke.900", "1.22.7-gke.300", "1.22.6-gke.1000", "1.22.6-gke.300", "1.22.4-gke.1501", "1.22.3-gke.1500", "1.21.14-gke.18800", "1.21.14-gke.18100", "1.21.14-gke.15800", "1.21.14-gke.14600", "1.21.14-gke.14100", "1.21.14-gke.8500", "1.21.14-gke.7100", "1.21.14-gke.5300", "1.21.14-gke.4300", "1.21.14-gke.3000", "1.21.14-gke.2700", "1.21.14-gke.2100", "1.21.14-gke.700", "1.21.13-gke.900", "1.21.12-gke.2200", "1.21.12-gke.1700", "1.21.12-gke.1500", "1.21.11-gke.1900", "1.21.11-gke.1100", "1.21.11-gke.900", "1.21.10-gke.2000", "1.21.10-gke.1500", "1.21.10-gke.1300", "1.21.10-gke.400", "1.21.9-gke.1002", "1.21.9-gke.1001", "1.21.9-gke.1000", "1.21.9-gke.300", "1.21.6-gke.1503", "1.21.6-gke.1501", "1.21.6-gke.1500", "1.21.5-gke.1805", "1.21.5-gke.1802", "1.21.5-gke.1302", "1.21.5-gke.1300", "1.21.4-gke.2302", "1.21.4-gke.2300", "1.21.3-gke.2003", "1.21.3-gke.2001", "1.20.15-gke.13700", "1.20.15-gke.13400", "1.20.15-gke.12800", "1.20.15-gke.11400", "1.20.15-gke.9900", "1.20.15-gke.8700", "1.20.15-gke.8200", "1.20.15-gke.8000", "1.20.15-gke.6000", "1.20.15-gke.5200", "1.20.15-gke.5000", "1.20.15-gke.4100", "1.20.15-gke.3600", "1.20.15-gke.3400", "1.20.15-gke.2500", "1.20.15-gke.1000", "1.20.15-gke.300", "1.20.12-gke.1500", "1.20.11-gke.1801", "1.20.11-gke.1300", "1.20.10-gke.2100", "1.20.10-gke.1600", "1.20.10-gke.301", "1.20.9-gke.2100", "1.20.9-gke.1001", "1.20.9-gke.1000", "1.20.9-gke.701", "1.20.9-gke.700", "1.20.8-gke.2101", "1.20.8-gke.2100", "1.20.8-gke.900", "1.20.8-gke.700", "1.20.7-gke.2200", "1.20.7-gke.1800", "1.20.6-gke.1400", "1.20.6-gke.1000", "1.19.16-gke.15700", "1.19.16-gke.14500", "1.19.16-gke.14000", "1.19.16-gke.13800", "1.19.16-gke.11800", "1.19.16-gke.11000", "1.19.16-gke.10800", "1.19.16-gke.9900", "1.19.16-gke.9400", "1.19.16-gke.9200", "1.19.16-gke.8300", "1.19.16-gke.6800", "1.19.16-gke.6100", "1.19.16-gke.3600", "1.19.15-gke.1801", "1.19.15-gke.1300", "1.19.15-gke.500", "1.19.14-gke.2300", "1.19.14-gke.1900", "1.19.14-gke.301", "1.19.14-gke.300", "1.19.13-gke.1900", "1.19.13-gke.1200", "1.19.13-gke.701", "1.19.13-gke.700", "1.19.12-gke.2101", "1.19.12-gke.2100", "1.19.12-gke.1100", "1.19.12-gke.900", "1.19.12-gke.700", "1.19.11-gke.2101", "1.19.11-gke.2100", "1.19.11-gke.1701", "1.19.11-gke.1700", "1.19.10-gke.1701", "1.19.10-gke.1700", "1.19.10-gke.1601", "1.19.10-gke.1600", "1.19.10-gke.1001", "1.19.10-gke.1000", "1.19.9-gke.1900", "1.19.9-gke.1400", "1.19.9-gke.700", "1.19.9-gke.100", "1.19.8-gke.2000", "1.19.8-gke.1600", "1.19.8-gke.1000", "1.19.7-gke.2503", "1.19.7-gke.1500", "1.19.7-gke.1302", "1.19.7-gke.800", "1.19.6-gke.1700", "1.19.6-gke.1100", "1.19.6-gke.600", "1.18.20-gke.6101", "1.18.20-gke.6000", "1.18.20-gke.4501", "1.18.20-gke.4500", "1.18.20-gke.4100", "1.18.20-gke.3300", "1.18.20-gke.3001", "1.18.20-gke.3000", "1.18.20-gke.2300", "1.18.20-gke.901", "1.18.20-gke.900", "1.18.20-gke.501", "1.18.19-gke.2101", "1.18.19-gke.2100", "1.18.19-gke.1701", "1.18.19-gke.1700", "1.18.18-gke.1701", "1.18.18-gke.1700", "1.18.18-gke.1101", "1.18.18-gke.1100", "1.18.17-gke.1901", "1.18.17-gke.1900", "1.18.17-gke.1201", "1.18.17-gke.1200", "1.18.17-gke.700", "1.18.17-gke.100", "1.18.16-gke.2100", "1.18.16-gke.1201", "1.18.16-gke.1200", "1.18.16-gke.502", "1.18.16-gke.500", "1.18.16-gke.302", "1.18.16-gke.300", "1.18.15-gke.2500", "1.18.15-gke.1502", "1.18.15-gke.1501", "1.18.15-gke.1500", "1.18.15-gke.1102", "1.18.15-gke.1100", "1.18.15-gke.800", "1.18.14-gke.1600", "1.18.14-gke.1200", "1.18.12-gke.1210", "1.18.12-gke.1206", "1.18.12-gke.1205", "1.18.12-gke.1201", "1.18.12-gke.1200", "1.18.12-gke.300", "1.18.10-gke.2701", "1.18.10-gke.2101", "1.18.10-gke.1500", "1.18.10-gke.601", "1.18.9-gke.2501", "1.18.9-gke.1501", "1.18.9-gke.801", "1.18.6-gke.4801", "1.18.6-gke.3504", "1.18.6-gke.3503", "1.17.17-gke.9100", "1.17.17-gke.8500", "1.17.17-gke.8200", "1.17.17-gke.7800", "1.17.17-gke.7200", "1.17.17-gke.6700", "1.17.17-gke.6000", "1.17.17-gke.5400", "1.17.17-gke.4900", "1.17.17-gke.4400", "1.17.17-gke.3700", "1.17.17-gke.3000", "1.17.17-gke.2800", "1.17.17-gke.2500", "1.17.17-gke.1500", "1.17.17-gke.1101", "1.17.17-gke.1100", "1.17.17-gke.600", "1.17.16-gke.1600", "1.17.16-gke.1300", "1.17.15-gke.800", "1.17.15-gke.300", "1.17.14-gke.1600", "1.17.14-gke.1200", "1.17.14-gke.400", "1.17.13-gke.2600", "1.17.13-gke.2001", "1.17.13-gke.1401", "1.17.13-gke.1400", "1.17.13-gke.600", "1.17.12-gke.2502", "1.17.12-gke.1504", "1.17.12-gke.1501", "1.17.12-gke.500", "1.17.9-gke.6300", "1.17.9-gke.1504", "1.16.15-gke.14800", "1.16.15-gke.12500", "1.16.15-gke.11800", "1.16.15-gke.10600", "1.16.15-gke.7801", "1.16.15-gke.7800", "1.16.15-gke.7300", "1.16.15-gke.6900", "1.16.15-gke.6000", "1.16.15-gke.5500", "1.16.15-gke.4901", "1.16.15-gke.4301", "1.16.15-gke.4300", "1.16.15-gke.3500", "1.16.15-gke.2601", "1.16.15-gke.1600", "1.16.15-gke.500", "1.16.13-gke.404", "1.16.13-gke.403", "1.16.13-gke.401", "1.16.13-gke.400", "1.16.13-gke.1", "1.16.11-gke.5", "1.16.10-gke.8", "1.16.9-gke.6", "1.16.9-gke.2", "1.16.8-gke.15", "1.16.8-gke.12", "1.16.8-gke.9", "1.15.12-gke.6002", "1.15.12-gke.6001", "1.15.12-gke.5000", "1.15.12-gke.4002", "1.15.12-gke.4000", "1.15.12-gke.20", "1.15.12-gke.17", "1.15.12-gke.16", "1.15.12-gke.13", "1.15.12-gke.9", "1.15.12-gke.6", "1.15.12-gke.3", "1.15.12-gke.2", "1.15.11-gke.17", "1.15.11-gke.15", "1.15.11-gke.13", "1.15.11-gke.12", "1.15.11-gke.11", "1.15.11-gke.9", "1.15.11-gke.5", "1.15.11-gke.3", "1.15.11-gke.1", "1.15.9-gke.26", "1.15.9-gke.24", "1.15.9-gke.22", "1.15.9-gke.12", "1.15.9-gke.9", "1.15.9-gke.8", "1.15.8-gke.3", "1.15.8-gke.2", "1.15.7-gke.23", "1.15.7-gke.2", "1.15.4-gke.22", "1.14.10-gke.1504", "1.14.10-gke.902", "1.14.10-gke.50", "1.14.10-gke.46", "1.14.10-gke.45", "1.14.10-gke.42", "1.14.10-gke.41", "1.14.10-gke.40", "1.14.10-gke.37", "1.14.10-gke.36", "1.14.10-gke.34", "1.14.10-gke.32", "1.14.10-gke.31", "1.14.10-gke.27", "1.14.10-gke.24", "1.14.10-gke.22", "1.14.10-gke.21", "1.14.10-gke.17", "1.14.10-gke.0", "1.14.9-gke.23", "1.14.9-gke.2", "1.14.9-gke.0", "1.14.8-gke.33", "1.14.8-gke.21", "1.14.8-gke.18", "1.14.8-gke.17", "1.14.8-gke.14", "1.14.8-gke.12", "1.14.8-gke.7", "1.14.8-gke.2", "1.14.7-gke.40", "1.14.7-gke.25", "1.14.7-gke.23", "1.14.7-gke.17", "1.14.7-gke.14", "1.14.7-gke.10", "1.14.6-gke.13", "1.14.6-gke.2", "1.14.6-gke.1", "1.14.3-gke.11", "1.14.3-gke.10", "1.14.3-gke.9", "1.14.2-gke.9", "1.14.1-gke.5", "1.13.12-gke.30", "1.13.12-gke.25", "1.13.12-gke.17", "1.13.12-gke.16", "1.13.12-gke.14", "1.13.12-gke.13", "1.13.12-gke.10", "1.13.12-gke.8", "1.13.12-gke.4", "1.13.12-gke.2", "1.13.11-gke.23", "1.13.11-gke.15", "1.13.11-gke.14", "1.13.11-gke.12", "1.13.11-gke.11", "1.13.11-gke.9", "1.13.11-gke.5", "1.13.10-gke.7", "1.13.10-gke.0", "1.13.9-gke.11", "1.13.9-gke.3", "1.13.7-gke.24", "1.13.7-gke.19", "1.13.7-gke.15", "1.13.7-gke.8", "1.13.7-gke.0", "1.13.6-gke.13", "1.13.6-gke.6", "1.13.6-gke.5", "1.13.6-gke.0", "1.13.5-gke.10", "1.12.10-gke.22", "1.12.10-gke.20", "1.12.10-gke.19", "1.12.10-gke.18", "1.12.10-gke.17", "1.12.10-gke.15", "1.12.10-gke.13", "1.12.10-gke.11", "1.12.10-gke.5", "1.12.9-gke.16", "1.12.9-gke.15", "1.12.9-gke.13", "1.12.9-gke.10", "1.12.9-gke.7", "1.12.9-gke.3", "1.12.8-gke.12", "1.12.8-gke.10", "1.12.8-gke.7", "1.12.8-gke.6", "1.12.7-gke.26", "1.12.7-gke.25", "1.12.7-gke.24", "1.12.7-gke.22", "1.12.7-gke.21", "1.12.7-gke.17", "1.12.7-gke.10", "1.12.7-gke.7", "1.12.6-gke.11", "1.12.6-gke.10", "1.12.6-gke.7", "1.12.5-gke.10", "1.12.5-gke.5", "1.11.10-gke.6", "1.11.10-gke.5" ], "defaultImageType": "COS_CONTAINERD", "validImageTypes": [ "COS_CONTAINERD", "COS", "UBUNTU", "UBUNTU_CONTAINERD", "WINDOWS_LTSC", "WINDOWS_LTSC_CONTAINERD", "WINDOWS_SAC", "WINDOWS_SAC_CONTAINERD" ], "validMasterVersions": [ "1.29.3-gke.1093000", "1.29.2-gke.1521000", "1.29.1-gke.1589018", "1.29.1-gke.1589017", "1.29.0-gke.1381000", "1.28.8-gke.1095000", "1.28.7-gke.1226000", "1.28.7-gke.1026000", "1.28.5-gke.1217000", "1.28.3-gke.1286000", "1.28.3-gke.1203001", "1.28.3-gke.1118000", "1.27.12-gke.1115000", "1.27.11-gke.1202000", "1.27.11-gke.1118000", "1.27.11-gke.1062000", "1.27.10-gke.1055000", "1.27.8-gke.1067004", "1.27.7-gke.1121002", "1.27.3-gke.100", "1.26.15-gke.1090000", "1.26.14-gke.1133000", "1.26.14-gke.1076000", "1.26.14-gke.1044000", "1.26.14-gke.1006000", "1.26.13-gke.1144000", "1.26.11-gke.1055000", "1.26.8-gke.200", "1.25.16-gke.1711000", "1.25.16-gke.1648000", "1.25.16-gke.1596000", "1.25.16-gke.1537000", "1.25.16-gke.1460000", "1.25.16-gke.1041000", "1.25.15-gke.1115000" ], "channels": [ { "channel": "RAPID", "defaultVersion": "1.29.1-gke.1589017", "validVersions": [ "1.29.3-gke.1093000", "1.29.2-gke.1521000", "1.29.1-gke.1589017", "1.28.8-gke.1095000", "1.28.7-gke.1226000", "1.28.7-gke.1026000", "1.27.12-gke.1115000", "1.27.11-gke.1202000", "1.27.11-gke.1118000", "1.26.15-gke.1090000", "1.26.14-gke.1133000", "1.26.14-gke.1076000", "1.25.16-gke.1711000", "1.25.16-gke.1648000", "1.25.16-gke.1596000" ] }, { "channel": "REGULAR", "defaultVersion": "1.27.8-gke.1067004", "validVersions": [ "1.29.1-gke.1589018", "1.29.1-gke.1589017", "1.28.7-gke.1026000", "1.28.3-gke.1286000", "1.27.11-gke.1062000", "1.27.10-gke.1055000", "1.27.8-gke.1067004", "1.26.14-gke.1044000", "1.26.14-gke.1006000", "1.26.8-gke.200", "1.25.16-gke.1537000", "1.25.16-gke.1460000" ] }, { "channel": "STABLE", "defaultVersion": "1.27.8-gke.1067004", "validVersions": [ "1.28.3-gke.1286000", "1.28.3-gke.1203001", "1.28.3-gke.1118000", "1.27.8-gke.1067004", "1.27.7-gke.1121002", "1.26.13-gke.1144000", "1.26.11-gke.1055000", "1.26.8-gke.200", "1.25.16-gke.1460000", "1.25.16-gke.1041000", "1.25.15-gke.1115000" ] } ] } ================================================ FILE: test-data/gke2/json-dumps/container-server-config-europe-west10.json ================================================ { "defaultClusterVersion": "1.27.8-gke.1067004", "validNodeVersions": [ "1.29.3-gke.1093000", "1.29.2-gke.1521000", "1.29.2-gke.1217000", "1.29.2-gke.1060000", "1.29.1-gke.1589018", "1.29.1-gke.1589017", "1.29.1-gke.1589000", "1.29.1-gke.1575000", "1.29.1-gke.1425000", "1.29.1-gke.1016000", "1.29.0-gke.1381000", "1.28.8-gke.1095000", "1.28.7-gke.1226000", "1.28.7-gke.1026000", "1.28.6-gke.1456000", "1.28.6-gke.1369000", "1.28.6-gke.1289000", "1.28.6-gke.1095000", "1.28.5-gke.1217000", "1.28.4-gke.1083000", "1.28.3-gke.1286000", "1.28.3-gke.1203001", "1.28.3-gke.1203000", "1.28.3-gke.1118000", "1.28.3-gke.1098000", "1.28.3-gke.1090000", "1.28.2-gke.1157000", "1.27.12-gke.1115000", "1.27.11-gke.1202000", "1.27.11-gke.1118000", "1.27.11-gke.1062000", "1.27.11-gke.1018000", "1.27.10-gke.1207000", "1.27.10-gke.1152000", "1.27.10-gke.1055000", "1.27.9-gke.1092000", "1.27.8-gke.1067004", "1.27.8-gke.1067000", "1.27.7-gke.1293000", "1.27.7-gke.1121002", "1.27.7-gke.1121000", "1.27.7-gke.1088000", "1.27.7-gke.1056000", "1.27.7-gke.1038000", "1.27.6-gke.1506000", "1.27.6-gke.1445000", "1.27.6-gke.1248000", "1.27.5-gke.200", "1.27.4-gke.900", "1.27.3-gke.1700", "1.27.3-gke.100", "1.27.2-gke.2100", "1.27.2-gke.1200", "1.26.15-gke.1090000", "1.26.14-gke.1133000", "1.26.14-gke.1076000", "1.26.14-gke.1044000", "1.26.14-gke.1006000", "1.26.13-gke.1189000", "1.26.13-gke.1144000", "1.26.13-gke.1052000", "1.26.12-gke.1111000", "1.26.11-gke.1055000", "1.26.10-gke.1235000", "1.26.10-gke.1101000", "1.26.10-gke.1073000", "1.26.10-gke.1038000", "1.26.10-gke.1024000", "1.26.9-gke.1507000", "1.26.9-gke.1437000", "1.26.8-gke.200", "1.26.7-gke.500", "1.26.6-gke.1700", "1.26.5-gke.2700", "1.26.5-gke.2100", "1.26.5-gke.1400", "1.26.5-gke.1200", "1.26.4-gke.1400", "1.26.4-gke.500", "1.26.3-gke.1000", "1.26.3-gke.400", "1.26.2-gke.1000", "1.26.1-gke.1500", "1.25.16-gke.1711000", "1.25.16-gke.1648000", "1.25.16-gke.1596000", "1.25.16-gke.1570000", "1.25.16-gke.1537000", "1.25.16-gke.1497000", "1.25.16-gke.1460000", "1.25.16-gke.1360000", "1.25.16-gke.1268000", "1.25.16-gke.1041000", "1.25.16-gke.1020000", "1.25.15-gke.1115000", "1.25.15-gke.1083000", "1.25.15-gke.1049000", "1.25.15-gke.1033000", "1.25.14-gke.1474000", "1.25.14-gke.1421000", "1.25.13-gke.200", "1.25.12-gke.500", "1.25.11-gke.1700", "1.25.10-gke.2700", "1.25.10-gke.2100", "1.25.10-gke.1400", "1.25.10-gke.1200", "1.25.9-gke.2300", "1.25.9-gke.400", "1.25.8-gke.1000", "1.25.8-gke.500", "1.25.7-gke.1000", "1.25.6-gke.1000", "1.25.6-gke.200", "1.25.5-gke.2000", "1.25.5-gke.1500", "1.25.4-gke.2100", "1.25.3-gke.800", "1.24.17-gke.2472000", "1.24.17-gke.2364000", "1.24.17-gke.2347000", "1.24.17-gke.2266000", "1.24.17-gke.2230000", "1.24.17-gke.2211000", "1.24.17-gke.2198000", "1.24.17-gke.2155000", "1.24.17-gke.2113000", "1.24.17-gke.200", "1.24.16-gke.500", "1.24.15-gke.1700", "1.24.14-gke.2700", "1.24.14-gke.2100", "1.24.14-gke.1400", "1.24.14-gke.1200", "1.24.13-gke.2500", "1.24.13-gke.500", "1.24.12-gke.1000", "1.24.12-gke.500", "1.24.11-gke.1000", "1.24.10-gke.2300", "1.24.10-gke.1200", "1.24.9-gke.3200", "1.24.9-gke.2000", "1.24.9-gke.1500", "1.24.8-gke.2000", "1.24.8-gke.401", "1.24.7-gke.900", "1.24.6-gke.1500", "1.24.5-gke.600", "1.24.4-gke.800", "1.24.3-gke.2100", "1.24.3-gke.900", "1.24.3-gke.200", "1.24.2-gke.1900", "1.24.2-gke.300", "1.24.1-gke.1800", "1.24.1-gke.1400", "1.23.17-gke.10700", "1.23.17-gke.10000", "1.23.17-gke.8400", "1.23.17-gke.7700", "1.23.17-gke.7000", "1.23.17-gke.6800", "1.23.17-gke.5600", "1.23.17-gke.3600", "1.23.17-gke.2000", "1.23.17-gke.1700", "1.23.17-gke.300", "1.23.16-gke.2500", "1.23.16-gke.1400", "1.23.16-gke.1100", "1.23.16-gke.200", "1.23.15-gke.1900", "1.23.15-gke.1400", "1.23.14-gke.1800", "1.23.14-gke.401", "1.23.13-gke.900", "1.23.12-gke.1600", "1.23.12-gke.100", "1.23.11-gke.300", "1.23.10-gke.1000", "1.23.9-gke.2100", "1.23.9-gke.900", "1.23.8-gke.1900", "1.23.8-gke.400", "1.23.7-gke.1400", "1.23.6-gke.2200", "1.23.6-gke.1700", "1.23.6-gke.1501", "1.23.6-gke.1500", "1.23.5-gke.2400", "1.23.5-gke.1503", "1.23.5-gke.1501", "1.22.17-gke.14100", "1.22.17-gke.13400", "1.22.17-gke.12700", "1.22.17-gke.11400", "1.22.17-gke.9400", "1.22.17-gke.8000", "1.22.17-gke.7500", "1.22.17-gke.6100", "1.22.17-gke.5400", "1.22.17-gke.4300", "1.22.17-gke.4000", "1.22.17-gke.3100", "1.22.17-gke.1900", "1.22.17-gke.1400", "1.22.16-gke.2000", "1.22.16-gke.1300", "1.22.15-gke.2500", "1.22.15-gke.1000", "1.22.15-gke.100", "1.22.14-gke.300", "1.22.13-gke.1000", "1.22.12-gke.2300", "1.22.12-gke.1200", "1.22.12-gke.500", "1.22.12-gke.300", "1.22.11-gke.400", "1.22.10-gke.600", "1.22.9-gke.2000", "1.22.9-gke.1500", "1.22.9-gke.1300", "1.22.8-gke.2200", "1.22.8-gke.202", "1.22.8-gke.201", "1.22.8-gke.200", "1.22.7-gke.1500", "1.22.7-gke.1300", "1.22.7-gke.900", "1.22.7-gke.300", "1.22.6-gke.1000", "1.22.6-gke.300", "1.22.4-gke.1501", "1.22.3-gke.1500", "1.21.14-gke.18800", "1.21.14-gke.18100", "1.21.14-gke.15800", "1.21.14-gke.14600", "1.21.14-gke.14100", "1.21.14-gke.8500", "1.21.14-gke.7100", "1.21.14-gke.5300", "1.21.14-gke.4300", "1.21.14-gke.3000", "1.21.14-gke.2700", "1.21.14-gke.2100", "1.21.14-gke.700", "1.21.13-gke.900", "1.21.12-gke.2200", "1.21.12-gke.1700", "1.21.12-gke.1500", "1.21.11-gke.1900", "1.21.11-gke.1100", "1.21.11-gke.900", "1.21.10-gke.2000", "1.21.10-gke.1500", "1.21.10-gke.1300", "1.21.10-gke.400", "1.21.9-gke.1002", "1.21.9-gke.1001", "1.21.9-gke.1000", "1.21.9-gke.300", "1.21.6-gke.1503", "1.21.6-gke.1501", "1.21.6-gke.1500", "1.21.5-gke.1805", "1.21.5-gke.1802", "1.21.5-gke.1302", "1.21.5-gke.1300", "1.21.4-gke.2302", "1.21.4-gke.2300", "1.21.3-gke.2003", "1.21.3-gke.2001", "1.20.15-gke.13700", "1.20.15-gke.13400", "1.20.15-gke.12800", "1.20.15-gke.11400", "1.20.15-gke.9900", "1.20.15-gke.8700", "1.20.15-gke.8200", "1.20.15-gke.8000", "1.20.15-gke.6000", "1.20.15-gke.5200", "1.20.15-gke.5000", "1.20.15-gke.4100", "1.20.15-gke.3600", "1.20.15-gke.3400", "1.20.15-gke.2500", "1.20.15-gke.1000", "1.20.15-gke.300", "1.20.12-gke.1500", "1.20.11-gke.1801", "1.20.11-gke.1300", "1.20.10-gke.2100", "1.20.10-gke.1600", "1.20.10-gke.301", "1.20.9-gke.2100", "1.20.9-gke.1001", "1.20.9-gke.1000", "1.20.9-gke.701", "1.20.9-gke.700", "1.20.8-gke.2101", "1.20.8-gke.2100", "1.20.8-gke.900", "1.20.8-gke.700", "1.20.7-gke.2200", "1.20.7-gke.1800", "1.20.6-gke.1400", "1.20.6-gke.1000", "1.19.16-gke.15700", "1.19.16-gke.14500", "1.19.16-gke.14000", "1.19.16-gke.13800", "1.19.16-gke.11800", "1.19.16-gke.11000", "1.19.16-gke.10800", "1.19.16-gke.9900", "1.19.16-gke.9400", "1.19.16-gke.9200", "1.19.16-gke.8300", "1.19.16-gke.6800", "1.19.16-gke.6100", "1.19.16-gke.3600", "1.19.15-gke.1801", "1.19.15-gke.1300", "1.19.15-gke.500", "1.19.14-gke.2300", "1.19.14-gke.1900", "1.19.14-gke.301", "1.19.14-gke.300", "1.19.13-gke.1900", "1.19.13-gke.1200", "1.19.13-gke.701", "1.19.13-gke.700", "1.19.12-gke.2101", "1.19.12-gke.2100", "1.19.12-gke.1100", "1.19.12-gke.900", "1.19.12-gke.700", "1.19.11-gke.2101", "1.19.11-gke.2100", "1.19.11-gke.1701", "1.19.11-gke.1700", "1.19.10-gke.1701", "1.19.10-gke.1700", "1.19.10-gke.1601", "1.19.10-gke.1600", "1.19.10-gke.1001", "1.19.10-gke.1000", "1.19.9-gke.1900", "1.19.9-gke.1400", "1.19.9-gke.700", "1.19.9-gke.100", "1.19.8-gke.2000", "1.19.8-gke.1600", "1.19.8-gke.1000", "1.19.7-gke.2503", "1.19.7-gke.1500", "1.19.7-gke.1302", "1.19.7-gke.800", "1.19.6-gke.1700", "1.19.6-gke.1100", "1.19.6-gke.600", "1.18.20-gke.6101", "1.18.20-gke.6000", "1.18.20-gke.4501", "1.18.20-gke.4500", "1.18.20-gke.4100", "1.18.20-gke.3300", "1.18.20-gke.3001", "1.18.20-gke.3000", "1.18.20-gke.2300", "1.18.20-gke.901", "1.18.20-gke.900", "1.18.20-gke.501", "1.18.19-gke.2101", "1.18.19-gke.2100", "1.18.19-gke.1701", "1.18.19-gke.1700", "1.18.18-gke.1701", "1.18.18-gke.1700", "1.18.18-gke.1101", "1.18.18-gke.1100", "1.18.17-gke.1901", "1.18.17-gke.1900", "1.18.17-gke.1201", "1.18.17-gke.1200", "1.18.17-gke.700", "1.18.17-gke.100", "1.18.16-gke.2100", "1.18.16-gke.1201", "1.18.16-gke.1200", "1.18.16-gke.502", "1.18.16-gke.500", "1.18.16-gke.302", "1.18.16-gke.300", "1.18.15-gke.2500", "1.18.15-gke.1502", "1.18.15-gke.1501", "1.18.15-gke.1500", "1.18.15-gke.1102", "1.18.15-gke.1100", "1.18.15-gke.800", "1.18.14-gke.1600", "1.18.14-gke.1200", "1.18.12-gke.1210", "1.18.12-gke.1206", "1.18.12-gke.1205", "1.18.12-gke.1201", "1.18.12-gke.1200", "1.18.12-gke.300", "1.18.10-gke.2701", "1.18.10-gke.2101", "1.18.10-gke.1500", "1.18.10-gke.601", "1.18.9-gke.2501", "1.18.9-gke.1501", "1.18.9-gke.801", "1.18.6-gke.4801", "1.18.6-gke.3504", "1.18.6-gke.3503", "1.17.17-gke.9100", "1.17.17-gke.8500", "1.17.17-gke.8200", "1.17.17-gke.7800", "1.17.17-gke.7200", "1.17.17-gke.6700", "1.17.17-gke.6000", "1.17.17-gke.5400", "1.17.17-gke.4900", "1.17.17-gke.4400", "1.17.17-gke.3700", "1.17.17-gke.3000", "1.17.17-gke.2800", "1.17.17-gke.2500", "1.17.17-gke.1500", "1.17.17-gke.1101", "1.17.17-gke.1100", "1.17.17-gke.600", "1.17.16-gke.1600", "1.17.16-gke.1300", "1.17.15-gke.800", "1.17.15-gke.300", "1.17.14-gke.1600", "1.17.14-gke.1200", "1.17.14-gke.400", "1.17.13-gke.2600", "1.17.13-gke.2001", "1.17.13-gke.1401", "1.17.13-gke.1400", "1.17.13-gke.600", "1.17.12-gke.2502", "1.17.12-gke.1504", "1.17.12-gke.1501", "1.17.12-gke.500", "1.17.9-gke.6300", "1.17.9-gke.1504", "1.16.15-gke.14800", "1.16.15-gke.12500", "1.16.15-gke.11800", "1.16.15-gke.10600", "1.16.15-gke.7801", "1.16.15-gke.7800", "1.16.15-gke.7300", "1.16.15-gke.6900", "1.16.15-gke.6000", "1.16.15-gke.5500", "1.16.15-gke.4901", "1.16.15-gke.4301", "1.16.15-gke.4300", "1.16.15-gke.3500", "1.16.15-gke.2601", "1.16.15-gke.1600", "1.16.15-gke.500", "1.16.13-gke.404", "1.16.13-gke.403", "1.16.13-gke.401", "1.16.13-gke.400", "1.16.13-gke.1", "1.16.11-gke.5", "1.16.10-gke.8", "1.16.9-gke.6", "1.16.9-gke.2", "1.16.8-gke.15", "1.16.8-gke.12", "1.16.8-gke.9", "1.15.12-gke.6002", "1.15.12-gke.6001", "1.15.12-gke.5000", "1.15.12-gke.4002", "1.15.12-gke.4000", "1.15.12-gke.20", "1.15.12-gke.17", "1.15.12-gke.16", "1.15.12-gke.13", "1.15.12-gke.9", "1.15.12-gke.6", "1.15.12-gke.3", "1.15.12-gke.2", "1.15.11-gke.17", "1.15.11-gke.15", "1.15.11-gke.13", "1.15.11-gke.12", "1.15.11-gke.11", "1.15.11-gke.9", "1.15.11-gke.5", "1.15.11-gke.3", "1.15.11-gke.1", "1.15.9-gke.26", "1.15.9-gke.24", "1.15.9-gke.22", "1.15.9-gke.12", "1.15.9-gke.9", "1.15.9-gke.8", "1.15.8-gke.3", "1.15.8-gke.2", "1.15.7-gke.23", "1.15.7-gke.2", "1.15.4-gke.22", "1.14.10-gke.1504", "1.14.10-gke.902", "1.14.10-gke.50", "1.14.10-gke.46", "1.14.10-gke.45", "1.14.10-gke.42", "1.14.10-gke.41", "1.14.10-gke.40", "1.14.10-gke.37", "1.14.10-gke.36", "1.14.10-gke.34", "1.14.10-gke.32", "1.14.10-gke.31", "1.14.10-gke.27", "1.14.10-gke.24", "1.14.10-gke.22", "1.14.10-gke.21", "1.14.10-gke.17", "1.14.10-gke.0", "1.14.9-gke.23", "1.14.9-gke.2", "1.14.9-gke.0", "1.14.8-gke.33", "1.14.8-gke.21", "1.14.8-gke.18", "1.14.8-gke.17", "1.14.8-gke.14", "1.14.8-gke.12", "1.14.8-gke.7", "1.14.8-gke.2", "1.14.7-gke.40", "1.14.7-gke.25", "1.14.7-gke.23", "1.14.7-gke.17", "1.14.7-gke.14", "1.14.7-gke.10", "1.14.6-gke.13", "1.14.6-gke.2", "1.14.6-gke.1", "1.14.3-gke.11", "1.14.3-gke.10", "1.14.3-gke.9", "1.14.2-gke.9", "1.14.1-gke.5", "1.13.12-gke.30", "1.13.12-gke.25", "1.13.12-gke.17", "1.13.12-gke.16", "1.13.12-gke.14", "1.13.12-gke.13", "1.13.12-gke.10", "1.13.12-gke.8", "1.13.12-gke.4", "1.13.12-gke.2", "1.13.11-gke.23", "1.13.11-gke.15", "1.13.11-gke.14", "1.13.11-gke.12", "1.13.11-gke.11", "1.13.11-gke.9", "1.13.11-gke.5", "1.13.10-gke.7", "1.13.10-gke.0", "1.13.9-gke.11", "1.13.9-gke.3", "1.13.7-gke.24", "1.13.7-gke.19", "1.13.7-gke.15", "1.13.7-gke.8", "1.13.7-gke.0", "1.13.6-gke.13", "1.13.6-gke.6", "1.13.6-gke.5", "1.13.6-gke.0", "1.13.5-gke.10", "1.12.10-gke.22", "1.12.10-gke.20", "1.12.10-gke.19", "1.12.10-gke.18", "1.12.10-gke.17", "1.12.10-gke.15", "1.12.10-gke.13", "1.12.10-gke.11", "1.12.10-gke.5", "1.12.9-gke.16", "1.12.9-gke.15", "1.12.9-gke.13", "1.12.9-gke.10", "1.12.9-gke.7", "1.12.9-gke.3", "1.12.8-gke.12", "1.12.8-gke.10", "1.12.8-gke.7", "1.12.8-gke.6", "1.12.7-gke.26", "1.12.7-gke.25", "1.12.7-gke.24", "1.12.7-gke.22", "1.12.7-gke.21", "1.12.7-gke.17", "1.12.7-gke.10", "1.12.7-gke.7", "1.12.6-gke.11", "1.12.6-gke.10", "1.12.6-gke.7", "1.12.5-gke.10", "1.12.5-gke.5", "1.11.10-gke.6", "1.11.10-gke.5" ], "defaultImageType": "COS_CONTAINERD", "validImageTypes": [ "COS_CONTAINERD", "COS", "UBUNTU", "UBUNTU_CONTAINERD", "WINDOWS_LTSC", "WINDOWS_LTSC_CONTAINERD", "WINDOWS_SAC", "WINDOWS_SAC_CONTAINERD" ], "validMasterVersions": [ "1.29.3-gke.1093000", "1.29.2-gke.1521000", "1.29.1-gke.1589018", "1.29.1-gke.1589017", "1.29.0-gke.1381000", "1.28.8-gke.1095000", "1.28.7-gke.1226000", "1.28.7-gke.1026000", "1.28.5-gke.1217000", "1.28.3-gke.1286000", "1.28.3-gke.1203001", "1.28.3-gke.1118000", "1.27.12-gke.1115000", "1.27.11-gke.1202000", "1.27.11-gke.1118000", "1.27.11-gke.1062000", "1.27.10-gke.1055000", "1.27.8-gke.1067004", "1.27.7-gke.1121002", "1.27.3-gke.100", "1.26.15-gke.1090000", "1.26.14-gke.1133000", "1.26.14-gke.1076000", "1.26.14-gke.1044000", "1.26.14-gke.1006000", "1.26.13-gke.1144000", "1.26.11-gke.1055000", "1.26.8-gke.200", "1.25.16-gke.1711000", "1.25.16-gke.1648000", "1.25.16-gke.1596000", "1.25.16-gke.1537000", "1.25.16-gke.1460000", "1.25.16-gke.1041000", "1.25.15-gke.1115000" ], "channels": [ { "channel": "RAPID", "defaultVersion": "1.29.1-gke.1589017", "validVersions": [ "1.29.3-gke.1093000", "1.29.2-gke.1521000", "1.29.1-gke.1589017", "1.28.8-gke.1095000", "1.28.7-gke.1226000", "1.28.7-gke.1026000", "1.27.12-gke.1115000", "1.27.11-gke.1202000", "1.27.11-gke.1118000", "1.26.15-gke.1090000", "1.26.14-gke.1133000", "1.26.14-gke.1076000", "1.25.16-gke.1711000", "1.25.16-gke.1648000", "1.25.16-gke.1596000" ] }, { "channel": "REGULAR", "defaultVersion": "1.27.8-gke.1067004", "validVersions": [ "1.29.1-gke.1589018", "1.29.1-gke.1589017", "1.28.7-gke.1026000", "1.28.3-gke.1286000", "1.27.11-gke.1062000", "1.27.10-gke.1055000", "1.27.8-gke.1067004", "1.26.14-gke.1044000", "1.26.14-gke.1006000", "1.26.8-gke.200", "1.25.16-gke.1537000", "1.25.16-gke.1460000" ] }, { "channel": "STABLE", "defaultVersion": "1.27.8-gke.1067004", "validVersions": [ "1.28.3-gke.1286000", "1.28.3-gke.1203001", "1.28.3-gke.1118000", "1.27.8-gke.1067004", "1.27.7-gke.1121002", "1.26.13-gke.1144000", "1.26.11-gke.1055000", "1.26.8-gke.200", "1.25.16-gke.1460000", "1.25.16-gke.1041000", "1.25.15-gke.1115000" ] } ] } ================================================ FILE: test-data/gke2/json-dumps/iam-policy.json ================================================ { "auditConfigs": [ { "auditLogConfigs": [ { "logType": "ADMIN_READ" }, { "logType": "DATA_READ" }, { "logType": "DATA_WRITE" } ], "service": "container.googleapis.com" } ], "bindings": [ { "members": [ "serviceAccount:service-1234000173@gcp-sa-anthosaudit.iam.gserviceaccount.com" ], "role": "roles/anthosaudit.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-anthospolicycontroller.iam.gserviceaccount.com" ], "role": "roles/anthospolicycontroller.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-artifactregistry.iam.gserviceaccount.com" ], "role": "roles/artifactregistry.serviceAgent" }, { "members": [ "serviceAccount:anthos-lab-usage-metering-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/bigquery.dataEditor" }, { "members": [ "serviceAccount:1234000173@cloudbuild.gserviceaccount.com" ], "role": "roles/cloudbuild.builds.builder" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-cloudbuild.iam.gserviceaccount.com" ], "role": "roles/cloudbuild.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@gcf-admin-robot.iam.gserviceaccount.com" ], "role": "roles/cloudfunctions.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-cloudkms.iam.gserviceaccount.com" ], "role": "roles/cloudkms.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@cloudcomposer-accounts.iam.gserviceaccount.com" ], "role": "roles/composer.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@container-engine-robot.iam.gserviceaccount.com" ], "role": "roles/container.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@container-analysis.iam.gserviceaccount.com" ], "role": "roles/containeranalysis.ServiceAgent" }, { "members": [ "serviceAccount:service-1234000173@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-ktd-control.iam.gserviceaccount.com" ], "role": "roles/containerthreatdetection.serviceAgent" }, { "members": [ "serviceAccount:1234000173-compute@developer.gserviceaccount.com", "serviceAccount:1234000173@cloudservices.gserviceaccount.com", "serviceAccount:kcc-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "serviceAccount:gcpdiag-gke-cluster-autoscaler-rrrr@appspot.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "serviceAccount:anthos-lab-connect-register-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/gkehub.admin" }, { "members": [ "serviceAccount:anthos-lab-connect-register-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/gkehub.connect" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-gkehub.iam.gserviceaccount.com" ], "role": "roles/gkehub.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-gkeonprem.iam.gserviceaccount.com" ], "role": "roles/gkeonprem.serviceAgent" }, { "members": [ "serviceAccount:anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/iam.roleViewer" }, { "members": [ "serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/iam.securityAdmin" }, { "members": [ "serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/iam.serviceAccountAdmin" }, { "members": [ "serviceAccount:anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/iam.serviceAccountCreator" }, { "members": [ "serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/iam.serviceAccountKeyAdmin" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-krmapihosting.iam.gserviceaccount.com" ], "role": "roles/krmapihosting.serviceAgent" }, { "members": [ "serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "serviceAccount:kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/logging.logWriter" }, { "members": [ "serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/monitoring.dashboardEditor" }, { "members": [ "serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "serviceAccount:kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/monitoring.metricWriter" }, { "members": [ "serviceAccount:kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/monitoring.viewer" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-mcmetering.iam.gserviceaccount.com" ], "role": "roles/multiclustermetering.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-networkconnectivity.iam.gserviceaccount.com" ], "role": "roles/networkconnectivity.serviceAgent" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-networkmanagement.iam.gserviceaccount.com" ], "role": "roles/networkmanagement.serviceAgent" }, { "members": [ "serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/opsconfigmonitoring.resourceMetadata.writer" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" }, { "members": [ "serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/serviceusage.serviceUsageAdmin" }, { "members": [ "serviceAccount:anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/serviceusage.serviceUsageViewer" }, { "members": [ "serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/stackdriver.resourceMetadata.writer" }, { "members": [ "serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com" ], "role": "roles/storage.admin" }, { "members": [ "serviceAccount:service-1234000173@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ], "role": "roles/websecurityscanner.serviceAgent" } ], "etag": "BwYTiuJ1iQc=", "version": 1 } ================================================ FILE: test-data/gke2/json-dumps/iam-roles-custom.json ================================================ { "roles": [ { "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/roles/CustomKubernetesEngineClusterV", "title": "Custom GKE Viewer", "description": "Created on: 2023-09-08 Based on: Kubernetes Engine Cluster Viewer", "includedPermissions": [ "container.clusters.get", "container.clusters.list", "container.pods.list", "resourcemanager.projects.get" ], "etag": "BwYFEGlPX0c=" } ] } ================================================ FILE: test-data/gke2/json-dumps/iam-roles-get.json ================================================ { "roles": [ { "name": "roles/container.nodeServiceAgent", "title": "Kubernetes Engine Node Service Agent", "description": "Minimal set of permission required by a GKE node to support standard capabilities such as logging and monitoring export, and image pulls.", "includedPermissions": [ "autoscaling.sites.writeMetrics", "logging.logEntries.create", "monitoring.metricDescriptors.create", "monitoring.metricDescriptors.list", "monitoring.timeSeries.create", "monitoring.timeSeries.list", "resourcemanager.projects.get", "resourcemanager.projects.list", "serviceusage.services.use", "storage.objects.get", "storage.objects.list" ], "stage": "GA", "etag": "AA==" } ] } ================================================ FILE: test-data/gke2/json-dumps/iam-service-account-policy.json ================================================ ================================================ FILE: test-data/gke2/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "email": "kcc-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/kcc-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "117677943824492240920" }, { "email": "anthos-lab-connect-register-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-connect-register-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "103134321728756607945" }, { "displayName": "anthos-on-vmware-sa", "email": "anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "114936822703165234250" }, { "email": "anthos-lab-usage-metering-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-usage-metering-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "109011342483896972653" }, { "email": "anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "107315232877990007458" }, { "displayName": "Compute Engine default service account", "email": "1234000173-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/1234000173-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "100384321087922198767" }, { "email": "anthos-lab-connect-agent-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-connect-agent-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "115445896113281255292" }, { "displayName": "App Engine default service account", "email": "gcpdiag-gke-cluster-autoscaler-rrrr@appspot.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/gcpdiag-gke-cluster-autoscaler-rrrr@appspot.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "115813325620452453327" }, { "displayName": "GKE Node Service Account", "email": "kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "109018276196562457231" }, { "email": "anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "uniqueId": "116437026027565218333" } ] } ================================================ FILE: test-data/gke2/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9dartq", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_id": "8700821884762314590", "instance_group_manager_name": "gke-gke2-default-pool-11b6ca8e-grp", "project_id": "gcpdiag-gke1-aaaa", "location": "europe-west1-b" } }, "timestamp": "2021-11-24T16:35:22.615295Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:23.172680503Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-nuwdobe1byj2", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-98631c84-grp", "project_id": "gcpdiag-gke1-aaaa", "location": "europe-west1-d", "instance_group_manager_id": "6471686162526492481" } }, "timestamp": "2021-11-24T16:35:10.014049Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:10.306123333Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:ae8:2d45::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kpc", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke2-default-pool-5e5781dd-grp", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "5205754198527039297", "location": "europe-west1-c" } }, "timestamp": "2021-11-24T16:35:08.922507Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771693418-5d18b700269e6-19f4d541-4d012584", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:35:09.484397071Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "tf2uocd1kou", "resource": { "type": "gce_instance_group_manager", "labels": { "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "3383879657688651622", "location": "europe-west1-c", "instance_group_manager_name": "gke-gke3-default-pool-013fb293-grp" } }, "timestamp": "2021-11-24T16:34:38.479723Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:39.479072691Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-4pqrg9darqs", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west1-b", "instance_group_manager_id": "5404218744580069225", "instance_group_manager_name": "gke-gke3-default-pool-597c9ca2-grp", "project_id": "gcpdiag-gke1-aaaa" } }, "timestamp": "2021-11-24T16:34:37.484721Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:38.168845698Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a05:601a:1550::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-31olexd4rpi", "resource": { "type": "gce_instance_group_manager", "labels": { "instance_group_manager_name": "gke-gke3-default-pool-c125bae7-grp", "location": "europe-west1-d", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_id": "1403931912127633256" } }, "timestamp": "2021-11-24T16:34:35.389660Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:34:35.872428070Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "service-12340002@container-engine-robot.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "2002:a17:907:3ea4::", "callerSuppliedUserAgent": "google-api-go-client/0.5 GoogleContainerEngine/v1" }, "serviceName": "compute.googleapis.com", "methodName": "beta.compute.instanceGroupManagers.insert", "resourceName": "projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp", "request": { "@type": "type.googleapis.com/compute.instanceGroupManagers.insert" } }, "insertId": "-tt9mudi768", "resource": { "type": "gce_instance_group_manager", "labels": { "location": "europe-west4-a", "instance_group_manager_id": "318228385164940970", "project_id": "gcpdiag-gke1-aaaa", "instance_group_manager_name": "gke-gke1-default-pool-dc4a8b29-grp" } }, "timestamp": "2021-11-24T16:29:21.943390Z", "severity": "NOTICE", "logName": "projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1637771331527-5d18b5a706163-f238dbec-106555c8", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2021-11-24T16:29:22.710110506Z" } ] } ================================================ FILE: test-data/gke2/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.project_id" }, { "key": "resource.service" }, { "key": "resource.location" }, { "key": "metric.limit_name" }, { "key": "metric.quota_metric" } ], "pointDescriptors": [ { "key": "value_exceeded_count_true", "valueType": "INT64", "metricKind": "GAUGE", "unit": "1" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "gcpdiag-gke-cluster-autoscaler-rrrr" }, { "stringValue": "logging.googleapis.com" }, { "stringValue": "global" }, { "stringValue": "WriteRequestsPerMinutePerProject" }, { "stringValue": "logging.googleapis.com/write_requests" } ], "pointData": [ { "values": [ { "int64Value": "96" } ], "timeInterval": { "startTime": "2024-05-15T16:04:06.985676Z", "endTime": "2024-05-15T16:04:06.985676Z" } } ] } ] } ================================================ FILE: test-data/gke2/json-dumps/project.json ================================================ { "name": "projects/1234000173", "parent": "folders/373737373737", "projectId": "gcpdiag-gke-cluster-autoscaler-rrrr", "state": "ACTIVE", "displayName": "gcpdiag-gke-cluster-autoscaler-rrrr", "createTime": "2023-05-19T11:14:22.028848Z", "updateTime": "2023-05-19T11:14:22.028848Z", "etag": "W/\"002f918ce787cdc6\"" } ================================================ FILE: test-data/gke2/json-dumps/services.json ================================================ { "services": [ { "name": "projects/1234000173/services/analyticshub.googleapis.com", "config": { "name": "analyticshub.googleapis.com", "title": "Analytics Hub API", "documentation": { "summary": "Exchange data and analytics assets securely and efficiently." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/anthos.googleapis.com", "config": { "name": "anthos.googleapis.com", "title": "Anthos API", "documentation": { "summary": "Anthos is a managed hybrid cloud solution" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/anthosaudit.googleapis.com", "config": { "name": "anthosaudit.googleapis.com", "title": "Anthos Audit API", "documentation": { "summary": "Anthos is a managed hybrid cloud solution" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/anthosconfigmanagement.googleapis.com", "config": { "name": "anthosconfigmanagement.googleapis.com", "title": "Anthos Config Management API", "documentation": { "summary": "Anthos Config Management" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/anthosgke.googleapis.com", "config": { "name": "anthosgke.googleapis.com", "title": "Anthos GKE API", "documentation": { "summary": "Anthos is a managed hybrid cloud solution" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/anthospolicycontroller.googleapis.com", "config": { "name": "anthospolicycontroller.googleapis.com", "title": "Anthos Policy Controller API", "documentation": { "summary": "Anthos Policy Controller" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "artifactregistry.googleapis.com/Location", "displayName": "Artifact Registry Location", "description": "A location in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "artifactregistry.googleapis.com/Project", "displayName": "Artifact Registry Project", "description": "A Cloud project in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "BETA" }, { "type": "artifactregistry.googleapis.com/Repository", "displayName": "Artifact Registry Repository", "description": "A repository in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "repository_id", "description": "The identifier of the Artifact Registry repository, such as \"my_repository\"." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_region_upstream_host_reads", "artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/region_upstream_host_reads", "artifactregistry.googleapis.com/us_multi_region_upstream_host_reads" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Project", "metrics": [ "artifactregistry.googleapis.com/project/api/request_count", "artifactregistry.googleapis.com/project/api/request_latencies", "artifactregistry.googleapis.com/project/request_count", "artifactregistry.googleapis.com/project/request_latencies" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Repository", "metrics": [ "artifactregistry.googleapis.com/repository/api/request_count", "artifactregistry.googleapis.com/repository/api/request_latencies", "artifactregistry.googleapis.com/repository/request_count", "artifactregistry.googleapis.com/repository/request_latencies", "artifactregistry.googleapis.com/repository/size" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquery.googleapis.com/Table", "displayName": "BigQuery Table Resource.", "description": "BigQuery Table Resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The cloud location of the BigQuery table." }, { "key": "table_reference", "description": "The table reference in the format of project_id:dataset_id.table_id for the BigQuery table." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/Location", "displayName": "CheckIamPolicy Request Location", "description": "A BigQuery Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget", "description": "Differential Privacy Budget.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." }, { "key": "multi_region", "description": "The multi-region identifier for the associated resource (e.g \"us\", \"eu\"). Used only for multi-region quota metrics." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded", "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit" ] }, { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget", "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/bigqueryconnection.googleapis.com", "config": { "name": "bigqueryconnection.googleapis.com", "title": "BigQuery Connection API", "documentation": { "summary": "Allows users to manage BigQuery connections to external data sources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/bigquerydatapolicy.googleapis.com", "config": { "name": "bigquerydatapolicy.googleapis.com", "title": "BigQuery Data Policy API", "documentation": { "summary": "Allows users to manage BigQuery data policies." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/bigqueryreservation.googleapis.com", "config": { "name": "bigqueryreservation.googleapis.com", "title": "BigQuery Reservation API", "documentation": { "summary": "A service to modify your BigQuery flat-rate reservations." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquerystorage.googleapis.com/DataflowWrite", "displayName": "BigQuery Storage Write API metrics for Dataflow jobs.", "description": "BigQuery Storage Write API metrics for Dataflow jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job." }, { "key": "location", "description": "The BigQuery region in which the Storage API server locates." }, { "key": "job_name", "description": "The name of the Dataflow job this worker belongs to." }, { "key": "job_id", "description": "The id of the dataflow job the worker belongs to." }, { "key": "worker_id", "description": "The ID of the worker, unique for this job_id." }, { "key": "destination_project", "description": "The project of BigQuery destination table of the Dataflow job." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquerystorage.googleapis.com/DataflowWrite", "metrics": [ "bigquerystorage.googleapis.com/dataflow_write/request_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/connection_results_count", "bigquerystorage.googleapis.com/dataflow_write/server_side_latencies", "bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies", "bigquerystorage.googleapis.com/dataflow_write/concurrent_connections" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/cloudaicompanion.googleapis.com", "config": { "name": "cloudaicompanion.googleapis.com", "title": "Cloud AI Companion API", "documentation": { "summary": "The Cloud AI Companion API for Duet AI.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/cloudapis.googleapis.com", "config": { "name": "cloudapis.googleapis.com", "title": "Google Cloud APIs", "documentation": { "summary": "This is a meta service for Google Cloud APIs for convenience. Enabling this service enables all commonly used Google Cloud APIs for the project. By default, it is enabled for all projects created through Google Cloud Console and Google Cloud SDK, and should be manually enabled for all other projects that intend to use Google Cloud APIs. Note: disabling this service has no effect on other services.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/cloudbuild.googleapis.com", "config": { "name": "cloudbuild.googleapis.com", "title": "Cloud Build API", "documentation": { "summary": "Creates and manages builds on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "cloudbuild.googleapis.com/Location", "displayName": "Cloud Build Location", "description": "A location in the Cloud Build API.", "labels": [ { "key": "resource_container", "description": "The identified of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "cloudbuild.googleapis.com/GkeInstance", "displayName": "GKE instance", "description": "GKE instance.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "gke_instance_id", "description": "The identifier of the GKE instance." } ], "launchStage": "ALPHA" }, { "type": "cloudbuild.googleapis.com/PrivatePool", "displayName": "Private Worker Pool", "description": "Private Worker Pool.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "worker_pool_uuid", "description": "The UUID of the worker pool." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudbuild.googleapis.com/GkeInstance", "metrics": [ "cloudbuild.googleapis.com/internal/gke_instance/pod", "cloudbuild.googleapis.com/internal/gke_instance/node" ] }, { "monitoredResource": "cloudbuild.googleapis.com/PrivatePool", "metrics": [ "cloudbuild.googleapis.com/internal/private_pool_ready_worker_replicas" ] }, { "monitoredResource": "cloudbuild.googleapis.com/Location", "metrics": [ "cloudbuild.googleapis.com/concurrent_public_pool_build_cpus", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/exceeded" ] }, { "monitoredResource": "cloudbuild.googleapis.com/Location", "metrics": [ "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/limit", "cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/cloudfunctions.googleapis.com", "config": { "name": "cloudfunctions.googleapis.com", "title": "Cloud Functions API", "documentation": { "summary": "Manages lightweight user-provided functions executed in response to events." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudfunctions.googleapis.com/function", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloudfunctions.googleapis.com/function_name" } ] }, { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudfunctions.googleapis.com/function", "metrics": [ "cloudfunctions.googleapis.com/function/execution_times", "cloudfunctions.googleapis.com/function/execution_count", "cloudfunctions.googleapis.com/function/user_memory_bytes", "cloudfunctions.googleapis.com/function/network_egress", "cloudfunctions.googleapis.com/function/active_instances", "cloudfunctions.googleapis.com/function/execution_delays", "cloudfunctions.googleapis.com/function/execution_count_internal", "cloudfunctions.googleapis.com/function/supervisor_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_memory_bytes", "cloudfunctions.googleapis.com/function/user_gcu_times", "cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count", "cloudfunctions.googleapis.com/function/supervisor_controlled_death_count", "cloudfunctions.googleapis.com/function/supervisor_report_count", "cloudfunctions.googleapis.com/function/supervisor_report_latencies", "cloudfunctions.googleapis.com/function/supervisor_phase_latencies" ] }, { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/cloudkms.googleapis.com", "config": { "name": "cloudkms.googleapis.com", "title": "Cloud Key Management Service (KMS) API", "documentation": { "summary": "Manages keys and performs cryptographic operations in a central cloud service, for direct use by other cloud resources and applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudkms.googleapis.com/Project", "displayName": "KMS project", "description": "KMS project.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource." }, { "key": "location", "description": "The location of the resource." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudkms.googleapis.com/Project", "metrics": [ "cloudkms.googleapis.com/ekm/external/request_count", "cloudkms.googleapis.com/ekm/external/request_latencies", "cloudkms.googleapis.com/external_kms_multiregion_requests", "cloudkms.googleapis.com/hsm_multiregion_asymmetric_requests", "cloudkms.googleapis.com/hsm_multiregion_symmetric_requests", "cloudkms.googleapis.com/peak_qps", "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/exceeded", "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/usage", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/exceeded", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/usage", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/exceeded", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/usage", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/exceeded", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/usage", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/exceeded", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/usage" ] }, { "monitoredResource": "cloudkms.googleapis.com/Project", "metrics": [ "cloudkms.googleapis.com/quota/external_kms_multiregion_requests/limit", "cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/limit", "cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/limit", "cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/limit", "cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/cloudresourcemanager.googleapis.com", "config": { "name": "cloudresourcemanager.googleapis.com", "title": "Cloud Resource Manager API", "documentation": { "summary": "Creates, reads, and updates metadata for Google Cloud Platform resource containers." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/cloudtrace.googleapis.com", "config": { "name": "cloudtrace.googleapis.com", "title": "Cloud Trace API", "documentation": { "summary": "Sends application trace data to Cloud Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Cloud Trace API directly. If you are looking to instrument your application for Cloud Trace, we recommend using OpenTelemetry.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudtrace.googleapis.com/charged_project", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "monitoring.googleapis.com/service" }, { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" } ] }, { "type": "cloudtrace.googleapis.com/ChargedProject", "displayName": "Cloud trace target", "description": "A cloud trace specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "api_service", "description": "The name of the API service with which the data is associated (e.g.,'cloudtrace.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "cloudtrace.googleapis.com/CloudtraceProject", "displayName": "Cloud Trace", "description": "Cloud trace resource, e.g. project.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container associated with the resource." }, { "key": "location", "description": "The location that the Cloud Trace service recording the metrics is running." } ], "launchStage": "EARLY_ACCESS" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudtrace.googleapis.com/ChargedProject", "metrics": [ "cloudtrace.googleapis.com/billing/ingested_spans", "cloudtrace.googleapis.com/billing/ingested_bytes" ] }, { "monitoredResource": "cloudtrace.googleapis.com/charged_project", "metrics": [ "cloudtrace.googleapis.com/billing/retrieved_spans" ] }, { "monitoredResource": "cloudtrace.googleapis.com/CloudtraceProject", "metrics": [ "cloudtrace.googleapis.com/internal/plugin_server_span_count", "cloudtrace.googleapis.com/internal/reader_root_query_count", "cloudtrace.googleapis.com/internal/reader_root_query_latencies", "cloudtrace.googleapis.com/bigquery_export/exported_span_count" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/composer.googleapis.com", "config": { "name": "composer.googleapis.com", "title": "Cloud Composer API", "documentation": { "summary": "Manages Apache Airflow rrrrironments on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/connectgateway.googleapis.com", "config": { "name": "connectgateway.googleapis.com", "title": "Connect Gateway API", "documentation": { "summary": "The Connect Gateway service allows connectivity from external parties to connected Kubernetes clusters." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "container.googleapis.com/Cluster", "displayName": "Kubernetes Cluster", "description": "Kubernetes Cluster.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." } ], "launchStage": "BETA" }, { "type": "container.googleapis.com/NodePool", "displayName": "GKE Node Pool", "description": "GKE Node Pool.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." }, { "key": "node_pool_name", "description": "Node pool name." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/containers_per_cluster_autopilot", "container.googleapis.com/quota/containers_per_cluster_standard", "container.googleapis.com/quota/etcd_database_size_bytes", "container.googleapis.com/quota/nodes_per_cluster", "container.googleapis.com/quota/pods_per_cluster_autopilot", "container.googleapis.com/quota/pods_per_cluster_standard", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded", "container.googleapis.com/quota/quota/nodes_per_cluster/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/nodes_per_node_pool", "container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded" ] }, { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/containers_per_cluster_standard/limit", "container.googleapis.com/quota/quota/containers_per_cluster_standard/usage", "container.googleapis.com/quota/quota/etcd_database_size_bytes/limit", "container.googleapis.com/quota/quota/etcd_database_size_bytes/usage", "container.googleapis.com/quota/quota/etcd_database_size_gib/limit", "container.googleapis.com/quota/quota/etcd_database_size_gib/usage", "container.googleapis.com/quota/quota/nodes_per_cluster/limit", "container.googleapis.com/quota/quota/nodes_per_cluster/usage", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/pods_per_cluster_standard/limit", "container.googleapis.com/quota/quota/pods_per_cluster_standard/usage" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/quota/nodes_per_node_pool/limit", "container.googleapis.com/quota/quota/nodes_per_node_pool/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/containeranalysis.googleapis.com", "config": { "name": "containeranalysis.googleapis.com", "title": "Container Analysis API", "documentation": { "summary": "This API is a prerequisite for leveraging Artifact Analysis scanning\ncapabilities in both Artifact Registry and with Advanced Vulnerability\nInsights (runtime scanning) in GKE.\n\nIn addition, the Container Analysis API is an implementation of the Grafeas\nAPI, which enables storing, querying, and retrieval of critical metadata\nabout all of your software artifacts." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": { "summary": "Stream images stored in Artifact Registry to GKE\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/containersecurity.googleapis.com", "config": { "name": "containersecurity.googleapis.com", "title": "Container Security API", "documentation": { "summary": "Highlights security-related insights into running Google Kubernetes Engine (GKE) clusters." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/containerthreatdetection.googleapis.com", "config": { "name": "containerthreatdetection.googleapis.com", "title": "Container Threat Detection API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/dataform.googleapis.com", "config": { "name": "dataform.googleapis.com", "title": "Dataform API", "documentation": { "summary": "Service to develop, version control, and operationalize SQL pipelines in BigQuery." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/dataplex.googleapis.com", "config": { "name": "dataplex.googleapis.com", "title": "Cloud Dataplex API", "documentation": { "summary": "Dataplex API is used to manage the lifecycle of data lakes." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataplex.googleapis.com/Lake", "displayName": "Cloud Dataplex Lake", "description": "A Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of this Lake resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Zone", "displayName": "Cloud Dataplex Zone", "description": "A Zone within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of this Zone resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Asset", "displayName": "Cloud Dataplex Asset", "description": "An Asset within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of the Zone resource containing this resource." }, { "key": "asset_id", "description": "The identifier of this Asset resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Environment", "displayName": "Cloud Dataplex Environment", "description": "An Environment within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "rrrrironment_id", "description": "The identifier of this Environment resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataplex.googleapis.com/Lake", "metrics": [ "dataplex.googleapis.com/lake/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Zone", "metrics": [ "dataplex.googleapis.com/zone/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Asset", "metrics": [ "dataplex.googleapis.com/asset/requires_action", "dataplex.googleapis.com/asset/active", "dataplex.googleapis.com/asset/data_items", "dataplex.googleapis.com/asset/data_size", "dataplex.googleapis.com/asset/tables", "dataplex.googleapis.com/asset/filesets", "dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates", "dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/datastore.googleapis.com", "config": { "name": "datastore.googleapis.com", "title": "Cloud Datastore API", "documentation": { "summary": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/deploymentmanager.googleapis.com", "config": { "name": "deploymentmanager.googleapis.com", "title": "Cloud Deployment Manager V2 API", "documentation": { "summary": "The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\nresources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/dns.googleapis.com", "config": { "name": "dns.googleapis.com", "title": "Cloud DNS API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/gkebackup.googleapis.com", "config": { "name": "gkebackup.googleapis.com", "title": "Backup for GKE API", "documentation": { "summary": "Backup for GKE is a managed Kubernetes workload backup and restore service\nfor GKE clusters." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "gkebackup.googleapis.com/BackupPlan", "displayName": "GKE Backup Plan", "description": "A backup plan provides configuration, location, and management functions for a sequence of backups.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this backupPlan resides." }, { "key": "backup_plan_id", "description": "The name of the backupPlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/RestorePlan", "displayName": "GKE Restore Plan", "description": "A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this restorePlan resides." }, { "key": "restore_plan_id", "description": "The name of the restorePlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/Project", "displayName": "Backup for GKE Project", "description": "A Project in the Backup for GKE API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource." }, { "key": "location", "description": "The Google Cloud location of the resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "gkebackup.googleapis.com/BackupPlan", "metrics": [ "gkebackup.googleapis.com/backup_created_count", "gkebackup.googleapis.com/backup_deleted_count", "gkebackup.googleapis.com/backup_completion_times" ] }, { "monitoredResource": "gkebackup.googleapis.com/RestorePlan", "metrics": [ "gkebackup.googleapis.com/restore_created_count" ] }, { "monitoredResource": "gkebackup.googleapis.com/Project", "metrics": [ "gkebackup.googleapis.com/internal/backup_plan_created_count", "gkebackup.googleapis.com/internal/backup_plan_existence" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/gkeconnect.googleapis.com", "config": { "name": "gkeconnect.googleapis.com", "title": "GKE Connect API", "documentation": { "summary": "The GKE Connect service allows connectivity between Google and managed K8s clusters." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/gkehub.googleapis.com", "config": { "name": "gkehub.googleapis.com", "title": "GKE Hub API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/gkeonprem.googleapis.com", "config": { "name": "gkeonprem.googleapis.com", "title": "GDC Virtual API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/iap.googleapis.com", "config": { "name": "iap.googleapis.com", "title": "Cloud Identity-Aware Proxy API", "documentation": { "summary": "Controls access to cloud applications running on Google Cloud Platform." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/krmapihosting.googleapis.com", "config": { "name": "krmapihosting.googleapis.com", "title": "KRM API Hosting API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes", "logging.googleapis.com/billing/stored_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" and \"cluster\" are supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested", "monitoring.googleapis.com/internal/billing/gke_enterprise_samples_ingested", "monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested", "monitoring.googleapis.com/internal/stats/filtered_sample_count", "monitoring.googleapis.com/internal/stats/filtered_byte_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/multiclustermetering.googleapis.com", "config": { "name": "multiclustermetering.googleapis.com", "title": "Multi cluster metering API", "documentation": { "summary": "The Multi cluster metering API is the API associated with the hub \"metering\" controller." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/networkconnectivity.googleapis.com", "config": { "name": "networkconnectivity.googleapis.com", "title": "Network Connectivity API", "documentation": { "summary": "This API enables connectivity with and between Google Cloud resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "networkconnectivity.googleapis.com/Hub", "displayName": "Network Connectivity Hub", "description": "A Network Connectivity hub.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container that this hub is in." }, { "key": "location", "description": "The identifier of the location that this hub is in." }, { "key": "hub_id", "description": "The identifier of this hub." } ], "launchStage": "GA" }, { "type": "networkconnectivity.googleapis.com/RouteTable", "displayName": "Network Connectivity Route Table", "description": "A route table associated with a Network Connectivity hub.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this route table." }, { "key": "location", "description": "The identifier of the location that this route table is in." }, { "key": "hub_id", "description": "The identifier of the hub that is associated with this route table." }, { "key": "route_table_id", "description": "The identifier of this route table." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "networkconnectivity.googleapis.com/Hub", "metrics": [ "networkconnectivity.googleapis.com/active_vpc_spokes_per_hub", "networkconnectivity.googleapis.com/groups_per_hub", "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/exceeded", "networkconnectivity.googleapis.com/quota/groups_per_hub/exceeded" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/RouteTable", "metrics": [ "networkconnectivity.googleapis.com/quota/routes_per_route_table/exceeded", "networkconnectivity.googleapis.com/routes_per_route_table" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/Hub", "metrics": [ "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/limit", "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/usage", "networkconnectivity.googleapis.com/quota/groups_per_hub/limit", "networkconnectivity.googleapis.com/quota/groups_per_hub/usage" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/RouteTable", "metrics": [ "networkconnectivity.googleapis.com/quota/routes_per_route_table/limit", "networkconnectivity.googleapis.com/quota/routes_per_route_table/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/networkmanagement.googleapis.com", "config": { "name": "networkmanagement.googleapis.com", "title": "Network Management API", "documentation": { "summary": "The Network Management API provides a collection of network performance monitoring and diagnostic capabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/opsconfigmonitoring.googleapis.com", "config": { "name": "opsconfigmonitoring.googleapis.com", "title": "Config Monitoring for Ops API", "documentation": { "summary": "Config Monitoring for Ops API collects, aggregates and indexes resource configuration and operational metadata of resources and services in GCP, including the status and relations, and makes it actionable to enable rich, out of the box monitoring for Cloud." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" }, { "name": "projects/1234000173/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/1234000173" } ], "nextPageToken": "choKGEIWb3Nsb2dpbi5nb29nbGVhcGlzLmNvbQ==" } ================================================ FILE: test-data/gke3/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CLUSTER = cluster-1 CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION = us-central1 ZONE = us-central1-c FAKE_PROJECT_ID_SUFFIX = gggg FAKE_PROJECT_NR = 12340032 FAKE_ORG_ID = 11112232 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/container-cluster-$(CLUSTER).json \ json-dumps/logging-entries-1.json \ json-dumps/logging-entries-2.json \ json-dumps/services.json \ json-dumps/project.json include ../Makefile.inc json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/container-cluster-$(CLUSTER).json: $(CURL) -fsS \ 'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(ZONE)/clusters/$(CLUSTER)' \ | $(JSON_CLEANER) clusters \ | $(SED_SUBST_FAKE) >$@ # If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found. define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " timestamp > \"2024-06-30T01:00:00+00:00\" AND timestamp < \"2024-06-30T23:00:00+00:00\" AND \"IP_SPACE_EXHAUSTED\" AND \"$(CLUSTER)\" " } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ define LOGGING_ENTRIES_BODY_1 { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " timestamp > \"2024-06-30T01:00:00+00:00\" AND timestamp < \"2024-06-30T23:00:00+00:00\" AND jsonPayload.resourceName=\"//container.googleapis.com/projects/$(PROJECT_ID)/zones/us-central1-c/clusters/$(CLUSTER)\" AND logName=\"projects/$(PROJECT_ID)/logs/networkanalyzer.googleapis.com%2Fanalyzer_reports\" " } endef export LOGGING_ENTRIES_BODY_1 json-dumps/logging-entries-2.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY_1" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gke3/cluster-1.tf ================================================ /** * Copyright 2023 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. */ # Create the GKE cluster resource "google_container_cluster" "primary" { project = google_project.project.project_id name = "cluster-1" location = var.zone initial_node_count = 4 # Standard Cluster Configuration (default) remove_default_node_pool = true # Network Policy network_policy { enabled = true } network = "default" subnetwork = google_compute_subnetwork.public_subnet.name } # Create the node pool resource "google_container_node_pool" "primary_pool" { project = google_project.project.project_id name = "primary-node-pool" cluster = google_container_cluster.primary.name location = var.zone node_count = 4 # Initial node count # Node Configuration max_pods_per_node = 110 # Node Management management { auto_repair = true auto_upgrade = true } } ================================================ FILE: test-data/gke3/json-dumps/container-cluster-cluster-1.json ================================================ { "addonsConfig": { "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": {} }, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": {}, "clusterIpv4Cidr": "10.40.0.0/14", "conditions": [ { "canonicalCode": "RESOURCE_EXHAUSTED", "message": "[IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. " }, { "canonicalCode": "RESOURCE_EXHAUSTED", "message": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. ." } ], "createTime": "2024-06-30T14:14:28+00:00", "currentMasterVersion": "1.29.4-gke.1043002", "currentNodeCount": 4, "currentNodeVersion": "1.29.4-gke.1043002", "databaseEncryption": { "currentState": "CURRENT_STATE_DECRYPTED", "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "35.239.14.64", "enterpriseConfig": { "clusterTier": "STANDARD" }, "etag": "21e8b973-68bf-485b-84c9-ad5029ac0e01", "expireTime": "2024-07-14T14:20:47+00:00", "id": "e478debbaec74a638eb439fbae5ac7cb4c51ffa27b3049868a20bc5aa1d3c64c", "initialClusterVersion": "1.29.4-gke.1043002", "initialNodeCount": 4, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/instanceGroupManagers/gke-cluster-1-default-pool-a6ea5e55-grp" ], "ipAllocationPolicy": { "clusterIpv4Cidr": "10.40.0.0/14", "clusterIpv4CidrBlock": "10.40.0.0/14", "clusterSecondaryRangeName": "gke-cluster-1-pods-e478debb", "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "34.118.224.0/20", "servicesIpv4CidrBlock": "34.118.224.0/20", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "us-central1-c", "locations": [ "us-central1-c" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clientCertificateConfig": {}, "clusterCaCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMVENDQXBXZ0F3SUJBZ0lSQUlmRVdNQ3I5RkE2dzVhOWI2ZjJUUjh3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa05qRXhaV1JoTUdNdE4yWTBZaTAwWVRkaExUbG1NREV0TVRnMVlUQXhaVEl3TldObQpNQ0FYRFRJME1EWXpNREV6TVRReU9Gb1lEekl3TlRRd05qSXpNVFF4TkRJNFdqQXZNUzB3S3dZRFZRUURFeVEyCk1URmxaR0V3WXkwM1pqUmlMVFJoTjJFdE9XWXdNUzB4T0RWaE1ERmxNakExWTJZd2dnR2lNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCandBd2dnR0tBb0lCZ1FDdCtkUXlmZVBJa0tmbXd3RVRjR2Y1MDREbHJqZURhSW9UTUVBSApLZTN6bDErMkltb2lJVFgwdTNZRjFXNlhFMU9odktVRTB2bzNIMW0wdFMrTzBIWVdyNDdobklqZWVDNXA1RnVnCnM5NDRqakdyR3kvZDVSWjJDODRTYjlhYVpld3cxb242QXJVY0FSTnJycm9VTkVreithWExMNXp5VkJBYW1IRFAKanJVMkJmenE2OWMzT21wUDRyc3dkYmpsSHRHTXZjL1Z0RVJ4VGRRd01BMnlZRkVHME5ISFFSSlUwN0l5TzBKZQovRVk0M2NRdSsxN0VLMjVHaWVHNGxtd3FqNnpjaERmTkdNZ1dwK2k5elNNQjVMUjBYYkNQU1NaRTNhNFN6L1VCCk9TeTVnc0U1QzJBdmRCd3d5UktFaVBMbFZkamd2dTg0U0JnYmtoZERQQ1FvSGtqKzBIRUdaaE52Tnl3Z3JFMEcKVk1IVW9OM2R0MjQwL0JCR2JGT0x3Ly9WLzY1L3JxWUlMVS9QMmVmc0VIaWtJb3JlYzlMTTlvU3hmUHNGVWZEawo5eHI3VmFvaHNRRlA0SmwybzMyNHI0cW9OL3lJRmVDUmNiZkhNNTdwYlFoWjVmajNIa25zNEZMaDRDZnNrOUp2CkVMSGw0QzBLcXE4cVd6aVdPZmNMWDhkVFM0Y0NBd0VBQWFOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdJRU1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQ1BOTmhTbTg2VEdQRmR0S09KYjhzWWNoU0J4TUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQmdRQWxkM0k1aU9pMEV3SEZ4THB0M3FYdi9mQkdicVV3LzA1bEsxbTMyQnY5ClpOL2RNa3VXMlFYNXRIcElRUDh2SGlubGZSSjhlL0pKbFhSa09HYjRJSzBjdEtCMFUveUk0NUFkc3NTSDlXankKMEJGWWZtVlNqTVRBdFo2RDN6bkVkdllvK09WUk52bDZSYjJoZG5pcUNwYUNteHMrZktrbWthZFN5cTJ6YldJdgpBNUJXcE5pT2EvUkhzd01DVkFaOUhpUFRlZ0NlMmFYcE1kRU5VdTBFMFNuelpNTW9wTlU1eDkwRW5SajFzdERKCm1JWnBGeGRob0pxV2FSdENDVDloS0hUdmFpdFJ4MGN4TlFqajBSRjhsRzNxMzk1VWJnZ0pDekQ2dWlsejM3dXgKR1lKdTEzWno5UjlFRzJxWFhCU25FbEVSNU96RjhheVplT0Y4a2xRWUN1dU5RazgvSmgyamhyVjdFOG5mVk1KcwpDWldYR2dMcWxRMFFXZmZ6OGV2LzVYVlVlRUlSWld2Ym1Vc01QTEtseWFoU05neWYxQzhweEJlY3ZxWGhrdk80CnB0MS8raXJrTDdkaWZIdGwzVTJkdW8vUFdBM2FHUGpWL3BVN3A0ZjM3Ukd4M1Q0UTNHekUvdzRRZmQxMlBtdWIKWEwyWnl3c1R2WG1sV3AxR2NHVGRyc2M9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" }, "masterAuthorizedNetworksConfig": { "gcpPublicCidrsAccessEnabled": true }, "monitoringConfig": { "advancedDatapathObservabilityConfig": {}, "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] }, "managedPrometheusConfig": { "enabled": true } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "cluster-1", "network": "default", "networkConfig": { "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke3-gggg/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet" }, "networkPolicy": { "enabled": true }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "conditions": [ { "canonicalCode": "RESOURCE_EXHAUSTED", "message": "[IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. " }, { "canonicalCode": "RESOURCE_EXHAUSTED", "message": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. ." } ], "config": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "etag": "4f4a8d8f-c3cf-41f8-8825-19eba6fdc455", "initialNodeCount": 4, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/instanceGroupManagers/gke-cluster-1-default-pool-a6ea5e55-grp" ], "locations": [ "us-central1-c" ], "management": { "autoRepair": true, "autoUpgrade": true }, "maxPodsConstraint": { "maxPodsPerNode": "110" }, "name": "default-pool", "networkConfig": { "enablePrivateNodes": false, "podIpv4CidrBlock": "10.40.0.0/14", "podRange": "gke-cluster-1-pods-e478debb" }, "podIpv4CidrSize": 24, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool", "status": "ERROR", "statusMessage": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.29.4-gke.1043002" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "privateEndpoint": "10.0.0.2", "publicEndpoint": "35.239.14.64" }, "releaseChannel": { "channel": "REGULAR" }, "securityPostureConfig": { "mode": "BASIC", "vulnerabilityMode": "VULNERABILITY_MODE_UNSPECIFIED" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1", "servicesIpv4Cidr": "34.118.224.0/20", "shieldedNodes": { "enabled": true }, "status": "ERROR", "statusMessage": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .", "subnetwork": "public-subnet", "zone": "us-central1-c" } ================================================ FILE: test-data/gke3/json-dumps/container-clusters.json ================================================ { "addonsConfig": { "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": {} }, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": {}, "clusterIpv4Cidr": "10.40.0.0/14", "conditions": [ { "canonicalCode": "RESOURCE_EXHAUSTED", "message": "[IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. " }, { "canonicalCode": "RESOURCE_EXHAUSTED", "message": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. ." } ], "createTime": "2024-06-30T14:14:28+00:00", "currentMasterVersion": "1.29.4-gke.1043002", "currentNodeCount": 4, "currentNodeVersion": "1.29.4-gke.1043002", "databaseEncryption": { "currentState": "CURRENT_STATE_DECRYPTED", "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "35.239.14.64", "enterpriseConfig": { "clusterTier": "STANDARD" }, "etag": "21e8b973-68bf-485b-84c9-ad5029ac0e01", "expireTime": "2024-07-14T14:20:47+00:00", "id": "e478debbaec74a638eb439fbae5ac7cb4c51ffa27b3049868a20bc5aa1d3c64c", "initialClusterVersion": "1.29.4-gke.1043002", "initialNodeCount": 4, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/instanceGroupManagers/gke-cluster-1-default-pool-a6ea5e55-grp" ], "ipAllocationPolicy": { "clusterIpv4Cidr": "10.40.0.0/14", "clusterIpv4CidrBlock": "10.40.0.0/14", "clusterSecondaryRangeName": "gke-cluster-1-pods-e478debb", "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "34.118.224.0/20", "servicesIpv4CidrBlock": "34.118.224.0/20", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "a9dc16a7", "legacyAbac": {}, "location": "us-central1-c", "locations": [ "us-central1-c" ], "loggingConfig": { "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS", "WORKLOADS" ] } }, "loggingService": "logging.googleapis.com/kubernetes", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clientCertificateConfig": {}, "clusterCaCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMVENDQXBXZ0F3SUJBZ0lSQUlmRVdNQ3I5RkE2dzVhOWI2ZjJUUjh3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa05qRXhaV1JoTUdNdE4yWTBZaTAwWVRkaExUbG1NREV0TVRnMVlUQXhaVEl3TldObQpNQ0FYRFRJME1EWXpNREV6TVRReU9Gb1lEekl3TlRRd05qSXpNVFF4TkRJNFdqQXZNUzB3S3dZRFZRUURFeVEyCk1URmxaR0V3WXkwM1pqUmlMVFJoTjJFdE9XWXdNUzB4T0RWaE1ERmxNakExWTJZd2dnR2lNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCandBd2dnR0tBb0lCZ1FDdCtkUXlmZVBJa0tmbXd3RVRjR2Y1MDREbHJqZURhSW9UTUVBSApLZTN6bDErMkltb2lJVFgwdTNZRjFXNlhFMU9odktVRTB2bzNIMW0wdFMrTzBIWVdyNDdobklqZWVDNXA1RnVnCnM5NDRqakdyR3kvZDVSWjJDODRTYjlhYVpld3cxb242QXJVY0FSTnJycm9VTkVreithWExMNXp5VkJBYW1IRFAKanJVMkJmenE2OWMzT21wUDRyc3dkYmpsSHRHTXZjL1Z0RVJ4VGRRd01BMnlZRkVHME5ISFFSSlUwN0l5TzBKZQovRVk0M2NRdSsxN0VLMjVHaWVHNGxtd3FqNnpjaERmTkdNZ1dwK2k5elNNQjVMUjBYYkNQU1NaRTNhNFN6L1VCCk9TeTVnc0U1QzJBdmRCd3d5UktFaVBMbFZkamd2dTg0U0JnYmtoZERQQ1FvSGtqKzBIRUdaaE52Tnl3Z3JFMEcKVk1IVW9OM2R0MjQwL0JCR2JGT0x3Ly9WLzY1L3JxWUlMVS9QMmVmc0VIaWtJb3JlYzlMTTlvU3hmUHNGVWZEawo5eHI3VmFvaHNRRlA0SmwybzMyNHI0cW9OL3lJRmVDUmNiZkhNNTdwYlFoWjVmajNIa25zNEZMaDRDZnNrOUp2CkVMSGw0QzBLcXE4cVd6aVdPZmNMWDhkVFM0Y0NBd0VBQWFOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdJRU1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQ1BOTmhTbTg2VEdQRmR0S09KYjhzWWNoU0J4TUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQmdRQWxkM0k1aU9pMEV3SEZ4THB0M3FYdi9mQkdicVV3LzA1bEsxbTMyQnY5ClpOL2RNa3VXMlFYNXRIcElRUDh2SGlubGZSSjhlL0pKbFhSa09HYjRJSzBjdEtCMFUveUk0NUFkc3NTSDlXankKMEJGWWZtVlNqTVRBdFo2RDN6bkVkdllvK09WUk52bDZSYjJoZG5pcUNwYUNteHMrZktrbWthZFN5cTJ6YldJdgpBNUJXcE5pT2EvUkhzd01DVkFaOUhpUFRlZ0NlMmFYcE1kRU5VdTBFMFNuelpNTW9wTlU1eDkwRW5SajFzdERKCm1JWnBGeGRob0pxV2FSdENDVDloS0hUdmFpdFJ4MGN4TlFqajBSRjhsRzNxMzk1VWJnZ0pDekQ2dWlsejM3dXgKR1lKdTEzWno5UjlFRzJxWFhCU25FbEVSNU96RjhheVplT0Y4a2xRWUN1dU5RazgvSmgyamhyVjdFOG5mVk1KcwpDWldYR2dMcWxRMFFXZmZ6OGV2LzVYVlVlRUlSWld2Ym1Vc01QTEtseWFoU05neWYxQzhweEJlY3ZxWGhrdk80CnB0MS8raXJrTDdkaWZIdGwzVTJkdW8vUFdBM2FHUGpWL3BVN3A0ZjM3Ukd4M1Q0UTNHekUvdzRRZmQxMlBtdWIKWEwyWnl3c1R2WG1sV3AxR2NHVGRyc2M9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" }, "masterAuthorizedNetworksConfig": { "gcpPublicCidrsAccessEnabled": true }, "monitoringConfig": { "advancedDatapathObservabilityConfig": {}, "componentConfig": { "enableComponents": [ "SYSTEM_COMPONENTS" ] }, "managedPrometheusConfig": { "enabled": true } }, "monitoringService": "monitoring.googleapis.com/kubernetes", "name": "cluster-1", "network": "default", "networkConfig": { "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke3-gggg/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet" }, "networkPolicy": { "enabled": true }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "conditions": [ { "canonicalCode": "RESOURCE_EXHAUSTED", "message": "[IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. " }, { "canonicalCode": "RESOURCE_EXHAUSTED", "message": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. ." } ], "config": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "etag": "4f4a8d8f-c3cf-41f8-8825-19eba6fdc455", "initialNodeCount": 4, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/instanceGroupManagers/gke-cluster-1-default-pool-a6ea5e55-grp" ], "locations": [ "us-central1-c" ], "management": { "autoRepair": true, "autoUpgrade": true }, "maxPodsConstraint": { "maxPodsPerNode": "110" }, "name": "default-pool", "networkConfig": { "enablePrivateNodes": false, "podIpv4CidrBlock": "10.40.0.0/14", "podRange": "gke-cluster-1-pods-e478debb" }, "podIpv4CidrSize": 24, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool", "status": "ERROR", "statusMessage": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.29.4-gke.1043002" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "privateEndpoint": "10.0.0.2", "publicEndpoint": "35.239.14.64" }, "releaseChannel": { "channel": "REGULAR" }, "securityPostureConfig": { "mode": "BASIC", "vulnerabilityMode": "VULNERABILITY_MODE_UNSPECIFIED" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1", "servicesIpv4Cidr": "34.118.224.0/20", "shieldedNodes": { "enabled": true }, "status": "ERROR", "statusMessage": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .", "subnetwork": "public-subnet", "zone": "us-central1-c" } ================================================ FILE: test-data/gke3/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 8, "message": "Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. ." }, "serviceName": "container.googleapis.com", "methodName": "google.container.v1.ClusterManager.CreateCluster", "resourceName": "projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1", "metadata": { "operationType": "CREATE_CLUSTER" }, "resourceLocation": { "currentLocations": [ "us-central1-c" ] }, "policyViolationInfo": { "orgPolicyViolationInfo": {} } }, "insertId": "1vz9lr0ddn5x", "resource": { "type": "gke_cluster", "labels": { "cluster_name": "cluster-1", "location": "us-central1-c", "project_id": "gcpdiag-gke3-gggg" } }, "timestamp": "2024-06-30T14:20:47.243847225Z", "severity": "ERROR", "logName": "projects/gcpdiag-gke3-gggg/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1719756871219-5ff98f7e-b0ce-474c-9bb4-589539c82f8b", "producer": "container.googleapis.com", "last": true }, "receiveTimestamp": "2024-06-30T14:20:47.628381432Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 8, "message": "IP_SPACE_EXHAUSTED", "details": [ { "@type": "type.googleapis.com/google.protobuf.Struct", "value": { "ipSpaceExhausted": { "networkOrSubnetworkResource": { "resourceType": "SUBNETWORK", "resourceName": "public-subnet", "project": { "canonicalProjectId": "12340032" }, "scope": { "scopeType": "REGION", "scopeName": "us-central1" } } } } } ] }, "authenticationInfo": { "principalEmail": "12340032@cloudservices.gserviceaccount.com" }, "requestMetadata": { "callerSuppliedUserAgent": "GCE Managed Instance Group for GKE" }, "serviceName": "compute.googleapis.com", "methodName": "v1.compute.instances.insert", "resourceName": "projects/12340032/zones/us-central1-c/instances/gke-cluster-1-default-pool-a6ea5e55-h1ms", "request": { "@type": "type.googleapis.com/compute.instances.insert" } }, "insertId": "-1xf12idklrw", "resource": { "type": "gce_instance", "labels": { "instance_id": "859073022264137727", "zone": "us-central1-c", "project_id": "gcpdiag-gke3-gggg" } }, "timestamp": "2024-06-30T14:18:11.532599Z", "severity": "ERROR", "labels": { "compute.googleapis.com/root_trigger_id": "55a7363f-a765-44ee-b5d0-bb202ad26028" }, "logName": "projects/gcpdiag-gke3-gggg/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1719757072726-61c1c256b7a14-81165a82-dcab802f", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2024-06-30T14:18:11.809687227Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 8, "message": "IP_SPACE_EXHAUSTED", "details": [ { "@type": "type.googleapis.com/google.protobuf.Struct", "value": { "ipSpaceExhausted": { "networkOrSubnetworkResource": { "resourceType": "SUBNETWORK", "resourceName": "public-subnet", "project": { "canonicalProjectId": "12340032" }, "scope": { "scopeType": "REGION", "scopeName": "us-central1" } } } } } ] }, "authenticationInfo": { "principalEmail": "12340032@cloudservices.gserviceaccount.com" }, "requestMetadata": { "callerSuppliedUserAgent": "GCE Managed Instance Group for GKE" }, "serviceName": "compute.googleapis.com", "methodName": "v1.compute.instances.insert", "resourceName": "projects/12340032/zones/us-central1-c/instances/gke-cluster-1-default-pool-a6ea5e55-h1ms", "request": { "@type": "type.googleapis.com/compute.instances.insert" } }, "insertId": "-dldtrdddavm", "resource": { "type": "gce_instance", "labels": { "instance_id": "5206188492617209421", "project_id": "gcpdiag-gke3-gggg", "zone": "us-central1-c" } }, "timestamp": "2024-06-30T14:16:19.902626Z", "severity": "ERROR", "labels": { "compute.googleapis.com/root_trigger_id": "55a7363f-a765-44ee-b5d0-bb202ad26028" }, "logName": "projects/gcpdiag-gke3-gggg/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1719756962352-61c1c1ed74e79-90b4d504-11598e65", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2024-06-30T14:16:20.907825734Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 8, "message": "IP_SPACE_EXHAUSTED", "details": [ { "@type": "type.googleapis.com/google.protobuf.Struct", "value": { "ipSpaceExhausted": { "networkOrSubnetworkResource": { "resourceType": "SUBNETWORK", "resourceName": "public-subnet", "project": { "canonicalProjectId": "12340032" }, "scope": { "scopeType": "REGION", "scopeName": "us-central1" } } } } } ] }, "authenticationInfo": { "principalEmail": "12340032@cloudservices.gserviceaccount.com" }, "requestMetadata": { "callerSuppliedUserAgent": "GCE Managed Instance Group for GKE" }, "serviceName": "compute.googleapis.com", "methodName": "v1.compute.instances.insert", "resourceName": "projects/12340032/zones/us-central1-c/instances/gke-cluster-1-default-pool-a6ea5e55-h1ms", "request": { "@type": "type.googleapis.com/compute.instances.insert" } }, "insertId": "63u9b7dsccm", "resource": { "type": "gce_instance", "labels": { "instance_id": "1365058717064418922", "zone": "us-central1-c", "project_id": "gcpdiag-gke3-gggg" } }, "timestamp": "2024-06-30T14:15:58.474282Z", "severity": "ERROR", "labels": { "compute.googleapis.com/root_trigger_id": "55a7363f-a765-44ee-b5d0-bb202ad26028" }, "logName": "projects/gcpdiag-gke3-gggg/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1719756933300-61c1c1d1c0293-95105895-9001d39a", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2024-06-30T14:15:59.430056173Z" } ] } ================================================ FILE: test-data/gke3/json-dumps/logging-entries-2.json ================================================ {} ================================================ FILE: test-data/gke3/json-dumps/project.json ================================================ { "name": "projects/12340032", "parent": "folders/1234566", "projectId": "gcpdiag-gke3-gggg", "state": "ACTIVE", "displayName": "gcpdiag-gke3-runbook", "createTime": "2024-06-30T13:58:04.756870Z", "updateTime": "2024-06-30T13:58:04.756870Z", "etag": "W/\"1fdd0dc4fcdba7ec\"", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/gke3/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340032/services/analyticshub.googleapis.com", "config": { "name": "analyticshub.googleapis.com", "title": "Analytics Hub API", "documentation": { "summary": "Exchange data and analytics assets securely and efficiently." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "artifactregistry.googleapis.com/Location", "displayName": "Artifact Registry Location", "description": "A location in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "artifactregistry.googleapis.com/Project", "displayName": "Artifact Registry Project", "description": "A Cloud project in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "BETA" }, { "type": "artifactregistry.googleapis.com/Repository", "displayName": "Artifact Registry Repository", "description": "A repository in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "repository_id", "description": "The identifier of the Artifact Registry repository, such as \"my_repository\"." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_region_upstream_host_reads", "artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/region_upstream_host_reads", "artifactregistry.googleapis.com/us_multi_region_upstream_host_reads" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Project", "metrics": [ "artifactregistry.googleapis.com/project/api/request_count", "artifactregistry.googleapis.com/project/api/request_latencies", "artifactregistry.googleapis.com/project/request_count", "artifactregistry.googleapis.com/project/request_latencies" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Repository", "metrics": [ "artifactregistry.googleapis.com/repository/api/request_count", "artifactregistry.googleapis.com/repository/api/request_latencies", "artifactregistry.googleapis.com/repository/request_count", "artifactregistry.googleapis.com/repository/request_latencies", "artifactregistry.googleapis.com/repository/size" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquery.googleapis.com/Table", "displayName": "BigQuery Table Resource.", "description": "BigQuery Table Resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The cloud location of the BigQuery table." }, { "key": "table_reference", "description": "The table reference in the format of project_id:dataset_id.table_id for the BigQuery table." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/Location", "displayName": "CheckIamPolicy Request Location", "description": "A BigQuery Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget", "description": "Differential Privacy Budget.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." }, { "key": "multi_region", "description": "The multi-region identifier for the associated resource (e.g \"us\", \"eu\"). Used only for multi-region quota metrics." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget External", "description": "Differential Privacy Budget exposed externally to provide privacy budget metrics.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded", "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget", "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit" ] }, { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/privacybudget/dp_delta_budget", "bigquery.googleapis.com/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/bigqueryconnection.googleapis.com", "config": { "name": "bigqueryconnection.googleapis.com", "title": "BigQuery Connection API", "documentation": { "summary": "Allows users to manage BigQuery connections to external data sources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/bigquerydatapolicy.googleapis.com", "config": { "name": "bigquerydatapolicy.googleapis.com", "title": "BigQuery Data Policy API", "documentation": { "summary": "Allows users to manage BigQuery data policies." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/bigqueryreservation.googleapis.com", "config": { "name": "bigqueryreservation.googleapis.com", "title": "BigQuery Reservation API", "documentation": { "summary": "A service to modify your BigQuery flat-rate reservations." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquerystorage.googleapis.com/DataflowWrite", "displayName": "BigQuery Storage Write API metrics for Dataflow jobs.", "description": "BigQuery Storage Write API metrics for Dataflow jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job." }, { "key": "location", "description": "The BigQuery region in which the Storage API server locates." }, { "key": "job_name", "description": "The name of the Dataflow job this worker belongs to." }, { "key": "job_id", "description": "The id of the dataflow job the worker belongs to." }, { "key": "worker_id", "description": "The ID of the worker, unique for this job_id." }, { "key": "destination_project", "description": "The project of BigQuery destination table of the Dataflow job." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquerystorage.googleapis.com/DataflowWrite", "metrics": [ "bigquerystorage.googleapis.com/dataflow_write/request_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/connection_results_count", "bigquerystorage.googleapis.com/dataflow_write/server_side_latencies", "bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies", "bigquerystorage.googleapis.com/dataflow_write/concurrent_connections" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_connections_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "container.googleapis.com/Cluster", "displayName": "Kubernetes Cluster Limits", "description": "Kubernetes Cluster.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." } ], "launchStage": "BETA" }, { "type": "container.googleapis.com/NodePool", "displayName": "GKE Node Pool", "description": "GKE Node Pool.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." }, { "key": "node_pool_name", "description": "Node pool name." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/containers_per_cluster_autopilot", "container.googleapis.com/quota/containers_per_cluster_standard", "container.googleapis.com/quota/etcd_database_size_bytes", "container.googleapis.com/quota/nodes_per_cluster", "container.googleapis.com/quota/pods_per_cluster_autopilot", "container.googleapis.com/quota/pods_per_cluster_standard", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded", "container.googleapis.com/quota/quota/nodes_per_cluster/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/nodes_per_node_pool", "container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded" ] }, { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/containers_per_cluster_standard/limit", "container.googleapis.com/quota/quota/containers_per_cluster_standard/usage", "container.googleapis.com/quota/quota/etcd_database_size_bytes/limit", "container.googleapis.com/quota/quota/etcd_database_size_bytes/usage", "container.googleapis.com/quota/quota/etcd_database_size_gib/limit", "container.googleapis.com/quota/quota/etcd_database_size_gib/usage", "container.googleapis.com/quota/quota/nodes_per_cluster/limit", "container.googleapis.com/quota/quota/nodes_per_cluster/usage", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/pods_per_cluster_standard/limit", "container.googleapis.com/quota/quota/pods_per_cluster_standard/usage" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/quota/nodes_per_node_pool/limit", "container.googleapis.com/quota/quota/nodes_per_node_pool/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": { "summary": "Stream images stored in Artifact Registry to GKE\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/containerthreatdetection.googleapis.com", "config": { "name": "containerthreatdetection.googleapis.com", "title": "Container Threat Detection API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/dataform.googleapis.com", "config": { "name": "dataform.googleapis.com", "title": "Dataform API", "documentation": { "summary": "Service to develop, version control, and operationalize SQL pipelines in BigQuery." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/dataplex.googleapis.com", "config": { "name": "dataplex.googleapis.com", "title": "Cloud Dataplex API", "documentation": { "summary": "Dataplex API is used to manage the lifecycle of data lakes." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataplex.googleapis.com/Lake", "displayName": "Cloud Dataplex Lake", "description": "A Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of this Lake resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Zone", "displayName": "Cloud Dataplex Zone", "description": "A Zone within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of this Zone resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Asset", "displayName": "Cloud Dataplex Asset", "description": "An Asset within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of the Zone resource containing this resource." }, { "key": "asset_id", "description": "The identifier of this Asset resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Environment", "displayName": "Cloud Dataplex Environment", "description": "An Environment within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "environment_id", "description": "The identifier of this Environment resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataplex.googleapis.com/Lake", "metrics": [ "dataplex.googleapis.com/lake/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Zone", "metrics": [ "dataplex.googleapis.com/zone/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Asset", "metrics": [ "dataplex.googleapis.com/asset/requires_action", "dataplex.googleapis.com/asset/active", "dataplex.googleapis.com/asset/data_items", "dataplex.googleapis.com/asset/data_size", "dataplex.googleapis.com/asset/tables", "dataplex.googleapis.com/asset/filesets", "dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates", "dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/dns.googleapis.com", "config": { "name": "dns.googleapis.com", "title": "Cloud DNS API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/gkebackup.googleapis.com", "config": { "name": "gkebackup.googleapis.com", "title": "Backup for GKE API", "documentation": { "summary": "Backup for GKE is a managed Kubernetes workload backup and restore service\nfor GKE clusters." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "gkebackup.googleapis.com/BackupPlan", "displayName": "GKE Backup Plan", "description": "A backup plan provides configuration, location, and management functions for a sequence of backups.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this backupPlan resides." }, { "key": "backup_plan_id", "description": "The name of the backupPlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/RestorePlan", "displayName": "GKE Restore Plan", "description": "A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this restorePlan resides." }, { "key": "restore_plan_id", "description": "The name of the restorePlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/Project", "displayName": "Backup for GKE Project", "description": "A Project in the Backup for GKE API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource." }, { "key": "location", "description": "The Google Cloud location of the resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "gkebackup.googleapis.com/BackupPlan", "metrics": [ "gkebackup.googleapis.com/backup_created_count", "gkebackup.googleapis.com/backup_deleted_count", "gkebackup.googleapis.com/backup_completion_times" ] }, { "monitoredResource": "gkebackup.googleapis.com/RestorePlan", "metrics": [ "gkebackup.googleapis.com/restore_created_count" ] }, { "monitoredResource": "gkebackup.googleapis.com/Project", "metrics": [ "gkebackup.googleapis.com/internal/backup_plan_created_count", "gkebackup.googleapis.com/internal/backup_plan_existence" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" }, { "type": "iam.googleapis.com/WorkforcePoolProvider", "displayName": "Workforce Identity Pool Provider", "description": "A workforce identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud organization associated with this resource." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workforce pool parent resource." }, { "key": "provider_id", "description": "The ID of the workforce pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] }, { "monitoredResource": "iam.googleapis.com/WorkforcePoolProvider", "metrics": [ "iam.googleapis.com/workforce_identity_federation/count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes", "logging.googleapis.com/billing/stored_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" and \"cluster\" are supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested", "monitoring.googleapis.com/internal/billing/gke_enterprise_samples_ingested", "monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested", "monitoring.googleapis.com/internal/stats/filtered_sample_count", "monitoring.googleapis.com/internal/stats/filtered_byte_count", "monitoring.googleapis.com/internal/stats/metrics_queried_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/networkconnectivity.googleapis.com", "config": { "name": "networkconnectivity.googleapis.com", "title": "Network Connectivity API", "documentation": { "summary": "This API enables connectivity with and between Google Cloud resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "networkconnectivity.googleapis.com/Hub", "displayName": "Network Connectivity Hub", "description": "A Network Connectivity hub.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container that this hub is in." }, { "key": "location", "description": "The identifier of the location that this hub is in." }, { "key": "hub_id", "description": "The identifier of this hub." } ], "launchStage": "GA" }, { "type": "networkconnectivity.googleapis.com/RouteTable", "displayName": "Network Connectivity Route Table", "description": "A route table associated with a Network Connectivity hub.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this route table." }, { "key": "location", "description": "The identifier of the location that this route table is in." }, { "key": "hub_id", "description": "The identifier of the hub that is associated with this route table." }, { "key": "route_table_id", "description": "The identifier of this route table." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "networkconnectivity.googleapis.com/Hub", "metrics": [ "networkconnectivity.googleapis.com/active_vpc_spokes_per_hub", "networkconnectivity.googleapis.com/groups_per_hub", "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/exceeded", "networkconnectivity.googleapis.com/quota/groups_per_hub/exceeded", "networkconnectivity.googleapis.com/quota/static_routes_per_hub/exceeded", "networkconnectivity.googleapis.com/static_routes_per_hub" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/RouteTable", "metrics": [ "networkconnectivity.googleapis.com/quota/routes_per_route_table/exceeded", "networkconnectivity.googleapis.com/routes_per_route_table" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/Hub", "metrics": [ "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/limit", "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/usage", "networkconnectivity.googleapis.com/quota/groups_per_hub/limit", "networkconnectivity.googleapis.com/quota/groups_per_hub/usage", "networkconnectivity.googleapis.com/quota/static_routes_per_hub/limit", "networkconnectivity.googleapis.com/quota/static_routes_per_hub/usage" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/RouteTable", "metrics": [ "networkconnectivity.googleapis.com/quota/routes_per_route_table/limit", "networkconnectivity.googleapis.com/quota/routes_per_route_table/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/networkmanagement.googleapis.com", "config": { "name": "networkmanagement.googleapis.com", "title": "Network Management API", "documentation": { "summary": "The Network Management API provides a collection of network performance monitoring and diagnostic capabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" }, { "name": "projects/12340032/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340032" } ] } ================================================ FILE: test-data/gke3/network.tf ================================================ /** * Copyright 2023 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. */ # Public Subnet resource "google_compute_subnetwork" "public_subnet" { name = "public-subnet" project = google_project.project.project_id network = "default" ip_cidr_range = "10.0.0.0/29" # Adjust as needed region = var.region } resource "google_compute_subnetwork" "public_subnet-2" { name = "public-subnet-2" project = google_project.project.project_id network = "default" ip_cidr_range = "10.10.0.0/24" # Adjust as needed region = var.region } ================================================ FILE: test-data/gke3/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 numeric = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag-gke3-runbook" project_id = var.project_id != "" ? var.project_id : "gcpdiag-gke3-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null //billing_account = var.billing_account_id labels = { gcpdiag : "test" } lifecycle { ignore_changes = all } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "logging" { project = google_project.project.project_id service = "logging.googleapis.com" } data "google_compute_default_service_account" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] } resource "google_project_service" "container" { project = google_project.project.project_id service = "container.googleapis.com" } resource "google_project_service" "networkmanagement" { project = google_project.project.project_id service = "networkmanagement.googleapis.com" } resource "google_project_service" "monitoring" { project = google_project.project.project_id service = "monitoring.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gke3/variables.tf ================================================ /** * Copyright 2023 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. */ variable "org_id" {} variable "project_id" { //default = "use-an-existing-test-project" } variable "billing_account_id" {} variable "region" { default = "us-central1" } variable "zone" { default = "us-central1-c" } variable "folder_id" { default = "" } ================================================ FILE: test-data/gke4/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner REGION_1 = europe-west4 ZONE_1 = europe-west4-a ZONE_EMPTY = europe-west1-b SUBNETWORK_1 = gke1-subnet FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340033 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/container-clusters.json \ json-dumps/services.json \ json-dumps/project.json \ json-dumps/logging-entries-1.json include ../Makefile.inc json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/container-clusters.json: $(CURL) -fsS \ 'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/clusters' \ | $(JSON_CLEANER) clusters \ | $(SED_SUBST_FAKE) >$@ json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/gke4/cluster.tf ================================================ /** * Copyright 2021 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. */ # GKE cluster with monitoring disabled # And with small pod CIDR resource "google_compute_subnetwork" "secondary_ip_range_pod" { project = google_project.project.project_id depends_on = [google_project_service.compute] network = "default" name = "gke1-subnet" ip_cidr_range = "192.168.0.0/24" region = "europe-west4" secondary_ip_range { range_name = "gke1-secondary-range-pod" ip_cidr_range = "192.168.1.0/24" } secondary_ip_range { range_name = "gke1-secondary-range-svc" ip_cidr_range = "192.168.2.0/24" } } resource "google_container_cluster" "gke1" { provider = google-beta project = google_project.project.project_id depends_on = [google_project_service.container] name = "gke1" subnetwork = google_compute_subnetwork.secondary_ip_range_pod.name location = "europe-west4-a" release_channel { channel = "UNSPECIFIED" } ip_allocation_policy { cluster_secondary_range_name = "gke1-secondary-range-pod" services_secondary_range_name = "gke1-secondary-range-svc" } initial_node_count = 1 cluster_telemetry { type = "DISABLED" } resource_labels = { foo = "bar" } addons_config { http_load_balancing { disabled = true } } } ================================================ FILE: test-data/gke4/json-dumps/container-clusters.json ================================================ { "clusters": [ { "addonsConfig": { "gcePersistentDiskCsiDriverConfig": { "enabled": true }, "httpLoadBalancing": { "disabled": true }, "kubernetesDashboard": { "disabled": true }, "networkPolicyConfig": { "disabled": true } }, "autopilot": {}, "autoscaling": { "autoscalingProfile": "BALANCED" }, "binaryAuthorization": {}, "clusterIpv4Cidr": "192.168.1.0/24", "createTime": "2024-08-26T23:40:28+00:00", "currentMasterVersion": "1.29.7-gke.1104000", "currentNodeCount": 1, "currentNodeVersion": "1.29.7-gke.1104000", "databaseEncryption": { "currentState": "CURRENT_STATE_DECRYPTED", "state": "DECRYPTED" }, "defaultMaxPodsConstraint": { "maxPodsPerNode": "110" }, "endpoint": "192.168.1.1", "enterpriseConfig": { "clusterTier": "STANDARD" }, "etag": "697b290d-a99a-4d66-8cdf-0ff3224950fc", "id": "4c6788ad13f64b22a26a94d4d9f85bd51641004e2bef4289a371b14ca9a549b7", "initialClusterVersion": "1.29.7-gke.1104000", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke4-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-2b25036d-grp" ], "ipAllocationPolicy": { "clusterIpv4Cidr": "192.168.1.0/24", "clusterIpv4CidrBlock": "192.168.1.0/24", "clusterSecondaryRangeName": "gke1-secondary-range-pod", "defaultPodIpv4RangeUtilization": 1, "podCidrOverprovisionConfig": {}, "servicesIpv4Cidr": "192.168.2.0/24", "servicesIpv4CidrBlock": "192.168.2.0/24", "servicesSecondaryRangeName": "gke1-secondary-range-svc", "stackType": "IPV4", "useIpAliases": true }, "labelFingerprint": "b5e2ac10", "legacyAbac": {}, "location": "europe-west4-a", "locations": [ "europe-west4-a" ], "loggingConfig": { "componentConfig": {} }, "loggingService": "none", "maintenancePolicy": { "resourceVersion": "e3b0c442" }, "masterAuth": { "clientCertificateConfig": {}, "clusterCaCertificate": "REDACTED" }, "masterAuthorizedNetworksConfig": { "gcpPublicCidrsAccessEnabled": true }, "monitoringConfig": { "advancedDatapathObservabilityConfig": {}, "componentConfig": { "enableComponents": [ "STORAGE", "HPA", "POD", "DAEMONSET", "DEPLOYMENT", "STATEFULSET", "KUBELET", "CADVISOR" ] }, "managedPrometheusConfig": { "enabled": true } }, "monitoringService": "none", "name": "gke1", "network": "default", "networkConfig": { "defaultSnatStatus": {}, "network": "projects/gcpdiag-gke4-aaaa/global/networks/default", "serviceExternalIpsConfig": {}, "subnetwork": "projects/gcpdiag-gke4-aaaa/regions/europe-west4/subnetworks/gke1-subnet" }, "nodeConfig": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "nodePoolDefaults": { "nodeConfigDefaults": { "loggingConfig": { "variantConfig": { "variant": "DEFAULT" } } } }, "nodePools": [ { "config": { "diskSizeGb": 100, "diskType": "pd-balanced", "imageType": "COS_CONTAINERD", "machineType": "e2-medium", "metadata": { "disable-legacy-endpoints": "true" }, "oauthScopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ], "serviceAccount": "default", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true }, "windowsNodeConfig": {} }, "etag": "c26f182f-e85b-49ff-b9b5-1be137f0fae2", "initialNodeCount": 1, "instanceGroupUrls": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-gke4-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-2b25036d-grp" ], "locations": [ "europe-west4-a" ], "management": { "autoRepair": true, "autoUpgrade": true }, "maxPodsConstraint": { "maxPodsPerNode": "110" }, "name": "default-pool", "networkConfig": { "podIpv4CidrBlock": "192.168.1.0/24", "podIpv4RangeUtilization": 1, "podRange": "gke1-secondary-range-pod" }, "podIpv4CidrSize": 24, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke4-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool", "status": "RUNNING", "upgradeSettings": { "maxSurge": 1, "strategy": "SURGE" }, "version": "1.29.7-gke.1104000" } ], "notificationConfig": { "pubsub": {} }, "privateClusterConfig": { "privateEndpoint": "192.168.0.2", "publicEndpoint": "34.141.222.139" }, "rbacBindingConfig": { "enableInsecureBindingSystemAuthenticated": true, "enableInsecureBindingSystemUnauthenticated": true }, "releaseChannel": {}, "resourceLabels": { "foo": "bar", "goog-terraform-provisioned": "true" }, "securityPostureConfig": { "mode": "BASIC", "vulnerabilityMode": "VULNERABILITY_MODE_UNSPECIFIED" }, "selfLink": "https://container.googleapis.com/v1/projects/gcpdiag-gke4-aaaa/zones/europe-west4-a/clusters/gke1", "servicesIpv4Cidr": "192.168.2.0/24", "shieldedNodes": { "enabled": true }, "status": "RUNNING", "subnetwork": "gke1-subnet", "zone": "europe-west4-a" } ] } ================================================ FILE: test-data/gke4/json-dumps/logging-entries-1.json ================================================ {} ================================================ FILE: test-data/gke4/json-dumps/project.json ================================================ { "name": "projects/12340033", "parent": "folders/348077457356", "projectId": "gcpdiag-gke4-aaaa", "state": "ACTIVE", "displayName": "gcpdiag-gke4-runbook", "createTime": "2024-08-26T23:36:42.760158Z", "updateTime": "2024-08-26T23:36:42.760158Z", "etag": "W/\"8342a04021413768\"", "labels": { "gcpdiag": "test", "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/gke4/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340033/services/analyticshub.googleapis.com", "config": { "name": "analyticshub.googleapis.com", "title": "Analytics Hub API", "documentation": { "summary": "Exchange data and analytics assets securely and efficiently." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "artifactregistry.googleapis.com/Location", "displayName": "Artifact Registry Location", "description": "A location in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "artifactregistry.googleapis.com/Project", "displayName": "Artifact Registry Project", "description": "A Cloud project in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "BETA" }, { "type": "artifactregistry.googleapis.com/Repository", "displayName": "Artifact Registry Repository", "description": "A repository in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "repository_id", "description": "The identifier of the Artifact Registry repository, such as \"my_repository\"." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_region_upstream_host_reads", "artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/region_upstream_host_reads", "artifactregistry.googleapis.com/us_multi_region_upstream_host_reads" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Project", "metrics": [ "artifactregistry.googleapis.com/project/api/request_count", "artifactregistry.googleapis.com/project/api/request_latencies", "artifactregistry.googleapis.com/project/request_count", "artifactregistry.googleapis.com/project/request_latencies" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Repository", "metrics": [ "artifactregistry.googleapis.com/repository/api/request_count", "artifactregistry.googleapis.com/repository/api/request_latencies", "artifactregistry.googleapis.com/repository/request_count", "artifactregistry.googleapis.com/repository/request_latencies", "artifactregistry.googleapis.com/repository/size" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquery.googleapis.com/Table", "displayName": "BigQuery Table Resource.", "description": "BigQuery Table Resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The cloud location of the BigQuery table." }, { "key": "table_reference", "description": "The table reference in the format of project_id:dataset_id.table_id for the BigQuery table." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/Location", "displayName": "CheckIamPolicy Request Location", "description": "A BigQuery Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget", "description": "Differential Privacy Budget.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." }, { "key": "multi_region", "description": "The multi-region identifier for the associated resource (e.g \"us\", \"eu\"). Used only for multi-region quota metrics." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget External", "description": "Differential Privacy Budget exposed externally to provide privacy budget metrics.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." } ], "launchStage": "BETA" }, { "type": "bigquery.googleapis.com/ContinuousJob", "displayName": "BigQuery Continuous Job", "description": "Metrics from BigQuery Continuous Jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The Cloud location of the continuous job." }, { "key": "job_id", "description": "The ID of the continuous job." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded", "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget", "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit" ] }, { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/privacybudget/dp_delta_budget", "bigquery.googleapis.com/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/ContinuousJob", "metrics": [ "bigquery.googleapis.com/job/continuous/backlog_records", "bigquery.googleapis.com/job/continuous/records_read_count", "bigquery.googleapis.com/job/continuous/records_written_count", "bigquery.googleapis.com/job/continuous/estimated_backlog_logical_bytes", "bigquery.googleapis.com/job/continuous/estimated_bytes_processed_count", "bigquery.googleapis.com/job/continuous/output_watermark", "bigquery.googleapis.com/job/continuous/slots/allocated", "bigquery.googleapis.com/job/continuous/end_to_end_latencies" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/bigqueryconnection.googleapis.com", "config": { "name": "bigqueryconnection.googleapis.com", "title": "BigQuery Connection API", "documentation": { "summary": "Allows users to manage BigQuery connections to external data sources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/bigquerydatapolicy.googleapis.com", "config": { "name": "bigquerydatapolicy.googleapis.com", "title": "BigQuery Data Policy API", "documentation": { "summary": "Allows users to manage BigQuery data policies." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/bigqueryreservation.googleapis.com", "config": { "name": "bigqueryreservation.googleapis.com", "title": "BigQuery Reservation API", "documentation": { "summary": "A service to modify your BigQuery flat-rate reservations." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquerystorage.googleapis.com/DataflowWrite", "displayName": "BigQuery Storage Write API metrics for Dataflow jobs.", "description": "BigQuery Storage Write API metrics for Dataflow jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job." }, { "key": "location", "description": "The BigQuery region in which the Storage API server locates." }, { "key": "job_name", "description": "The name of the Dataflow job this worker belongs to." }, { "key": "job_id", "description": "The id of the dataflow job the worker belongs to." }, { "key": "worker_id", "description": "The ID of the worker, unique for this job_id." }, { "key": "destination_project", "description": "The project of BigQuery destination table of the Dataflow job." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquerystorage.googleapis.com/DataflowWrite", "metrics": [ "bigquerystorage.googleapis.com/dataflow_write/request_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/connection_results_count", "bigquerystorage.googleapis.com/dataflow_write/server_side_latencies", "bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies", "bigquerystorage.googleapis.com/dataflow_write/concurrent_connections" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/cloudresourcemanager.googleapis.com", "config": { "name": "cloudresourcemanager.googleapis.com", "title": "Cloud Resource Manager API", "documentation": { "summary": "Creates, reads, and updates metadata for Google Cloud Platform resource containers." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "container.googleapis.com/Cluster", "displayName": "Kubernetes Cluster Limits", "description": "Kubernetes Cluster.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." } ], "launchStage": "BETA" }, { "type": "container.googleapis.com/NodePool", "displayName": "GKE Node Pool", "description": "GKE Node Pool.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." }, { "key": "node_pool_name", "description": "Node pool name." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/containers_per_cluster_autopilot", "container.googleapis.com/quota/containers_per_cluster_standard", "container.googleapis.com/quota/etcd_database_size_bytes", "container.googleapis.com/quota/nodes_per_cluster", "container.googleapis.com/quota/pods_per_cluster_autopilot", "container.googleapis.com/quota/pods_per_cluster_standard", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded", "container.googleapis.com/quota/quota/nodes_per_cluster/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/nodes_per_node_pool", "container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded" ] }, { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/containers_per_cluster_standard/limit", "container.googleapis.com/quota/quota/containers_per_cluster_standard/usage", "container.googleapis.com/quota/quota/etcd_database_size_bytes/limit", "container.googleapis.com/quota/quota/etcd_database_size_bytes/usage", "container.googleapis.com/quota/quota/etcd_database_size_gib/limit", "container.googleapis.com/quota/quota/etcd_database_size_gib/usage", "container.googleapis.com/quota/quota/nodes_per_cluster/limit", "container.googleapis.com/quota/quota/nodes_per_cluster/usage", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/pods_per_cluster_standard/limit", "container.googleapis.com/quota/quota/pods_per_cluster_standard/usage" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/quota/nodes_per_node_pool/limit", "container.googleapis.com/quota/quota/nodes_per_node_pool/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": { "summary": "Stream images stored in Artifact Registry to GKE\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/containerthreatdetection.googleapis.com", "config": { "name": "containerthreatdetection.googleapis.com", "title": "Container Threat Detection API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/dataform.googleapis.com", "config": { "name": "dataform.googleapis.com", "title": "Dataform API", "documentation": { "summary": "Service to develop, version control, and operationalize SQL pipelines in BigQuery." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/dataplex.googleapis.com", "config": { "name": "dataplex.googleapis.com", "title": "Cloud Dataplex API", "documentation": { "summary": "Dataplex API is used to manage the lifecycle of data lakes." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataplex.googleapis.com/Lake", "displayName": "Cloud Dataplex Lake", "description": "A Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of this Lake resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Zone", "displayName": "Cloud Dataplex Zone", "description": "A Zone within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of this Zone resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Asset", "displayName": "Cloud Dataplex Asset", "description": "An Asset within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of the Zone resource containing this resource." }, { "key": "asset_id", "description": "The identifier of this Asset resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Environment", "displayName": "Cloud Dataplex Environment", "description": "An Environment within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "environment_id", "description": "The identifier of this Environment resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataplex.googleapis.com/Lake", "metrics": [ "dataplex.googleapis.com/lake/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Zone", "metrics": [ "dataplex.googleapis.com/zone/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Asset", "metrics": [ "dataplex.googleapis.com/asset/requires_action", "dataplex.googleapis.com/asset/active", "dataplex.googleapis.com/asset/data_items", "dataplex.googleapis.com/asset/data_size", "dataplex.googleapis.com/asset/tables", "dataplex.googleapis.com/asset/filesets", "dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates", "dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/dns.googleapis.com", "config": { "name": "dns.googleapis.com", "title": "Cloud DNS API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/gkebackup.googleapis.com", "config": { "name": "gkebackup.googleapis.com", "title": "Backup for GKE API", "documentation": { "summary": "Backup for GKE is a managed Kubernetes workload backup and restore service\nfor GKE clusters." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "gkebackup.googleapis.com/BackupPlan", "displayName": "GKE Backup Plan", "description": "A backup plan provides configuration, location, and management functions for a sequence of backups.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this backupPlan resides." }, { "key": "backup_plan_id", "description": "The name of the backupPlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/RestorePlan", "displayName": "GKE Restore Plan", "description": "A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this restorePlan resides." }, { "key": "restore_plan_id", "description": "The name of the restorePlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/Project", "displayName": "Backup for GKE Project", "description": "A Project in the Backup for GKE API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource." }, { "key": "location", "description": "The Google Cloud location of the resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "gkebackup.googleapis.com/BackupPlan", "metrics": [ "gkebackup.googleapis.com/backup_created_count", "gkebackup.googleapis.com/backup_deleted_count", "gkebackup.googleapis.com/backup_completion_times" ] }, { "monitoredResource": "gkebackup.googleapis.com/RestorePlan", "metrics": [ "gkebackup.googleapis.com/restore_created_count" ] }, { "monitoredResource": "gkebackup.googleapis.com/Project", "metrics": [ "gkebackup.googleapis.com/internal/backup_plan_existence" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" }, { "type": "iam.googleapis.com/WorkforcePoolProvider", "displayName": "Workforce Identity Pool Provider", "description": "A workforce identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud organization associated with this resource." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workforce pool parent resource." }, { "key": "provider_id", "description": "The ID of the workforce pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] }, { "monitoredResource": "iam.googleapis.com/WorkforcePoolProvider", "metrics": [ "iam.googleapis.com/workforce_identity_federation/count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" and \"cluster\" are supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested", "monitoring.googleapis.com/internal/billing/gke_enterprise_samples_ingested", "monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested", "monitoring.googleapis.com/internal/stats/filtered_sample_count", "monitoring.googleapis.com/internal/stats/filtered_byte_count", "monitoring.googleapis.com/internal/stats/metrics_queried_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/networkconnectivity.googleapis.com", "config": { "name": "networkconnectivity.googleapis.com", "title": "Network Connectivity API", "documentation": { "summary": "This API enables connectivity with and between Google Cloud resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "networkconnectivity.googleapis.com/Hub", "displayName": "Network Connectivity Hub", "description": "A Network Connectivity hub.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container that this hub is in." }, { "key": "location", "description": "The identifier of the location that this hub is in." }, { "key": "hub_id", "description": "The identifier of this hub." } ], "launchStage": "GA" }, { "type": "networkconnectivity.googleapis.com/RouteTable", "displayName": "Network Connectivity Route Table", "description": "A route table associated with a Network Connectivity hub.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this route table." }, { "key": "location", "description": "The identifier of the location that this route table is in." }, { "key": "hub_id", "description": "The identifier of the hub that is associated with this route table." }, { "key": "route_table_id", "description": "The identifier of this route table." } ], "launchStage": "GA" }, { "type": "networkconnectivity.googleapis.com/Spoke", "displayName": "Spoke", "description": "A Network Connectivity Center Spoke resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project owning the NCC spoke." }, { "key": "location", "description": "The location of the NCC spoke." }, { "key": "id", "description": "The user-specified identifier of the NCC spoke." } ], "launchStage": "ALPHA" }, { "type": "networkconnectivity.googleapis.com/GatewaySpokeVM", "displayName": "Gateway Spoke VM", "description": "An NCC Gateway Spoke VM (Internal Resource).", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP tenant project owning the VM." }, { "key": "location", "description": "The GCP zone where the VM resides." }, { "key": "service_name", "description": "The networkconnectivity endpoint which was called to create the VM (e.g. autopush-networkconnectivity.sandbox.googleapis.com)." }, { "key": "spoke_id", "description": "The NCC Gateway spoke associated with the VM." }, { "key": "slm_instance_id", "description": "The SLM instance associated with the VM." }, { "key": "vm_instance_id", "description": "The GCP-assigned identifier for the VM." }, { "key": "vm_instance_name", "description": "The human-readable name for the VM." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "networkconnectivity.googleapis.com/Hub", "metrics": [ "networkconnectivity.googleapis.com/active_vpc_spokes_per_hub", "networkconnectivity.googleapis.com/groups_per_hub", "networkconnectivity.googleapis.com/psc_ilb_consumer_forwarding_rules_per_hub", "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/exceeded", "networkconnectivity.googleapis.com/quota/groups_per_hub/exceeded", "networkconnectivity.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_hub/exceeded", "networkconnectivity.googleapis.com/quota/static_routes_per_hub/exceeded", "networkconnectivity.googleapis.com/static_routes_per_hub" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/RouteTable", "metrics": [ "networkconnectivity.googleapis.com/dynamic_route_prefixes_per_hub_route_table_per_region", "networkconnectivity.googleapis.com/quota/dynamic_route_prefixes_per_hub_route_table_per_region/exceeded", "networkconnectivity.googleapis.com/quota/routes_per_route_table/exceeded", "networkconnectivity.googleapis.com/routes_per_route_table" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/Hub", "metrics": [ "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/limit", "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/usage", "networkconnectivity.googleapis.com/quota/groups_per_hub/limit", "networkconnectivity.googleapis.com/quota/groups_per_hub/usage", "networkconnectivity.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_hub/limit", "networkconnectivity.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_hub/usage", "networkconnectivity.googleapis.com/quota/static_routes_per_hub/limit", "networkconnectivity.googleapis.com/quota/static_routes_per_hub/usage" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/RouteTable", "metrics": [ "networkconnectivity.googleapis.com/quota/dynamic_route_prefixes_per_hub_route_table_per_region/limit", "networkconnectivity.googleapis.com/quota/dynamic_route_prefixes_per_hub_route_table_per_region/usage", "networkconnectivity.googleapis.com/quota/routes_per_route_table/limit", "networkconnectivity.googleapis.com/quota/routes_per_route_table/usage" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/Spoke", "metrics": [ "networkconnectivity.googleapis.com/spoke/gateway/received_bytes_count", "networkconnectivity.googleapis.com/spoke/gateway/received_packets_count", "networkconnectivity.googleapis.com/spoke/gateway/sent_bytes_count", "networkconnectivity.googleapis.com/spoke/gateway/sent_packets_count", "networkconnectivity.googleapis.com/spoke/gateway/packet_processing_events_count", "networkconnectivity.googleapis.com/spoke/gateway/health", "networkconnectivity.googleapis.com/spoke/gateway/routes_min", "networkconnectivity.googleapis.com/spoke/gateway/routes_max" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/GatewaySpokeVM", "metrics": [ "networkconnectivity.googleapis.com/internal/spoke/gateway/ncg/routes_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" }, { "name": "projects/12340033/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340033" } ] } ================================================ FILE: test-data/gke4/project.tf ================================================ /** * Copyright 2021 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. */ terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">= 2.0.3" } google = { source = "hashicorp/google" version = ">= 4.4.0" } google-beta = { source = "hashicorp/google-beta" version = ">= 4.4.0" } } } resource "random_string" "project_id_suffix" { length = 8 lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag-gke4-runbook" project_id = "gcpdiag-gke4-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null labels = { gcpdiag : "test" } lifecycle { ignore_changes = all } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "container" { project = google_project.project.project_id service = "container.googleapis.com" depends_on = [google_project_service.compute] } resource "google_project_service" "cloudresourcemanager" { project = google_project.project.project_id service = "cloudresourcemanager.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/gke4/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/iam1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340009 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/iam-policy.json \ json-dumps/org-constraints.json json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/org-constraints.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):listAvailableOrgPolicyConstraints' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/iam1/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "user:testuser@example.com" ], "role": "roles/owner" } ], "etag": "BwXXim1ZMUM=", "version": 1 } ================================================ FILE: test-data/iam1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "User Service Account1", "email": "demo2sa@gcpdiag-iam1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-iam1-aaaa/serviceAccounts/demo2sa@gcpdiag-iam1-aaaa.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-iam1-aaaa", "uniqueId": "102417873155869406705" }, { "displayName": "Compute Engine default service account", "email": "12340002-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-iam1-aaaa/serviceAccounts/12340002-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-iam1-aaaa", "uniqueId": "112819826788395589395" }, { "displayName": "User Service Account2", "email": "demo1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-iam1-aaaa/serviceAccounts/demo1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-iam1-aaaa", "uniqueId": "106302102062593675693" }, { "displayName": "User Service Account3", "email": "demo3@gcpdiag-iam1-aaaa.iam.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-iam1-aaaa/serviceAccounts/demo3@gcpdiag-iam1-aaaa.iam.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-iam1-aaaa", "uniqueId": "104735732736559639086" } ] } ================================================ FILE: test-data/iam1/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": {} } ================================================ FILE: test-data/iam1/json-dumps/org-constraint-compute.disableSerialPortAccess.json ================================================ { "booleanPolicy": { "enforced": true }, "constraint": "constraints/compute.disableSerialPortAccess" } ================================================ FILE: test-data/iam1/json-dumps/org-constraint-compute.disableSerialPortLogging.json ================================================ { "booleanPolicy":{}, "constraint": "constraints/compute.disableSerialPortLogging" } ================================================ FILE: test-data/iam1/json-dumps/org-constraint-compute.disableSshInBrowser.json ================================================ { "booleanPolicy": { "enforced": true }, "constraint": "constraints/compute.disableSshInBrowser" } ================================================ FILE: test-data/iam1/json-dumps/org-constraint-compute.requireOsLogin.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireOsLogin" } ================================================ FILE: test-data/iam1/json-dumps/org-constraint-compute.requireShieldedVm.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireShieldedVm" } ================================================ FILE: test-data/iam1/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json ================================================ { "booleanPolicy":{}, "constraint": "constraints/iam.automaticIamGrantsForDefaultServiceAccounts" } ================================================ FILE: test-data/iam1/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/iam.disableCrossProjectServiceAccountUsage" } ================================================ FILE: test-data/iam1/json-dumps/org-constraints.json ================================================ { "constraints": [ { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables serial port access to Compute Engine VMs belonging to the organization, project, or folder where this constraint is set to True. By default, customers can enable serial port access for Compute Engine VMs on a per-VM or per-project basis using metadata attributes. Enforcing this constraint will disable serial port access for Compute Engine VMs, regardless of the metadata attributes.", "displayName": "Disable VM serial port access", "name": "constraints/compute.disableSerialPortAccess" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables serial port logging to Stackdriver from Compute Engine VMs belonging to the organization, project, or folder where this constraint is being enforced. By default, serial port logging for Compute Engine VMs is disabled, and can be selectively enabled on a per-VM or per-project basis using metadata attributes. When enforced, this constraint disables serial port logging for new Compute Engine VMs whenever a new VM is created, as well as preventing users from changing the metadata attribute of any VMs (old or new) to True. Disabling serial port logging can cause certain services that rely on it, such as Google Kubernetes Engine clusters, to not function correctly. Before you enforce this constraint, verify that the products in your project do not rely on serial port logging.", "displayName": "Disable VM serial port logging to Stackdriver", "name": "constraints/compute.disableSerialPortLogging" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint disables the SSH-in-browser tool in the Cloud Console for VMs that use OS Login and App Engine flexible environment VMs. When enforced, the SSH-in-browser button is disabled. By default, using the SSH-in-browser tool is allowed.", "displayName": "Disable SSH-in-browser", "name": "constraints/compute.disableSshInBrowser" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when set to true, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. By default, the OS Login feature is disabled on Compute Engine projects.GKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.", "displayName": "Require OS Login", "name": "constraints/compute.requireOsLogin" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when set to True, requires that all new Compute Engine VM instances use Shielded disk images with Secure Boot, vTPM, and Integrity Monitoring options enabled. Secure Boot can be disabled after creation, if desired. Existing running instances will continue to work as usual. By default, Shielded VM features do not need to be enabled in order to create Compute Engine VM instances. Shielded VM features add verifiable integrity and exfiltration resistance to your VMs.", "displayName": "Shielded VMs", "name": "constraints/compute.requireShieldedVm" }, { "booleanConstraint": {}, "constraintDefault": "ALLOW", "description": "This boolean constraint, when enforced, prevents the default App Engine and Compute Engine service accounts that are created in your projects from being automatically granted any IAM role on the project when the accounts are created. By default, these service accounts automatically receive the Editor role when they are created. To learn about default service accounts, see https://cloud.google.com/iam/help/service-accounts/default. To learn which roles to grant instead of the Editor role, see https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.", "displayName": "Disable Automatic IAM Grants for Default Service Accounts", "name": "constraints/iam.automaticIamGrantsForDefaultServiceAccounts" }, { "booleanConstraint": {}, "constraintDefault": "DENY", "description": "When enforced, service accounts can only be deployed (using ServiceAccountUser role) to jobs (vms, functions, etc) running in the same project as the service account.", "displayName": "Disable Cross-Project Service Account Usage", "name": "constraints/iam.disableCrossProjectServiceAccountUsage" } ] } ================================================ FILE: test-data/iam1/json-dumps/org-policies.json ================================================ { "policies": [ { "version": 2, "constraint": "constraints/cloudbuild.allowedWorkerPools", "etag": "CNmNp74GEPCmnzw=", "updateTime": "2025-03-06T16:01:29.126342Z", "listPolicy": { "allowedValues": [ "projects/12340004/locations/us-central1/workerPools/test-pool" ] } }, { "constraint": "constraints/compute.skipDefaultNetworkCreation", "etag": "CL2Kp74GENDg7McD", "updateTime": "2025-03-06T15:54:37.955986Z", "booleanPolicy": {} } ] } ================================================ FILE: test-data/iam1/json-dumps/project.json ================================================ { "name": "projects/12340009", "parent": "organizations/11112222", "projectId": "gcpdiag-iam1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - iam1", "createTime": "2022-02-08T23:53:42.154Z", "updateTime": "2022-02-08T23:53:43.701Z", "etag": "ZPsI3xvWVgvyuQafVcNtsg==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/iam1/json-dumps/services.json ================================================ {} ================================================ FILE: test-data/iam1/project.tf ================================================ /** * 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - iam1" project_id = "gcpdiag-iam1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/iam1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/interconnect1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340009 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/compute-interconnects.json \ json-dumps/compute-project.json include ../Makefile.inc ================================================ FILE: test-data/interconnect1/json-dumps/compute-interconnects.json ================================================ [ { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/bos-zone1-219", "name": "dummy-interconnect1", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect1", "state": "ACTIVE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/bos-zone2-219", "name": "dummy-interconnect2", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect2", "state": "ACTIVE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/sjc-zone1-6", "name": "dummy-interconnect3", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect3", "state": "UNDER_MAINTENANCE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/sjc-zone2-6", "name": "dummy-interconnect4", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4", "state": "UNDER_MAINTENANCE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/sjc-zone2-6", "name": "dummy-interconnect4", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4", "state": "ACTIVE" }, { "adminEnabled": true, "circuitInfos": [ { "customerDemarcId": "PEERP:NODEMARC", "googleCircuitId": "GCP-00111111", "googleDemarcId": "ABCDEFG" } ], "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerName": "Dummy User", "description": "Dummy Interconnect", "expectedOutages": [ { "description": "", "endTime": "1670443549000", "issueType": "IT_OUTAGE", "name": "pcr-639175", "source": "NSRC_GOOGLE", "startTime": "1670424949000", "state": "COMPLETED" } ], "googleReferenceId": "4774247690472065552", "id": "4774247690472065552", "interconnectAttachments": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6" ], "interconnectType": "IT_PRIVATE", "kind": "compute#interconnect", "linkType": "LINK_TYPE_ETHERNET_10G_LR", "location": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/sjc-zone2-6", "name": "dummy-interconnect5", "nocContactEmail": "dummy@example.com", "operationalStatus": "OS_ACTIVE", "provisionedLinkCount": 1, "requestedLinkCount": 1, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4", "state": "UNDER_MAINTENANCE" } ] ================================================ FILE: test-data/interconnect1/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "7246553118008778977", "creationTimestamp": "2022-03-30T02:08:30.014-07:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/7246553118008778977", "autoCreateSubnetworks": true, "mtu": 1460, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west4/subnetworks/gke1-subnet", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-central2/subnetworks/default" ], "peerings": [ { "name": "gke-ne6f5d919f4c34558948-1e4e-2883-peer", "network": "https://www.googleapis.com/compute/v1/projects/gke-prod-europe-west4-a-55a0/global/networks/gke-ne6f5d919f4c34558948-1e4e-e59b-net", "state": "ACTIVE", "stateDetails": "[2022-03-30T02:11:12.613-07:00]: Connected.", "autoCreateRoutes": true, "exportCustomRoutes": false, "importCustomRoutes": false, "exchangeSubnetRoutes": true, "exportSubnetRoutesWithPublicIp": true, "importSubnetRoutesWithPublicIp": false }, { "name": "gke-ne6f5d919f4c34558948-e4c5-1a39-peer", "network": "https://www.googleapis.com/compute/v1/projects/gke-prod-europe-west4-559c/global/networks/gke-ne6f5d919f4c34558948-e4c5-32e2-net", "state": "ACTIVE", "stateDetails": "[2022-03-30T02:12:15.512-07:00]: Connected.", "autoCreateRoutes": true, "exportCustomRoutes": false, "importCustomRoutes": false, "exchangeSubnetRoutes": true, "exportSubnetRoutesWithPublicIp": true, "importSubnetRoutesWithPublicIp": false } ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/interconnect1/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "9um0yrlKtsk=", "kind": "compute#metadata" }, "creationTimestamp": "2022-08-25T07:22:28.064-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12340009-compute@developer.gserviceaccount.com", "id": "1866944745413688140", "kind": "compute#project", "name": "gcpdiag-interconnect1-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 5 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 1 }, { "limit": 300, "metric": "ROUTES", "usage": 1 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 1 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 500, "metric": "HEALTH_CHECKS", "usage": 1 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 1 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 1 }, { "limit": 100, "metric": "URL_MAPS", "usage": 1 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 1 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 1 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 34 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/interconnect1/json-dumps/compute-routers-routerStatus-dummy-router1.json ================================================ { "kind": "compute#routerStatusResponse", "result": { "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bestRoutes": [ { "kind": "compute#route", "creationTimestamp": "2025-03-24T02:13:17.617-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "172.17.15.0/24", "priority": 100, "nextHopIp": "169.254.111.2", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 64500 ] } ], "nextHopOrigin": "INCOMPLETE" }, { "kind": "compute#route", "creationTimestamp": "2025-03-20T22:40:00.972-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "192.168.114.0/24", "priority": 0, "nextHopIp": "169.254.46.184", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 1140 ] } ], "nextHopOrigin": "INCOMPLETE" } ], "bestRoutesForRouter": [ { "kind": "compute#route", "creationTimestamp": "2025-03-13T00:45:02.483-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "172.17.15.0/24", "priority": 100, "nextHopIp": "169.254.111.2", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 64500 ] } ], "routeStatus": "ACTIVE", "nextHopOrigin": "INCOMPLETE" }, { "kind": "compute#route", "creationTimestamp": "2025-03-20T09:46:06.079-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "192.168.114.0/24", "priority": 0, "nextHopIp": "169.254.46.184", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 1140 ] } ], "routeStatus": "ACTIVE", "nextHopOrigin": "INCOMPLETE" } ], "bgpPeerStatus": [ { "name": "dummy-vlan11", "ipAddress": "169.254.1.1", "peerIpAddress": "169.254.1.2", "enableIpv6": false, "status": "UP", "state": "Established", "uptime": "1 weeks, 4 days, 5 hours, 20 minutes, 52 seconds", "uptimeSeconds": "969652", "numLearnedRoutes": 1, "advertisedRoutes": [ { "kind": "compute#route", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "10.216.0.0/20", "priority": 1233, "nextHopIp": "169.254.111.1", "routeType": "BGP", "nextHopOrigin": "INCOMPLETE" } ], "md5AuthEnabled": false, "enableIpv4": true }, { "name": "dummy-vlan21", "ipAddress": "169.254.2.1", "peerIpAddress": "169.254.2.2", "enableIpv6": false, "status": "UP", "state": "Established", "uptime": "3 days, 20 hours, 19 minutes, 47 seconds", "uptimeSeconds": "332387", "numLearnedRoutes": 1, "advertisedRoutes": [ { "kind": "compute#route", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "10.168.0.0/20", "priority": 373, "nextHopIp": "169.254.46.184", "routeType": "BGP", "nextHopOrigin": "INCOMPLETE" } ], "md5AuthEnabled": false, "enableIpv4": true } ] } } ================================================ FILE: test-data/interconnect1/json-dumps/compute-routers-routerStatus-dummy-router11.json ================================================ { "kind": "compute#routerStatusResponse", "result": { "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bestRoutes": [ { "kind": "compute#route", "creationTimestamp": "2024-08-24T02:13:17.617-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "172.17.16.0/24", "priority": 100, "nextHopIp": "169.254.111.2", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 64500 ] } ], "nextHopOrigin": "INCOMPLETE" }, { "kind": "compute#route", "creationTimestamp": "2024-08-20T22:40:00.972-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "192.168.114.0/24", "priority": 0, "nextHopIp": "169.254.46.184", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 1140 ] } ], "nextHopOrigin": "INCOMPLETE" } ], "bestRoutesForRouter": [ { "kind": "compute#route", "creationTimestamp": "2024-08-13T00:45:02.483-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "172.17.16.0/24", "priority": 100, "nextHopIp": "169.254.111.2", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 64200 ] } ], "routeStatus": "ACTIVE", "nextHopOrigin": "INCOMPLETE" }, { "kind": "compute#route", "creationTimestamp": "2024-08-20T09:46:06.079-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "192.168.114.0/24", "priority": 0, "nextHopIp": "169.254.46.184", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 1240 ] } ], "routeStatus": "ACTIVE", "nextHopOrigin": "INCOMPLETE" } ], "bgpPeerStatus": [ { "name": "dummy-vlan11", "ipAddress": "169.254.11.1", "peerIpAddress": "169.254.11.2", "enableIpv6": false, "status": "UP", "state": "Established", "uptime": "3 days, 20 hours, 19 minutes, 47 seconds", "uptimeSeconds": "332387", "numLearnedRoutes": 1, "advertisedRoutes": [ { "kind": "compute#route", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "10.168.0.0/20", "priority": 373, "nextHopIp": "169.254.46.193", "routeType": "BGP", "nextHopOrigin": "INCOMPLETE" } ], "md5AuthEnabled": false, "enableIpv4": true } ] } } ================================================ FILE: test-data/interconnect1/json-dumps/compute-routers-routerStatus-dummy-router2.json ================================================ { "kind": "compute#routerStatusResponse", "result": { "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bestRoutes": [ { "kind": "compute#route", "creationTimestamp": "2025-03-24T02:13:17.617-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "172.17.16.0/24", "priority": 100, "nextHopIp": "169.254.111.2", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 64500 ] } ], "nextHopOrigin": "INCOMPLETE" }, { "kind": "compute#route", "creationTimestamp": "2025-03-20T22:40:00.972-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "192.168.114.0/24", "priority": 0, "nextHopIp": "169.254.46.184", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 1140 ] } ], "nextHopOrigin": "INCOMPLETE" } ], "bestRoutesForRouter": [ { "kind": "compute#route", "creationTimestamp": "2025-03-13T00:45:02.483-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "172.17.16.0/24", "priority": 100, "nextHopIp": "169.254.111.2", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 64500 ] } ], "routeStatus": "ACTIVE", "nextHopOrigin": "INCOMPLETE" }, { "kind": "compute#route", "creationTimestamp": "2025-03-20T09:46:06.079-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "192.168.114.0/24", "priority": 0, "nextHopIp": "169.254.46.184", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 1140 ] } ], "routeStatus": "ACTIVE", "nextHopOrigin": "INCOMPLETE" } ], "bgpPeerStatus": [ { "name": "dummy-vlan31", "ipAddress": "169.254.3.1", "peerIpAddress": "169.254.3.2", "enableIpv6": false, "status": "UP", "state": "Established", "uptime": "1 weeks, 4 days, 5 hours, 20 minutes, 52 seconds", "uptimeSeconds": "969652", "numLearnedRoutes": 1, "advertisedRoutes": [ { "kind": "compute#route", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "10.216.0.0/20", "priority": 1397, "nextHopIp": "169.254.111.1", "routeType": "BGP", "nextHopOrigin": "INCOMPLETE" } ], "md5AuthEnabled": false, "enableIpv4": true }, { "name": "dummy-vlan41", "ipAddress": "169.254.4.1", "peerIpAddress": "169.254.4.2", "enableIpv6": false, "status": "UP", "state": "Idle", "uptime": "3 days, 20 hours, 19 minutes, 47 seconds", "uptimeSeconds": "332387", "numLearnedRoutes": 1, "advertisedRoutes": [ { "kind": "compute#route", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "10.168.0.0/20", "priority": 373, "nextHopIp": "169.254.46.193", "routeType": "BGP", "nextHopOrigin": "INCOMPLETE" } ], "md5AuthEnabled": false, "enableIpv4": true } ] } } ================================================ FILE: test-data/interconnect1/json-dumps/compute-routers-routerStatus-dummy-router3.json ================================================ { "kind": "compute#routerStatusResponse", "result": { "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bestRoutes": [ { "kind": "compute#route", "creationTimestamp": "2024-08-24T02:13:17.617-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "172.17.16.0/24", "priority": 100, "nextHopIp": "169.254.111.2", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 64500 ] } ], "nextHopOrigin": "INCOMPLETE" }, { "kind": "compute#route", "creationTimestamp": "2024-08-20T22:40:00.972-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "192.168.114.0/24", "priority": 0, "nextHopIp": "169.254.46.184", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 1140 ] } ], "nextHopOrigin": "INCOMPLETE" } ], "bestRoutesForRouter": [ { "kind": "compute#route", "creationTimestamp": "2024-08-13T00:45:02.483-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "172.17.16.0/24", "priority": 100, "nextHopIp": "169.254.111.2", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 64200 ] } ], "routeStatus": "ACTIVE", "nextHopOrigin": "INCOMPLETE" }, { "kind": "compute#route", "creationTimestamp": "2024-08-20T09:46:06.079-07:00", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "192.168.114.0/24", "priority": 0, "nextHopIp": "169.254.46.184", "routeType": "BGP", "asPaths": [ { "pathSegmentType": "AS_SEQUENCE", "asLists": [ 1240 ] } ], "routeStatus": "ACTIVE", "nextHopOrigin": "INCOMPLETE" } ], "bgpPeerStatus": [ { "name": "dummy-vlan51", "ipAddress": "169.254.5.1", "peerIpAddress": "169.254.5.2", "enableIpv6": false, "status": "UP", "state": "Idle", "uptime": "1 weeks, 4 days, 5 hours, 20 minutes, 52 seconds", "uptimeSeconds": "969652", "numLearnedRoutes": 1, "advertisedRoutes": [ { "kind": "compute#route", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "10.216.0.0/20", "priority": 1397, "nextHopIp": "169.254.111.1", "routeType": "BGP", "nextHopOrigin": "INCOMPLETE" } ], "md5AuthEnabled": false, "enableIpv4": true }, { "name": "dummy-vlan61", "ipAddress": "169.254.6.1", "peerIpAddress": "169.254.6.2", "enableIpv6": false, "status": "UP", "state": "Established", "uptime": "3 days, 20 hours, 19 minutes, 47 seconds", "uptimeSeconds": "332387", "numLearnedRoutes": 1, "advertisedRoutes": [ { "kind": "compute#route", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "destRange": "10.168.0.0/20", "priority": 373, "nextHopIp": "169.254.46.193", "routeType": "BGP", "nextHopOrigin": "INCOMPLETE" } ], "md5AuthEnabled": false, "enableIpv4": true } ] } } ================================================ FILE: test-data/interconnect1/json-dumps/compute-routers-us-central1.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-interconnect1-aaaa/regions/us-central1/routers", "items": [ { "kind": "compute#router", "id": "1111119776642123456", "creationTimestamp": "2019-05-13T09:37:58.875-07:00", "name": "dummy-router3", "description": "Interconnect Lab Juniper", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bgp": { "asn": 64200, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/routers/dummy-router11", "encryptedInterconnectRouter": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/routers" } ================================================ FILE: test-data/interconnect1/json-dumps/compute-routers-us-east4.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers", "items": [ { "kind": "compute#router", "id": "6983339776642123456", "creationTimestamp": "2019-05-13T09:37:58.875-07:00", "name": "dummy-router1", "description": "Interconnect Lab Juniper", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bgp": { "asn": 65000, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router1", "encryptedInterconnectRouter": false }, { "kind": "compute#router", "id": "978493875024123457", "creationTimestamp": "2023-10-02T15:17:21.172-07:00", "name": "dummy-router2", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bgp": { "asn": 65001, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router2", "encryptedInterconnectRouter": true }, { "kind": "compute#router", "id": "920222616522123458", "creationTimestamp": "2022-12-20T11:14:09.645-08:00", "name": "dummy-router3", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bgp": { "asn": 64512, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router3", "encryptedInterconnectRouter": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers" } ================================================ FILE: test-data/interconnect1/json-dumps/compute-routers-us-west2.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers", "items": [ { "kind": "compute#router", "id": "6666639776642123456", "creationTimestamp": "2019-05-13T09:37:58.875-07:00", "name": "dummy-router3", "description": "Interconnect Lab Juniper", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bgp": { "asn": 65200, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3", "encryptedInterconnectRouter": false }, { "kind": "compute#router", "id": "666666875024123457", "creationTimestamp": "2023-10-02T15:17:21.172-07:00", "name": "dummy-router4", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default", "bgp": { "asn": 65201, "advertiseMode": "DEFAULT", "keepaliveInterval": 20 }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router4", "encryptedInterconnectRouter": true } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers" } ================================================ FILE: test-data/interconnect1/json-dumps/interconnect-attachments.json ================================================ { "id": "projects/gcpdiag-interconnect1-aaaa/aggregated/interconnectAttachments", "items": { "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east1" } ], "message": "There are no results " } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/asia-east2" } ], "message": "There are no results " } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east1" } ], "message": "There are no results " } }, "regions/us-east4": { "interconnectAttachments": [ { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.1.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.1.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect1", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment1", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1101 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4", "mtu": 1460, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router1", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1101 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.2.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.2.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect1", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment2", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1103 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4", "mtu": 1460, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router1", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1103 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.3.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.3.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect2", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment3", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1105 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4", "mtu": 1460, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router2", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1105 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.4.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.4.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect2", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment4", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1106 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4", "mtu": 1460, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router2", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1106 } ] }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "data": [ { "key": "scope", "value": "regions/us-east5" } ], "message": "There are no results " } }, "regions/us-central1": { "interconnectAttachments": [ { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.11.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.11.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect11", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment11", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1102 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1", "mtu": 1450, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/routers/dummy-router11", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/interconnectAttachments/dummy-attachment11", "stackType": "IPV4_ONLY", "state": "UNDER_MAINTENANCE", "type": "DEDICATED", "vlanTag8021q": 1102 } ] }, "regions/us-west2": { "interconnectAttachments": [ { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.5.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.5.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect3", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment5", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1102 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2", "mtu": 1450, "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5", "stackType": "IPV4_ONLY", "state": "UNDER_MAINTENANCE", "type": "DEDICATED", "vlanTag8021q": 1102 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.6.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.6.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment6", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1104 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.7.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.7.2/29", "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment7", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment7", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1104 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.8.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.8.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment8", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment8", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1104 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.9.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.9.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment9", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment9", "stackType": "IPV4_ONLY", "state": "ACTIVE", "type": "DEDICATED", "vlanTag8021q": 1104 }, { "adminEnabled": true, "bandwidth": "BPS_10G", "cloudRouterIpAddress": "169.254.10.1/29", "creationTimestamp": "2021-01-01T00:00:00-00:00", "customerRouterIpAddress": "169.254.10.2/29", "dataplaneVersion": 2, "description": "Dummy Description", "encryption": "IPSEC", "id": "0000000000000000000", "interconnect": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4", "ipsecInternalAddresses": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1" ], "kind": "compute#interconnectAttachment", "name": "dummy-attachment10", "operationalStatus": "OS_ACTIVE", "privateInterconnectInfo": { "tag8021q": 1104 }, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3", "satisfiesPzs": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment10", "stackType": "IPV4_ONLY", "state": "DEFUNCT", "type": "DEDICATED", "vlanTag8021q": 1104 } ] } }, "kind": "compute#interconnectAttachmentAggregatedList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/aggregated/interconnectAttachments" } ================================================ FILE: test-data/interconnect1/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "textPayload": "BGP Event: BGP peering with 169.254.1.2 went down with reason: BGP_PROCESS_STOPPED", "insertId": "13v7syqfr0affx", "resource": { "type": "gce_router", "labels": { "region": "us-east4", "router_id": "6988249776642123456", "project_id": "gcpdiag-interconnect1-aaaa" } }, "timestamp": "2025-03-20T16:45:55.959348287Z", "severity": "NOTICE", "logName": "projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events", "receiveTimestamp": "2025-03-20T16:45:55.967883881Z" }, { "textPayload": "Maintenance of router task: BGP sessions will restart. Routes are preserved for the duration of the configured timers. These are normal events, and no data loss is expected to occur.", "insertId": "5kryxkf281spq", "resource": { "type": "gce_router", "labels": { "region": "us-east4", "project_id": "gcpdiag-interconnect1-aaaa", "router_id": "6988249776642123456" } }, "timestamp": "2025-03-20T16:45:56.035612313Z", "severity": "INFO", "logName": "projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events", "receiveTimestamp": "2025-03-20T16:46:56.287489651Z" }, { "textPayload": "BGP Event: BGP peering with 169.254.1.2 came up 0 seconds ago, hold time is 60 seconds, graceful restart timer is 120 seconds", "insertId": "e688gpfsdnayp", "resource": { "type": "gce_router", "labels": { "project_id": "gcpdiag-interconnect1-aaaa", "region": "us-east4", "router_id": "6988249776642123456" } }, "timestamp": "2025-03-20T16:45:58.035612313Z", "severity": "NOTICE", "logName": "projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events", "receiveTimestamp": "2025-03-20T16:45:58.287489651Z" }, { "textPayload": "BGP Event: BGP peering with 169.254.2.2 went down with reason: BGP_PROCESS_STOPPED", "insertId": "lxwe2jf1e2pij", "resource": { "type": "gce_router", "labels": { "region": "us-east4", "project_id": "gcpdiag-interconnect1-aaaa", "router_id": "6988249776642123456" } }, "timestamp": "2025-03-27T23:32:19.397757310Z", "severity": "NOTICE", "logName": "projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events", "receiveTimestamp": "2025-03-27T23:32:19.414761410Z" }, { "textPayload": "BGP Event: BGP peering with 169.254.2.2 came up 0 seconds ago, hold time is 60 seconds, graceful restart timer is 60 seconds", "insertId": "h977eqf1i9jpn", "resource": { "type": "gce_router", "labels": { "router_id": "6988249776642123456", "project_id": "gcpdiag-interconnect1-aaaa", "region": "us-east4" } }, "timestamp": "2025-03-27T23:34:39.923120483Z", "severity": "NOTICE", "logName": "projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events", "receiveTimestamp": "2025-03-27T23:34:39.928464648Z" }, { "textPayload": "BGP Event: BGP peering with 169.254.6.2 went down with reason: BGP_PROCESS_STOPPED", "insertId": "leee2jf1e2pij", "resource": { "type": "gce_router", "labels": { "region": "us-west2", "project_id": "gcpdiag-interconnect1-aaaa", "router_id": "666666875024123457" } }, "timestamp": "2025-03-27T23:32:19.397757310Z", "severity": "NOTICE", "logName": "projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events", "receiveTimestamp": "2025-03-27T23:32:19.414761410Z" }, { "textPayload": "BGP Event: BGP peering with 169.254.6.2 came up 0 seconds ago, hold time is 60 seconds, graceful restart timer is 60 seconds", "insertId": "heeeeqf1i9jpn", "resource": { "type": "gce_router", "labels": { "router_id": "666666875024123457", "project_id": "gcpdiag-interconnect1-aaaa", "region": "us-west2" } }, "timestamp": "2025-03-27T23:33:39.923120483Z", "severity": "NOTICE", "logName": "projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events", "receiveTimestamp": "2025-03-27T23:33:39.928464648Z" } ] } ================================================ FILE: test-data/interconnect1/json-dumps/project.json ================================================ { "name": "projects/123400010", "parent": "folders/1234567", "projectId": "gcpdiag-interconnect1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - interconnect1", "createTime": "2022-08-25T14:21:48.527Z", "updateTime": "2022-08-25T14:21:50.098Z", "etag": "TaJ5DhDFtwUvBRUHyHHKpQ==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/interconnect1/project.tf ================================================ /** * 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - interconnect1" project_id = "gcpdiag-interconnect1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/interconnect1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/lb1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340009 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-regions.json \ json-dumps/compute-backendServices.json \ json-dumps/compute-aggregated-backendServices.json \ json-dumps/compute-aggregated-forwardingRules.json \ json-dumps/healthChecks.json \ include ../Makefile.inc json-dumps/healthChecks.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/lb1/http-lb-mig.tf ================================================ /** * Copyright 2021 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. */ # External HTTP load balancer with an CDN-enabled managed instance group backend # [START cloudloadbalancing_ext_http_gce_instance_template] resource "google_compute_instance_template" "default" { depends_on = [google_project_service.compute] name = "lb-backend-template" project = google_project.project.project_id disk { auto_delete = true boot = true device_name = "persistent-disk-0" mode = "READ_WRITE" source_image = "projects/debian-cloud/global/images/family/debian-11" type = "PERSISTENT" } labels = { managed-by-cnrm = "true" } machine_type = "n1-standard-1" metadata = { startup-script = "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n http://169.254.169.254/computeMetadata/v1/instance/name)\"\n sudo echo \"Page served from: $vm_hostname\" | \\\n tee /var/www/html/index.html\n sudo systemctl restart apache2" } network_interface { access_config { network_tier = "PREMIUM" } network = "global/networks/default" #subnetwork = "regions/us-east1/subnetworks/default" } region = "us-east1" service_account { email = "default" scopes = ["https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append"] } tags = ["allow-health-check"] } # [END cloudloadbalancing_ext_http_gce_instance_template] # [START cloudloadbalancing_ext_http_gce_instance_mig] resource "google_compute_instance_group_manager" "default" { depends_on = [google_project_service.compute] project = google_project.project.project_id name = "lb-backend-example" zone = "us-east1-b" named_port { name = "http" port = 80 } version { instance_template = google_compute_instance_template.default.id name = "primary" } base_instance_name = "vm" target_size = 2 } # [END cloudloadbalancing_ext_http_gce_instance_mig] # [START cloudloadbalancing_ext_http_gce_instance_firewall_rule] resource "google_compute_firewall" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-allow-health-check" direction = "INGRESS" network = "global/networks/default" priority = 1000 source_ranges = ["130.211.0.0/22", "35.191.0.0/16"] target_tags = ["allow-health-check"] allow { ports = ["80"] protocol = "tcp" } } # [END cloudloadbalancing_ext_http_gce_instance_firewall_rule] # [START cloudloadbalancing_ext_http_gce_instance_ip_address] resource "google_compute_global_address" "default" { depends_on = [google_project_service.compute] project = google_project.project.project_id name = "lb-ipv4-1" ip_version = "IPV4" } # [END cloudloadbalancing_ext_http_gce_instance_ip_address] # [START cloudloadbalancing_ext_http_gce_instance_health_check] resource "google_compute_health_check" "default" { depends_on = [google_project_service.compute] name = "http-basic-check" project = google_project.project.project_id check_interval_sec = 5 healthy_threshold = 2 http_health_check { port = 80 port_specification = "USE_FIXED_PORT" proxy_header = "NONE" request_path = "/" } log_config { enable = true } timeout_sec = 5 unhealthy_threshold = 2 } # [END cloudloadbalancing_ext_http_gce_instance_health_check] # [START cloudloadbalancing_ext_http_gce_instance_health_check] resource "google_compute_health_check" "http-basic-check-2" { depends_on = [google_project_service.compute] name = "http-basic-check-2" project = google_project.project.project_id check_interval_sec = 5 healthy_threshold = 2 http_health_check { port = 80 port_specification = "USE_FIXED_PORT" proxy_header = "NONE" request_path = "/" } timeout_sec = 5 unhealthy_threshold = 2 } # [END cloudloadbalancing_ext_http_gce_instance_health_check] # [START cloudloadbalancing_ext_tcp_gce_instance_health_check] resource "google_compute_health_check" "tcp-basic-check-1" { depends_on = [google_project_service.compute] name = "tcp-basic-check-1" project = google_project.project.project_id check_interval_sec = 5 timeout_sec = 5 tcp_health_check { port = 80 } log_config { enable = true } } # [END cloudloadbalancing_ext_tcp_gce_instance_health_check] # [START cloudloadbalancing_ext_http_gce_instance_backend_service] resource "google_compute_backend_service" "default" { name = "web-backend-service" project = google_project.project.project_id connection_draining_timeout_sec = 0 health_checks = [google_compute_health_check.default.id] load_balancing_scheme = "EXTERNAL" port_name = "http" protocol = "HTTP" session_affinity = "NONE" timeout_sec = 30 backend { group = google_compute_instance_group_manager.default.instance_group balancing_mode = "UTILIZATION" capacity_scaler = 1.0 } } # [END cloudloadbalancing_ext_http_gce_instance_backend_service] # [START cloudloadbalancing_ext_http_gce_instance_url_map] resource "google_compute_url_map" "default" { project = google_project.project.project_id name = "web-map-http" default_service = google_compute_backend_service.default.id } # [END cloudloadbalancing_ext_http_gce_instance_url_map] # [START cloudloadbalancing_ext_http_gce_instance_target_http_proxy] resource "google_compute_target_http_proxy" "default" { project = google_project.project.project_id name = "http-lb-proxy" url_map = google_compute_url_map.default.id } # [END cloudloadbalancing_ext_http_gce_instance_target_http_proxy] # [START cloudloadbalancing_ext_http_gce_instance_forwarding_rule] resource "google_compute_global_forwarding_rule" "default" { project = google_project.project.project_id name = "http-content-rule" ip_protocol = "TCP" load_balancing_scheme = "EXTERNAL" port_range = "80-80" target = google_compute_target_http_proxy.default.id ip_address = google_compute_global_address.default.id } # [END cloudloadbalancing_ext_http_gce_instance_forwarding_rule] ================================================ FILE: test-data/lb1/json-dumps/compute-aggregated-backendServices.json ================================================ { "kind": "compute#backendServiceAggregatedList", "id": "projects/gcpdiag-lb1-aaaa/aggregated/backendServices", "items": { "global": { "backendServices": [ { "kind": "compute#backendService", "id": "3538406228716304628", "creationTimestamp": "2022-08-25T07:24:27.356-07:00", "name": "web-backend-service", "description": "", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example", "balancingMode": "UTILIZATION", "capacityScaler": 1 } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check" ], "timeoutSec": 30, "port": 80, "protocol": "HTTP", "fingerprint": "uf9A59CplJc=", "portName": "http", "enableCDN": false, "sessionAffinity": "NONE", "affinityCookieTtlSec": 0, "loadBalancingScheme": "EXTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 }, "iap": { "enabled": false, "oauth2ClientId": "", "oauth2ClientSecretSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } } ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/aggregated/backendServices" } ================================================ FILE: test-data/lb1/json-dumps/compute-aggregated-forwardingRules.json ================================================ { "kind": "compute#forwardingRuleAggregatedList", "id": "projects/gcpdiag-lb1-aaaa/aggregated/forwardingRules", "items": { "regions/us-west1": { "forwardingRules": [ { "kind": "compute#forwardingRule", "id": "4245322038451922234", "creationTimestamp": "2024-02-02T22:21:59.365-08:00", "name": "forwardingRule1", "description": "", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1", "IPAddress": "9.1.2.7", "IPProtocol": "TCP", "portRange": "80-80", "target": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/targetHttpProxies/forwardingRule1-target-proxy", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/forwardingRules/forwardingRule1", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/subnetworks/backend-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/lb-network", "networkTier": "PREMIUM", "labelFingerprint": "42Wmu7y8rSM=", "fingerprint": "zUL2wdvikcQ=", "allowGlobalAccess": true } ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/aggregated/forwardingRules" } ================================================ FILE: test-data/lb1/json-dumps/compute-backendServices.json ================================================ { "kind": "compute#backendServiceList", "id": "projects/gcpdiag-lb1-aaaa/global/backendServices/", "items": [ { "kind": "compute#backendService", "id": "3538406228716304628", "creationTimestamp": "2022-08-25T07:24:27.356-07:00", "name": "web-backend-service", "description": "", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example", "balancingMode": "UTILIZATION", "capacityScaler": 1 } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check" ], "timeoutSec": 30, "port": 80, "protocol": "HTTP", "fingerprint": "uf9A59CplJc=", "portName": "http", "enableCDN": false, "sessionAffinity": "NONE", "affinityCookieTtlSec": 0, "loadBalancingScheme": "EXTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 }, "iap": { "enabled": false, "oauth2ClientId": "", "oauth2ClientSecretSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/backendServices/" } ================================================ FILE: test-data/lb1/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "8591756786596985669", "creationTimestamp": "2022-08-25T07:22:34.810-07:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/8591756786596985669", "autoCreateSubnetworks": true, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east2/subnetworks/default" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/lb1/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "9um0yrlKtsk=", "kind": "compute#metadata" }, "creationTimestamp": "2022-08-25T07:22:28.064-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12340009-compute@developer.gserviceaccount.com", "id": "1866944745413688140", "kind": "compute#project", "name": "gcpdiag-lb1-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 5 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 1 }, { "limit": 300, "metric": "ROUTES", "usage": 1 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 1 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 500, "metric": "HEALTH_CHECKS", "usage": 1 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 1 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 1 }, { "limit": 100, "metric": "URL_MAPS", "usage": 1 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 1 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 1 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 34 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/lb1/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-lb1-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast3", "supportsPzs": false }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 24, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-southwest1", "supportsPzs": false }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west6", "supportsPzs": false }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west8", "supportsPzs": false }, { "kind": "compute#region", "id": "1520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9", "description": "europe-west9", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west9-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west9-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west9-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west9", "supportsPzs": false }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 2 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 20 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 2 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 1 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 1 }, { "metric": "INSTANCES", "limit": 6000, "usage": 2 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 24, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 4096, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 500, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 6000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 0, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 128, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east5", "supportsPzs": false }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 16, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 48, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions" } ================================================ FILE: test-data/lb1/json-dumps/healthChecks.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-lb1-aaaa/global/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "6570916794820924287", "creationTimestamp": "2023-11-22T17:40:32.481-08:00", "name": "http-basic-check", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check", "logConfig": { "enable": true } }, { "kind": "compute#healthCheck", "id": "2011808073814110499", "creationTimestamp": "2023-11-22T11:00:28.722-08:00", "name": "http-basic-check-2", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check-2" }, { "kind": "compute#healthCheck", "id": "4700445592381550883", "creationTimestamp": "2023-11-22T11:00:28.748-08:00", "name": "tcp-basic-check-1", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "TCP", "tcpHealthCheck": { "port": 80, "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/tcp-basic-check-1", "logConfig": { "enable": true } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/" } ================================================ FILE: test-data/lb1/json-dumps/project.json ================================================ { "name": "projects/12340009", "parent": "folders/373737373737", "projectId": "gcpdiag-lb1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - lb1", "createTime": "2022-08-25T14:21:48.527Z", "updateTime": "2022-08-25T14:21:50.098Z", "etag": "TaJ5DhDFtwUvBRUHyHHKpQ==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/lb1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340009/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340009" }, { "name": "projects/12340009/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340009" } ] } ================================================ FILE: test-data/lb1/project.tf ================================================ /** * 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - lb2" project_id = "gcpdiag-lb2-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/lb1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/lb2/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340009 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ REGION1 = europe-west4 ZONE1 = us-east1-b ZONE2 = europe-west4-b all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-igs-$(ZONE1).json \ json-dumps/compute-instances-$(ZONE1).json \ json-dumps/compute-instances-$(ZONE2).json \ json-dumps/compute-negs-$(ZONE2).json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-regions.json \ json-dumps/compute-zones.json \ json-dumps/compute-aggregated-backendServices.json \ json-dumps/compute-backendServices-$(REGION1).json \ json-dumps/compute-aggregated-forwardingRules.json \ json-dumps/healthChecks.json \ json-dumps/regionHealthChecks-$(REGION1).json \ json-dumps/lb-insights-$(REGION1).json \ json-dumps/lb-insights-global.json \ json-dumps/backendService-web-backend-service-get-health-instanceGroups-lb-backend-example-$(ZONE1).json \ json-dumps/regionBackendService-backend-service-2-$(REGION1)-get-health-networkEndpointGroups-neg1-$(ZONE2).json \ json-dumps/logging-entries-1.json \ json-dumps/monitoring-query.json \ json-dumps/compute-igs-aggregated.json include ../Makefile.inc define MONITORING_QUERY { \ "query": "fetch gce_instance::compute.googleapis.com/instance/uptime_total \ | within 10m \ | group_by [resource.zone, metric.instance_name] \ | group_by 5m, [.mean, .count] \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/regionHealthChecks-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$*/healthChecks/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/healthChecks.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/lb-insights-%.json: $(CURL) -fv \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: $(PROJECT_ID)" \ 'https://recommender.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$*/insightTypes/google.networkanalyzer.networkservices.loadBalancerInsight/insights' \ | $(SED_SUBST_FAKE) >$@ json-dumps/backendService-web-backend-service-get-health-instanceGroups-lb-backend-example-us-east1-b.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/backendServices/web-backend-service/getHealth' \ --data '{"group": "projects/$(PROJECT_ID)/zones/$(ZONE)/instanceGroups/lb-backend-example"}' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/regionBackendService-backend-service-2-europe-west4-get-health-networkEndpointGroups-neg1-europe-west4-b.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/europe-west4/backendServices/backend-service-2/getHealth' \ --data '{"group": "projects/$(PROJECT_ID)/zones/europe-west4-b/networkEndpointGroups/neg1"}' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ # If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found. define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " resource.type=\"gce_instance_group\" log_name=\"projects/gcpdiag-lb2-mqc6ejd8/logs/compute.googleapis.com%2Fhealthchecks\" resource.labels.instance_group_name=\"lb-backend-example\" resource.labels.location=us-east1-b jsonPayload.healthCheckProbeResult.healthState=\"UNHEALTHY\" " } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/lb2/http-lb-mig.tf ================================================ # External HTTP load balancer with an CDN-enabled managed instance group backend # [START cloudloadbalancing_ext_http_gce_instance_template] resource "google_compute_instance_template" "default" { depends_on = [google_project_service.compute] name = "lb-backend-template" project = google_project.project.project_id disk { auto_delete = true boot = true device_name = "persistent-disk-0" mode = "READ_WRITE" source_image = "projects/debian-cloud/global/images/family/debian-11" type = "PERSISTENT" } labels = { managed-by-cnrm = "true" } machine_type = "n1-standard-1" metadata = { startup-script = "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n http://169.254.169.254/computeMetadata/v1/instance/name)\"\n sudo echo \"Page served from: $vm_hostname\" | \\\n tee /var/www/html/index.html\n sudo systemctl restart apache2" } network_interface { access_config { network_tier = "PREMIUM" } network = "default" #subnetwork = "regions/us-east1/subnetworks/default" } region = "us-east1" service_account { email = "default" scopes = ["https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append"] } tags = ["allow-health-check"] } # [END cloudloadbalancing_ext_http_gce_instance_template] # [START cloudloadbalancing_ext_http_gce_instance_mig] resource "google_compute_instance_group_manager" "default" { depends_on = [google_project_service.compute] project = google_project.project.project_id name = "lb-backend-example" zone = "us-east1-b" named_port { name = "http" port = 80 } version { instance_template = google_compute_instance_template.default.id name = "primary" } base_instance_name = "vm" target_size = 2 } # [END cloudloadbalancing_ext_http_gce_instance_mig] # [START cloudloadbalancing_ext_http_gce_instance_firewall_rule] resource "google_compute_firewall" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-allow-health-check" direction = "INGRESS" network = "default" priority = 1000 # incorrect source ranges source_ranges = ["130.240.0.0/22", "35.100.0.0/16"] target_tags = ["allow-health-check"] allow { ports = ["80"] protocol = "tcp" } } # [END cloudloadbalancing_ext_http_gce_instance_firewall_rule] # [START cloudloadbalancing_ext_http_gce_instance_ip_address] resource "google_compute_global_address" "default" { depends_on = [google_project_service.compute] project = google_project.project.project_id name = "lb-ipv4-1" ip_version = "IPV4" } # [END cloudloadbalancing_ext_http_gce_instance_ip_address] # [START cloudloadbalancing_ext_http_gce_instance_health_check] resource "google_compute_health_check" "default" { depends_on = [google_project_service.compute] name = "http-basic-check" project = google_project.project.project_id check_interval_sec = 5 healthy_threshold = 2 http_health_check { # port different than the one in the backend service port = 88 port_specification = "USE_FIXED_PORT" proxy_header = "NONE" request_path = "/" } log_config { enable = true } timeout_sec = 5 unhealthy_threshold = 2 } # [END cloudloadbalancing_ext_http_gce_instance_health_check] # [START cloudloadbalancing_ext_http_gce_instance_health_check] resource "google_compute_health_check" "http-basic-check-2" { depends_on = [google_project_service.compute] name = "http-basic-check-2" project = google_project.project.project_id check_interval_sec = 5 healthy_threshold = 2 http_health_check { port = 80 port_specification = "USE_FIXED_PORT" proxy_header = "NONE" request_path = "/" } timeout_sec = 5 unhealthy_threshold = 2 } # [END cloudloadbalancing_ext_http_gce_instance_health_check] # [START cloudloadbalancing_ext_tcp_gce_instance_health_check] resource "google_compute_health_check" "tcp-basic-check-1" { depends_on = [google_project_service.compute] name = "tcp-basic-check-1" project = google_project.project.project_id check_interval_sec = 5 timeout_sec = 5 tcp_health_check { port = 80 } log_config { enable = true } } # [END cloudloadbalancing_ext_tcp_gce_instance_health_check] # [START cloudloadbalancing_ext_http_gce_instance_backend_service] resource "google_compute_backend_service" "default" { name = "web-backend-service" project = google_project.project.project_id connection_draining_timeout_sec = 0 health_checks = [google_compute_health_check.default.id] load_balancing_scheme = "EXTERNAL" port_name = "http" protocol = "HTTP" session_affinity = "NONE" timeout_sec = 30 backend { group = google_compute_instance_group_manager.default.instance_group balancing_mode = "UTILIZATION" capacity_scaler = 1.0 } } # [END cloudloadbalancing_ext_http_gce_instance_backend_service] # [START cloudloadbalancing_ext_http_gce_instance_url_map] resource "google_compute_url_map" "default" { project = google_project.project.project_id name = "web-map-http" default_service = google_compute_backend_service.default.id } # [END cloudloadbalancing_ext_http_gce_instance_url_map] # [START cloudloadbalancing_ext_http_gce_instance_target_http_proxy] resource "google_compute_target_http_proxy" "default" { project = google_project.project.project_id name = "http-lb-proxy" url_map = google_compute_url_map.default.id } # [END cloudloadbalancing_ext_http_gce_instance_target_http_proxy] # [START cloudloadbalancing_ext_http_gce_instance_forwarding_rule] resource "google_compute_global_forwarding_rule" "default" { project = google_project.project.project_id name = "http-content-rule" ip_protocol = "TCP" load_balancing_scheme = "EXTERNAL" port_range = "80-80" target = google_compute_target_http_proxy.default.id ip_address = google_compute_global_address.default.id } # [END cloudloadbalancing_ext_http_gce_instance_forwarding_rule] ================================================ FILE: test-data/lb2/json-dumps/backendService-web-backend-service-get-health-instanceGroups-lb-backend-example-us-east1-b.json ================================================ { "kind": "compute#backendServiceGroupHealth", "healthStatus": [ { "ipAddress": "10.142.0.2", "port": 80, "instance": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-pn3l", "healthState": "UNHEALTHY" }, { "ipAddress": "10.142.0.3", "port": 80, "instance": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-m5q1", "healthState": "UNHEALTHY" } ] } ================================================ FILE: test-data/lb2/json-dumps/compute-aggregated-backendServices.json ================================================ { "kind": "compute#backendServiceAggregatedList", "id": "projects/gcpdiag-lb2-aaaa/aggregated/backendServices", "items": { "global": { "backendServices": [ { "kind": "compute#backendService", "id": "4222530648416744207", "creationTimestamp": "2024-08-12T01:54:56.339-07:00", "name": "web-backend-service", "description": "", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example", "balancingMode": "UTILIZATION", "capacityScaler": 1 } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/healthChecks/http-basic-check" ], "timeoutSec": 30, "port": 80, "protocol": "HTTP", "fingerprint": "JJHYy-dQ_ks=", "portName": "http", "enableCDN": false, "sessionAffinity": "NONE", "affinityCookieTtlSec": 0, "loadBalancingScheme": "EXTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 }, "iap": { "enabled": false }, "usedBy": [ { "reference": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/urlMaps/web-map-http" } ] } ] }, "regions/europe-west4": { "backendServices": [ { "kind": "compute#backendService", "id": "4868168055250150809", "creationTimestamp": "2024-08-13T06:11:18.777-07:00", "name": "backend-service-2", "description": "", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/tcp-basic-check-2" ], "timeoutSec": 30, "port": 80, "protocol": "TCP", "fingerprint": "Q-UN6RnknOk=", "portName": "http", "enableCDN": false, "sessionAffinity": "NONE", "affinityCookieTtlSec": 0, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4", "loadBalancingScheme": "EXTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 }, "iap": { "enabled": false } } ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/aggregated/backendServices" } ================================================ FILE: test-data/lb2/json-dumps/compute-aggregated-forwardingRules.json ================================================ { "kind": "compute#forwardingRuleAggregatedList", "id": "projects/gcpdiag-lb1-aaaa/aggregated/forwardingRules", "items": { "regions/us-west1": { "forwardingRules": [ { "kind": "compute#forwardingRule", "id": "4245322038451922234", "creationTimestamp": "2024-02-02T22:21:59.365-08:00", "name": "forwardingRule1", "description": "", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1", "IPAddress": "9.1.2.7", "IPProtocol": "TCP", "portRange": "80-80", "target": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/targetHttpProxies/forwardingRule1-target-proxy", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/forwardingRules/forwardingRule1", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/subnetworks/backend-subnet", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/lb-network", "networkTier": "PREMIUM", "labelFingerprint": "42Wmu7y8rSM=", "fingerprint": "zUL2wdvikcQ=", "allowGlobalAccess": true } ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/aggregated/forwardingRules" } ================================================ FILE: test-data/lb2/json-dumps/compute-backendServices-europe-west4.json ================================================ { "kind": "compute#backendServiceList", "id": "projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/", "items": [ { "kind": "compute#backendService", "id": "4868168055250150809", "creationTimestamp": "2024-08-13T06:11:18.777-07:00", "name": "backend-service-2", "description": "", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/tcp-basic-check-2" ], "timeoutSec": 30, "port": 80, "protocol": "TCP", "fingerprint": "Q-UN6RnknOk=", "portName": "http", "enableCDN": false, "sessionAffinity": "NONE", "affinityCookieTtlSec": 0, "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4", "loadBalancingScheme": "EXTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 }, "iap": { "enabled": false } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/" } ================================================ FILE: test-data/lb2/json-dumps/compute-igs-aggregated.json ================================================ { "kind": "compute#instanceGroupAggregatedList", "id": "projects/gcpdiag-lb2-aaaa/aggregated/instanceGroups", "items": { "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-central1'.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/us-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-central2'.", "data": [ { "key": "scope", "value": "regions/us-central2" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west1'.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west1'.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-east1'.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-east1'.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-northeast1'.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-southeast1'.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-east4'.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/australia-southeast1'.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west2'.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west3'.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/southamerica-east1'.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-south1'.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/northamerica-northeast1'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west4'.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-north1'.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west2'.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-east2'.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west6'.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-northeast2'.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-northeast3'.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west3'.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west4'.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-southeast2'.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-central2'.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/northamerica-northeast2'.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/asia-south2'.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/australia-southeast2'.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/southamerica-west1'.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/us-east7": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-east7'.", "data": [ { "key": "scope", "value": "regions/us-east7" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west8'.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west9'.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-east5'.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-southwest1'.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-south1'.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/me-west1'.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west12'.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/me-central1'.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-west10'.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/me-central2'.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/africa-south1'.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } }, "regions/us-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/us-west8'.", "data": [ { "key": "scope", "value": "regions/us-west8" } ] } }, "regions/northamerica-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/northamerica-south1'.", "data": [ { "key": "scope", "value": "regions/northamerica-south1" } ] } }, "regions/europe-north2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222regions/europe-north2'.", "data": [ { "key": "scope", "value": "regions/europe-north2" } ] } }, "zones/us-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-a'.", "data": [ { "key": "scope", "value": "zones/us-central1-a" } ] } }, "zones/us-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-b'.", "data": [ { "key": "scope", "value": "zones/us-central1-b" } ] } }, "zones/us-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-c'.", "data": [ { "key": "scope", "value": "zones/us-central1-c" } ] } }, "zones/us-central1-f": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central1-f'.", "data": [ { "key": "scope", "value": "zones/us-central1-f" } ] } }, "zones/us-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-b'.", "data": [ { "key": "scope", "value": "zones/us-central2-b" } ] } }, "zones/us-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-a'.", "data": [ { "key": "scope", "value": "zones/us-central2-a" } ] } }, "zones/us-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-c'.", "data": [ { "key": "scope", "value": "zones/us-central2-c" } ] } }, "zones/us-central2-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-central2-d'.", "data": [ { "key": "scope", "value": "zones/us-central2-d" } ] } }, "zones/europe-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-b'.", "data": [ { "key": "scope", "value": "zones/europe-west1-b" } ] } }, "zones/europe-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-c'.", "data": [ { "key": "scope", "value": "zones/europe-west1-c" } ] } }, "zones/europe-west1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west1-d'.", "data": [ { "key": "scope", "value": "zones/europe-west1-d" } ] } }, "zones/us-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-a'.", "data": [ { "key": "scope", "value": "zones/us-west1-a" } ] } }, "zones/us-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-b'.", "data": [ { "key": "scope", "value": "zones/us-west1-b" } ] } }, "zones/us-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west1-c'.", "data": [ { "key": "scope", "value": "zones/us-west1-c" } ] } }, "zones/asia-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-a'.", "data": [ { "key": "scope", "value": "zones/asia-east1-a" } ] } }, "zones/asia-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-b'.", "data": [ { "key": "scope", "value": "zones/asia-east1-b" } ] } }, "zones/asia-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east1-c'.", "data": [ { "key": "scope", "value": "zones/asia-east1-c" } ] } }, "zones/us-east1-b": { "instanceGroups": [ { "kind": "compute#instanceGroup", "id": "8026783087457753814", "creationTimestamp": "2025-02-07T02:45:13.643-08:00", "name": "lb-backend-example", "description": "This instance group is controlled by Instance Group Manager 11112222lb-backend-example'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "namedPorts": [ { "name": "http", "port": 80 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "fingerprint": "l9ccw0jwP90=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example", "size": 2, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1/subnetworks/default" } ] }, "zones/us-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east1-c'.", "data": [ { "key": "scope", "value": "zones/us-east1-c" } ] } }, "zones/us-east1-d": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east1-d'.", "data": [ { "key": "scope", "value": "zones/us-east1-d" } ] } }, "zones/asia-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-a" } ] } }, "zones/asia-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-b" } ] } }, "zones/asia-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast1-c" } ] } }, "zones/asia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-a" } ] } }, "zones/asia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-b" } ] } }, "zones/asia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast1-c" } ] } }, "zones/us-east4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-a'.", "data": [ { "key": "scope", "value": "zones/us-east4-a" } ] } }, "zones/us-east4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-b'.", "data": [ { "key": "scope", "value": "zones/us-east4-b" } ] } }, "zones/us-east4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east4-c'.", "data": [ { "key": "scope", "value": "zones/us-east4-c" } ] } }, "zones/australia-southeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-c" } ] } }, "zones/australia-southeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-a" } ] } }, "zones/australia-southeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast1-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast1-b" } ] } }, "zones/europe-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-a'.", "data": [ { "key": "scope", "value": "zones/europe-west2-a" } ] } }, "zones/europe-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-b'.", "data": [ { "key": "scope", "value": "zones/europe-west2-b" } ] } }, "zones/europe-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west2-c'.", "data": [ { "key": "scope", "value": "zones/europe-west2-c" } ] } }, "zones/europe-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-c'.", "data": [ { "key": "scope", "value": "zones/europe-west3-c" } ] } }, "zones/europe-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-a'.", "data": [ { "key": "scope", "value": "zones/europe-west3-a" } ] } }, "zones/europe-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west3-b'.", "data": [ { "key": "scope", "value": "zones/europe-west3-b" } ] } }, "zones/southamerica-east1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-a" } ] } }, "zones/southamerica-east1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-b" } ] } }, "zones/southamerica-east1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-east1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-east1-c" } ] } }, "zones/asia-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-b'.", "data": [ { "key": "scope", "value": "zones/asia-south1-b" } ] } }, "zones/asia-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-a'.", "data": [ { "key": "scope", "value": "zones/asia-south1-a" } ] } }, "zones/asia-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south1-c'.", "data": [ { "key": "scope", "value": "zones/asia-south1-c" } ] } }, "zones/northamerica-northeast1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-a" } ] } }, "zones/northamerica-northeast1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-b" } ] } }, "zones/northamerica-northeast1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast1-c" } ] } }, "zones/europe-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west4-c'.", "data": [ { "key": "scope", "value": "zones/europe-west4-c" } ] } }, "zones/europe-west4-b": { "instanceGroups": [ { "kind": "compute#instanceGroup", "id": "361518988230844717", "creationTimestamp": "2025-02-05T04:55:30.981-08:00", "name": "instance-group-1", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "http", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "fingerprint": "bPhGeNqJuxo=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instanceGroups/instance-group-1", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default" } ] }, "zones/europe-west4-a": { "instanceGroups": [ { "kind": "compute#instanceGroup", "id": "2488565369359920294", "creationTimestamp": "2025-02-06T07:16:25.517-08:00", "name": "gke-gke1-default-pool-dee670f4-grp", "description": "This instance group is controlled by Instance Group Manager 11112222gke-gke1-default-pool-dee670f4-grp'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a/instanceGroups/gke-gke1-default-pool-dee670f4-grp", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/gke1-subnet" }, { "kind": "compute#instanceGroup", "id": "4588026214929588524", "creationTimestamp": "2025-02-05T04:55:31.502-08:00", "name": "instance-group-1", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "http", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "fingerprint": "bPhGeNqJuxo=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "5283965411150192942", "creationTimestamp": "2025-02-05T04:55:29.186-08:00", "name": "instance-group-2", "description": "", "namedPorts": [ { "name": "http", "port": 8080 }, { "name": "https", "port": 8443 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "fingerprint": "OMWWjJuNHl0=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2", "size": 1, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default" }, { "kind": "compute#instanceGroup", "id": "1459469180646383936", "creationTimestamp": "2025-02-05T04:55:11.178-08:00", "name": "mig", "description": "This instance group is controlled by Instance Group Manager 11112222mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "fingerprint": "42WmSpB8rSM=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a/instanceGroups/mig", "size": 2, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default" } ] }, "zones/europe-north1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-b'.", "data": [ { "key": "scope", "value": "zones/europe-north1-b" } ] } }, "zones/europe-north1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-c'.", "data": [ { "key": "scope", "value": "zones/europe-north1-c" } ] } }, "zones/europe-north1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north1-a'.", "data": [ { "key": "scope", "value": "zones/europe-north1-a" } ] } }, "zones/us-west2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-c'.", "data": [ { "key": "scope", "value": "zones/us-west2-c" } ] } }, "zones/us-west2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-b'.", "data": [ { "key": "scope", "value": "zones/us-west2-b" } ] } }, "zones/us-west2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west2-a'.", "data": [ { "key": "scope", "value": "zones/us-west2-a" } ] } }, "zones/asia-east2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-c'.", "data": [ { "key": "scope", "value": "zones/asia-east2-c" } ] } }, "zones/asia-east2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-b'.", "data": [ { "key": "scope", "value": "zones/asia-east2-b" } ] } }, "zones/asia-east2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-east2-a'.", "data": [ { "key": "scope", "value": "zones/asia-east2-a" } ] } }, "zones/europe-west6-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-b'.", "data": [ { "key": "scope", "value": "zones/europe-west6-b" } ] } }, "zones/europe-west6-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-c'.", "data": [ { "key": "scope", "value": "zones/europe-west6-c" } ] } }, "zones/europe-west6-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west6-a'.", "data": [ { "key": "scope", "value": "zones/europe-west6-a" } ] } }, "zones/asia-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-b" } ] } }, "zones/asia-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-c" } ] } }, "zones/asia-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast2-a" } ] } }, "zones/asia-northeast3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-a'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-a" } ] } }, "zones/asia-northeast3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-c'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-c" } ] } }, "zones/asia-northeast3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-northeast3-b'.", "data": [ { "key": "scope", "value": "zones/asia-northeast3-b" } ] } }, "zones/us-west3-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-a'.", "data": [ { "key": "scope", "value": "zones/us-west3-a" } ] } }, "zones/us-west3-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-b'.", "data": [ { "key": "scope", "value": "zones/us-west3-b" } ] } }, "zones/us-west3-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west3-c'.", "data": [ { "key": "scope", "value": "zones/us-west3-c" } ] } }, "zones/us-west4-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-c'.", "data": [ { "key": "scope", "value": "zones/us-west4-c" } ] } }, "zones/us-west4-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-a'.", "data": [ { "key": "scope", "value": "zones/us-west4-a" } ] } }, "zones/us-west4-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west4-b'.", "data": [ { "key": "scope", "value": "zones/us-west4-b" } ] } }, "zones/asia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-a" } ] } }, "zones/asia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-c" } ] } }, "zones/asia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/asia-southeast2-b" } ] } }, "zones/europe-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-b'.", "data": [ { "key": "scope", "value": "zones/europe-central2-b" } ] } }, "zones/europe-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-c'.", "data": [ { "key": "scope", "value": "zones/europe-central2-c" } ] } }, "zones/europe-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-central2-a'.", "data": [ { "key": "scope", "value": "zones/europe-central2-a" } ] } }, "zones/northamerica-northeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-b" } ] } }, "zones/northamerica-northeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-a" } ] } }, "zones/northamerica-northeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-northeast2-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-northeast2-c" } ] } }, "zones/asia-south2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-a'.", "data": [ { "key": "scope", "value": "zones/asia-south2-a" } ] } }, "zones/asia-south2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-c'.", "data": [ { "key": "scope", "value": "zones/asia-south2-c" } ] } }, "zones/asia-south2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/asia-south2-b'.", "data": [ { "key": "scope", "value": "zones/asia-south2-b" } ] } }, "zones/australia-southeast2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-a'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-a" } ] } }, "zones/australia-southeast2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-c'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-c" } ] } }, "zones/australia-southeast2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/australia-southeast2-b'.", "data": [ { "key": "scope", "value": "zones/australia-southeast2-b" } ] } }, "zones/southamerica-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-a'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-a" } ] } }, "zones/southamerica-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-b'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-b" } ] } }, "zones/southamerica-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/southamerica-west1-c'.", "data": [ { "key": "scope", "value": "zones/southamerica-west1-c" } ] } }, "zones/us-east7-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-a'.", "data": [ { "key": "scope", "value": "zones/us-east7-a" } ] } }, "zones/us-east7-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-b'.", "data": [ { "key": "scope", "value": "zones/us-east7-b" } ] } }, "zones/us-east7-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east7-c'.", "data": [ { "key": "scope", "value": "zones/us-east7-c" } ] } }, "zones/europe-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-a'.", "data": [ { "key": "scope", "value": "zones/europe-west8-a" } ] } }, "zones/europe-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-b'.", "data": [ { "key": "scope", "value": "zones/europe-west8-b" } ] } }, "zones/europe-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west8-c'.", "data": [ { "key": "scope", "value": "zones/europe-west8-c" } ] } }, "zones/europe-west9-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-b'.", "data": [ { "key": "scope", "value": "zones/europe-west9-b" } ] } }, "zones/europe-west9-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-a'.", "data": [ { "key": "scope", "value": "zones/europe-west9-a" } ] } }, "zones/europe-west9-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west9-c'.", "data": [ { "key": "scope", "value": "zones/europe-west9-c" } ] } }, "zones/us-east5-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-c'.", "data": [ { "key": "scope", "value": "zones/us-east5-c" } ] } }, "zones/us-east5-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-b'.", "data": [ { "key": "scope", "value": "zones/us-east5-b" } ] } }, "zones/us-east5-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-east5-a'.", "data": [ { "key": "scope", "value": "zones/us-east5-a" } ] } }, "zones/europe-southwest1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-b'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-b" } ] } }, "zones/europe-southwest1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-a'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-a" } ] } }, "zones/europe-southwest1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-southwest1-c'.", "data": [ { "key": "scope", "value": "zones/europe-southwest1-c" } ] } }, "zones/us-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-c'.", "data": [ { "key": "scope", "value": "zones/us-south1-c" } ] } }, "zones/us-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-a'.", "data": [ { "key": "scope", "value": "zones/us-south1-a" } ] } }, "zones/us-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-south1-b'.", "data": [ { "key": "scope", "value": "zones/us-south1-b" } ] } }, "zones/me-west1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-b'.", "data": [ { "key": "scope", "value": "zones/me-west1-b" } ] } }, "zones/me-west1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-a'.", "data": [ { "key": "scope", "value": "zones/me-west1-a" } ] } }, "zones/me-west1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-west1-c'.", "data": [ { "key": "scope", "value": "zones/me-west1-c" } ] } }, "zones/europe-west12-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-c'.", "data": [ { "key": "scope", "value": "zones/europe-west12-c" } ] } }, "zones/europe-west12-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-a'.", "data": [ { "key": "scope", "value": "zones/europe-west12-a" } ] } }, "zones/europe-west12-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west12-b'.", "data": [ { "key": "scope", "value": "zones/europe-west12-b" } ] } }, "zones/me-central1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-a'.", "data": [ { "key": "scope", "value": "zones/me-central1-a" } ] } }, "zones/me-central1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-b'.", "data": [ { "key": "scope", "value": "zones/me-central1-b" } ] } }, "zones/me-central1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central1-c'.", "data": [ { "key": "scope", "value": "zones/me-central1-c" } ] } }, "zones/europe-west10-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-c'.", "data": [ { "key": "scope", "value": "zones/europe-west10-c" } ] } }, "zones/europe-west10-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-a'.", "data": [ { "key": "scope", "value": "zones/europe-west10-a" } ] } }, "zones/europe-west10-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-west10-b'.", "data": [ { "key": "scope", "value": "zones/europe-west10-b" } ] } }, "zones/me-central2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-c'.", "data": [ { "key": "scope", "value": "zones/me-central2-c" } ] } }, "zones/me-central2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-a'.", "data": [ { "key": "scope", "value": "zones/me-central2-a" } ] } }, "zones/me-central2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/me-central2-b'.", "data": [ { "key": "scope", "value": "zones/me-central2-b" } ] } }, "zones/africa-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-b'.", "data": [ { "key": "scope", "value": "zones/africa-south1-b" } ] } }, "zones/africa-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-a'.", "data": [ { "key": "scope", "value": "zones/africa-south1-a" } ] } }, "zones/africa-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/africa-south1-c'.", "data": [ { "key": "scope", "value": "zones/africa-south1-c" } ] } }, "zones/us-west8-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-c'.", "data": [ { "key": "scope", "value": "zones/us-west8-c" } ] } }, "zones/us-west8-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-a'.", "data": [ { "key": "scope", "value": "zones/us-west8-a" } ] } }, "zones/us-west8-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/us-west8-b'.", "data": [ { "key": "scope", "value": "zones/us-west8-b" } ] } }, "zones/northamerica-south1-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-b'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-b" } ] } }, "zones/northamerica-south1-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-a'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-a" } ] } }, "zones/northamerica-south1-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/northamerica-south1-c'.", "data": [ { "key": "scope", "value": "zones/northamerica-south1-c" } ] } }, "zones/europe-north2-c": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-c'.", "data": [ { "key": "scope", "value": "zones/europe-north2-c" } ] } }, "zones/europe-north2-a": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-a'.", "data": [ { "key": "scope", "value": "zones/europe-north2-a" } ] } }, "zones/europe-north2-b": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "No results for the scope 11112222zones/europe-north2-b'.", "data": [ { "key": "scope", "value": "zones/europe-north2-b" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/aggregated/instanceGroups" } ================================================ FILE: test-data/lb2/json-dumps/compute-igs-us-east1-b.json ================================================ { "kind": "compute#instanceGroupList", "id": "projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups", "items": [ { "kind": "compute#instanceGroup", "id": "3727997629940134718", "creationTimestamp": "2024-08-12T01:54:41.142-07:00", "name": "lb-backend-example", "description": "This instance group is controlled by Instance Group Manager 'lb-backend-example'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers", "namedPorts": [ { "name": "http", "port": 80 } ], "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "fingerprint": "l9ccw0jwP90=", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example", "size": 2, "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups" } ================================================ FILE: test-data/lb2/json-dumps/compute-instances-europe-west4-b.json ================================================ { "id": "projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-08-13T05:59:45.573-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/disks/neg-vm", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3190067059314058837", "kind": "compute#instance", "labelFingerprint": "42WmSpB8rSM=", "lastStartTimestamp": "2024-08-13T05:59:53.039-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "startup-script", "value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n http://169.254.169.254/computeMetadata/v1/instance/name)\"\n sudo echo \"Page served from: $vm_hostname\" | \\\n tee /var/www/html/index.html\n sudo systemctl restart apache2" } ], "kind": "compute#metadata" }, "name": "neg-vm", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "networkIP": "10.164.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instances/neg-vm", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instances" } ================================================ FILE: test-data/lb2/json-dumps/compute-instances-us-east1-b.json ================================================ { "id": "projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances", "items": [ { "cpuPlatform": "Intel Haswell", "creationTimestamp": "2024-08-12T01:54:50.572-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/disks/vm-m5q1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "1501310902351459126", "kind": "compute#instance", "labelFingerprint": "Z9VAAJ71T-w=", "labels": { "managed-by-cnrm": "true" }, "lastStartTimestamp": "2024-08-12T01:54:57.272-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/machineTypes/n1-standard-1", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340009/global/instanceTemplates/lb-backend-template" }, { "key": "created-by", "value": "projects/12340009/zones/us-east1-b/instanceGroupManagers/lb-backend-example" }, { "key": "startup-script", "value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n http://169.254.169.254/computeMetadata/v1/instance/name)\"\n sudo echo \"Page served from: $vm_hostname\" | \\\n tee /var/www/html/index.html\n sudo systemctl restart apache2" } ], "kind": "compute#metadata" }, "name": "vm-m5q1", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.229.107.36", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "networkIP": "10.142.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-m5q1", "serviceAccounts": [ { "email": "12340009-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "allow-health-check" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b" }, { "cpuPlatform": "Intel Haswell", "creationTimestamp": "2024-08-12T01:54:49.373-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/disks/vm-pn3l", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "8076354783928415030", "kind": "compute#instance", "labelFingerprint": "Z9VAAJ71T-w=", "labels": { "managed-by-cnrm": "true" }, "lastStartTimestamp": "2024-08-12T01:54:56.639-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/machineTypes/n1-standard-1", "metadata": { "fingerprint": "REDACTED", "items": [ { "key": "instance-template", "value": "projects/12340009/global/instanceTemplates/lb-backend-template" }, { "key": "created-by", "value": "projects/12340009/zones/us-east1-b/instanceGroupManagers/lb-backend-example" }, { "key": "startup-script", "value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n http://169.254.169.254/computeMetadata/v1/instance/name)\"\n sudo echo \"Page served from: $vm_hostname\" | \\\n tee /var/www/html/index.html\n sudo systemctl restart apache2" } ], "kind": "compute#metadata" }, "name": "vm-pn3l", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.243.253.16", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "networkIP": "10.142.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1/subnetworks/default" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-pn3l", "serviceAccounts": [ { "email": "12340009-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append" ] } ], "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "allow-health-check" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances" } ================================================ FILE: test-data/lb2/json-dumps/compute-negs-europe-west4-b.json ================================================ { "kind": "compute#networkEndpointGroupList", "id": "projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups", "items": [ { "kind": "compute#networkEndpointGroup", "id": "618627442928968719", "creationTimestamp": "2024-08-13T06:08:48.608-07:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1", "name": "neg1", "networkEndpointType": "GCE_VM_IP", "size": 1, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups" } ================================================ FILE: test-data/lb2/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "8591756786596985669", "creationTimestamp": "2022-08-25T07:22:34.810-07:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/8591756786596985669", "autoCreateSubnetworks": true, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east2/subnetworks/default" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/lb2/json-dumps/compute-project.json ================================================ { "cloudArmorTier": "CA_STANDARD", "commonInstanceMetadata": { "fingerprint": "w5un_8LQwuw=", "kind": "compute#metadata" }, "creationTimestamp": "2024-08-12T01:52:54.027-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12340009-compute@developer.gserviceaccount.com", "id": "1661314063513449354", "kind": "compute#project", "name": "gcpdiag-lb2-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 5 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 1 }, { "limit": 300, "metric": "ROUTES", "usage": 0 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 1 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 1000, "metric": "HEALTH_CHECKS", "usage": 3 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 1 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 1 }, { "limit": 100, "metric": "URL_MAPS", "usage": 1 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 0 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 0 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 100, "metric": "SSL_POLICIES", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES", "usage": 1 }, { "limit": 750, "metric": "GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa", "vmDnsSetting": "ZONAL_ONLY", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/lb2/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-lb2-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1", "description": "africa-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/africa-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast3", "supportsPzs": true }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south1", "supportsPzs": true }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast2", "supportsPzs": true }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-southwest1", "supportsPzs": true }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10", "description": "europe-west10", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west10", "supportsPzs": true }, { "kind": "compute#region", "id": "1570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12", "description": "europe-west12", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west12", "supportsPzs": true }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west6", "supportsPzs": true }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west8", "supportsPzs": true }, { "kind": "compute#region", "id": "1520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9", "description": "europe-west9", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west9", "supportsPzs": true }, { "kind": "compute#region", "id": "1580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1", "description": "me-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2", "description": "me-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1", "description": "me-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-west1", "supportsPzs": true }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 2 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 20 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 2 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 1 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 1 }, { "metric": "INSTANCES", "limit": 6000, "usage": 2 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 3000, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east5", "supportsPzs": false }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 750, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 200, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "SECURITY_POLICY_RULES_PER_REGION", "limit": 200, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_T2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C3_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "T2A_CPUS", "limit": 300, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_M3_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_80GB_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_80GB_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INTERNAL_LB_BACKEND_SERVICES", "limit": 150, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICIES_PER_REGION", "limit": 10, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULES_PER_REGION", "limit": 100, "usage": 0 }, { "metric": "NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION", "limit": 1000, "usage": 0 }, { "metric": "TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_DEVICE_V5", "limit": 0, "usage": 0 }, { "metric": "TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_L4_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_L4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "STATIC_EXTERNAL_IPV6_ADDRESS_RANGES", "limit": 5000, "usage": 0 }, { "metric": "SECURITY_POLICY_ADVANCED_RULES_PER_REGION", "limit": 20, "usage": 0 }, { "metric": "PREEMPTIBLE_TPU_LITE_PODSLICE_V5", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 1500, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "INSTANCE_TEMPLATES", "limit": 1000, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "SSL_POLICIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 1500, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 9.2233720368547758e+18, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions" } ================================================ FILE: test-data/lb2/json-dumps/compute-serial-port-output-neg-vm.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE. Up 20.49 seconds", "start": "0", "next": "63414", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput" } ================================================ FILE: test-data/lb2/json-dumps/compute-serial-port-output-vm-pn3l.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n[ 20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE. Up 20.49 seconds", "start": "0", "next": "63414", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput" } ================================================ FILE: test-data/lb2/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-lb2-aaaa/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-f", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Google Axion", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2611", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-a", "description": "africa-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-b", "description": "africa-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2612", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-c", "description": "africa-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2541", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-a", "description": "europe-southwest1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-b", "description": "europe-southwest1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2542", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-c", "description": "europe-southwest1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2591", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-a", "description": "europe-west10-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2592", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-b", "description": "europe-west10-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-c", "description": "europe-west10-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2571", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-a", "description": "europe-west12-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2572", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-b", "description": "europe-west12-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-c", "description": "europe-west12-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2521", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-a", "description": "europe-west9-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-b", "description": "europe-west9-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2522", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-c", "description": "europe-west9-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-a", "description": "me-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2581", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-b", "description": "me-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2582", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-c", "description": "me-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2601", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-a", "description": "me-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2602", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-b", "description": "me-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-c", "description": "me-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2561", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-a", "description": "me-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-b", "description": "me-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2562", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-c", "description": "me-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2532", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-a", "description": "us-east5-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2531", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-b", "description": "us-east5-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-c", "description": "us-east5-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2551", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-a", "description": "us-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2552", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-b", "description": "us-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-c", "description": "us-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones" } ================================================ FILE: test-data/lb2/json-dumps/healthChecks.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-lb1-aaaa/global/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "6570916794820924287", "creationTimestamp": "2023-11-22T17:40:32.481-08:00", "name": "http-basic-check", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check", "logConfig": { "enable": true } }, { "kind": "compute#healthCheck", "id": "2011808073814110499", "creationTimestamp": "2023-11-22T11:00:28.722-08:00", "name": "http-basic-check-2", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "HTTP", "httpHealthCheck": { "port": 80, "portSpecification": "USE_FIXED_PORT", "requestPath": "/", "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check-2" }, { "kind": "compute#healthCheck", "id": "4700445592381550883", "creationTimestamp": "2023-11-22T11:00:28.748-08:00", "name": "tcp-basic-check-1", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "TCP", "tcpHealthCheck": { "port": 80, "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/tcp-basic-check-1", "logConfig": { "enable": true } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/" } ================================================ FILE: test-data/lb2/json-dumps/lb-insights-europe-west4.json ================================================ {} ================================================ FILE: test-data/lb2/json-dumps/lb-insights-global.json ================================================ { "insights": [ { "name": "projects/12340009/locations/global/insightTypes/google.networkanalyzer.networkservices.loadBalancerInsight/insights/1a5cab32-909c-4c1b-ac5c-848c6fe54c23", "description": "Backend services use different ports for health check and traffic", "content": { "backendServiceInfos": [ { "backendServiceUri": "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service", "associatedForwardingRuleUris": [ "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/forwardingRules/http-content-rule" ], "impactedInstanceGroupUris": [ "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example" ], "servingPortName": "http", "healthCheckUri": "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/healthChecks/http-basic-check", "healthCheckPortNumber": 88 } ] }, "lastRefreshTime": "2024-09-23T07:02:04.526707434Z", "observationPeriod": "3611220.209060096s", "stateInfo": { "state": "ACTIVE" }, "category": "PERFORMANCE", "targetResources": [ "//cloudresourcemanager.googleapis.com/projects/gcpdiag-lb2-aaaa" ], "insightSubtype": "HEALTH_CHECK_PORT_MISMATCH", "etag": "\"381e11271a290275\"", "severity": "LOW" }, { "name": "projects/12340009/locations/global/insightTypes/google.networkanalyzer.networkservices.loadBalancerInsight/insights/c50f45a6-968b-4f52-a784-3e86f60d1163", "description": "Health check firewall is not configured", "content": { "forwardingRuleUri": "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/forwardingRules/http-content-rule", "loadBalancerType": "EXTERNAL_HTTP_PROXY", "loadBalancerName": "web-map-http", "loadBalancerUri": "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/urlMaps/web-map-http", "healthCheckFirewallInfo": { "misconfiguredInstanceUris": [ "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-m5q1", "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-pn3l" ], "matchedFirewalls": [ { "firewallUri": "gcpdiag-lb2-aaaa::default::default-deny-ingress", "firewallAction": "DENY" } ] } }, "lastRefreshTime": "2024-09-23T07:02:04.602359880Z", "observationPeriod": "3611997.221035498s", "stateInfo": { "state": "ACTIVE" }, "category": "PERFORMANCE", "targetResources": [ "//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/forwardingRules/http-content-rule" ], "insightSubtype": "HEALTH_CHECK_FIREWALL_NOT_CONFIGURED", "etag": "\"5abfcf123b1d11e6\"", "severity": "MEDIUM" } ] } ================================================ FILE: test-data/lb2/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "insertId": "13pdgcnc969", "jsonPayload": { "healthCheckProbeResult": { "healthState": "UNHEALTHY", "previousHealthState": "HEALTHY", "targetIp": "10.142.0.2", "ipAddress": "10.142.0.2", "probeCompletionTimestamp": "2024-08-13T09:20:21.631554663Z", "targetPort": 80, "probeRequest": "/", "probeSourceIp": "35.191.193.100", "probeResultText": "HTTP response: , Error: Timeout waiting for connect", "healthCheckProtocol": "HTTP", "responseLatency": "5.001402s", "detailedHealthState": "TIMEOUT", "previousDetailedHealthState": "HEALTHY" } }, "resource": { "type": "gce_instance_group", "labels": { "instance_group_id": "3727997629940134718", "project_id": "gcpdiag-lb2-aaaa", "location": "us-east1-b", "instance_group_name": "lb-backend-example" } }, "timestamp": "2024-08-13T09:20:22.199333012Z", "severity": "INFO", "logName": "projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks", "receiveTimestamp": "2024-08-13T09:20:22.666336211Z" }, { "insertId": "13pdgcnc968", "jsonPayload": { "healthCheckProbeResult": { "previousDetailedHealthState": "HEALTHY", "probeCompletionTimestamp": "2024-08-13T09:20:21.475813306Z", "healthCheckProtocol": "HTTP", "ipAddress": "10.142.0.3", "detailedHealthState": "TIMEOUT", "healthState": "UNHEALTHY", "probeSourceIp": "35.191.193.100", "probeResultText": "HTTP response: , Error: Timeout waiting for connect", "targetIp": "10.142.0.3", "probeRequest": "/", "targetPort": 80, "responseLatency": "5.000828s", "previousHealthState": "HEALTHY" } }, "resource": { "type": "gce_instance_group", "labels": { "instance_group_name": "lb-backend-example", "location": "us-east1-b", "project_id": "gcpdiag-lb2-aaaa", "instance_group_id": "3727997629940134718" } }, "timestamp": "2024-08-13T09:20:22.199260545Z", "severity": "INFO", "logName": "projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks", "receiveTimestamp": "2024-08-13T09:20:22.666336211Z" }, { "insertId": "13pdgcnc7o7", "jsonPayload": { "healthCheckProbeResult": { "previousDetailedHealthState": "UNKNOWN", "healthState": "UNHEALTHY", "probeRequest": "/", "probeCompletionTimestamp": "2024-08-12T11:38:21.925734077Z", "targetPort": 88, "ipAddress": "10.142.0.3", "probeResultText": "HTTP response: , Error: Timeout waiting for connect", "targetIp": "10.142.0.3", "previousHealthState": "UNHEALTHY", "probeSourceIp": "35.191.193.100", "responseLatency": "5.000532s", "healthCheckProtocol": "HTTP", "detailedHealthState": "TIMEOUT" } }, "resource": { "type": "gce_instance_group", "labels": { "location": "us-east1-b", "instance_group_name": "lb-backend-example", "instance_group_id": "3727997629940134718", "project_id": "gcpdiag-lb2-aaaa" } }, "timestamp": "2024-08-12T11:38:23.660085464Z", "severity": "INFO", "logName": "projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks", "receiveTimestamp": "2024-08-12T11:38:24.424194648Z" }, { "insertId": "13pdgcnc7o6", "jsonPayload": { "healthCheckProbeResult": { "ipAddress": "10.142.0.2", "probeSourceIp": "35.191.193.101", "probeRequest": "/", "previousHealthState": "UNHEALTHY", "responseLatency": "5.000717s", "targetIp": "10.142.0.2", "targetPort": 88, "probeResultText": "HTTP response: , Error: Timeout waiting for connect", "healthCheckProtocol": "HTTP", "healthState": "UNHEALTHY", "probeCompletionTimestamp": "2024-08-12T11:38:22.220641335Z", "previousDetailedHealthState": "UNKNOWN", "detailedHealthState": "TIMEOUT" } }, "resource": { "type": "gce_instance_group", "labels": { "instance_group_id": "3727997629940134718", "project_id": "gcpdiag-lb2-aaaa", "location": "us-east1-b", "instance_group_name": "lb-backend-example" } }, "timestamp": "2024-08-12T11:38:23.489417160Z", "severity": "INFO", "logName": "projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks", "receiveTimestamp": "2024-08-12T11:38:24.424194648Z" }, { "insertId": "13pdgcnc7o5", "jsonPayload": { "healthCheckProbeResult": { "targetPort": 80, "detailedHealthState": "TIMEOUT", "targetIp": "10.142.0.3", "probeCompletionTimestamp": "2024-08-12T11:38:02.158189861Z", "responseLatency": "5.001404s", "probeSourceIp": "35.191.193.100", "ipAddress": "10.142.0.3", "healthCheckProtocol": "HTTP", "previousDetailedHealthState": "HEALTHY", "probeResultText": "HTTP response: , Error: Timeout waiting for connect", "probeRequest": "/", "previousHealthState": "HEALTHY", "healthState": "UNHEALTHY" } }, "resource": { "type": "gce_instance_group", "labels": { "location": "us-east1-b", "instance_group_id": "3727997629940134718", "project_id": "gcpdiag-lb2-aaaa", "instance_group_name": "lb-backend-example" } }, "timestamp": "2024-08-12T11:38:03.660044569Z", "severity": "INFO", "logName": "projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks", "receiveTimestamp": "2024-08-12T11:38:05.414612124Z" }, { "insertId": "13pdgcnc7o4", "jsonPayload": { "healthCheckProbeResult": { "targetPort": 80, "responseLatency": "5.001105s", "probeRequest": "/", "previousHealthState": "HEALTHY", "previousDetailedHealthState": "HEALTHY", "healthState": "UNHEALTHY", "healthCheckProtocol": "HTTP", "probeCompletionTimestamp": "2024-08-12T11:38:02.26396931Z", "ipAddress": "10.142.0.2", "targetIp": "10.142.0.2", "detailedHealthState": "TIMEOUT", "probeSourceIp": "35.191.193.98", "probeResultText": "HTTP response: , Error: Timeout waiting for connect" } }, "resource": { "type": "gce_instance_group", "labels": { "project_id": "gcpdiag-lb2-aaaa", "instance_group_id": "3727997629940134718", "location": "us-east1-b", "instance_group_name": "lb-backend-example" } }, "timestamp": "2024-08-12T11:38:02.660665555Z", "severity": "INFO", "logName": "projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks", "receiveTimestamp": "2024-08-12T11:38:04.419383730Z" } ], "nextPageToken": "EAE455yslIC87crEAUoUIhIiAgoAKgwI_5GitAYQ_5Pr3ANSBwikyrGfiR5gkv2gpYXD9KyKAWocCgwI-MrstQYQnuiagQMSCAgFEMavvr8BGAYgAA" } ================================================ FILE: test-data/lb2/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.zone" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_uptime_total_aggregate_mean", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "s" }, { "key": "value_uptime_total_aggregate_count", "valueType": "INT64", "metricKind": "GAUGE", "unit": "1" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "europe-west4-b" }, { "stringValue": "neg-vm" } ], "pointData": [ { "values": [ { "doubleValue": 1219297 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2024-08-27T15:45:06.919908Z", "endTime": "2024-08-27T15:45:06.919908Z" } }, { "values": [ { "doubleValue": 1219027 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-08-27T15:40:06.919908Z", "endTime": "2024-08-27T15:40:06.919908Z" } } ] }, { "labelValues": [ { "stringValue": "us-east1-b" }, { "stringValue": "vm-pn3l" } ], "pointData": [ { "values": [ { "doubleValue": 1320395 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2024-08-27T15:45:06.919908Z", "endTime": "2024-08-27T15:45:06.919908Z" } }, { "values": [ { "doubleValue": 1320125 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-08-27T15:40:06.919908Z", "endTime": "2024-08-27T15:40:06.919908Z" } } ] }, { "labelValues": [ { "stringValue": "us-east1-b" }, { "stringValue": "vm-m5q1" } ], "pointData": [ { "values": [ { "doubleValue": 1320407 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2024-08-27T15:45:06.919908Z", "endTime": "2024-08-27T15:45:06.919908Z" } }, { "values": [ { "doubleValue": 1320137 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-08-27T15:40:06.919908Z", "endTime": "2024-08-27T15:40:06.919908Z" } } ] } ] } ================================================ FILE: test-data/lb2/json-dumps/project.json ================================================ { "name": "projects/12340009", "parent": "folders/211134714592", "projectId": "gcpdiag-lb2-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - lb2", "createTime": "2024-08-09T11:54:30.204573Z", "updateTime": "2024-08-09T11:54:30.204573Z", "etag": "W/\"d955640477ae431d\"", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/lb2/json-dumps/regionBackendService-backend-service-2-europe-west4-get-health-networkEndpointGroups-neg1-europe-west4-b.json ================================================ { "kind": "compute#backendServiceGroupHealth", "healthStatus": [ { "ipAddress": "10.164.0.2", "port": 80, "instance": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instances/neg-vm", "healthState": "UNHEALTHY", "forwardingRuleIp": "34.91.64.191", "forwardingRule": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/forwardingRules/tcp-content-rule" } ] } ================================================ FILE: test-data/lb2/json-dumps/regionHealthChecks-europe-west4.json ================================================ { "kind": "compute#healthCheckList", "id": "projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/", "items": [ { "kind": "compute#healthCheck", "id": "2180228872595236041", "creationTimestamp": "2024-08-13T06:05:42.459-07:00", "name": "tcp-basic-check-2", "checkIntervalSec": 5, "timeoutSec": 5, "unhealthyThreshold": 2, "healthyThreshold": 2, "type": "TCP", "tcpHealthCheck": { "port": 80, "proxyHeader": "NONE" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/tcp-basic-check-2", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4", "logConfig": { "enable": true } } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/" } ================================================ FILE: test-data/lb2/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340009/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340009" }, { "name": "projects/12340009/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340009" }, { "name": "projects/12340009/services/recommender.googleapis.com", "config": { "name": "recommender.googleapis.com", "title": "Recommender API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340009" } ] } ================================================ FILE: test-data/lb2/passthrough-lb-neg.tf ================================================ /** * Copyright 2021 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. */ # Passthrough load balancer with NEG backend resource "google_compute_network_endpoint" "default-endpoint" { project = google_project.project.project_id network_endpoint_group = google_compute_network_endpoint_group.neg1.name zone = "europe-west4-b" instance = google_compute_instance.neg-vm.name ip_address = google_compute_instance.neg-vm.network_interface[0].network_ip } resource "google_compute_instance" "neg-vm" { project = google_project.project.project_id name = "neg-vm" machine_type = "e2-medium" zone = "europe-west4-b" desired_status = "RUNNING" network_interface { subnetwork_project = google_project.project.project_id subnetwork = "default" } boot_disk { initialize_params { image = "debian-cloud/debian-11" labels = { my_label = "value" } } } metadata_startup_script = "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n http://169.254.169.254/computeMetadata/v1/instance/name)\"\n sudo echo \"Page served from: $vm_hostname\" | \\\n tee /var/www/html/index.html\n sudo systemctl restart apache2" depends_on = [google_project_service.compute] } resource "google_compute_network_endpoint_group" "neg1" { project = google_project.project.project_id name = "neg1" network = "default" subnetwork = "default" network_endpoint_type = "GCE_VM_IP" zone = "europe-west4-b" depends_on = [google_project_service.compute] } resource "google_compute_firewall" "passthrough-lb-firewall" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "fw-allow-passthrough-health-check" direction = "INGRESS" network = "default" priority = 1000 source_ranges = ["35.191.0.0/16", "209.85.152.0/22", "209.85.204.0/22"] target_tags = ["allow-health-check"] allow { ports = ["80"] protocol = "tcp" } } resource "google_compute_region_health_check" "tcp-basic-check-2" { depends_on = [google_project_service.compute] name = "tcp-basic-check-2" project = google_project.project.project_id region = "europe-west4" check_interval_sec = 5 timeout_sec = 5 tcp_health_check { port = 80 } log_config { enable = true } } resource "google_compute_region_backend_service" "backend-service-2" { name = "backend-service-2" project = google_project.project.project_id region = "europe-west4" connection_draining_timeout_sec = 0 health_checks = [google_compute_region_health_check.tcp-basic-check-2.id] load_balancing_scheme = "EXTERNAL" protocol = "TCP" session_affinity = "NONE" timeout_sec = 30 backend { group = google_compute_network_endpoint_group.neg1.id balancing_mode = "CONNECTION" } } resource "google_compute_forwarding_rule" "forwarding-rule-1" { project = google_project.project.project_id name = "tcp-content-rule" region = "europe-west4" ip_protocol = "TCP" load_balancing_scheme = "EXTERNAL" port_range = "80-80" backend_service = google_compute_region_backend_service.backend-service-2.id } ================================================ FILE: test-data/lb2/project.tf ================================================ /** * 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - lb2" project_id = "gcpdiag-lb2-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "recommender" { project = google_project.project.project_id service = "recommender.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/lb2/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/lb3/Makefile ================================================ #!/bin/bash PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340009 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ REGION1 = europe-west4 ZONE1 = us-east1-b ZONE2 = europe-west4-b all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-aggregated-forwardingRules.json \ json-dumps/compute-aggregated-backendServices.json \ json-dumps/compute-sslCertificates.json \ json-dumps/compute-aggregated-targetHttpsProxies.json \ json-dumps/compute-targetHttpsProxies.json \ json-dumps/compute-targetSslProxies.json \ json-dumps/logging-entries-1.json include ../Makefile.inc # If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found. define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " resource.type=\"gce_target_https_proxy\" resource.labels.target_https_proxy_id=\"2209022440749649672\" protoPayload.methodName=~\"targetHttpsProxies.(patch|update|insert|setSslCertificates)\" " } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-aggregated-forwardingRules.json: @$(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/forwardingRules/' \ | $(SED_SUBST_FAKE) > $@ @python3 update_ip.py < "$@" > temp2.json && mv temp2.json "$@" ================================================ FILE: test-data/lb3/certs.tf ================================================ resource "google_compute_managed_ssl_certificate" "cert1" { project = google_project.project.project_id name = "cert1" managed { domains = ["natka123.com", "second.natka123.com"] } } resource "google_compute_managed_ssl_certificate" "cert2" { project = google_project.project.project_id name = "cert2" managed { domains = ["test.natka123.com"] } } resource "google_compute_managed_ssl_certificate" "cert3" { project = google_project.project.project_id name = "cert3" managed { domains = ["test.org", "second.test.org"] } } resource "google_compute_managed_ssl_certificate" "unused-cert4" { project = google_project.project.project_id name = "unused-cert4" managed { domains = ["test.org", "second.test.org"] } } resource "google_compute_managed_ssl_certificate" "cert5" { project = google_project.project.project_id name = "cert5" managed { domains = ["test.org"] } } ================================================ FILE: test-data/lb3/https-lb.tf ================================================ # External HTTP load balancer # [START cloudloadbalancing_ext_http_gce_instance_template] resource "google_compute_instance_template" "default" { depends_on = [google_project_service.compute] name = "lb-backend-template" project = google_project.project.project_id disk { auto_delete = true boot = true device_name = "persistent-disk-0" mode = "READ_WRITE" source_image = "projects/debian-cloud/global/images/family/debian-11" type = "PERSISTENT" } labels = { managed-by-cnrm = "true" } machine_type = "n1-standard-1" metadata = { startup-script = "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n http://169.254.169.254/computeMetadata/v1/instance/name)\"\n sudo echo \"Page served from: $vm_hostname\" | \\\n tee /var/www/html/index.html\n sudo systemctl restart apache2" } network_interface { access_config { network_tier = "PREMIUM" } network = "default" #subnetwork = "regions/us-east1/subnetworks/default" } region = "us-east1" service_account { email = "default" scopes = ["https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append"] } tags = ["allow-health-check"] } # [END cloudloadbalancing_ext_http_gce_instance_template] # [START cloudloadbalancing_ext_http_gce_instance_mig] resource "google_compute_instance_group_manager" "default" { depends_on = [google_project_service.compute] project = google_project.project.project_id name = "lb-backend-example" zone = "us-east1-b" named_port { name = "http" port = 80 } version { instance_template = google_compute_instance_template.default.id name = "primary" } base_instance_name = "vm" target_size = 2 } # [END cloudloadbalancing_ext_http_gce_instance_mig] # [START cloudloadbalancing_ext_http_gce_instance_ip_address] resource "google_compute_global_address" "default" { depends_on = [google_project_service.compute] project = google_project.project.project_id name = "lb-ipv4-1" ip_version = "IPV4" } # [END cloudloadbalancing_ext_http_gce_instance_ip_address] # [START cloudloadbalancing_ext_http_gce_instance_ip_address] resource "google_compute_global_address" "ipv6-address" { depends_on = [google_project_service.compute] project = google_project.project.project_id name = "lb-ipv6-1" ip_version = "IPV6" } # [END cloudloadbalancing_ext_http_gce_instance_ip_address] # [START cloudloadbalancing_ext_http_gce_instance_health_check] resource "google_compute_health_check" "default" { depends_on = [google_project_service.compute] name = "http-basic-check" project = google_project.project.project_id check_interval_sec = 5 healthy_threshold = 2 http_health_check { # port different than the one in the backend service port = 88 port_specification = "USE_FIXED_PORT" proxy_header = "NONE" request_path = "/" } log_config { enable = true } timeout_sec = 5 unhealthy_threshold = 2 } # [END cloudloadbalancing_ext_http_gce_instance_health_check] # [START cloudloadbalancing_ext_http_gce_instance_backend_service] resource "google_compute_backend_service" "default" { name = "web-backend-service" project = google_project.project.project_id connection_draining_timeout_sec = 0 health_checks = [google_compute_health_check.default.id] load_balancing_scheme = "EXTERNAL" port_name = "http" protocol = "HTTP" session_affinity = "NONE" timeout_sec = 30 backend { group = google_compute_instance_group_manager.default.instance_group balancing_mode = "UTILIZATION" capacity_scaler = 1.0 } } # [END cloudloadbalancing_ext_http_gce_instance_backend_service] resource "google_certificate_manager_certificate_map" "default" { project = google_project.project.project_id name = "cert-map" description = "My acceptance test certificate map" labels = { "terraform" : true, "acc-test" : true, } } # [START cloudloadbalancing_ext_http_gce_instance_url_map] resource "google_compute_url_map" "default" { project = google_project.project.project_id name = "web-map-https" default_service = google_compute_backend_service.default.id } # [END cloudloadbalancing_ext_http_gce_instance_url_map] # [START cloudloadbalancing_ext_http_gce_instance_target_https_proxy] resource "google_compute_target_https_proxy" "default" { project = google_project.project.project_id name = "https-lb-proxy" url_map = google_compute_url_map.default.id certificate_map = "//certificatemanager.googleapis.com/${google_certificate_manager_certificate_map.default.id}" ssl_certificates = [google_compute_managed_ssl_certificate.cert1.id] } # [END cloudloadbalancing_ext_http_gce_instance_target_https_proxy] # [START cloudloadbalancing_ext_http_gce_instance_forwarding_rule] resource "google_compute_global_forwarding_rule" "default" { project = google_project.project.project_id name = "https-content-rule" ip_protocol = "TCP" load_balancing_scheme = "EXTERNAL" port_range = "443-443" target = google_compute_target_https_proxy.default.id ip_address = google_compute_global_address.default.id } # [END cloudloadbalancing_ext_http_gce_instance_forwarding_rule] # [START cloudloadbalancing_ext_http_gce_instance_target_https_proxy] resource "google_compute_target_https_proxy" "working-cert" { project = google_project.project.project_id name = "https-lb-proxy-working" url_map = google_compute_url_map.default.id ssl_certificates = [google_compute_managed_ssl_certificate.cert2.id] } # [END cloudloadbalancing_ext_http_gce_instance_target_https_proxy] # [START cloudloadbalancing_ext_http_gce_instance_forwarding_rule] resource "google_compute_global_forwarding_rule" "working-cert" { project = google_project.project.project_id name = "https-content-rule-working" ip_protocol = "TCP" load_balancing_scheme = "EXTERNAL" port_range = "80-80" target = google_compute_target_https_proxy.working-cert.id ip_address = google_compute_global_address.ipv6-address.id } # [END cloudloadbalancing_ext_http_gce_instance_forwarding_rule] ================================================ FILE: test-data/lb3/json-dumps/compute-aggregated-backendServices.json ================================================ { "kind": "compute#backendServiceAggregatedList", "id": "projects/gcpdiag-lb3-aaaa/aggregated/backendServices/", "items": { "global": { "backendServices": [ { "kind": "compute#backendService", "id": "5883404156894106621", "creationTimestamp": "2024-10-22T02:14:58.345-07:00", "name": "tcp-backend-service", "description": "", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/backendServices/tcp-backend-service", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example", "balancingMode": "UTILIZATION", "capacityScaler": 1 } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/healthChecks/http-basic-check" ], "timeoutSec": 30, "port": 80, "protocol": "TCP", "fingerprint": "wyraRQUtNHk=", "portName": "http", "sessionAffinity": "NONE", "affinityCookieTtlSec": 0, "loadBalancingScheme": "EXTERNAL_MANAGED", "connectionDraining": { "drainingTimeoutSec": 0 }, "usedBy": [ { "reference": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy" } ] }, { "kind": "compute#backendService", "id": "6804081227729981716", "creationTimestamp": "2024-10-18T07:26:03.206-07:00", "name": "web-backend-service", "description": "", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/backendServices/web-backend-service", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example", "balancingMode": "UTILIZATION", "capacityScaler": 1 } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/healthChecks/http-basic-check" ], "timeoutSec": 30, "port": 80, "protocol": "HTTP", "fingerprint": "tPlMNAYWuKU=", "portName": "http", "enableCDN": false, "sessionAffinity": "NONE", "affinityCookieTtlSec": 0, "loadBalancingScheme": "EXTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 }, "usedBy": [ { "reference": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https" } ] } ] }, "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-central1' on this page.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west1' on this page.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-east1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east1' on this page.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-southeast1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east4' on this page.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/australia-southeast1' on this page.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west2' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west3' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/southamerica-east1' on this page.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-south1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/northamerica-northeast1' on this page.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west4' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-north1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west2' on this page.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-east2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west6' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast3' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west3' on this page.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west4' on this page.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-southeast2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-central2' on this page.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/northamerica-northeast2' on this page.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-south2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/australia-southeast2' on this page.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/southamerica-west1' on this page.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west8' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west9' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east5' on this page.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-southwest1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-south1' on this page.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-west1' on this page.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west12' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-central1' on this page.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west10' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-central2' on this page.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/africa-south1' on this page.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/aggregated/backendServices/" } ================================================ FILE: test-data/lb3/json-dumps/compute-aggregated-forwardingRules.json ================================================ { "kind": "compute#forwardingRuleAggregatedList", "id": "projects/gcpdiag-lb3-aaaa/aggregated/forwardingRules/", "items": { "global": { "forwardingRules": [ { "kind": "compute#forwardingRule", "id": "3863216909981830940", "creationTimestamp": "2024-10-18T07:34:27.669-07:00", "name": "https-content-rule", "description": "", "IPAddress": "1.2.3.4", "IPProtocol": "TCP", "portRange": "443-443", "target": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule", "loadBalancingScheme": "EXTERNAL", "networkTier": "PREMIUM", "labelFingerprint": "42WmSpB8rSM=", "fingerprint": "lbqus5AHKBg=" }, { "kind": "compute#forwardingRule", "id": "183152458183199474", "creationTimestamp": "2024-10-18T07:43:41.183-07:00", "name": "https-content-rule-working", "description": "", "IPAddress": "2600:1901:0:d0d7::", "IPProtocol": "TCP", "portRange": "80-80", "target": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy-working", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule-working", "loadBalancingScheme": "EXTERNAL", "networkTier": "PREMIUM", "labelFingerprint": "42WmSpB8rSM=", "fingerprint": "p-3QEspIkqc=" }, { "kind": "compute#forwardingRule", "id": "9008931882023965618", "creationTimestamp": "2024-10-22T02:16:13.078-07:00", "name": "ssl-rule", "description": "", "IPAddress": "192.168.3.5", "IPProtocol": "TCP", "portRange": "443-443", "target": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/forwardingRules/ssl-rule", "loadBalancingScheme": "EXTERNAL", "networkTier": "PREMIUM", "labelFingerprint": "42WmSpB8rSM=", "fingerprint": "aVizp0iHtL0=" } ] }, "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-central1' on this page.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west1' on this page.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-east1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east1' on this page.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-southeast1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east4' on this page.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/australia-southeast1' on this page.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west2' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west3' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/southamerica-east1' on this page.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-south1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/northamerica-northeast1' on this page.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west4' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-north1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west2' on this page.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-east2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west6' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast3' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west3' on this page.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west4' on this page.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-southeast2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-central2' on this page.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/northamerica-northeast2' on this page.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-south2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/australia-southeast2' on this page.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/southamerica-west1' on this page.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west8' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west9' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east5' on this page.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-southwest1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-south1' on this page.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-west1' on this page.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west12' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-central1' on this page.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west10' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-central2' on this page.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/africa-south1' on this page.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/aggregated/forwardingRules/" } ================================================ FILE: test-data/lb3/json-dumps/compute-aggregated-targetHttpsProxies.json ================================================ { "kind": "compute#targetHttpsProxyAggregatedList", "id": "projects/gcpdiag-lb3-aaaa/aggregated/targetHttpsProxies/", "items": { "global": { "targetHttpsProxies": [ { "kind": "compute#targetHttpsProxy", "id": "2209022440749649672", "creationTimestamp": "2024-10-18T07:34:15.981-07:00", "name": "https-lb-proxy", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy", "urlMap": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https", "sslCertificates": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1" ], "certificateMap": "//certificatemanager.googleapis.com/projects/gcpdiag-lb3-aaaa/locations/global/certificateMaps/cert-map", "quicOverride": "NONE", "fingerprint": "GsS18JR8BT8=", "tlsEarlyData": "DISABLED" }, { "kind": "compute#targetHttpsProxy", "id": "6476775702975728672", "creationTimestamp": "2024-10-18T07:38:07.808-07:00", "name": "https-lb-proxy-working", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy-working", "urlMap": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https", "sslCertificates": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2" ], "quicOverride": "NONE", "fingerprint": "Ika63TUJl5I=", "tlsEarlyData": "DISABLED" } ] }, "regions/us-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-central1' on this page.", "data": [ { "key": "scope", "value": "regions/us-central1" } ] } }, "regions/europe-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west1" } ] } }, "regions/us-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west1' on this page.", "data": [ { "key": "scope", "value": "regions/us-west1" } ] } }, "regions/asia-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-east1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-east1" } ] } }, "regions/us-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east1' on this page.", "data": [ { "key": "scope", "value": "regions/us-east1" } ] } }, "regions/asia-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast1" } ] } }, "regions/asia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-southeast1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-southeast1" } ] } }, "regions/us-east4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east4' on this page.", "data": [ { "key": "scope", "value": "regions/us-east4" } ] } }, "regions/australia-southeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/australia-southeast1' on this page.", "data": [ { "key": "scope", "value": "regions/australia-southeast1" } ] } }, "regions/europe-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west2' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west2" } ] } }, "regions/europe-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west3' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west3" } ] } }, "regions/southamerica-east1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/southamerica-east1' on this page.", "data": [ { "key": "scope", "value": "regions/southamerica-east1" } ] } }, "regions/asia-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-south1' on this page.", "data": [ { "key": "scope", "value": "regions/asia-south1" } ] } }, "regions/northamerica-northeast1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/northamerica-northeast1' on this page.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast1" } ] } }, "regions/europe-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west4' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west4" } ] } }, "regions/europe-north1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-north1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-north1" } ] } }, "regions/us-west2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west2' on this page.", "data": [ { "key": "scope", "value": "regions/us-west2" } ] } }, "regions/asia-east2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-east2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-east2" } ] } }, "regions/europe-west6": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west6' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west6" } ] } }, "regions/asia-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast2" } ] } }, "regions/asia-northeast3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-northeast3' on this page.", "data": [ { "key": "scope", "value": "regions/asia-northeast3" } ] } }, "regions/us-west3": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west3' on this page.", "data": [ { "key": "scope", "value": "regions/us-west3" } ] } }, "regions/us-west4": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-west4' on this page.", "data": [ { "key": "scope", "value": "regions/us-west4" } ] } }, "regions/asia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-southeast2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-southeast2" } ] } }, "regions/europe-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-central2' on this page.", "data": [ { "key": "scope", "value": "regions/europe-central2" } ] } }, "regions/northamerica-northeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/northamerica-northeast2' on this page.", "data": [ { "key": "scope", "value": "regions/northamerica-northeast2" } ] } }, "regions/asia-south2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/asia-south2' on this page.", "data": [ { "key": "scope", "value": "regions/asia-south2" } ] } }, "regions/australia-southeast2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/australia-southeast2' on this page.", "data": [ { "key": "scope", "value": "regions/australia-southeast2" } ] } }, "regions/southamerica-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/southamerica-west1' on this page.", "data": [ { "key": "scope", "value": "regions/southamerica-west1" } ] } }, "regions/europe-west8": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west8' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west8" } ] } }, "regions/europe-west9": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west9' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west9" } ] } }, "regions/us-east5": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-east5' on this page.", "data": [ { "key": "scope", "value": "regions/us-east5" } ] } }, "regions/europe-southwest1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-southwest1' on this page.", "data": [ { "key": "scope", "value": "regions/europe-southwest1" } ] } }, "regions/us-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/us-south1' on this page.", "data": [ { "key": "scope", "value": "regions/us-south1" } ] } }, "regions/me-west1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-west1' on this page.", "data": [ { "key": "scope", "value": "regions/me-west1" } ] } }, "regions/europe-west12": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west12' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west12" } ] } }, "regions/me-central1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-central1' on this page.", "data": [ { "key": "scope", "value": "regions/me-central1" } ] } }, "regions/europe-west10": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/europe-west10' on this page.", "data": [ { "key": "scope", "value": "regions/europe-west10" } ] } }, "regions/me-central2": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/me-central2' on this page.", "data": [ { "key": "scope", "value": "regions/me-central2" } ] } }, "regions/africa-south1": { "warning": { "code": "NO_RESULTS_ON_PAGE", "message": "There are no results for scope 'regions/africa-south1' on this page.", "data": [ { "key": "scope", "value": "regions/africa-south1" } ] } } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/aggregated/targetHttpsProxies/" } ================================================ FILE: test-data/lb3/json-dumps/compute-sslCertificates.json ================================================ { "kind": "compute#sslCertificateList", "id": "projects/gcpdiag-lb3-aaaa/global/sslCertificates/", "items": [ { "kind": "compute#sslCertificate", "id": "5007046999615196979", "creationTimestamp": "2024-10-18T07:34:04.255-07:00", "name": "cert1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1", "managed": { "domains": [ "natka123.com", "second.natka123.com" ], "status": "PROVISIONING", "domainStatus": { "natka123.com": "FAILED_NOT_VISIBLE", "second.natka123.com": "FAILED_NOT_VISIBLE" } }, "type": "MANAGED" }, { "kind": "compute#sslCertificate", "id": "152674253559287603", "creationTimestamp": "2024-10-18T07:34:04.222-07:00", "name": "cert2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2", "managed": { "domains": [ "test.natka123.com" ], "status": "PROVISIONING", "domainStatus": { "test.natka123.com": "FAILED_NOT_VISIBLE" } }, "type": "MANAGED" }, { "kind": "compute#sslCertificate", "id": "6567642127033619454", "creationTimestamp": "2024-10-22T02:14:57.607-07:00", "name": "cert3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3", "managed": { "domains": [ "test.org", "second.test.org" ], "status": "PROVISIONING", "domainStatus": { "second.test.org": "FAILED_NOT_VISIBLE", "test.org": "FAILED_NOT_VISIBLE" } }, "type": "MANAGED" }, { "kind": "compute#sslCertificate", "id": "391516744939351060", "creationTimestamp": "2024-10-22T04:56:43.877-07:00", "name": "cert5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert5", "managed": { "domains": [ "test.org" ], "status": "PROVISIONING", "domainStatus": { "test.org": "PROVISIONING" } }, "type": "MANAGED" }, { "kind": "compute#sslCertificate", "id": "8942192522650371715", "creationTimestamp": "2024-10-22T03:03:24.633-07:00", "name": "unused-cert4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/unused-cert4", "managed": { "domains": [ "test.org", "second.test.org" ], "status": "PROVISIONING", "domainStatus": { "second.test.org": "FAILED_NOT_VISIBLE", "test.org": "FAILED_NOT_VISIBLE" } }, "type": "MANAGED" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/" } ================================================ FILE: test-data/lb3/json-dumps/compute-targetHttpsProxies.json ================================================ { "kind": "compute#targetHttpsProxyList", "id": "projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/", "items": [ { "kind": "compute#targetHttpsProxy", "id": "2209022440749649672", "creationTimestamp": "2024-10-18T07:34:15.981-07:00", "name": "https-lb-proxy", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy", "urlMap": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https", "sslCertificates": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1" ], "certificateMap": "//certificatemanager.googleapis.com/projects/gcpdiag-lb3-aaaa/locations/global/certificateMaps/cert-map", "quicOverride": "NONE", "fingerprint": "GsS18JR8BT8=", "tlsEarlyData": "DISABLED" }, { "kind": "compute#targetHttpsProxy", "id": "6476775702975728672", "creationTimestamp": "2024-10-18T07:38:07.808-07:00", "name": "https-lb-proxy-working", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy-working", "urlMap": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https", "sslCertificates": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2" ], "quicOverride": "NONE", "fingerprint": "Ika63TUJl5I=", "tlsEarlyData": "DISABLED" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/" } ================================================ FILE: test-data/lb3/json-dumps/compute-targetSslProxies.json ================================================ { "kind": "compute#targetSslProxyList", "id": "projects/gcpdiag-lb3-aaaa/global/targetSslProxies/", "items": [ { "kind": "compute#targetSslProxy", "id": "2435662921451885502", "creationTimestamp": "2024-10-22T02:16:01.466-07:00", "name": "ssl-proxy", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy", "service": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/backendServices/tcp-backend-service", "sslCertificates": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3", "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert5" ], "proxyHeader": "NONE" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetSslProxies/" } ================================================ FILE: test-data/lb3/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "nataliakaczor@google.com", "principalSubject": "user:nataliakaczor@google.com" }, "requestMetadata": { "callerIp": "gce-internal-ip", "callerSuppliedUserAgent": "Terraform/1.9.3 (+https://www.terraform.io) Terraform-Plugin-SDK/2.33.0 terraform-provider-google/6.7.0,gzip(gfe)", "requestAttributes": {}, "destinationAttributes": {} }, "serviceName": "compute.googleapis.com", "methodName": "v1.compute.targetHttpsProxies.insert", "resourceName": "projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy", "request": { "@type": "type.googleapis.com/compute.targetHttpsProxies.insert" } }, "insertId": "-2rli97e1cxkk", "resource": { "type": "gce_target_https_proxy", "labels": { "target_https_proxy_id": "2209022440749649672", "project_id": "gcpdiag-lb3-aaaa" } }, "timestamp": "2024-10-18T14:34:17.798905Z", "severity": "NOTICE", "labels": { "compute.googleapis.com/root_trigger_id": "40523d2d-d62b-476e-9585-17c2341a0dff" }, "logName": "projects/gcpdiag-lb3-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1729262055617-624c1328c759c-adc97462-31656ee9", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2024-10-18T14:34:18.886589315Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "nataliakaczor@google.com", "principalSubject": "user:nataliakaczor@google.com" }, "requestMetadata": { "callerIp": "gce-internal-ip", "callerSuppliedUserAgent": "Terraform/1.9.3 (+https://www.terraform.io) Terraform-Plugin-SDK/2.33.0 terraform-provider-google/6.7.0,gzip(gfe)", "requestAttributes": { "time": "2024-10-18T14:34:16.248041Z", "auth": {} }, "destinationAttributes": {} }, "serviceName": "compute.googleapis.com", "methodName": "v1.compute.targetHttpsProxies.insert", "authorizationInfo": [ { "resource": "projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy", "permission": "compute.targetHttpsProxies.create", "granted": true, "resourceAttributes": { "service": "compute", "name": "projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy", "type": "compute.targetHttpsProxies" }, "permissionType": "ADMIN_WRITE" }, { "resource": "projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https", "permission": "compute.urlMaps.use", "granted": true, "resourceAttributes": { "service": "compute", "name": "projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https", "type": "compute.urlMaps" }, "permissionType": "ADMIN_WRITE" } ], "resourceName": "projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy", "request": { "name": "https-lb-proxy", "@type": "type.googleapis.com/compute.targetHttpsProxies.insert", "quicOverride": "NONE", "urlMap": "projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https" }, "response": { "targetId": "2209022440749649672", "insertTime": "2024-10-18T07:34:16.035-07:00", "startTime": "2024-10-18T07:34:16.038-07:00", "progress": "0", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/operations/6855579118264635144", "operationType": "insert", "user": "nataliakaczor@google.com", "name": "operation-1729262055617-624c1328c759c-adc97462-31656ee9", "targetLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy", "status": "RUNNING", "id": "6855579118264635144", "@type": "type.googleapis.com/operation", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/operations/operation-1729262055617-624c1328c759c-adc97462-31656ee9" }, "resourceLocation": { "currentLocations": [ "global" ] } }, "insertId": "nvbpyme10tq0", "resource": { "type": "gce_target_https_proxy", "labels": { "project_id": "gcpdiag-lb3-aaaa", "target_https_proxy_id": "2209022440749649672" } }, "timestamp": "2024-10-18T14:34:15.686588Z", "severity": "NOTICE", "labels": { "compute.googleapis.com/root_trigger_id": "40523d2d-d62b-476e-9585-17c2341a0dff" }, "logName": "projects/gcpdiag-lb3-aaaa/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1729262055617-624c1328c759c-adc97462-31656ee9", "producer": "compute.googleapis.com", "first": true }, "receiveTimestamp": "2024-10-18T14:34:16.974719684Z" } ], "nextPageToken": "EAE4l4_KqNyjzP0iSh8iEiICCgAqDAj_v8S3BhD_k-vcA1j13sf0s86omegBUgcIxYm53sUeYP3U87aj8M6paWocCgwI8tnZuAYQiuGThAMSCAgFEN_8v5wBGAIgAA" } ================================================ FILE: test-data/lb3/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.zone" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_uptime_total_aggregate_mean", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "s" }, { "key": "value_uptime_total_aggregate_count", "valueType": "INT64", "metricKind": "GAUGE", "unit": "1" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "europe-west4-b" }, { "stringValue": "neg-vm" } ], "pointData": [ { "values": [ { "doubleValue": 1219297 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2024-08-27T15:45:06.919908Z", "endTime": "2024-08-27T15:45:06.919908Z" } }, { "values": [ { "doubleValue": 1219027 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-08-27T15:40:06.919908Z", "endTime": "2024-08-27T15:40:06.919908Z" } } ] }, { "labelValues": [ { "stringValue": "us-east1-b" }, { "stringValue": "vm-pn3l" } ], "pointData": [ { "values": [ { "doubleValue": 1320395 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2024-08-27T15:45:06.919908Z", "endTime": "2024-08-27T15:45:06.919908Z" } }, { "values": [ { "doubleValue": 1320125 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-08-27T15:40:06.919908Z", "endTime": "2024-08-27T15:40:06.919908Z" } } ] }, { "labelValues": [ { "stringValue": "us-east1-b" }, { "stringValue": "vm-m5q1" } ], "pointData": [ { "values": [ { "doubleValue": 1320407 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2024-08-27T15:45:06.919908Z", "endTime": "2024-08-27T15:45:06.919908Z" } }, { "values": [ { "doubleValue": 1320137 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2024-08-27T15:40:06.919908Z", "endTime": "2024-08-27T15:40:06.919908Z" } } ] } ] } ================================================ FILE: test-data/lb3/json-dumps/project.json ================================================ { "name": "projects/12340009", "parent": "folders/211134714592", "projectId": "gcpdiag-lb3-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - lb3", "createTime": "2024-10-17T18:39:31.667941Z", "updateTime": "2024-10-17T18:39:31.667941Z", "etag": "W/\"af713938739b3e80\"", "labels": { "gcpdiag": "test", "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/lb3/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340009/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340009" }, { "name": "projects/12340009/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340009" }, { "name": "projects/12340009/services/recommender.googleapis.com", "config": { "name": "recommender.googleapis.com", "title": "Recommender API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340009" } ] } ================================================ FILE: test-data/lb3/project.tf ================================================ /** * 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - lb3" project_id = "gcpdiag-lb3-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "certificate_manager" { project = google_project.project.project_id service = "certificatemanager.googleapis.com" } resource "google_project_service" "recommender" { project = google_project.project.project_id service = "recommender.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/lb3/ssl-lb.tf ================================================ resource "google_compute_global_address" "ssl-address" { depends_on = [google_project_service.compute] project = google_project.project.project_id name = "lb-ssl-ip" ip_version = "IPV4" } resource "google_compute_global_forwarding_rule" "ssl-rule" { project = google_project.project.project_id name = "ssl-rule" ip_protocol = "TCP" load_balancing_scheme = "EXTERNAL" port_range = "443-443" target = google_compute_target_ssl_proxy.ssl-proxy.id ip_address = google_compute_global_address.ssl-address.id } resource "google_compute_target_ssl_proxy" "ssl-proxy" { project = google_project.project.project_id name = "ssl-proxy" ssl_certificates = [google_compute_managed_ssl_certificate.cert3.id, google_compute_managed_ssl_certificate.cert5.id] backend_service = google_compute_backend_service.tcp-backend-service.id } resource "google_compute_backend_service" "tcp-backend-service" { name = "tcp-backend-service" project = google_project.project.project_id connection_draining_timeout_sec = 0 health_checks = [google_compute_health_check.default.id] load_balancing_scheme = "EXTERNAL_MANAGED" port_name = "http" protocol = "TCP" session_affinity = "NONE" timeout_sec = 30 backend { group = google_compute_instance_group_manager.default.instance_group balancing_mode = "UTILIZATION" capacity_scaler = 1.0 } } ================================================ FILE: test-data/lb3/update_ip.py ================================================ """Updates IP addresses of global forwarding rules for consistent test mocks. Replaces dynamically assigned IP addresses from API responses with fixed IPs to ensure predictable output for testing. New projects provisioned with different IPs will have their forwarding rule IPs rewritten to these constants. """ import json import sys new_global_ip_addresses = { 'https-content-rule': ('1.2.3.4'), 'https-content-rule-working': ('2600:1901:0:d0d7::'), 'ssl-rule': ('192.168.3.5') } data = json.load(sys.stdin) if ('items' in data and 'global' in data['items'] and 'forwardingRules' in data['items']['global']): for rule in data['items']['global']['forwardingRules']: if rule['name'] in new_global_ip_addresses: rule['IPAddress'] = new_global_ip_addresses[rule['name']] print(json.dumps(data, indent=2)) ================================================ FILE: test-data/lb3/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/looker1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340031 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/services.json \ json-dumps/project.json \ json-dumps/logging-entries-1.json json-dumps/services.json: $(CURL) -fsS \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ define LOGGING_ENTRIES_BODY { "resourceNames": ["projects/$(PROJECT_ID)"], "orderBy": "timestamp desc", "filter": " timestamp > \"2024-12-01:00:00+00:00\" AND timestamp < \"2025-07-30:00:00+00:00\" AND resource.type=\"bigquery_resource\" AND log_id(\"cloudaudit.googleapis.com/data_access\") " } endef export LOGGING_ENTRIES_BODY json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ -d "$$LOGGING_ENTRIES_BODY" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/looker1/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": {}, "authenticationInfo": { "principalEmail": "user@google.com" }, "requestMetadata": { "callerIp": "2a00:79e0:2400:9:2c1f:be9b:5903:2daa", "requestAttributes": {}, "destinationAttributes": {} }, "serviceName": "bigquery.googleapis.com", "methodName": "jobservice.jobcompleted", "resourceName": "projects/looker-dcl-testground/jobs/job_NlDHCW9OeGk4ctnmdUp_g2JTTLrz", "serviceData": { "@type": "type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData", "jobCompletedEvent": { "eventName": "query_job_completed", "job": { "jobName": { "projectId": "looker-dcl-testground", "jobId": "job_NlDHCW9OeGk4ctnmdUp_g2JTTLrz", "location": "US" }, "jobConfiguration": { "labels": { "requestor": "looker_studio", "looker_studio_datasource_id": "05d6f0b3-1255-44cf-a964-0b79d812cfe6", "looker_studio_report_id": "272a0671-8f81-42ac-9fb8-6fcb45034fe6" }, "query": { "query": "SELECT clmn0_, COUNT(1) AS t0_qt_q0pgewysud FROM (\nSELECT t0.description AS clmn0_ FROM `looker-dcl-testground.brazil_real_estate_listings.properties_sell_201802` AS t0\n) GROUP BY clmn0_ ORDER BY t0_qt_q0pgewysud DESC LIMIT 2000001;", "destinationTable": { "projectId": "looker-dcl-testground", "datasetId": "_11f6c267f2e8fe4e2dcb42472fe71e58979a72cb", "tableId": "anon6be941ca4a4cb2c9935607206a7d6a0b44cf8011a17545e5a665c120fb316cd4" }, "createDisposition": "CREATE_IF_NEEDED", "writeDisposition": "WRITE_TRUNCATE", "defaultDataset": {}, "queryPriority": "QUERY_INTERACTIVE", "statementType": "SELECT" } }, "jobStatus": { "state": "DONE", "error": {} }, "jobStatistics": { "createTime": "2025-07-29T10:04:21.161Z", "startTime": "2025-07-29T10:04:21.230Z", "endTime": "2025-07-29T10:04:30.078Z", "totalProcessedBytes": "200126736", "totalBilledBytes": "200278016", "billingTier": 1, "totalSlotMs": "23009", "referencedTables": [ { "projectId": "looker-dcl-testground", "datasetId": "brazil_real_estate_listings", "tableId": "properties_sell_201802" } ], "totalTablesProcessed": 1, "queryOutputRowCount": "318039", "reservation": "unreserved" } } } } }, "insertId": "mhx03dek1dwo", "resource": { "type": "bigquery_resource", "labels": { "project_id": "looker-dcl-testground" } }, "timestamp": "2025-07-29T10:04:30.122558Z", "severity": "INFO", "logName": "projects/looker-dcl-testground/logs/cloudaudit.googleapis.com%2Fdata_access", "receiveTimestamp": "2025-07-29T10:04:30.366020604Z" }, { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": {}, "authenticationInfo": { "principalEmail": "user@google.com" }, "requestMetadata": { "callerIp": "2401:4900:93b9:2241:59a9:48e3:4930:d28e", "requestAttributes": {}, "destinationAttributes": {} }, "serviceName": "bigquery.googleapis.com", "methodName": "jobservice.jobcompleted", "resourceName": "projects/looker-dcl-testground/jobs/job_irMeL-Hzt8C5jtysvPUeONQLIK6L", "serviceData": { "@type": "type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData", "jobCompletedEvent": { "eventName": "query_job_completed", "job": { "jobName": { "projectId": "looker-dcl-testground", "jobId": "job_irMeL-Hzt8C5jtysvPUeONQLIK6L", "location": "US" }, "jobConfiguration": { "labels": { "requestor": "looker_studio", "looker_studio_datasource_id": "a3628b15-fc88-4ace-b2a0-3899cd9863cf", "looker_studio_report_id": "422b3505-820b-42d6-95b9-e0529828a4ea" }, "query": { "query": "SELECT clmn0_, SUM(clmn1_) AS t0_qt_at32jpysud FROM (\nSELECT t0.properati_url AS clmn0_, t0.rooms AS clmn1_ FROM `looker-dcl-testground.brazil_real_estate_listings.properties_sell_201802` AS t0\n) GROUP BY clmn0_ ORDER BY t0_qt_at32jpysud DESC LIMIT 2000001;", "destinationTable": { "projectId": "looker-dcl-testground", "datasetId": "_11f6c267f2e8fe4e2dcb42472fe71e58979a72cb", "tableId": "anonba504651a02bf3825090e3ea9eed73b1e6a714e6f2a38aa87a5f27ccab692776" }, "createDisposition": "CREATE_IF_NEEDED", "writeDisposition": "WRITE_TRUNCATE", "defaultDataset": {}, "queryPriority": "QUERY_INTERACTIVE", "statementType": "SELECT" } }, "jobStatus": { "state": "DONE", "error": {} }, "jobStatistics": { "createTime": "2025-07-30T14:55:31.322Z", "startTime": "2025-07-30T14:55:31.422Z", "endTime": "2025-07-30T14:55:35.913Z", "totalProcessedBytes": "44716215", "totalBilledBytes": "45088768", "billingTier": 1, "totalSlotMs": "8661", "referencedTables": [ { "projectId": "looker-dcl-testground", "datasetId": "brazil_real_estate_listings", "tableId": "properties_sell_201802" } ], "totalTablesProcessed": 1, "queryOutputRowCount": "418113", "reservation": "unreserved" } } } } }, "insertId": "64q3rxe57m3a", "resource": { "type": "bigquery_resource", "labels": { "project_id": "looker-dcl-testground" } }, "timestamp": "2025-07-30T14:55:35.972330Z", "severity": "INFO", "logName": "projects/looker-dcl-testground/logs/cloudaudit.googleapis.com%2Fdata_access", "receiveTimestamp": "2025-07-30T14:55:36.855356797Z" } ] } ================================================ FILE: test-data/looker1/json-dumps/looker-instances.json ================================================ { "instances": [ { "name": "projects/gcpdiag-looker1-aaaa/locations/us-central1/instances/gcpdiag-test-01", "createTime": "2024-12-29T10:28:38.159901429Z", "updateTime": "2025-03-05T11:15:21.229549612Z", "state": "ACTIVE", "platformEdition": "LOOKER_CORE_STANDARD_ANNUAL", "lookerVersion": "25.2.11", "egressPublicIp": "57.57.57.57", "ingressPublicIp": "34.34.34.34", "lookerUri": "https://testinstance.looker.app", "publicIpEnabled": true, "satisfiesPzs": false, "satisfiesPzi": false } ] } ================================================ FILE: test-data/looker1/json-dumps/looker.json ================================================ { "instances": [ { "name": "projects/gcpdiag-looker1-aaaa/locations/us-central1/instances/gcpdiag-test-01", "createTime": "2024-12-29T10:28:38.159901429Z", "updateTime": "2025-03-05T11:15:21.229549612Z", "state": "ACTIVE", "platformEdition": "LOOKER_CORE_STANDARD_ANNUAL", "lookerVersion": "25.2.11", "egressPublicIp": "57.57.57.57", "ingressPublicIp": "34.34.34.34", "lookerUri": "https://testinstance.looker.app", "publicIpEnabled": true, "satisfiesPzs": false, "satisfiesPzi": false } ] } ================================================ FILE: test-data/looker1/json-dumps/operation.json ================================================ { "operations": [ { "name": "projects/gcpdiag-looker1-aaaa/locations/us-central1/operations/operation-1", "done": true, "metadata": { "@type": "type.googleapis.com/google.cloud.looker.v1alpha2.OperationMetadata", "createTime": "2025-05-16T09:27:11.660755969Z", "endTime": "2025-05-16T09:28:59.269011025Z", "target": "projects/gcpdiag-looker1-aaaa/locations/us-central1/instances/mukul-private-instance/backups/6a6c25be-2254-4999-8ebb-e223a93e3f0f", "verb": "create", "requestedCancellation": false, "apiVersion": "v1alpha2" } } ] } ================================================ FILE: test-data/looker1/json-dumps/project.json ================================================ { "name": "projects/12340031", "parent": "folders/348077457356", "projectId": "gcpdiag-looker1-ijtqsckn", "state": "ACTIVE", "displayName": "gcpdiag test - looker1", "createTime": "2024-12-22T17:32:41.842157Z", "updateTime": "2024-12-22T17:32:41.842157Z", "etag": "W/\"1866d6f7d7a9afd9\"", "labels": { "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/looker1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340031/services/analyticshub.googleapis.com", "config": { "name": "analyticshub.googleapis.com", "title": "Analytics Hub API", "documentation": { "summary": "Exchange data and analytics assets securely and efficiently." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquery.googleapis.com/Table", "displayName": "BigQuery Table Resource.", "description": "BigQuery Table Resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The cloud location of the BigQuery table." }, { "key": "table_reference", "description": "The table reference in the format of project_id:dataset_id.table_id for the BigQuery table." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/Location", "displayName": "CheckIamPolicy Request Location", "description": "A BigQuery Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget", "description": "Differential Privacy Budget.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." }, { "key": "multi_region", "description": "The multi-region identifier for the associated resource (e.g \"us\", \"eu\"). Used only for multi-region quota metrics." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget External", "description": "Differential Privacy Budget exposed externally to provide privacy budget metrics.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." } ], "launchStage": "BETA" }, { "type": "bigquery.googleapis.com/ContinuousJob", "displayName": "BigQuery Continuous Job", "description": "Metrics from BigQuery Continuous Jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The Cloud location of the continuous job." }, { "key": "job_id", "description": "The ID of the continuous job." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded", "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget", "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/privacybudget/dp_delta_budget", "bigquery.googleapis.com/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/ContinuousJob", "metrics": [ "bigquery.googleapis.com/job/continuous/backlog_records", "bigquery.googleapis.com/job/continuous/records_read_count", "bigquery.googleapis.com/job/continuous/records_written_count", "bigquery.googleapis.com/job/continuous/estimated_backlog_logical_bytes", "bigquery.googleapis.com/job/continuous/estimated_bytes_processed_count", "bigquery.googleapis.com/job/continuous/output_watermark", "bigquery.googleapis.com/job/continuous/slots/allocated", "bigquery.googleapis.com/job/continuous/end_to_end_latencies", "bigquery.googleapis.com/job/continuous/records_read", "bigquery.googleapis.com/job/continuous/records_written", "bigquery.googleapis.com/job/continuous/estimated_bytes_processed", "bigquery.googleapis.com/job/continuous/slots/used_time" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit" ] }, { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/bigqueryconnection.googleapis.com", "config": { "name": "bigqueryconnection.googleapis.com", "title": "BigQuery Connection API", "documentation": { "summary": "Allows users to manage BigQuery connections to external data sources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/bigquerydatapolicy.googleapis.com", "config": { "name": "bigquerydatapolicy.googleapis.com", "title": "BigQuery Data Policy API", "documentation": { "summary": "Allows users to manage BigQuery data policies." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/bigqueryreservation.googleapis.com", "config": { "name": "bigqueryreservation.googleapis.com", "title": "BigQuery Reservation API", "documentation": { "summary": "A service to modify your BigQuery flat-rate reservations." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquerystorage.googleapis.com/DataflowWrite", "displayName": "BigQuery Storage Write API metrics for Dataflow jobs.", "description": "BigQuery Storage Write API metrics for Dataflow jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job." }, { "key": "location", "description": "The BigQuery region in which the Storage API server locates." }, { "key": "job_name", "description": "The name of the Dataflow job this worker belongs to." }, { "key": "job_id", "description": "The id of the dataflow job the worker belongs to." }, { "key": "worker_id", "description": "The ID of the worker, unique for this job_id." }, { "key": "destination_project", "description": "The project of BigQuery destination table of the Dataflow job." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquerystorage.googleapis.com/DataflowWrite", "metrics": [ "bigquerystorage.googleapis.com/dataflow_write/request_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/connection_results_count", "bigquerystorage.googleapis.com/dataflow_write/server_side_latencies", "bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies", "bigquerystorage.googleapis.com/dataflow_write/concurrent_connections" ] } ] } }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/NetworkPathQuotasResource", "displayName": "Network Path Quotas Resource.", "description": "Network Path Quotas Resource.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "network_path_id", "description": "The network path custom dimension." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded", "compute.googleapis.com/tpus_per_tpu_family" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded", "compute.googleapis.com/quota/wire_groups_per_interconnect/exceeded", "compute.googleapis.com/wire_groups_per_interconnect" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit", "compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage", "compute.googleapis.com/quota/wire_groups_per_interconnect/limit", "compute.googleapis.com/quota/wire_groups_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/NetworkPathQuotasResource", "metrics": [ "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/exceeded", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/NetworkPathQuotasResource", "metrics": [ "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/usage", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/usage", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/limit", "compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/dataform.googleapis.com", "config": { "name": "dataform.googleapis.com", "title": "Dataform API", "documentation": { "summary": "Service to develop, version control, and operationalize SQL pipelines in BigQuery." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/dataplex.googleapis.com", "config": { "name": "dataplex.googleapis.com", "title": "Cloud Dataplex API", "documentation": { "summary": "Dataplex API is used to manage the lifecycle of data lakes." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataplex.googleapis.com/Lake", "displayName": "Cloud Dataplex Lake", "description": "A Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of this Lake resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Zone", "displayName": "Cloud Dataplex Zone", "description": "A Zone within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of this Zone resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Asset", "displayName": "Cloud Dataplex Asset", "description": "An Asset within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of the Zone resource containing this resource." }, { "key": "asset_id", "description": "The identifier of this Asset resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Environment", "displayName": "Cloud Dataplex Environment", "description": "An Environment within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "environment_id", "description": "The identifier of this Environment resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataplex.googleapis.com/Lake", "metrics": [ "dataplex.googleapis.com/lake/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Zone", "metrics": [ "dataplex.googleapis.com/zone/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Asset", "metrics": [ "dataplex.googleapis.com/asset/requires_action", "dataplex.googleapis.com/asset/active", "dataplex.googleapis.com/asset/data_items", "dataplex.googleapis.com/asset/data_size", "dataplex.googleapis.com/asset/tables", "dataplex.googleapis.com/asset/filesets", "dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates", "dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates" ] } ] } }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes", "logging.googleapis.com/billing/stored_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/looker.googleapis.com", "config": { "name": "looker.googleapis.com", "title": "Looker (Google Cloud core) API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "looker.googleapis.com/Instance", "displayName": "Looker Instance", "description": "A Looker Instance.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Instance." }, { "key": "location", "description": "The region in which the instance is running." }, { "key": "instance_id", "description": "The ID of the Looker Instance." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "looker.googleapis.com/Instance", "metrics": [ "looker.googleapis.com/internal/project_mapping", "looker.googleapis.com/internal/clh/repair_count", "looker.googleapis.com/internal/clh/repair_applicability_count", "looker.googleapis.com/internal/clh/repair_result_count", "looker.googleapis.com/internal/clh/report_instance_state_count", "looker.googleapis.com/internal/clh/repair_latency", "looker.googleapis.com/internal/clh/update_instance_count", "looker.googleapis.com/internal/helltool/admin_settings_update_count", "looker.googleapis.com/internal/clh/export_step_count", "looker.googleapis.com/internal/clh/export_step_latencies", "looker.googleapis.com/internal/clh/import_step_count", "looker.googleapis.com/internal/clh/import_step_latencies", "looker.googleapis.com/internal/clh/rollback_import_step_count", "looker.googleapis.com/internal/clh/rollback_import_step_latencies", "looker.googleapis.com/internal/slm/exporter_count", "looker.googleapis.com/internal/slm/exporter_latencies", "looker.googleapis.com/internal/slm/importer_count", "looker.googleapis.com/internal/slm/importer_latencies", "looker.googleapis.com/internal/clh/infra_unhealthy_count", "looker.googleapis.com/internal/health" ] } ] } }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340031" }, { "name": "projects/12340031/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340031" } ] } ================================================ FILE: test-data/looker1/project.tf ================================================ resource "random_string" "project_id" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - looker1" project_id = "gcpdiag-looker1-${random_string.project_id.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null // billing_account = var.billing_account_id lifecycle { ignore_changes = all } } resource "google_project_service" "computer_api" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "looker_api" { project = google_project.project.project_id service = "looker.googleapis.com" } resource "google_project_service" "bigquery_api" { project = google_project.project.project_id service = "bigquery.googleapis.com" } resource "google_project_service" "logging_api" { project = google_project.project.project_id service = "logging.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/looker1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/nat1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340010 FAKE_ORG_ID = 22223333 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ REGION1 = europe-west4 ZONE1 = europe-west4-a CLOUD_ROUTER = public-nat-cloud-router all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-instances-$(ZONE1).json \ json-dumps/compute-network-default.json \ json-dumps/compute-network-nat-vpc-network.json \ json-dumps/monitoring-query.json \ json-dumps/compute-routers-$(REGION1).json \ json-dumps/compute-routers-natMappingInfo-$(CLOUD_ROUTER).json \ json-dumps/compute-routers-routerStatus-$(CLOUD_ROUTER).json \ json-dumps/compute-routers-natIpInfo-$(CLOUD_ROUTER).json include ../Makefile.inc define MONITORING_QUERY_NAT_ALLOCATION_FAILED { \ "query": "fetch nat_gateway \ | metric 'router.googleapis.com/nat/nat_allocation_failed' \ | within 5m \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY_NAT_ALLOCATION_FAILED)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-routers-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$*/routers/' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-routers-natMappingInfo-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION1)/routers/$*/getNatMappingInfo' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-network-nat-vpc-network.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/nat-vpc-network' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-routers-routerStatus-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION1)/routers/$*/getRouterStatus' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-routers-natIpInfo-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION1)/routers/$*/getNatIpInfo' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/nat1/json-dumps/compute-instances-europe-west4-a.json ================================================ { "id": "projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-10-26T18:57:58.912-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/disks/private-vm-0", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4734315867648565453", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2024-10-26T18:58:10.012-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-vm-0", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "networkIP": "172.16.1.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances/private-vm-0", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-10-26T18:57:59.851-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/disks/private-vm-1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "2461631680997236941", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2024-10-26T18:58:09.100-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-vm-1", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "networkIP": "172.16.1.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances/private-vm-1", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-10-26T18:57:59.192-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/disks/private-vm-2", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "7851540549116895437", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2024-10-26T18:58:09.871-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-vm-2", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "networkIP": "172.16.1.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances/private-vm-2", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-10-26T18:57:59.112-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/disks/private-vm-3", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "2326196273934246093", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2024-10-26T18:58:11.337-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-vm-3", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "networkIP": "172.16.1.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances/private-vm-3", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances" } ================================================ FILE: test-data/nat1/json-dumps/compute-instances-us-central1-a.json ================================================ { "id": "projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-10-23T20:51:00.281-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/disks/private-vm-0", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "676902860603292365", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2024-10-23T20:51:20.348-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-vm-0", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "networkIP": "172.16.1.4", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances/private-vm-0", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-10-23T20:51:00.209-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/disks/private-vm-1", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "4193225837475297997", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2024-10-23T20:51:20.252-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-vm-1", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "networkIP": "172.16.1.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances/private-vm-1", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-10-23T20:50:59.618-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/disks/private-vm-2", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "9029703086896347853", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2024-10-23T20:51:20.420-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-vm-2", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "networkIP": "172.16.1.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances/private-vm-2", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a" }, { "canIpForward": false, "cpuPlatform": "Intel Broadwell", "creationTimestamp": "2024-10-23T20:51:00.530-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/disks/private-vm-3", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "8444030377067313869", "kind": "compute#instance", "labelFingerprint": "vezUS-42LLM=", "labels": { "goog-terraform-provisioned": "true" }, "lastStartTimestamp": "2024-10-23T20:51:21.312-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/machineTypes/e2-medium", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-vm-3", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "networkIP": "172.16.1.5", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet" } ], "satisfiesPzi": true, "scheduling": { "automaticRestart": true, "onHostMaintenance": "MIGRATE", "preemptible": false, "provisioningModel": "STANDARD" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances/private-vm-3", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED" }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances" } ================================================ FILE: test-data/nat1/json-dumps/compute-network-default.json ================================================ { "autoCreateSubnetworks": true, "creationTimestamp": "2024-10-23T20:41:27.369-07:00", "description": "Default network for the project", "id": "7877618327818108680", "kind": "compute#network", "name": "default", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "routingConfig": { "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/7877618327818108680", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west12/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/northamerica-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/me-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/africa-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west10/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/northamerica-northeast1/subnetworks/default" ] } ================================================ FILE: test-data/nat1/json-dumps/compute-network-nat-vpc-network.json ================================================ { "kind": "compute#network", "id": "4007354994527599341", "creationTimestamp": "2024-10-23T20:50:26.420-07:00", "name": "nat-vpc-network", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/4007354994527599341", "autoCreateSubnetworks": false, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/nat1/json-dumps/compute-network-nat_vpc_network.json ================================================ { "kind": "compute#network", "id": "4007354994527599341", "creationTimestamp": "2024-10-23T20:50:26.420-07:00", "name": "nat-vpc-network", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/4007354994527599341", "autoCreateSubnetworks": false, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/nat1/json-dumps/compute-routers-europe-west4.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-nat1-aaaa/regions/europe-west4/routers/", "items": [ { "kind": "compute#router", "id": "564470628362494773", "creationTimestamp": "2024-10-26T18:56:42.961-07:00", "name": "public-nat-cloud-router", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/routers/public-nat-cloud-router", "nats": [ { "name": "public-nat-gateway", "type": "PUBLIC", "endpointTypes": [ "ENDPOINT_TYPE_VM" ], "sourceSubnetworkIpRangesToNat": "ALL_SUBNETWORKS_ALL_IP_RANGES", "natIps": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/addresses/public-nat-ip-1" ], "natIpAllocateOption": "MANUAL_ONLY", "minPortsPerVm": 32000, "enableDynamicPortAllocation": false, "udpIdleTimeoutSec": 30, "icmpIdleTimeoutSec": 30, "tcpEstablishedIdleTimeoutSec": 1200, "tcpTransitoryIdleTimeoutSec": 30, "tcpTimeWaitTimeoutSec": 120, "logConfig": { "enable": true, "filter": "ERRORS_ONLY" }, "enableEndpointIndependentMapping": false } ], "encryptedInterconnectRouter": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/routers/" } ================================================ FILE: test-data/nat1/json-dumps/compute-routers-natIpInfo-public-nat-cloud-router.json ================================================ { "result": [ { "natName": "public-nat-gateway", "natIpInfoMappings": [ { "natIp": "35.204.78.175", "usage": "IN_USE", "mode": "MANUAL" } ] } ] } ================================================ FILE: test-data/nat1/json-dumps/compute-routers-natMappingInfo-public-nat-cloud-router.json ================================================ { "kind": "compute#vmEndpointNatMappingsList", "result": [ { "instanceName": "private-vm-2", "interfaceNatMappings": [ { "sourceVirtualIp": "172.16.1.3", "sourceAliasIpRange": "", "numTotalNatPorts": 16384, "natIpPortRanges": [ "35.204.78.175:16384-32767" ], "numTotalDrainNatPorts": 0 }, { "sourceVirtualIp": "172.16.1.3", "sourceAliasIpRange": "", "numTotalNatPorts": 16384, "natIpPortRanges": [ "35.204.78.175:32768-49151" ], "numTotalDrainNatPorts": 0 } ] }, { "instanceName": "private-vm-3", "interfaceNatMappings": [ { "sourceVirtualIp": "172.16.1.2", "sourceAliasIpRange": "", "numTotalNatPorts": 16384, "natIpPortRanges": [ "35.204.78.175:49152-65535" ], "numTotalDrainNatPorts": 0 } ] } ], "nextPageToken": "" } ================================================ FILE: test-data/nat1/json-dumps/compute-routers-natMappingInfo-public_nat_cloud_router.json ================================================ { "kind": "compute#vmEndpointNatMappingsList", "result": [ { "instanceName": "private-vm-2", "interfaceNatMappings": [ { "sourceVirtualIp": "172.16.1.2", "sourceAliasIpRange": "", "numTotalNatPorts": 16384, "natIpPortRanges": [ "35.239.1.15:16384-32767" ], "numTotalDrainNatPorts": 0 }, { "sourceVirtualIp": "172.16.1.2", "sourceAliasIpRange": "", "numTotalNatPorts": 16384, "natIpPortRanges": [ "35.239.1.15:32768-49151" ], "numTotalDrainNatPorts": 0 } ] }, { "instanceName": "private-vm-3", "interfaceNatMappings": [ { "sourceVirtualIp": "172.16.1.5", "sourceAliasIpRange": "", "numTotalNatPorts": 16384, "natIpPortRanges": [ "35.239.1.15:49152-65535" ], "numTotalDrainNatPorts": 0 } ] } ], "nextPageToken": "" } ================================================ FILE: test-data/nat1/json-dumps/compute-routers-routerStatus-public-nat-cloud-router.json ================================================ { "kind": "compute#routerStatusResponse", "result": { "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "natStatus": [ { "name": "public-nat-gateway", "userAllocatedNatIpResources": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/addresses/public-nat-ip-1" ], "userAllocatedNatIps": [ "35.204.78.175" ], "minExtraNatIpsNeeded": 2, "numVmEndpointsWithNatMappings": 2 } ] } } ================================================ FILE: test-data/nat1/json-dumps/compute-routers-routerStatus-public_nat_cloud_router.json ================================================ { "kind": "compute#routerStatusResponse", "result": { "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "natStatus": [ { "name": "public-nat-gateway", "userAllocatedNatIpResources": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/addresses/public-nat-ip-1" ], "userAllocatedNatIps": [ "35.239.1.15" ], "minExtraNatIpsNeeded": 2, "numVmEndpointsWithNatMappings": 2 } ] } } ================================================ FILE: test-data/nat1/json-dumps/compute-routers-us-central1.json ================================================ { "kind": "compute#routerList", "id": "projects/gcpdiag-nat1-aaaa/regions/us-central1/routers/", "items": [ { "kind": "compute#router", "id": "2301099474353945314", "creationTimestamp": "2024-10-23T20:50:37.304-07:00", "name": "public-nat-cloud-router", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/routers/public-nat-cloud-router", "nats": [ { "name": "public-nat-gateway", "type": "PUBLIC", "endpointTypes": [ "ENDPOINT_TYPE_VM" ], "sourceSubnetworkIpRangesToNat": "ALL_SUBNETWORKS_ALL_IP_RANGES", "natIps": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/addresses/public-nat-ip-1" ], "natIpAllocateOption": "MANUAL_ONLY", "minPortsPerVm": 32000, "enableDynamicPortAllocation": false, "udpIdleTimeoutSec": 30, "icmpIdleTimeoutSec": 30, "tcpEstablishedIdleTimeoutSec": 1200, "tcpTransitoryIdleTimeoutSec": 30, "tcpTimeWaitTimeoutSec": 120, "logConfig": { "enable": true, "filter": "ERRORS_ONLY" }, "enableEndpointIndependentMapping": false } ], "encryptedInterconnectRouter": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/routers/" } ================================================ FILE: test-data/nat1/json-dumps/monitoring-query-nat-allocation-failed.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.project_id" }, { "key": "resource.region" }, { "key": "resource.router_id" }, { "key": "resource.gateway_name" } ], "pointDescriptors": [ { "key": "value.nat_allocation_failed", "valueType": "BOOL", "metricKind": "GAUGE" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "gcpdiag-nat1-aaaa" }, { "stringValue": "europe-west4" }, { "stringValue": "564470628362494773" }, { "stringValue": "public-nat-gateway" } ], "pointData": [ { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T02:47:00Z", "endTime": "2024-10-27T02:47:00Z" } }, { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T02:46:00Z", "endTime": "2024-10-27T02:46:00Z" } }, { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T02:45:00Z", "endTime": "2024-10-27T02:45:00Z" } }, { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T02:44:00Z", "endTime": "2024-10-27T02:44:00Z" } } ] } ] } ================================================ FILE: test-data/nat1/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.project_id" }, { "key": "resource.region" }, { "key": "resource.router_id" }, { "key": "resource.gateway_name" } ], "pointDescriptors": [ { "key": "value.nat_allocation_failed", "valueType": "BOOL", "metricKind": "GAUGE" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "gcpdiag-nat1-aaaa" }, { "stringValue": "europe-west4" }, { "stringValue": "564470628362494773" }, { "stringValue": "public-nat-gateway" } ], "pointData": [ { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T03:45:00Z", "endTime": "2024-10-27T03:45:00Z" } }, { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T03:44:00Z", "endTime": "2024-10-27T03:44:00Z" } }, { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T03:43:00Z", "endTime": "2024-10-27T03:43:00Z" } }, { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T03:42:00Z", "endTime": "2024-10-27T03:42:00Z" } }, { "values": [ { "boolValue": true } ], "timeInterval": { "startTime": "2024-10-27T03:41:00Z", "endTime": "2024-10-27T03:41:00Z" } } ] } ] } ================================================ FILE: test-data/nat1/json-dumps/project.json ================================================ { "name": "projects/12340010", "parent": "folders/348077457356", "projectId": "gcpdiag-nat1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - nat1", "createTime": "2024-10-24T03:36:15.068177Z", "updateTime": "2024-10-24T03:36:15.068177Z", "etag": "W/\"6d4466d453793d0e\"", "labels": { "gcpdiag": "test", "goog-terraform-provisioned": "true" } } ================================================ FILE: test-data/nat1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340010/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the storage pool." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network", "compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network", "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_hierarchical_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/advanced_rules_per_edge_security_policy", "compute.googleapis.com/advanced_rules_per_regional_security_policy", "compute.googleapis.com/advanced_rules_per_security_policy", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization", "compute.googleapis.com/storage_pool/capacity_overprovisioning", "compute.googleapis.com/storage_pool/iops_overprovisioning", "compute.googleapis.com/storage_pool/throughput_overprovisioning" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit", "compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/deploymentmanager.googleapis.com", "config": { "name": "deploymentmanager.googleapis.com", "title": "Cloud Deployment Manager V2 API", "documentation": { "summary": "The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\nresources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes", "logging.googleapis.com/billing/stored_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" and \"cluster\" are supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested", "monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested", "monitoring.googleapis.com/internal/stats/filtered_sample_count", "monitoring.googleapis.com/internal/stats/filtered_byte_count", "monitoring.googleapis.com/internal/stats/metrics_queried_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/recommender.googleapis.com", "config": { "name": "recommender.googleapis.com", "title": "Recommender API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/vpcaccess.googleapis.com", "config": { "name": "vpcaccess.googleapis.com", "title": "Serverless VPC Access API", "documentation": { "summary": "API for managing VPC access connectors." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/billing-enabled", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" }, { "name": "projects/12340010/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340010" } ] } ================================================ FILE: test-data/nat1/project.tf ================================================ /** * 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - nat1" project_id = "gcpdiag-nat1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null //billing_account = var.billing_account_id labels = { gcpdiag : "test" } lifecycle { ignore_changes = all } } # Enable required APIs resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "vpcaccess" { project = google_project.project.project_id service = "vpcaccess.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/nat1/public-cloud-nat.tf ================================================ # 1. Create a VPC Network resource "google_compute_network" "nat_vpc_network" { name = "nat-vpc-network" auto_create_subnetworks = false project = google_project.project.project_id } # 2. Create a Subnet in the VPC Network resource "google_compute_subnetwork" "private_subnet" { name = "private-subnet" ip_cidr_range = "172.16.1.0/24" region = "europe-west4" network = google_compute_network.nat_vpc_network.id private_ip_google_access = true project = google_project.project.project_id } # 3. Create 3 VM instances without external IP addresses resource "google_compute_instance" "vm_instances" { count = 4 name = "private-vm-${count.index}" machine_type = "e2-medium" zone = "europe-west4-a" project = google_project.project.project_id boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { subnetwork = google_compute_subnetwork.private_subnet.id #access_config = {} # No external IP by default } } # 4. Create a Cloud Router resource "google_compute_router" "public_nat_cloud_router" { name = "public-nat-cloud-router" network = google_compute_network.nat_vpc_network.name region = "europe-west4" project = google_project.project.project_id } # 5. Create a Static IP Address for the NAT Gateway resource "google_compute_address" "public_nat_ip_1" { name = "public-nat-ip-1" region = "europe-west4" project = google_project.project.project_id } # 6. Create a Cloud NAT Gateway with a Static IP and Custom Port Settings resource "google_compute_router_nat" "public_nat_gateway" { name = "public-nat-gateway" router = google_compute_router.public_nat_cloud_router.name region = "europe-west4" nat_ip_allocate_option = "MANUAL_ONLY" nat_ips = [google_compute_address.public_nat_ip_1.id] source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES" project = google_project.project.project_id min_ports_per_vm = 32000 enable_dynamic_port_allocation = false log_config { enable = true filter = "ERRORS_ONLY" } } ================================================ FILE: test-data/nat1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/notebooks1/Makefile ================================================ PROJECT_ID := $(shell terraform output project_id | sed -e 's|"||g') PROJECT_ID_SUFFIX := $(shell terraform output -json project_id_suffix) PROJECT_NR := $(shell terraform output -json project_nr) ORG_ID := $(shell terraform output -json org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner LOCATION = us-west1-a REGION = us-west1 INSTANCE_NAME = gcpdiag-notebooks1instance-aaaa RUNTIME_NAME = gcpdiag-notebooks1runtime-aaaa FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340012 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/instances.json \ json-dumps/runtimes.json \ json-dumps/health-state.json \ json-dumps/is-upgradeable.json \ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/instances.json: $(CURL) -fv \ 'https://notebooks.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/instances' \ | $(SED_SUBST_FAKE) >$@ json-dumps/runtimes.json: $(CURL) -fv \ 'https://notebooks.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/runtimes' \ | $(SED_SUBST_FAKE) >$@ json-dumps/health-state.json: $(CURL) -fv \ 'https://notebooks.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE_NAME}:getInstanceHealth' \ | $(SED_SUBST_FAKE) >$@ json-dumps/is-upgradeable.json: $(CURL) -fv \ 'https://notebooks.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE_NAME}:isUpgradeable' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/notebooks1/instances1.tf ================================================ /** * Copyright 2023 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. */ # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/notebooks_instance resource "google_notebooks_instance" "notebooks1instance" { project = google_project.project.project_id name = "gcpdiag-notebooks1instance-aaaa" provider = google-beta location = "us-west1-a" machine_type = "e2-medium" vm_image { project = "deeplearning-platform-release" image_family = "tf-latest-cpu" } } ================================================ FILE: test-data/notebooks1/json-dumps/health-state.json ================================================ { "healthState": "UNHEALTHY" } ================================================ FILE: test-data/notebooks1/json-dumps/instances.json ================================================ { "instances": [ { "name": "projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa", "proxyUri": "44b1bee026df3850-dot-us-west1.notebooks.googleusercontent.com", "serviceAccount": "12340012-compute@developer.gserviceaccount.com", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/zones/us-west1-a/machineTypes/e2-medium", "state": "ACTIVE", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/global/networks/default", "subnet": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/regions/us-west1/subnetworks/default", "labels": { "consumer-project-id": "notebooks-probe-prod", "goog-caip-notebook": "", "resource-name": "probe-instance-4f0091ac-605c-4ab6-948f-c8c2d8ece6ff" }, "metadata": { "serial-port-logging-enable": "true", "version": "103", "framework": "TensorFlow:2.11", "restriction": "", "enable-guest-attributes": "TRUE", "proxy-mode": "service_account", "shutdown-script": "/opt/deeplearning/bin/shutdown_script.sh", "notebooks-api": "PROD", "title": "TensorFlow2.11/Keras.CPU", "proxy-url": "44b1bee026df3850-dot-us-west1.notebooks.googleusercontent.com" }, "createTime": "2023-02-06T13:58:15.095719640Z", "updateTime": "2023-02-06T14:00:19.686950128Z", "disks": [ { "autoDelete": true, "boot": true, "deviceName": "boot", "diskSizeGb": "150", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-tensorflow", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gvnic", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-cpu-tensorflow-experimental", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-cpu-tensorflow-2-11", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-debian-10", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-dlvm" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/zones/us-west1-a/disks/gcpdiag-notebooks1instance-aaaa-boot", "type": "PERSISTENT" }, { "autoDelete": true, "deviceName": "data", "diskSizeGb": "100", "index": "1", "interface": "SCSI", "kind": "compute#attachedDisk", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/zones/us-west1-a/disks/gcpdiag-notebooks1instance-aaaa-data", "type": "PERSISTENT" } ], "shieldedInstanceConfig": { "enableVtpm": true, "enableIntegrityMonitoring": true }, "creator": "abc@abc.com" } ] } ================================================ FILE: test-data/notebooks1/json-dumps/is-upgradeable.json ================================================ { "upgradeable": true, "upgradeVersion": "m109", "upgradeInfo": "A new image is available for upgrade. Backup user data before upgrading", "upgradeImage": "https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-latest-cpu-v20230615" } ================================================ FILE: test-data/notebooks1/json-dumps/project.json ================================================ { "name": "projects/12340012", "parent": "folders/373737373737", "projectId": "gcpdiag-notebooks1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - notebooks1", "createTime": "2023-02-06T13:53:26.617Z", "updateTime": "2023-02-06T13:53:26.617Z", "etag": "jdWJRndnEleSyJWfd33qOQ==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/notebooks1/json-dumps/runtimes.json ================================================ { "runtimes": [ { "name": "projects/gcpdiag-notebooks1-aaaa/locations/us-west1/runtimes/gcpdiag-notebooks1runtime-aaaa", "virtualMachine": { "virtualMachineConfig": { "zone": "us-west1-a", "machineType": "n1-standard-4", "dataDisk": { "initializeParams": { "diskSizeGb": "100", "diskType": "PD_STANDARD" } }, "acceleratorConfig": {}, "bootImage": {} } }, "state": "ACTIVE", "accessConfig": { "accessType": "SINGLE_USER", "proxyUri": "65983399445cabc4-dot-us-west1.notebooks.googleusercontent.com" }, "softwareConfig": { "idleShutdown": true, "idleShutdownTimeout": 180, "upgradeable": false, "version": "m109" }, "createTime": "2023-06-16T14:23:46.908241072Z", "updateTime": "2023-06-16T14:27:22.889587129Z" } ] } ================================================ FILE: test-data/notebooks1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340012/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "BETA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used" ] } ] } }, "state": "ENABLED", "parent": "projects/12340012" }, { "name": "projects/12340012/services/notebooks.googleapis.com", "config": { "name": "notebooks.googleapis.com", "title": "Notebooks API", "documentation": { "summary": "Notebooks API is used to manage notebook resources in Google Cloud." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "notebooks.googleapis.com/Runtime", "displayName": "Notebooks Runtime", "description": "A managed notebooks instance.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The region of the runtime." }, { "key": "runtime_id", "description": "The user-provided unique ID for the runtime." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "gce_instance", "metrics": [ "notebooks.googleapis.com/instance/proxy_agent/crash_count", "notebooks.googleapis.com/instance/proxy_agent/response_count", "notebooks.googleapis.com/instance/jupyter/crash_count", "notebooks.googleapis.com/instance/jupyter/container_crash_count" ] }, { "monitoredResource": "notebooks.googleapis.com/Runtime", "metrics": [ "notebooks.googleapis.com/runtime/health", "notebooks.googleapis.com/runtime/kernel/startup_latencies", "notebooks.googleapis.com/runtime/proxy/response_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340012" }, { "name": "projects/12340012/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340012" }, { "name": "projects/12340012/services/securitycenter.googleapis.com", "config": { "name": "securitycenter.googleapis.com", "title": "Security Command Center API", "documentation": { "summary": "Security Command Center API provides access to temporal views of assets and findings within an organization." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340012" } ] } ================================================ FILE: test-data/notebooks1/project.tf ================================================ /** * Copyright 2023 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. */ terraform { required_providers { google = { source = "hashicorp/google" version = "= 3.46.0" } google-beta = { source = "hashicorp/google-beta" version = ">= 3.46.0" } } } resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - notebooks1" project_id = "gcpdiag-notebooks1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "notebooks" { project = google_project.project.project_id service = "notebooks.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/notebooks1/runtimes1.tf ================================================ /** * Copyright 2023 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. */ # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/notebooks_runtime resource "google_notebooks_runtime" "notebooks1runtime" { project = google_project.project.project_id name = "gcpdiag-notebooks1runtime-aaaa" provider = google-beta location = "us-west1" virtual_machine { virtual_machine_config { machine_type = "n1-standard-4" data_disk { initialize_params { disk_size_gb = "100" disk_type = "PD_STANDARD" } } } } } ================================================ FILE: test-data/notebooks1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/notebooks2/Makefile ================================================ PROJECT_ID := $(shell terraform output project_id | sed -e 's|"||g') PROJECT_ID_SUFFIX := $(shell terraform output -json project_id_suffix) PROJECT_NR := $(shell terraform output -json project_nr) ORG_ID := $(shell terraform output -json org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner LOCATION = us-west1-a REGION = us-west1 INSTANCE_OK_NAME = notebooks2instance-ok INSTANCE_PROVISIONING_STUCK_NAME = notebooks2instance-provisioning-stuck FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340012 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ ORG_POLICY_CONSTRAINTS = \ json-dumps/org-constraint-compute.disableSerialPortAccess.json \ json-dumps/org-constraint-compute.requireOsLogin.json \ json-dumps/org-constraint-compute.requireShieldedVm.json \ json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json \ json-dumps/org-constraint-compute.disableSerialPortLogging.json \ json-dumps/org-constraint-compute.disableSshInBrowser.json define MONITORING_QUERY { \ "query": "fetch gce_instance \ | metric 'compute.googleapis.com/instance/cpu/utilization' \ | group_by 5m, [value_utilization_max: max(value.utilization)] \ | every 5m \ " \ } endef define LOGGING_ENTRIES_BODY { \ "resourceNames": ["projects/$(PROJECT_ID)"], \ "orderBy": "timestamp desc", \ "filter": " \ timestamp > \"2024-06-24T23:00:00+00:00\" AND \ timestamp < \"2024-06-25T07:00:00+00:00\" AND \ resource.type=\"gce_instance\" \ " \ } endef all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-serial-port-output-$(INSTANCE_OK_NAME).json \ json-dumps/compute-serial-port-output-$(INSTANCE_PROVISIONING_STUCK_NAME).json \ json-dumps/compute-instances-us-west1-a.json \ json-dumps/compute-instances-disks-us-west1-a.json \ json-dumps/workbench-instances.json \ json-dumps/notebooks2instance-ok-check-upgradability.json \ json-dumps/notebooks2instance-ok-check-upgradability.json \ json-dumps/notebooks2instance-provisioning-stuck-check-upgradability.json \ json-dumps/monitoring-query.json \ json-dumps/logging-entries-1.json \ $(ORG_POLICY_CONSTRAINTS) json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/org-constraint-%.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getEffectiveOrgPolicy' \ -X POST --header "Content-Type:text/json" \ -d "{\"constraint\": \"constraints/$*\"}" \ | $(JSON_CLEANER) other \ | $(SED_SUBST_FAKE) >$@ json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-us-west1-a.json: $(CURL) -fv \ 'https://compute.googleapis.com/compute/v1/projects/${PROJECT_ID}/zones/${LOCATION}/instances' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-instances-disks-us-west1-a.json: $(CURL) -fv \ 'https://compute.googleapis.com/compute/v1/projects/${PROJECT_ID}/zones/${LOCATION}/disks' \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-serial-port-output-%.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(LOCATION)/instances/$*/serialPort?start=-1000000' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/workbench-instances.json: $(CURL) -fv \ 'https://notebooks.googleapis.com/v2/projects/${PROJECT_ID}/locations/${LOCATION}/instances' \ | $(SED_SUBST_FAKE) >$@ json-dumps/notebooks2instance-ok-check-upgradability.json: $(CURL) -fv \ 'https://notebooks.googleapis.com/v2/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE_OK_NAME}:checkUpgradability' \ | $(SED_SUBST_FAKE) >$@ json-dumps/notebooks2instance-provisioning-stuck-check-upgradability.json: $(CURL) -fv \ 'https://notebooks.googleapis.com/v2/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE_PROVISIONING_STUCK_NAME}:checkUpgradability' \ | $(SED_SUBST_FAKE) >$@ json-dumps/logging-entries-1.json: $(CURL) -fsS \ 'https://logging.googleapis.com/v2/entries:list' \ --header "Content-Type:text/json" \ --data '$(LOGGING_ENTRIES_BODY)' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/notebooks2/instance_ok.tf ================================================ /** * Copyright 2024 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. */ # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/workbench_instance resource "google_workbench_instance" "notebooks2instance-ok" { project = google_project.project.project_id name = "notebooks2instance-ok" location = "us-west1-a" gce_setup { machine_type = "e2-standard-4" boot_disk { disk_size_gb = 150 disk_type = "PD_BALANCED" } data_disks { disk_size_gb = 100 disk_type = "PD_BALANCED" } vm_image { project = "cloud-notebooks-managed" family = "workbench-instances" } metadata = { serial-port-logging-enable = true report-event-health = true terraform = true report-dns-resolution = true disable-mixer = true idle-timeout-seconds = 10800 } } instance_owners = [] disable_proxy_access = false desired_state = "ACTIVE" } ================================================ FILE: test-data/notebooks2/instance_provisioning_stuck.tf ================================================ /** * Copyright 2024 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. */ # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/workbench_instance resource "google_workbench_instance" "notebooks2instance_provisioning_stuck" { project = google_project.project.project_id name = "notebooks2instance-provisioning-stuck" location = "us-west1-a" gce_setup { machine_type = "e2-standard-4" disable_public_ip = true boot_disk { disk_size_gb = 150 disk_type = "PD_BALANCED" } data_disks { disk_size_gb = 100 disk_type = "PD_BALANCED" } vm_image { project = "deeplearning-platform-release" family = "tf-2-11-cu113-notebooks-debian-11-py310" } metadata = { serial-port-logging-enable = true post-startup-script = "#! /bin/bash" report-event-health = true terraform = true report-dns-resolution = true disable-mixer = true idle-timeout-seconds = 10800 } network_interfaces { network = google_compute_network.my_network.id subnet = google_compute_subnetwork.my_subnetwork.id } } instance_owners = [] disable_proxy_access = false desired_state = "PROVISIONING" } ================================================ FILE: test-data/notebooks2/json-dumps/compute-instances-disks-us-west1-a.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks", "items": [ { "kind": "compute#disk", "id": "5823248711787458573", "creationTimestamp": "2024-06-24T17:27:17.216-07:00", "name": "notebooks2instance-ok-boot", "sizeGb": "150", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-ok-boot", "sourceImage": "https://www.googleapis.com/compute/v1/projects/cloud-notebooks-managed/global/images/workbench-instances-v20240613", "sourceImageId": "8939839224153148113", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/diskTypes/pd-balanced", "licenses": [ "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-tensorflow", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gvnic", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-workbench-instances", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-debian-11", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-dlvm" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2024-06-24T17:27:17.216-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-ok" ], "labels": { "consumer-project-id": "gcpdiag-notebooks2-aaaa", "consumer-project-number": "12340012", "notebooks-product": "workbench-instances", "resource-name": "notebooks2instance-ok" }, "labelFingerprint": "EShFsrA9YYA=", "licenseCodes": [ "5638175847114525401", "1045467480970708420", "5827808631348907538", "5836218392066113222", "5592494605997326117" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true }, { "kind": "compute#disk", "id": "5914438366494437389", "creationTimestamp": "2024-06-24T17:27:17.219-07:00", "name": "notebooks2instance-ok-data-workspace", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-ok-data-workspace", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/diskTypes/pd-balanced", "lastAttachTimestamp": "2024-06-24T17:27:17.220-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-ok" ], "labels": { "consumer-project-id": "gcpdiag-notebooks2-aaaa", "consumer-project-number": "12340012", "notebooks-product": "workbench-instances", "resource-name": "notebooks2instance-ok" }, "labelFingerprint": "EShFsrA9YYA=", "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true }, { "kind": "compute#disk", "id": "3682754809529082504", "creationTimestamp": "2024-06-24T18:24:57.206-07:00", "name": "notebooks2instance-provisioning-stuck-boot", "sizeGb": "150", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-provisioning-stuck-boot", "sourceImage": "https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-11-cu113-notebooks-v20240613-debian-11-py310", "sourceImageId": "4888085334736329368", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/diskTypes/pd-balanced", "licenses": [ "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-tensorflow", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gvnic", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gpu-tensorflow-2-11", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gpu-tensorflow-experimental", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-debian-11", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-notebooks" ], "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "lastAttachTimestamp": "2024-06-24T18:24:57.206-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck" ], "labels": { "consumer-project-id": "gcpdiag-notebooks2-aaaa", "consumer-project-number": "12340012", "notebooks-product": "workbench-instances", "resource-name": "notebooks2instance-provisioning-stuck" }, "labelFingerprint": "8SWlKftMsi8=", "licenseCodes": [ "5638175847114525401", "1045467480970708420", "101762042003655628", "2336113588774204348", "5836218392066113222", "241948068456683562" ], "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true }, { "kind": "compute#disk", "id": "3306109417737921160", "creationTimestamp": "2024-06-24T18:24:57.208-07:00", "name": "notebooks2instance-provisioning-stuck-data-workspace", "sizeGb": "100", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a", "status": "READY", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-provisioning-stuck-data-workspace", "type": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/diskTypes/pd-balanced", "lastAttachTimestamp": "2024-06-24T18:24:57.209-07:00", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck" ], "labels": { "consumer-project-id": "gcpdiag-notebooks2-aaaa", "consumer-project-number": "12340012", "notebooks-product": "workbench-instances", "resource-name": "notebooks2instance-provisioning-stuck" }, "labelFingerprint": "8SWlKftMsi8=", "physicalBlockSizeBytes": "4096", "enableConfidentialCompute": false, "satisfiesPzi": true } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks" } ================================================ FILE: test-data/notebooks2/json-dumps/compute-instances-us-west1-a.json ================================================ { "kind": "compute#instanceList", "id": "projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances", "items": [ { "kind": "compute#instance", "id": "7519326121542266893", "creationTimestamp": "2024-06-24T17:27:17.206-07:00", "name": "notebooks2instance-ok", "tags": { "items": [ "deeplearning-vm", "notebook-instance" ], "fingerprint": "OOp0AY3QO9M=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/machineTypes/e2-standard-4", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/default", "networkIP": "10.138.0.5", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "external-nat", "natIP": "34.168.127.66", "networkTier": "PREMIUM" } ], "fingerprint": "hcYNt8C2szg=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-ok-boot", "deviceName": "boot", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-tensorflow", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gvnic", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-workbench-instances", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-debian-11", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-dlvm" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "UEFI_COMPATIBLE" }, { "type": "GVNIC" } ], "diskSizeGb": "150" }, { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-ok-data-workspace", "deviceName": "data-workspace", "index": 1, "boot": false, "autoDelete": true, "interface": "SCSI", "diskSizeGb": "100" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "KC5MsBA_e0s=", "items": [ { "key": "version", "value": "122" }, { "key": "restriction", "value": "" }, { "key": "proxy-backend-id", "value": "341a9c04117d5a9e" }, { "key": "enable-oslogin", "value": "TRUE" }, { "key": "notebooks-api-version", "value": "v2" }, { "key": "enable-guest-attributes", "value": "TRUE" }, { "key": "report-event-health", "value": "true" }, { "key": "shutdown-script", "value": "/opt/deeplearning/bin/shutdown_script.sh" }, { "key": "idle-timeout-seconds", "value": "10800" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "disable-mixer", "value": "true" }, { "key": "notebooks-api", "value": "PROD" }, { "key": "terraform", "value": "true" }, { "key": "proxy-url", "value": "341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com" }, { "key": "report-dns-resolution", "value": "true" }, { "key": "disable-swap-binaries", "value": "true" }, { "key": "proxy-byoid-url", "value": "341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com" }, { "key": "framework", "value": "workbench" }, { "key": "proxy-registration-url", "value": "https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14" }, { "key": "proxy-mode", "value": "service_account" }, { "key": "title", "value": "workbench" } ] }, "serviceAccounts": [ { "email": "12340012-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/userinfo.email" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-ok", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "consumer-project-id": "gcpdiag-notebooks2-aaaa", "consumer-project-number": "12340012", "notebooks-product": "workbench-instances", "resource-name": "notebooks2instance-ok" }, "labelFingerprint": "EShFsrA9YYA=", "startRestricted": false, "deletionProtection": false, "reservationAffinity": { "consumeReservationType": "NO_RESERVATION" }, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "wITWaO7_ULs=", "lastStartTimestamp": "2024-06-24T17:27:24.621-07:00", "satisfiesPzi": true }, { "kind": "compute#instance", "id": "8016169244013604304", "creationTimestamp": "2024-06-24T17:45:53.435-07:00", "name": "notebooks2instance-provisioning-stuck", "tags": { "items": [ "deeplearning-vm", "notebook-instance" ], "fingerprint": "OOp0AY3QO9M=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/machineTypes/e2-standard-4", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a", "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/wbi-test-default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/wbi-test-default", "networkIP": "10.0.1.2", "name": "nic0", "fingerprint": "GpnD5K8Rv9k=", "stackType": "IPV4_ONLY" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-provisioning-stuck-boot", "deviceName": "boot", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid", "https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos", "https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos", "https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-workbench-instances-custom-container-host" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "SEV_LIVE_MIGRATABLE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" }, { "type": "SEV_SNP_CAPABLE" }, { "type": "SEV_LIVE_MIGRATABLE_V2" }, { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" } ], "diskSizeGb": "150", "shieldedInstanceInitialState": { "pk": { "content": "MIIEGTCCAwGgAwIBAgIQYB8C9RH--O1hXkpp2FVSXjANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMR4wHAYDVQQDExVVRUZJIFBsYXRmb3JtIEtleSB2MTAwHhcNMjAwODA2MTk0ODQ0WhcNMzAwODA0MTk0ODQ0WjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMR4wHAYDVQQDExVVRUZJIFBsYXRmb3JtIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClSQ15LUf193eJfM6b5etGgz8auvdI72Cclo3fHvwXBzsm5T1QamwYAqrCTcS7MxauCTkmkXTS9ejM4NNpQWF6KG82nR88vRyKO_MnSNL8ZP-rtRu0p1X_mUYXwi0_nPkyPKLR2QJ9H2EOrw_RChWvwnu281WtfUPCYs2t2SjBCF_mgzZI8o3s8wOtL8y-Dmi9T0bGO1wYX2okz51PKbhgVGQA7KJRmeekIxEkiN7GOb_2VQqcdM9c846OlC-8abwgDvrL3YqKqhw8DnSM2AbNpZIgUTd1Ut3X-PWXVKBj3qdxjAyRez8dPWymXDji-CBoBzLsWEkUW87S1coggOABAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEIMk0-K2sxOjtSpl-2pXmBWwwvSMGEIThmdDsSxQk2XZQMCsGA1UdIwQkMCKAIMk0-K2sxOjtSpl-2pXmBWwwvSMGEIThmdDsSxQk2XZQMA0GCSqGSIb3DQEBCwUAA4IBAQA7Pmaixb0FuDtpesNGvaBkTGWWMO7bDtx4rQom7zprEnliFJZung08FS3r73ob1urH0lzZm9022nRp8xqcSGk3wDkE9xQppWhvjhf6SOHdwM9_OxVq6no_BPz1PkRYsg4V07cgYPCtp7Ck7ZBI7m3MbLUyg8EG14_tvjKX9Xh2h0FSGuGg8_jjGYCGDtaSPkXBpAWurZ5mC2o9CzGaBJR4f_51I5C2AfHMG0H5T0Kehuyb_IzX9mAwArGmt62e4T9SxdP7LZUNPMEzOrhW1RzXvsD6Vod4uA9h2n_lbZHiBBExM2PMwuoobb-io-W0ARL4OCN5jah0a7q1ax6UYJK-", "fileType": "X509" }, "keks": [ { "content": "MIIEIjCCAwqgAwIBAgIRAKxVeWkn5a0pF1C0o_HUM6owDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEfMB0GA1UECxMWQ29udGFpbmVyIE9wdGltaXplZCBPUzEiMCAGA1UEAxMZVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMDAeFw0yMDA4MDYxOTQ4NTBaFw0zMDA4MDQxOTQ4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIExMQy4xHzAdBgNVBAsTFkNvbnRhaW5lciBPcHRpbWl6ZWQgT1MxIjAgBgNVBAMTGVVFRkkgS2V5IEV4Y2hhbmdlIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6ZCJ4Oldm1z3gwwAjWqiHRMFrXPwq0XmVmLWoaGUBzeL41VwHK76iQTxl11HYhqaAr_0nmVQAM3M6so6cmydd7l1RPYJpZ3Shy3qO4xxgy30kp4zW00m9EVEdkmh9-9zi_G89uutz7wOb34M2Wrybwa7D5U102DmSoJAoq5z2YrvpjZoGLRGqBBP6A1l-_gRGMAgUMqKbhD1HF1VKXZnIGq9UJcpHhRvQxOG3nlVWk6z8dH-Rnp_9YfEPRORAUF5PUnUL5-I3wr5derIIoeYxc7G2ZuTyRWsF9WVyZ7OquYwxAY4l4xkDJpAvSomHkbfNgtCZyTm2pMIkRou0up5lAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEINDkWV5HwgIi6aogGQUbZwWC5Es_Vx9SX5kG8i1xiXxKMCsGA1UdIwQkMCKAINDkWV5HwgIi6aogGQUbZwWC5Es_Vx9SX5kG8i1xiXxKMA0GCSqGSIb3DQEBCwUAA4IBAQCOTmuK7QQ4sP_8qYI2-bkvbQg1Vpq0W_aWtm0AQDw2iEVgfIq8JxNHu61ZhkmBiEhsdaaj7bYt_8owpvxfRnmzMPhQ6iB51vkExjWipD9spgSb8tfp0te6MqTT3omyYI9x4L13wn9ufZtlhZXlVgbjUN1QyevHwNt7Kms8Nd9Jbk9JCV9JoOIjkBpUjpCWCDfdGDD-iGIPzGdS-KjrNiA4udnzkdkO83dFMMvu69a1snCRUshNvHBNPbPRwbRYV9lS_QTwfft7EgbNF0455gblZbejvGJgR1Vhyen0jIPouVWxXe0X7AnGK8Mc3DUQBPVGT4ZR0WChbcwiOavh2t2X", "fileType": "X509" } ], "dbs": [ { "content": "MIIEDTCCAvWgAwIBAgIQRtEbux4j2WDjYimBMkIBYjANBgkqhkiG9w0BAQsFADCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMRgwFgYDVQQDEw9VRUZJIERCIEtleSB2MTAwHhcNMjAwODA2MTk0ODU1WhcNMzAwODA0MTk0ODU1WjCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMRgwFgYDVQQDEw9VRUZJIERCIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQzJHu5A61uBNU6UUUZ5MiXjXwy8Du44BHhisNBpi6cTVHZddJ85iNldE5cPL7hZFJP9n77KyFRCCLxT2CVDNkwMyE2jvJkTz2x2qWvJ-uIuL25Asfgbrv7t1h2Jn790ZLwb9U3qQvqMLvIh_cTtNLat0DaZJsdnJo1MTnFAWrYZZ19KB4j6JJpG_QBnQ-s8XibeSSoa_bMEQTn2OEQFeEcume3CeuZKzXyytMLKkV_z4z-CYddyRwkOFivWUHWq2nVecQQgdyDNWYxGnY4MNsTMYFfv-mhyRzMwhxBFMwMAaEwhTFWsIP6VNwrwIgQaDw3o1fUEuzavTfdNhULaJLAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEIEtOsnFY2N1KW7dg9Wd_GEcIwV_a-U2DCn5ZyUsGWickMCsGA1UdIwQkMCKAIEtOsnFY2N1KW7dg9Wd_GEcIwV_a-U2DCn5ZyUsGWickMA0GCSqGSIb3DQEBCwUAA4IBAQCOd9V3WYv589dVov5ZOYo4zSs5PXpts1_8sYvMwvzLBr46LaejfG7KjjIY665Cnik__Zy9N3ZS9-fEeGKrBPE8ClwC06QhLbWDSFIqj2y9qq5FyBW0k1no2UQBnvx4CnLw_BgU3eae0wjv1lpDIbMwxe3E_aucVmzaIX3O83cw2JL9lLm1Psum0L2VHDZSCTP24vzrWoXXo4USHO_tBt_NkYrdkQH5CqGJYtxzKRwHHKEar3vzsiW4DPzlW8kUjRual1eBOKT5YKGbrOA_PJXV9x_7v1f2uAIrqh3HyppDTaGJ7Lux1MDf_hKuwAFI5QJTy9NEojbuUk1tzB4ys_W8", "fileType": "X509" } ], "dbxs": [ { "content": "MIIEaDCCA1CgAwIBAgIJAKqfsrCdjyCoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEUMBIGA1UECxMLQ2hyb21pdW0gT1MxFzAVBgNVBAMTDlVFRkkgREIgS2V5IHYxMB4XDTE4MTIwODAxMTk0MVoXDTI4MTIwNTAxMTk0MVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEXMBUGA1UEAxMOVUVGSSBEQiBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtZ9U4P5aWlBwiTocmkUjOn2XpvHUlUOnsnhvsm994hAb0MNk2d3fXa8Nz14v9JiBTSf70KU2Zhxb_bSN3KAIv-f7F2AuXte7U9SnzZ02UDmK4TU1bFQW67Y3Gc2hWprCHYEjiRQD4J3WPWhuZnAXqzXQk3uDWVPETi-G9KAM1R-yNxZfoEjfIKhLabDsWqDtnMSovObLoVfwTdnm0WCuYTFtY_CKNxuxeKuzDsC5Su9N3dSFbpGhXJjwUaXPLWY5MFIqIQNBfhmWzDd4PItXaXV3V44IqWTXclE2aSUqkwNrEZ1cRpHG4PYM1aHVmjcO_dWlvthcepTIMIEMAXg2LAgMBAAGjgeYwgeMwHQYDVR0OBBYEFNXbmmdkM0aIsPMyEIv25JRaOPA-MIGzBgNVHSMEgaswgaiAFNXbmmdkM0aIsPMyEIv25JRaOPA-oYGEpIGBMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEUMBIGA1UECxMLQ2hyb21pdW0gT1MxFzAVBgNVBAMTDlVFRkkgREIgS2V5IHYxggkAqp-ysJ2PIKgwDAYDVR0TBAUwAwEB_zANBgkqhkiG9w0BAQsFAAOCAQEAJ2vbNymAKTUbRvxnAohHozVUByrKHCq1o8b-bKrgv7Ch0X4itfG8Uwvt0xG7CTpl_Dno92MtpOpFv4ydqox-pP1kTsRcnFNggndXdjpGILIB94KmFiYJvB6RzocJsXsXBa0tULOR24qiB9f93kfITS7Ec60WjFfpgYKEnuEgcV0yBuZzAZbxo1uF4n1hhmVUnKtEI9pX-8geYIIqIYiwwT2jnhFogWw4PeSyg-HMR1CLwwJeH2XDa924LpgHFuR-AbikipAE2vIE0yqJzo0o4tn9-sRuMaQcZ4VQqIzMiniW5H7nGeoQY3ktHX5eq6x-4jFvdLnzzq_D4sS-UWHzOA==", "fileType": "X509" }, { "content": "MIIEiTCCA3GgAwIBAgIJAOzm3xz71Vu6MA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIExMQy4xFDASBgNVBAsTC0Nocm9taXVtIE9TMSEwHwYDVQQDExhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwHhcNMTgxMjA4MDExOTQwWhcNMjgxMjA1MDExOTQwWjCBiTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEhMB8GA1UEAxMYVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwg5hvVH6fJSBNji7ynBl1SQzWceL5P3ul6RcB-1s5wXqzXlIHiyRqBdj4hj2pLzpKJGmXWnerIwJOkdsFg7IwZpA4xHE1F-M8XlpuuUn_Xdfccef36ddZEUH6QLwNm96T89F4ujt0omJ-0GV37vBsxEY-hwR3O8XBgyx8TvvYxNnVyTgi19qQdb2ES8-yWJkebdzgugcmNf9K-55fnEiyxWtrvEQb2sowWIS3-b1I_BP85pW2pldh9yQWfb3OY2NJhGSbQSnLi3J0IhRXROEtAXCU4MLTq2cHOpGX0DtJP_g_jD1pnC1O6CCZgVycK4DgZXeDzOG_2Uimhr0y1rcewIDAQABo4HxMIHuMB0GA1UdDgQWBBQEqlpkrYWCzJe69eMUdF1byztBmzCBvgYDVR0jBIG2MIGzgBQEqlpkrYWCzJe69eMUdF1byztBm6GBj6SBjDCBiTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEhMB8GA1UEAxMYVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxggkA7ObfHPvVW7owDAYDVR0TBAUwAwEB_zANBgkqhkiG9w0BAQsFAAOCAQEAWsd3mq0dADTD7Tx2uYcDeJcJHO0x91hO26p2cqUSox4wPgc4_xk5yiteMgDB5CWLwgcuneDAYYMO1PmktpEvLu9a82gCGxGiww-w78OJTOrs68VM1zB0jqA3X5EyVSwVJqi8idgrnnGsJAcSBosnUI8pNi9SDC3MRPE1q1EUjuDNjsE7t_ItBe-MSMWCH2hpG8unZ7uwWCRfAV3Fkdnq_S5HzDy6-kKyGdj-rprhVeDz2xSyMOlNIJig4uuqU166DTfoQA2TxnMG_TuHt69Z4uZcVwx_HwPs2-vUCCYqZDwuuHKNIEm8kIK8sSPSsp22sC8h-7Klb8wj_d0lzShgkg==", "fileType": "X509" }, { "content": "MIID0zCCArugAwIBAgIJANuXsNG_1HHxMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgTExDLjEUMBIGA1UECwwLQ2hyb21pdW0gT1MxFzAVBgNVBAMMDlVFRkkgREIgS2V5IHYxMCAXDTE4MDQyNzE1MDYzN1oYDzIyMTgwMzEwMTUwNjM3WjB_MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMRcwFQYDVQQDDA5VRUZJIERCIEtleSB2MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWzFg8obysKXCjnbBTpAM8dMFC2pHX7GpwESNG-FYQI218Y1Ao1p5BttGqPoU5lGNeYUXxgxIqfN18ALHH10gRCRfqbC54faPU1lMr0e0jvi67GgGztyLl4ltAgK7HHTHmtZwghYNS45pKz_LFGm-TlKg-HPZBFT9GtbjRZe5IS2xdKkWM_sPA8qXwzvqmLN3OQckf0KchSUQmB3-wh4vYFV2TEjz10oR0FZO8LFFOOeooukcRDYy219XrdM21APnfszHmfKhzAFddOcYdwKwOL-w9TKVUwCIM70GL_YOtywA17mQkEm0ON79oyQ0daDlZ0ngDxC8xUIASYsRRPOkkCAwEAAaNQME4wHQYDVR0OBBYEFFO6MYgG9CvYp6qAqn_Jm-MANGpvMB8GA1UdIwQYMBaAFFO6MYgG9CvYp6qAqn_Jm-MANGpvMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAIGyOB_3oFo6f3WoFrdBzimb_weH8hejtCggpcL-8Wdex9VRl5MKi_1GlGbietMDsr1alwdaagam9RafuIQplohTSBnQrU-u-LbtRlCF9C25GDQ70S0QlxAQmt41Sc7kSFTPm6BHauF3b_Raf9AX30MamptoXoAhgMnHAitCn6yCOsRJ_d1t04lqsiqefhf26xItvRnkuxG7-IQnbyGFCGPcjFNAE1thLpL_6y_dprVwTLsvZnsWYj-1Gg1yUkOnCN8Kl3Q3RDVqo98mORUc0bKB-B8_FQsbtmzbb-29nXQJW1FJx0ejqJyDGGBPHAGpwEJTVB3mwWXzBU6Ny7T3dlk=", "fileType": "X509" }, { "content": "MIID6TCCAtGgAwIBAgIJAKgdcZ45rGMDMA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSEwHwYDVQQDDBhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwIBcNMTgwNDI3MTUwNjM3WhgPMjIxODAzMTAxNTA2MzdaMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSEwHwYDVQQDDBhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbIdHPMQZZU68jI5kz5rmwvo-DQZZJ5amRnAUnBpNllhNQB6TaLUS_D9TIo_0X1e8T21Xk4Pf3D5ckbuQxsJzQ5OVEOb59sJ9AhjVUoxQxuVW-iBzD0mWbxKf2cASy2YRIEcaAAI5QT2SwO8gZy_G8LwAk-vO0vIbynN0WuFLl1Dp2cMQ3CxLSPH-QPSZyGd6o6ewUU9JzboppujXpk43EQH5ZJE_wJb_ujUFWcFzKHb_EkV1hI1TmBJ1-vR2kao4_1hQO6k1zLUR-MyBHY0SRU2OQxBpSez-qt7oItMBc1EanXvq9tqx0ndCTmXQYQplT5wtkPbE9sd5zwbDt8btHAgMBAAGjUDBOMB0GA1UdDgQWBBS5Tmmv3JM8w1mfP9V5xAIdjBhb7TAfBgNVHSMEGDAWgBS5Tmmv3JM8w1mfP9V5xAIdjBhb7TAMBgNVHRMEBTADAQH_MA0GCSqGSIb3DQEBCwUAA4IBAQB9BRTP37ik4jF2BmJJspMA6NHS7mxIckFCYKl-TO8zGFd3mlA6dnEw5WY-tUcBNJpAaHNJV_rzagGPpWMIoy-nAaLSSpnyhEXYTnQvzejYRijN3N0V9tmM0qgViHNBqTxdfcwlst5OUesGHPqgBOt5RRu5OGJ0rkuymWwxHOKIw43hz5FW7vhumbtJ3iy8HSFQIjSYMkr0sOzJhmvnHlpZ4pOoPNyNA9DM6smriH-2-MnJFM9w8bg6zsV5X-6KL464_FuXL_X_IWmAsAbi8Ge8ZMJjEaDrF1qkD4aLvu0MshzEdvrvQO-3Gn3Lmi_RYKR0HKZp7jXTySj76sxt9QK4", "fileType": "X509" } ] }, "architecture": "X86_64" }, { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-provisioning-stuck-data-workspace", "deviceName": "data-workspace", "index": 1, "boot": false, "autoDelete": true, "interface": "SCSI", "diskSizeGb": "100" } ], "metadata": { "kind": "compute#metadata", "fingerprint": "E8BE_novTRM=", "items": [ { "key": "enable-guest-attributes", "value": "TRUE" }, { "key": "post-startup-script", "value": "#! /bin/bash" }, { "key": "google-logging-enabled", "value": "true" }, { "key": "disable-swap-binaries", "value": "true" }, { "key": "notebooks-api-version", "value": "v2" }, { "key": "terraform", "value": "true" }, { "key": "report-event-health", "value": "true" }, { "key": "shutdown-script", "value": "/opt/deeplearning/bin/shutdown_script.sh" }, { "key": "user-data", "value": "#include file:///mnt/stateful_partition/workbench/cloud-config.yaml" }, { "key": "custom-container-payload", "value": "us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310:m118" }, { "key": "serial-port-logging-enable", "value": "true" }, { "key": "report-dns-resolution", "value": "true" }, { "key": "container", "value": "us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310:m118" }, { "key": "report-event-url", "value": "https://notebooks.googleapis.com/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem" }, { "key": "cos-update-strategy", "value": "update_disabled" }, { "key": "service-account-mode", "value": "true" }, { "key": "custom-container-image", "value": "true" }, { "key": "enable-oslogin", "value": "TRUE" }, { "key": "disable-mixer", "value": "true" }, { "key": "proxy-mode", "value": "service_account" }, { "key": "notebooks-api", "value": "PROD" }, { "key": "proxy-registration-url", "value": "https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14" }, { "key": "proxy-backend-id", "value": "1b1dcbcb4ec643e8" }, { "key": "proxy-url", "value": "1b1dcbcb4ec643e8-dot-us-west1.notebooks.googleusercontent.com" }, { "key": "proxy-byoid-url", "value": "1b1dcbcb4ec643e8-dot-us-west1.notebooks.byoid.googleusercontent.com" } ] }, "serviceAccounts": [ { "email": "12340012-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/userinfo.email" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false, "provisioningModel": "STANDARD" }, "cpuPlatform": "Intel Broadwell", "labels": { "consumer-project-id": "gcpdiag-notebooks2-aaaa", "consumer-project-number": "12340012", "notebooks-product": "workbench-instances", "resource-name": "notebooks2instance-provisioning-stuck" }, "labelFingerprint": "8SWlKftMsi8=", "startRestricted": false, "deletionProtection": false, "reservationAffinity": { "consumeReservationType": "NO_RESERVATION" }, "shieldedInstanceConfig": { "enableSecureBoot": false, "enableVtpm": true, "enableIntegrityMonitoring": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "fingerprint": "G6V-_E5vlsA=", "lastStartTimestamp": "2024-06-24T17:45:59.901-07:00", "satisfiesPzi": true } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances" } ================================================ FILE: test-data/notebooks2/json-dumps/compute-serial-port-output-notebooks2instance-ok.json ================================================ { "kind": "compute#serialPortOutput", "contents": "\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01H\u001b[2J\u001b[01;01H\u001b[=3h\u001b[2J\u001b[01;01HCSM BBS Table full.\r\nBdsDxe: loading Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nBdsDxe: starting Boot0001 \"UEFI Google PersistentDisk \" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\n\r\nUEFI: Attempting to start image.\r\nDescription: UEFI Google PersistentDisk \r\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\r\nOptionNumber: 1.\r\n\r\n\u001b[0m\u001b[30m\u001b[47mWelcome to GRUB!\n\r\n\r\u001b[0m\u001b[37m\u001b[40m\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m\u001b[H\u001b[J\u001b[1;1H\u001b[H\u001b[J\u001b[1;1H\u001b[0m\u001b[30m\u001b[40m\u001b[2J\u001b[01;01H\u001b[0m\u001b[37m\u001b[40m Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\n\r\n\r\n\r\n\rLoading Linux 5.10.0-30-cloud-amd64 ...Loading Linux 5.10.0-30-cloud-amd64 ...\n\r\n\rLoading initial ramdisk ...Loading initial ramdisk ...\n\r\n\rerror: no suitable video mode found.\n\rerror: no suitable video mode found.\n\rBooting in blind modeBooting in blind mode\n\r\n\r[ 0.000000] Linux version 5.10.0-30-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.218-1 (2024-06-01)\r\n[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64 root=UUID=7be27af0-f080-46f6-bdf8-bc495c775f18 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.000000] BIOS-provided physical RAM map:\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bf8ecfff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x00000000bf8ed000-0x00000000bf9ecfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x00000000bf9ed000-0x00000000bfaecfff] type 20\r\n[ 0.000000] BIOS-e820: [mem 0x00000000bfaed000-0x00000000bfb6cfff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x00000000bfb6d000-0x00000000bfb7efff] ACPI data\r\n[ 0.000000] BIOS-e820: [mem 0x00000000bfb7f000-0x00000000bfbfefff] ACPI NVS\r\n[ 0.000000] BIOS-e820: [mem 0x00000000bfbff000-0x00000000bffdffff] usable\r\n[ 0.000000] BIOS-e820: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved\r\n[ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000043fffffff] usable\r\n[ 0.000000] printk: bootconsole [earlyser0] enabled\r\n[ 0.000000] NX (Execute Disable) protection: active\r\n[ 0.000000] efi: EFI v2.70 by EDK II\r\n[ 0.000000] efi: TPMFinalLog=0xbfbf7000 ACPI=0xbfb7e000 ACPI 2.0=0xbfb7e014 SMBIOS=0xbf9e8000 \r\n[ 0.000000] secureboot: Secure boot disabled\r\n[ 0.000000] SMBIOS 2.4 present.\r\n[ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024\r\n[ 0.000000] Hypervisor detected: KVM\r\n[ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\n[ 0.000000] kvm-clock: cpu 0, msr 38ea01001, primary cpu clock\r\n[ 0.000002] kvm-clock: using sched offset of 7463039982 cycles\r\n[ 0.001673] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\n[ 0.005594] tsc: Detected 2199.998 MHz processor\r\n[ 0.006326] last_pfn = 0x440000 max_arch_pfn = 0x400000000\r\n[ 0.007439] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nMemory KASLR using RDRAND RDTSC...\r\n[ 0.009149] last_pfn = 0xbffe0 max_arch_pfn = 0x400000000\r\n[ 0.011172] Using GB pages for direct mapping\r\n[ 0.012535] RAMDISK: [mem 0x364cb000-0x3725cfff]\r\n[ 0.014004] ACPI: Early table checksum verification disabled\r\n[ 0.014907] ACPI: RSDP 0x00000000BFB7E014 000024 (v02 Google)\r\n[ 0.016122] ACPI: XSDT 0x00000000BFB7D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\n[ 0.017772] ACPI: FACP 0x00000000BFB78000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\n[ 0.019701] ACPI: DSDT 0x00000000BFB79000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\n[ 0.021192] ACPI: FACS 0x00000000BFBF2000 000040\r\n[ 0.022289] ACPI: SSDT 0x00000000BFB7C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\n[ 0.023954] ACPI: TPM2 0x00000000BFB7B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\n[ 0.025387] ACPI: SRAT 0x00000000BFB77000 0000E8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\n[ 0.026883] ACPI: APIC 0x00000000BFB76000 000086 (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\n[ 0.028680] ACPI: SSDT 0x00000000BFB75000 000A42 (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\n[ 0.030398] ACPI: WAET 0x00000000BFB74000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\n[ 0.032416] ACPI: Reserving FACP table memory at [mem 0xbfb78000-0xbfb780f3]\r\n[ 0.033817] ACPI: Reserving DSDT table memory at [mem 0xbfb79000-0xbfb7aa63]\r\n[ 0.035919] ACPI: Reserving FACS table memory at [mem 0xbfbf2000-0xbfbf203f]\r\n[ 0.037638] ACPI: Reserving SSDT table memory at [mem 0xbfb7c000-0xbfb7c315]\r\n[ 0.039343] ACPI: Reserving TPM2 table memory at [mem 0xbfb7b000-0xbfb7b033]\r\n[ 0.041316] ACPI: Reserving SRAT table memory at [mem 0xbfb77000-0xbfb770e7]\r\n[ 0.043421] ACPI: Reserving APIC table memory at [mem 0xbfb76000-0xbfb76085]\r\n[ 0.044623] ACPI: Reserving SSDT table memory at [mem 0xbfb75000-0xbfb75a41]\r\n[ 0.045988] ACPI: Reserving WAET table memory at [mem 0xbfb74000-0xbfb74027]\r\n[ 0.047863] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\n[ 0.049035] SRAT: PXM 0 -\u003e APIC 0x01 -\u003e Node 0\r\n[ 0.050217] SRAT: PXM 0 -\u003e APIC 0x02 -\u003e Node 0\r\n[ 0.051248] SRAT: PXM 0 -\u003e APIC 0x03 -\u003e Node 0\r\n[ 0.052158] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\n[ 0.053334] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0xbfffffff]\r\n[ 0.054864] ACPI: SRAT: Node 0 PXM 0 [mem 0x100000000-0x43fffffff]\r\n[ 0.056897] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0xbfffffff] -\u003e [mem 0x00000000-0xbfffffff]\r\n[ 0.059708] NUMA: Node 0 [mem 0x00000000-0xbfffffff] + [mem 0x100000000-0x43fffffff] -\u003e [mem 0x00000000-0x43fffffff]\r\n[ 0.061978] NODE_DATA(0) allocated [mem 0x43ffd6000-0x43fffffff]\r\n[ 0.063860] Zone ranges:\r\n[ 0.064328] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\n[ 0.065345] DMA32 [mem 0x0000000001000000-0x00000000ffffffff]\r\n[ 0.066514] Normal [mem 0x0000000100000000-0x000000043fffffff]\r\n[ 0.067698] Device empty\r\n[ 0.068721] Movable zone start for each node\r\n[ 0.069658] Early memory node ranges\r\n[ 0.070503] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\n[ 0.072076] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\n[ 0.073268] node 0: [mem 0x0000000000100000-0x00000000bf8ecfff]\r\n[ 0.074685] node 0: [mem 0x00000000bfbff000-0x00000000bffdffff]\r\n[ 0.075904] node 0: [mem 0x0000000100000000-0x000000043fffffff]\r\n[ 0.077648] Initmem setup node 0 [mem 0x0000000000001000-0x000000043fffffff]\r\n[ 0.079665] On node 0, zone DMA: 1 pages in unavailable ranges\r\n[ 0.079668] On node 0, zone DMA: 11 pages in unavailable ranges\r\n[ 0.081076] On node 0, zone DMA: 104 pages in unavailable ranges\r\n[ 0.099180] On node 0, zone DMA32: 786 pages in unavailable ranges\r\n[ 0.101908] On node 0, zone Normal: 32 pages in unavailable ranges\r\n[ 0.104845] ACPI: PM-Timer IO Port: 0xb008\r\n[ 0.107779] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\n[ 0.108962] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\n[ 0.110346] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\n[ 0.111604] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\n[ 0.113634] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\n[ 0.115103] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\n[ 0.117025] Using ACPI (MADT) for SMP configuration information\r\n[ 0.118848] smpboot: Allowing 4 CPUs, 0 hotplug CPUs\r\n[ 0.120326] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\n[ 0.122412] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\n[ 0.124460] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\n[ 0.126429] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\n[ 0.128841] PM: hibernation: Registered nosave memory: [mem 0xbf8ed000-0xbf9ecfff]\r\n[ 0.131345] PM: hibernation: Registered nosave memory: [mem 0xbf9ed000-0xbfaecfff]\r\n[ 0.133531] PM: hibernation: Registered nosave memory: [mem 0xbfaed000-0xbfb6cfff]\r\n[ 0.135186] PM: hibernation: Registered nosave memory: [mem 0xbfb6d000-0xbfb7efff]\r\n[ 0.136985] PM: hibernation: Registered nosave memory: [mem 0xbfb7f000-0xbfbfefff]\r\n[ 0.138373] PM: hibernation: Registered nosave memory: [mem 0xbffe0000-0xbfffffff]\r\n[ 0.139896] PM: hibernation: Registered nosave memory: [mem 0xc0000000-0xffffffff]\r\n[ 0.141111] [mem 0xc0000000-0xffffffff] available for PCI devices\r\n[ 0.142477] Booting paravirtualized kernel on KVM\r\n[ 0.144174] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\n[ 0.151253] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:4 nr_cpu_ids:4 nr_node_ids:1\r\n[ 0.153941] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u524288\r\n[ 0.155778] kvm-guest: stealtime: cpu 0, msr 42fc35080\r\n[ 0.156851] kvm-guest: PV spinlocks enabled\r\n[ 0.157938] PV qspinlock hash table entries: 256 (order: 0, 4096 bytes, linear)\r\n[ 0.159733] Built 1 zonelists, mobility grouping on. Total pages: 4125749\r\n[ 0.161944] Policy zone: Normal\r\n[ 0.162538] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64 root=UUID=7be27af0-f080-46f6-bdf8-bc495c775f18 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\n[ 0.167996] DMAR: IOMMU disabled\r\n[ 0.173341] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes, linear)\r\n[ 0.178350] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)\r\n[ 0.181137] mem auto-init: stack:off, heap alloc:on, heap free:off\r\n[ 0.210850] Memory: 3138208K/16773480K available (12296K kernel code, 2552K rwdata, 6972K rodata, 2472K init, 3712K bss, 457808K reserved, 0K cma-reserved)\r\n[ 0.214560] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1\r\n[ 0.215973] Kernel/User page tables isolation: enabled\r\nPoking KASLR using RDRAND RDTSC...\r\n[ 0.218668] ftrace: allocating 33961 entries in 133 pages\r\n[ 0.238133] ftrace: allocated 133 pages with 3 groups\r\n[ 0.240292] rcu: Hierarchical RCU implementation.\r\n[ 0.241623] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=4.\r\n[ 0.244277] \tRude variant of Tasks RCU enabled.\r\n[ 0.245135] \tTracing variant of Tasks RCU enabled.\r\n[ 0.246428] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\n[ 0.249232] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4\r\n[ 0.255155] NR_IRQS: 524544, nr_irqs: 456, preallocated irqs: 16\r\n[ 0.257599] random: crng init done\r\n[ 0.259117] Console: colour dummy device 80x25\r\n[ 0.260319] printk: console [tty0] enabled\r\n[ 0.261841] printk: console [ttyS0] enabled\r\n[ 0.261841] printk: console [ttyS0] enabled\r\n[ 0.264059] printk: bootconsole [earlyser0] disabled\r\n[ 0.264059] printk: bootconsole [earlyser0] disabled\r\n[ 0.266540] ACPI: Core revision 20200925\r\n[ 0.268016] APIC: Switch to symmetric I/O mode setup\r\n[ 0.270442] x2apic enabled\r\n[ 0.275132] Switched APIC routing to physical x2apic.\r\n[ 0.282672] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\n[ 0.285029] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb63109b96, max_idle_ns: 440795265316 ns\r\n[ 0.287218] Calibrating delay loop (skipped) preset value.. 4399.99 BogoMIPS (lpj=8799992)\r\n[ 0.291296] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\n[ 0.293152] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\n[ 0.295224] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\n[ 0.297075] Spectre V2 : Mitigation: IBRS\r\n[ 0.297925] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\n[ 0.299220] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\n[ 0.303219] RETBleed: Mitigation: IBRS\r\n[ 0.304436] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\n[ 0.307218] Spectre V2 : User space: Mitigation: STIBP via seccomp and prctl\r\n[ 0.309977] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\n[ 0.311230] MDS: Mitigation: Clear CPU buffers\r\n[ 0.312903] TAA: Mitigation: Clear CPU buffers\r\n[ 0.315216] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\n[ 0.317555] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\n[ 0.319220] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\n[ 0.321368] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\n[ 0.323221] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\n[ 0.325043] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\n[ 0.347243] Freeing SMP alternatives memory: 32K\r\n[ 0.350799] pid_max: default: 32768 minimum: 301\r\n[ 0.359126] LSM: Security Framework initializing\r\n[ 0.359227] Yama: disabled by default; enable with sysctl kernel.yama.*\r\n[ 0.361438] AppArmor: AppArmor initialized\r\n[ 0.363217] TOMOYO Linux initialized\r\n[ 0.364810] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)\r\n[ 0.367262] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)\r\n[ 0.479005] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\n[ 0.479410] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\n[ 0.482592] rcu: Hierarchical SRCU implementation.\r\n[ 0.483596] NMI watchdog: Perf NMI watchdog permanently disabled\r\n[ 0.485563] smp: Bringing up secondary CPUs ...\r\n[ 0.487355] x86: Booting SMP configuration:\r\n[ 0.488118] .... node #0, CPUs: #1\r\n[ 0.021623] kvm-clock: cpu 1, msr 38ea01041, secondary cpu clock\r\n[ 0.489059] kvm-guest: stealtime: cpu 1, msr 42fcb5080\r\n[ 0.491369] #2\r\n[ 0.021623] kvm-clock: cpu 2, msr 38ea01081, secondary cpu clock\r\n[ 0.492175] kvm-guest: stealtime: cpu 2, msr 42fd35080\r\n[ 0.495261] MDS CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html for more details.\r\n[ 0.499221] TAA CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html for more details.\r\n[ 0.503216] MMIO Stale Data CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/processor_mmio_stale_data.html for more details.\r\n[ 0.507416] #3\r\n[ 0.021623] kvm-clock: cpu 3, msr 38ea010c1, secondary cpu clock\r\n[ 0.507978] kvm-guest: stealtime: cpu 3, msr 42fdb5080\r\n[ 0.509000] smp: Brought up 1 node, 4 CPUs\r\n[ 0.509000] smpboot: Max logical packages: 1\r\n[ 0.511217] smpboot: Total of 4 processors activated (17599.98 BogoMIPS)\r\n[ 0.553113] node 0 deferred pages initialised in 40ms\r\n[ 0.553962] devtmpfs: initialized\r\n[ 0.553962] x86/mm: Memory block size: 128MB\r\n[ 0.555266] PM: Registering ACPI NVS region [mem 0xbfb7f000-0xbfbfefff] (524288 bytes)\r\n[ 0.556834] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\n[ 0.558720] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)\r\n[ 0.559626] NET: Registered protocol family 16\r\n[ 0.561418] DMA: preallocated 2048 KiB GFP_KERNEL pool for atomic allocations\r\n[ 0.563847] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\n[ 0.566314] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\n[ 0.567234] audit: initializing netlink subsys (disabled)\r\n[ 0.571259] audit: type=2000 audit(1719290134.916:1): state=initialized audit_enabled=0 res=1\r\n[ 0.571393] thermal_sys: Registered thermal governor 'fair_share'\r\n[ 0.575217] thermal_sys: Registered thermal governor 'bang_bang'\r\n[ 0.576259] thermal_sys: Registered thermal governor 'step_wise'\r\n[ 0.577388] thermal_sys: Registered thermal governor 'user_space'\r\n[ 0.579218] thermal_sys: Registered thermal governor 'power_allocator'\r\n[ 0.580672] cpuidle: using governor ladder\r\n[ 0.583244] cpuidle: using governor menu\r\n[ 0.584036] ACPI: bus type PCI registered\r\n[ 0.584866] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\n[ 0.584866] PCI: Using configuration type 1 for base access\r\n[ 0.585543] Kprobes globally optimized\r\n[ 0.587265] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\n[ 0.588335] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\n[ 0.727390] ACPI: Added _OSI(Module Device)\r\n[ 0.728198] ACPI: Added _OSI(Processor Device)\r\n[ 0.729083] ACPI: Added _OSI(3.0 _SCP Extensions)\r\n[ 0.729083] ACPI: Added _OSI(Processor Aggregator Device)\r\n[ 0.729083] ACPI: Added _OSI(Linux-Dell-Video)\r\n[ 0.730170] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\n[ 0.731219] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\n[ 0.733975] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\n[ 0.736800] ACPI: Interpreter enabled\r\n[ 0.737474] ACPI: (supports S0 S3 S4 S5)\r\n[ 0.739217] ACPI: Using IOAPIC for interrupt routing\r\n[ 0.740043] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\n[ 0.742302] ACPI: Enabled 16 GPEs in block 00 to 0F\r\n[ 0.746116] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\n[ 0.751226] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\n[ 0.753310] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\n[ 0.756127] PCI host bridge to bus 0000:00\r\n[ 0.757133] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\n[ 0.757133] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\n[ 0.757133] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\n[ 0.759221] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfebfefff window]\r\n[ 0.760659] pci_bus 0000:00: root bus resource [bus 00-ff]\r\n[ 0.761732] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\n[ 0.767780] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\n[ 0.796962] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\n[ 0.823289] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\n[ 0.825002] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\n[ 0.836887] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\n[ 0.845173] pci 0000:00:03.0: reg 0x14: [mem 0xc0002000-0xc000207f]\r\n[ 0.867332] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\n[ 0.878425] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\n[ 0.886600] pci 0000:00:04.0: reg 0x14: [mem 0xc0000000-0xc00000ff]\r\n[ 0.911609] pci 0000:00:05.0: [1af4:1002] type 00 class 0x00ff00\r\n[ 0.923222] pci 0000:00:05.0: reg 0x10: [io 0xc0a0-0xc0bf]\r\n[ 0.931222] pci 0000:00:05.0: reg 0x14: [mem 0xc0001000-0xc000107f]\r\n[ 0.953332] pci 0000:00:06.0: [1af4:1005] type 00 class 0x00ff00\r\n[ 0.965013] pci 0000:00:06.0: reg 0x10: [io 0xc080-0xc09f]\r\n[ 0.973033] pci 0000:00:06.0: reg 0x14: [mem 0xc0003000-0xc000303f]\r\n[ 1.000262] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\n[ 1.003344] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\n[ 1.007315] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\n[ 1.010788] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\n[ 1.013251] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\n[ 1.015753] iommu: Default domain type: Translated \r\n[ 1.019241] vgaarb: loaded\r\n[ 1.019732] Registered efivars operations\r\n[ 1.020631] NetLabel: Initializing\r\n[ 1.021218] NetLabel: domain hash size = 128\r\n[ 1.021218] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\n[ 1.021218] NetLabel: unlabeled traffic allowed by default\r\n[ 1.021937] PCI: Using ACPI for IRQ routing\r\n[ 1.023505] clocksource: Switched to clocksource kvm-clock\r\n[ 1.039443] VFS: Disk quotas dquot_6.6.0\r\n[ 1.040585] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\n[ 1.042070] AppArmor: AppArmor Filesystem Enabled\r\n[ 1.043151] pnp: PnP ACPI init\r\n[ 1.044281] pnp: PnP ACPI: found 7 devices\r\n[ 1.052668] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\n[ 1.054578] NET: Registered protocol family 2\r\n[ 1.056249] IP idents hash table entries: 262144 (order: 9, 2097152 bytes, linear)\r\n[ 1.060544] tcp_listen_portaddr_hash hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\n[ 1.062405] TCP established hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\n[ 1.064330] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes, linear)\r\n[ 1.065530] TCP: Hash tables configured (established 131072 bind 65536)\r\n[ 1.066674] UDP hash table entries: 8192 (order: 6, 262144 bytes, linear)\r\n[ 1.068012] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes, linear)\r\n[ 1.069158] NET: Registered protocol family 1\r\n[ 1.069831] NET: Registered protocol family 44\r\n[ 1.070471] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\n[ 1.071628] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\n[ 1.073058] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\n[ 1.074807] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfebfefff window]\r\n[ 1.075887] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\n[ 1.076878] PCI: CLS 0 bytes, default 64\r\n[ 1.077521] Trying to unpack rootfs image as initramfs...\r\n[ 1.322546] Freeing initrd memory: 13896K\r\n[ 1.323520] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\r\n[ 1.324842] software IO TLB: mapped [mem 0x00000000b7ff7000-0x00000000bbff7000] (64MB)\r\n[ 1.326241] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb63109b96, max_idle_ns: 440795265316 ns\r\n[ 1.328340] clocksource: Switched to clocksource tsc\r\n[ 1.329861] Initialise system trusted keyrings\r\n[ 1.330879] Key type blacklist registered\r\n[ 1.332056] workingset: timestamp_bits=36 max_order=22 bucket_order=0\r\n[ 1.334878] zbud: loaded\r\n[ 1.336588] Key type asymmetric registered\r\n[ 1.337359] Asymmetric key parser 'x509' registered\r\n[ 1.338488] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\n[ 1.340169] io scheduler mq-deadline registered\r\n[ 1.342219] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\n[ 1.343863] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\n[ 1.345864] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\n[ 1.348328] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\n[ 1.351190] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\n[ 1.354518] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\n[ 1.356615] i8042: Warning: Keylock active\r\n[ 1.359618] serio: i8042 KBD port at 0x60,0x64 irq 1\r\n[ 1.361288] serio: i8042 AUX port at 0x60,0x64 irq 12\r\n[ 1.362792] rtc_cmos 00:00: RTC can wake from S4\r\n[ 1.365130] rtc_cmos 00:00: registered as rtc0\r\n[ 1.366631] rtc_cmos 00:00: setting system clock to 2024-06-25T04:35:35 UTC (1719290135)\r\n[ 1.368754] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\n[ 1.370603] intel_pstate: CPU model not supported\r\n[ 1.371920] NET: Registered protocol family 10\r\n[ 1.382572] Segment Routing with IPv6\r\n[ 1.383523] mip6: Mobile IPv6\r\n[ 1.384464] NET: Registered protocol family 17\r\n[ 1.385881] IPI shorthand broadcast: enabled\r\n[ 1.387291] sched_clock: Marking stable (1368142121, 17623184)-\u003e(1394057430, -8292125)\r\n[ 1.390023] registered taskstats version 1\r\n[ 1.391047] Loading compiled-in X.509 certificates\r\n[ 1.427394] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\n[ 1.430224] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\n[ 1.432915] Key type .fscrypt registered\r\n[ 1.434240] Key type fscrypt-provisioning registered\r\n[ 1.436017] AppArmor: AppArmor sha1 policy hashing enabled\r\n[ 1.437465] clk: Disabling unused clocks\r\n[ 1.440843] Freeing unused decrypted memory: 2036K\r\n[ 1.443201] Freeing unused kernel image (initmem) memory: 2472K\r\n[ 1.461743] Write protecting the kernel read-only data: 22528k\r\n[ 1.464647] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\n[ 1.466757] Freeing unused kernel image (rodata/data gap) memory: 1220K\r\n[ 1.470703] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 1.472647] x86/mm: Checking user space page tables\r\n[ 1.474286] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\n[ 1.475573] Run /init as init process\r\nLoading, please wait...\r\nStarting version 247.3-7+deb11u4\r\n[ 1.549835] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\n[ 1.552227] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\n[ 1.566062] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\n[ 1.572626] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\n[ 1.575326] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\n[ 1.584901] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\n[ 1.586664] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\n[ 1.595486] PCI Interrupt Link [LNKB] enabled at IRQ 11\r\n[ 1.596786] virtio-pci 0000:00:06.0: virtio_pci: leaving for legacy driver\r\n[ 1.716914] SCSI subsystem initialized\r\n[ 1.719083] virtio_net virtio1 ens4: renamed from eth0\r\n[ 1.823979] scsi host0: Virtio SCSI HBA\r\n[ 1.842774] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\n[ 1.844639] scsi 0:0:2:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\n[ 1.889836] sd 0:0:2:0: [sda] 209715200 512-byte logical blocks: (107 GB/100 GiB)\r\n[ 1.891367] sd 0:0:2:0: [sda] 4096-byte physical blocks\r\n[ 1.892344] sd 0:0:2:0: [sda] Write Protect is off\r\n[ 1.892372] sd 0:0:1:0: [sdb] 314572800 512-byte logical blocks: (161 GB/150 GiB)\r\n[ 1.895194] sd 0:0:1:0: [sdb] 4096-byte physical blocks\r\n[ 1.895287] sd 0:0:2:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\n[ 1.897592] sd 0:0:1:0: [sdb] Write Protect is off\r\n[ 1.898753] sd 0:0:1:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\n[ 1.924184] sdb: sdb1 sdb14 sdb15\r\n[ 1.942584] sd 0:0:2:0: [sda] Attached SCSI disk\r\n[ 1.942585] sd 0:0:1:0: [sdb] Attached SCSI disk\r\nBegin: Loading essential drivers ... done.\r\nBegin: Running /scripts/init-premount ... done.\r\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\r\nBegin: Runnin[ 2.037704] gce-disk-expand: Resizing partition on \r\ng /scripts/local-premount ... [ 2.071148] gce-disk-expand: Disk /dev/sdb1 doesn't need resizing.\r\n[ 2.071509] sdb: sdb1 sdb14 sdb15\r\ndone.\r\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\r\n[/sbin/fsck.ext4 (1) -- /dev/sdb1] fsck.ext4 -a -C0 /dev/sdb1 \r\n/dev/sdb1: clean, 649872/9822208 files, 10428648/39288576 blocks\r\ndone.\r\n[ 2.179511] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)\r\ndone.\r\nBegin: Running /scripts/local-bottom ... done.\r\nBegin: Running /scripts/init-bottom ... done.\r\n[ 2.215492] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\n[ 2.446322] systemd[1]: Inserted module 'autofs4'\r\n[ 2.583342] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\r\n[ 2.588751] systemd[1]: Detected virtualization kvm.\r\n[ 2.589786] systemd[1]: Detected architecture x86-64.\r\n\r\nWelcome to \u001b[1mDebian GNU/Linux 11 (bullseye)\u001b[0m!\r\n\r\n[ 2.612271] systemd[1]: Set hostname to \u003cdebian\u003e.\r\n[ 2.885391] systemd[1]: Queued start job for default target Graphical Interface.\r\n[ 2.888137] systemd[1]: Created slice system-getty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-getty.slice\u001b[0m.\r\n[ 2.902354] systemd[1]: Created slice system-modprobe.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-modprobe.slice\u001b[0m.\r\n[ 2.914377] systemd[1]: Created slice system-serial\\x2dgetty.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-serial\\x2dgetty.slice\u001b[0m.\r\n[ 2.926280] systemd[1]: Created slice system-systemd\\x2dgrowfs.slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39msystem-systemd\\x2dgrowfs.slice\u001b[0m.\r\n[ 2.938252] systemd[1]: Created slice User and Session Slice.\r\n[\u001b[0;32m OK \u001b[0m] Created slice \u001b[0;1;39mUser and Session Slice\u001b[0m.\r\n[ 2.953933] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDispatch Password …ts to Console Directory Watch\u001b[0m.\r\n[ 2.969967] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mForward Password R…uests to Wall Directory Watch\u001b[0m.\r\n[ 2.986086] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\r\n[\u001b[0;32m OK \u001b[0m] Set up automount \u001b[0;1;39mArbitrary…s File System Automount Point\u001b[0m.\r\n[ 3.001858] systemd[1]: Reached target Local Encrypted Volumes.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal Encrypted Volumes\u001b[0m.\r\n[ 3.013844] systemd[1]: Reached target Paths.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mPaths\u001b[0m.\r\n[ 3.025819] systemd[1]: Reached target Remote File Systems.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mRemote File Systems\u001b[0m.\r\n[ 3.037819] systemd[1]: Reached target Slices.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSlices\u001b[0m.\r\n[ 3.049820] systemd[1]: Reached target Swap.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSwap\u001b[0m.\r\n[ 3.061803] systemd[1]: Reached target System Time Set.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Set\u001b[0m.\r\n[ 3.074037] systemd[1]: Listening on Syslog Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mSyslog Socket\u001b[0m.\r\n[ 3.086173] systemd[1]: Listening on fsck to fsckd communication Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mfsck to fsckd communication Socket\u001b[0m.\r\n[ 3.098022] systemd[1]: Listening on initctl Compatibility Named Pipe.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39minitctl Compatibility Named Pipe\u001b[0m.\r\n[ 3.110090] systemd[1]: Listening on Journal Audit Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Audit Socket\u001b[0m.\r\n[ 3.121990] systemd[1]: Listening on Journal Socket (/dev/log).\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket (/dev/log)\u001b[0m.\r\n[ 3.134066] systemd[1]: Listening on Journal Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mJournal Socket\u001b[0m.\r\n[ 3.146912] systemd[1]: Listening on udev Control Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Control Socket\u001b[0m.\r\n[ 3.157985] systemd[1]: Listening on udev Kernel Socket.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mudev Kernel Socket\u001b[0m.\r\n[ 3.171065] systemd[1]: Mounting Huge Pages File System...\r\n Mounting \u001b[0;1;39mHuge Pages File System\u001b[0m...\r\n[ 3.182978] systemd[1]: Mounting POSIX Message Queue File System...\r\n Mounting \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m...\r\n[ 3.187220] systemd[1]: Mounting Kernel Debug File System...\r\n Mounting \u001b[0;1;39mKernel Debug File System\u001b[0m...\r\n[ 3.199219] systemd[1]: Mounting Kernel Trace File System...\r\n Mounting \u001b[0;1;39mKernel Trace File System\u001b[0m...\r\n[ 3.215203] systemd[1]: Starting Create list of static device nodes for the current kernel...\r\n Starting \u001b[0;1;39mCreate list of st…odes for the current kernel\u001b[0m...\r\n[ 3.230955] systemd[1]: Starting Load Kernel Module configfs...\r\n Starting \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m...\r\n[ 3.242950] systemd[1]: Starting Load Kernel Module drm...\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\n[ 3.258976] systemd[1]: Starting Load Kernel Module fuse...\r\n Starting \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m...\r\n[ 3.275539] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\r\n[ 3.278316] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\r\n[ 3.278371] fuse: init (API version 7.32)\r\n[ 3.283006] systemd[1]: Starting Journal Service...\r\n Starting \u001b[0;1;39mJournal Service\u001b[0m...\r\n[ 3.301167] systemd[1]: Starting Load Kernel Modules...\r\n Starting \u001b[0;1;39mLoad Kernel Modules\u001b[0m...\r\n[ 3.315132] systemd[1]: Starting Remount Root and Kernel File Systems...\r\n Starting \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m...\r\n[ 3.331170] systemd[1]: Starting Coldplug All udev Devices...\r\n Startin[ 3.333506] EXT4-fs (sdb1): re-mounted. Opts: discard,errors=remount-ro\r\ng \u001b[0;1;39mColdplug All udev Devices\u001b[0m...\r\n[ 3.348073] systemd[1]: Started Journal Service.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mJournal Service\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mHuge Pages File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mPOSIX Message Queue File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Debug File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Trace File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate list of st… nodes for the current kernel\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module configfs\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module fuse\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Modules\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemount Root and Kernel File Systems\u001b[0m.\r\n Mounting \u001b[0;1;39mFUSE Control File System\u001b[0m...\r\n Mounting \u001b[0;1;39mKernel Configuration File System\u001b[0m...\r\n Starting \u001b[0;1;39mGrow File System on /\u001b[0m...\r\n[ 3.522203] EXT4-fs (sdb1): resizing filesystem from 39288576 to 39288576 blocks\r\n Starting \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m...\r\n[ 3.536646] systemd-journald[221]: Received client request to flush runtime journal.\r\n Starting \u001b[0;1;39mLoad/Save Random Seed\u001b[0m...\r\n Starting \u001b[0;1;39mApply Kernel Variables\u001b[0m...\r\n Starting \u001b[0;1;39mCreate System Users\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mColdplug All udev Devices\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mFUSE Control File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39mKernel Configuration File System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGrow File System on /\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad/Save Random Seed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mApply Kernel Variables\u001b[0m.\r\n Starting \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mHelper to synchronize boot up for ifupdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mFlush Journal to Persistent Storage\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate System Users\u001b[0m.\r\n Starting \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Static Device Nodes in /dev\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems (Pre)\u001b[0m.\r\n Starting \u001b[0;1;39mRule-based Manage…for Device Events and Files\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRule-based Manager for Device Events and Files\u001b[0m.\r\n[ 3.937753] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\n[ 3.952887] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\n[ 3.968354] ACPI: Power Button [PWRF]\r\n[ 3.982980] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\n[ 4.018532] pstore: Using crash dump compression: deflate\r\n[ 4.056674] ACPI: Sleep Button [SLPF]\r\n[ 4.059108] pstore: Registered efi as persistent store backend\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39m/dev/ttyS0\u001b[0m.\r\n[ 4.102563] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\n[ 4.110503] sd 0:0:2:0: Attached scsi generic sg1 type 0\r\n[ 4.117305] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\n[ 4.154487] cryptd: max_cpu_qlen set to 1000\r\n[ 4.171394] AVX2 version of gcm_enc/dec engaged.\r\n[ 4.173238] AES CTR mode by8 optimization enabled\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mPersistentDisk 15\u001b[0m.\r\n Mounting \u001b[0;1;39m/boot/efi\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Mounted \u001b[0;1;39m/boot/efi\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Found device \u001b[0;1;39mVirtio network device\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mLocal File Systems\u001b[0m.\r\n Starting \u001b[0;1;39mLoad AppArmor profiles\u001b[0m...\r\n Starting \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mCreate Volatile Files and Directories\u001b[0m.\r\n Starting \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\u001b[0m.\r\n[ 4.341372] audit: type=1400 audit(1719290138.467:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=350 comm=\"apparmor_parser\"\r\n[ 4.346604] audit: type=1400 audit(1719290138.467:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=350 comm=\"apparmor_parser\"\r\n[ 4.351622] audit: type=1400 audit(1719290138.467:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=351 comm=\"apparmor_parser\"\r\n[ 4.355754] audit: type=1400 audit(1719290138.467:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=351 comm=\"apparmor_parser\"\r\n[ 4.360728] audit: type=1400 audit(1719290138.467:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=351 comm=\"apparmor_parser\"\r\n[ 4.360734] audit: type=1400 audit(1719290138.467:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=352 comm=\"apparmor_parser\"\r\n[ 4.360738] audit: type=1400 audit(1719290138.475:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=353 comm=\"apparmor_parser\"\r\n[ 4.360744] audit: type=1400 audit(1719290138.483:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=349 comm=\"apparmor_parser\"\r\n[\u001b[0;32m OK \u001b[[ 4.377409] audit: type=1400 audit(1719290138.483:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=354 comm=\"apparmor_parser\"\r\n0m] Finished \u001b[0;1;39mLoad AppArmor profiles\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Initialization\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGCE Workload Certificate refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mNSS cache refresh timer\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRun google-wi-idle-shutdown service every minute\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily Cleanup of Temporary Directories\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mD-Bus System Message Bus Socket\u001b[0m.\r\n Starting \u001b[0;1;39mDocker Socket for the API\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mUUID daemon activation socket\u001b[0m.\r\n Starting \u001b[0;1;39mResize root filesystem if needed\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mifup for ens4\u001b[0m.\r\n Starting \u001b[0;1;39mRaise network interfaces\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Listening on \u001b[0;1;39mDocker Socket for the API\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mResize root filesystem if needed\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSockets\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mBasic System\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mD-Bus System Message Bus\u001b[0m.\r\n Starting \u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mAction on GCE instance property changes\u001b[0m.\r\n Starting \u001b[0;1;39mGoogle C2D startup config\u001b[0m...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\n Starting \u001b[0;1;39mPolls for whether…and reports Heartbeat event\u001b[0m...\r\n Starting \u001b[0;1;39mJupyter Notebook Service\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mVertex Workbench Health Agent\u001b[0m.\r\n Starting \u001b[0;1;39mSystem Logging Service\u001b[0m...\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\u001b[0m.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted Huge Pages File System.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] Linux version 5.10.0-30-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.218-1 (2024-06-01)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64 root=UUID=7be27af0-f080-46f6-bdf8-bc495c775f18 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-provided physical RAM map:\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted POSIX Message Queue File System.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted Kernel Debug File System.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bf8ecfff] usable\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x00000000bf8ed000-0x00000000bf9ecfff] reserved\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x00000000bf9ed000-0x00000000bfaecfff] type 20\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x00000000bfaed000-0x00000000bfb6cfff] reserved\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted Kernel Trace File System.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x00000000bfb6d000-0x00000000bfb7efff] ACPI data\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x00000000bfb7f000-0x00000000bfbfefff] ACPI NVS\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x00000000bfbff000-0x00000000bffdffff] usable\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Create list of static device nodes for the current kernel.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000043fffffff] usable\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] printk: bootconsole [earlyser0] enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] NX (Execute Disable) protection: active\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] efi: EFI v2.70 by EDK II\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: modprobe@configfs.service: Succeeded.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] efi: TPMFinalLog=0xbfbf7000 ACPI=0xbfb7e000 ACPI 2.0=0xbfb7e014 SMBIOS=0xbf9e8000 \r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] secureboot: Secure boot disabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] SMBIOS 2.4 present.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] Hypervisor detected: KVM\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load Kernel Module configfs.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000000] kvm-clock: cpu 0, msr 38ea01001, primary cpu clock\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.000002] kvm-clock: using sched offset of 7463039982 cycles\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.001673] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.005594] tsc: Detected 2199.998 MHz processor\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.006314] e820: update [mem 0x00000000-0x00000fff] usable ==\u003e reserved\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: modprobe@drm.service: Succeeded.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.006318] e820: remove [mem 0x000a0000-0x000fffff] usable\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.006326] last_pfn = 0x440000 max_arch_pfn = 0x400000000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007417] MTRR default type: write-back\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load Kernel Module drm.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007418] MTRR fixed ranges enabled:\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007420] 00000-9FFFF write-back\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007421] A0000-FFFFF uncachable\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007422] MTRR variable ranges enabled:\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007424] 0 base 0000C0000000 mask 3FFFC0000000 uncachable\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: modprobe@fuse.service: Succeeded.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007425] 1 disabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007426] 2 disabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007427] 3 disabled\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load Kernel Module fuse.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007427] 4 disabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007428] 5 disabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007428] 6 disabled\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load Kernel Modules.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007429] 7 disabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.007439] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT \r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.009149] last_pfn = 0xbffe0 max_arch_pfn = 0x400000000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.011172] Using GB pages for direct mapping\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.012535] RAMDISK: [mem 0x364cb000-0x3725cfff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.014004] ACPI: Early table checksum verification disabled\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Remount Root and Kernel File Systems.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.014907] ACPI: RSDP 0x00000000BFB7E014 000024 (v02 Google)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.016122] ACPI: XSDT 0x00000000BFB7D0E8 00005C (v01 Google GOOGFACP 00000001 01000013)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.017772] ACPI: FACP 0x00000000BFB78000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounting FUSE Control File System...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.019701] ACPI: DSDT 0x00000000BFB79000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.021192] ACPI: FACS 0x00000000BFBF2000 000040\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.022289] ACPI: SSDT 0x00000000BFB7C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.023954] ACPI: TPM2 0x00000000BFB7B000 000034 (v04 GOOGLE 00000001 GOOG 00000001)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.025387] ACPI: SRAT 0x00000000BFB77000 0000E8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounting Kernel Configuration File System...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.026883] ACPI: APIC 0x0000[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSystem Logging Service\u001b[0m.\r\n0000BFB76000 000086 (v05 Google GOOGAPIC 00000001 GOOG 00000001)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.028680] ACPI: SSDT 0x00000000BFB75000 000A42 (v01 Google GOOGSSDT 00000001 GOOG 00000001)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.030398] ACPI: WAET 0x00000000BFB74000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.032416] ACPI: Reserving FACP table memory at [mem 0xbfb78000-0xbfb780f3]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.033817] ACPI: Reserving DSDT table memory at [mem 0xbfb79000-0xbfb7aa63]\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Grow File System on /...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.035919] ACPI: Reserving FACS table memory at [mem 0xbfbf2000-0xbfbf203f]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.037638] ACPI: Reserving SSDT table memory at [mem 0xbfb7c000-0xbfb7c315]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.039343] ACPI: Reserving TPM2 table memory at [mem 0xbfb7b000-0xbfb7b033]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.041316] ACPI: Reserving SRAT table memory at [mem 0xbfb77000-0xbfb770e7]\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.043421] ACPI: Reserving APIC table memory at [mem 0xbfb76000-0xbfb76085]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.044623] ACPI: Reserving SSDT table memory at [mem 0xbfb75000-0xbfb75a41]\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Flush Journal to Persistent Storage...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.045988] ACPI: Reserving WAET table memory at [mem 0xbfb74000-0xbfb74027]\r\nJun 25 04:35:38 notebooks2instance-ok systemd-growfs[229]: Successfully resized \"/\" to 149.8G bytes (512 bytes lost due to blocksize).\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.047831] ACPI: Local APIC address 0xfee00000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.047863] SRAT: PXM 0 -\u003e APIC 0x00 -\u003e Node 0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.049035] SRAT: PXM 0 -\u003e APIC 0x01 -\u003e Node 0\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.050217] SRAT: PXM 0 -\u003e APIC 0x02 -\u003e Node 0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.051248] SRAT: PXM 0 -\u003e APIC 0x03 -\u003e Node 0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.052158] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.053334] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0xbfffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.054864] ACPI: SRAT: Node 0 PXM 0 [mem 0x100000000-0x43fffffff]\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Load/Save Random Seed...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.056897] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0xbfffffff] -\u003e [mem 0x00000000-0xbfffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.059708] NUMA: Node 0 [mem 0x00000000-0xbfffffff] + [mem 0x100000000-0x43fffffff] -\u003e [mem 0x00000000-0x43fffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.061978] NODE_DATA(0) allocated [mem 0x43ffd6000-0x43fffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.063860] Zone ranges:\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Apply Kernel Variables...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.064328] DMA [mem 0x0000000000001000-0x0000000000ffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.065345] DMA32 [mem 0x0000000001000000-0x00000000ffffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.066514] Normal [mem 0x0000000100000000-0x000000043fffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.067698] Device empty\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.068721] Movable zone start for each node\r\nJun 25 04:35:3[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle C2D startup config\u001b[0m.\r\n8 notebooks2instance-ok kernel: [ 0.069658] Early memory node ranges\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Create System Users...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.070503] node 0: [mem 0x0000000000001000-0x0000000000054fff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.072076] node 0: [mem 0x0000000000060000-0x0000000000097fff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.073268] node 0: [mem 0x0000000000100000-0x00000000bf8ecfff]\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Coldplug All udev Devices.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.074685] node 0: [mem 0x00000000bfbff000-0x00000000bffdffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.075904] node 0: [mem 0x0000000100000000-0x000000043fffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.077648] Initmem setup node 0 [mem 0x0000000000001000-0x000000043fffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079194] On node 0 totalpages: 4193370\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted FUSE Control File System.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079196] DMA zone: 64 pages used for memmap\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079197] DMA zone: 2097 pages reserved\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079198] DMA zone: 3980 pages, LIFO batch:0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079199] DMA32 zone: 12212 pages used for memmap\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079200] DMA32 zone: 781518 pages, LIFO batch:63\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079201] Normal zone: 53248 pages used for memmap\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted Kernel Configuration File System.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079202] Normal zone: 3407872 pages, LIFO batch:63\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079665] On node 0, zone DMA: 1 pages in unavailable ranges\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.079668] On node 0, zone DMA: 11 pages in unavailable ranges\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.081076] On node 0, zone DMA: 104 pages in unavailable ranges\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Grow File System on /.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.099180] On node 0, zone DMA32: 786 pages in unavailable ranges\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.101908] On node 0, zone Normal: 32 pages in unavailable ranges\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.104845] ACPI: PM-Timer IO Port: 0xb008\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load/Save Random Seed.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.107766] ACPI: Local APIC address 0xfee00000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.107779] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.108962] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.110346] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Apply Kernel Variables.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in First Boot Complete being skipped.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Helper to synchronize boot up for ifupdown...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Helper to synchronize boot up for ifupdown.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Flush Journal to Persistent Storage.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Create System Users.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Create Static Device Nodes in /dev...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Create Static Device Nodes in /dev.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target Local File Systems (Pre).\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Rule-based Manager for Device Events and Files...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Rule-based Manager for Device Events and Files.\r\nJun 25 04:35:38 notebooks2instance-ok systemd-udevd[258]: Using default interface naming scheme 'v247'.\r\nJun 25 04:35:38 notebooks2instance-ok systemd-udevd[258]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Found device /dev/ttyS0.\r\nJun 25 04:35:38 notebooks2instance-ok systemd-udevd[246]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.111604] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.113634] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Found device PersistentDisk 15.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.115103] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.117018] ACPI: IRQ5 used by override.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.117020] ACPI: IRQ9 used by override.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.117020] ACPI: IRQ10 used by override.\r\nJun 25 04:35:38 notebooks2instance-ok cloud-ifupdown-helper: Generated configuration for ens4\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.117021] ACPI: IRQ11 used by override.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.117025] Using ACPI (MADT) for SMP configuration information\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.118848] smpboot: Allowing 4 CPUs, 0 hotplug CPUs\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.120326] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.122412] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.124460] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.126429] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.128841] PM: hibernation: Registered nosave memory: [mem 0xbf8ed000-0xbf9ecfff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.131345] PM: hibernation: Registered nosave memory: [mem 0xbf9ed000-0xbfaecfff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.133531] PM: hibernation: Registered nosave memory: [mem 0xbfaed000-0xbfb6cfff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.135186] PM: hibernation: Registered nosave memory: [mem 0xbfb6d000-0xbfb7efff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.136985] PM: hibernation: Registered nosave memory: [mem 0xbfb7f000-0xbfbfefff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.138373] PM: hibernation: Registered nosave memory: [mem 0xbffe0000-0xbfffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.139896] PM: hibernation: Registered nosave memory: [mem 0xc0000000-0xffffffff]\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounting /boot/efi...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.141111] [mem 0xc0000000-0xffffffff] available for PCI devices\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.142477] Booting paravirtualized kernel on KVM\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.144174] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.151253] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:4 nr_cpu_ids:4 nr_node_ids:1\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted /boot/efi.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.153941] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u524288\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.155741] pcpu-alloc: s221184 r8192 d28672 u524288 [\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\nalloc=1*2097152\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Found device Virtio network device.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.155744] pcpu-alloc: [0] 0 1 2 3 \r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.155778] kvm-guest: stealtime: cpu 0, msr 42fc35080\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target Local File Systems.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.156851] kvm-guest: PV spinlocks enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.157938] PV qspinlock hash table entries: 256 (order: 0, 4096 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.159733] Built 1 zonelists, mobility grouping on. Total pages: 4125749\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.161944] Policy zone: Normal\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.162538] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64 root=UUID=7be27af0-f080-46f6-bdf8-bc495c775f18 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.167996] DMAR: IOMMU disabled\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Load AppArmor profiles...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.173341] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.178350] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.181137] mem auto-init: stack:off, heap alloc:on, heap free:off\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.210850] Memory: 3138208K/16773480K available (12296K kernel code, 2552K rwdata, 6972K rodata, 2472K init, 3712K bss, 457808K reserved, 0K cma-reserved)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.214560] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.215973] Kernel/User page tables isolation: enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.218668] ftrace: allocating 33961 entries in 133 pages\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.238133] ftrace: allocated 133 pages with 3 groups\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in Commit a transient machine-id on disk being skipped.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.240292] rcu: Hierarchical RCU implementation.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.241623] rcu: \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=4.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.244277] \tRude variant of Tasks RCU enabled.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.245135] \tTracing variant of Tasks RCU enabled.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Create Volatile Files and Directories...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.246428] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.249232] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.255155] NR_IRQS: 524544, nr_irqs: 456, preallocated irqs: 16\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.257599] random: crng init done\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.259117] Console: colour dummy device 80x25\r\nJun 25 04:35:38 notebooks2instance-ok apparmor.systemd[341]: Restarting AppArmor\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.260319] printk: console [tty0] enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.261841] printk: console [ttyS0] enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.264059] printk: bootconsole [earlyser0] disabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.266540] ACPI: Core revision 20200925\r\nJun 25 04:35:38 notebooks2instance-ok Starting \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m...\r\nkernel: [ 0.268016] APIC: Switch to symmetric I/O mode setup\r\nJun 25 04:35:38 notebooks2instance-ok apparmor.systemd[341]: Reloading AppArmor profiles\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.270442] x2apic enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.275132] Switched APIC routing to physical x2apic.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.282672] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Create Volatile Files and Directories.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.285029] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb63109b96, max_idle_ns: 440795265316 ns\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.287218] Calibrating delay loop (skipped) preset value.. 4399.99 BogoMIPS (lpj=8799992)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.291296] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.293152] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.295224] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Update UTMP about System Boot/Shutdown...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.297075] Spectre V2 : Mitigation: IBRS\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.297925] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.299220] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Update UTMP about System Boot/Shutdown.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.303219] RETBleed: Mitigation: IBRS\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.304436] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.307218] Spectre V2 : User space: Mitigation: STIBP via seccomp and prctl\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.309977] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load AppArmor profiles.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.311230] MDS: Mitigation: Clear CPU buffers\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.312903] TAA: Mitigation: Clear CPU buffers\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.315216] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.317555] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.319220] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.321368] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.323221] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target System Initialization.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.325043] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.347243] Freeing SMP alternatives memory: 32K\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.350799] pid_max: default: 32768 minimum: 301\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.359126] LSM: Security Framework initializing\r\n Starting \u001b[0;1;39mNSS cache refresh\u001b[0m...\r\n Stopping \u001b[0;1;39mSystem Logging Service\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mNSS cache refresh\u001b[0m.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.359227] Yama: disabled by default; enable with sysctl kernel.yama.*\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started GCE Workload Certificate refresh timer.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.361438] AppArmor: AppArmor initialized\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.363217] TOMOYO Linux initialized\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.364810] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: command socket is listening at fd 3\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.367262] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.479005] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.479410] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.482592] rcu: Hierarchical SRCU implementation.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started NSS cache refresh timer.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.483596] NMI watchdog: Perf NMI watchdog permanently disabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.485563] smp: Bringing up secondary CPUs ...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.487355] x86: Booting SMP configuration:\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.488118] .... node #0, CPUs: #1\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Run google-wi-idle-shutdown service every minute.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.021623] kvm-clock: cpu 1, msr 38ea01041, secondary cpu clock\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.489059] kvm-guest: stealtime: cpu 1, msr 42fcb5080\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.491369] #2\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Daily Cleanup of Temporary Directories.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.021623] kvm-clock: cpu 2, msr 38ea01081, secondary cpu clock\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.492175] kvm-guest: stealtime: cpu 2, msr 42fd35080\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.495261] MDS CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html for more details.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.499221] TAA CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html for more details.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Listening on D-Bus System Message Bus Socket.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.503216] MMIO Stale Data CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/processor_mmio_stale_data.html for more details.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Docker Socket for the API.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.507416] #3\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.021623] kvm-clock: cpu 3, msr 38ea010c1, secondary cpu clock\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.507978] kvm-guest: stealtime: cpu 3, msr 42fdb5080\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.509000] smp: Brought up 1 node, 4 CPUs\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.509000] smpboot: Max logical packages: 1\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Listening on UUID daemon activation socket.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Resize root filesystem if needed...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started ifup for ens4.\r\nJun 25 04:35:38 notebooks2instance-ok google_disk_expand[357]: Checking if filesystem on /dev/sdb1 needs resizing\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Raise network interfaces...\r\nJun 25 04:35:38 notebooks2instance-ok google_disk_expand[365]: resize2fs 1.46.2 (28-Feb-2021)\r\nJun 25 04:35:38 notebooks2instance-ok google_disk_expand[365]: The filesystem is already 39288576 (4k) blocks long. Nothing to do!\r\nJun 25 04:35:38 notebooks2instance-ok google_disk_expand[357]: Done.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.511217] smpboot: Total of 4 processors activated (17599.98 BogoMIPS)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.553113] node 0 deferred pages initialised in 40ms\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.553962] devtmpfs: initialized\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.553962] x86/mm: Memory block size: 128MB\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.555266] PM: Registering ACPI NVS region [mem 0xbfb7f000-0xbfbfefff] (524288 bytes)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.556834] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.558720] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.559626] NET: Registered protocol family 16\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.561418] DMA: preallocated 2048 KiB GFP_KERNEL pool for atomic allocations\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.563847] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.566314] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.567234] audit: initializing netlink subsys (disabled)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.571259] audit: type=2000 audit(1719290134.916:1): state=initialized audit_enabled=0 res=1\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.571393] thermal_sys: Registered thermal governor 'fair_share'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.575217] thermal_sys: Registered thermal governor 'bang_bang'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.576259] thermal_sys: Registered thermal governor 'step_wise'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.577388] thermal_sys: Registered thermal governor 'user_space'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.579218] thermal_sys: Registered thermal governor 'power_allocator'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.580672] cpuidle: using governor ladder\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.583244] cpuidle: using governor menu\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.584036] ACPI: bus type PCI registered\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.584866] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.584866] PCI: Using configuration type 1 for base access\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.585543] Kprobes globally optimized\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.587265] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.588335] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.727390] ACPI: Added _OSI(Module Device)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.728198] ACPI: Added _OSI(Processor Device)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.729083] ACPI: Added _OSI(3.0 _SCP Extensions)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.729083] ACPI: Added _OSI(Processor Aggregator Device)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.729083] ACPI: Added _OSI(Linux-Dell-Video)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.730170] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.731219] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.733975] ACPI: 3 ACPI AML tables successfully acquired and loaded\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.736800] ACPI: Interpreter enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.737474] ACPI: (supports S0 S3 S4 S5)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.739217] ACPI: Using IOAPIC for interrupt routing\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.740043] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.742302] ACPI: Enabled 16 GPEs in block 00 to 0F\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.746116] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.751226] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.753310] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.756127] PCI host bridge to bus 0000:00\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.757133] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.757133] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.757133] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.759221] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfebfefff window]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.760659] pci_bus 0000:00: root bus resource [bus 00-ff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.761732] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.767780] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.796962] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.823289] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4 ACPI\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.825002] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.836887] pci 0000:00:03.0: reg 0x10: [io 0xc040-0xc07f]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.845173] pci 0000:00:03.0: reg 0x14: [mem 0xc0002000-0xc000207f]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.867332] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.878425] pci 0000:00:04.0: reg 0x10: [io 0xc000-0xc03f]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.886600] pci 0000:00:04.0: reg 0x14: [mem 0xc0000000-0xc00000ff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.911609] pci 0000:00:05.0: [1af4:1002] type 00 class 0x00ff00\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.923222] pci 0000:00:05.0: reg 0x10: [io 0xc0a0-0xc0bf]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.931222] pci 0000:00:05.0: reg 0x14: [mem 0xc0001000-0xc000107f]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.953332] pci 0000:00:06.0: [1af4:1005] type 00 class 0x00ff00\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.965013] pci 0000:00:06.0: reg 0x10: [io 0xc080-0xc09f]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 0.973033] pci 0000:00:06.0: reg 0x14: [mem 0xc0003000-0xc000303f]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.000262] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.003344] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.007315] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.010788] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.013251] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m.\r\n015753] iommu: Default domain type: Translated \r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.019241] vgaarb: loaded\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.019732] Registered efivars operations\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.020631] NetLabel: Initializing\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.021218] NetLabel: domain hash size = 128\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.021218] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.021218] NetLabel: unlabeled traffic allowed by default\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.021937] PCI: Using ACPI for IRQ routing\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.023220] PCI: pci_cache_line_size set to 64 bytes\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.023372] e820: reserve RAM buffer [mem 0x00055000-0x0005ffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.023375] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.023376] e820: reserve RAM buffer [mem 0xbf8ed000-0xbfffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.023377] e820: reserve RAM buffer [mem 0xbffe0000-0xbfffffff]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.023505] clocksource: Switched to clocksource kvm-clock\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.039443] VFS: Disk quotas dquot_6.6.0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.040585] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.042070] AppArmor: AppArmor Filesystem Enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.043151] pnp: PnP ACPI init\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.043755] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.043827] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.043872] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.043927] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.043970] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.044015] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.044060] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.044281] pnp: PnP ACPI: found 7 devices\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.052668] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.054578] NET: Registered protocol family 2\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.056249] IP idents hash table entries: 262144 (order: 9, 2097152 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.060544] tcp_listen_portaddr_hash hash table entries: 8192 (order: 5, 131072 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.062405] TCP established hash table entries: 131072 (order: 8, 1048576 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.064330] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.065530] TCP: Hash tables configured (established 131072 bind 65536)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.066674] UDP hash table entries: 8192 (order: 6, 262144 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.068012] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes, linear)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.069158] NET: Registered protocol family 1\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.069831] NET: Registered protocol family 44\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.070471] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.071628] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.073058] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.074807] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfebfefff window]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.075887] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.076878] PCI: CLS 0 bytes, default 64\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.077521] Trying to unpack rootfs image as initramfs...\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.322546] Freeing initrd memory: 13896K\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.323520] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.324842] software IO TLB: mapped [mem 0x00000000b7ff7000-0x00000000bbff7000] (64MB)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.326241] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb63109b96, max_idle_ns: 440795265316 ns\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.328340] clocksource: Switched to clocksource tsc\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.329861] Initialise system trusted keyrings\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.330879] Key type blacklist registered\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.332056] workingset: timestamp_bits=36 max_order=22 bucket_order=0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.334878] zbud: loaded\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.336588] Key type asymmetric registered\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.337359] Asymmetric key parser 'x509' registered\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.338488] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.340169] io scheduler mq-deadline registered\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.342219] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.343863] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.345864] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.348328] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.351190] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.354518] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.356615] i8042: Warning: Keylock active\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.359618] serio: i8042 KBD port at 0x60,0x64 irq 1\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.361288] serio: i8042 AUX port at 0x60,0x64 irq 12\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.362792] rtc_cmos 00:00: RTC can wake from S4\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.365130] rtc_cmos 00:00: registered as rtc0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.366631] rtc_cmos 00:00: setting system clock to 2024-06-25T04:35:35 UTC (1719290135)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.368754] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.370603] intel_pstate: CPU model not supported\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.371920] NET: Registered protocol family 10\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.382572] Segment Routing with IPv6\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.383523] mip6: Mobile IPv6\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.384464] NET: Registered protocol family 17\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.385881] IPI shorthand broadcast: enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.387291] sched_clock: Marking stable (1368142121, 17623184)-\u003e(1394057430, -8292125)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.390023] registered taskstats version 1\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.391047] Loading compiled-in X.509 certificates\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.427394] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.430224] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.432915] Key type .fscrypt registered\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.434240] Key type fscrypt-provisioning registered\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.436017] AppArmor: AppArmor sha1 policy hashing enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.437465] clk: Disabling unused clocks\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.440843] Freeing unused decrypted memory: 2036K\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.443201] Freeing unused kernel image (initmem) memory: 2472K\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.461743] Write protecting the kernel read-only data: 22528k\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.464647] Freeing unused kernel image (text/rodata gap) memory: 2036K\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.466757] Freeing unused kernel image (rodata/data gap) memory: 1220K\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.470703] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.472647] x86/mm: Checking user space page tables\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.474286] x86/mm: Checked W+X mappings: passed, no W+X pages found.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.475573] Run /init as init process\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.476647] with arguments:\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.476648] /init\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.476648] with environment:\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.476649] HOME=/\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.476650] TERM=linux\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.476651] BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.476652] intel_iommu=off\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.549835] PCI Interrupt Link [LNKC] enabled at IRQ 11\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.552227] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.566062] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.572626] PCI Interrupt Link [LNKD] enabled at IRQ 10\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.575326] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.584901] PCI Interrupt Link [LNKA] enabled at IRQ 10\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.586664] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.595486] PCI Interrupt Link [LNKB] enabled at IRQ 11\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.596786] virtio-pci 0000:00:06.0: virtio_pci: leaving for legacy driver\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.716914] SCSI subsystem initialized\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.719083] virtio_net virtio1 ens4: renamed from eth0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.823979] scsi host0: Virtio SCSI HBA\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.842774] scsi 0:0:1:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.844639] scsi 0:0:2:0: Direct-Access Google PersistentDisk 1 PQ: 0 ANSI: 6\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.889836] sd 0:0:2:0: [sda] 209715200 512-byte logical blocks: (107 GB/100 GiB)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.891367] sd 0:0:2:0: [sda] 4096-byte physical blocks\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.892344] sd 0:0:2:0: [sda] Write Protect is off\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.892372] sd 0:0:1:0: [sdb] 314572800 512-byte logical blocks: (161 GB/150 GiB)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.893703] sd 0:0:2:0: [sda] Mode Sense: 1f 00 00 08\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.895194] sd 0:0:1:0: [sdb] 4096-byte physical blocks\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.895287] sd 0:0:2:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.897592] sd 0:0:1:0: [sdb] Write Protect is off\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.898449] sd 0:0:1:0: [sdb] Mode Sense: 1f 00 00 08\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.898753] sd 0:0:1:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.924184] sdb: sdb1 sdb14 sdb15\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.942584] sd 0:0:2:0: [sda] Attached SCSI disk\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 1.942585] sd 0:0:1:0: [sdb] Attached SCSI disk\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 2.071509] sdb: sdb1 sdb14 sdb15\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 2.179511] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 2.215492] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 3.278371] fuse: init (API version 7.32)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 3.333506] EXT4-fs (sdb1): re-mounted. Opts: discard,errors=remount-ro\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 3.522203] EXT4-fs (sdb1): resizing filesystem from 39288576 to 39288576 blocks\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 3.937753] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 3.952887] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 3.968354] ACPI: Power Button [PWRF]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 3.982980] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.018532] pstore: Using crash dump compression: deflate\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.056674] ACPI: Sleep Button [SLPF]\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.059108] pstore: Registered efi as persistent store backend\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.102563] sd 0:0:1:0: Attached scsi generic sg0 type 0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.110503] sd 0:0:2:0: Attached scsi generic sg1 type 0\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.117305] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.154487] cryptd: max_cpu_qlen set to 1000\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.171394] AVX2 version of gcm_enc/dec engaged.\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.173238] AES CTR mode by8 optimization enabled\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.341372] audit: type=1400 audit(1719290138.467:2): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe\" pid=350 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.346604] audit: type=1400 audit(1719290138.467:3): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"nvidia_modprobe//kmod\" pid=350 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.351622] audit: type=1400 audit(1719290138.467:4): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/bin/man\" pid=351 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.355754] audit: type=1400 audit(1719290138.467:5): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_filter\" pid=351 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.360728] audit: type=1400 audit(1719290138.467:6): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"man_groff\" pid=351 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.360734] audit: type=1400 audit(1719290138.467:7): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/chronyd\" pid=352 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.360738] audit: type=1400 audit(1719290138.475:8): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"/usr/sbin/haveged\" pid=353 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.360744] audit: type=1400 audit(1719290138.483:9): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"tcpdump\" pid=349 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok kernel: [ 4.377409] audit: type=1400 audit(1719290138.483:10): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"lsb_release\" pid=354 comm=\"apparmor_parser\"\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Listening on Docker Socket for the API.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: google-disk-expand.service: Succeeded.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Resize root filesystem if needed.\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Internet Systems Consortium DHCP Client 4.4.1\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Internet Systems Consortium DHCP Client 4.4.1\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Copyright 2004-2018 Internet Systems Consortium.\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: All rights reserved.\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: For info, please visit https://www.isc.org/software/dhcp/\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Copyright 2004-2018 Internet Systems Consortium.\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: All rights reserved.\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: For info, please visit https://www.isc.org/software/dhcp/\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: \r\nJun 25 04:35:38 notebooks2instance-ok ifup[366]: ifup: waiting for lock on /run/network/ifstate.ens4\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target Sockets.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target Basic System.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Regular background program processing daemon.\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Listening on LPF/ens4/42:01:0a:8a:00:05\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Listening on LPF/ens4/42:01:0a:8a:00:05\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Sending on LPF/ens4/42:01:0a:8a:00:05\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Sending on Socket/fallback\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Sending on LPF/ens4/42:01:0a:8a:00:05\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Sending on Socket/fallback\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: DHCPOFFER of 10.138.0.5 from 169.254.169.254\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started D-Bus System Message Bus.\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: DHCPREQUEST for 10.138.0.5 on ens4 to 255.255.255.255 port 67\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: DHCPOFFER of 10.138.0.5 from 169.254.169.254\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: DHCPREQUEST for 10.138.0.5 on ens4 to 255.255.255.255 port 67\r\nJun 25 04:35:38 notebooks2instance-ok sh[379]: DHCPACK of 10.138.0.5 from 169.254.169.254\r\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: DHCPACK of 10.138.0.5 from 169.254.169.254\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Action on GCE instance property changes.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Google C2D startup config...\r\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\r\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\r\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B): last entropy estimate 8.00335\r\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: fills: 0, generated: 0\r\nJun 25 04:35:38 notebooks2instance-ok c2d-startup[418]: Google C2D startup config has already run. This is expected on reboots.\r\nJun 25 04:35:38 notebooks2instance-ok c2d-startup[418]: To run startup scripts again, delete /root/google_vm_config.lock\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Polls for whether all services from Notebooks has started and reports Heartbeat event...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Jupyter Notebook Service...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Vertex Workbench Health Agent.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting System Logging Service...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting User Login Management...\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: e2scrub_reap.service: Succeeded.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\r\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started System Logging Service.\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Finished Google C2D startup config.\r\nJun 25 04:35:39 notebooks2instance-ok dbus-daemon[399]: [system] Successfully activated service 'org.freedesktop.systemd1'\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Started User Login Management.\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Starting GCE Workload Certificate refresh...\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Starting NSS cache refresh...\r\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Refreshing passwd entry cache\r\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Failure getting users, quitting\r\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Failed to get users, not updating passwd cache file, removing /etc/oslogin_passwd.cache.bak.\r\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Refreshing group entry cache\r\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Failure getting groups, quitting\r\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Failed to get groups, not updating group cache file, removing /etc/oslogin_group.cache.bak.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mSystem Logging Service\u001b[0m.\r\n Starting \u001b[0;1;39mSystem Logging Service\u001b[0m...\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Stopping System Logging Service...\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: google-oslogin-cache.service: Succeeded.\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Finished NSS cache refresh.\r\nJun 25 04:35:39 notebooks2instance-ok dhclient[379]: bound to 10.138.0.5 -- renewal in 37158 seconds.\r\nJun 25 04:35:39 notebooks2instance-ok sh[379]: bound to 10.138.0.5 -- renewal in 37158 seconds.\r\nJun 25 04:35:39 notebooks2instance-ok gce_workload_cert_refresh[469]: 2024/06/25 04:35:39: Done\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Finished GCE Workload Certificate refresh.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: rsyslog.service: Succeeded.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Stopped System Logging Service.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting System Logging Service...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mSystem Logging Service\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started System Logging Service.\r\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: Internet Systems Consortium DHCP Client 4.4.1\r\nJun 25 04:35:40 notebooks2instance-ok sh[526]: Internet Systems Consortium DHCP Client 4.4.1\r\nJun 25 04:35:40 notebooks2instance-ok sh[526]: Copyright 2004-2018 Internet Systems Consortium.\r\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: Copyright 2004-2018 Internet Systems Consortium.\r\nJun 25 04:35:40 notebooks2instance-ok sh[526]: All rights reserved.\r\nJun 25 04:35:40 notebooks2instance-ok sh[526]: For info, please visit https://www.isc.org/software/dhcp/\r\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: All rights reserved.\r\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: For info, please visit https://www.isc.org/software/dhcp/\r\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: \r\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: Listening on Socket/ens4\r\nJun 25 04:35:40 notebooks2instance-ok sh[526]: Listening on Socket/ens4\r\nJun 25 04:35:40 notebooks2instance-ok sh[526]: Sending on Socket/ens4\r\nJun 25 04:35:40 notebooks2instance-ok sh[526]: PRC: Soliciting for leases (INIT).\r\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: Sending on Socket/ens4\r\nJun 25 04:35:40 notebooks2instance-ok sh[559]: ens4=ens4\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRaise network interfaces\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mNetwork is Online\u001b[0m.\r\n Starting \u001b[0;1;39mchrony, an NTP client/server\u001b[0m...\r\n Starting \u001b[0;1;39mcontainerd container runtime\u001b[0m...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle OSConfig Agent\u001b[0m.\r\n Starting \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Finished Raise network interfaces.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Reached target Network.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Reached target Network is Online.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting chrony, an NTP client/server...\r\n Starting \u001b[0;1;39m/etc/rc.local Compatibility\u001b[0m...\r\n Starting \u001b[0;1;39mOpenBSD Secure Shell session cleanup\u001b[0m...\r\n Starting \u001b[0;1;39mPermit User Sessions\u001b[0m...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUnattended Upgrades Shutdown\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mOpenBSD Secure Shell session cleanup\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mPermit User Sessions\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting containerd container runtime...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Google Compute Engine Guest Agent...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Google OSConfig Agent.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Google Compute Engine Shutdown Scripts...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting /etc/rc.local Compatibility...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Condition check resulted in fast remote file copy program daemon being skipped.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting OpenBSD Secure Shell session cleanup...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Permit User Sessions...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Unattended Upgrades Shutdown.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Finished Google Compute Engine Shutdown Scripts.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Finished OpenBSD Secure Shell session cleanup.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Finished Permit User Sessions.\r\nJun 25 04:35:40 notebooks2instance-ok chronyd[603]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mchrony, an NTP client/server\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok chronyd[603]: Frequency -62.859 +/- 0.180 ppm read from /var/lib/chrony/chrony.drift\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started chrony, an NTP client/server.\r\nJun 25 04:35:40 notebooks2instance-ok chronyd[603]: Loaded seccomp filter\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mSystem Time Synchronized\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Reached target System Time Synchronized.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt download activities\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily apt download activities.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily apt upgrade and clean activities\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily exim4-base housekeeping\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDiscard unused blocks once a week\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily rotation of log files\u001b[0m.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDaily man-db regeneration\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily apt upgrade and clean activities.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily exim4-base housekeeping.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Discard unused blocks once a week.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily rotation of log files.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily man-db regeneration.\r\n[\u001b[0;32m OK \u001b[0m] Reached target \u001b[0;1;39mTimers\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Reached target Timers.\r\n Starting \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting LSB: exim Mail Transport Agent...\r\n[ 6.145775] EXT4-fs (sda): mounted filesystem with ordered data mode. Opts: discard\r\nJun 25 04:35:40 notebooks2instance-ok kernel: [ 6.145775] EXT4-fs (sda): mounted filesystem with ordered data mode. Opts: discard\r\nJun 25 04:35:40 notebooks2instance-ok exim4[607]: Starting MTA:\r\nJun 25 04:35:40 notebooks2instance-ok exim4[626]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\r\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: GCE Agent Started (version 20240528.00)\r\nJun 25 04:35:40 notebooks2instance-ok OSConfigAgent[578]: 2024-06-25T04:35:40.4487Z OSConfigAgent Info: OSConfig Agent (version 20240524.03-g1) started.\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40Z\" level=warning msg=\"containerd config version `1` has been deprecated and will be converted on each startup in containerd v2.0, use `containerd config migrate` after upgrading to containerd 2.0 to avoid conversion on startup\"\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.724416490Z\" level=info msg=\"starting containerd\" revision=d2d58213f83a351ca8f528a95fbd145f5654e957 version=1.6.33\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.797848059Z\" level=info msg=\"loading plugin \\\"io.containerd.snapshotter.v1.aufs\\\"...\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.803697013Z\" level=info msg=\"skip loading plugin \\\"io.containerd.snapshotter.v1.aufs\\\"...\" error=\"aufs is not supported (modprobe aufs failed: exit status 1 \\\"modprobe: FATAL: Module aufs not found in directory /lib/modules/5.10.0-30-cloud-amd64\\\\n\\\"): skip plugin\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.803753920Z\" level=info msg=\"loading plugin \\\"io.containerd.content.v1.content\\\"...\" type=io.containerd.content.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.804377883Z\" level=info msg=\"loading plugin \\\"io.containerd.snapshotter.v1.btrfs\\\"...\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.804654042Z\" level=info msg=\"skip loading plugin \\\"io.containerd.snapshotter.v1.btrfs\\\"...\" error=\"path /var/lib/containerd/io.containerd.snapshotter.v1.btrfs (ext4) must be a btrfs filesystem to be used with the btrfs snapshotter: skip plugin\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.804698852Z\" level=info msg=\"loading plugin \\\"io.containerd.snapshotter.v1.devmapper\\\"...\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.804726784Z\" level=warning msg=\"failed to load plugin io.containerd.snapshotter.v1.devmapper\" error=\"devmapper not configured\"\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.804745007Z\" level=info msg=\"loading plugin \\\"io.containerd.snapshotter.v1.native\\\"...\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.805491340Z\" level=info msg=\"loading plugin \\\"io.containerd.snapshotter.v1.overlayfs\\\"...\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.806804623Z\" level=info msg=\"loading plugin \\\"io.containerd.snapshotter.v1.zfs\\\"...\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.807674129Z\" level=info msg=\"skip loading plugin \\\"io.containerd.snapshotter.v1.zfs\\\"...\" error=\"path /var/lib/containerd/io.containerd.snapshotter.v1.zfs must be a zfs filesystem to be used with the zfs snapshotter: skip plugin\" type=io.containerd.snapshotter.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.807730478Z\" level=info msg=\"loading plugin \\\"io.containerd.metadata.v1.bolt\\\"...\" type=io.containerd.metadata.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.807798825Z\" level=warning msg=\"could not use snapshotter devmapper in metadata plugin\" error=\"devmapper not configured\"\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.807820043Z\" level=info msg=\"metadata content store policy set\" policy=shared\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mLSB: exim Mail Transport Agent\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok exim4[607]: exim4.\r\nJun 25 04:35:40 notebooks2instance-ok exim4[607]: ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started LSB: exim Mail Transport Agent.\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.816953734Z\" level=info msg=\"loading plugin \\\"io.containerd.differ.v1.walking\\\"...\" type=io.containerd.differ.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.817022126Z\" level=info msg=\"loading plugin \\\"io.containerd.event.v1.exchange\\\"...\" type=io.containerd.event.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.817060865Z\" level=info msg=\"loading plugin \\\"io.containerd.gc.v1.scheduler\\\"...\" type=io.containerd.gc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.817185439Z\" level=info msg=\"loading plugin \\\"io.containerd.runtime.v1.linux\\\"...\" type=io.containerd.runtime.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.817298862Z\" level=info msg=\"loading plugin \\\"io.containerd.runtime.v2.task\\\"...\" type=io.containerd.runtime.v2\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.817381211Z\" level=info msg=\"loading plugin \\\"io.containerd.internal.v1.opt\\\"...\" type=io.containerd.internal.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.818336393Z\" level=info msg=\"loading plugin \\\"io.containerd.warning.v1.deprecations\\\"...\" type=io.containerd.warning.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.818393986Z\" level=info msg=\"loading plugin \\\"io.containerd.monitor.v1.cgroups\\\"...\" type=io.containerd.monitor.v1\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mcontainerd container runtime\u001b[0m.\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821221873Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.containers-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821538932Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.content-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821587537Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.diff-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821627024Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.images-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821655748Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.introspection-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821680726Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.leases-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821704602Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.namespaces-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821729144Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.snapshots-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821756760Z\" level=info msg=\"loading plugin \\\"io.containerd.service.v1.tasks-service\\\"...\" type=io.containerd.service.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821794240Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.containers\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821822772Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.content\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821846518Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.diff\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821873852Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.events\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.821895440Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.images\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822173490Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.introspection\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822215603Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.leases\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822246152Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.namespaces\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822272098Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.snapshots\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822298296Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.tasks\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822325758Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.version\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822346787Z\" level=info msg=\"loading plugin \\\"io.containerd.tracing.processor.v1.otlp\\\"...\" type=[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Compute Engine Guest Agent\u001b[0m.\r\nio.containerd.tracing.processor.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822388420Z\" level=info msg=\"skip loading plugin \\\"io.containerd.tracing.processor.v1.otlp\\\"...\" error=\"skip plugin: tracing endpoint not configured\" type=io.containerd.tracing.processor.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822411135Z\" level=info msg=\"loading plugin \\\"io.containerd.internal.v1.tracing\\\"...\" type=io.containerd.internal.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822434363Z\" level=info msg=\"skip loading plugin \\\"io.containerd.internal.v1.tracing\\\"...\" error=\"skip plugin: tracing endpoint not configured\" type=io.containerd.internal.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.822693609Z\" level=info msg=\"loading plugin \\\"io.containerd.internal.v1.restart\\\"...\" type=io.containerd.internal.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.823934361Z\" level=info msg=\"loading plugin \\\"io.containerd.grpc.v1.healthcheck\\\"...\" type=io.containerd.grpc.v1\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.826891653Z\" level=info msg=serving... address=/run/containerd/containerd.sock.ttrpc\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.826987891Z\" level=info msg=serving... address=/run/containerd/containerd.sock\r\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\"2024-06-25T04:35:40.827693982Z\" level=info msg=\"containerd successfully booted in 0.107063s\"\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started containerd container runtime.\r\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: Starting the scheduler to run jobs\r\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: Scheduler - start: []\r\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\r\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Google Compute Engine Guest Agent.\r\n Starting \u001b[0;1;39mDocker Application Container Engine\u001b[0m...\r\n Starting \u001b[0;1;39mGoogle Compute Engine Startup Scripts\u001b[0m...\r\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 1090ms.\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Docker Application Container Engine...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Google Compute Engine Startup Scripts...\r\n Starting \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m...\r\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting OpenBSD Secure Shell server...\r\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Starting the scheduler to run jobs\r\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: No restorecon available, not restoring SELinux context of: /etc/ssh/oslogin_trustedca.pub\r\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Enabling OS Login\r\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Scheduling job: telemetryJobID\r\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Scheduling job \"telemetryJobID\" to run at 24.000000 hr interval\r\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Successfully scheduled job telemetryJobID\r\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Invoking job \"telemetryJobID\"\r\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Scheduler - added: [now 2024-06-25 04:35:41.042058866 +0000 UTC entry 1 next 2024-06-26 04:35:41 +0000 UTC]\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mOpenBSD Secure Shell server\u001b[0m.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Started OpenBSD Secure Shell server.\r\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: Internet Systems Consortium DHCP Client 4.4.1\r\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: Copyright 2004-2018 Internet Systems Consortium.\r\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: All rights reserved.\r\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: For info, please visit https://www.isc.org/software/dhcp/\r\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: \r\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: Listening on Socket/ens4\r\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: Sending on Socket/ens4\r\n Stopping \u001b[0;1;39mUser Login Management\u001b[0m...\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Stopping User Login Management...\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mUser Login Management\u001b[0m.\r\n Starting \u001b[0;1;39mLoad Kernel Module drm\u001b[0m...\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: systemd-logind.service: Succeeded.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Stopped User Login Management.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Starting Load Kernel Module drm...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mLoad Kernel Module drm\u001b[0m.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: modprobe@drm.service: Succeeded.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Finished Load Kernel Module drm.\r\n Starting \u001b[0;1;39mUser Login Management\u001b[0m...\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Starting User Login Management...\r\nJun 25 04:35:41 notebooks2instance-ok google_metadata_script_runner[991]: Starting startup scripts (version dev).\r\nJun 25 04:35:41 notebooks2instance-ok google_metadata_script_runner[991]: No startup scripts to run.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGoogle Compute Engine Startup Scripts\u001b[0m.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: google-startup-scripts.service: Succeeded.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Finished Google Compute Engine Startup Scripts.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mUser Login Management\u001b[0m.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Started User Login Management.\r\n Stopping \u001b[0;1;39mRegular background program processing daemon\u001b[0m...\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Stopping Regular background program processing daemon...\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: cron.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Stopped Regular background program processing daemon.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mRegular background program processing daemon\u001b[0m.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Started Regular background program processing daemon.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Reloading OpenBSD Secure Shell server.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Reloaded OpenBSD Secure Shell server.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Consumed 1.277s CPU time.\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:35:41 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.832647951Z\" level=info msg=\"Starting up\"\r\n[ 7.778758] audit: type=1400 audit(1719290141.909:11): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"docker-default\" pid=1293 comm=\"apparmor_parser\"\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.916593413Z\" level=info msg=\"parsed scheme: \\\"unix\\\"\" module=grpc\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.916643812Z\" level=info msg=\"scheme \\\"unix\\\" not registered, fallback to default scheme\" module=grpc\r\nJun 25 04:35:41 notebooks2instance-ok kernel: [ 7.778758] audit: type=1400 audit(1719290141.909:11): apparmor=\"STATUS\" operation=\"profile_load\" profile=\"unconfined\" name=\"docker-default\" pid=1293 comm=\"apparmor_parser\"\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.917636058Z\" level=info msg=\"ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock \u003cnil\u003e 0 \u003cnil\u003e}] \u003cnil\u003e \u003cnil\u003e}\" module=grpc\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.919762897Z\" level=info msg=\"ClientConn switching balancer to \\\"pick_first\\\"\" module=grpc\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.941247890Z\" level=info msg=\"parsed scheme: \\\"unix\\\"\" module=grpc\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.941294462Z\" level=info msg=\"scheme \\\"unix\\\" not registered, fallback to default scheme\" module=grpc\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.941328836Z\" level=info msg=\"ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock \u003cnil\u003e 0 \u003cnil\u003e}] \u003cnil\u003e \u003cnil\u003e}\" module=grpc\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.941349231Z\" level=info msg=\"ClientConn switching balancer to \\\"pick_first\\\"\" module=grpc\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.972779867Z\" level=info msg=\"[graphdriver] using prior storage driver: overlay2\"\r\n[ 7.826290] rc.local[623]: Using custom Proxy Registration URL https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14\r\nJun 25 04:35:41 notebooks2instance-ok rc.local[623]: Using custom Proxy Registration URL https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14\r\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:41.995298470Z\" level=info msg=\"Loading containers: start.\"\r\n[ 7.902058] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.\r\nJun 25 04:35:42 notebooks2instance-ok kernel: [ 7.902058] bri[ 7.910712] Bridge firewalling registered\r\ndge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.\r\nJun 25 04:35:42 notebooks2instance-ok kernel: [ 7.910712] Bridge firewalling registered\r\nJun 25 04:35:42 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 2230ms.\r\n[ 8.132581] Initializing XFRM netlink socket\r\nJun 25 04:35:42 notebooks2instance-ok kernel: [ 8.132581] Initializing XFRM netlink socket\r\nJun 25 04:35:42 notebooks2instance-ok systemd-udevd[246]: Using default interface naming scheme 'v247'.\r\nJun 25 04:35:42 notebooks2instance-ok systemd-udevd[246]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\r\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:42.538787466Z\" level=info msg=\"Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address\"\r\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:42.641792689Z\" level=info msg=\"Loading containers: done.\"\r\nJun 25 04:35:42 notebooks2instance-ok systemd[1]: var-lib-docker-overlay2-opaque\\x2dbug\\x2dcheck4022206465-merged.mount: Succeeded.\r\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:42.799576478Z\" level=info msg=\"Docker daemon\" commit=a89b842 graphdriver(s)=overlay2 version=20.10.17\r\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:42.801618497Z\" level=info msg=\"Daemon has completed initialization\"\r\nJun 25 04:35:42 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:42 notebooks2instance-ok check_idle_shutdown.sh[1277]: Setting an origin timestamp 1719290142 as a minimum base for idle calculations.\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mDocker Application Container Engine\u001b[0m.\r\nJun 25 04:35:42 notebooks2instance-ok systemd[1]: Started Docker Application Container Engine.\r\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\"2024-06-25T04:35:42.869101442Z\" level=info msg=\"API listen on /run/docker.sock\"\r\n[ 8.790752] rc.local[1314]: Getting Regional Proxy Agent configuration. Region: us-west1\r\nJun 25 04:35:42 notebooks2instance-ok rc.local[1314]: Getting Regional Proxy Agent configuration. Region: us-west1\r\nJun 25 04:35:43 notebooks2instance-ok check_idle_shutdown.sh[1277]: Setting last notebook activity timestamp 1719290142 at 1719290143 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:35:43 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:35:43 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:35:43 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Consumed 1.233s CPU time.\r\n[ 9.054430] rc.local[1491]: 0K 100% 9.14M=0s\r\nJun 25 04:35:43 notebooks2instance-ok rc.local[1491]: 0K 100% 9.14M=0s\r\n[ 9.055302] rc.local[623]: use-shim-websockets: false\r\nJun 25 04:35:43 notebooks2instance-ok rc.local[623]: use-shim-websockets: false\r\nJun 25 04:35:43 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[ 9.878995] rc.local[1539]: Getting Regional Proxy Agent configuration. Region: us-west1\r\nJun 25 04:35:44 notebooks2instance-ok rc.local[1539]: Getting Regional Proxy Agent configuration. Region: us-west1\r\n[ 9.990330] rc.local[1565]: 0K 100% 4.69M=0s\r\nJun 25 04:35:44 notebooks2instance-ok rc.local[1565]: 0K 100% 4.69M=0s\r\n[ 9.990773] rc.local[623]: Notebooks Proxy Agent installation completed\r\nJun 25 04:35:44 notebooks2instance-ok rc.local[623]: Notebooks Proxy Agent installation completed\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mGoogle Notebooks Proxy Agent Service\u001b[0m.\r\nJun 25 04:35:44 notebooks2instance-ok systemd[1]: Started Google Notebooks Proxy Agent Service.\r\n[ 10.005497] rc.local[623]: Proxy Agent service started\r\nJun 25 04:35:44 notebooks2instance-ok rc.local[623]: Proxy Agent service started\r\nJun 25 04:35:44 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 4440ms.\r\nJun 25 04:35:44 notebooks2instance-ok proxy-forwarding-agent[1574]: 2024/06/25 04:35:44 Skipping metric handler initialization due to empty arguments.\r\nJun 25 04:35:44 notebooks2instance-ok proxy-forwarding-agent[1574]: 2024/06/25 04:35:44 Health Check request failed: Get \"http://localhost:8080/api/kernelspecs\": dial tcp [::1]:8080: connect: connection refused\r\nJun 25 04:35:44 notebooks2instance-ok chronyd[603]: Selected source 169.254.169.254 (metadata.google.internal)\r\nJun 25 04:35:44 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[ 10.786539] rc.local[1575]: Installing NVIDIA driver\r\nJun 25 04:35:44 notebooks2instance-ok rc.local[1575]: Installing NVIDIA driver\r\n[ 11.536978] rc.local[1620]: Binary swap is disabled, exiting.\r\nJun 25 04:35:45 notebooks2instance-ok rc.local[1620]: Binary swap is disabled, exiting.\r\nJun 25 04:35:45 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[ 12.333025] rc.local[1629]: Ignoring config cgroup-memory-reserve value\r\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Ignoring config cgroup-memory-reserve value\r\n[ 12.350935] rc.local[1629]: Ignoring config cgroup-memory-shim value\r\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Ignoring config cgroup-memory-shim value\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.503646 140146769454912 notebooks_collection_agent.py:2527] Vertex Notebooks Collection Agent starting...['/opt/deeplearning/bin/notebooks_collection_agent.py']\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.514634 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/ai-platform-api:404\r\n[ 12.369865] rc.local[1629]: Ignoring config cgroup-memory-min-jupyter value\r\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Ignoring config cgroup-memory-min-jupyter value\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.523070 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/runtime-resource-name:404\r\n[ 12.382804] rc.local[1629]: Jupyter Service will use maximum of 16455854464 bytes with high limit 16405854464 bytes.\r\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Jupyter Service will use maximum of 16455854464 bytes with high limit 16405854464 bytes.\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.542021 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/custom-container-image:404\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.542385 140146769454912 notebooks_collection_agent.py:1426] Checking container base image...\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.550775 140146769454912 notebooks_collection_agent.py:1428] Metadata title:workbench\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.559611 140146769454912 notebooks_collection_agent.py:1433] Metadata framework:workbench\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.559833 140146769454912 notebooks_collection_agent.py:1413] Checking if Notebook has Terminal enabled...\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.568146 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-terminal:404\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.568519 140146769454912 notebooks_collection_agent.py:1417] Metadata notebook-disable-terminal:None\r\n[ 12.421999] rc.local[1629]: Jupyter user is: jupyter\r\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Jupyter user is: jupyter\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.577194 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-container-health:404\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.577726 140146769454912 notebooks_collection_agent.py:1600] Metadata report-container-health:None\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.577885 140146769454912 notebooks_collection_agent.py:1603] Metadata `report-container-health=False` or is not set.\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.590438 140146769454912 notebooks_collection_agent.py:1483] Metadata report-dns-resolution:true\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.599349 140146769454912 notebooks_collection_agent.py:1536] Metadata report-event-health:true\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.611069 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-event-maintenance:404\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.611639 140146769454912 notebooks_collection_agent.py:1555] Metadata report-host-event:None\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.611790 140146769454912 notebooks_collection_agent.py:1558] Metadata `report-event-maintenance=False` or is not set.\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.620186 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-local-metrics:404\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.620815 140146769454912 notebooks_collection_agent.py:1632] Metadata report-local-metrics:None\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.620977 140146769454912 notebooks_collection_agent.py:1635] Metadata `report-local-metrics=False` or is not set.\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.629152 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-notebook-metrics:404\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.629534 140146769454912 notebooks_collection_agent.py:1616] Metadata report-notebook-metrics:None\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.630044 140146769454912 notebooks_collection_agent.py:1619] Metadata `report-notebook-metrics=False` or is not set.\r\n[ 12.488689] rc.local[1629]: disable-mixer is set to \"true\" and product is WORKBENCH_INSTANCE. is_dataproc_enabled():0\r\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: disable-mixer is set to \"true\" and product is WORKBENCH_INSTANCE. is_dataproc_enabled():0\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.663649 140146769454912 notebooks_collection_agent.py:1804] Metadata notebooks-api: PROD | Metadata project/project-id: gcpdiag-notebooks2-aaaa | Metadata instance/name: notebooks2instance-ok | Metadata instance/zone: us-west1-a\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.664042 140146769454912 notebooks_collection_agent.py:1814] Workbench instance resource name: projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-ok.\r\n[ 12.768832] rc.local[1669]: Enabling nb_conda_kernels...\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.664488 140146769454912 notebooks_collection_agent.py:1442] Checking if Notebook has Runtime OS Enum State Interface enabled...\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.672652 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/enable-runtime-os-enum-state-interface:404\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.672920 140146769454912 notebooks_collection_agent.py:1448] Metadata runtime-os-enum-state-interface:None\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.673036 140146769454912 notebooks_collection_agent.py:1459] Checking should report error enum states to gce guest_attributes...\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.690995 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-error-enum-states-by-guest-attribute:404\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.691291 140146769454912 notebooks_collection_agent.py:1465] Metadata report-error-enum-states-by-guest-attribute:None\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: Collecting metrics...Product: Product.WORKBENCH_INSTANCE\r\nJun 25 04:35:46 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.837245 140146769454912 notebooks_collection_agent.py:761] {'client': \u003cgoogle.cloud.monitoring_v3.services.metric_service.client.MetricServiceClient object at 0x7f7672b62fb0\u003e, 'instance_id': '7519326121542266893', 'zone': 'us-west1-a', 'project_id': 'gcpdiag-notebooks2-nuc97nsk', 'project_number': '12340012', 'name': 'notebooks2instance-ok'}\r\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.865958 140146769454912 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f76729f2aa0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:46 notebooks2instance-ok rc.local[1669]: Enabling nb_conda_kernels...\r\n[ 12.884637] rc.local[1669]: CONDA_PREFIX: /opt/conda/envs/jupyterlab\r\nJun 25 04:35:47 notebooks2instance-ok rc.local[1669]: CONDA_PREFIX: /opt/conda/envs/jupyterlab\r\n[ 12.884766] rc.local[1669]: Status: enabled\r\nJun 25 04:35:47 notebooks2instance-ok rc.local[1669]: Status: enabled\r\nJun 25 04:35:47 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:47.797 ServerApp] ServerApp.token config is deprecated in 2.0. Use IdentityProvider.token.\r\nJun 25 04:35:47 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:48 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 9090ms.\r\nJun 25 04:35:48 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:48 notebooks2instance-ok bash[439]: W0625 04:35:48.867240 140146769454912 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f76729f2a70\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:49 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:50 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[ 17.560202] rc.local[1697]: Extension package beatrix_jupyterlab took 3.9812s to import\r\nJun 25 04:35:51 notebooks2instance-ok rc.local[1697]: Extension package beatrix_jupyterlab took 3.9812s to import\r\nJun 25 04:35:51 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:51.711 ServerApp] Extension package beatrix_jupyterlab took 3.8948s to import\r\n[ 17.702881] rc.local[1697]: Extension package jupyter_server_proxy took 0.1421s to import\r\nJun 25 04:35:51 notebooks2instance-ok rc.local[1697]: Extension package jupyter_server_proxy took 0.1421s to import\r\nJun 25 04:35:51 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:51.854 ServerApp] Extension package jupyter_server_proxy took 0.1268s to import\r\nJun 25 04:35:51 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[ 17.989853] rc.local[1697]: Extension package jupyter_server_ydoc took 0.2622s to import\r\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: Extension package jupyter_server_ydoc took 0.2622s to import\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.140 ServerApp] Extension package jupyter_server_ydoc took 0.2626s to import\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.576 ServerApp] Extension package jupyterlab_jupytext took 0.3800s to import\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.583 ServerApp] A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.586 ServerApp] beatrix_jupyterlab | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.598 ServerApp] jupyter_server_fileid | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.608 ServerApp] jupyter_server_mathjax | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.608 ServerApp] jupyter_server_proxy | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.615 ServerApp] jupyter_server_terminals | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.624 ServerApp] jupyter_server_ydoc | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.626 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.628 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.628 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.628 LabApp] 'terminado_settings' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.635 ServerApp] jupyterlab | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.635 ServerApp] jupyterlab_git | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.635 ServerApp] jupyterlab_jupytext | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.638 NotebookApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.748 NotebookApp] 'terminado_settings' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.752 ServerApp] nbclassic | extension was successfully linked.\r\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.753 ServerApp] nbdime | extension was successfully linked.\r\n[ 18.651833] rc.local[1697]: A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\n[ 18.653289] rc.local[1697]: Disabling: dataproc_jupyter_plugin\r\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: Disabling: dataproc_jupyter_plugin\r\n[ 18.653445] rc.local[1697]: - Writing config: /opt/conda/envs/jupyterlab/etc/jupyter\r\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: - Writing config: /opt/conda/envs/jupyterlab/etc/jupyter\r\n[ 18.653555] rc.local[1697]: - Validating dataproc_jupyter_plugin...\r\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: - Validating dataproc_jupyter_plugin...\r\n[ 18.653657] rc.local[1697]: dataproc_jupyter_plugin \u001b[32mOK\u001b[0m\r\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: dataproc_jupyter_plugin #033[32mOK#033[0m\r\n[ 18.654341] rc.local[1697]: - Extension successfully disabled.\r\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: - Extension successfully disabled.\r\nJun 25 04:35:52 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:52 notebooks2instance-ok bash[439]: W0625 04:35:52.871255 140146769454912 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f76729f3430\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:52 notebooks2instance-ok bash[439]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f76729f3610\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:35:52 notebooks2instance-ok bash[439]: W0625 04:35:52.874245 140146769454912 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f76729f3e80\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.040 ServerApp] Extension package nb_conda took 0.2776s to import\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:53.040 ServerApp] A `_jupyter_server_extension_points` function was not found in nb_conda. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.041 ServerApp] nb_conda | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.041 ServerApp] nb_conda | extension was successfully linked.\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:53.046 ServerApp] A `_jupyter_server_extension_points` function was not found in jupyter_http_over_ws. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.047 ServerApp] jupyter_http_over_ws | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.047 ServerApp] jupyter_http_over_ws | extension was successfully linked.\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.047 ServerApp] notebook_shim | extension was successfully linked.\r\nJun 25 04:35:53 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.949 ServerApp] nb_conda_kernels | enabled, 3 kernels found.\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/traitlets/traitlets.py:1241: UserWarning: Overriding existing pre_save_hook (metadata_env_pre_save) with a new one (metadata_env_pre_save).\r\nJun 25 04:35:53 notebooks2instance-ok bash[437]: return self.func(*args, **kwargs)\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:54.020 ServerApp] All authentication is disabled. Anyone who can connect to this server will be able to run code.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.021 ServerApp] notebook_shim | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.023 ServerApp] beatrix_jupyterlab | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.024 ServerApp] jupyter_http_over_ws | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.024 FileIdExtension] Configured File ID manager: ArbitraryFileIdManager\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.025 FileIdExtension] ArbitraryFileIdManager : Configured root dir: /home/jupyter\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.025 FileIdExtension] ArbitraryFileIdManager : Configured database path: /home/jupyter/.local/share/jupyter/file_id_manager.db\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.032 FileIdExtension] ArbitraryFileIdManager : Successfully connected to database file.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.033 FileIdExtension] ArbitraryFileIdManager : Creating File ID tables and indices with journal_mode = DELETE\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.038 FileIdExtension] Attached event listeners.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.039 ServerApp] jupyter_server_fileid | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.040 ServerApp] jupyter_server_mathjax | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.054 ServerApp] jupyter_server_proxy | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.055 ServerApp] jupyter_server_terminals | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.056 ServerApp] jupyter_server_ydoc | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.079 LabApp] JupyterLab extension loaded from /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/jupyterlab\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.079 LabApp] JupyterLab application directory is /opt/conda/envs/jupyterlab/share/jupyter/lab\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.086 ServerApp] jupyterlab | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.095 ServerApp] jupyterlab_git | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:54.095 ServerApp] [Jupytext Server Extension] Async contents managers like AsyncLargeFileManager are not supported at the moment (https://github.com/mwouts/jupytext/issues/1020). We will derive a contents manager from LargeFileManager instead.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.095 ServerApp] [Jupytext Server Extension] Deriving a JupytextContentsManager from LargeFileManager\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/traitlets/traitlets.py:1241: UserWarning: Overriding existing pre_save_hook (metadata_env_pre_save) with a new one (metadata_env_pre_save).\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: return self.func(*args, **kwargs)\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.098 ServerApp] jupyterlab_jupytext | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.099 ServerApp] [nb_conda] enabled\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.099 ServerApp] nb_conda | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.113 ServerApp] nbclassic | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.289 ServerApp] nbdime | extension was successfully loaded.\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.290 ServerApp] Serving notebooks from local directory: /home/jupyter\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.291 ServerApp] Jupyter Server 2.14.1 is running at:\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.291 ServerApp] http://localhost:8080/lab\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.291 ServerApp] http://127.0.0.1:8080/lab\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.291 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).\r\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:54.298 ServerApp] No web browser found: Error('could not locate runnable browser').\r\nJun 25 04:35:54 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:54 notebooks2instance-ok bash[439]: W0625 04:35:54.875217 140146769454912 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f7672a300a0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mJupyter Notebook Service\u001b[0m.\r\nJun 25 04:35:54 notebooks2instance-ok systemd[1]: Started Jupyter Notebook Service.\r\n[ 20.881073] rc.local[1776]: [W 2024-06-25 04:35:55.031 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1776]: [W 2024-06-25 04:35:55.031 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\n[ 21.491187] rc.local[1629]: Disabling nb_conda_kernels extension...\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1629]: Disabling nb_conda_kernels extension...\r\n[ 21.696761] rc.local[1845]: Disabling nb_conda_kernels...\r\n[ 21.696937] rc.local[1845]: CONDA_PREFIX: /opt/conda/envs/jupyterlab\r\n[ 21.697017] rc.local[1845]: Target path: /opt/conda/etc/jupyter\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: Disabling nb_conda_kernels...\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: CONDA_PREFIX: /opt/conda/envs/jupyterlab\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: Target path: /opt/conda/etc/jupyter\r\n[ 21.697111] rc.local[1845]: WARNING: the configuration for the current environment\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: WARNING: the configuration for the current environment\r\n[ 21.697206] rc.local[1845]: is not affected by the target configuration path.\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: is not affected by the target configuration path.\r\n[ 21.707114] rc.local[1845]: Status: enabled\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: Status: enabled\r\nJun 25 04:35:55 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[ 21.773265] rc.local[1629]: Enabling terminal\r\nJun 25 04:35:55 notebooks2instance-ok rc.local[1629]: Enabling terminal\r\nJun 25 04:35:56 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:57 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 17690ms.\r\nJun 25 04:35:57 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[ 23.996596] rc.local[1852]: Extension package beatrix_jupyterlab took 1.6106s to import\r\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: Extension package beatrix_jupyterlab took 1.6106s to import\r\n[ 24.695858] rc.local[1852]: A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\n[ 24.697275] rc.local[1852]: Enabling: jupyter_server_terminals\r\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: Enabling: jupyter_server_terminals\r\n[ 24.697603] rc.local[1852]: - Writing config: /opt/conda/envs/jupyterlab/etc/jupyter\r\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: - Writing config: /opt/conda/envs/jupyterlab/etc/jupyter\r\n[ 24.697706] rc.local[1852]: - Validating jupyter_server_terminals...\r\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: - Validating jupyter_server_terminals...\r\n[ 24.697785] rc.local[1852]: jupyter_server_terminals \u001b[32mOK\u001b[0m\r\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: jupyter_server_terminals #033[32mOK#033[0m\r\n[ 24.698239] rc.local[1852]: - Extension successfully enabled.\r\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: - Extension successfully enabled.\r\nJun 25 04:35:58 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:35:59 notebooks2instance-ok systemd[1]: Reloading.\r\n Stopping \u001b[0;1;39mJupyter Notebook Service\u001b[0m...\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: [C 2024-06-25 04:35:59.535 ServerApp] received signal 15, stopping\r\nJun 25 04:35:59 notebooks2instance-ok systemd[1]: Stopping Jupyter Notebook Service...\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:59.536 ServerApp] Shutting down 15 extensions\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-debug\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/runtime-resource-name\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata notebooks-api-version:v2\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/disable-check-xsrf\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/use-collaborative\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-downloads\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-terminal\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-delete-to-trash\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/jupyter-user\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-gateway-client\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata proxy-url:341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata proxy-byoid-url:341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-debug\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/runtime-resource-name\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata notebooks-api-version:v2\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/disable-check-xsrf\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/use-collaborative\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-downloads\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-terminal\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-delete-to-trash\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/jupyter-user\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-gateway-client\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata proxy-url:341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata proxy-byoid-url:341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: jupyter_http_over_ws extension initialized. Listening on /http_over_websocket\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: _ _ _ _\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: | | | |_ __ __| |__ _| |_ ___\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: | |_| | '_ \\/ _` / _` | _/ -_)\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: \\___/| .__/\\__,_\\__,_|\\__\\___|\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: |_|\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: \r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Read the migration plan to Notebook 7 to learn about the new features and the actions to take if you are using extensions.\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html\r\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Please note that updating to Notebook 7 might break some of your extensions.\r\nJun 25 04:35:59 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:36:00 notebooks2instance-ok systemd[1]: jupyter.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Stopped \u001b[0;1;39mJupyter Notebook Service\u001b[0m.\r\nJun 25 04:36:00 notebooks2instance-ok systemd[1]: Stopped Jupyter Notebook Service.\r\nJun 25 04:36:00 notebooks2instance-ok systemd[1]: jupyter.service: Consumed 9.254s CPU time.\r\n Starting \u001b[0;1;39mJupyter Notebook Service\u001b[0m...\r\nJun 25 04:36:00 notebooks2instance-ok systemd[1]: Starting Jupyter Notebook Service...\r\nJun 25 04:36:00 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:36:01 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:36:02 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:02.862 ServerApp] ServerApp.token config is deprecated in 2.0. Use IdentityProvider.token.\r\nJun 25 04:36:02 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:36:03 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.472 ServerApp] Extension package beatrix_jupyterlab took 1.5989s to import\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.662 ServerApp] A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.664 ServerApp] beatrix_jupyterlab | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.670 ServerApp] jupyter_server_fileid | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.676 ServerApp] jupyter_server_mathjax | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.676 ServerApp] jupyter_server_proxy | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.682 ServerApp] jupyter_server_terminals | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.688 ServerApp] jupyter_server_ydoc | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.689 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.690 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.691 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.691 LabApp] 'terminado_settings' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.695 ServerApp] jupyterlab | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.695 ServerApp] jupyterlab_git | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.695 ServerApp] jupyterlab_jupytext | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.697 NotebookApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.785 NotebookApp] 'terminado_settings' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.788 ServerApp] nbclassic | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.789 ServerApp] nbdime | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.905 ServerApp] Extension package nb_conda took 0.1115s to import\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.905 ServerApp] A `_jupyter_server_extension_points` function was not found in nb_conda. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.906 ServerApp] nb_conda | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.906 ServerApp] nb_conda | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.907 ServerApp] A `_jupyter_server_extension_points` function was not found in jupyter_http_over_ws. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.908 ServerApp] jupyter_http_over_ws | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.908 ServerApp] jupyter_http_over_ws | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.908 ServerApp] notebook_shim | extension was successfully linked.\r\nJun 25 04:36:04 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\nJun 25 04:36:05 notebooks2instance-ok bash[439]: W0625 04:36:05.380526 140146769454912 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f76729f3550\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.670 ServerApp] nb_conda_kernels | enabled, 3 kernels found.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/traitlets/traitlets.py:1241: UserWarning: Overriding existing pre_save_hook (metadata_env_pre_save) with a new one (metadata_env_pre_save).\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: return self.func(*args, **kwargs)\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:05.691 ServerApp] All authentication is disabled. Anyone who can connect to this server will be able to run code.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.692 ServerApp] notebook_shim | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.694 ServerApp] beatrix_jupyterlab | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.695 ServerApp] jupyter_http_over_ws | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.695 FileIdExtension] Configured File ID manager: ArbitraryFileIdManager\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.695 FileIdExtension] ArbitraryFileIdManager : Configured root dir: /home/jupyter\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.695 FileIdExtension] ArbitraryFileIdManager : Configured database path: /home/jupyter/.local/share/jupyter/file_id_manager.db\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.696 FileIdExtension] ArbitraryFileIdManager : Successfully connected to database file.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.696 FileIdExtension] ArbitraryFileIdManager : Creating File ID tables and indices with journal_mode = DELETE\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.697 FileIdExtension] Attached event listeners.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.697 ServerApp] jupyter_server_fileid | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.698 ServerApp] jupyter_server_mathjax | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.710 ServerApp] jupyter_server_proxy | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.712 ServerApp] jupyter_server_terminals | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.713 ServerApp] jupyter_server_ydoc | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.715 LabApp] JupyterLab extension loaded from /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/jupyterlab\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.715 LabApp] JupyterLab application directory is /opt/conda/envs/jupyterlab/share/jupyter/lab\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.719 ServerApp] jupyterlab | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.727 ServerApp] jupyterlab_git | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:05.728 ServerApp] [Jupytext Server Extension] Async contents managers like AsyncLargeFileManager are not supported at the moment (https://github.com/mwouts/jupytext/issues/1020). We will derive a contents manager from LargeFileManager instead.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.728 ServerApp] [Jupytext Server Extension] Deriving a JupytextContentsManager from LargeFileManager\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/traitlets/traitlets.py:1241: UserWarning: Overriding existing pre_save_hook (metadata_env_pre_save) with a new one (metadata_env_pre_save).\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: return self.func(*args, **kwargs)\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.729 ServerApp] jupyterlab_jupytext | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.731 ServerApp] [nb_conda] enabled\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.731 ServerApp] nb_conda | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.734 ServerApp] nbclassic | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.790 ServerApp] nbdime | extension was successfully loaded.\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] Serving notebooks from local directory: /home/jupyter\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] Jupyter Server 2.14.1 is running at:\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] http://localhost:8080/lab\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] http://127.0.0.1:8080/lab\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).\r\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:05.795 ServerApp] No web browser found: Error('could not locate runnable browser').\r\nJun 25 04:36:05 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[\u001b[0;32m OK \u001b[0m] Started \u001b[0;1;39mJupyter Notebook Service\u001b[0m.\r\nJun 25 04:36:06 notebooks2instance-ok systemd[1]: Started Jupyter Notebook Service.\r\n[ 32.634552] rc.local[2082]: Checking if must disable root...\r\nJun 25 04:36:06 notebooks2instance-ok rc.local[2082]: Checking if must disable root...\r\n[ 32.634797] rc.local[2082]: Checking if must uninstall nbconvert...\r\nJun 25 04:36:06 notebooks2instance-ok rc.local[2082]: Checking if must uninstall nbconvert...\r\n[ 32.634885] rc.local[2082]: Checking if must restart jupyter service...\r\nJun 25 04:36:06 notebooks2instance-ok rc.local[2082]: Checking if must restart jupyter service...\r\n[ 32.648297] rc.local[2102]: cat: /opt/deeplearning/metadata/restriction: No such file or directory\r\nJun 25 04:36:06 notebooks2instance-ok rc.local[2102]: cat: /opt/deeplearning/metadata/restriction: No such file or directory\r\nJun 25 04:36:06 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\r\n[ 32.884301] rc.local[2098]: Reporting METADATA_CHANGE event to endpoint: https://notebooks.googleapis.com/v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-ok:reportInfoSystem\r\nJun 25 04:36:07 notebooks2instance-ok rc.local[2098]: Reporting METADATA_CHANGE event to endpoint: https://notebooks.googleapis.com/v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-ok:reportInfoSystem\r\nJun 25 04:36:07 notebooks2instance-ok bash[439]: W0625 04:36:07.383346 140146769454912 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f76729f2b90\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\n[ 33.756333] rc.local[2149]: % Total % Received % Xferd Average Speed Time Time Time Current\r\nJun 25 04:36:07 notebooks2instance-ok rc.local[2149]: % Total % Received % Xferd Average Speed Time Time Time Current\r\n[ 33.756777] rc.local[2149]: Dload Upload Total Spent Left Speed\r\nJun 25 04:36:07 notebooks2instance-ok rc.local[2149]: Dload Upload Total Spent Left Speed\r\nJun 25 04:36:07 notebooks2instance-ok report_startup.sh[436]: Ready status received\r\n[ 33.892996] rc.local[2149]: \r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 1307 0 0 100 1307 0 9540 --:--:-- --:--:-- --:--:-- 9540\r\nJun 25 04:36:08 notebooks2instance-ok rc.local[2149]: #015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015100 1307 0 0 100 1307 0 9540 --:--:-- --:--:-- --:--:-- 9540\r\n[ 33.893483] rc.local[2149]: curl: (22) The requested URL returned error: 409\r\nJun 25 04:36:08 notebooks2instance-ok rc.local[2149]: curl: (22) The requested URL returned error: 409\r\nJun 25 04:36:08 notebooks2instance-ok report_startup.sh[436]: Reporting HEARTBEAT event to endpoint: https://notebooks.googleapis.com/v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-ok:reportInfoSystem\r\n[ 34.477472] rc.local[2189]: Vertex Workbench Health Agent already installed...\r\nJun 25 04:36:08 notebooks2instance-ok rc.local[2189]: Vertex Workbench Health Agent already installed...\r\nJun 25 04:36:08 notebooks2instance-ok report_startup.sh[2211]: % Total % Received % Xferd Average Speed Time Time Time Current\r\nJun 25 04:36:08 notebooks2instance-ok report_startup.sh[2211]: Dload Upload Total Spent Left Speed\r\nJun 25 04:36:09 notebooks2instance-ok report_startup.sh[2211]: #015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015100 1692 0 543 100 1149 3620 7660 --:--:-- --:--:-- --:--:-- 11280\r\nJun 25 04:36:09 notebooks2instance-ok report_startup.sh[436]: Report HEARTBEAT event completed. (0)\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mPolls for whether…d and reports Heartbeat event\u001b[0m.\r\nJun 25 04:36:09 notebooks2instance-ok systemd[1]: Finished Polls for whether all services from Notebooks has started and reports Heartbeat event.\r\n[ 35.079287] rc.local[2234]: Setting up cron schedule for diagnostic check if does not exist\r\nJun 25 04:36:09 notebooks2instance-ok rc.local[2234]: Setting up cron schedule for diagnostic check if does not exist\r\n[ 35.083051] rc.local[2243]: * * * * * Jun 25 04:36:09 notebooks2instance-ok systemd[1]\r\r\nDebian GNU/Linux 11 notebooks2instance-ok ttyS0\r\n\r\nnotebooks2instance-ok login: Jun 25 04:36:15 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 35130ms.\r\nJun 25 04:36:50 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 69480ms.\r\nJun 25 04:37:04 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:37:04 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:37:04 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:37:04 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:37:05 notebooks2instance-ok check_idle_shutdown.sh[2343]: Setting last notebook activity timestamp 1719290142 at 1719290225 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:37:05 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:37:05 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:38:00 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 123740ms.\r\nJun 25 04:38:09 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:38:10 notebooks2instance-ok check_idle_shutdown.sh[2507]: Setting last notebook activity timestamp 1719290142 at 1719290290 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:39:10 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:39:10 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:39:10 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:39:10 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:39:11 notebooks2instance-ok check_idle_shutdown.sh[2661]: Setting last notebook activity timestamp 1719290142 at 1719290351 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:39:11 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:39:11 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:40:03 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 112790ms.\r\nJun 25 04:40:11 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:40:12 notebooks2instance-ok check_idle_shutdown.sh[2810]: Setting last notebook activity timestamp 1719290142 at 1719290412 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:41:12 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:41:13 notebooks2instance-ok check_idle_shutdown.sh[2966]: Setting last notebook activity timestamp 1719290142 at 1719290473 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:41:56 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 121430ms.\r\nJun 25 04:42:13 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:42:14 notebooks2instance-ok check_idle_shutdown.sh[3122]: Setting last notebook activity timestamp 1719290142 at 1719290534 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:43:14 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:43:15 notebooks2instance-ok check_idle_shutdown.sh[3271]: Setting last notebook activity timestamp 1719290142 at 1719290595 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:43:58 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 130210ms.\r\nJun 25 04:44:15 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:44:16 notebooks2instance-ok check_idle_shutdown.sh[3430]: Setting last notebook activity timestamp 1719290142 at 1719290656 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:45:16 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:45:17 notebooks2instance-ok check_idle_shutdown.sh[3578]: Setting last notebook activity timestamp 1719290142 at 1719290717 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:45:40 notebooks2instance-ok systemd[1]: Starting GCE Workload Certificate refresh...\r\nJun 25 04:45:40 notebooks2instance-ok gce_workload_cert_refresh[3630]: 2024/06/25 04:45:40: Done\r\nJun 25 04:45:40 notebooks2instance-ok systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nJun 25 04:45:40 notebooks2instance-ok systemd[1]: Finished GCE Workload Certificate refresh.\r\nJun 25 04:46:08 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 131070ms.\r\nJun 25 04:46:17 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:46:18 notebooks2instance-ok check_idle_shutdown.sh[3737]: Setting last notebook activity timestamp 1719290142 at 1719290778 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:47:18 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:47:19 notebooks2instance-ok check_idle_shutdown.sh[3885]: Setting last notebook activity timestamp 1719290142 at 1719290839 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:48:19 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 116240ms.\r\nJun 25 04:48:19 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:48:20 notebooks2instance-ok check_idle_shutdown.sh[4040]: Setting last notebook activity timestamp 1719290142 at 1719290900 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:49:20 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:49:21 notebooks2instance-ok check_idle_shutdown.sh[4195]: Setting last notebook activity timestamp 1719290142 at 1719290961 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:50:15 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 110770ms.\r\nJun 25 04:50:21 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:50:22 notebooks2instance-ok check_idle_shutdown.sh[4346]: Setting last notebook activity timestamp 1719290142 at 1719291022 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:50:40 notebooks2instance-ok systemd[1]: Starting Cleanup of Temporary Directories...\r\nJun 25 04:50:40 notebooks2instance-ok systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\r\nJun 25 04:50:40 notebooks2instance-ok systemd[1]: Finished Cleanup of Temporary Directories.\r\nJun 25 04:51:22 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:51:23 notebooks2instance-ok check_idle_shutdown.sh[4504]: Setting last notebook activity timestamp 1719290142 at 1719291083 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:52:06 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 122880ms.\r\nJun 25 04:52:23 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:52:24 notebooks2instance-ok check_idle_shutdown.sh[4659]: Setting last notebook activity timestamp 1719290142 at 1719291144 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:53:24 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:53:25 notebooks2instance-ok check_idle_shutdown.sh[4808]: Setting last notebook activity timestamp 1719290142 at 1719291205 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:54:09 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 118410ms.\r\nJun 25 04:54:25 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:54:26 notebooks2instance-ok check_idle_shutdown.sh[4963]: Setting last notebook activity timestamp 1719290142 at 1719291266 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:55:26 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\r\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\r\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:55:27 notebooks2instance-ok check_idle_shutdown.sh[5111]: Setting last notebook activity timestamp 1719290142 at 1719291327 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:55:45 notebooks2instance-ok systemd[1]: Starting GCE Workload Certificate refresh...\r\nJun 25 04:55:45 notebooks2instance-ok gce_workload_cert_refresh[5171]: 2024/06/25 04:55:45: Done\r\nJun 25 04:55:45 notebooks2instance-ok systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\nJun 25 04:55:45 notebooks2instance-ok systemd[1]: Finished GCE Workload Certificate refresh.\r\nJun 25 04:56:07 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 114350ms.\r\n", "start": "0", "next": "211771", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-ok/serialPortOutput" } ================================================ FILE: test-data/notebooks2/json-dumps/compute-serial-port-output-notebooks2instance-provisioning-stuck.json ================================================ { "kind": "compute#serialPortOutput", "contents": "Jun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd956fe0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd956fe0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd956fe0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:20:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:20:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:04 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 117640ms.\r\nJun 25 04:21:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:19 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:19.304251 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd954e80\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:21:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:21 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:21.307129 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd957a00\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:21:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:25 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:25.312322 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936e30\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:21:25 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:21:25 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:25.314547 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935e70\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:21:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:27.317345 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936fb0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:21:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:31.322618 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937580\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:21:31 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934430\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:21:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:21:41.333363 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:21:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:21:43 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:21:44 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:21:44 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:21:44 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:21:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:45 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[51779]: Setting last notebook activity timestamp 1719278718 at 1719289305 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:21:45 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:21:45 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:21:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:21:51.197166 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:21:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:21:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:22:44 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:22:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:45 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:22:45 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:22:45 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:22:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:46 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[52091]: Setting last notebook activity timestamp 1719278718 at 1719289366 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:22:46 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:22:46 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:22:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:22:51.350951 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546d0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546d0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546d0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546d0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:22:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:22:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:02 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 117340ms.\r\nJun 25 04:23:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:21 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:21.406768 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd956590\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:23:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:23 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:23.409512 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd957430\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:23:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:27.414428 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936980\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:23:27 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9369b0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:23:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:27.416425 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934460\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:23:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:29.419085 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934490\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:23:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:33.424235 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934430\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:23:33 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9341c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:23:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:23:43.434533 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:23:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:23:45 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:23:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:45 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:23:45 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:23:45 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:23:46 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[52411]: Setting last notebook activity timestamp 1719278718 at 1719289426 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:23:46 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:23:46 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:23:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:23:53.298552 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:23:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:23:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:24:46 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:24:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:46 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:24:46 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:24:46 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:24:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:47 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[52721]: Setting last notebook activity timestamp 1719278718 at 1719289487 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:24:47 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:24:47 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:24:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:24:53.455626 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9544f0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd9544f0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9544f0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9544f0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:24:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:24:59 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 113040ms.\r\nJun 25 04:25:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m...\r\nJun 25 04:25:20 notebooks2instance-provisioning-stuck systemd[1]: Starting GCE Workload Certificate refresh...\r\nJun 25 04:25:20 notebooks2instance-provisioning-stuck gce_workload_cert_refresh[53084]: 2024/06/25 04:25:20: Done\r\nJun 25 04:25:20 notebooks2instance-provisioning-stuck systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m.\r\nJun 25 04:25:20 notebooks2instance-provisioning-stuck systemd[1]: Finished GCE Workload Certificate refresh.\r\nJun 25 04:25:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:23 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:23.511619 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9541f0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:25:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:25 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:25.514287 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd954700\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:25:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:29.518745 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937760\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:25:29 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935fc0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:25:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:29.520798 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935ff0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:25:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:31.523440 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937940\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:25:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:35 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:35.528321 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9341c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:25:35 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9344c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:25:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:25:45.539495 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:25:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:25:46 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:25:47 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:25:47 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:25:47 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:25:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:48 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Setting last notebook activity timestamp 1719278718 at 1719289548 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:25:48 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Shutting down with last_activity 1719278718 at 1719289548\r\nJun 25 04:25:48 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Reporting IDLE event\r\nJun 25 04:25:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:48 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Reporting IDLE event to endpoint: https://notebooks.googleapis.com/v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem\r\nJun 25 04:25:49 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: % Total % Received % Xferd Average Speed Time Time Time Current\r\nJun 25 04:25:49 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Dload Upload Total Spent Left Speed\r\nJun 25 04:25:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0\r\nJun 25 04:25:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Failed to connect to notebooks.googleapis.com port 443: Connection timed out\r\nJun 25 04:25:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 1 seconds. 5 retries left.\r\nJun 25 04:25:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:25:55.403691 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:25:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:25:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:00 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0\r\nJun 25 04:26:00 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Failed to connect to notebooks.googleapis.com port 443: Connection timed out\r\nJun 25 04:26:00 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 2 seconds. 4 retries left.\r\nJun 25 04:26:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:07 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0\r\nJun 25 04:26:07 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Failed to connect to notebooks.googleapis.com port 443: Connection timed out\r\nJun 25 04:26:07 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 4 seconds. 3 retries left.\r\nJun 25 04:26:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:16 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0\r\nJun 25 04:26:16 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Connection timed out after 5000 milliseconds\r\nJun 25 04:26:16 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 8 seconds. 2 retries left.\r\nJun 25 04:26:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:29 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0\r\nJun 25 04:26:29 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Failed to connect to notebooks.googleapis.com port 443: Connection timed out\r\nJun 25 04:26:29 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 16 seconds. 1 retries left.\r\nJun 25 04:26:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0#015 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Connection timed out after 5000 milliseconds\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Report IDLE event completed. (0)\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Consumed 1.668s CPU time.\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:26:51 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53571]: Setting an origin timestamp 1719289611 as a minimum base for idle calculations.\r\nJun 25 04:26:51 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53571]: Setting last notebook activity timestamp 1719289611 at 1719289611 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:26:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:26:51 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:26:51 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:26:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:52 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 117650ms.\r\nJun 25 04:26:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:26:55.553602 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954df0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd954df0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954df0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954df0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:26:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:26:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:25 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:25.609088 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9573a0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:27:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:27.611774 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9548b0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:27:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:31.616725 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9368c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:27:31 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934f40\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:27:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:31.619108 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935720\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:27:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:33.621854 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936470\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:27:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:37 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:37.626805 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9344c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:27:37 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934250\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:27:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:27:47.637129 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:27:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:27:50 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:27:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:51 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:27:51 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:27:51 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:27:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:52 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53891]: Setting last notebook activity timestamp 1719289611 at 1719289672 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:27:52 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:27:52 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:27:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:27:57.500193 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:27:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:27:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:50 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 124820ms.\r\nJun 25 04:28:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:28:51 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:28:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:52 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:28:52 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:28:52 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:28:52 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[54203]: Setting last notebook activity timestamp 1719289611 at 1719289732 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:28:53 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:28:53 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:28:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:28:57.647886 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd955150\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd955150\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd955150\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd955150\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:28:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:28:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:27.700491 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd954f70\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:29:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:29.703190 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd957a00\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:29:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:33.708141 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936410\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:29:33 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9373d0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:29:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:33.710117 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934f70\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:29:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:35 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:35.712797 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9375e0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:29:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:39 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:39.717733 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934250\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:29:39 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9359f0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:29:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:29:49.727836 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:29:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:29:52 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:29:53 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:29:53 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:29:53 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:29:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[54520]: Setting last notebook activity timestamp 1719289611 at 1719289794 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:29:54 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:29:54 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:29:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:29:59.590069 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:30:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:30:53 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:30:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:54 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:30:54 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:30:54 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:30:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[54835]: Setting last notebook activity timestamp 1719289611 at 1719289854 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:30:55 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:30:55 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:30:55 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 131720ms.\r\nJun 25 04:30:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:30:59.743038 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954640\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd954640\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954640\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954640\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:31:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:29.799546 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd957d90\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:31:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:31.802433 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd957430\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:31:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:35 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:35.807593 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934520\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:31:35 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936fb0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:31:35 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:35.809967 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9363e0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:31:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:37 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:37.812843 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936380\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:31:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:41 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:41.817989 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9359f0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:31:41 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936860\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:31:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:31:51.827863 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:31:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:31:54 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:31:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:55 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:31:55 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:31:55 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:31:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:55 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[55156]: Setting last notebook activity timestamp 1719289611 at 1719289915 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:31:56 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:31:56 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:31:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:31:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:32:01.690699 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:32:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:32:55 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:32:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:56 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:32:56 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:32:56 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:32:56 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[55470]: Setting last notebook activity timestamp 1719289611 at 1719289976 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:32:57 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:32:57 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:32:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:32:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:33:01.843076 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:33:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:06 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 124020ms.\r\nJun 25 04:33:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:31.899117 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9574c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:33:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:33.901810 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd954700\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:33:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:37 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:37.906740 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9366b0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:33:37 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934490\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:33:37 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:37.908739 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935270\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:33:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:39 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:39.911389 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936d40\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:33:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:43 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:43.916267 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936860\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:33:43 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937670\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:33:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:33:53.926093 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:33:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:33:56 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:33:57 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:33:57 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:33:57 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:33:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:58 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[55788]: Setting last notebook activity timestamp 1719289611 at 1719290038 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:33:58 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:33:58 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:33:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:33:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:34:03.789421 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:34:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:34:57 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:34:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:57 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:34:57 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:34:57 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:34:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:34:58 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[56102]: Setting last notebook activity timestamp 1719289611 at 1719290098 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:34:58 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:34:58 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:34:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:35:03.942628 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954fd0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd954fd0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954fd0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954fd0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:35:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:10 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 123440ms.\r\nJun 25 04:35:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m...\r\nJun 25 04:35:21 notebooks2instance-provisioning-stuck systemd[1]: Starting GCE Workload Certificate refresh...\r\nJun 25 04:35:21 notebooks2instance-provisioning-stuck gce_workload_cert_refresh[56281]: 2024/06/25 04:35:21: Done\r\nJun 25 04:35:21 notebooks2instance-provisioning-stuck systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m.\r\nJun 25 04:35:21 notebooks2instance-provisioning-stuck systemd[1]: Finished GCE Workload Certificate refresh.\r\nJun 25 04:35:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:34 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:33.999575 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd956080\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:36 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:36.002272 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9548b0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:40 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:40.007529 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937cd0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:40 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937940\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:35:40 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:40.009948 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937fd0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:42.012767 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9367a0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:46.017914 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937670\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:35:46 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:35:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:35:56.028056 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:35:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:35:58 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:35:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:35:58 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:35:58 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:35:58 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:35:59 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[56431]: Setting last notebook activity timestamp 1719289611 at 1719290159 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:35:59 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:35:59 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:35:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:36:05.891366 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:36:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:36:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:36:59 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:36:59 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:36:59 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:36:59 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:37:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:00 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[56740]: Setting last notebook activity timestamp 1719289611 at 1719290220 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:37:00 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:37:00 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:37:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:37:06.049351 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957370\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd957370\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957370\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957370\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:37:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:14 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 117450ms.\r\nJun 25 04:37:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:36 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:36.105796 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd957eb0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:37:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:38 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:38.108669 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934eb0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:37:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:42.113904 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937430\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:37:42 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936380\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:37:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:42.116316 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9367a0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:37:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:44.119067 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937220\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:37:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:48.124212 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934f70\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:37:48 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:37:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:37:58.134413 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:37:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:37:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:38:00 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:38:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:00 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:38:00 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:38:00 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:38:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:01 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[57061]: Setting last notebook activity timestamp 1719289611 at 1719290281 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:38:01 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:38:01 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:38:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:38:07.997183 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:38:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:38:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:39:00 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:39:01 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:39:01 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:39:01 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:39:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:02 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[57372]: Setting last notebook activity timestamp 1719289611 at 1719290342 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:39:02 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:39:02 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:39:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:39:08.153598 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954970\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd954970\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954970\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954970\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:39:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:11 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 129750ms.\r\nJun 25 04:39:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:38 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:38.210936 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9578e0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:39:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:40 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:40.213657 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9365f0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:39:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:44.218640 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9344f0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:39:44 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937820\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:39:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:44.220700 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937220\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:39:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:46.223384 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937ca0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:39:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:50.228333 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934fd0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:39:50 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:39:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:39:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:40:00.238714 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:40:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:40:01 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:40:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:02 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:40:02 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:40:02 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:40:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:03 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[57701]: Setting last notebook activity timestamp 1719289611 at 1719290403 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:40:03 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:40:03 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:40:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:40:10.102290 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:40:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:40:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:41:02 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:41:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:03 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:41:03 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:41:03 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:41:04 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[58044]: Setting last notebook activity timestamp 1719289611 at 1719290464 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:41:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:41:04 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:41:04 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:41:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:41:10.259308 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957e50\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd957e50\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957e50\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957e50\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:41:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:21 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 108050ms.\r\nJun 25 04:41:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:40 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:40.312452 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9550c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:41:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:42.315340 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936da0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:41:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:46.320463 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935f30\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:41:46 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936590\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:41:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:46.322666 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937ca0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:41:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:48.325356 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936260\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:41:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:52.326738 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937010\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:41:52 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:41:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:41:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:42:02.337100 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:42:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:42:03 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:42:03 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:42:03 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:42:03 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:42:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:04 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[58386]: Setting last notebook activity timestamp 1719289611 at 1719290524 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:42:04 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:42:04 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:42:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:42:12.200881 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:42:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:42:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:43:04 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:43:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:04 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:43:04 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:43:04 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:43:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:05 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[58700]: Setting last notebook activity timestamp 1719289611 at 1719290585 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:43:05 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:43:05 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:43:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:09 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 114100ms.\r\nJun 25 04:43:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:43:12.359556 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954b20\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd954b20\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954b20\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954b20\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:43:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:42.416126 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9560e0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:43:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:44.418790 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936fb0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:43:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:48.423712 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936980\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:43:48 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935990\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:43:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:48.425871 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936260\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:43:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:50.428670 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937790\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:43:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:54 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:54.433556 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9362c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:43:54 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:43:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:43:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:44:04.443448 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:44:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:44:05 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:44:05 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:44:05 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:44:05 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:44:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:06 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[59016]: Setting last notebook activity timestamp 1719289611 at 1719290646 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:44:06 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:44:06 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:44:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:44:14.307066 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:44:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:44:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:03 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 122030ms.\r\nJun 25 04:45:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:45:05 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:45:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:06 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:45:06 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:45:06 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:45:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:07 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[59330]: Setting last notebook activity timestamp 1719289611 at 1719290707 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:45:07 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:45:07 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:45:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:45:14.469485 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9575b0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd9575b0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9575b0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9575b0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:45:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m...\r\nJun 25 04:45:21 notebooks2instance-provisioning-stuck systemd[1]: Starting GCE Workload Certificate refresh...\r\nJun 25 04:45:21 notebooks2instance-provisioning-stuck gce_workload_cert_refresh[59422]: 2024/06/25 04:45:21: Done\r\nJun 25 04:45:21 notebooks2instance-provisioning-stuck systemd[1]: gce-workload-cert-refresh.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mGCE Workload Certificate refresh\u001b[0m.\r\nJun 25 04:45:21 notebooks2instance-provisioning-stuck systemd[1]: Finished GCE Workload Certificate refresh.\r\nJun 25 04:45:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:44.507784 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd954610\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:45:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:46.510634 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937490\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:45:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:50.515764 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9377f0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:45:50 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9354e0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:45:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:50.517991 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937790\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:45:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:52.520652 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936d70\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:45:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:56 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:56.525561 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936ce0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:45:56 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:45:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:45:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:46:06.535384 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:46:06 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:46:07 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:46:07 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:46:07 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:46:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:08 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[59652]: Setting last notebook activity timestamp 1719289611 at 1719290768 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:46:08 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:46:08 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:46:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:46:16.398165 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:46:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:46:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:05 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 116120ms.\r\nJun 25 04:47:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:47:07 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:47:08 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:47:08 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:47:08 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:47:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:09 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[59966]: Setting last notebook activity timestamp 1719289611 at 1719290829 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:47:09 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:47:09 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:47:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:47:16.553630 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:47:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:46.611851 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9545b0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:47:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:48.614824 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935000\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:47:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:52.620005 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937460\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:47:52 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936410\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:47:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:52.622350 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936d70\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:47:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:54 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:54.625149 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9370a0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:47:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:58 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:58.630351 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9363e0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:47:58 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:47:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:47:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:48:08.641022 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:48:08 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:48:09 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[60287]: Setting last notebook activity timestamp 1719289611 at 1719290889 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:48:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:48:09 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:48:09 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:48:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:48:18.504741 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:48:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:48:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:01 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 127450ms.\r\nJun 25 04:49:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:49:09 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:49:09 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:49:09 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:49:09 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:49:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:10 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[60598]: Setting last notebook activity timestamp 1719289611 at 1719290950 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:49:10 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:49:10 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:49:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:49:18.663033 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9563e0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd9563e0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9563e0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9563e0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:49:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:48.718340 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd954f40\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:49:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:50.721047 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935750\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:49:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:54 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:54.726001 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936740\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:49:54 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9378b0\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:49:54 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:54.728127 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9370a0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:49:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:56 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:56.730745 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9366b0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:49:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:49:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:00 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:50:00.735656 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937640\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:50:00 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:50:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:50:10.745866 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:50:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:11 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[60915]: Setting last notebook activity timestamp 1719289611 at 1719291011 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:50:11 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:50:11 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:50:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:50:20.609343 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:50:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:50:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:09 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 127190ms.\r\nJun 25 04:51:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:51:10 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:51:11 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:51:11 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:51:11 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:51:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:12 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[61227]: Setting last notebook activity timestamp 1719289611 at 1719291072 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\nJun 25 04:51:12 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:51:12 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:51:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:51:20.768072 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9541f0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 198, in _new_conn\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: sock = connection.create_connection(\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 85, in create_connection\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: raise err\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\", line 73, in create_connection\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: sock.connect(sa)\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 793, in urlopen\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: response = self._make_request(\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 491, in _make_request\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: raise new_e\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 467, in _make_request\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: self._validate_conn(conn)\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 1099, in _validate_conn\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: conn.connect()\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 616, in connect\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: self.sock = sock = self._new_conn()\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\", line 213, in _new_conn\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: raise NewConnectionError(\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \u003curllib3.connection.HTTPSConnection object at 0x7f82fd9541f0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 667, in send\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: resp = conn.urlopen(\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\", line 847, in urlopen\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: retries = retries.increment(\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\", line 515, in increment\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9541f0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 1956, in report_notebook_event\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: response = session.post(\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 637, in post\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: return self.request(\"POST\", url, data=data, json=json, **kwargs)\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 589, in request\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: resp = self.send(prep, **send_kwargs)\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\", line 703, in send\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: r = adapter.send(request, **kwargs)\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\", line 700, in send\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: raise ConnectionError(e, request=request)\r\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9541f0\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\r\nJun 25 04:51:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:50.797844 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd954b50\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:51:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:52.800511 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936ec0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:51:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:56 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:56.805452 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9377c0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:51:56 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd934220\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:51:56 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:56.807584 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd9366b0\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:51:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:51:58 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:58.810319 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd937610\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:51:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:02 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:52:02.815200 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd935f00\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\r\nJun 25 04:52:02 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\r\nJun 25 04:52:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n Starting \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m...\r\nJun 25 04:52:11 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\r\nJun 25 04:52:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mRemoves premium features from DLVM.\u001b[0m.\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\r\n Starting \u001b[0;1;39mChecks whether to…nce based on idle schedule.\u001b[0m...\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:52:12.825006 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:52:13 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[61546]: Setting last notebook activity timestamp 1719289611 at 1719291133 for the following reason: Reason - latest session activity - replaced by later instance creation date\r\n[\u001b[0;32m OK \u001b[0m] Finished \u001b[0;1;39mChecks whether to…tance based on idle schedule.\u001b[0m.\r\nJun 25 04:52:13 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\r\nJun 25 04:52:13 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\r\nJun 25 04:52:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:52:22.688354 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\r\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/deeplearning/bin/notebooks_collection_agent.py\", line 618, in dns_resolution_query\r\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: _ = subprocess.run(\r\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: File \"/opt/conda/lib/python3.10/subprocess.py\", line 526, in run\r\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: raise CalledProcessError(retcode, process.args,\r\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\r\nJun 25 04:52:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:52:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:53:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:53:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\nJun 25 04:53:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\r\n", "start": "1976764", "next": "2976764", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck/serialPortOutput" } ================================================ FILE: test-data/notebooks2/json-dumps/logging-entries-1.json ================================================ { "entries": [ { "textPayload": "Jun 25 05:01:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26593", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:25.019326264Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:26.021123060Z" }, { "textPayload": "Jun 25 05:01:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26592", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:24.015424685Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:26.021123060Z" }, { "textPayload": "Jun 25 05:01:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26591", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:23.011486858Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:23.123629089Z" }, { "textPayload": "Jun 25 05:01:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26590", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:22.007674712Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:23.123629089Z" }, { "textPayload": "Jun 25 05:01:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26589", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:21.003805645Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:23.123629089Z" }, { "textPayload": "Jun 25 05:01:20 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\n", "insertId": "26588", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:20.852022546Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:20 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\n", "insertId": "26587", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:20.852016984Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "[\\x1b[0;32m OK \\x1b[0m] Finished \\x1b[0;1;39mChecks whether to\\xe2\\x80\\xa6tance based on idle schedule.\\x1b[0m.\\r\\n", "insertId": "26586", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:20.851995310Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:20 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[64573]: Setting last notebook activity timestamp 1719289611 at 1719291680 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n", "insertId": "26585", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:20.771896545Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26584", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:20.024434863Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:19 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\n", "insertId": "26583", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:19.964365625Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": " Starting \\x1b[0;1;39mChecks whether to\\xe2\\x80\\xa6nce based on idle schedule.\\x1b[0m...\\r\\n", "insertId": "26582", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:19.964319264Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:19 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n", "insertId": "26581", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:19.964314267Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "[\\x1b[0;32m OK \\x1b[0m] Finished \\x1b[0;1;39mRemoves premium features from DLVM.\\x1b[0m.\\r\\n", "insertId": "26580", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:19.964309451Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:19 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n", "insertId": "26579", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:19.964289488Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:19 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\n", "insertId": "26578", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:19.400598116Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": " Starting \\x1b[0;1;39mRemoves premium features from DLVM.\\x1b[0m...\\r\\n", "insertId": "26577", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:19.400573245Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26576", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:18.995325845Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:21.002864105Z" }, { "textPayload": "Jun 25 05:01:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26575", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:17.991408536Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:18.071819208Z" }, { "textPayload": "Jun 25 05:01:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26574", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:16.987681579Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:18.071819208Z" }, { "textPayload": "Jun 25 05:01:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26573", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:15.983641704Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:18.071819208Z" }, { "textPayload": "Jun 25 05:01:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26572", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:14.979702034Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:15.983655097Z" }, { "textPayload": "Jun 25 05:01:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26571", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:13.975818805Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:15.983655097Z" }, { "textPayload": "Jun 25 05:01:12 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 130330ms.\\r\\n", "insertId": "26570", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:13.034607081Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:13.072088477Z" }, { "textPayload": "Jun 25 05:01:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26569", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:12.971756669Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:13.072088477Z" }, { "textPayload": "Jun 25 05:01:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26568", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:11.967750132Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:13.072088477Z" }, { "textPayload": "Jun 25 05:01:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26567", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:10.963794256Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:13.072088477Z" }, { "textPayload": "Jun 25 05:01:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26566", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:09.959868489Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:10.964031236Z" }, { "textPayload": "Jun 25 05:01:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26565", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:08.955971670Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:10.964031236Z" }, { "textPayload": "Jun 25 05:01:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26564", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:07.952058605Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:08.092070476Z" }, { "textPayload": "Jun 25 05:01:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26563", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:01:06.948285968Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:08.092070476Z" }, { "textPayload": "Jun 25 05:01:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26562", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:05.944452821Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:08.092070476Z" }, { "textPayload": "Jun 25 05:01:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26561", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:04.940586550Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:05.944943116Z" }, { "textPayload": "Jun 25 05:01:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26560", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:03.936888786Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:05.944943116Z" }, { "textPayload": "Jun 25 05:01:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26559", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:01:02.933016353Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:03.023621061Z" }, { "textPayload": "Jun 25 05:01:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26558", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:01.928431247Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:03.023621061Z" }, { "textPayload": "Jun 25 05:01:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26557", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:01:00.924089164Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:03.023621061Z" }, { "textPayload": "Jun 25 05:00:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26556", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:00:59.920196314Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:00.921812339Z" }, { "textPayload": "Jun 25 05:00:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26555", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:00:58.916399036Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:01:00.921812339Z" }, { "textPayload": "Jun 25 05:00:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26554", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:00:57.912540886Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:57.992679861Z" }, { "textPayload": "Jun 25 05:00:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26553", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:00:56.908743292Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:57.992679861Z" }, { "textPayload": "Jun 25 05:00:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26552", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:00:55.904734458Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:57.992679861Z" }, { "textPayload": "Jun 25 05:00:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26551", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:00:54.900946570Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:55.904110127Z" }, { "textPayload": "Jun 25 05:00:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26550", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:00:53.896997162Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:55.904110127Z" }, { "textPayload": "Jun 25 05:00:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26549", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "instance_id": "4775836342981993096", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:00:52.892964823Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:52.942276713Z" }, { "textPayload": "Jun 25 05:00:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26548", "resource": { "type": "gce_instance", "labels": { "instance_id": "4775836342981993096", "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa" } }, "timestamp": "2024-06-25T05:00:51.889167231Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:52.942276713Z" }, { "textPayload": "Jun 25 05:00:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26547", "resource": { "type": "gce_instance", "labels": { "zone": "us-west1-a", "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:00:50.885166842Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:52.942276713Z" }, { "textPayload": "Jun 25 05:00:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26546", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:00:49.881122588Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:50.883735865Z" }, { "textPayload": "Jun 25 05:00:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26545", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "zone": "us-west1-a", "instance_id": "4775836342981993096" } }, "timestamp": "2024-06-25T05:00:48.877068714Z", "severity": "INFO", "labels": { "is_text_escaped": "true", "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:50.883735865Z" }, { "textPayload": "Jun 25 05:00:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n", "insertId": "26544", "resource": { "type": "gce_instance", "labels": { "project_id": "gcpdiag-notebooks2-aaaa", "instance_id": "4775836342981993096", "zone": "us-west1-a" } }, "timestamp": "2024-06-25T05:00:47.873047535Z", "severity": "INFO", "labels": { "compute.googleapis.com/resource_name": "notebooks2instance-provisioning-stuck", "is_text_escaped": "true" }, "logName": "projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output", "receiveTimestamp": "2024-06-25T05:00:47.960381575Z" } ], "nextPageToken": "EAE4ysPH7dz8q7m4AUrHBSIXIgcKBTI2NTQ0KgwI_53pswYQ78umoANKqwUKgwVKgAUA0C8gBmi8iFXVzjOdm7N1z5DmODJFQejepzHKgu0Iw9KrTGr5Ae-Nh785SZPkUu9PDwPCV-H9o-Wks0jmeomniac9fnr_2axu19hkyOU9opUpr7IQOKVDIrc5pQj8tWGGJnD-Xx5KYcmeBX5pcwKKIn--E_aXqgNYAdIVIDy08KF9_STjtVCY5Qp-vUgNg8w37d29RsIjTYYXFvfmAv4L5S62OytDzt7iicLHma7jkdO-rqQxo2A2S83m408ZWlTt9dUz0hatHOr6HRzr7V-VIbUrKogsrnDGJmm0GmwOqA7mtef5Ss_jAIfDhTde75hxitq8VoBrqs08qBSCgvlG29hLv7rHQh87o7-cHG_PJn8skssDxjYDBccgHS1xVZcEev6rjJzO9eYJXHuZRVyw8pwxvaj7HeuJZk1uj4wGqtgFXSW5m2OKYvAVuexmfwd5xwBk4ZDQOBIkDro7ymKcJdsk2CBw-JKW4kw9c1agshET55fM9Eq6oyKfkh_P8ez1VcJHa1digVP5_uNYu6cYfxBgyBwNrWQ0tnChJqQ3Bhanuxz9cW8BzJ-2poIAB4DGm-9p7R5Lcxo517FH6R2vA_F01qvjpB07V5DPUH16573nzrjQCdkWOOJRKvfihwPtQ-yf4X8GCwPq0Rndhuka5qjKBbJkmbwWNuSXqGOgTfsqqkNd-YA5MuM0Whb4mqw-BnWUa4_v0-gNkpzQg5QEZnLWcVqlAGCvTjxeOGEsTqReUiZzQOe6sJNT8_c8T8umQFXz-SdDg09UXk6lNs5JjipsdRx2WsB-0hVzCiRbxD3OMz6q2Id5rpJnD9nTOB_M8hzEZEEZFWaEsUb5AO1zEhgaCAjw9OezBhABIgwI79XpswYQ_5Pr3ANQ2Neh4Nn0uoSwAVIHCNC9jc_ZGmDT_vSmkJXozvcBahsKDAiqnumzBhC6zaaCAxIHCAEQr_27BhgyIAA" } ================================================ FILE: test-data/notebooks2/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.project_id" }, { "key": "resource.zone" }, { "key": "resource.instance_id" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_utilization_max", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "10^2.%" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "gcpdiag-notebooks2-aaaa" }, { "stringValue": "us-west1-a" }, { "stringValue": "7519326121542266893" }, { "stringValue": "notebooks2instance-ok" } ], "pointData": [ { "values": [ { "doubleValue": 0.022391958608412092 } ], "timeInterval": { "startTime": "2024-06-25T04:56:24.619964Z", "endTime": "2024-06-25T04:56:24.619964Z" } } ] }, { "labelValues": [ { "stringValue": "gcpdiag-notebooks2-aaaa" }, { "stringValue": "us-west1-a" }, { "stringValue": "4775836342981993096" }, { "stringValue": "notebooks2instance-provisioning-stuck" } ], "pointData": [ { "values": [ { "doubleValue": 0.019849973913744635 } ], "timeInterval": { "startTime": "2024-06-25T04:56:24.619964Z", "endTime": "2024-06-25T04:56:24.619964Z" } } ] } ] } ================================================ FILE: test-data/notebooks2/json-dumps/notebooks2instance-ok-check-upgradability.json ================================================ { "upgradeable": false, "upgradeVersion": "", "upgradeInfo": "Current and latest available image are the same", "upgradeImage": "" } ================================================ FILE: test-data/notebooks2/json-dumps/notebooks2instance-provisioning-stuck-check-upgradability.json ================================================ { "upgradeable": true, "upgradeVersion": "m122", "upgradeInfo": "A new image is available for upgrade. Backup user data before upgrading", "upgradeImage": "https://www.googleapis.com/compute/v1/projects/cloud-notebooks-managed/global/images/workbench-instances-v20240613" } ================================================ FILE: test-data/notebooks2/json-dumps/org-constraint-compute.disableSerialPortAccess.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.disableSerialPortAccess" } ================================================ FILE: test-data/notebooks2/json-dumps/org-constraint-compute.disableSerialPortLogging.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.disableSerialPortLogging" } ================================================ FILE: test-data/notebooks2/json-dumps/org-constraint-compute.disableSshInBrowser.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.disableSshInBrowser" } ================================================ FILE: test-data/notebooks2/json-dumps/org-constraint-compute.requireOsLogin.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireOsLogin" } ================================================ FILE: test-data/notebooks2/json-dumps/org-constraint-compute.requireShieldedVm.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/compute.requireShieldedVm" } ================================================ FILE: test-data/notebooks2/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/iam.automaticIamGrantsForDefaultServiceAccounts" } ================================================ FILE: test-data/notebooks2/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json ================================================ { "booleanPolicy": {}, "constraint": "constraints/iam.disableCrossProjectServiceAccountUsage" } ================================================ FILE: test-data/notebooks2/json-dumps/project.json ================================================ { "name": "projects/12340012", "parent": "folders/135791208641", "projectId": "gcpdiag-notebooks2-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - notebooks2", "createTime": "2024-06-24T23:13:18.062235Z", "updateTime": "2024-06-24T23:13:18.062235Z", "etag": "W/\"5da8435414a342b0\"", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/notebooks2/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340012/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_connections_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340012" }, { "name": "projects/12340012/services/notebooks.googleapis.com", "config": { "name": "notebooks.googleapis.com", "title": "Notebooks API", "documentation": { "summary": "Notebooks API is used to manage notebook resources in Google Cloud." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "notebooks.googleapis.com/Runtime", "displayName": "Notebooks Runtime", "description": "A managed notebooks instance.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The region of the runtime." }, { "key": "runtime_id", "description": "The user-provided unique ID for the runtime." } ], "launchStage": "BETA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "notebooks.googleapis.com/Runtime", "metrics": [ "notebooks.googleapis.com/runtime/health", "notebooks.googleapis.com/runtime/kernel/startup_latencies", "notebooks.googleapis.com/runtime/proxy/response_count" ] }, { "monitoredResource": "gce_instance", "metrics": [ "notebooks.googleapis.com/instance/proxy_agent/crash_count", "notebooks.googleapis.com/instance/proxy_agent/response_count", "notebooks.googleapis.com/instance/jupyter/crash_count", "notebooks.googleapis.com/instance/jupyter/container_crash_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340012" }, { "name": "projects/12340012/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340012" }, { "name": "projects/12340012/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340012" } ] } ================================================ FILE: test-data/notebooks2/json-dumps/workbench-instances.json ================================================ { "instances": [ { "name": "projects/gcpdiag-notebooks2-aaaa/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck", "gceSetup": { "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/machineTypes/e2-standard-4", "serviceAccounts": [ { "email": "12340012-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/userinfo.email" ] } ], "containerImage": { "repository": "us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310", "tag": "m118" }, "bootDisk": { "diskSizeGb": "150", "diskEncryption": "GMEK" }, "dataDisks": [ { "diskSizeGb": "100", "diskEncryption": "GMEK" } ], "shieldedInstanceConfig": { "enableVtpm": true, "enableIntegrityMonitoring": true }, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/wbi-test-default", "subnet": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/wbi-test-default" } ], "disablePublicIp": true, "tags": [ "deeplearning-vm", "notebook-instance" ], "metadata": { "enable-guest-attributes": "TRUE", "post-startup-script": "#! /bin/bash", "user-data": "#include file:///mnt/stateful_partition/workbench/cloud-config.yaml", "serial-port-logging-enable": "true", "report-event-url": "https://notebooks.googleapis.com/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem", "disable-mixer": "true", "notebooks-api": "PROD", "google-logging-enabled": "true", "disable-swap-binaries": "true", "terraform": "true", "report-event-health": "true", "service-account-mode": "true", "enable-oslogin": "TRUE", "proxy-mode": "service_account", "shutdown-script": "/opt/deeplearning/bin/shutdown_script.sh", "custom-container-payload": "us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310:m118", "report-dns-resolution": "true", "cos-update-strategy": "update_disabled", "proxy-registration-url": "https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14", "proxy-backend-id": "1b1dcbcb4ec643e8", "proxy-url": "1b1dcbcb4ec643e8-dot-us-west1.notebooks.googleusercontent.com", "notebooks-api-version": "v2", "container": "us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310:m118", "custom-container-image": "true", "proxy-byoid-url": "1b1dcbcb4ec643e8-dot-us-west1.notebooks.byoid.googleusercontent.com" }, "gpuDriverConfig": {} }, "proxyUri": "1b1dcbcb4ec643e8-dot-us-west1.notebooks.googleusercontent.com", "state": "PROVISIONING", "id": "66917948-86fd-40c0-b6ac-50e599bdd4e8", "createTime": "2024-06-25T00:45:45.057675437Z", "updateTime": "2024-06-25T00:46:02.584714415Z", "labels": { "consumer-project-id": "gcpdiag-notebooks2-aaaa", "consumer-project-number": "12340012", "notebooks-product": "workbench-instances", "resource-name": "notebooks2instance-provisioning-stuck" }, "thirdPartyProxyUrl": "1b1dcbcb4ec643e8-dot-us-west1.notebooks.byoid.googleusercontent.com", "satisfiesPzi": true }, { "name": "projects/gcpdiag-notebooks2-aaaa/locations/us-west1-a/instances/notebooks2instance-ok", "gceSetup": { "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/machineTypes/e2-standard-4", "serviceAccounts": [ { "email": "12340012-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/userinfo.email" ] } ], "bootDisk": { "diskSizeGb": "150", "diskEncryption": "GMEK" }, "dataDisks": [ { "diskSizeGb": "100", "diskEncryption": "GMEK" } ], "shieldedInstanceConfig": { "enableVtpm": true, "enableIntegrityMonitoring": true }, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/default", "subnet": "https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/default" } ], "tags": [ "deeplearning-vm", "notebook-instance" ], "metadata": { "version": "122", "restriction": "", "serial-port-logging-enable": "true", "disable-swap-binaries": "true", "shutdown-script": "/opt/deeplearning/bin/shutdown_script.sh", "terraform": "true", "title": "workbench", "proxy-byoid-url": "341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com", "proxy-registration-url": "https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14", "proxy-backend-id": "341a9c04117d5a9e", "report-event-health": "true", "idle-timeout-seconds": "10800", "notebooks-api": "PROD", "proxy-url": "341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com", "report-dns-resolution": "true", "proxy-mode": "service_account", "enable-oslogin": "TRUE", "notebooks-api-version": "v2", "enable-guest-attributes": "TRUE", "disable-mixer": "true", "framework": "workbench" }, "gpuDriverConfig": {} }, "proxyUri": "341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com", "state": "ACTIVE", "id": "2a0b7e06-ddcc-4530-acbf-cf76b78a3e80", "healthState": "HEALTHY", "healthInfo": { "docker_proxy_agent_status": "1", "jupyterlab_status": "1", "jupyterlab_api_status": "1", "notebooks_api_dns": "1", "proxy_registration_dns": "1", "last_updated": "2024-06-25T00:57:20+00:00", "system_health": "1", "docker_status": "1" }, "createTime": "2024-06-25T00:27:07.479890065Z", "updateTime": "2024-06-25T00:57:20.945822754Z", "labels": { "notebooks-product": "workbench-instances", "resource-name": "notebooks2instance-ok", "consumer-project-id": "gcpdiag-notebooks2-aaaa", "consumer-project-number": "12340012" }, "thirdPartyProxyUrl": "341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com", "satisfiesPzi": true } ] } ================================================ FILE: test-data/notebooks2/network.tf ================================================ /** * Copyright 2024 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. */ resource "google_compute_network" "my_network" { project = google_project.project.project_id name = "wbi-test-default" description = "VPC network" auto_create_subnetworks = false provider = google-old } resource "google_compute_subnetwork" "my_subnetwork" { project = google_project.project.project_id name = "wbi-test-default" network = google_compute_network.my_network.id region = "us-west1" ip_cidr_range = "10.0.1.0/24" provider = google-old } ================================================ FILE: test-data/notebooks2/project.tf ================================================ /** * Copyright 2024 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. */ terraform { required_providers { google = { source = "hashicorp/google" version = ">= 5.23.1" } google-old = { source = "hashicorp/google" } } } resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - notebooks2" project_id = "gcpdiag-notebooks2-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_project_service" "notebooks" { project = google_project.project.project_id service = "notebooks.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/notebooks2/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/osconfig1/Makefile ================================================ PROJECT_ID := $(shell terraform output project_id | sed -e 's|"||g') PROJECT_NR := $(shell terraform output -json project_nr | sed -e 's|"||g') FOLDER_ID := $(shell terraform output -json folder_id | sed -e 's|"||g') ORG_ID := $(shell terraform output -json org_id | sed -e 's|"||g') INSTANCE = $(shell terraform output -json instance_name | sed -e 's|"||g') CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner LOCATION = us-central1-a FAKE_FOLDER_ID = 9839384 FAKE_PROJECT_ID = fake-project FAKE_PROJECT_NR = 12340051 FAKE_ORG_ID = 11112222 FAKE_INSTANCE_NAME = fake-instance SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID)/$(FAKE_PROJECT_ID)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ -e "s/$(FOLDER_ID)/$(FAKE_FOLDER_ID)/" \ -e "s/$(INSTANCE)/$(FAKE_INSTANCE_NAME)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/inventory.json \ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/inventory.json: $(CURL) -fv \ 'https://osconfig.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE}/inventory?view=full' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/osconfig1/json-dumps/inventories.json ================================================ { "inventories": [ { "osInfo": { "longName": "Microsoft Windows Server 2022 Datacenter", "shortName": "windows", "version": "10.0.20348", "architecture": "x86_64", "kernelVersion": "10.0.20348.2520 (WinBuild.160101.0800)", "kernelRelease": "10.0.20348.2520", "osconfigAgentVersion": "20240320.00.0+win@1", "hostname": "instance-windows-oa-installed-2" }, "items": { "installedPackage-GooGet - google-cloud-ops-agent:2.47.0@1:": { "id": "installedPackage-GooGet - google-cloud-ops-agent:2.47.0@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-cloud-ops-agent", "displayVersion": "2.47.0@1", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873449Z" }, "installedPackage-c01629fc-64ea-45f3-b7cb-cabc7d566933:200": { "id": "installedPackage-c01629fc-64ea-45f3-b7cb-cabc7d566933:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "Update for Windows Defender Antivirus antimalware platform - KB4052623 (Version 4.18.2001.10)", "description": "This package will update Windows Defender Antivirus antimalware platform’s components on the user machine.", "categories": [ { "id": "8c3fcc84-7410-4a95-8b89-a166a0190486", "name": "Microsoft Defender Antivirus" }, { "id": "cd5ffd1e-e932-4e3a-bf74-18bf0b1bbd83", "name": "Updates" } ], "kbArticleIds": [ "4052623" ], "moreInfoUrls": [ "https://support.microsoft.com/en-us/help/4052623/update-for-windows-defender-antimalware-platform" ], "updateId": "c01629fc-64ea-45f3-b7cb-cabc7d566933", "revisionNumber": 200, "lastDeploymentChangeTime": "2020-05-01T00:00:00Z", "supportUrl": "https://go.microsoft.com/fwlink/?linkid=862339" } }, "createTime": "2024-06-25T17:07:40.873443Z" }, "installedPackage-KB5039227": { "id": "installedPackage-KB5039227", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "qfePackage": { "caption": "https://support.microsoft.com/help/5039227", "description": "Security Update", "hotFixId": "KB5039227", "installTime": "2024-06-12T00:00:00Z" } }, "createTime": "2024-06-25T17:07:40.873447Z" }, "installedPackage-google-osconfig-agent:x86_64:20240320.00.0+win@1": { "id": "installedPackage-google-osconfig-agent:x86_64:20240320.00.0+win@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "20240320.00.0+win@1", "packageName": "google-osconfig-agent" } }, "createTime": "2024-06-25T17:07:40.873442Z" }, "installedPackage-GooGet - google-compute-engine-vss:1.1.9@56:": { "id": "installedPackage-GooGet - google-compute-engine-vss:1.1.9@56:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-vss", "displayVersion": "1.1.9@56", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873454Z" }, "installedPackage-google-compute-engine-driver-pvpanic:x86_64:16.1.8@9": { "id": "installedPackage-google-compute-engine-driver-pvpanic:x86_64:16.1.8@9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "16.1.8@9", "packageName": "google-compute-engine-driver-pvpanic" } }, "createTime": "2024-06-25T17:07:40.873438Z" }, "installedPackage-google-compute-engine-powershell:noarch:20220728.00@1": { "id": "installedPackage-google-compute-engine-powershell:noarch:20220728.00@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "noarch", "version": "20220728.00@1", "packageName": "google-compute-engine-powershell" } }, "createTime": "2024-06-25T17:07:40.873440Z" }, "installedPackage-KB5039343": { "id": "installedPackage-KB5039343", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "qfePackage": { "description": "Security Update", "hotFixId": "KB5039343", "installTime": "2024-06-12T00:00:00Z" } }, "createTime": "2024-06-25T17:07:40.873448Z" }, "installedPackage-certgen:x86_64:20220603.00.0@1": { "id": "installedPackage-certgen:x86_64:20220603.00.0@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "20220603.00.0@1", "packageName": "certgen" } }, "createTime": "2024-06-25T17:07:40.873433Z" }, "installedPackage-google-compute-engine-metadata-scripts:x86_64:20240109.00.0@1": { "id": "installedPackage-google-compute-engine-metadata-scripts:x86_64:20240109.00.0@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "20240109.00.0@1", "packageName": "google-compute-engine-metadata-scripts" } }, "createTime": "2024-06-25T17:07:40.873439Z" }, "installedPackage-3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9:200": { "id": "installedPackage-3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "Windows Malicious Software Removal Tool x64 - v5.125 (KB890830)", "description": "After the download, this tool runs one time to check your computer for infection by specific, prevalent malicious software (including Blaster, Sasser, and Mydoom) and helps remove any infection that is found. If an infection is found, the tool will display a status report the next time that you start your computer. A new version of the tool will be offered every month. If you want to manually run the tool on your computer, you can download a copy from the Microsoft Download Center, or you can run an online version from microsoft.com. This tool is not a replacement for an antivirus product. To help protect your computer, you should use an antivirus product.", "categories": [ { "id": "28bc880e-0592-4cbf-8f95-c79b17911d5f", "name": "Update Rollups" }, { "id": "569e8e8f-c6cd-42c8-92a3-efbb20a0f6f5", "name": "Windows Server 2016" }, { "id": "f702a48c-919b-45d6-9aef-ca4248d50397", "name": "Windows Server 2019" }, { "id": "21210d67-50bc-4254-a695-281765e10665", "name": "Windows Server, version 1903 and later" } ], "kbArticleIds": [ "890830" ], "moreInfoUrls": [ "http://support.microsoft.com/kb/890830" ], "updateId": "3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-06-11T00:00:00Z", "supportUrl": "http://support.microsoft.com" } }, "createTime": "2024-06-25T17:07:40.873444Z" }, "availablePackage-81de234d-bcac-4306-81e0-f9751fa53436:200": { "id": "availablePackage-81de234d-bcac-4306-81e0-f9751fa53436:200", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "wuaPackage": { "title": "Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.413.510.0) - Current Channel (Broad)", "description": "Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once you have installed this item, it cannot be removed.", "categories": [ { "id": "e0789628-ce08-4437-be74-2495b842f43b", "name": "Definition Updates" }, { "id": "8c3fcc84-7410-4a95-8b89-a166a0190486", "name": "Microsoft Defender Antivirus" } ], "kbArticleIds": [ "2267602" ], "moreInfoUrls": [ "https://go.microsoft.com/fwlink/?linkid=2007160" ], "updateId": "81de234d-bcac-4306-81e0-f9751fa53436", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-06-25T00:00:00Z", "supportUrl": "https://go.microsoft.com/fwlink/?LinkId=52661" } }, "createTime": "2024-06-25T17:07:40.873430Z" }, "installedPackage-google-compute-engine-driver-gvnic:x86_64:1.0.4@73": { "id": "installedPackage-google-compute-engine-driver-gvnic:x86_64:1.0.4@73", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "1.0.4@73", "packageName": "google-compute-engine-driver-gvnic" } }, "createTime": "2024-06-25T17:07:40.873437Z" }, "installedPackage-google-compute-engine-driver-balloon:x86_64:16.1.8@9": { "id": "installedPackage-google-compute-engine-driver-balloon:x86_64:16.1.8@9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "16.1.8@9", "packageName": "google-compute-engine-driver-balloon" } }, "createTime": "2024-06-25T17:07:40.873436Z" }, "installedPackage-google-compute-engine-sysprep:noarch:20240122.00@1": { "id": "installedPackage-google-compute-engine-sysprep:noarch:20240122.00@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "noarch", "version": "20240122.00@1", "packageName": "google-compute-engine-sysprep" } }, "createTime": "2024-06-25T17:07:40.873441Z" }, "installedPackage-GooGet - google-compute-engine-driver-pvpanic:16.1.8@9:": { "id": "installedPackage-GooGet - google-compute-engine-driver-pvpanic:16.1.8@9:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-pvpanic", "displayVersion": "16.1.8@9", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873452Z" }, "installedPackage-28facac6-b366-4845-a057-b634c0ee206e:200": { "id": "installedPackage-28facac6-b366-4845-a057-b634c0ee206e:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "Update for Microsoft Defender Antivirus antimalware platform - KB4052623 (Version 4.18.24050.7) - Current Channel (Broad)", "description": "This package will update Microsoft Defender Antivirus antimalware platform’s components on the user machine.", "categories": [ { "id": "e0789628-ce08-4437-be74-2495b842f43b", "name": "Definition Updates" }, { "id": "8c3fcc84-7410-4a95-8b89-a166a0190486", "name": "Microsoft Defender Antivirus" } ], "kbArticleIds": [ "4052623" ], "moreInfoUrls": [ "https://support.microsoft.com/en-us/help/4052623/update-for-windows-defender-antimalware-platform" ], "updateId": "28facac6-b366-4845-a057-b634c0ee206e", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-06-04T00:00:00Z", "supportUrl": "https://go.microsoft.com/fwlink/?linkid=862339" } }, "createTime": "2024-06-25T17:07:40.873444Z" }, "installedPackage-GooGet - googet:2.18.5@0:": { "id": "installedPackage-GooGet - googet:2.18.5@0:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - googet", "displayVersion": "2.18.5@0", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873449Z" }, "installedPackage-GooGet - google-compute-engine-driver-gga:1.1.6@9:": { "id": "installedPackage-GooGet - google-compute-engine-driver-gga:1.1.6@9:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-gga", "displayVersion": "1.1.6@9", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873450Z" }, "installedPackage-GooGet - google-compute-engine-windows:20240109.00.0@1:": { "id": "installedPackage-GooGet - google-compute-engine-windows:20240109.00.0@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-windows", "displayVersion": "20240109.00.0@1", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873454Z" }, "installedPackage-GooGet - google-compute-engine-driver-vioscsi:16.1.8@9:": { "id": "installedPackage-GooGet - google-compute-engine-driver-vioscsi:16.1.8@9:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-vioscsi", "displayVersion": "16.1.8@9", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873452Z" }, "installedPackage-b9c6a7ec-27ec-4938-b472-210255dab739:200": { "id": "installedPackage-b9c6a7ec-27ec-4938-b472-210255dab739:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "2024-05 Cumulative Update for .NET Framework 3.5, 4.8 and 4.8.1 for Microsoft server operating system version 21H2 for x64 (KB5038282)", "description": "Install this update to resolve issues in Windows. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.", "categories": [ { "id": "71718f13-7324-4b0f-8f9e-2ca9dc978e53", "name": "Microsoft Server operating system-21H2" }, { "id": "cd5ffd1e-e932-4e3a-bf74-18bf0b1bbd83", "name": "Updates" } ], "kbArticleIds": [ "5038282" ], "moreInfoUrls": [ "http://support.microsoft.com/kb/5038282" ], "updateId": "b9c6a7ec-27ec-4938-b472-210255dab739", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-05-14T00:00:00Z", "supportUrl": "http://support.microsoft.com" } }, "createTime": "2024-06-25T17:07:40.873443Z" }, "availablePackage-google-cloud-ops-agent:x86_64:2.48.0@1": { "id": "availablePackage-google-cloud-ops-agent:x86_64:2.48.0@1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "googetPackage": { "architecture": "x86_64", "version": "2.48.0@1", "packageName": "google-cloud-ops-agent" } }, "createTime": "2024-06-25T17:07:40.873427Z" }, "installedPackage-GooGet - google-compute-engine-metadata-scripts:20240109.00.0@1:": { "id": "installedPackage-GooGet - google-compute-engine-metadata-scripts:20240109.00.0@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-metadata-scripts", "displayVersion": "20240109.00.0@1", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873453Z" }, "installedPackage-PowerShell 7-x64:7.4.2.0:Microsoft Corporation": { "id": "installedPackage-PowerShell 7-x64:7.4.2.0:Microsoft Corporation", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "PowerShell 7-x64", "displayVersion": "7.4.2.0", "publisher": "Microsoft Corporation", "installDate": { "year": 2024, "month": 5, "day": 14 }, "helpLink": "https://github.com/PowerShell/PowerShell" } }, "createTime": "2024-06-25T17:07:40.873456Z" }, "installedPackage-google-cloud-ops-agent:x86_64:2.47.0@1": { "id": "installedPackage-google-cloud-ops-agent:x86_64:2.47.0@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "2.47.0@1", "packageName": "google-cloud-ops-agent" } }, "createTime": "2024-06-25T17:07:40.873435Z" }, "installedPackage-KB5037930": { "id": "installedPackage-KB5037930", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "qfePackage": { "caption": "http://support.microsoft.com/?kbid=5037930", "description": "Update", "hotFixId": "KB5037930", "installTime": "2024-05-14T00:00:00Z" } }, "createTime": "2024-06-25T17:07:40.873447Z" }, "installedPackage-PowerShell 7.4.2.0-x64:7.4.2.0:Microsoft Corporation": { "id": "installedPackage-PowerShell 7.4.2.0-x64:7.4.2.0:Microsoft Corporation", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "PowerShell 7.4.2.0-x64", "displayVersion": "7.4.2.0", "publisher": "Microsoft Corporation", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873457Z" }, "installedPackage-GooGet - google-compute-engine-driver-balloon:16.1.8@9:": { "id": "installedPackage-GooGet - google-compute-engine-driver-balloon:16.1.8@9:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-balloon", "displayVersion": "16.1.8@9", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873450Z" }, "installedPackage-GooGet - google-osconfig-agent:20240320.00.0+win@1:": { "id": "installedPackage-GooGet - google-osconfig-agent:20240320.00.0+win@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-osconfig-agent", "displayVersion": "20240320.00.0+win@1", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873455Z" }, "installedPackage-googet:x86_64:2.18.5@0": { "id": "installedPackage-googet:x86_64:2.18.5@0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "2.18.5@0", "packageName": "googet" } }, "createTime": "2024-06-25T17:07:40.873434Z" }, "installedPackage-google-compute-engine-driver-netkvm:x86_64:16.1.8@76": { "id": "installedPackage-google-compute-engine-driver-netkvm:x86_64:16.1.8@76", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "16.1.8@76", "packageName": "google-compute-engine-driver-netkvm" } }, "createTime": "2024-06-25T17:07:40.873437Z" }, "installedPackage-GooGet - google-compute-engine-driver-gvnic:1.0.4@73:": { "id": "installedPackage-GooGet - google-compute-engine-driver-gvnic:1.0.4@73:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-gvnic", "displayVersion": "1.0.4@73", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873451Z" }, "availablePackage-google-osconfig-agent:x86_64:20240524.03.0+win@1": { "id": "availablePackage-google-osconfig-agent:x86_64:20240524.03.0+win@1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "googetPackage": { "architecture": "x86_64", "version": "20240524.03.0+win@1", "packageName": "google-osconfig-agent" } }, "createTime": "2024-06-25T17:07:40.873429Z" }, "installedPackage-google-compute-engine-driver-gga:x86_64:1.1.6@9": { "id": "installedPackage-google-compute-engine-driver-gga:x86_64:1.1.6@9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "1.1.6@9", "packageName": "google-compute-engine-driver-gga" } }, "createTime": "2024-06-25T17:07:40.873437Z" }, "installedPackage-4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed:1": { "id": "installedPackage-4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed:1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "2024-06 Cumulative Update for Microsoft server operating system version 21H2 for x64-based Systems (KB5039227)", "description": "Install this update to resolve issues in Microsoft server operating system, version 21H2. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.", "categories": [ { "id": "0fa1201d-4330-4fa8-8ae9-b877473b6441", "name": "Security Updates" } ], "kbArticleIds": [ "5039227" ], "moreInfoUrls": [ "https://support.microsoft.com/help/5039227" ], "updateId": "4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed", "revisionNumber": 1, "lastDeploymentChangeTime": "2024-06-11T00:00:00Z", "supportUrl": "https://support.microsoft.com/help/5039227" } }, "createTime": "2024-06-25T17:07:40.873445Z" }, "installedPackage-Microsoft Edge:126.0.2592.68:Microsoft Corporation": { "id": "installedPackage-Microsoft Edge:126.0.2592.68:Microsoft Corporation", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "Microsoft Edge", "displayVersion": "126.0.2592.68", "publisher": "Microsoft Corporation", "installDate": { "year": 2024, "month": 6, "day": 22 } } }, "createTime": "2024-06-25T17:07:40.873457Z" }, "installedPackage-google-compute-engine-vss:x86_64:1.1.9@56": { "id": "installedPackage-google-compute-engine-vss:x86_64:1.1.9@56", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "1.1.9@56", "packageName": "google-compute-engine-vss" } }, "createTime": "2024-06-25T17:07:40.873441Z" }, "installedPackage-GooGet - google-compute-engine-sysprep:20240122.00@1:": { "id": "installedPackage-GooGet - google-compute-engine-sysprep:20240122.00@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-sysprep", "displayVersion": "20240122.00@1", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873453Z" }, "installedPackage-google-compute-engine-windows:x86_64:20240109.00.0@1": { "id": "installedPackage-google-compute-engine-windows:x86_64:20240109.00.0@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "20240109.00.0@1", "packageName": "google-compute-engine-windows" } }, "createTime": "2024-06-25T17:07:40.873442Z" }, "installedPackage-google-compute-engine-driver-vioscsi:x86_64:16.1.8@9": { "id": "installedPackage-google-compute-engine-driver-vioscsi:x86_64:16.1.8@9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "16.1.8@9", "packageName": "google-compute-engine-driver-vioscsi" } }, "createTime": "2024-06-25T17:07:40.873438Z" }, "installedPackage-GooGet - google-compute-engine-driver-netkvm:16.1.8@76:": { "id": "installedPackage-GooGet - google-compute-engine-driver-netkvm:16.1.8@76:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-netkvm", "displayVersion": "16.1.8@76", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873452Z" }, "installedPackage-5c1cb396-fb49-4919-93ac-72d4db78836a:200": { "id": "installedPackage-5c1cb396-fb49-4919-93ac-72d4db78836a:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.413.505.0) - Current Channel (Broad)", "description": "Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once you have installed this item, it cannot be removed.", "categories": [ { "id": "e0789628-ce08-4437-be74-2495b842f43b", "name": "Definition Updates" }, { "id": "8c3fcc84-7410-4a95-8b89-a166a0190486", "name": "Microsoft Defender Antivirus" } ], "kbArticleIds": [ "2267602" ], "moreInfoUrls": [ "https://go.microsoft.com/fwlink/?linkid=2007160" ], "updateId": "5c1cb396-fb49-4919-93ac-72d4db78836a", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-06-25T00:00:00Z", "supportUrl": "https://go.microsoft.com/fwlink/?LinkId=52661" } }, "createTime": "2024-06-25T17:07:40.873445Z" }, "installedPackage-KB5034439": { "id": "installedPackage-KB5034439", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "qfePackage": { "caption": "https://support.microsoft.com/help/5034439", "description": "Security Update", "hotFixId": "KB5034439", "installTime": "2024-05-14T00:00:00Z" } }, "createTime": "2024-06-25T17:07:40.873448Z" }, "installedPackage-Google Cloud SDK::Google LLC": { "id": "installedPackage-Google Cloud SDK::Google LLC", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "Google Cloud SDK", "publisher": "Google LLC", "installDate": {} } }, "createTime": "2024-06-25T17:07:40.873456Z" }, "installedPackage-google-compute-engine-diagnostics:x86_64:1.2.0@0": { "id": "installedPackage-google-compute-engine-diagnostics:x86_64:1.2.0@0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "1.2.0@0", "packageName": "google-compute-engine-diagnostics" } }, "createTime": "2024-06-25T17:07:40.873436Z" } }, "name": "projects/12340051/locations/us-central1-a/instances/730128809742038298/inventory", "updateTime": "2024-06-25T17:07:40.888375Z" }, { "osInfo": { "longName": "Red Hat Enterprise Linux Server 7.9 (Maipo)", "shortName": "rhel", "version": "7.9", "architecture": "x86_64", "kernelVersion": "#1 SMP Thu Apr 4 03:33:23 EDT 2024", "kernelRelease": "3.10.0-1160.118.1.el7.x86_64", "osconfigAgentVersion": "20240501.03-g1.el7", "hostname": "rhel-7" }, "items": { "installedPackage-perl-Carp:all:1.26-244.el7": { "id": "installedPackage-perl-Carp:all:1.26-244.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.26-244.el7", "packageName": "perl-Carp" } }, "createTime": "2024-06-25T15:09:42.943077Z" }, "installedPackage-ustr:x86_64:1.0.4-16.el7": { "id": "installedPackage-ustr:x86_64:1.0.4-16.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.0.4-16.el7", "packageName": "ustr" } }, "createTime": "2024-06-25T15:09:42.943209Z" }, "installedPackage-kernel-tools:x86_64:3.10.0-1160.118.1.el7": { "id": "installedPackage-kernel-tools:x86_64:3.10.0-1160.118.1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.118.1.el7", "packageName": "kernel-tools" } }, "createTime": "2024-06-25T15:09:42.943186Z" }, "installedPackage-libnetfilter_conntrack:x86_64:1.0.6-1.el7_3": { "id": "installedPackage-libnetfilter_conntrack:x86_64:1.0.6-1.el7_3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.0.6-1.el7_3", "packageName": "libnetfilter_conntrack" } }, "createTime": "2024-06-25T15:09:42.943083Z" }, "availablePackage-kernel:x86_64:3.10.0-1160.119.1.el7": { "id": "availablePackage-kernel:x86_64:3.10.0-1160.119.1.el7", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.119.1.el7", "packageName": "kernel" } }, "createTime": "2024-06-25T15:09:42.943043Z" }, "installedPackage-polkit-pkla-compat:x86_64:0.1-4.el7": { "id": "installedPackage-polkit-pkla-compat:x86_64:0.1-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.1-4.el7", "packageName": "polkit-pkla-compat" } }, "createTime": "2024-06-25T15:09:42.943165Z" }, "installedPackage-libss:x86_64:1.42.9-19.el7": { "id": "installedPackage-libss:x86_64:1.42.9-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.42.9-19.el7", "packageName": "libss" } }, "createTime": "2024-06-25T15:09:42.943206Z" }, "installedPackage-glibc:x86_64:2.17-326.el7_9.3": { "id": "installedPackage-glibc:x86_64:2.17-326.el7_9.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.17-326.el7_9.3", "packageName": "glibc" } }, "createTime": "2024-06-25T15:09:42.943164Z" }, "availablePackage-google-cloud-ops-agent:x86_64:2.48.0-1.el7": { "id": "availablePackage-google-cloud-ops-agent:x86_64:2.48.0-1.el7", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "2.48.0-1.el7", "packageName": "google-cloud-ops-agent" } }, "createTime": "2024-06-25T15:09:42.943050Z" }, "installedPackage-elfutils-default-yama-scope:all:0.176-5.el7": { "id": "installedPackage-elfutils-default-yama-scope:all:0.176-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.176-5.el7", "packageName": "elfutils-default-yama-scope" } }, "createTime": "2024-06-25T15:09:42.943105Z" }, "installedPackage-libicu:x86_64:50.2-4.el7_7": { "id": "installedPackage-libicu:x86_64:50.2-4.el7_7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "50.2-4.el7_7", "packageName": "libicu" } }, "createTime": "2024-06-25T15:09:42.943131Z" }, "installedPackage-emacs-filesystem:all:1:24.3-23.el7_9.1": { "id": "installedPackage-emacs-filesystem:all:1:24.3-23.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:24.3-23.el7_9.1", "packageName": "emacs-filesystem" } }, "createTime": "2024-06-25T15:09:42.943189Z" }, "installedPackage-nss-pem:x86_64:1.0.3-7.el7_9.1": { "id": "installedPackage-nss-pem:x86_64:1.0.3-7.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.0.3-7.el7_9.1", "packageName": "nss-pem" } }, "createTime": "2024-06-25T15:09:42.943148Z" }, "installedPackage-teamd:x86_64:1.29-3.el7": { "id": "installedPackage-teamd:x86_64:1.29-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.29-3.el7", "packageName": "teamd" } }, "createTime": "2024-06-25T15:09:42.943190Z" }, "installedPackage-libselinux-python:x86_64:2.5-15.el7": { "id": "installedPackage-libselinux-python:x86_64:2.5-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.5-15.el7", "packageName": "libselinux-python" } }, "createTime": "2024-06-25T15:09:42.943218Z" }, "installedPackage-dosfstools:x86_64:3.0.20-10.el7": { "id": "installedPackage-dosfstools:x86_64:3.0.20-10.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.0.20-10.el7", "packageName": "dosfstools" } }, "createTime": "2024-06-25T15:09:42.943075Z" }, "installedPackage-iwl135-firmware:all:18.168.6.1-83.el7_9": { "id": "installedPackage-iwl135-firmware:all:18.168.6.1-83.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "18.168.6.1-83.el7_9", "packageName": "iwl135-firmware" } }, "createTime": "2024-06-25T15:09:42.943228Z" }, "installedPackage-json-c:x86_64:0.11-4.el7_0": { "id": "installedPackage-json-c:x86_64:0.11-4.el7_0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.11-4.el7_0", "packageName": "json-c" } }, "createTime": "2024-06-25T15:09:42.943101Z" }, "installedPackage-iwl6000g2b-firmware:all:18.168.6.1-83.el7_9": { "id": "installedPackage-iwl6000g2b-firmware:all:18.168.6.1-83.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "18.168.6.1-83.el7_9", "packageName": "iwl6000g2b-firmware" } }, "createTime": "2024-06-25T15:09:42.943106Z" }, "installedPackage-perl-PathTools:x86_64:3.40-5.el7": { "id": "installedPackage-perl-PathTools:x86_64:3.40-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.40-5.el7", "packageName": "perl-PathTools" } }, "createTime": "2024-06-25T15:09:42.943077Z" }, "installedPackage-gmp:x86_64:1:6.0.0-15.el7": { "id": "installedPackage-gmp:x86_64:1:6.0.0-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:6.0.0-15.el7", "packageName": "gmp" } }, "createTime": "2024-06-25T15:09:42.943207Z" }, "installedPackage-grub2-efi-x64:x86_64:1:2.02-0.87.el7_9.14": { "id": "installedPackage-grub2-efi-x64:x86_64:1:2.02-0.87.el7_9.14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:2.02-0.87.el7_9.14", "packageName": "grub2-efi-x64" } }, "createTime": "2024-06-25T15:09:42.943099Z" }, "installedPackage-gzip:x86_64:1.5-11.el7_9": { "id": "installedPackage-gzip:x86_64:1.5-11.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.5-11.el7_9", "packageName": "gzip" } }, "createTime": "2024-06-25T15:09:42.943226Z" }, "installedPackage-plymouth-scripts:x86_64:0.8.9-0.34.20140113.el7": { "id": "installedPackage-plymouth-scripts:x86_64:0.8.9-0.34.20140113.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.8.9-0.34.20140113.el7", "packageName": "plymouth-scripts" } }, "createTime": "2024-06-25T15:09:42.943066Z" }, "installedPackage-xfsprogs:x86_64:4.5.0-22.el7": { "id": "installedPackage-xfsprogs:x86_64:4.5.0-22.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.5.0-22.el7", "packageName": "xfsprogs" } }, "createTime": "2024-06-25T15:09:42.943074Z" }, "installedPackage-python-enum34:all:1.0.4-1.el7": { "id": "installedPackage-python-enum34:all:1.0.4-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.0.4-1.el7", "packageName": "python-enum34" } }, "createTime": "2024-06-25T15:09:42.943211Z" }, "installedPackage-qrencode-libs:x86_64:3.4.1-3.el7": { "id": "installedPackage-qrencode-libs:x86_64:3.4.1-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.4.1-3.el7", "packageName": "qrencode-libs" } }, "createTime": "2024-06-25T15:09:42.943100Z" }, "installedPackage-cronie:x86_64:1.4.11-25.el7_9": { "id": "installedPackage-cronie:x86_64:1.4.11-25.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.4.11-25.el7_9", "packageName": "cronie" } }, "createTime": "2024-06-25T15:09:42.943181Z" }, "installedPackage-grubby:x86_64:8.28-26.el7": { "id": "installedPackage-grubby:x86_64:8.28-26.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "8.28-26.el7", "packageName": "grubby" } }, "createTime": "2024-06-25T15:09:42.943093Z" }, "installedPackage-setup:all:2.8.71-11.el7": { "id": "installedPackage-setup:all:2.8.71-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.8.71-11.el7", "packageName": "setup" } }, "createTime": "2024-06-25T15:09:42.943064Z" }, "installedPackage-nspr:x86_64:4.35.0-1.el7_9": { "id": "installedPackage-nspr:x86_64:4.35.0-1.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.35.0-1.el7_9", "packageName": "nspr" } }, "createTime": "2024-06-25T15:09:42.943084Z" }, "installedPackage-postfix:x86_64:2:2.10.1-9.el7": { "id": "installedPackage-postfix:x86_64:2:2.10.1-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:2.10.1-9.el7", "packageName": "postfix" } }, "createTime": "2024-06-25T15:09:42.943070Z" }, "installedPackage-perl-constant:all:1.27-2.el7": { "id": "installedPackage-perl-constant:all:1.27-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.27-2.el7", "packageName": "perl-constant" } }, "createTime": "2024-06-25T15:09:42.943078Z" }, "installedPackage-hardlink:x86_64:1:1.0-19.el7": { "id": "installedPackage-hardlink:x86_64:1:1.0-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.0-19.el7", "packageName": "hardlink" } }, "createTime": "2024-06-25T15:09:42.943159Z" }, "installedPackage-bzip2-libs:x86_64:1.0.6-13.el7": { "id": "installedPackage-bzip2-libs:x86_64:1.0.6-13.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.0.6-13.el7", "packageName": "bzip2-libs" } }, "createTime": "2024-06-25T15:09:42.943192Z" }, "installedPackage-libattr:x86_64:2.4.46-13.el7": { "id": "installedPackage-libattr:x86_64:2.4.46-13.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.4.46-13.el7", "packageName": "libattr" } }, "createTime": "2024-06-25T15:09:42.943070Z" }, "installedPackage-libcap-ng:x86_64:0.7.5-4.el7": { "id": "installedPackage-libcap-ng:x86_64:0.7.5-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.7.5-4.el7", "packageName": "libcap-ng" } }, "createTime": "2024-06-25T15:09:42.943118Z" }, "installedPackage-gpg-pubkey:(none):352c64e5-52ae6884": { "id": "installedPackage-gpg-pubkey:(none):352c64e5-52ae6884", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "352c64e5-52ae6884", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943128Z" }, "installedPackage-pciutils-libs:x86_64:3.5.1-3.el7": { "id": "installedPackage-pciutils-libs:x86_64:3.5.1-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.5.1-3.el7", "packageName": "pciutils-libs" } }, "createTime": "2024-06-25T15:09:42.943137Z" }, "installedPackage-ca-certificates:all:2023.2.60_v7.0.306-72.el7_9": { "id": "installedPackage-ca-certificates:all:2023.2.60_v7.0.306-72.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2023.2.60_v7.0.306-72.el7_9", "packageName": "ca-certificates" } }, "createTime": "2024-06-25T15:09:42.943141Z" }, "installedPackage-tzdata:all:2024a-1.el7": { "id": "installedPackage-tzdata:all:2024a-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2024a-1.el7", "packageName": "tzdata" } }, "createTime": "2024-06-25T15:09:42.943137Z" }, "installedPackage-python-libs:x86_64:2.7.5-94.el7_9": { "id": "installedPackage-python-libs:x86_64:2.7.5-94.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.7.5-94.el7_9", "packageName": "python-libs" } }, "createTime": "2024-06-25T15:09:42.943088Z" }, "installedPackage-pam:x86_64:1.1.8-23.el7": { "id": "installedPackage-pam:x86_64:1.1.8-23.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.1.8-23.el7", "packageName": "pam" } }, "createTime": "2024-06-25T15:09:42.943213Z" }, "installedPackage-libgcrypt:x86_64:1.5.3-14.el7": { "id": "installedPackage-libgcrypt:x86_64:1.5.3-14.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.5.3-14.el7", "packageName": "libgcrypt" } }, "createTime": "2024-06-25T15:09:42.943115Z" }, "installedPackage-libutempter:x86_64:1.1.6-4.el7": { "id": "installedPackage-libutempter:x86_64:1.1.6-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.1.6-4.el7", "packageName": "libutempter" } }, "createTime": "2024-06-25T15:09:42.943154Z" }, "installedPackage-libstdc++:x86_64:4.8.5-44.el7": { "id": "installedPackage-libstdc++:x86_64:4.8.5-44.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.8.5-44.el7", "packageName": "libstdc++" } }, "createTime": "2024-06-25T15:09:42.943067Z" }, "installedPackage-iptables:x86_64:1.4.21-35.el7": { "id": "installedPackage-iptables:x86_64:1.4.21-35.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.4.21-35.el7", "packageName": "iptables" } }, "createTime": "2024-06-25T15:09:42.943138Z" }, "installedPackage-perl-Time-HiRes:x86_64:4:1.9725-3.el7": { "id": "installedPackage-perl-Time-HiRes:x86_64:4:1.9725-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4:1.9725-3.el7", "packageName": "perl-Time-HiRes" } }, "createTime": "2024-06-25T15:09:42.943124Z" }, "installedPackage-glibc-common:x86_64:2.17-326.el7_9.3": { "id": "installedPackage-glibc-common:x86_64:2.17-326.el7_9.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.17-326.el7_9.3", "packageName": "glibc-common" } }, "createTime": "2024-06-25T15:09:42.943227Z" }, "installedPackage-fxload:x86_64:2002_04_11-16.el7": { "id": "installedPackage-fxload:x86_64:2002_04_11-16.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2002_04_11-16.el7", "packageName": "fxload" } }, "createTime": "2024-06-25T15:09:42.943108Z" }, "installedPackage-perl-Time-Local:all:1.2300-2.el7": { "id": "installedPackage-perl-Time-Local:all:1.2300-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.2300-2.el7", "packageName": "perl-Time-Local" } }, "createTime": "2024-06-25T15:09:42.943128Z" }, "installedPackage-parted:x86_64:3.1-32.el7": { "id": "installedPackage-parted:x86_64:3.1-32.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.1-32.el7", "packageName": "parted" } }, "createTime": "2024-06-25T15:09:42.943118Z" }, "installedPackage-libselinux:x86_64:2.5-15.el7": { "id": "installedPackage-libselinux:x86_64:2.5-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.5-15.el7", "packageName": "libselinux" } }, "createTime": "2024-06-25T15:09:42.943112Z" }, "installedPackage-popt:x86_64:1.13-16.el7": { "id": "installedPackage-popt:x86_64:1.13-16.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.13-16.el7", "packageName": "popt" } }, "createTime": "2024-06-25T15:09:42.943192Z" }, "installedPackage-efibootmgr:x86_64:17-2.el7": { "id": "installedPackage-efibootmgr:x86_64:17-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "17-2.el7", "packageName": "efibootmgr" } }, "createTime": "2024-06-25T15:09:42.943197Z" }, "installedPackage-libsysfs:x86_64:2.1.0-16.el7": { "id": "installedPackage-libsysfs:x86_64:2.1.0-16.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.1.0-16.el7", "packageName": "libsysfs" } }, "createTime": "2024-06-25T15:09:42.943123Z" }, "installedPackage-cyrus-sasl-lib:x86_64:2.1.26-24.el7_9": { "id": "installedPackage-cyrus-sasl-lib:x86_64:2.1.26-24.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.1.26-24.el7_9", "packageName": "cyrus-sasl-lib" } }, "createTime": "2024-06-25T15:09:42.943091Z" }, "installedPackage-iwl3160-firmware:all:25.30.13.0-83.el7_9": { "id": "installedPackage-iwl3160-firmware:all:25.30.13.0-83.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "25.30.13.0-83.el7_9", "packageName": "iwl3160-firmware" } }, "createTime": "2024-06-25T15:09:42.943168Z" }, "installedPackage-libestr:x86_64:0.1.9-2.el7": { "id": "installedPackage-libestr:x86_64:0.1.9-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.1.9-2.el7", "packageName": "libestr" } }, "createTime": "2024-06-25T15:09:42.943160Z" }, "installedPackage-gpg-pubkey:(none):db42a60e-37ea5438": { "id": "installedPackage-gpg-pubkey:(none):db42a60e-37ea5438", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "db42a60e-37ea5438", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943199Z" }, "installedPackage-grub2-tools:x86_64:1:2.02-0.87.el7_9.14": { "id": "installedPackage-grub2-tools:x86_64:1:2.02-0.87.el7_9.14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:2.02-0.87.el7_9.14", "packageName": "grub2-tools" } }, "createTime": "2024-06-25T15:09:42.943180Z" }, "installedPackage-google-cloud-ops-agent:x86_64:2.47.0-1.el7": { "id": "installedPackage-google-cloud-ops-agent:x86_64:2.47.0-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.47.0-1.el7", "packageName": "google-cloud-ops-agent" } }, "createTime": "2024-06-25T15:09:42.943103Z" }, "installedPackage-grep:x86_64:2.20-3.el7": { "id": "installedPackage-grep:x86_64:2.20-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.20-3.el7", "packageName": "grep" } }, "createTime": "2024-06-25T15:09:42.943114Z" }, "installedPackage-plymouth-core-libs:x86_64:0.8.9-0.34.20140113.el7": { "id": "installedPackage-plymouth-core-libs:x86_64:0.8.9-0.34.20140113.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.8.9-0.34.20140113.el7", "packageName": "plymouth-core-libs" } }, "createTime": "2024-06-25T15:09:42.943110Z" }, "installedPackage-yum-cron:all:3.4.3-168.el7": { "id": "installedPackage-yum-cron:all:3.4.3-168.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.4.3-168.el7", "packageName": "yum-cron" } }, "createTime": "2024-06-25T15:09:42.943163Z" }, "installedPackage-gpg-pubkey:(none):fd431d51-4ae0493b": { "id": "installedPackage-gpg-pubkey:(none):fd431d51-4ae0493b", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "fd431d51-4ae0493b", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943130Z" }, "installedPackage-libseccomp:x86_64:2.3.1-4.el7": { "id": "installedPackage-libseccomp:x86_64:2.3.1-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.3.1-4.el7", "packageName": "libseccomp" } }, "createTime": "2024-06-25T15:09:42.943161Z" }, "installedPackage-iputils:x86_64:20160308-10.el7": { "id": "installedPackage-iputils:x86_64:20160308-10.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "20160308-10.el7", "packageName": "iputils" } }, "createTime": "2024-06-25T15:09:42.943167Z" }, "installedPackage-grub2-common:all:1:2.02-0.87.el7_9.14": { "id": "installedPackage-grub2-common:all:1:2.02-0.87.el7_9.14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:2.02-0.87.el7_9.14", "packageName": "grub2-common" } }, "createTime": "2024-06-25T15:09:42.943135Z" }, "installedPackage-pinentry:x86_64:0.8.1-17.el7": { "id": "installedPackage-pinentry:x86_64:0.8.1-17.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.8.1-17.el7", "packageName": "pinentry" } }, "createTime": "2024-06-25T15:09:42.943142Z" }, "installedPackage-libxslt:x86_64:1.1.28-6.el7": { "id": "installedPackage-libxslt:x86_64:1.1.28-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.1.28-6.el7", "packageName": "libxslt" } }, "createTime": "2024-06-25T15:09:42.943205Z" }, "installedPackage-pyxattr:x86_64:0.5.1-5.el7": { "id": "installedPackage-pyxattr:x86_64:0.5.1-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.5.1-5.el7", "packageName": "pyxattr" } }, "createTime": "2024-06-25T15:09:42.943095Z" }, "installedPackage-kmod:x86_64:20-28.el7": { "id": "installedPackage-kmod:x86_64:20-28.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "20-28.el7", "packageName": "kmod" } }, "createTime": "2024-06-25T15:09:42.943102Z" }, "installedPackage-libpciaccess:x86_64:0.14-1.el7": { "id": "installedPackage-libpciaccess:x86_64:0.14-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.14-1.el7", "packageName": "libpciaccess" } }, "createTime": "2024-06-25T15:09:42.943190Z" }, "installedPackage-nss-util:x86_64:3.90.0-1.el7_9": { "id": "installedPackage-nss-util:x86_64:3.90.0-1.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.90.0-1.el7_9", "packageName": "nss-util" } }, "createTime": "2024-06-25T15:09:42.943138Z" }, "installedPackage-perl-libs:x86_64:4:5.16.3-299.el7_9": { "id": "installedPackage-perl-libs:x86_64:4:5.16.3-299.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4:5.16.3-299.el7_9", "packageName": "perl-libs" } }, "createTime": "2024-06-25T15:09:42.943140Z" }, "installedPackage-readline:x86_64:6.2-11.el7": { "id": "installedPackage-readline:x86_64:6.2-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "6.2-11.el7", "packageName": "readline" } }, "createTime": "2024-06-25T15:09:42.943068Z" }, "installedPackage-python-pycparser:all:2.14-1.el7": { "id": "installedPackage-python-pycparser:all:2.14-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.14-1.el7", "packageName": "python-pycparser" } }, "createTime": "2024-06-25T15:09:42.943173Z" }, "installedPackage-grub2-tools-extra:x86_64:1:2.02-0.87.el7_9.14": { "id": "installedPackage-grub2-tools-extra:x86_64:1:2.02-0.87.el7_9.14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:2.02-0.87.el7_9.14", "packageName": "grub2-tools-extra" } }, "createTime": "2024-06-25T15:09:42.943220Z" }, "installedPackage-libgcc:x86_64:4.8.5-44.el7": { "id": "installedPackage-libgcc:x86_64:4.8.5-44.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.8.5-44.el7", "packageName": "libgcc" } }, "createTime": "2024-06-25T15:09:42.943107Z" }, "installedPackage-python-gobject-base:x86_64:3.22.0-1.el7_4.1": { "id": "installedPackage-python-gobject-base:x86_64:3.22.0-1.el7_4.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.22.0-1.el7_4.1", "packageName": "python-gobject-base" } }, "createTime": "2024-06-25T15:09:42.943153Z" }, "installedPackage-elfutils-libs:x86_64:0.176-5.el7": { "id": "installedPackage-elfutils-libs:x86_64:0.176-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.176-5.el7", "packageName": "elfutils-libs" } }, "createTime": "2024-06-25T15:09:42.943163Z" }, "installedPackage-python-idna:all:2.4-1.el7": { "id": "installedPackage-python-idna:all:2.4-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.4-1.el7", "packageName": "python-idna" } }, "createTime": "2024-06-25T15:09:42.943172Z" }, "installedPackage-kbd:x86_64:1.15.5-16.el7_9": { "id": "installedPackage-kbd:x86_64:1.15.5-16.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.15.5-16.el7_9", "packageName": "kbd" } }, "createTime": "2024-06-25T15:09:42.943185Z" }, "installedPackage-firewalld-filesystem:all:0.6.3-13.el7_9": { "id": "installedPackage-firewalld-filesystem:all:0.6.3-13.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.6.3-13.el7_9", "packageName": "firewalld-filesystem" } }, "createTime": "2024-06-25T15:09:42.943183Z" }, "installedPackage-libxml2:x86_64:2.9.1-6.el7_9.6": { "id": "installedPackage-libxml2:x86_64:2.9.1-6.el7_9.6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.9.1-6.el7_9.6", "packageName": "libxml2" } }, "createTime": "2024-06-25T15:09:42.943087Z" }, "installedPackage-systemd-libs:x86_64:219-78.el7_9.9": { "id": "installedPackage-systemd-libs:x86_64:219-78.el7_9.9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "219-78.el7_9.9", "packageName": "systemd-libs" } }, "createTime": "2024-06-25T15:09:42.943085Z" }, "installedPackage-perl-Pod-Escapes:all:1:1.04-299.el7_9": { "id": "installedPackage-perl-Pod-Escapes:all:1:1.04-299.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:1.04-299.el7_9", "packageName": "perl-Pod-Escapes" } }, "createTime": "2024-06-25T15:09:42.943187Z" }, "installedPackage-yum:all:3.4.3-168.el7": { "id": "installedPackage-yum:all:3.4.3-168.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.4.3-168.el7", "packageName": "yum" } }, "createTime": "2024-06-25T15:09:42.943195Z" }, "installedPackage-cracklib:x86_64:2.9.0-11.el7": { "id": "installedPackage-cracklib:x86_64:2.9.0-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.9.0-11.el7", "packageName": "cracklib" } }, "createTime": "2024-06-25T15:09:42.943151Z" }, "installedPackage-python-urllib3:all:1.10.2-7.el7": { "id": "installedPackage-python-urllib3:all:1.10.2-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.10.2-7.el7", "packageName": "python-urllib3" } }, "createTime": "2024-06-25T15:09:42.943090Z" }, "installedPackage-perl-Scalar-List-Utils:x86_64:1.27-248.el7": { "id": "installedPackage-perl-Scalar-List-Utils:x86_64:1.27-248.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.27-248.el7", "packageName": "perl-Scalar-List-Utils" } }, "createTime": "2024-06-25T15:09:42.943076Z" }, "installedPackage-acl:x86_64:2.2.51-15.el7": { "id": "installedPackage-acl:x86_64:2.2.51-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.2.51-15.el7", "packageName": "acl" } }, "createTime": "2024-06-25T15:09:42.943139Z" }, "installedPackage-libcom_err:x86_64:1.42.9-19.el7": { "id": "installedPackage-libcom_err:x86_64:1.42.9-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.42.9-19.el7", "packageName": "libcom_err" } }, "createTime": "2024-06-25T15:09:42.943113Z" }, "installedPackage-chrony:x86_64:3.4-1.el7": { "id": "installedPackage-chrony:x86_64:3.4-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.4-1.el7", "packageName": "chrony" } }, "createTime": "2024-06-25T15:09:42.943117Z" }, "installedPackage-grub2-pc-modules:all:1:2.02-0.87.el7_9.14": { "id": "installedPackage-grub2-pc-modules:all:1:2.02-0.87.el7_9.14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:2.02-0.87.el7_9.14", "packageName": "grub2-pc-modules" } }, "createTime": "2024-06-25T15:09:42.943135Z" }, "installedPackage-python-ipaddr:all:2.1.11-2.el7": { "id": "installedPackage-python-ipaddr:all:2.1.11-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.1.11-2.el7", "packageName": "python-ipaddr" } }, "createTime": "2024-06-25T15:09:42.943155Z" }, "installedPackage-dbus-python:x86_64:1.1.1-9.el7": { "id": "installedPackage-dbus-python:x86_64:1.1.1-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.1.1-9.el7", "packageName": "dbus-python" } }, "createTime": "2024-06-25T15:09:42.943065Z" }, "installedPackage-perl:x86_64:4:5.16.3-299.el7_9": { "id": "installedPackage-perl:x86_64:4:5.16.3-299.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4:5.16.3-299.el7_9", "packageName": "perl" } }, "createTime": "2024-06-25T15:09:42.943085Z" }, "installedPackage-perl-Pod-Simple:all:1:3.28-4.el7": { "id": "installedPackage-perl-Pod-Simple:all:1:3.28-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:3.28-4.el7", "packageName": "perl-Pod-Simple" } }, "createTime": "2024-06-25T15:09:42.943199Z" }, "installedPackage-virt-what:x86_64:1.18-4.el7_9.1": { "id": "installedPackage-virt-what:x86_64:1.18-4.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.18-4.el7_9.1", "packageName": "virt-what" } }, "createTime": "2024-06-25T15:09:42.943217Z" }, "installedPackage-rpm:x86_64:4.11.3-48.el7_9": { "id": "installedPackage-rpm:x86_64:4.11.3-48.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.11.3-48.el7_9", "packageName": "rpm" } }, "createTime": "2024-06-25T15:09:42.943214Z" }, "installedPackage-python-lxml:x86_64:3.2.1-4.el7": { "id": "installedPackage-python-lxml:x86_64:3.2.1-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.2.1-4.el7", "packageName": "python-lxml" } }, "createTime": "2024-06-25T15:09:42.943092Z" }, "availablePackage-python-perf:x86_64:3.10.0-1160.119.1.el7": { "id": "availablePackage-python-perf:x86_64:3.10.0-1160.119.1.el7", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.119.1.el7", "packageName": "python-perf" } }, "createTime": "2024-06-25T15:09:42.943059Z" }, "installedPackage-openssl-libs:x86_64:1:1.0.2k-26.el7_9": { "id": "installedPackage-openssl-libs:x86_64:1:1.0.2k-26.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.0.2k-26.el7_9", "packageName": "openssl-libs" } }, "createTime": "2024-06-25T15:09:42.943205Z" }, "installedPackage-libuser:x86_64:0.60-9.el7": { "id": "installedPackage-libuser:x86_64:0.60-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.60-9.el7", "packageName": "libuser" } }, "createTime": "2024-06-25T15:09:42.943158Z" }, "installedPackage-openldap:x86_64:2.4.44-25.el7_9": { "id": "installedPackage-openldap:x86_64:2.4.44-25.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.4.44-25.el7_9", "packageName": "openldap" } }, "createTime": "2024-06-25T15:09:42.943175Z" }, "installedPackage-epel-release:all:7-14": { "id": "installedPackage-epel-release:all:7-14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "7-14", "packageName": "epel-release" } }, "createTime": "2024-06-25T15:09:42.943198Z" }, "installedPackage-perl-threads:x86_64:1.87-4.el7": { "id": "installedPackage-perl-threads:x86_64:1.87-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.87-4.el7", "packageName": "perl-threads" } }, "createTime": "2024-06-25T15:09:42.943125Z" }, "installedPackage-python-backports:x86_64:1.0-8.el7": { "id": "installedPackage-python-backports:x86_64:1.0-8.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.0-8.el7", "packageName": "python-backports" } }, "createTime": "2024-06-25T15:09:42.943210Z" }, "installedPackage-NetworkManager-tui:x86_64:1:1.18.8-2.el7_9": { "id": "installedPackage-NetworkManager-tui:x86_64:1:1.18.8-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.18.8-2.el7_9", "packageName": "NetworkManager-tui" } }, "createTime": "2024-06-25T15:09:42.943184Z" }, "installedPackage-pkgconfig:x86_64:1:0.27.1-4.el7": { "id": "installedPackage-pkgconfig:x86_64:1:0.27.1-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:0.27.1-4.el7", "packageName": "pkgconfig" } }, "createTime": "2024-06-25T15:09:42.943153Z" }, "installedPackage-python-six:all:1.9.0-2.el7": { "id": "installedPackage-python-six:all:1.9.0-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.9.0-2.el7", "packageName": "python-six" } }, "createTime": "2024-06-25T15:09:42.943170Z" }, "installedPackage-python2-futures:all:3.1.1-5.el7": { "id": "installedPackage-python2-futures:all:3.1.1-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.1.1-5.el7", "packageName": "python2-futures" } }, "createTime": "2024-06-25T15:09:42.943089Z" }, "installedPackage-libgomp:x86_64:4.8.5-44.el7": { "id": "installedPackage-libgomp:x86_64:4.8.5-44.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.8.5-44.el7", "packageName": "libgomp" } }, "createTime": "2024-06-25T15:09:42.943133Z" }, "installedPackage-rpm-libs:x86_64:4.11.3-48.el7_9": { "id": "installedPackage-rpm-libs:x86_64:4.11.3-48.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.11.3-48.el7_9", "packageName": "rpm-libs" } }, "createTime": "2024-06-25T15:09:42.943175Z" }, "installedPackage-device-mapper:x86_64:7:1.02.170-6.el7_9.5": { "id": "installedPackage-device-mapper:x86_64:7:1.02.170-6.el7_9.5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7:1.02.170-6.el7_9.5", "packageName": "device-mapper" } }, "createTime": "2024-06-25T15:09:42.943180Z" }, "installedPackage-findutils:x86_64:1:4.5.11-6.el7": { "id": "installedPackage-findutils:x86_64:1:4.5.11-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:4.5.11-6.el7", "packageName": "findutils" } }, "createTime": "2024-06-25T15:09:42.943120Z" }, "installedPackage-python-schedutils:x86_64:0.4-6.el7": { "id": "installedPackage-python-schedutils:x86_64:0.4-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.4-6.el7", "packageName": "python-schedutils" } }, "createTime": "2024-06-25T15:09:42.943156Z" }, "installedPackage-google-compute-engine-oslogin:x86_64:1:20240415.00-g1.el7": { "id": "installedPackage-google-compute-engine-oslogin:x86_64:1:20240415.00-g1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:20240415.00-g1.el7", "packageName": "google-compute-engine-oslogin" } }, "createTime": "2024-06-25T15:09:42.943200Z" }, "installedPackage-shim-x64:x86_64:15.8-1.el7": { "id": "installedPackage-shim-x64:x86_64:15.8-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "15.8-1.el7", "packageName": "shim-x64" } }, "createTime": "2024-06-25T15:09:42.943187Z" }, "installedPackage-libunistring:x86_64:0.9.3-9.el7": { "id": "installedPackage-libunistring:x86_64:0.9.3-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.9.3-9.el7", "packageName": "libunistring" } }, "createTime": "2024-06-25T15:09:42.943133Z" }, "installedPackage-p11-kit-trust:x86_64:0.23.5-3.el7": { "id": "installedPackage-p11-kit-trust:x86_64:0.23.5-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.23.5-3.el7", "packageName": "p11-kit-trust" } }, "createTime": "2024-06-25T15:09:42.943150Z" }, "installedPackage-perl-macros:x86_64:4:5.16.3-299.el7_9": { "id": "installedPackage-perl-macros:x86_64:4:5.16.3-299.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4:5.16.3-299.el7_9", "packageName": "perl-macros" } }, "createTime": "2024-06-25T15:09:42.943204Z" }, "installedPackage-hwdata:x86_64:0.252-9.7.el7": { "id": "installedPackage-hwdata:x86_64:0.252-9.7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.252-9.7.el7", "packageName": "hwdata" } }, "createTime": "2024-06-25T15:09:42.943166Z" }, "installedPackage-alsa-firmware:all:1.0.28-2.el7": { "id": "installedPackage-alsa-firmware:all:1.0.28-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.0.28-2.el7", "packageName": "alsa-firmware" } }, "createTime": "2024-06-25T15:09:42.943065Z" }, "installedPackage-alsa-tools-firmware:x86_64:1.1.0-1.el7": { "id": "installedPackage-alsa-tools-firmware:x86_64:1.1.0-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.1.0-1.el7", "packageName": "alsa-tools-firmware" } }, "createTime": "2024-06-25T15:09:42.943109Z" }, "installedPackage-curl:x86_64:7.29.0-59.el7_9.2": { "id": "installedPackage-curl:x86_64:7.29.0-59.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.29.0-59.el7_9.2", "packageName": "curl" } }, "createTime": "2024-06-25T15:09:42.943092Z" }, "installedPackage-fipscheck:x86_64:1.4.1-6.el7": { "id": "installedPackage-fipscheck:x86_64:1.4.1-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.4.1-6.el7", "packageName": "fipscheck" } }, "createTime": "2024-06-25T15:09:42.943159Z" }, "installedPackage-libidn:x86_64:1.28-4.el7": { "id": "installedPackage-libidn:x86_64:1.28-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.28-4.el7", "packageName": "libidn" } }, "createTime": "2024-06-25T15:09:42.943080Z" }, "installedPackage-gpg-pubkey:(none):897da07a-3c979a7f": { "id": "installedPackage-gpg-pubkey:(none):897da07a-3c979a7f", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "897da07a-3c979a7f", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943129Z" }, "installedPackage-python-pycurl:x86_64:7.19.0-19.el7": { "id": "installedPackage-python-pycurl:x86_64:7.19.0-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.19.0-19.el7", "packageName": "python-pycurl" } }, "createTime": "2024-06-25T15:09:42.943098Z" }, "installedPackage-python-linux-procfs:all:0.4.11-4.el7": { "id": "installedPackage-python-linux-procfs:all:0.4.11-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.4.11-4.el7", "packageName": "python-linux-procfs" } }, "createTime": "2024-06-25T15:09:42.943157Z" }, "installedPackage-binutils:x86_64:2.27-44.base.el7_9.1": { "id": "installedPackage-binutils:x86_64:2.27-44.base.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.27-44.base.el7_9.1", "packageName": "binutils" } }, "createTime": "2024-06-25T15:09:42.943187Z" }, "installedPackage-gpg-pubkey:(none):dc6315a3-6091b7b3": { "id": "installedPackage-gpg-pubkey:(none):dc6315a3-6091b7b3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "dc6315a3-6091b7b3", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943126Z" }, "installedPackage-nss-tools:x86_64:3.90.0-2.el7_9": { "id": "installedPackage-nss-tools:x86_64:3.90.0-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.90.0-2.el7_9", "packageName": "nss-tools" } }, "createTime": "2024-06-25T15:09:42.943091Z" }, "installedPackage-google-cloud-cli:x86_64:474.0.0-1": { "id": "installedPackage-google-cloud-cli:x86_64:474.0.0-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "474.0.0-1", "packageName": "google-cloud-cli" } }, "createTime": "2024-06-25T15:09:42.943080Z" }, "installedPackage-xdg-utils:all:1.1.0-0.17.20120809git.el7": { "id": "installedPackage-xdg-utils:all:1.1.0-0.17.20120809git.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.1.0-0.17.20120809git.el7", "packageName": "xdg-utils" } }, "createTime": "2024-06-25T15:09:42.943154Z" }, "installedPackage-perl-Pod-Usage:all:1.63-3.el7": { "id": "installedPackage-perl-Pod-Usage:all:1.63-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.63-3.el7", "packageName": "perl-Pod-Usage" } }, "createTime": "2024-06-25T15:09:42.943124Z" }, "installedPackage-crontabs:all:1.11-6.20121102git.el7": { "id": "installedPackage-crontabs:all:1.11-6.20121102git.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.11-6.20121102git.el7", "packageName": "crontabs" } }, "createTime": "2024-06-25T15:09:42.943169Z" }, "installedPackage-kbd-misc:all:1.15.5-16.el7_9": { "id": "installedPackage-kbd-misc:all:1.15.5-16.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.15.5-16.el7_9", "packageName": "kbd-misc" } }, "createTime": "2024-06-25T15:09:42.943081Z" }, "installedPackage-dhclient:x86_64:12:4.2.5-83.el7_9.2": { "id": "installedPackage-dhclient:x86_64:12:4.2.5-83.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "12:4.2.5-83.el7_9.2", "packageName": "dhclient" } }, "createTime": "2024-06-25T15:09:42.943167Z" }, "installedPackage-vim-common:x86_64:2:7.4.629-8.el7_9": { "id": "installedPackage-vim-common:x86_64:2:7.4.629-8.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:7.4.629-8.el7_9", "packageName": "vim-common" } }, "createTime": "2024-06-25T15:09:42.943095Z" }, "installedPackage-libblkid:x86_64:2.23.2-65.el7_9.1": { "id": "installedPackage-libblkid:x86_64:2.23.2-65.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.23.2-65.el7_9.1", "packageName": "libblkid" } }, "createTime": "2024-06-25T15:09:42.943143Z" }, "installedPackage-gpg-pubkey:(none):37017186-45761324": { "id": "installedPackage-gpg-pubkey:(none):37017186-45761324", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "37017186-45761324", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943129Z" }, "installedPackage-libselinux-utils:x86_64:2.5-15.el7": { "id": "installedPackage-libselinux-utils:x86_64:2.5-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.5-15.el7", "packageName": "libselinux-utils" } }, "createTime": "2024-06-25T15:09:42.943207Z" }, "installedPackage-redhat-release-eula:all:7.8-0.el7": { "id": "installedPackage-redhat-release-eula:all:7.8-0.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "7.8-0.el7", "packageName": "redhat-release-eula" } }, "createTime": "2024-06-25T15:09:42.943076Z" }, "installedPackage-libnl3:x86_64:3.2.28-4.el7": { "id": "installedPackage-libnl3:x86_64:3.2.28-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.2.28-4.el7", "packageName": "libnl3" } }, "createTime": "2024-06-25T15:09:42.943120Z" }, "installedPackage-file:x86_64:5.11-37.el7": { "id": "installedPackage-file:x86_64:5.11-37.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.11-37.el7", "packageName": "file" } }, "createTime": "2024-06-25T15:09:42.943121Z" }, "installedPackage-libssh2:x86_64:1.8.0-4.el7_9.1": { "id": "installedPackage-libssh2:x86_64:1.8.0-4.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.8.0-4.el7_9.1", "packageName": "libssh2" } }, "createTime": "2024-06-25T15:09:42.943213Z" }, "installedPackage-bash:x86_64:4.2.46-35.el7_9": { "id": "installedPackage-bash:x86_64:4.2.46-35.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.2.46-35.el7_9", "packageName": "bash" } }, "createTime": "2024-06-25T15:09:42.943082Z" }, "installedPackage-libpng:x86_64:2:1.5.13-8.el7": { "id": "installedPackage-libpng:x86_64:2:1.5.13-8.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:1.5.13-8.el7", "packageName": "libpng" } }, "createTime": "2024-06-25T15:09:42.943087Z" }, "installedPackage-net-tools:x86_64:2.0-0.25.20131004git.el7": { "id": "installedPackage-net-tools:x86_64:2.0-0.25.20131004git.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.0-0.25.20131004git.el7", "packageName": "net-tools" } }, "createTime": "2024-06-25T15:09:42.943193Z" }, "installedPackage-redhat-support-tool:all:0.14.0-1.el7_9": { "id": "installedPackage-redhat-support-tool:all:0.14.0-1.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.14.0-1.el7_9", "packageName": "redhat-support-tool" } }, "createTime": "2024-06-25T15:09:42.943098Z" }, "installedPackage-NetworkManager:x86_64:1:1.18.8-2.el7_9": { "id": "installedPackage-NetworkManager:x86_64:1:1.18.8-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.18.8-2.el7_9", "packageName": "NetworkManager" } }, "createTime": "2024-06-25T15:09:42.943097Z" }, "installedPackage-groff-base:x86_64:1.22.2-8.el7": { "id": "installedPackage-groff-base:x86_64:1.22.2-8.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.22.2-8.el7", "packageName": "groff-base" } }, "createTime": "2024-06-25T15:09:42.943121Z" }, "installedPackage-perl-threads-shared:x86_64:1.43-6.el7": { "id": "installedPackage-perl-threads-shared:x86_64:1.43-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.43-6.el7", "packageName": "perl-threads-shared" } }, "createTime": "2024-06-25T15:09:42.943197Z" }, "availablePackage-kernel-tools:x86_64:3.10.0-1160.119.1.el7": { "id": "availablePackage-kernel-tools:x86_64:3.10.0-1160.119.1.el7", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.119.1.el7", "packageName": "kernel-tools" } }, "createTime": "2024-06-25T15:09:42.943056Z" }, "installedPackage-libtasn1:x86_64:4.10-1.el7": { "id": "installedPackage-libtasn1:x86_64:4.10-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.10-1.el7", "packageName": "libtasn1" } }, "createTime": "2024-06-25T15:09:42.943089Z" }, "installedPackage-pyliblzma:x86_64:0.5.3-11.el7": { "id": "installedPackage-pyliblzma:x86_64:0.5.3-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.5.3-11.el7", "packageName": "pyliblzma" } }, "createTime": "2024-06-25T15:09:42.943156Z" }, "installedPackage-python2-cryptography:x86_64:1.7.2-2.el7": { "id": "installedPackage-python2-cryptography:x86_64:1.7.2-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.7.2-2.el7", "packageName": "python2-cryptography" } }, "createTime": "2024-06-25T15:09:42.943178Z" }, "installedPackage-nvme-cli:x86_64:1.8.1-3.el7": { "id": "installedPackage-nvme-cli:x86_64:1.8.1-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.8.1-3.el7", "packageName": "nvme-cli" } }, "createTime": "2024-06-25T15:09:42.943080Z" }, "installedPackage-perl-Pod-Perldoc:all:3.20-4.el7": { "id": "installedPackage-perl-Pod-Perldoc:all:3.20-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.20-4.el7", "packageName": "perl-Pod-Perldoc" } }, "createTime": "2024-06-25T15:09:42.943123Z" }, "installedPackage-keyutils-libs:x86_64:1.5.8-3.el7": { "id": "installedPackage-keyutils-libs:x86_64:1.5.8-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.5.8-3.el7", "packageName": "keyutils-libs" } }, "createTime": "2024-06-25T15:09:42.943202Z" }, "installedPackage-less:x86_64:458-10.el7_9": { "id": "installedPackage-less:x86_64:458-10.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "458-10.el7_9", "packageName": "less" } }, "createTime": "2024-06-25T15:09:42.943165Z" }, "installedPackage-selinux-policy:all:3.13.1-268.el7_9.2": { "id": "installedPackage-selinux-policy:all:3.13.1-268.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.13.1-268.el7_9.2", "packageName": "selinux-policy" } }, "createTime": "2024-06-25T15:09:42.943174Z" }, "installedPackage-audit-libs:x86_64:2.8.5-4.el7": { "id": "installedPackage-audit-libs:x86_64:2.8.5-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.8.5-4.el7", "packageName": "audit-libs" } }, "createTime": "2024-06-25T15:09:42.943194Z" }, "installedPackage-openssh-clients:x86_64:7.4p1-23.el7_9": { "id": "installedPackage-openssh-clients:x86_64:7.4p1-23.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.4p1-23.el7_9", "packageName": "openssh-clients" } }, "createTime": "2024-06-25T15:09:42.943225Z" }, "installedPackage-zlib:x86_64:1.2.7-21.el7_9": { "id": "installedPackage-zlib:x86_64:1.2.7-21.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.2.7-21.el7_9", "packageName": "zlib" } }, "createTime": "2024-06-25T15:09:42.943204Z" }, "installedPackage-cryptsetup-libs:x86_64:2.0.3-6.el7": { "id": "installedPackage-cryptsetup-libs:x86_64:2.0.3-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.0.3-6.el7", "packageName": "cryptsetup-libs" } }, "createTime": "2024-06-25T15:09:42.943226Z" }, "installedPackage-iproute:x86_64:4.11.0-30.el7": { "id": "installedPackage-iproute:x86_64:4.11.0-30.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.11.0-30.el7", "packageName": "iproute" } }, "createTime": "2024-06-25T15:09:42.943203Z" }, "installedPackage-libmount:x86_64:2.23.2-65.el7_9.1": { "id": "installedPackage-libmount:x86_64:2.23.2-65.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.23.2-65.el7_9.1", "packageName": "libmount" } }, "createTime": "2024-06-25T15:09:42.943206Z" }, "installedPackage-iprutils:x86_64:2.4.17.1-3.el7_7": { "id": "installedPackage-iprutils:x86_64:2.4.17.1-3.el7_7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.4.17.1-3.el7_7", "packageName": "iprutils" } }, "createTime": "2024-06-25T15:09:42.943188Z" }, "installedPackage-nss-softokn:x86_64:3.90.0-6.el7_9": { "id": "installedPackage-nss-softokn:x86_64:3.90.0-6.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.90.0-6.el7_9", "packageName": "nss-softokn" } }, "createTime": "2024-06-25T15:09:42.943207Z" }, "installedPackage-python-perf:x86_64:3.10.0-1160.118.1.el7": { "id": "installedPackage-python-perf:x86_64:3.10.0-1160.118.1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.118.1.el7", "packageName": "python-perf" } }, "createTime": "2024-06-25T15:09:42.943211Z" }, "installedPackage-initscripts:x86_64:9.49.53-1.el7_9.1": { "id": "installedPackage-initscripts:x86_64:9.49.53-1.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "9.49.53-1.el7_9.1", "packageName": "initscripts" } }, "createTime": "2024-06-25T15:09:42.943096Z" }, "availablePackage-google-guest-agent:x86_64:1:20240528.00-g1.el7": { "id": "availablePackage-google-guest-agent:x86_64:1:20240528.00-g1.el7", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "1:20240528.00-g1.el7", "packageName": "google-guest-agent" } }, "createTime": "2024-06-25T15:09:42.943054Z" }, "installedPackage-libmnl:x86_64:1.0.3-7.el7": { "id": "installedPackage-libmnl:x86_64:1.0.3-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.0.3-7.el7", "packageName": "libmnl" } }, "createTime": "2024-06-25T15:09:42.943074Z" }, "installedPackage-iwl7260-firmware:all:25.30.13.0-83.el7_9": { "id": "installedPackage-iwl7260-firmware:all:25.30.13.0-83.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "25.30.13.0-83.el7_9", "packageName": "iwl7260-firmware" } }, "createTime": "2024-06-25T15:09:42.943167Z" }, "installedPackage-wpa_supplicant:x86_64:1:2.6-12.el7_9.2": { "id": "installedPackage-wpa_supplicant:x86_64:1:2.6-12.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:2.6-12.el7_9.2", "packageName": "wpa_supplicant" } }, "createTime": "2024-06-25T15:09:42.943182Z" }, "installedPackage-alsa-lib:x86_64:1.1.8-1.el7": { "id": "installedPackage-alsa-lib:x86_64:1.1.8-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.1.8-1.el7", "packageName": "alsa-lib" } }, "createTime": "2024-06-25T15:09:42.943096Z" }, "installedPackage-device-mapper-libs:x86_64:7:1.02.170-6.el7_9.5": { "id": "installedPackage-device-mapper-libs:x86_64:7:1.02.170-6.el7_9.5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7:1.02.170-6.el7_9.5", "packageName": "device-mapper-libs" } }, "createTime": "2024-06-25T15:09:42.943219Z" }, "installedPackage-shared-mime-info:x86_64:1.8-5.el7": { "id": "installedPackage-shared-mime-info:x86_64:1.8-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.8-5.el7", "packageName": "shared-mime-info" } }, "createTime": "2024-06-25T15:09:42.943212Z" }, "installedPackage-biosdevname:x86_64:0.7.3-2.el7": { "id": "installedPackage-biosdevname:x86_64:0.7.3-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.7.3-2.el7", "packageName": "biosdevname" } }, "createTime": "2024-06-25T15:09:42.943118Z" }, "installedPackage-gpgme:x86_64:1.3.2-5.el7": { "id": "installedPackage-gpgme:x86_64:1.3.2-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.3.2-5.el7", "packageName": "gpgme" } }, "createTime": "2024-06-25T15:09:42.943222Z" }, "installedPackage-libndp:x86_64:1.2-9.el7": { "id": "installedPackage-libndp:x86_64:1.2-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.2-9.el7", "packageName": "libndp" } }, "createTime": "2024-06-25T15:09:42.943088Z" }, "installedPackage-rpm-python:x86_64:4.11.3-48.el7_9": { "id": "installedPackage-rpm-python:x86_64:4.11.3-48.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.11.3-48.el7_9", "packageName": "rpm-python" } }, "createTime": "2024-06-25T15:09:42.943176Z" }, "installedPackage-p11-kit:x86_64:0.23.5-3.el7": { "id": "installedPackage-p11-kit:x86_64:0.23.5-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.23.5-3.el7", "packageName": "p11-kit" } }, "createTime": "2024-06-25T15:09:42.943131Z" }, "installedPackage-python-urlgrabber:all:3.10-10.el7": { "id": "installedPackage-python-urlgrabber:all:3.10-10.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.10-10.el7", "packageName": "python-urlgrabber" } }, "createTime": "2024-06-25T15:09:42.943159Z" }, "installedPackage-logrotate:x86_64:3.8.6-19.el7": { "id": "installedPackage-logrotate:x86_64:3.8.6-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.8.6-19.el7", "packageName": "logrotate" } }, "createTime": "2024-06-25T15:09:42.943157Z" }, "installedPackage-gpg-pubkey:(none):f21541eb-4a5233e7": { "id": "installedPackage-gpg-pubkey:(none):f21541eb-4a5233e7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "f21541eb-4a5233e7", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943078Z" }, "installedPackage-libassuan:x86_64:2.1.0-3.el7": { "id": "installedPackage-libassuan:x86_64:2.1.0-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.1.0-3.el7", "packageName": "libassuan" } }, "createTime": "2024-06-25T15:09:42.943079Z" }, "installedPackage-python-backports-ssl_match_hostname:all:3.5.0.1-1.el7": { "id": "installedPackage-python-backports-ssl_match_hostname:all:3.5.0.1-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.5.0.1-1.el7", "packageName": "python-backports-ssl_match_hostname" } }, "createTime": "2024-06-25T15:09:42.943171Z" }, "installedPackage-ncurses-libs:x86_64:5.9-14.20130511.el7_4": { "id": "installedPackage-ncurses-libs:x86_64:5.9-14.20130511.el7_4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.9-14.20130511.el7_4", "packageName": "ncurses-libs" } }, "createTime": "2024-06-25T15:09:42.943111Z" }, "installedPackage-python-ply:all:3.4-11.el7": { "id": "installedPackage-python-ply:all:3.4-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.4-11.el7", "packageName": "python-ply" } }, "createTime": "2024-06-25T15:09:42.943090Z" }, "installedPackage-chkconfig:x86_64:1.7.6-1.el7": { "id": "installedPackage-chkconfig:x86_64:1.7.6-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.7.6-1.el7", "packageName": "chkconfig" } }, "createTime": "2024-06-25T15:09:42.943068Z" }, "installedPackage-lsscsi:x86_64:0.27-6.el7": { "id": "installedPackage-lsscsi:x86_64:0.27-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.27-6.el7", "packageName": "lsscsi" } }, "createTime": "2024-06-25T15:09:42.943101Z" }, "installedPackage-libsemanage:x86_64:2.5-14.el7": { "id": "installedPackage-libsemanage:x86_64:2.5-14.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.5-14.el7", "packageName": "libsemanage" } }, "createTime": "2024-06-25T15:09:42.943150Z" }, "installedPackage-libcurl:x86_64:7.29.0-59.el7_9.2": { "id": "installedPackage-libcurl:x86_64:7.29.0-59.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.29.0-59.el7_9.2", "packageName": "libcurl" } }, "createTime": "2024-06-25T15:09:42.943175Z" }, "installedPackage-gdisk:x86_64:0.8.10-3.el7": { "id": "installedPackage-gdisk:x86_64:0.8.10-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.8.10-3.el7", "packageName": "gdisk" } }, "createTime": "2024-06-25T15:09:42.943132Z" }, "installedPackage-boost-regex:x86_64:1.53.0-28.el7": { "id": "installedPackage-boost-regex:x86_64:1.53.0-28.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.53.0-28.el7", "packageName": "boost-regex" } }, "createTime": "2024-06-25T15:09:42.943079Z" }, "installedPackage-libpipeline:x86_64:1.2.3-3.el7": { "id": "installedPackage-libpipeline:x86_64:1.2.3-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.2.3-3.el7", "packageName": "libpipeline" } }, "createTime": "2024-06-25T15:09:42.943224Z" }, "installedPackage-libsepol:x86_64:2.5-10.el7": { "id": "installedPackage-libsepol:x86_64:2.5-10.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.5-10.el7", "packageName": "libsepol" } }, "createTime": "2024-06-25T15:09:42.943112Z" }, "installedPackage-bind-export-libs:x86_64:32:9.11.4-26.P2.el7_9.16": { "id": "installedPackage-bind-export-libs:x86_64:32:9.11.4-26.P2.el7_9.16", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "32:9.11.4-26.P2.el7_9.16", "packageName": "bind-export-libs" } }, "createTime": "2024-06-25T15:09:42.943227Z" }, "availablePackage-redhat-release-server:x86_64:7.9-11.el7_9": { "id": "availablePackage-redhat-release-server:x86_64:7.9-11.el7_9", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "7.9-11.el7_9", "packageName": "redhat-release-server" } }, "createTime": "2024-06-25T15:09:42.943061Z" }, "installedPackage-redhat-release-server:x86_64:7.9-10.el7_9": { "id": "installedPackage-redhat-release-server:x86_64:7.9-10.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.9-10.el7_9", "packageName": "redhat-release-server" } }, "createTime": "2024-06-25T15:09:42.943201Z" }, "installedPackage-m2crypto:x86_64:0.21.1-17.el7": { "id": "installedPackage-m2crypto:x86_64:0.21.1-17.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.21.1-17.el7", "packageName": "m2crypto" } }, "createTime": "2024-06-25T15:09:42.943216Z" }, "installedPackage-nss:x86_64:3.90.0-2.el7_9": { "id": "installedPackage-nss:x86_64:3.90.0-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.90.0-2.el7_9", "packageName": "nss" } }, "createTime": "2024-06-25T15:09:42.943148Z" }, "installedPackage-nss-sysinit:x86_64:3.90.0-2.el7_9": { "id": "installedPackage-nss-sysinit:x86_64:3.90.0-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.90.0-2.el7_9", "packageName": "nss-sysinit" } }, "createTime": "2024-06-25T15:09:42.943088Z" }, "installedPackage-plymouth:x86_64:0.8.9-0.34.20140113.el7": { "id": "installedPackage-plymouth:x86_64:0.8.9-0.34.20140113.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.8.9-0.34.20140113.el7", "packageName": "plymouth" } }, "createTime": "2024-06-25T15:09:42.943111Z" }, "installedPackage-python-jwcrypto:all:0.4.2-1.el7": { "id": "installedPackage-python-jwcrypto:all:0.4.2-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.4.2-1.el7", "packageName": "python-jwcrypto" } }, "createTime": "2024-06-25T15:09:42.943217Z" }, "installedPackage-efivar-libs:x86_64:36-12.el7": { "id": "installedPackage-efivar-libs:x86_64:36-12.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "36-12.el7", "packageName": "efivar-libs" } }, "createTime": "2024-06-25T15:09:42.943082Z" }, "installedPackage-python-firewall:all:0.6.3-13.el7_9": { "id": "installedPackage-python-firewall:all:0.6.3-13.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.6.3-13.el7_9", "packageName": "python-firewall" } }, "createTime": "2024-06-25T15:09:42.943173Z" }, "installedPackage-policycoreutils:x86_64:2.5-34.el7": { "id": "installedPackage-policycoreutils:x86_64:2.5-34.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.5-34.el7", "packageName": "policycoreutils" } }, "createTime": "2024-06-25T15:09:42.943106Z" }, "installedPackage-python-slip:all:0.4.0-4.el7": { "id": "installedPackage-python-slip:all:0.4.0-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.4.0-4.el7", "packageName": "python-slip" } }, "createTime": "2024-06-25T15:09:42.943157Z" }, "installedPackage-libcap:x86_64:2.22-11.el7": { "id": "installedPackage-libcap:x86_64:2.22-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.22-11.el7", "packageName": "libcap" } }, "createTime": "2024-06-25T15:09:42.943194Z" }, "installedPackage-nss-softokn-freebl:x86_64:3.90.0-6.el7_9": { "id": "installedPackage-nss-softokn-freebl:x86_64:3.90.0-6.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.90.0-6.el7_9", "packageName": "nss-softokn-freebl" } }, "createTime": "2024-06-25T15:09:42.943203Z" }, "installedPackage-libteam:x86_64:1.29-3.el7": { "id": "installedPackage-libteam:x86_64:1.29-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.29-3.el7", "packageName": "libteam" } }, "createTime": "2024-06-25T15:09:42.943138Z" }, "installedPackage-libffi:x86_64:3.0.13-19.el7": { "id": "installedPackage-libffi:x86_64:3.0.13-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.0.13-19.el7", "packageName": "libffi" } }, "createTime": "2024-06-25T15:09:42.943117Z" }, "installedPackage-ncurses-base:all:5.9-14.20130511.el7_4": { "id": "installedPackage-ncurses-base:all:5.9-14.20130511.el7_4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "5.9-14.20130511.el7_4", "packageName": "ncurses-base" } }, "createTime": "2024-06-25T15:09:42.943191Z" }, "installedPackage-rsyslog:x86_64:8.24.0-57.el7_9.3": { "id": "installedPackage-rsyslog:x86_64:8.24.0-57.el7_9.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "8.24.0-57.el7_9.3", "packageName": "rsyslog" } }, "createTime": "2024-06-25T15:09:42.943224Z" }, "installedPackage-firewalld:all:0.6.3-13.el7_9": { "id": "installedPackage-firewalld:all:0.6.3-13.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.6.3-13.el7_9", "packageName": "firewalld" } }, "createTime": "2024-06-25T15:09:42.943222Z" }, "installedPackage-newt:x86_64:0.52.15-4.el7": { "id": "installedPackage-newt:x86_64:0.52.15-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.52.15-4.el7", "packageName": "newt" } }, "createTime": "2024-06-25T15:09:42.943149Z" }, "installedPackage-NetworkManager-libnm:x86_64:1:1.18.8-2.el7_9": { "id": "installedPackage-NetworkManager-libnm:x86_64:1:1.18.8-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.18.8-2.el7_9", "packageName": "NetworkManager-libnm" } }, "createTime": "2024-06-25T15:09:42.943208Z" }, "installedPackage-google-guest-agent:x86_64:1:20240109.00-g1.el7": { "id": "installedPackage-google-guest-agent:x86_64:1:20240109.00-g1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:20240109.00-g1.el7", "packageName": "google-guest-agent" } }, "createTime": "2024-06-25T15:09:42.943131Z" }, "installedPackage-perl-Getopt-Long:all:2.40-3.el7": { "id": "installedPackage-perl-Getopt-Long:all:2.40-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.40-3.el7", "packageName": "perl-Getopt-Long" } }, "createTime": "2024-06-25T15:09:42.943130Z" }, "installedPackage-python-dateutil:all:1.5-7.el7": { "id": "installedPackage-python-dateutil:all:1.5-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.5-7.el7", "packageName": "python-dateutil" } }, "createTime": "2024-06-25T15:09:42.943153Z" }, "installedPackage-libsmartcols:x86_64:2.23.2-65.el7_9.1": { "id": "installedPackage-libsmartcols:x86_64:2.23.2-65.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.23.2-65.el7_9.1", "packageName": "libsmartcols" } }, "createTime": "2024-06-25T15:09:42.943216Z" }, "installedPackage-desktop-file-utils:x86_64:0.23-2.el7": { "id": "installedPackage-desktop-file-utils:x86_64:0.23-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.23-2.el7", "packageName": "desktop-file-utils" } }, "createTime": "2024-06-25T15:09:42.943093Z" }, "installedPackage-kbd-legacy:all:1.15.5-16.el7_9": { "id": "installedPackage-kbd-legacy:all:1.15.5-16.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.15.5-16.el7_9", "packageName": "kbd-legacy" } }, "createTime": "2024-06-25T15:09:42.943136Z" }, "installedPackage-gdbm:x86_64:1.10-8.el7": { "id": "installedPackage-gdbm:x86_64:1.10-8.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.10-8.el7", "packageName": "gdbm" } }, "createTime": "2024-06-25T15:09:42.943121Z" }, "installedPackage-libdaemon:x86_64:0.14-7.el7": { "id": "installedPackage-libdaemon:x86_64:0.14-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.14-7.el7", "packageName": "libdaemon" } }, "createTime": "2024-06-25T15:09:42.943160Z" }, "installedPackage-sg3_utils-libs:x86_64:1:1.37-19.el7": { "id": "installedPackage-sg3_utils-libs:x86_64:1:1.37-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.37-19.el7", "packageName": "sg3_utils-libs" } }, "createTime": "2024-06-25T15:09:42.943161Z" }, "installedPackage-ethtool:x86_64:2:4.8-10.el7": { "id": "installedPackage-ethtool:x86_64:2:4.8-10.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:4.8-10.el7", "packageName": "ethtool" } }, "createTime": "2024-06-25T15:09:42.943225Z" }, "installedPackage-kpartx:x86_64:0.4.9-136.el7_9": { "id": "installedPackage-kpartx:x86_64:0.4.9-136.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.4.9-136.el7_9", "packageName": "kpartx" } }, "createTime": "2024-06-25T15:09:42.943185Z" }, "installedPackage-perl-Exporter:all:5.68-3.el7": { "id": "installedPackage-perl-Exporter:all:5.68-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "5.68-3.el7", "packageName": "perl-Exporter" } }, "createTime": "2024-06-25T15:09:42.943197Z" }, "installedPackage-e2fsprogs-libs:x86_64:1.42.9-19.el7": { "id": "installedPackage-e2fsprogs-libs:x86_64:1.42.9-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.42.9-19.el7", "packageName": "e2fsprogs-libs" } }, "createTime": "2024-06-25T15:09:42.943132Z" }, "installedPackage-perl-Encode:x86_64:2.51-7.el7": { "id": "installedPackage-perl-Encode:x86_64:2.51-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.51-7.el7", "packageName": "perl-Encode" } }, "createTime": "2024-06-25T15:09:42.943075Z" }, "installedPackage-lz4:x86_64:1.8.3-1.el7": { "id": "installedPackage-lz4:x86_64:1.8.3-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.8.3-1.el7", "packageName": "lz4" } }, "createTime": "2024-06-25T15:09:42.943136Z" }, "installedPackage-dbus:x86_64:1:1.10.24-15.el7": { "id": "installedPackage-dbus:x86_64:1:1.10.24-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.10.24-15.el7", "packageName": "dbus" } }, "createTime": "2024-06-25T15:09:42.943164Z" }, "installedPackage-openssh:x86_64:7.4p1-23.el7_9": { "id": "installedPackage-openssh:x86_64:7.4p1-23.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.4p1-23.el7_9", "packageName": "openssh" } }, "createTime": "2024-06-25T15:09:42.943094Z" }, "installedPackage-selinux-policy-targeted:all:3.13.1-268.el7_9.2": { "id": "installedPackage-selinux-policy-targeted:all:3.13.1-268.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.13.1-268.el7_9.2", "packageName": "selinux-policy-targeted" } }, "createTime": "2024-06-25T15:09:42.943101Z" }, "installedPackage-gawk:x86_64:4.0.2-4.el7_3.1": { "id": "installedPackage-gawk:x86_64:4.0.2-4.el7_3.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.0.2-4.el7_3.1", "packageName": "gawk" } }, "createTime": "2024-06-25T15:09:42.943114Z" }, "installedPackage-expat:x86_64:2.1.0-15.el7_9": { "id": "installedPackage-expat:x86_64:2.1.0-15.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.1.0-15.el7_9", "packageName": "expat" } }, "createTime": "2024-06-25T15:09:42.943169Z" }, "installedPackage-ebtables:x86_64:2.0.10-16.el7": { "id": "installedPackage-ebtables:x86_64:2.0.10-16.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.0.10-16.el7", "packageName": "ebtables" } }, "createTime": "2024-06-25T15:09:42.943190Z" }, "installedPackage-perl-Socket:x86_64:2.010-5.el7": { "id": "installedPackage-perl-Socket:x86_64:2.010-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.010-5.el7", "packageName": "perl-Socket" } }, "createTime": "2024-06-25T15:09:42.943128Z" }, "installedPackage-Red_Hat_Enterprise_Linux-Release_Notes-7-en-US:all:7-2.el7": { "id": "installedPackage-Red_Hat_Enterprise_Linux-Release_Notes-7-en-US:all:7-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "7-2.el7", "packageName": "Red_Hat_Enterprise_Linux-Release_Notes-7-en-US" } }, "createTime": "2024-06-25T15:09:42.943196Z" }, "installedPackage-krb5-libs:x86_64:1.15.1-55.el7_9": { "id": "installedPackage-krb5-libs:x86_64:1.15.1-55.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.15.1-55.el7_9", "packageName": "krb5-libs" } }, "createTime": "2024-06-25T15:09:42.943086Z" }, "installedPackage-python-ipaddress:all:1.0.16-2.el7": { "id": "installedPackage-python-ipaddress:all:1.0.16-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1.0.16-2.el7", "packageName": "python-ipaddress" } }, "createTime": "2024-06-25T15:09:42.943209Z" }, "installedPackage-vim-enhanced:x86_64:2:7.4.629-8.el7_9": { "id": "installedPackage-vim-enhanced:x86_64:2:7.4.629-8.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:7.4.629-8.el7_9", "packageName": "vim-enhanced" } }, "createTime": "2024-06-25T15:09:42.943100Z" }, "installedPackage-perl-File-Path:all:2.09-2.el7": { "id": "installedPackage-perl-File-Path:all:2.09-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.09-2.el7", "packageName": "perl-File-Path" } }, "createTime": "2024-06-25T15:09:42.943127Z" }, "installedPackage-file-libs:x86_64:5.11-37.el7": { "id": "installedPackage-file-libs:x86_64:5.11-37.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.11-37.el7", "packageName": "file-libs" } }, "createTime": "2024-06-25T15:09:42.943195Z" }, "installedPackage-dracut-config-rescue:x86_64:033-572.el7": { "id": "installedPackage-dracut-config-rescue:x86_64:033-572.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "033-572.el7", "packageName": "dracut-config-rescue" } }, "createTime": "2024-06-25T15:09:42.943071Z" }, "installedPackage-libnfnetlink:x86_64:1.0.1-4.el7": { "id": "installedPackage-libnfnetlink:x86_64:1.0.1-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.0.1-4.el7", "packageName": "libnfnetlink" } }, "createTime": "2024-06-25T15:09:42.943135Z" }, "installedPackage-python:x86_64:2.7.5-94.el7_9": { "id": "installedPackage-python:x86_64:2.7.5-94.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.7.5-94.el7_9", "packageName": "python" } }, "createTime": "2024-06-25T15:09:42.943170Z" }, "installedPackage-pexpect:all:2.3-11.el7": { "id": "installedPackage-pexpect:all:2.3-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.3-11.el7", "packageName": "pexpect" } }, "createTime": "2024-06-25T15:09:42.943170Z" }, "installedPackage-libuuid:x86_64:2.23.2-65.el7_9.1": { "id": "installedPackage-libuuid:x86_64:2.23.2-65.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.23.2-65.el7_9.1", "packageName": "libuuid" } }, "createTime": "2024-06-25T15:09:42.943140Z" }, "installedPackage-perl-File-Temp:all:0.23.01-3.el7": { "id": "installedPackage-perl-File-Temp:all:0.23.01-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.23.01-3.el7", "packageName": "perl-File-Temp" } }, "createTime": "2024-06-25T15:09:42.943198Z" }, "installedPackage-grub2-tools-minimal:x86_64:1:2.02-0.87.el7_9.14": { "id": "installedPackage-grub2-tools-minimal:x86_64:1:2.02-0.87.el7_9.14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:2.02-0.87.el7_9.14", "packageName": "grub2-tools-minimal" } }, "createTime": "2024-06-25T15:09:42.943097Z" }, "installedPackage-sed:x86_64:4.2.2-7.el7": { "id": "installedPackage-sed:x86_64:4.2.2-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.2.2-7.el7", "packageName": "sed" } }, "createTime": "2024-06-25T15:09:42.943113Z" }, "installedPackage-libverto:x86_64:0.2.5-4.el7": { "id": "installedPackage-libverto:x86_64:0.2.5-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.2.5-4.el7", "packageName": "libverto" } }, "createTime": "2024-06-25T15:09:42.943149Z" }, "installedPackage-lshw:x86_64:B.02.18-17.el7": { "id": "installedPackage-lshw:x86_64:B.02.18-17.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "B.02.18-17.el7", "packageName": "lshw" } }, "createTime": "2024-06-25T15:09:42.943192Z" }, "installedPackage-google-rhui-client-rhel7:all:8.0-1": { "id": "installedPackage-google-rhui-client-rhel7:all:8.0-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "8.0-1", "packageName": "google-rhui-client-rhel7" } }, "createTime": "2024-06-25T15:09:42.943127Z" }, "installedPackage-mozjs17:x86_64:17.0.0-20.el7": { "id": "installedPackage-mozjs17:x86_64:17.0.0-20.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "17.0.0-20.el7", "packageName": "mozjs17" } }, "createTime": "2024-06-25T15:09:42.943147Z" }, "availablePackage-kernel-tools-libs:x86_64:3.10.0-1160.119.1.el7": { "id": "availablePackage-kernel-tools-libs:x86_64:3.10.0-1160.119.1.el7", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.119.1.el7", "packageName": "kernel-tools-libs" } }, "createTime": "2024-06-25T15:09:42.943058Z" }, "installedPackage-pygpgme:x86_64:0.3-9.el7": { "id": "installedPackage-pygpgme:x86_64:0.3-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.3-9.el7", "packageName": "pygpgme" } }, "createTime": "2024-06-25T15:09:42.943158Z" }, "installedPackage-iwl105-firmware:all:18.168.6.1-83.el7_9": { "id": "installedPackage-iwl105-firmware:all:18.168.6.1-83.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "18.168.6.1-83.el7_9", "packageName": "iwl105-firmware" } }, "createTime": "2024-06-25T15:09:42.943105Z" }, "installedPackage-libpwquality:x86_64:1.2.3-5.el7": { "id": "installedPackage-libpwquality:x86_64:1.2.3-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.2.3-5.el7", "packageName": "libpwquality" } }, "createTime": "2024-06-25T15:09:42.943152Z" }, "installedPackage-gnupg2:x86_64:2.0.22-5.el7_5": { "id": "installedPackage-gnupg2:x86_64:2.0.22-5.el7_5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.0.22-5.el7_5", "packageName": "gnupg2" } }, "createTime": "2024-06-25T15:09:42.943221Z" }, "installedPackage-gce-disk-expand:all:1:20221110.00-g1.el7": { "id": "installedPackage-gce-disk-expand:all:1:20221110.00-g1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:20221110.00-g1.el7", "packageName": "gce-disk-expand" } }, "createTime": "2024-06-25T15:09:42.943200Z" }, "installedPackage-slang:x86_64:2.2.4-11.el7": { "id": "installedPackage-slang:x86_64:2.2.4-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.2.4-11.el7", "packageName": "slang" } }, "createTime": "2024-06-25T15:09:42.943209Z" }, "installedPackage-kernel:x86_64:3.10.0-1160.el7": { "id": "installedPackage-kernel:x86_64:3.10.0-1160.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.el7", "packageName": "kernel" } }, "createTime": "2024-06-25T15:09:42.943069Z" }, "installedPackage-make:x86_64:1:3.82-24.el7": { "id": "installedPackage-make:x86_64:1:3.82-24.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:3.82-24.el7", "packageName": "make" } }, "createTime": "2024-06-25T15:09:42.943178Z" }, "installedPackage-perl-Filter:x86_64:1.49-3.el7": { "id": "installedPackage-perl-Filter:x86_64:1.49-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.49-3.el7", "packageName": "perl-Filter" } }, "createTime": "2024-06-25T15:09:42.943126Z" }, "installedPackage-google-osconfig-agent:x86_64:1:20240501.03-g1.el7": { "id": "installedPackage-google-osconfig-agent:x86_64:1:20240501.03-g1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:20240501.03-g1.el7", "packageName": "google-osconfig-agent" } }, "createTime": "2024-06-25T15:09:42.943134Z" }, "installedPackage-basesystem:all:10.0-7.el7": { "id": "installedPackage-basesystem:all:10.0-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "10.0-7.el7", "packageName": "basesystem" } }, "createTime": "2024-06-25T15:09:42.943108Z" }, "installedPackage-cracklib-dicts:x86_64:2.9.0-11.el7": { "id": "installedPackage-cracklib-dicts:x86_64:2.9.0-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.9.0-11.el7", "packageName": "cracklib-dicts" } }, "createTime": "2024-06-25T15:09:42.943152Z" }, "installedPackage-python-slip-dbus:all:0.4.0-4.el7": { "id": "installedPackage-python-slip-dbus:all:0.4.0-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.4.0-4.el7", "packageName": "python-slip-dbus" } }, "createTime": "2024-06-25T15:09:42.943110Z" }, "installedPackage-libgpg-error:x86_64:1.12-3.el7": { "id": "installedPackage-libgpg-error:x86_64:1.12-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.12-3.el7", "packageName": "libgpg-error" } }, "createTime": "2024-06-25T15:09:42.943069Z" }, "installedPackage-pth:x86_64:2.0.7-23.el7": { "id": "installedPackage-pth:x86_64:2.0.7-23.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.0.7-23.el7", "packageName": "pth" } }, "createTime": "2024-06-25T15:09:42.943148Z" }, "installedPackage-which:x86_64:2.20-7.el7": { "id": "installedPackage-which:x86_64:2.20-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.20-7.el7", "packageName": "which" } }, "createTime": "2024-06-25T15:09:42.943193Z" }, "installedPackage-python-chardet:all:2.2.1-3.el7": { "id": "installedPackage-python-chardet:all:2.2.1-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.2.1-3.el7", "packageName": "python-chardet" } }, "createTime": "2024-06-25T15:09:42.943090Z" }, "installedPackage-sg3_utils:x86_64:1:1.37-19.el7": { "id": "installedPackage-sg3_utils:x86_64:1:1.37-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.37-19.el7", "packageName": "sg3_utils" } }, "createTime": "2024-06-25T15:09:42.943119Z" }, "installedPackage-util-linux:x86_64:2.23.2-65.el7_9.1": { "id": "installedPackage-util-linux:x86_64:2.23.2-65.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.23.2-65.el7_9.1", "packageName": "util-linux" } }, "createTime": "2024-06-25T15:09:42.943177Z" }, "installedPackage-elfutils-libelf:x86_64:0.176-5.el7": { "id": "installedPackage-elfutils-libelf:x86_64:0.176-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.176-5.el7", "packageName": "elfutils-libelf" } }, "createTime": "2024-06-25T15:09:42.943116Z" }, "installedPackage-freetype:x86_64:2.8-14.el7_9.1": { "id": "installedPackage-freetype:x86_64:2.8-14.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.8-14.el7_9.1", "packageName": "freetype" } }, "createTime": "2024-06-25T15:09:42.943176Z" }, "installedPackage-jansson:x86_64:2.10-1.el7": { "id": "installedPackage-jansson:x86_64:2.10-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.10-1.el7", "packageName": "jansson" } }, "createTime": "2024-06-25T15:09:42.943081Z" }, "installedPackage-perl-Storable:x86_64:2.45-3.el7": { "id": "installedPackage-perl-Storable:x86_64:2.45-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.45-3.el7", "packageName": "perl-Storable" } }, "createTime": "2024-06-25T15:09:42.943126Z" }, "installedPackage-fipscheck-lib:x86_64:1.4.1-6.el7": { "id": "installedPackage-fipscheck-lib:x86_64:1.4.1-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.4.1-6.el7", "packageName": "fipscheck-lib" } }, "createTime": "2024-06-25T15:09:42.943099Z" }, "installedPackage-python-configobj:all:4.7.2-7.el7": { "id": "installedPackage-python-configobj:all:4.7.2-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "4.7.2-7.el7", "packageName": "python-configobj" } }, "createTime": "2024-06-25T15:09:42.943094Z" }, "installedPackage-dracut:x86_64:033-572.el7": { "id": "installedPackage-dracut:x86_64:033-572.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "033-572.el7", "packageName": "dracut" } }, "createTime": "2024-06-25T15:09:42.943162Z" }, "installedPackage-dhcp-libs:x86_64:12:4.2.5-83.el7_9.2": { "id": "installedPackage-dhcp-libs:x86_64:12:4.2.5-83.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "12:4.2.5-83.el7_9.2", "packageName": "dhcp-libs" } }, "createTime": "2024-06-25T15:09:42.943105Z" }, "installedPackage-dbus-libs:x86_64:1:1.10.24-15.el7": { "id": "installedPackage-dbus-libs:x86_64:1:1.10.24-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.10.24-15.el7", "packageName": "dbus-libs" } }, "createTime": "2024-06-25T15:09:42.943163Z" }, "installedPackage-sqlite:x86_64:3.7.17-8.el7_7.1": { "id": "installedPackage-sqlite:x86_64:3.7.17-8.el7_7.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.7.17-8.el7_7.1", "packageName": "sqlite" } }, "createTime": "2024-06-25T15:09:42.943119Z" }, "installedPackage-tcp_wrappers-libs:x86_64:7.6-77.el7": { "id": "installedPackage-tcp_wrappers-libs:x86_64:7.6-77.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.6-77.el7", "packageName": "tcp_wrappers-libs" } }, "createTime": "2024-06-25T15:09:42.943202Z" }, "installedPackage-kmod-libs:x86_64:20-28.el7": { "id": "installedPackage-kmod-libs:x86_64:20-28.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "20-28.el7", "packageName": "kmod-libs" } }, "createTime": "2024-06-25T15:09:42.943142Z" }, "installedPackage-libcroco:x86_64:0.6.12-6.el7_9": { "id": "installedPackage-libcroco:x86_64:0.6.12-6.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.6.12-6.el7_9", "packageName": "libcroco" } }, "createTime": "2024-06-25T15:09:42.943147Z" }, "installedPackage-passwd:x86_64:0.79-6.el7": { "id": "installedPackage-passwd:x86_64:0.79-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.79-6.el7", "packageName": "passwd" } }, "createTime": "2024-06-25T15:09:42.943073Z" }, "installedPackage-lzo:x86_64:2.06-8.el7": { "id": "installedPackage-lzo:x86_64:2.06-8.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.06-8.el7", "packageName": "lzo" } }, "createTime": "2024-06-25T15:09:42.943223Z" }, "installedPackage-openssl:x86_64:1:1.0.2k-26.el7_9": { "id": "installedPackage-openssl:x86_64:1:1.0.2k-26.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.0.2k-26.el7_9", "packageName": "openssl" } }, "createTime": "2024-06-25T15:09:42.943095Z" }, "installedPackage-xz:x86_64:5.2.2-2.el7_9": { "id": "installedPackage-xz:x86_64:5.2.2-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.2.2-2.el7_9", "packageName": "xz" } }, "createTime": "2024-06-25T15:09:42.943102Z" }, "installedPackage-redhat-support-lib-python:all:0.14.0-1.el7_9": { "id": "installedPackage-redhat-support-lib-python:all:0.14.0-1.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.14.0-1.el7_9", "packageName": "redhat-support-lib-python" } }, "createTime": "2024-06-25T15:09:42.943183Z" }, "installedPackage-acpid:x86_64:2.0.19-9.el7": { "id": "installedPackage-acpid:x86_64:2.0.19-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.0.19-9.el7", "packageName": "acpid" } }, "createTime": "2024-06-25T15:09:42.943194Z" }, "installedPackage-mokutil:x86_64:15.8-1.el7": { "id": "installedPackage-mokutil:x86_64:15.8-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "15.8-1.el7", "packageName": "mokutil" } }, "createTime": "2024-06-25T15:09:42.943093Z" }, "installedPackage-dmidecode:x86_64:1:3.2-5.el7_9.1": { "id": "installedPackage-dmidecode:x86_64:1:3.2-5.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:3.2-5.el7_9.1", "packageName": "dmidecode" } }, "createTime": "2024-06-25T15:09:42.943177Z" }, "installedPackage-vim-filesystem:x86_64:2:7.4.629-8.el7_9": { "id": "installedPackage-vim-filesystem:x86_64:2:7.4.629-8.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:7.4.629-8.el7_9", "packageName": "vim-filesystem" } }, "createTime": "2024-06-25T15:09:42.943202Z" }, "installedPackage-gpm-libs:x86_64:1.20.7-6.el7": { "id": "installedPackage-gpm-libs:x86_64:1.20.7-6.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.20.7-6.el7", "packageName": "gpm-libs" } }, "createTime": "2024-06-25T15:09:42.943149Z" }, "installedPackage-kernel-tools-libs:x86_64:3.10.0-1160.118.1.el7": { "id": "installedPackage-kernel-tools-libs:x86_64:3.10.0-1160.118.1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.118.1.el7", "packageName": "kernel-tools-libs" } }, "createTime": "2024-06-25T15:09:42.943179Z" }, "installedPackage-openssh-server:x86_64:7.4p1-23.el7_9": { "id": "installedPackage-openssh-server:x86_64:7.4p1-23.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.4p1-23.el7_9", "packageName": "openssh-server" } }, "createTime": "2024-06-25T15:09:42.943185Z" }, "installedPackage-python-decorator:all:3.4.0-3.el7": { "id": "installedPackage-python-decorator:all:3.4.0-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.4.0-3.el7", "packageName": "python-decorator" } }, "createTime": "2024-06-25T15:09:42.943151Z" }, "installedPackage-filesystem:x86_64:3.2-25.el7": { "id": "installedPackage-filesystem:x86_64:3.2-25.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.2-25.el7", "packageName": "filesystem" } }, "createTime": "2024-06-25T15:09:42.943108Z" }, "installedPackage-grub2:x86_64:1:2.02-0.87.el7_9.14": { "id": "installedPackage-grub2:x86_64:1:2.02-0.87.el7_9.14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:2.02-0.87.el7_9.14", "packageName": "grub2" } }, "createTime": "2024-06-25T15:09:42.943184Z" }, "installedPackage-iwl2000-firmware:all:18.168.6.1-83.el7_9": { "id": "installedPackage-iwl2000-firmware:all:18.168.6.1-83.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "18.168.6.1-83.el7_9", "packageName": "iwl2000-firmware" } }, "createTime": "2024-06-25T15:09:42.943169Z" }, "installedPackage-python-iniparse:all:0.4-9.el7": { "id": "installedPackage-python-iniparse:all:0.4-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.4-9.el7", "packageName": "python-iniparse" } }, "createTime": "2024-06-25T15:09:42.943155Z" }, "installedPackage-nmap-ncat:x86_64:2:6.40-19.el7": { "id": "installedPackage-nmap-ncat:x86_64:2:6.40-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:6.40-19.el7", "packageName": "nmap-ncat" } }, "createTime": "2024-06-25T15:09:42.943221Z" }, "installedPackage-libdb-utils:x86_64:5.3.21-25.el7": { "id": "installedPackage-libdb-utils:x86_64:5.3.21-25.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.3.21-25.el7", "packageName": "libdb-utils" } }, "createTime": "2024-06-25T15:09:42.943086Z" }, "installedPackage-python-requests:all:2.6.0-10.el7": { "id": "installedPackage-python-requests:all:2.6.0-10.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.6.0-10.el7", "packageName": "python-requests" } }, "createTime": "2024-06-25T15:09:42.943172Z" }, "installedPackage-procps-ng:x86_64:3.3.10-28.el7": { "id": "installedPackage-procps-ng:x86_64:3.3.10-28.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.3.10-28.el7", "packageName": "procps-ng" } }, "createTime": "2024-06-25T15:09:42.943162Z" }, "installedPackage-kernel:x86_64:3.10.0-1160.118.1.el7": { "id": "installedPackage-kernel:x86_64:3.10.0-1160.118.1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.10.0-1160.118.1.el7", "packageName": "kernel" } }, "createTime": "2024-06-25T15:09:42.943183Z" }, "installedPackage-linux-firmware:all:20200421-83.git78c0348.el7_9": { "id": "installedPackage-linux-firmware:all:20200421-83.git78c0348.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "20200421-83.git78c0348.el7_9", "packageName": "linux-firmware" } }, "createTime": "2024-06-25T15:09:42.943168Z" }, "installedPackage-os-prober:x86_64:1.58-9.el7": { "id": "installedPackage-os-prober:x86_64:1.58-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.58-9.el7", "packageName": "os-prober" } }, "createTime": "2024-06-25T15:09:42.943228Z" }, "installedPackage-qemu-guest-agent:x86_64:10:2.12.0-3.el7": { "id": "installedPackage-qemu-guest-agent:x86_64:10:2.12.0-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "10:2.12.0-3.el7", "packageName": "qemu-guest-agent" } }, "createTime": "2024-06-25T15:09:42.943116Z" }, "installedPackage-ipset:x86_64:7.1-1.el7": { "id": "installedPackage-ipset:x86_64:7.1-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.1-1.el7", "packageName": "ipset" } }, "createTime": "2024-06-25T15:09:42.943139Z" }, "installedPackage-libpcap:x86_64:14:1.5.3-13.el7_9": { "id": "installedPackage-libpcap:x86_64:14:1.5.3-13.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "14:1.5.3-13.el7_9", "packageName": "libpcap" } }, "createTime": "2024-06-25T15:09:42.943182Z" }, "installedPackage-lua:x86_64:5.1.4-15.el7": { "id": "installedPackage-lua:x86_64:5.1.4-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.1.4-15.el7", "packageName": "lua" } }, "createTime": "2024-06-25T15:09:42.943072Z" }, "installedPackage-python-cffi:x86_64:1.6.0-5.el7": { "id": "installedPackage-python-cffi:x86_64:1.6.0-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.6.0-5.el7", "packageName": "python-cffi" } }, "createTime": "2024-06-25T15:09:42.943212Z" }, "installedPackage-gettext:x86_64:0.19.8.1-3.el7_9": { "id": "installedPackage-gettext:x86_64:0.19.8.1-3.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.19.8.1-3.el7_9", "packageName": "gettext" } }, "createTime": "2024-06-25T15:09:42.943212Z" }, "installedPackage-python-pyudev:all:0.15-9.el7": { "id": "installedPackage-python-pyudev:all:0.15-9.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.15-9.el7", "packageName": "python-pyudev" } }, "createTime": "2024-06-25T15:09:42.943191Z" }, "installedPackage-perl-parent:all:1:0.225-244.el7": { "id": "installedPackage-perl-parent:all:1:0.225-244.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:0.225-244.el7", "packageName": "perl-parent" } }, "createTime": "2024-06-25T15:09:42.943196Z" }, "availablePackage-google-osconfig-agent:x86_64:1:20240524.03-g1.el7": { "id": "availablePackage-google-osconfig-agent:x86_64:1:20240524.03-g1.el7", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "1:20240524.03-g1.el7", "packageName": "google-osconfig-agent" } }, "createTime": "2024-06-25T15:09:42.943055Z" }, "installedPackage-tar:x86_64:2:1.26-35.el7": { "id": "installedPackage-tar:x86_64:2:1.26-35.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:1.26-35.el7", "packageName": "tar" } }, "createTime": "2024-06-25T15:09:42.943085Z" }, "installedPackage-perl-HTTP-Tiny:all:0.033-3.el7": { "id": "installedPackage-perl-HTTP-Tiny:all:0.033-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.033-3.el7", "packageName": "perl-HTTP-Tiny" } }, "createTime": "2024-06-25T15:09:42.943122Z" }, "installedPackage-mariadb-libs:x86_64:1:5.5.68-1.el7": { "id": "installedPackage-mariadb-libs:x86_64:1:5.5.68-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:5.5.68-1.el7", "packageName": "mariadb-libs" } }, "createTime": "2024-06-25T15:09:42.943220Z" }, "installedPackage-perl-podlators:all:2.5.1-3.el7": { "id": "installedPackage-perl-podlators:all:2.5.1-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.5.1-3.el7", "packageName": "perl-podlators" } }, "createTime": "2024-06-25T15:09:42.943074Z" }, "installedPackage-libfastjson:x86_64:0.99.4-3.el7": { "id": "installedPackage-libfastjson:x86_64:0.99.4-3.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.99.4-3.el7", "packageName": "libfastjson" } }, "createTime": "2024-06-25T15:09:42.943161Z" }, "installedPackage-coreutils:x86_64:8.22-24.el7_9.2": { "id": "installedPackage-coreutils:x86_64:8.22-24.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "8.22-24.el7_9.2", "packageName": "coreutils" } }, "createTime": "2024-06-25T15:09:42.943142Z" }, "installedPackage-ncurses:x86_64:5.9-14.20130511.el7_4": { "id": "installedPackage-ncurses:x86_64:5.9-14.20130511.el7_4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.9-14.20130511.el7_4", "packageName": "ncurses" } }, "createTime": "2024-06-25T15:09:42.943087Z" }, "installedPackage-cpio:x86_64:2.11-28.el7": { "id": "installedPackage-cpio:x86_64:2.11-28.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.11-28.el7", "packageName": "cpio" } }, "createTime": "2024-06-25T15:09:42.943071Z" }, "installedPackage-dbus-glib:x86_64:0.100-7.el7": { "id": "installedPackage-dbus-glib:x86_64:0.100-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.100-7.el7", "packageName": "dbus-glib" } }, "createTime": "2024-06-25T15:09:42.943109Z" }, "installedPackage-redhat-logos:all:70.7.0-1.el7": { "id": "installedPackage-redhat-logos:all:70.7.0-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "70.7.0-1.el7", "packageName": "redhat-logos" } }, "createTime": "2024-06-25T15:09:42.943219Z" }, "installedPackage-glib2:x86_64:2.56.1-9.el7_9": { "id": "installedPackage-glib2:x86_64:2.56.1-9.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.56.1-9.el7_9", "packageName": "glib2" } }, "createTime": "2024-06-25T15:09:42.943147Z" }, "installedPackage-gpg-pubkey:(none):2fa658e0-45700c69": { "id": "installedPackage-gpg-pubkey:(none):2fa658e0-45700c69", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "2fa658e0-45700c69", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943199Z" }, "installedPackage-man-db:x86_64:2.6.3-11.el7": { "id": "installedPackage-man-db:x86_64:2.6.3-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.6.3-11.el7", "packageName": "man-db" } }, "createTime": "2024-06-25T15:09:42.943120Z" }, "installedPackage-yum-metadata-parser:x86_64:1.1.4-10.el7": { "id": "installedPackage-yum-metadata-parser:x86_64:1.1.4-10.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.1.4-10.el7", "packageName": "yum-metadata-parser" } }, "createTime": "2024-06-25T15:09:42.943215Z" }, "installedPackage-info:x86_64:5.1-5.el7": { "id": "installedPackage-info:x86_64:5.1-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.1-5.el7", "packageName": "info" } }, "createTime": "2024-06-25T15:09:42.943113Z" }, "installedPackage-cronie-anacron:x86_64:1.4.11-25.el7_9": { "id": "installedPackage-cronie-anacron:x86_64:1.4.11-25.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.4.11-25.el7_9", "packageName": "cronie-anacron" } }, "createTime": "2024-06-25T15:09:42.943097Z" }, "installedPackage-tuned:all:2.11.0-12.el7_9": { "id": "installedPackage-tuned:all:2.11.0-12.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "2.11.0-12.el7_9", "packageName": "tuned" } }, "createTime": "2024-06-25T15:09:42.943223Z" }, "installedPackage-perl-Text-ParseWords:all:3.29-4.el7": { "id": "installedPackage-perl-Text-ParseWords:all:3.29-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "3.29-4.el7", "packageName": "perl-Text-ParseWords" } }, "createTime": "2024-06-25T15:09:42.943123Z" }, "installedPackage-btrfs-progs:x86_64:4.9.1-1.el7": { "id": "installedPackage-btrfs-progs:x86_64:4.9.1-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.9.1-1.el7", "packageName": "btrfs-progs" } }, "createTime": "2024-06-25T15:09:42.943073Z" }, "installedPackage-hostname:x86_64:3.13-3.el7_7.1": { "id": "installedPackage-hostname:x86_64:3.13-3.el7_7.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.13-3.el7_7.1", "packageName": "hostname" } }, "createTime": "2024-06-25T15:09:42.943136Z" }, "installedPackage-polkit:x86_64:0.112-26.el7_9.1": { "id": "installedPackage-polkit:x86_64:0.112-26.el7_9.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.112-26.el7_9.1", "packageName": "polkit" } }, "createTime": "2024-06-25T15:09:42.943180Z" }, "installedPackage-NetworkManager-team:x86_64:1:1.18.8-2.el7_9": { "id": "installedPackage-NetworkManager-team:x86_64:1:1.18.8-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:1.18.8-2.el7_9", "packageName": "NetworkManager-team" } }, "createTime": "2024-06-25T15:09:42.943222Z" }, "installedPackage-systemd:x86_64:219-78.el7_9.9": { "id": "installedPackage-systemd:x86_64:219-78.el7_9.9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "219-78.el7_9.9", "packageName": "systemd" } }, "createTime": "2024-06-25T15:09:42.943179Z" }, "installedPackage-dhcp-common:x86_64:12:4.2.5-83.el7_9.2": { "id": "installedPackage-dhcp-common:x86_64:12:4.2.5-83.el7_9.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "12:4.2.5-83.el7_9.2", "packageName": "dhcp-common" } }, "createTime": "2024-06-25T15:09:42.943166Z" }, "installedPackage-audit:x86_64:2.8.5-4.el7": { "id": "installedPackage-audit:x86_64:2.8.5-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.8.5-4.el7", "packageName": "audit" } }, "createTime": "2024-06-25T15:09:42.943115Z" }, "availablePackage-google-cloud-cli:x86_64:482.0.0-1": { "id": "availablePackage-google-cloud-cli:x86_64:482.0.0-1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "x86_64", "version": "482.0.0-1", "packageName": "google-cloud-cli" } }, "createTime": "2024-06-25T15:09:42.943049Z" }, "availablePackage-google-compute-engine:all:1:20240607.00-g1.el7": { "id": "availablePackage-google-compute-engine:all:1:20240607.00-g1.el7", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "yumPackage": { "architecture": "all", "version": "1:20240607.00-g1.el7", "packageName": "google-compute-engine" } }, "createTime": "2024-06-25T15:09:42.943052Z" }, "installedPackage-python-magic:all:5.11-37.el7": { "id": "installedPackage-python-magic:all:5.11-37.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "5.11-37.el7", "packageName": "python-magic" } }, "createTime": "2024-06-25T15:09:42.943217Z" }, "installedPackage-ipset-libs:x86_64:7.1-1.el7": { "id": "installedPackage-ipset-libs:x86_64:7.1-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "7.1-1.el7", "packageName": "ipset-libs" } }, "createTime": "2024-06-25T15:09:42.943084Z" }, "installedPackage-grub2-pc:x86_64:1:2.02-0.87.el7_9.14": { "id": "installedPackage-grub2-pc:x86_64:1:2.02-0.87.el7_9.14", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1:2.02-0.87.el7_9.14", "packageName": "grub2-pc" } }, "createTime": "2024-06-25T15:09:42.943181Z" }, "installedPackage-gpg-pubkey:(none):42193e6b-4624eff2": { "id": "installedPackage-gpg-pubkey:(none):42193e6b-4624eff2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "42193e6b-4624eff2", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943078Z" }, "installedPackage-gettext-libs:x86_64:0.19.8.1-3.el7_9": { "id": "installedPackage-gettext-libs:x86_64:0.19.8.1-3.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "0.19.8.1-3.el7_9", "packageName": "gettext-libs" } }, "createTime": "2024-06-25T15:09:42.943174Z" }, "installedPackage-vim-minimal:x86_64:2:7.4.629-8.el7_9": { "id": "installedPackage-vim-minimal:x86_64:2:7.4.629-8.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:7.4.629-8.el7_9", "packageName": "vim-minimal" } }, "createTime": "2024-06-25T15:09:42.943178Z" }, "installedPackage-sysvinit-tools:x86_64:2.88-14.dsf.el7": { "id": "installedPackage-sysvinit-tools:x86_64:2.88-14.dsf.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.88-14.dsf.el7", "packageName": "sysvinit-tools" } }, "createTime": "2024-06-25T15:09:42.943134Z" }, "installedPackage-bc:x86_64:1.06.95-13.el7": { "id": "installedPackage-bc:x86_64:1.06.95-13.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.06.95-13.el7", "packageName": "bc" } }, "createTime": "2024-06-25T15:09:42.943141Z" }, "installedPackage-shadow-utils:x86_64:2:4.6-5.el7": { "id": "installedPackage-shadow-utils:x86_64:2:4.6-5.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2:4.6-5.el7", "packageName": "shadow-utils" } }, "createTime": "2024-06-25T15:09:42.943151Z" }, "installedPackage-rootfiles:all:8.1-11.el7": { "id": "installedPackage-rootfiles:all:8.1-11.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "8.1-11.el7", "packageName": "rootfiles" } }, "createTime": "2024-06-25T15:09:42.943125Z" }, "installedPackage-xz-libs:x86_64:5.2.2-2.el7_9": { "id": "installedPackage-xz-libs:x86_64:5.2.2-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.2.2-2.el7_9", "packageName": "xz-libs" } }, "createTime": "2024-06-25T15:09:42.943139Z" }, "installedPackage-rpm-build-libs:x86_64:4.11.3-48.el7_9": { "id": "installedPackage-rpm-build-libs:x86_64:4.11.3-48.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "4.11.3-48.el7_9", "packageName": "rpm-build-libs" } }, "createTime": "2024-06-25T15:09:42.943215Z" }, "installedPackage-NetworkManager-config-server:all:1:1.18.8-2.el7_9": { "id": "installedPackage-NetworkManager-config-server:all:1:1.18.8-2.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:1.18.8-2.el7_9", "packageName": "NetworkManager-config-server" } }, "createTime": "2024-06-25T15:09:42.943189Z" }, "installedPackage-python-setuptools:all:0.9.8-7.el7": { "id": "installedPackage-python-setuptools:all:0.9.8-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.9.8-7.el7", "packageName": "python-setuptools" } }, "createTime": "2024-06-25T15:09:42.943171Z" }, "installedPackage-python2-pyasn1:all:0.1.9-7.el7": { "id": "installedPackage-python2-pyasn1:all:0.1.9-7.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "0.1.9-7.el7", "packageName": "python2-pyasn1" } }, "createTime": "2024-06-25T15:09:42.943173Z" }, "installedPackage-gobject-introspection:x86_64:1.56.1-1.el7": { "id": "installedPackage-gobject-introspection:x86_64:1.56.1-1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.56.1-1.el7", "packageName": "gobject-introspection" } }, "createTime": "2024-06-25T15:09:42.943214Z" }, "installedPackage-libacl:x86_64:2.2.51-15.el7": { "id": "installedPackage-libacl:x86_64:2.2.51-15.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.2.51-15.el7", "packageName": "libacl" } }, "createTime": "2024-06-25T15:09:42.943117Z" }, "installedPackage-libdrm:x86_64:2.4.97-2.el7": { "id": "installedPackage-libdrm:x86_64:2.4.97-2.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "2.4.97-2.el7", "packageName": "libdrm" } }, "createTime": "2024-06-25T15:09:42.943107Z" }, "installedPackage-systemd-sysv:x86_64:219-78.el7_9.9": { "id": "installedPackage-systemd-sysv:x86_64:219-78.el7_9.9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "219-78.el7_9.9", "packageName": "systemd-sysv" } }, "createTime": "2024-06-25T15:09:42.943220Z" }, "installedPackage-gpg-pubkey:(none):3e1ba8d5-558ab6a8": { "id": "installedPackage-gpg-pubkey:(none):3e1ba8d5-558ab6a8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "(none)", "version": "3e1ba8d5-558ab6a8", "packageName": "gpg-pubkey" } }, "createTime": "2024-06-25T15:09:42.943077Z" }, "installedPackage-e2fsprogs:x86_64:1.42.9-19.el7": { "id": "installedPackage-e2fsprogs:x86_64:1.42.9-19.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.42.9-19.el7", "packageName": "e2fsprogs" } }, "createTime": "2024-06-25T15:09:42.943122Z" }, "installedPackage-diffutils:x86_64:3.3-6.el7_9": { "id": "installedPackage-diffutils:x86_64:3.3-6.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.3-6.el7_9", "packageName": "diffutils" } }, "createTime": "2024-06-25T15:09:42.943218Z" }, "installedPackage-pcre:x86_64:8.32-17.el7": { "id": "installedPackage-pcre:x86_64:8.32-17.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "8.32-17.el7", "packageName": "pcre" } }, "createTime": "2024-06-25T15:09:42.943067Z" }, "installedPackage-libdb:x86_64:5.3.21-25.el7": { "id": "installedPackage-libdb:x86_64:5.3.21-25.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "5.3.21-25.el7", "packageName": "libdb" } }, "createTime": "2024-06-25T15:09:42.943114Z" }, "installedPackage-iwl2030-firmware:all:18.168.6.1-83.el7_9": { "id": "installedPackage-iwl2030-firmware:all:18.168.6.1-83.el7_9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "18.168.6.1-83.el7_9", "packageName": "iwl2030-firmware" } }, "createTime": "2024-06-25T15:09:42.943239Z" }, "installedPackage-libedit:x86_64:3.0-12.20121213cvs.el7": { "id": "installedPackage-libedit:x86_64:3.0-12.20121213cvs.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.0-12.20121213cvs.el7", "packageName": "libedit" } }, "createTime": "2024-06-25T15:09:42.943201Z" }, "installedPackage-libnl3-cli:x86_64:3.2.28-4.el7": { "id": "installedPackage-libnl3-cli:x86_64:3.2.28-4.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "3.2.28-4.el7", "packageName": "libnl3-cli" } }, "createTime": "2024-06-25T15:09:42.943130Z" }, "installedPackage-google-compute-engine:all:1:20240307.00-g1.el7": { "id": "installedPackage-google-compute-engine:all:1:20240307.00-g1.el7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "all", "version": "1:20240307.00-g1.el7", "packageName": "google-compute-engine" } }, "createTime": "2024-06-25T15:09:42.943133Z" }, "installedPackage-sudo:x86_64:1.8.23-10.el7_9.3": { "id": "installedPackage-sudo:x86_64:1.8.23-10.el7_9.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "yumPackage": { "architecture": "x86_64", "version": "1.8.23-10.el7_9.3", "packageName": "sudo" } }, "createTime": "2024-06-25T15:09:42.943186Z" } }, "name": "projects/12340051/locations/us-central1-a/instances/889242947030893995/inventory", "updateTime": "2024-06-25T17:09:42.808067Z" }, { "osInfo": { "longName": "Microsoft Windows Server 2022 Datacenter", "shortName": "windows", "version": "10.0.20348", "architecture": "x86_64", "kernelVersion": "10.0.20348.2520 (WinBuild.160101.0800)", "kernelRelease": "10.0.20348.2520", "osconfigAgentVersion": "20240320.00.0+win@1", "hostname": "instance-windows-with-oa-installed" }, "items": { "installedPackage-GooGet - google-cloud-ops-agent:2.47.0@1:": { "id": "installedPackage-GooGet - google-cloud-ops-agent:2.47.0@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-cloud-ops-agent", "displayVersion": "2.47.0@1", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293438Z" }, "installedPackage-c01629fc-64ea-45f3-b7cb-cabc7d566933:200": { "id": "installedPackage-c01629fc-64ea-45f3-b7cb-cabc7d566933:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "Update for Windows Defender Antivirus antimalware platform - KB4052623 (Version 4.18.2001.10)", "description": "This package will update Windows Defender Antivirus antimalware platform’s components on the user machine.", "categories": [ { "id": "8c3fcc84-7410-4a95-8b89-a166a0190486", "name": "Microsoft Defender Antivirus" }, { "id": "cd5ffd1e-e932-4e3a-bf74-18bf0b1bbd83", "name": "Updates" } ], "kbArticleIds": [ "4052623" ], "moreInfoUrls": [ "https://support.microsoft.com/en-us/help/4052623/update-for-windows-defender-antimalware-platform" ], "updateId": "c01629fc-64ea-45f3-b7cb-cabc7d566933", "revisionNumber": 200, "lastDeploymentChangeTime": "2020-05-01T00:00:00Z", "supportUrl": "https://go.microsoft.com/fwlink/?linkid=862339" } }, "createTime": "2024-06-25T16:58:19.293430Z" }, "installedPackage-KB5039227": { "id": "installedPackage-KB5039227", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "qfePackage": { "caption": "https://support.microsoft.com/help/5039227", "description": "Security Update", "hotFixId": "KB5039227", "installTime": "2024-06-12T00:00:00Z" } }, "createTime": "2024-06-25T16:58:19.293435Z" }, "installedPackage-google-osconfig-agent:x86_64:20240320.00.0+win@1": { "id": "installedPackage-google-osconfig-agent:x86_64:20240320.00.0+win@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "20240320.00.0+win@1", "packageName": "google-osconfig-agent" } }, "createTime": "2024-06-25T16:58:19.293429Z" }, "installedPackage-GooGet - google-compute-engine-vss:1.1.9@56:": { "id": "installedPackage-GooGet - google-compute-engine-vss:1.1.9@56:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-vss", "displayVersion": "1.1.9@56", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293444Z" }, "installedPackage-google-compute-engine-driver-pvpanic:x86_64:16.1.8@9": { "id": "installedPackage-google-compute-engine-driver-pvpanic:x86_64:16.1.8@9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "16.1.8@9", "packageName": "google-compute-engine-driver-pvpanic" } }, "createTime": "2024-06-25T16:58:19.293423Z" }, "installedPackage-google-compute-engine-powershell:noarch:20220728.00@1": { "id": "installedPackage-google-compute-engine-powershell:noarch:20220728.00@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "noarch", "version": "20220728.00@1", "packageName": "google-compute-engine-powershell" } }, "createTime": "2024-06-25T16:58:19.293426Z" }, "installedPackage-KB5039343": { "id": "installedPackage-KB5039343", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "qfePackage": { "description": "Security Update", "hotFixId": "KB5039343", "installTime": "2024-06-12T00:00:00Z" } }, "createTime": "2024-06-25T16:58:19.293436Z" }, "installedPackage-certgen:x86_64:20220603.00.0@1": { "id": "installedPackage-certgen:x86_64:20220603.00.0@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "20220603.00.0@1", "packageName": "certgen" } }, "createTime": "2024-06-25T16:58:19.293419Z" }, "installedPackage-google-compute-engine-metadata-scripts:x86_64:20240109.00.0@1": { "id": "installedPackage-google-compute-engine-metadata-scripts:x86_64:20240109.00.0@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "20240109.00.0@1", "packageName": "google-compute-engine-metadata-scripts" } }, "createTime": "2024-06-25T16:58:19.293425Z" }, "installedPackage-3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9:200": { "id": "installedPackage-3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "Windows Malicious Software Removal Tool x64 - v5.125 (KB890830)", "description": "After the download, this tool runs one time to check your computer for infection by specific, prevalent malicious software (including Blaster, Sasser, and Mydoom) and helps remove any infection that is found. If an infection is found, the tool will display a status report the next time that you start your computer. A new version of the tool will be offered every month. If you want to manually run the tool on your computer, you can download a copy from the Microsoft Download Center, or you can run an online version from microsoft.com. This tool is not a replacement for an antivirus product. To help protect your computer, you should use an antivirus product.", "categories": [ { "id": "28bc880e-0592-4cbf-8f95-c79b17911d5f", "name": "Update Rollups" }, { "id": "569e8e8f-c6cd-42c8-92a3-efbb20a0f6f5", "name": "Windows Server 2016" }, { "id": "f702a48c-919b-45d6-9aef-ca4248d50397", "name": "Windows Server 2019" }, { "id": "21210d67-50bc-4254-a695-281765e10665", "name": "Windows Server, version 1903 and later" } ], "kbArticleIds": [ "890830" ], "moreInfoUrls": [ "http://support.microsoft.com/kb/890830" ], "updateId": "3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-06-11T00:00:00Z", "supportUrl": "http://support.microsoft.com" } }, "createTime": "2024-06-25T16:58:19.293431Z" }, "availablePackage-81de234d-bcac-4306-81e0-f9751fa53436:200": { "id": "availablePackage-81de234d-bcac-4306-81e0-f9751fa53436:200", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "wuaPackage": { "title": "Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.413.510.0) - Current Channel (Broad)", "description": "Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once you have installed this item, it cannot be removed.", "categories": [ { "id": "e0789628-ce08-4437-be74-2495b842f43b", "name": "Definition Updates" }, { "id": "8c3fcc84-7410-4a95-8b89-a166a0190486", "name": "Microsoft Defender Antivirus" } ], "kbArticleIds": [ "2267602" ], "moreInfoUrls": [ "https://go.microsoft.com/fwlink/?linkid=2007160" ], "updateId": "81de234d-bcac-4306-81e0-f9751fa53436", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-06-25T00:00:00Z", "supportUrl": "https://go.microsoft.com/fwlink/?LinkId=52661" } }, "createTime": "2024-06-25T16:58:19.293416Z" }, "installedPackage-google-compute-engine-driver-gvnic:x86_64:1.0.4@73": { "id": "installedPackage-google-compute-engine-driver-gvnic:x86_64:1.0.4@73", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "1.0.4@73", "packageName": "google-compute-engine-driver-gvnic" } }, "createTime": "2024-06-25T16:58:19.293422Z" }, "installedPackage-google-compute-engine-driver-balloon:x86_64:16.1.8@9": { "id": "installedPackage-google-compute-engine-driver-balloon:x86_64:16.1.8@9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "16.1.8@9", "packageName": "google-compute-engine-driver-balloon" } }, "createTime": "2024-06-25T16:58:19.293421Z" }, "installedPackage-google-compute-engine-sysprep:noarch:20240122.00@1": { "id": "installedPackage-google-compute-engine-sysprep:noarch:20240122.00@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "noarch", "version": "20240122.00@1", "packageName": "google-compute-engine-sysprep" } }, "createTime": "2024-06-25T16:58:19.293427Z" }, "installedPackage-GooGet - google-compute-engine-driver-pvpanic:16.1.8@9:": { "id": "installedPackage-GooGet - google-compute-engine-driver-pvpanic:16.1.8@9:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-pvpanic", "displayVersion": "16.1.8@9", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293442Z" }, "installedPackage-28facac6-b366-4845-a057-b634c0ee206e:200": { "id": "installedPackage-28facac6-b366-4845-a057-b634c0ee206e:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "Update for Microsoft Defender Antivirus antimalware platform - KB4052623 (Version 4.18.24050.7) - Current Channel (Broad)", "description": "This package will update Microsoft Defender Antivirus antimalware platform’s components on the user machine.", "categories": [ { "id": "e0789628-ce08-4437-be74-2495b842f43b", "name": "Definition Updates" }, { "id": "8c3fcc84-7410-4a95-8b89-a166a0190486", "name": "Microsoft Defender Antivirus" } ], "kbArticleIds": [ "4052623" ], "moreInfoUrls": [ "https://support.microsoft.com/en-us/help/4052623/update-for-windows-defender-antimalware-platform" ], "updateId": "28facac6-b366-4845-a057-b634c0ee206e", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-06-04T00:00:00Z", "supportUrl": "https://go.microsoft.com/fwlink/?linkid=862339" } }, "createTime": "2024-06-25T16:58:19.293432Z" }, "installedPackage-GooGet - googet:2.18.5@0:": { "id": "installedPackage-GooGet - googet:2.18.5@0:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - googet", "displayVersion": "2.18.5@0", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293437Z" }, "installedPackage-GooGet - google-compute-engine-driver-gga:1.1.6@9:": { "id": "installedPackage-GooGet - google-compute-engine-driver-gga:1.1.6@9:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-gga", "displayVersion": "1.1.6@9", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293440Z" }, "installedPackage-GooGet - google-compute-engine-windows:20240109.00.0@1:": { "id": "installedPackage-GooGet - google-compute-engine-windows:20240109.00.0@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-windows", "displayVersion": "20240109.00.0@1", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293445Z" }, "installedPackage-GooGet - google-compute-engine-driver-vioscsi:16.1.8@9:": { "id": "installedPackage-GooGet - google-compute-engine-driver-vioscsi:16.1.8@9:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-vioscsi", "displayVersion": "16.1.8@9", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293443Z" }, "installedPackage-b9c6a7ec-27ec-4938-b472-210255dab739:200": { "id": "installedPackage-b9c6a7ec-27ec-4938-b472-210255dab739:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "2024-05 Cumulative Update for .NET Framework 3.5, 4.8 and 4.8.1 for Microsoft server operating system version 21H2 for x64 (KB5038282)", "description": "Install this update to resolve issues in Windows. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.", "categories": [ { "id": "71718f13-7324-4b0f-8f9e-2ca9dc978e53", "name": "Microsoft Server operating system-21H2" }, { "id": "cd5ffd1e-e932-4e3a-bf74-18bf0b1bbd83", "name": "Updates" } ], "kbArticleIds": [ "5038282" ], "moreInfoUrls": [ "http://support.microsoft.com/kb/5038282" ], "updateId": "b9c6a7ec-27ec-4938-b472-210255dab739", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-05-14T00:00:00Z", "supportUrl": "http://support.microsoft.com" } }, "createTime": "2024-06-25T16:58:19.293430Z" }, "availablePackage-google-cloud-ops-agent:x86_64:2.48.0@1": { "id": "availablePackage-google-cloud-ops-agent:x86_64:2.48.0@1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "googetPackage": { "architecture": "x86_64", "version": "2.48.0@1", "packageName": "google-cloud-ops-agent" } }, "createTime": "2024-06-25T16:58:19.293410Z" }, "installedPackage-GooGet - google-compute-engine-metadata-scripts:20240109.00.0@1:": { "id": "installedPackage-GooGet - google-compute-engine-metadata-scripts:20240109.00.0@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-metadata-scripts", "displayVersion": "20240109.00.0@1", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293443Z" }, "installedPackage-PowerShell 7-x64:7.4.2.0:Microsoft Corporation": { "id": "installedPackage-PowerShell 7-x64:7.4.2.0:Microsoft Corporation", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "PowerShell 7-x64", "displayVersion": "7.4.2.0", "publisher": "Microsoft Corporation", "installDate": { "year": 2024, "month": 5, "day": 14 }, "helpLink": "https://github.com/PowerShell/PowerShell" } }, "createTime": "2024-06-25T16:58:19.293446Z" }, "installedPackage-google-cloud-ops-agent:x86_64:2.47.0@1": { "id": "installedPackage-google-cloud-ops-agent:x86_64:2.47.0@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "2.47.0@1", "packageName": "google-cloud-ops-agent" } }, "createTime": "2024-06-25T16:58:19.293420Z" }, "installedPackage-KB5037930": { "id": "installedPackage-KB5037930", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "qfePackage": { "caption": "http://support.microsoft.com/?kbid=5037930", "description": "Update", "hotFixId": "KB5037930", "installTime": "2024-05-14T00:00:00Z" } }, "createTime": "2024-06-25T16:58:19.293435Z" }, "installedPackage-PowerShell 7.4.2.0-x64:7.4.2.0:Microsoft Corporation": { "id": "installedPackage-PowerShell 7.4.2.0-x64:7.4.2.0:Microsoft Corporation", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "PowerShell 7.4.2.0-x64", "displayVersion": "7.4.2.0", "publisher": "Microsoft Corporation", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293447Z" }, "installedPackage-GooGet - google-compute-engine-driver-balloon:16.1.8@9:": { "id": "installedPackage-GooGet - google-compute-engine-driver-balloon:16.1.8@9:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-balloon", "displayVersion": "16.1.8@9", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293439Z" }, "installedPackage-GooGet - google-osconfig-agent:20240320.00.0+win@1:": { "id": "installedPackage-GooGet - google-osconfig-agent:20240320.00.0+win@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-osconfig-agent", "displayVersion": "20240320.00.0+win@1", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293445Z" }, "installedPackage-googet:x86_64:2.18.5@0": { "id": "installedPackage-googet:x86_64:2.18.5@0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "2.18.5@0", "packageName": "googet" } }, "createTime": "2024-06-25T16:58:19.293420Z" }, "installedPackage-google-compute-engine-driver-netkvm:x86_64:16.1.8@76": { "id": "installedPackage-google-compute-engine-driver-netkvm:x86_64:16.1.8@76", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "16.1.8@76", "packageName": "google-compute-engine-driver-netkvm" } }, "createTime": "2024-06-25T16:58:19.293423Z" }, "installedPackage-GooGet - google-compute-engine-driver-gvnic:1.0.4@73:": { "id": "installedPackage-GooGet - google-compute-engine-driver-gvnic:1.0.4@73:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-gvnic", "displayVersion": "1.0.4@73", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293441Z" }, "availablePackage-google-osconfig-agent:x86_64:20240524.03.0+win@1": { "id": "availablePackage-google-osconfig-agent:x86_64:20240524.03.0+win@1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "googetPackage": { "architecture": "x86_64", "version": "20240524.03.0+win@1", "packageName": "google-osconfig-agent" } }, "createTime": "2024-06-25T16:58:19.293414Z" }, "installedPackage-a662cc5e-0a69-43e5-9194-ea95dc6708fd:200": { "id": "installedPackage-a662cc5e-0a69-43e5-9194-ea95dc6708fd:200", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.413.508.0) - Current Channel (Broad)", "description": "Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once you have installed this item, it cannot be removed.", "categories": [ { "id": "e0789628-ce08-4437-be74-2495b842f43b", "name": "Definition Updates" }, { "id": "8c3fcc84-7410-4a95-8b89-a166a0190486", "name": "Microsoft Defender Antivirus" } ], "kbArticleIds": [ "2267602" ], "moreInfoUrls": [ "https://go.microsoft.com/fwlink/?linkid=2007160" ], "updateId": "a662cc5e-0a69-43e5-9194-ea95dc6708fd", "revisionNumber": 200, "lastDeploymentChangeTime": "2024-06-25T00:00:00Z", "supportUrl": "https://go.microsoft.com/fwlink/?LinkId=52661" } }, "createTime": "2024-06-25T16:58:19.293433Z" }, "installedPackage-google-compute-engine-driver-gga:x86_64:1.1.6@9": { "id": "installedPackage-google-compute-engine-driver-gga:x86_64:1.1.6@9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "1.1.6@9", "packageName": "google-compute-engine-driver-gga" } }, "createTime": "2024-06-25T16:58:19.293422Z" }, "installedPackage-4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed:1": { "id": "installedPackage-4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed:1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "wuaPackage": { "title": "2024-06 Cumulative Update for Microsoft server operating system version 21H2 for x64-based Systems (KB5039227)", "description": "Install this update to resolve issues in Microsoft server operating system, version 21H2. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.", "categories": [ { "id": "0fa1201d-4330-4fa8-8ae9-b877473b6441", "name": "Security Updates" } ], "kbArticleIds": [ "5039227" ], "moreInfoUrls": [ "https://support.microsoft.com/help/5039227" ], "updateId": "4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed", "revisionNumber": 1, "lastDeploymentChangeTime": "2024-06-11T00:00:00Z", "supportUrl": "https://support.microsoft.com/help/5039227" } }, "createTime": "2024-06-25T16:58:19.293434Z" }, "installedPackage-Microsoft Edge:126.0.2592.68:Microsoft Corporation": { "id": "installedPackage-Microsoft Edge:126.0.2592.68:Microsoft Corporation", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "Microsoft Edge", "displayVersion": "126.0.2592.68", "publisher": "Microsoft Corporation", "installDate": { "year": 2024, "month": 6, "day": 22 } } }, "createTime": "2024-06-25T16:58:19.293447Z" }, "installedPackage-google-compute-engine-vss:x86_64:1.1.9@56": { "id": "installedPackage-google-compute-engine-vss:x86_64:1.1.9@56", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "1.1.9@56", "packageName": "google-compute-engine-vss" } }, "createTime": "2024-06-25T16:58:19.293428Z" }, "installedPackage-GooGet - google-compute-engine-sysprep:20240122.00@1:": { "id": "installedPackage-GooGet - google-compute-engine-sysprep:20240122.00@1:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-sysprep", "displayVersion": "20240122.00@1", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293444Z" }, "installedPackage-google-compute-engine-windows:x86_64:20240109.00.0@1": { "id": "installedPackage-google-compute-engine-windows:x86_64:20240109.00.0@1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "20240109.00.0@1", "packageName": "google-compute-engine-windows" } }, "createTime": "2024-06-25T16:58:19.293428Z" }, "installedPackage-google-compute-engine-driver-vioscsi:x86_64:16.1.8@9": { "id": "installedPackage-google-compute-engine-driver-vioscsi:x86_64:16.1.8@9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "16.1.8@9", "packageName": "google-compute-engine-driver-vioscsi" } }, "createTime": "2024-06-25T16:58:19.293424Z" }, "installedPackage-GooGet - google-compute-engine-driver-netkvm:16.1.8@76:": { "id": "installedPackage-GooGet - google-compute-engine-driver-netkvm:16.1.8@76:", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "GooGet - google-compute-engine-driver-netkvm", "displayVersion": "16.1.8@76", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293442Z" }, "installedPackage-KB5034439": { "id": "installedPackage-KB5034439", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "qfePackage": { "caption": "https://support.microsoft.com/help/5034439", "description": "Security Update", "hotFixId": "KB5034439", "installTime": "2024-05-14T00:00:00Z" } }, "createTime": "2024-06-25T16:58:19.293436Z" }, "installedPackage-Google Cloud SDK::Google LLC": { "id": "installedPackage-Google Cloud SDK::Google LLC", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "windowsApplication": { "displayName": "Google Cloud SDK", "publisher": "Google LLC", "installDate": {} } }, "createTime": "2024-06-25T16:58:19.293446Z" }, "installedPackage-google-compute-engine-diagnostics:x86_64:1.2.0@0": { "id": "installedPackage-google-compute-engine-diagnostics:x86_64:1.2.0@0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "googetPackage": { "architecture": "x86_64", "version": "1.2.0@0", "packageName": "google-compute-engine-diagnostics" } }, "createTime": "2024-06-25T16:58:19.293421Z" } }, "name": "projects/12340051/locations/us-central1-a/instances/1198993196692273760/inventory", "updateTime": "2024-06-25T17:08:35.382966Z" }, { "osInfo": { "longName": "Debian GNU/Linux 10 (buster)", "shortName": "debian", "version": "10", "architecture": "x86_64", "kernelVersion": "#1 SMP Debian 4.19.304-1 (2024-01-09)", "kernelRelease": "4.19.0-26-cloud-amd64", "osconfigAgentVersion": "20240501.03-g1", "hostname": "instance-legacy-monitoring-installed" }, "items": { "installedPackage-libassuan0:x86_64:2.5.2-1": { "id": "installedPackage-libassuan0:x86_64:2.5.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.5.2-1", "packageName": "libassuan0" } }, "createTime": "2024-06-25T14:17:46.578174Z" }, "installedPackage-libgpm2:x86_64:1.20.7-5": { "id": "installedPackage-libgpm2:x86_64:1.20.7-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.20.7-5", "packageName": "libgpm2" } }, "createTime": "2024-06-25T14:17:46.578208Z" }, "installedPackage-python3-debian:all:0.1.35": { "id": "installedPackage-python3-debian:all:0.1.35", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.1.35", "packageName": "python3-debian" } }, "createTime": "2024-06-25T14:17:46.578313Z" }, "installedPackage-linux-base:all:4.6": { "id": "installedPackage-linux-base:all:4.6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "4.6", "packageName": "linux-base" } }, "createTime": "2024-06-25T14:17:46.578287Z" }, "installedPackage-libext2fs2:x86_64:1.44.5-1+deb10u3": { "id": "installedPackage-libext2fs2:x86_64:1.44.5-1+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.44.5-1+deb10u3", "packageName": "libext2fs2" } }, "createTime": "2024-06-25T14:17:46.578195Z" }, "installedPackage-procps:x86_64:2:3.3.15-2": { "id": "installedPackage-procps:x86_64:2:3.3.15-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:3.3.15-2", "packageName": "procps" } }, "createTime": "2024-06-25T14:17:46.578308Z" }, "installedPackage-libc6:x86_64:2.28-10+deb10u3": { "id": "installedPackage-libc6:x86_64:2.28-10+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.28-10+deb10u3", "packageName": "libc6" } }, "createTime": "2024-06-25T14:17:46.578181Z" }, "installedPackage-python3-pysimplesoap:all:1.16.2-1": { "id": "installedPackage-python3-pysimplesoap:all:1.16.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.16.2-1", "packageName": "python3-pysimplesoap" } }, "createTime": "2024-06-25T14:17:46.578318Z" }, "installedPackage-libgcrypt20:x86_64:1.8.4-5+deb10u1": { "id": "installedPackage-libgcrypt20:x86_64:1.8.4-5+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.4-5+deb10u1", "packageName": "libgcrypt20" } }, "createTime": "2024-06-25T14:17:46.578203Z" }, "installedPackage-kmod:x86_64:26-1": { "id": "installedPackage-kmod:x86_64:26-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "26-1", "packageName": "kmod" } }, "createTime": "2024-06-25T14:17:46.578168Z" }, "installedPackage-libidn11:x86_64:1.33-2.2": { "id": "installedPackage-libidn11:x86_64:1.33-2.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.33-2.2", "packageName": "libidn11" } }, "createTime": "2024-06-25T14:17:46.578211Z" }, "availablePackage-google-guest-agent:x86_64:1:20240528.00-g1": { "id": "availablePackage-google-guest-agent:x86_64:1:20240528.00-g1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20240528.00-g1", "packageName": "google-guest-agent" } }, "createTime": "2024-06-25T14:17:46.578081Z" }, "installedPackage-python3-apt:x86_64:1.8.4.3": { "id": "installedPackage-python3-apt:x86_64:1.8.4.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.4.3", "packageName": "python3-apt" } }, "createTime": "2024-06-25T14:17:46.578311Z" }, "installedPackage-libexpat1:x86_64:2.2.6-2+deb10u7": { "id": "installedPackage-libexpat1:x86_64:2.2.6-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.6-2+deb10u7", "packageName": "libexpat1" } }, "createTime": "2024-06-25T14:17:46.578195Z" }, "installedPackage-dmidecode:x86_64:3.2-1": { "id": "installedPackage-dmidecode:x86_64:3.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2-1", "packageName": "dmidecode" } }, "createTime": "2024-06-25T14:17:46.578125Z" }, "installedPackage-dash:x86_64:0.5.10.2-5": { "id": "installedPackage-dash:x86_64:0.5.10.2-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.5.10.2-5", "packageName": "dash" } }, "createTime": "2024-06-25T14:17:46.578103Z" }, "installedPackage-python3-idna:all:2.6-1+deb10u1": { "id": "installedPackage-python3-idna:all:2.6-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.6-1+deb10u1", "packageName": "python3-idna" } }, "createTime": "2024-06-25T14:17:46.578315Z" }, "installedPackage-libargon2-1:x86_64:0~20171227-0.2": { "id": "installedPackage-libargon2-1:x86_64:0~20171227-0.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0~20171227-0.2", "packageName": "libargon2-1" } }, "createTime": "2024-06-25T14:17:46.578174Z" }, "installedPackage-gpgconf:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpgconf:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpgconf" } }, "createTime": "2024-06-25T14:17:46.578151Z" }, "installedPackage-libmariadb3:x86_64:1:10.3.39-0+deb10u2": { "id": "installedPackage-libmariadb3:x86_64:1:10.3.39-0+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:10.3.39-0+deb10u2", "packageName": "libmariadb3" } }, "createTime": "2024-06-25T14:17:46.578233Z" }, "installedPackage-libfribidi0:x86_64:1.0.5-3.1+deb10u2": { "id": "installedPackage-libfribidi0:x86_64:1.0.5-3.1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.5-3.1+deb10u2", "packageName": "libfribidi0" } }, "createTime": "2024-06-25T14:17:46.578199Z" }, "installedPackage-python3:x86_64:3.7.3-1": { "id": "installedPackage-python3:x86_64:3.7.3-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-1", "packageName": "python3" } }, "createTime": "2024-06-25T14:17:46.578310Z" }, "installedPackage-libltdl7:x86_64:2.4.6-9": { "id": "installedPackage-libltdl7:x86_64:2.4.6-9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.4.6-9", "packageName": "libltdl7" } }, "createTime": "2024-06-25T14:17:46.578226Z" }, "installedPackage-libmnl0:x86_64:1.0.4-2": { "id": "installedPackage-libmnl0:x86_64:1.0.4-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.4-2", "packageName": "libmnl0" } }, "createTime": "2024-06-25T14:17:46.578233Z" }, "installedPackage-libapt-pkg5.0:x86_64:1.8.2.3": { "id": "installedPackage-libapt-pkg5.0:x86_64:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2.3", "packageName": "libapt-pkg5.0" } }, "createTime": "2024-06-25T14:17:46.578173Z" }, "installedPackage-libpython2.7-minimal:x86_64:2.7.16-2+deb10u4": { "id": "installedPackage-libpython2.7-minimal:x86_64:2.7.16-2+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.7.16-2+deb10u4", "packageName": "libpython2.7-minimal" } }, "createTime": "2024-06-25T14:17:46.578261Z" }, "installedPackage-gpgv:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpgv:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpgv" } }, "createTime": "2024-06-25T14:17:46.578152Z" }, "installedPackage-bsdutils:x86_64:1:2.33.1-0.1+deb10u1": { "id": "installedPackage-bsdutils:x86_64:1:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.33.1-0.1+deb10u1", "packageName": "bsdutils" } }, "createTime": "2024-06-25T14:17:46.578097Z" }, "installedPackage-libblkid1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libblkid1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libblkid1" } }, "createTime": "2024-06-25T14:17:46.578178Z" }, "installedPackage-libnettle6:x86_64:3.4.1-1+deb10u1": { "id": "installedPackage-libnettle6:x86_64:3.4.1-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.4.1-1+deb10u1", "packageName": "libnettle6" } }, "createTime": "2024-06-25T14:17:46.578238Z" }, "installedPackage-e2fsprogs:x86_64:1.44.5-1+deb10u3": { "id": "installedPackage-e2fsprogs:x86_64:1.44.5-1+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.44.5-1+deb10u3", "packageName": "e2fsprogs" } }, "createTime": "2024-06-25T14:17:46.578128Z" }, "installedPackage-libksba8:x86_64:1.3.5-2+deb10u2": { "id": "installedPackage-libksba8:x86_64:1.3.5-2+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.5-2+deb10u2", "packageName": "libksba8" } }, "createTime": "2024-06-25T14:17:46.578221Z" }, "installedPackage-publicsuffix:all:20220811.1734-0+deb10u1": { "id": "installedPackage-publicsuffix:all:20220811.1734-0+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "20220811.1734-0+deb10u1", "packageName": "publicsuffix" } }, "createTime": "2024-06-25T14:17:46.578309Z" }, "installedPackage-findutils:x86_64:4.6.0+git+20190209-2": { "id": "installedPackage-findutils:x86_64:4.6.0+git+20190209-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.6.0+git+20190209-2", "packageName": "findutils" } }, "createTime": "2024-06-25T14:17:46.578134Z" }, "installedPackage-python3-debianbts:all:2.8.2": { "id": "installedPackage-python3-debianbts:all:2.8.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.8.2", "packageName": "python3-debianbts" } }, "createTime": "2024-06-25T14:17:46.578314Z" }, "installedPackage-libpython2.7-stdlib:x86_64:2.7.16-2+deb10u4": { "id": "installedPackage-libpython2.7-stdlib:x86_64:2.7.16-2+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.7.16-2+deb10u4", "packageName": "libpython2.7-stdlib" } }, "createTime": "2024-06-25T14:17:46.578262Z" }, "installedPackage-libsasl2-2:x86_64:2.1.27+dfsg-1+deb10u2": { "id": "installedPackage-libsasl2-2:x86_64:2.1.27+dfsg-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.27+dfsg-1+deb10u2", "packageName": "libsasl2-2" } }, "createTime": "2024-06-25T14:17:46.578267Z" }, "installedPackage-libsepol1:x86_64:2.8-1": { "id": "installedPackage-libsepol1:x86_64:2.8-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.8-1", "packageName": "libsepol1" } }, "createTime": "2024-06-25T14:17:46.578272Z" }, "installedPackage-vim-common:all:2:8.1.0875-5+deb10u6": { "id": "installedPackage-vim-common:all:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2:8.1.0875-5+deb10u6", "packageName": "vim-common" } }, "createTime": "2024-06-25T14:17:46.578337Z" }, "installedPackage-libestr0:x86_64:0.1.10-2.1": { "id": "installedPackage-libestr0:x86_64:0.1.10-2.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.1.10-2.1", "packageName": "libestr0" } }, "createTime": "2024-06-25T14:17:46.578193Z" }, "installedPackage-ncurses-base:all:6.1+20181013-2+deb10u5": { "id": "installedPackage-ncurses-base:all:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "6.1+20181013-2+deb10u5", "packageName": "ncurses-base" } }, "createTime": "2024-06-25T14:17:46.578299Z" }, "installedPackage-libnghttp2-14:x86_64:1.36.0-2+deb10u3": { "id": "installedPackage-libnghttp2-14:x86_64:1.36.0-2+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.36.0-2+deb10u3", "packageName": "libnghttp2-14" } }, "createTime": "2024-06-25T14:17:46.578246Z" }, "installedPackage-hostname:x86_64:3.21": { "id": "installedPackage-hostname:x86_64:3.21", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.21", "packageName": "hostname" } }, "createTime": "2024-06-25T14:17:46.578160Z" }, "installedPackage-libunistring2:x86_64:0.9.10-1": { "id": "installedPackage-libunistring2:x86_64:0.9.10-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.9.10-1", "packageName": "libunistring2" } }, "createTime": "2024-06-25T14:17:46.578281Z" }, "installedPackage-libapt-inst2.0:x86_64:1.8.2.3": { "id": "installedPackage-libapt-inst2.0:x86_64:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2.3", "packageName": "libapt-inst2.0" } }, "createTime": "2024-06-25T14:17:46.578171Z" }, "installedPackage-lsb-release:all:10.2019051400": { "id": "installedPackage-lsb-release:all:10.2019051400", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "10.2019051400", "packageName": "lsb-release" } }, "createTime": "2024-06-25T14:17:46.578291Z" }, "installedPackage-less:x86_64:487-0.1+deb10u1": { "id": "installedPackage-less:x86_64:487-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "487-0.1+deb10u1", "packageName": "less" } }, "createTime": "2024-06-25T14:17:46.578169Z" }, "installedPackage-initramfs-tools:all:0.133+deb10u1": { "id": "installedPackage-initramfs-tools:all:0.133+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.133+deb10u1", "packageName": "initramfs-tools" } }, "createTime": "2024-06-25T14:17:46.578163Z" }, "installedPackage-libgmp10:x86_64:2:6.1.2+dfsg-4+deb10u1": { "id": "installedPackage-libgmp10:x86_64:2:6.1.2+dfsg-4+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:6.1.2+dfsg-4+deb10u1", "packageName": "libgmp10" } }, "createTime": "2024-06-25T14:17:46.578205Z" }, "installedPackage-libnfnetlink0:x86_64:1.0.1-3+b1": { "id": "installedPackage-libnfnetlink0:x86_64:1.0.1-3+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.1-3+b1", "packageName": "libnfnetlink0" } }, "createTime": "2024-06-25T14:17:46.578244Z" }, "installedPackage-libunbound8:x86_64:1.9.0-2+deb10u4": { "id": "installedPackage-libunbound8:x86_64:1.9.0-2+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.9.0-2+deb10u4", "packageName": "libunbound8" } }, "createTime": "2024-06-25T14:17:46.578281Z" }, "installedPackage-python3-distro-info:all:0.21+deb10u1": { "id": "installedPackage-python3-distro-info:all:0.21+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.21+deb10u1", "packageName": "python3-distro-info" } }, "createTime": "2024-06-25T14:17:46.578314Z" }, "installedPackage-mime-support:all:3.62": { "id": "installedPackage-mime-support:all:3.62", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.62", "packageName": "mime-support" } }, "createTime": "2024-06-25T14:17:46.578295Z" }, "installedPackage-libdbus-1-3:x86_64:1.12.28-0+deb10u1": { "id": "installedPackage-libdbus-1-3:x86_64:1.12.28-0+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.12.28-0+deb10u1", "packageName": "libdbus-1-3" } }, "createTime": "2024-06-25T14:17:46.578187Z" }, "installedPackage-libudev1:x86_64:241-7~deb10u10": { "id": "installedPackage-libudev1:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "libudev1" } }, "createTime": "2024-06-25T14:17:46.578280Z" }, "installedPackage-exim4-daemon-light:x86_64:4.92-8+deb10u9": { "id": "installedPackage-exim4-daemon-light:x86_64:4.92-8+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.92-8+deb10u9", "packageName": "exim4-daemon-light" } }, "createTime": "2024-06-25T14:17:46.578131Z" }, "installedPackage-libidn2-0:x86_64:2.0.5-1+deb10u1": { "id": "installedPackage-libidn2-0:x86_64:2.0.5-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.0.5-1+deb10u1", "packageName": "libidn2-0" } }, "createTime": "2024-06-25T14:17:46.578212Z" }, "installedPackage-gpgsm:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpgsm:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpgsm" } }, "createTime": "2024-06-25T14:17:46.578152Z" }, "installedPackage-libp11-kit0:x86_64:0.23.15-2+deb10u1": { "id": "installedPackage-libp11-kit0:x86_64:0.23.15-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.23.15-2+deb10u1", "packageName": "libp11-kit0" } }, "createTime": "2024-06-25T14:17:46.578248Z" }, "installedPackage-grub-pc-bin:x86_64:2.06-3~deb10u4": { "id": "installedPackage-grub-pc-bin:x86_64:2.06-3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.06-3~deb10u4", "packageName": "grub-pc-bin" } }, "createTime": "2024-06-25T14:17:46.578157Z" }, "installedPackage-libfdisk1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libfdisk1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libfdisk1" } }, "createTime": "2024-06-25T14:17:46.578197Z" }, "installedPackage-perl-base:x86_64:5.28.1-6+deb10u1": { "id": "installedPackage-perl-base:x86_64:5.28.1-6+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.28.1-6+deb10u1", "packageName": "perl-base" } }, "createTime": "2024-06-25T14:17:46.578307Z" }, "installedPackage-gcc-8-base:x86_64:8.3.0-6": { "id": "installedPackage-gcc-8-base:x86_64:8.3.0-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "8.3.0-6", "packageName": "gcc-8-base" } }, "createTime": "2024-06-25T14:17:46.578134Z" }, "installedPackage-libcap2:x86_64:1:2.25-2": { "id": "installedPackage-libcap2:x86_64:1:2.25-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.25-2", "packageName": "libcap2" } }, "createTime": "2024-06-25T14:17:46.578183Z" }, "installedPackage-libtasn1-6:x86_64:4.13-3+deb10u1": { "id": "installedPackage-libtasn1-6:x86_64:4.13-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.13-3+deb10u1", "packageName": "libtasn1-6" } }, "createTime": "2024-06-25T14:17:46.578278Z" }, "installedPackage-iproute2:x86_64:4.20.0-2+deb10u1": { "id": "installedPackage-iproute2:x86_64:4.20.0-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.20.0-2+deb10u1", "packageName": "iproute2" } }, "createTime": "2024-06-25T14:17:46.578165Z" }, "installedPackage-libldap-common:all:2.4.47+dfsg-3+deb10u7": { "id": "installedPackage-libldap-common:all:2.4.47+dfsg-3+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.4.47+dfsg-3+deb10u7", "packageName": "libldap-common" } }, "createTime": "2024-06-25T14:17:46.578224Z" }, "installedPackage-systemd-sysv:x86_64:241-7~deb10u10": { "id": "installedPackage-systemd-sysv:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "systemd-sysv" } }, "createTime": "2024-06-25T14:17:46.578330Z" }, "installedPackage-login:x86_64:1:4.5-1.1": { "id": "installedPackage-login:x86_64:1:4.5-1.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:4.5-1.1", "packageName": "login" } }, "createTime": "2024-06-25T14:17:46.578289Z" }, "installedPackage-grub-cloud-amd64:x86_64:0.0.4": { "id": "installedPackage-grub-cloud-amd64:x86_64:0.0.4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.0.4", "packageName": "grub-cloud-amd64" } }, "createTime": "2024-06-25T14:17:46.578154Z" }, "installedPackage-chrony:x86_64:3.4-4+deb10u2": { "id": "installedPackage-chrony:x86_64:3.4-4+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.4-4+deb10u2", "packageName": "chrony" } }, "createTime": "2024-06-25T14:17:46.578099Z" }, "installedPackage-gzip:x86_64:1.9-3+deb10u1": { "id": "installedPackage-gzip:x86_64:1.9-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.9-3+deb10u1", "packageName": "gzip" } }, "createTime": "2024-06-25T14:17:46.578159Z" }, "installedPackage-libhogweed4:x86_64:3.4.1-1+deb10u1": { "id": "installedPackage-libhogweed4:x86_64:3.4.1-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.4.1-1+deb10u1", "packageName": "libhogweed4" } }, "createTime": "2024-06-25T14:17:46.578210Z" }, "installedPackage-libicu63:x86_64:63.1-6+deb10u3": { "id": "installedPackage-libicu63:x86_64:63.1-6+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "63.1-6+deb10u3", "packageName": "libicu63" } }, "createTime": "2024-06-25T14:17:46.578211Z" }, "installedPackage-grep:x86_64:3.3-1": { "id": "installedPackage-grep:x86_64:3.3-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.3-1", "packageName": "grep" } }, "createTime": "2024-06-25T14:17:46.578153Z" }, "installedPackage-libc-bin:x86_64:2.28-10+deb10u3": { "id": "installedPackage-libc-bin:x86_64:2.28-10+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.28-10+deb10u3", "packageName": "libc-bin" } }, "createTime": "2024-06-25T14:17:46.578181Z" }, "installedPackage-grub-common:x86_64:2.06-3~deb10u4": { "id": "installedPackage-grub-common:x86_64:2.06-3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.06-3~deb10u4", "packageName": "grub-common" } }, "createTime": "2024-06-25T14:17:46.578155Z" }, "installedPackage-gpg-wks-server:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpg-wks-server:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpg-wks-server" } }, "createTime": "2024-06-25T14:17:46.578150Z" }, "installedPackage-libpam-modules:x86_64:1.3.1-5": { "id": "installedPackage-libpam-modules:x86_64:1.3.1-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.1-5", "packageName": "libpam-modules" } }, "createTime": "2024-06-25T14:17:46.578250Z" }, "installedPackage-uuid-runtime:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-uuid-runtime:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "uuid-runtime" } }, "createTime": "2024-06-25T14:17:46.578336Z" }, "installedPackage-libkrb5-3:x86_64:1.17-3+deb10u6": { "id": "installedPackage-libkrb5-3:x86_64:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.17-3+deb10u6", "packageName": "libkrb5-3" } }, "createTime": "2024-06-25T14:17:46.578220Z" }, "installedPackage-librtmp1:x86_64:2.4+20151223.gitfa8646d.1-2": { "id": "installedPackage-librtmp1:x86_64:2.4+20151223.gitfa8646d.1-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.4+20151223.gitfa8646d.1-2", "packageName": "librtmp1" } }, "createTime": "2024-06-25T14:17:46.578266Z" }, "installedPackage-libpam-runtime:all:1.3.1-5": { "id": "installedPackage-libpam-runtime:all:1.3.1-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.3.1-5", "packageName": "libpam-runtime" } }, "createTime": "2024-06-25T14:17:46.578251Z" }, "installedPackage-libmagic1:x86_64:1:5.35-4+deb10u2": { "id": "installedPackage-libmagic1:x86_64:1:5.35-4+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:5.35-4+deb10u2", "packageName": "libmagic1" } }, "createTime": "2024-06-25T14:17:46.578231Z" }, "installedPackage-libgeoip1:x86_64:1.6.12-1": { "id": "installedPackage-libgeoip1:x86_64:1.6.12-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.6.12-1", "packageName": "libgeoip1" } }, "createTime": "2024-06-25T14:17:46.578204Z" }, "installedPackage-libpam-cap:x86_64:1:2.25-2": { "id": "installedPackage-libpam-cap:x86_64:1:2.25-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.25-2", "packageName": "libpam-cap" } }, "createTime": "2024-06-25T14:17:46.578249Z" }, "installedPackage-bash:x86_64:5.0-4": { "id": "installedPackage-bash:x86_64:5.0-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.0-4", "packageName": "bash" } }, "createTime": "2024-06-25T14:17:46.578094Z" }, "installedPackage-gnupg-utils:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gnupg-utils:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gnupg-utils" } }, "createTime": "2024-06-25T14:17:46.578140Z" }, "installedPackage-shim-signed:x86_64:1.39~1+deb10u1+15.7-1~deb10u1": { "id": "installedPackage-shim-signed:x86_64:1.39~1+deb10u1+15.7-1~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.39~1+deb10u1+15.7-1~deb10u1", "packageName": "shim-signed" } }, "createTime": "2024-06-25T14:17:46.578327Z" }, "installedPackage-libsemanage-common:all:2.8-2": { "id": "installedPackage-libsemanage-common:all:2.8-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.8-2", "packageName": "libsemanage-common" } }, "createTime": "2024-06-25T14:17:46.578270Z" }, "installedPackage-libcap-ng0:x86_64:0.7.9-2": { "id": "installedPackage-libcap-ng0:x86_64:0.7.9-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.7.9-2", "packageName": "libcap-ng0" } }, "createTime": "2024-06-25T14:17:46.578182Z" }, "installedPackage-shim-signed-common:all:1.39~1+deb10u1+15.7-1~deb10u1": { "id": "installedPackage-shim-signed-common:all:1.39~1+deb10u1+15.7-1~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.39~1+deb10u1+15.7-1~deb10u1", "packageName": "shim-signed-common" } }, "createTime": "2024-06-25T14:17:46.578327Z" }, "installedPackage-gpg-agent:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpg-agent:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpg-agent" } }, "createTime": "2024-06-25T14:17:46.578149Z" }, "installedPackage-libbsd0:x86_64:0.9.1-2+deb10u1": { "id": "installedPackage-libbsd0:x86_64:0.9.1-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.9.1-2+deb10u1", "packageName": "libbsd0" } }, "createTime": "2024-06-25T14:17:46.578179Z" }, "installedPackage-libgcc1:x86_64:1:8.3.0-6": { "id": "installedPackage-libgcc1:x86_64:1:8.3.0-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:8.3.0-6", "packageName": "libgcc1" } }, "createTime": "2024-06-25T14:17:46.578202Z" }, "installedPackage-libyajl2:x86_64:2.1.0-3+deb10u2": { "id": "installedPackage-libyajl2:x86_64:2.1.0-3+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.0-3+deb10u2", "packageName": "libyajl2" } }, "createTime": "2024-06-25T14:17:46.578285Z" }, "installedPackage-mailutils:x86_64:1:3.5-4": { "id": "installedPackage-mailutils:x86_64:1:3.5-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.5-4", "packageName": "mailutils" } }, "createTime": "2024-06-25T14:17:46.578292Z" }, "installedPackage-tar:x86_64:1.30+dfsg-6+deb10u1": { "id": "installedPackage-tar:x86_64:1.30+dfsg-6+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.30+dfsg-6+deb10u1", "packageName": "tar" } }, "createTime": "2024-06-25T14:17:46.578331Z" }, "installedPackage-dirmngr:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-dirmngr:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "dirmngr" } }, "createTime": "2024-06-25T14:17:46.578123Z" }, "installedPackage-apt-listchanges:all:3.19": { "id": "installedPackage-apt-listchanges:all:3.19", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.19", "packageName": "apt-listchanges" } }, "createTime": "2024-06-25T14:17:46.578090Z" }, "installedPackage-libwrap0:x86_64:7.6.q-28": { "id": "installedPackage-libwrap0:x86_64:7.6.q-28", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.6.q-28", "packageName": "libwrap0" } }, "createTime": "2024-06-25T14:17:46.578283Z" }, "installedPackage-pinentry-curses:x86_64:1.1.0-2": { "id": "installedPackage-pinentry-curses:x86_64:1.1.0-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.0-2", "packageName": "pinentry-curses" } }, "createTime": "2024-06-25T14:17:46.578307Z" }, "installedPackage-ucf:all:3.0038+nmu1": { "id": "installedPackage-ucf:all:3.0038+nmu1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.0038+nmu1", "packageName": "ucf" } }, "createTime": "2024-06-25T14:17:46.578334Z" }, "installedPackage-libprotobuf-c1:x86_64:1.3.1-1+b1": { "id": "installedPackage-libprotobuf-c1:x86_64:1.3.1-1+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.1-1+b1", "packageName": "libprotobuf-c1" } }, "createTime": "2024-06-25T14:17:46.578259Z" }, "installedPackage-nano:x86_64:3.2-3+deb10u1": { "id": "installedPackage-nano:x86_64:3.2-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2-3+deb10u1", "packageName": "nano" } }, "createTime": "2024-06-25T14:17:46.578298Z" }, "installedPackage-dmsetup:x86_64:2:1.02.155-3": { "id": "installedPackage-dmsetup:x86_64:2:1.02.155-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:1.02.155-3", "packageName": "dmsetup" } }, "createTime": "2024-06-25T14:17:46.578126Z" }, "installedPackage-libgpg-error0:x86_64:1.35-1": { "id": "installedPackage-libgpg-error0:x86_64:1.35-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.35-1", "packageName": "libgpg-error0" } }, "createTime": "2024-06-25T14:17:46.578208Z" }, "installedPackage-gdisk:x86_64:1.0.3-1.1": { "id": "installedPackage-gdisk:x86_64:1.0.3-1.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.3-1.1", "packageName": "gdisk" } }, "createTime": "2024-06-25T14:17:46.578136Z" }, "installedPackage-openssh-sftp-server:x86_64:1:7.9p1-10+deb10u4": { "id": "installedPackage-openssh-sftp-server:x86_64:1:7.9p1-10+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:7.9p1-10+deb10u4", "packageName": "openssh-sftp-server" } }, "createTime": "2024-06-25T14:17:46.578303Z" }, "installedPackage-libattr1:x86_64:1:2.4.48-4": { "id": "installedPackage-libattr1:x86_64:1:2.4.48-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.4.48-4", "packageName": "libattr1" } }, "createTime": "2024-06-25T14:17:46.578176Z" }, "installedPackage-libfreetype6:x86_64:2.9.1-3+deb10u3": { "id": "installedPackage-libfreetype6:x86_64:2.9.1-3+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.9.1-3+deb10u3", "packageName": "libfreetype6" } }, "createTime": "2024-06-25T14:17:46.578199Z" }, "installedPackage-python3-certifi:all:2018.8.24-1": { "id": "installedPackage-python3-certifi:all:2018.8.24-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2018.8.24-1", "packageName": "python3-certifi" } }, "createTime": "2024-06-25T14:17:46.578311Z" }, "installedPackage-libpython2.7:x86_64:2.7.16-2+deb10u4": { "id": "installedPackage-libpython2.7:x86_64:2.7.16-2+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.7.16-2+deb10u4", "packageName": "libpython2.7" } }, "createTime": "2024-06-25T14:17:46.578261Z" }, "installedPackage-libseccomp2:x86_64:2.3.3-4": { "id": "installedPackage-libseccomp2:x86_64:2.3.3-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.3.3-4", "packageName": "libseccomp2" } }, "createTime": "2024-06-25T14:17:46.578269Z" }, "installedPackage-sudo:x86_64:1.8.27-1+deb10u6": { "id": "installedPackage-sudo:x86_64:1.8.27-1+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.27-1+deb10u6", "packageName": "sudo" } }, "createTime": "2024-06-25T14:17:46.578329Z" }, "installedPackage-python3-debconf:all:1.5.71+deb10u1": { "id": "installedPackage-python3-debconf:all:1.5.71+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.5.71+deb10u1", "packageName": "python3-debconf" } }, "createTime": "2024-06-25T14:17:46.578313Z" }, "installedPackage-unattended-upgrades:all:1.11.2": { "id": "installedPackage-unattended-upgrades:all:1.11.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.11.2", "packageName": "unattended-upgrades" } }, "createTime": "2024-06-25T14:17:46.578335Z" }, "installedPackage-gnupg-l10n:all:2.2.12-1+deb10u2": { "id": "installedPackage-gnupg-l10n:all:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.2.12-1+deb10u2", "packageName": "gnupg-l10n" } }, "createTime": "2024-06-25T14:17:46.578140Z" }, "installedPackage-libpipeline1:x86_64:1.5.1-2": { "id": "installedPackage-libpipeline1:x86_64:1.5.1-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.5.1-2", "packageName": "libpipeline1" } }, "createTime": "2024-06-25T14:17:46.578257Z" }, "installedPackage-exim4-base:x86_64:4.92-8+deb10u9": { "id": "installedPackage-exim4-base:x86_64:4.92-8+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.92-8+deb10u9", "packageName": "exim4-base" } }, "createTime": "2024-06-25T14:17:46.578130Z" }, "installedPackage-python3-minimal:x86_64:3.7.3-1": { "id": "installedPackage-python3-minimal:x86_64:3.7.3-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-1", "packageName": "python3-minimal" } }, "createTime": "2024-06-25T14:17:46.578316Z" }, "installedPackage-libmagic-mgc:x86_64:1:5.35-4+deb10u2": { "id": "installedPackage-libmagic-mgc:x86_64:1:5.35-4+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:5.35-4+deb10u2", "packageName": "libmagic-mgc" } }, "createTime": "2024-06-25T14:17:46.578230Z" }, "installedPackage-python3-reportbug:all:7.5.3~deb10u2": { "id": "installedPackage-python3-reportbug:all:7.5.3~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "7.5.3~deb10u2", "packageName": "python3-reportbug" } }, "createTime": "2024-06-25T14:17:46.578319Z" }, "installedPackage-reportbug:all:7.5.3~deb10u2": { "id": "installedPackage-reportbug:all:7.5.3~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "7.5.3~deb10u2", "packageName": "reportbug" } }, "createTime": "2024-06-25T14:17:46.578323Z" }, "installedPackage-libkeyutils1:x86_64:1.6-6": { "id": "installedPackage-libkeyutils1:x86_64:1.6-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.6-6", "packageName": "libkeyutils1" } }, "createTime": "2024-06-25T14:17:46.578218Z" }, "installedPackage-libpam-systemd:x86_64:241-7~deb10u10": { "id": "installedPackage-libpam-systemd:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "libpam-systemd" } }, "createTime": "2024-06-25T14:17:46.578252Z" }, "installedPackage-google-compute-engine-oslogin:x86_64:1:20240415.00-g1+deb10": { "id": "installedPackage-google-compute-engine-oslogin:x86_64:1:20240415.00-g1+deb10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20240415.00-g1+deb10", "packageName": "google-compute-engine-oslogin" } }, "createTime": "2024-06-25T14:17:46.578145Z" }, "installedPackage-mount:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-mount:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "mount" } }, "createTime": "2024-06-25T14:17:46.578297Z" }, "installedPackage-bash-completion:all:1:2.8-6": { "id": "installedPackage-bash-completion:all:1:2.8-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:2.8-6", "packageName": "bash-completion" } }, "createTime": "2024-06-25T14:17:46.578094Z" }, "installedPackage-libpam-modules-bin:x86_64:1.3.1-5": { "id": "installedPackage-libpam-modules-bin:x86_64:1.3.1-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.1-5", "packageName": "libpam-modules-bin" } }, "createTime": "2024-06-25T14:17:46.578250Z" }, "installedPackage-exim4-config:all:4.92-8+deb10u9": { "id": "installedPackage-exim4-config:all:4.92-8+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "4.92-8+deb10u9", "packageName": "exim4-config" } }, "createTime": "2024-06-25T14:17:46.578131Z" }, "installedPackage-libuchardet0:x86_64:0.0.6-3": { "id": "installedPackage-libuchardet0:x86_64:0.0.6-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.0.6-3", "packageName": "libuchardet0" } }, "createTime": "2024-06-25T14:17:46.578279Z" }, "installedPackage-libxml2:x86_64:2.9.4+dfsg1-7+deb10u6": { "id": "installedPackage-libxml2:x86_64:2.9.4+dfsg1-7+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.9.4+dfsg1-7+deb10u6", "packageName": "libxml2" } }, "createTime": "2024-06-25T14:17:46.578284Z" }, "installedPackage-libpopt0:x86_64:1.16-12": { "id": "installedPackage-libpopt0:x86_64:1.16-12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.16-12", "packageName": "libpopt0" } }, "createTime": "2024-06-25T14:17:46.578258Z" }, "installedPackage-libkyotocabinet16v5:x86_64:1.2.76-4.2+b1": { "id": "installedPackage-libkyotocabinet16v5:x86_64:1.2.76-4.2+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.2.76-4.2+b1", "packageName": "libkyotocabinet16v5" } }, "createTime": "2024-06-25T14:17:46.578222Z" }, "installedPackage-whiptail:x86_64:0.52.20-8": { "id": "installedPackage-whiptail:x86_64:0.52.20-8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.52.20-8", "packageName": "whiptail" } }, "createTime": "2024-06-25T14:17:46.578340Z" }, "installedPackage-libnewt0.52:x86_64:0.52.20-8": { "id": "installedPackage-libnewt0.52:x86_64:0.52.20-8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.52.20-8", "packageName": "libnewt0.52" } }, "createTime": "2024-06-25T14:17:46.578243Z" }, "installedPackage-libgc1c2:x86_64:1:7.6.4-0.4": { "id": "installedPackage-libgc1c2:x86_64:1:7.6.4-0.4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:7.6.4-0.4", "packageName": "libgc1c2" } }, "createTime": "2024-06-25T14:17:46.578201Z" }, "installedPackage-libpcre2-8-0:x86_64:10.32-5+deb10u1": { "id": "installedPackage-libpcre2-8-0:x86_64:10.32-5+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "10.32-5+deb10u1", "packageName": "libpcre2-8-0" } }, "createTime": "2024-06-25T14:17:46.578255Z" }, "installedPackage-ncurses-bin:x86_64:6.1+20181013-2+deb10u5": { "id": "installedPackage-ncurses-bin:x86_64:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "6.1+20181013-2+deb10u5", "packageName": "ncurses-bin" } }, "createTime": "2024-06-25T14:17:46.578299Z" }, "installedPackage-screen:x86_64:4.6.2-3+deb10u1": { "id": "installedPackage-screen:x86_64:4.6.2-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.6.2-3+deb10u1", "packageName": "screen" } }, "createTime": "2024-06-25T14:17:46.578324Z" }, "installedPackage-libbz2-1.0:x86_64:1.0.6-9.2~deb10u2": { "id": "installedPackage-libbz2-1.0:x86_64:1.0.6-9.2~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.6-9.2~deb10u2", "packageName": "libbz2-1.0" } }, "createTime": "2024-06-25T14:17:46.578180Z" }, "installedPackage-libsmartcols1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libsmartcols1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libsmartcols1" } }, "createTime": "2024-06-25T14:17:46.578273Z" }, "installedPackage-dpkg:x86_64:1.19.8": { "id": "installedPackage-dpkg:x86_64:1.19.8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.19.8", "packageName": "dpkg" } }, "createTime": "2024-06-25T14:17:46.578127Z" }, "installedPackage-systemd:x86_64:241-7~deb10u10": { "id": "installedPackage-systemd:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "systemd" } }, "createTime": "2024-06-25T14:17:46.578330Z" }, "installedPackage-liblwres161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-liblwres161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "liblwres161" } }, "createTime": "2024-06-25T14:17:46.578227Z" }, "installedPackage-python3-pycurl:x86_64:7.43.0.2-0.1": { "id": "installedPackage-python3-pycurl:x86_64:7.43.0.2-0.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.43.0.2-0.1", "packageName": "python3-pycurl" } }, "createTime": "2024-06-25T14:17:46.578318Z" }, "installedPackage-debian-archive-keyring:all:2019.1+deb10u2": { "id": "installedPackage-debian-archive-keyring:all:2019.1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2019.1+deb10u2", "packageName": "debian-archive-keyring" } }, "createTime": "2024-06-25T14:17:46.578121Z" }, "installedPackage-man-db:x86_64:2.8.5-2+deb10u1": { "id": "installedPackage-man-db:x86_64:2.8.5-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.8.5-2+deb10u1", "packageName": "man-db" } }, "createTime": "2024-06-25T14:17:46.578293Z" }, "installedPackage-vim-runtime:all:2:8.1.0875-5+deb10u6": { "id": "installedPackage-vim-runtime:all:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2:8.1.0875-5+deb10u6", "packageName": "vim-runtime" } }, "createTime": "2024-06-25T14:17:46.578338Z" }, "installedPackage-python3-httplib2:all:0.11.3-2": { "id": "installedPackage-python3-httplib2:all:0.11.3-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.11.3-2", "packageName": "python3-httplib2" } }, "createTime": "2024-06-25T14:17:46.578315Z" }, "installedPackage-libldap-2.4-2:x86_64:2.4.47+dfsg-3+deb10u7": { "id": "installedPackage-libldap-2.4-2:x86_64:2.4.47+dfsg-3+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.4.47+dfsg-3+deb10u7", "packageName": "libldap-2.4-2" } }, "createTime": "2024-06-25T14:17:46.578223Z" }, "installedPackage-groff-base:x86_64:1.22.4-3+deb10u1": { "id": "installedPackage-groff-base:x86_64:1.22.4-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.22.4-3+deb10u1", "packageName": "groff-base" } }, "createTime": "2024-06-25T14:17:46.578154Z" }, "installedPackage-libisccc161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-libisccc161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "libisccc161" } }, "createTime": "2024-06-25T14:17:46.578215Z" }, "installedPackage-netbase:all:5.6": { "id": "installedPackage-netbase:all:5.6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "5.6", "packageName": "netbase" } }, "createTime": "2024-06-25T14:17:46.578301Z" }, "installedPackage-libbind9-161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-libbind9-161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "libbind9-161" } }, "createTime": "2024-06-25T14:17:46.578178Z" }, "installedPackage-libfl2:x86_64:2.6.4-6.2": { "id": "installedPackage-libfl2:x86_64:2.6.4-6.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.6.4-6.2", "packageName": "libfl2" } }, "createTime": "2024-06-25T14:17:46.578198Z" }, "installedPackage-python3-urllib3:all:1.24.1-1+deb10u2": { "id": "installedPackage-python3-urllib3:all:1.24.1-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.24.1-1+deb10u2", "packageName": "python3-urllib3" } }, "createTime": "2024-06-25T14:17:46.578321Z" }, "installedPackage-python3.7-minimal:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-python3.7-minimal:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "python3.7-minimal" } }, "createTime": "2024-06-25T14:17:46.578322Z" }, "installedPackage-psmisc:x86_64:23.2-1+deb10u1": { "id": "installedPackage-psmisc:x86_64:23.2-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "23.2-1+deb10u1", "packageName": "psmisc" } }, "createTime": "2024-06-25T14:17:46.578308Z" }, "installedPackage-liblmdb0:x86_64:0.9.22-1": { "id": "installedPackage-liblmdb0:x86_64:0.9.22-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.9.22-1", "packageName": "liblmdb0" } }, "createTime": "2024-06-25T14:17:46.578224Z" }, "installedPackage-liblzo2-2:x86_64:2.10-0.1": { "id": "installedPackage-liblzo2-2:x86_64:2.10-0.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.10-0.1", "packageName": "liblzo2-2" } }, "createTime": "2024-06-25T14:17:46.578229Z" }, "installedPackage-libaudit-common:all:1:2.8.4-3": { "id": "installedPackage-libaudit-common:all:1:2.8.4-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:2.8.4-3", "packageName": "libaudit-common" } }, "createTime": "2024-06-25T14:17:46.578176Z" }, "installedPackage-iputils-ping:x86_64:3:20180629-2+deb10u2": { "id": "installedPackage-iputils-ping:x86_64:3:20180629-2+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3:20180629-2+deb10u2", "packageName": "iputils-ping" } }, "createTime": "2024-06-25T14:17:46.578166Z" }, "installedPackage-libssl1.1:x86_64:1.1.1n-0+deb10u6": { "id": "installedPackage-libssl1.1:x86_64:1.1.1n-0+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.1n-0+deb10u6", "packageName": "libssl1.1" } }, "createTime": "2024-06-25T14:17:46.578276Z" }, "installedPackage-python-apt-common:all:1.8.4.3": { "id": "installedPackage-python-apt-common:all:1.8.4.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.8.4.3", "packageName": "python-apt-common" } }, "createTime": "2024-06-25T14:17:46.578309Z" }, "installedPackage-libstdc++6:x86_64:8.3.0-6": { "id": "installedPackage-libstdc++6:x86_64:8.3.0-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "8.3.0-6", "packageName": "libstdc++6" } }, "createTime": "2024-06-25T14:17:46.578277Z" }, "installedPackage-traceroute:x86_64:1:2.1.0-2": { "id": "installedPackage-traceroute:x86_64:1:2.1.0-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.1.0-2", "packageName": "traceroute" } }, "createTime": "2024-06-25T14:17:46.578333Z" }, "installedPackage-openssh-client:x86_64:1:7.9p1-10+deb10u4": { "id": "installedPackage-openssh-client:x86_64:1:7.9p1-10+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:7.9p1-10+deb10u4", "packageName": "openssh-client" } }, "createTime": "2024-06-25T14:17:46.578302Z" }, "installedPackage-cron:x86_64:3.0pl1-134+deb10u1": { "id": "installedPackage-cron:x86_64:3.0pl1-134+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.0pl1-134+deb10u1", "packageName": "cron" } }, "createTime": "2024-06-25T14:17:46.578101Z" }, "installedPackage-gce-disk-expand:all:1:20200716.00-g1": { "id": "installedPackage-gce-disk-expand:all:1:20200716.00-g1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:20200716.00-g1", "packageName": "gce-disk-expand" } }, "createTime": "2024-06-25T14:17:46.578135Z" }, "installedPackage-libffi6:x86_64:3.2.1-9": { "id": "installedPackage-libffi6:x86_64:3.2.1-9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2.1-9", "packageName": "libffi6" } }, "createTime": "2024-06-25T14:17:46.578197Z" }, "installedPackage-liblz4-1:x86_64:1.8.3-1+deb10u1": { "id": "installedPackage-liblz4-1:x86_64:1.8.3-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.3-1+deb10u1", "packageName": "liblz4-1" } }, "createTime": "2024-06-25T14:17:46.578228Z" }, "installedPackage-libgnutls30:x86_64:3.6.7-4+deb10u12": { "id": "installedPackage-libgnutls30:x86_64:3.6.7-4+deb10u12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.6.7-4+deb10u12", "packageName": "libgnutls30" } }, "createTime": "2024-06-25T14:17:46.578207Z" }, "installedPackage-parted:x86_64:3.2-25": { "id": "installedPackage-parted:x86_64:3.2-25", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2-25", "packageName": "parted" } }, "createTime": "2024-06-25T14:17:46.578305Z" }, "availablePackage-google-cloud-cli-anthoscli:x86_64:482.0.0-0": { "id": "availablePackage-google-cloud-cli-anthoscli:x86_64:482.0.0-0", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "x86_64", "version": "482.0.0-0", "packageName": "google-cloud-cli-anthoscli" } }, "createTime": "2024-06-25T14:17:46.578077Z" }, "installedPackage-rsyslog:x86_64:8.1901.0-1+deb10u2": { "id": "installedPackage-rsyslog:x86_64:8.1901.0-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "8.1901.0-1+deb10u2", "packageName": "rsyslog" } }, "createTime": "2024-06-25T14:17:46.578324Z" }, "installedPackage-libsystemd0:x86_64:241-7~deb10u10": { "id": "installedPackage-libsystemd0:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "libsystemd0" } }, "createTime": "2024-06-25T14:17:46.578277Z" }, "installedPackage-python3-dbus:x86_64:1.2.8-3": { "id": "installedPackage-python3-dbus:x86_64:1.2.8-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.2.8-3", "packageName": "python3-dbus" } }, "createTime": "2024-06-25T14:17:46.578312Z" }, "installedPackage-libgnutls-dane0:x86_64:3.6.7-4+deb10u12": { "id": "installedPackage-libgnutls-dane0:x86_64:3.6.7-4+deb10u12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.6.7-4+deb10u12", "packageName": "libgnutls-dane0" } }, "createTime": "2024-06-25T14:17:46.578206Z" }, "installedPackage-libisccfg163:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-libisccfg163:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "libisccfg163" } }, "createTime": "2024-06-25T14:17:46.578216Z" }, "installedPackage-libsasl2-modules-db:x86_64:2.1.27+dfsg-1+deb10u2": { "id": "installedPackage-libsasl2-modules-db:x86_64:2.1.27+dfsg-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.27+dfsg-1+deb10u2", "packageName": "libsasl2-modules-db" } }, "createTime": "2024-06-25T14:17:46.578268Z" }, "installedPackage-adduser:all:3.118": { "id": "installedPackage-adduser:all:3.118", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.118", "packageName": "adduser" } }, "createTime": "2024-06-25T14:17:46.578087Z" }, "installedPackage-init-system-helpers:all:1.56+nmu1": { "id": "installedPackage-init-system-helpers:all:1.56+nmu1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.56+nmu1", "packageName": "init-system-helpers" } }, "createTime": "2024-06-25T14:17:46.578162Z" }, "installedPackage-gettext-base:x86_64:0.19.8.1-9": { "id": "installedPackage-gettext-base:x86_64:0.19.8.1-9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.19.8.1-9", "packageName": "gettext-base" } }, "createTime": "2024-06-25T14:17:46.578138Z" }, "installedPackage-libefivar1:x86_64:37-2+deb10u1": { "id": "installedPackage-libefivar1:x86_64:37-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "37-2+deb10u1", "packageName": "libefivar1" } }, "createTime": "2024-06-25T14:17:46.578192Z" }, "installedPackage-libjson-c3:x86_64:0.12.1+ds-2+deb10u1": { "id": "installedPackage-libjson-c3:x86_64:0.12.1+ds-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.12.1+ds-2+deb10u1", "packageName": "libjson-c3" } }, "createTime": "2024-06-25T14:17:46.578217Z" }, "installedPackage-linux-image-4.19.0-26-cloud-amd64:x86_64:4.19.304-1": { "id": "installedPackage-linux-image-4.19.0-26-cloud-amd64:x86_64:4.19.304-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.19.304-1", "packageName": "linux-image-4.19.0-26-cloud-amd64" } }, "createTime": "2024-06-25T14:17:46.578288Z" }, "installedPackage-debconf:all:1.5.71+deb10u1": { "id": "installedPackage-debconf:all:1.5.71+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.5.71+deb10u1", "packageName": "debconf" } }, "createTime": "2024-06-25T14:17:46.578104Z" }, "installedPackage-libk5crypto3:x86_64:1.17-3+deb10u6": { "id": "installedPackage-libk5crypto3:x86_64:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.17-3+deb10u6", "packageName": "libk5crypto3" } }, "createTime": "2024-06-25T14:17:46.578217Z" }, "installedPackage-libevent-2.1-6:x86_64:2.1.8-stable-4": { "id": "installedPackage-libevent-2.1-6:x86_64:2.1.8-stable-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.8-stable-4", "packageName": "libevent-2.1-6" } }, "createTime": "2024-06-25T14:17:46.578194Z" }, "installedPackage-apt:x86_64:1.8.2.3": { "id": "installedPackage-apt:x86_64:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2.3", "packageName": "apt" } }, "createTime": "2024-06-25T14:17:46.578089Z" }, "installedPackage-dbus:x86_64:1.12.28-0+deb10u1": { "id": "installedPackage-dbus:x86_64:1.12.28-0+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.12.28-0+deb10u1", "packageName": "dbus" } }, "createTime": "2024-06-25T14:17:46.578104Z" }, "installedPackage-libgdbm6:x86_64:1.18.1-4": { "id": "installedPackage-libgdbm6:x86_64:1.18.1-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.18.1-4", "packageName": "libgdbm6" } }, "createTime": "2024-06-25T14:17:46.578203Z" }, "installedPackage-libdns-export1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-libdns-export1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "libdns-export1104" } }, "createTime": "2024-06-25T14:17:46.578189Z" }, "installedPackage-util-linux:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-util-linux:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "util-linux" } }, "createTime": "2024-06-25T14:17:46.578335Z" }, "installedPackage-libgssapi-krb5-2:x86_64:1.17-3+deb10u6": { "id": "installedPackage-libgssapi-krb5-2:x86_64:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.17-3+deb10u6", "packageName": "libgssapi-krb5-2" } }, "createTime": "2024-06-25T14:17:46.578209Z" }, "installedPackage-libncursesw6:x86_64:6.1+20181013-2+deb10u5": { "id": "installedPackage-libncursesw6:x86_64:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "6.1+20181013-2+deb10u5", "packageName": "libncursesw6" } }, "createTime": "2024-06-25T14:17:46.578236Z" }, "installedPackage-os-prober:x86_64:1.77": { "id": "installedPackage-os-prober:x86_64:1.77", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.77", "packageName": "os-prober" } }, "createTime": "2024-06-25T14:17:46.578305Z" }, "installedPackage-sysvinit-utils:x86_64:2.93-8": { "id": "installedPackage-sysvinit-utils:x86_64:2.93-8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.93-8", "packageName": "sysvinit-utils" } }, "createTime": "2024-06-25T14:17:46.578331Z" }, "installedPackage-libdb5.3:x86_64:5.3.28+dfsg1-0.5": { "id": "installedPackage-libdb5.3:x86_64:5.3.28+dfsg1-0.5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.3.28+dfsg1-0.5", "packageName": "libdb5.3" } }, "createTime": "2024-06-25T14:17:46.578187Z" }, "availablePackage-google-cloud-ops-agent:x86_64:2.48.0~debian10": { "id": "availablePackage-google-cloud-ops-agent:x86_64:2.48.0~debian10", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "x86_64", "version": "2.48.0~debian10", "packageName": "google-cloud-ops-agent" } }, "createTime": "2024-06-25T14:17:46.578083Z" }, "installedPackage-libatm1:x86_64:1:2.5.1-2": { "id": "installedPackage-libatm1:x86_64:1:2.5.1-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.5.1-2", "packageName": "libatm1" } }, "createTime": "2024-06-25T14:17:46.578175Z" }, "installedPackage-linux-image-cloud-amd64:x86_64:4.19+105+deb10u21": { "id": "installedPackage-linux-image-cloud-amd64:x86_64:4.19+105+deb10u21", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.19+105+deb10u21", "packageName": "linux-image-cloud-amd64" } }, "createTime": "2024-06-25T14:17:46.578288Z" }, "installedPackage-logrotate:x86_64:3.14.0-4": { "id": "installedPackage-logrotate:x86_64:3.14.0-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.14.0-4", "packageName": "logrotate" } }, "createTime": "2024-06-25T14:17:46.578290Z" }, "installedPackage-udev:x86_64:241-7~deb10u10": { "id": "installedPackage-udev:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "udev" } }, "createTime": "2024-06-25T14:17:46.578334Z" }, "installedPackage-libcryptsetup12:x86_64:2:2.1.0-5+deb10u2": { "id": "installedPackage-libcryptsetup12:x86_64:2:2.1.0-5+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:2.1.0-5+deb10u2", "packageName": "libcryptsetup12" } }, "createTime": "2024-06-25T14:17:46.578185Z" }, "installedPackage-google-osconfig-agent:x86_64:1:20240501.03-g1": { "id": "installedPackage-google-osconfig-agent:x86_64:1:20240501.03-g1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20240501.03-g1", "packageName": "google-osconfig-agent" } }, "createTime": "2024-06-25T14:17:46.578147Z" }, "installedPackage-initramfs-tools-core:all:0.133+deb10u1": { "id": "installedPackage-initramfs-tools-core:all:0.133+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.133+deb10u1", "packageName": "initramfs-tools-core" } }, "createTime": "2024-06-25T14:17:46.578164Z" }, "installedPackage-vim-tiny:x86_64:2:8.1.0875-5+deb10u6": { "id": "installedPackage-vim-tiny:x86_64:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:8.1.0875-5+deb10u6", "packageName": "vim-tiny" } }, "createTime": "2024-06-25T14:17:46.578339Z" }, "installedPackage-libslang2:x86_64:2.3.2-2": { "id": "installedPackage-libslang2:x86_64:2.3.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.3.2-2", "packageName": "libslang2" } }, "createTime": "2024-06-25T14:17:46.578272Z" }, "installedPackage-socat:x86_64:1.7.3.2-2": { "id": "installedPackage-socat:x86_64:1.7.3.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.7.3.2-2", "packageName": "socat" } }, "createTime": "2024-06-25T14:17:46.578329Z" }, "installedPackage-debianutils:x86_64:4.8.6.1": { "id": "installedPackage-debianutils:x86_64:4.8.6.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.8.6.1", "packageName": "debianutils" } }, "createTime": "2024-06-25T14:17:46.578122Z" }, "installedPackage-google-cloud-ops-agent:x86_64:2.47.0~debian10": { "id": "installedPackage-google-cloud-ops-agent:x86_64:2.47.0~debian10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.47.0~debian10", "packageName": "google-cloud-ops-agent" } }, "createTime": "2024-06-25T14:17:46.578143Z" }, "installedPackage-libxtables12:x86_64:1.8.2-4": { "id": "installedPackage-libxtables12:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "libxtables12" } }, "createTime": "2024-06-25T14:17:46.578285Z" }, "installedPackage-tzdata:all:2024a-0+deb10u1": { "id": "installedPackage-tzdata:all:2024a-0+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2024a-0+deb10u1", "packageName": "tzdata" } }, "createTime": "2024-06-25T14:17:46.578333Z" }, "installedPackage-libpci3:x86_64:1:3.5.2-1": { "id": "installedPackage-libpci3:x86_64:1:3.5.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.5.2-1", "packageName": "libpci3" } }, "createTime": "2024-06-25T14:17:46.578255Z" }, "installedPackage-python3-requests:all:2.21.0-1+deb10u1": { "id": "installedPackage-python3-requests:all:2.21.0-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.21.0-1+deb10u1", "packageName": "python3-requests" } }, "createTime": "2024-06-25T14:17:46.578320Z" }, "installedPackage-libdns1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-libdns1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "libdns1104" } }, "createTime": "2024-06-25T14:17:46.578190Z" }, "installedPackage-wget:x86_64:1.20.1-1.1": { "id": "installedPackage-wget:x86_64:1.20.1-1.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.20.1-1.1", "packageName": "wget" } }, "createTime": "2024-06-25T14:17:46.578339Z" }, "installedPackage-shim-unsigned:x86_64:15.8-1~deb10u1": { "id": "installedPackage-shim-unsigned:x86_64:15.8-1~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "15.8-1~deb10u1", "packageName": "shim-unsigned" } }, "createTime": "2024-06-25T14:17:46.578328Z" }, "installedPackage-google-cloud-cli-anthoscli:x86_64:476.0.0-0": { "id": "installedPackage-google-cloud-cli-anthoscli:x86_64:476.0.0-0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "476.0.0-0", "packageName": "google-cloud-cli-anthoscli" } }, "createTime": "2024-06-25T14:17:46.578142Z" }, "installedPackage-gpg-wks-client:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpg-wks-client:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpg-wks-client" } }, "createTime": "2024-06-25T14:17:46.578150Z" }, "availablePackage-google-compute-engine:all:1:20240607.00-g1": { "id": "availablePackage-google-compute-engine:all:1:20240607.00-g1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "all", "version": "1:20240607.00-g1", "packageName": "google-compute-engine" } }, "createTime": "2024-06-25T14:17:46.578082Z" }, "installedPackage-apparmor:x86_64:2.13.2-10": { "id": "installedPackage-apparmor:x86_64:2.13.2-10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.13.2-10", "packageName": "apparmor" } }, "createTime": "2024-06-25T14:17:46.578089Z" }, "installedPackage-libip6tc0:x86_64:1.8.2-4": { "id": "installedPackage-libip6tc0:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "libip6tc0" } }, "createTime": "2024-06-25T14:17:46.578213Z" }, "installedPackage-libkrb5support0:x86_64:1.17-3+deb10u6": { "id": "installedPackage-libkrb5support0:x86_64:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.17-3+deb10u6", "packageName": "libkrb5support0" } }, "createTime": "2024-06-25T14:17:46.578221Z" }, "installedPackage-libnetfilter-conntrack3:x86_64:1.0.7-1": { "id": "installedPackage-libnetfilter-conntrack3:x86_64:1.0.7-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.7-1", "packageName": "libnetfilter-conntrack3" } }, "createTime": "2024-06-25T14:17:46.578237Z" }, "installedPackage-ethtool:x86_64:1:4.19-1": { "id": "installedPackage-ethtool:x86_64:1:4.19-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:4.19-1", "packageName": "ethtool" } }, "createTime": "2024-06-25T14:17:46.578129Z" }, "installedPackage-libacl1:x86_64:2.2.53-4": { "id": "installedPackage-libacl1:x86_64:2.2.53-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.53-4", "packageName": "libacl1" } }, "createTime": "2024-06-25T14:17:46.578170Z" }, "installedPackage-libpng16-16:x86_64:1.6.36-6": { "id": "installedPackage-libpng16-16:x86_64:1.6.36-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.6.36-6", "packageName": "libpng16-16" } }, "createTime": "2024-06-25T14:17:46.578257Z" }, "installedPackage-libpam0g:x86_64:1.3.1-5": { "id": "installedPackage-libpam0g:x86_64:1.3.1-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.1-5", "packageName": "libpam0g" } }, "createTime": "2024-06-25T14:17:46.578253Z" }, "installedPackage-mailutils-common:all:1:3.5-4": { "id": "installedPackage-mailutils-common:all:1:3.5-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:3.5-4", "packageName": "mailutils-common" } }, "createTime": "2024-06-25T14:17:46.578292Z" }, "installedPackage-bind9-host:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-bind9-host:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "bind9-host" } }, "createTime": "2024-06-25T14:17:46.578095Z" }, "installedPackage-libefiboot1:x86_64:37-2+deb10u1": { "id": "installedPackage-libefiboot1:x86_64:37-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "37-2+deb10u1", "packageName": "libefiboot1" } }, "createTime": "2024-06-25T14:17:46.578191Z" }, "installedPackage-apt-transport-https:all:1.8.2.3": { "id": "installedPackage-apt-transport-https:all:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.8.2.3", "packageName": "apt-transport-https" } }, "createTime": "2024-06-25T14:17:46.578091Z" }, "installedPackage-guile-2.2-libs:x86_64:2.2.4+1-2+deb10u1": { "id": "installedPackage-guile-2.2-libs:x86_64:2.2.4+1-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.4+1-2+deb10u1", "packageName": "guile-2.2-libs" } }, "createTime": "2024-06-25T14:17:46.578159Z" }, "installedPackage-libdevmapper1.02.1:x86_64:2:1.02.155-3": { "id": "installedPackage-libdevmapper1.02.1:x86_64:2:1.02.155-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:1.02.155-3", "packageName": "libdevmapper1.02.1" } }, "createTime": "2024-06-25T14:17:46.578188Z" }, "installedPackage-python3-six:all:1.12.0-1": { "id": "installedPackage-python3-six:all:1.12.0-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.12.0-1", "packageName": "python3-six" } }, "createTime": "2024-06-25T14:17:46.578321Z" }, "installedPackage-pciutils:x86_64:1:3.5.2-1": { "id": "installedPackage-pciutils:x86_64:1:3.5.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.5.2-1", "packageName": "pciutils" } }, "createTime": "2024-06-25T14:17:46.578306Z" }, "installedPackage-libpython3.7-stdlib:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-libpython3.7-stdlib:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "libpython3.7-stdlib" } }, "createTime": "2024-06-25T14:17:46.578265Z" }, "installedPackage-zlib1g:x86_64:1:1.2.11.dfsg-1+deb10u2": { "id": "installedPackage-zlib1g:x86_64:1:1.2.11.dfsg-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:1.2.11.dfsg-1+deb10u2", "packageName": "zlib1g" } }, "createTime": "2024-06-25T14:17:46.578341Z" }, "installedPackage-grub-efi-amd64-bin:x86_64:2.06-3~deb10u4": { "id": "installedPackage-grub-efi-amd64-bin:x86_64:2.06-3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.06-3~deb10u4", "packageName": "grub-efi-amd64-bin" } }, "createTime": "2024-06-25T14:17:46.578156Z" }, "installedPackage-gnupg:all:2.2.12-1+deb10u2": { "id": "installedPackage-gnupg:all:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.2.12-1+deb10u2", "packageName": "gnupg" } }, "createTime": "2024-06-25T14:17:46.578139Z" }, "installedPackage-libmpdec2:x86_64:2.4.2-2": { "id": "installedPackage-libmpdec2:x86_64:2.4.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.4.2-2", "packageName": "libmpdec2" } }, "createTime": "2024-06-25T14:17:46.578235Z" }, "installedPackage-libutempter0:x86_64:1.1.6-3": { "id": "installedPackage-libutempter0:x86_64:1.1.6-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.6-3", "packageName": "libutempter0" } }, "createTime": "2024-06-25T14:17:46.578282Z" }, "installedPackage-diffutils:x86_64:1:3.7-3": { "id": "installedPackage-diffutils:x86_64:1:3.7-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.7-3", "packageName": "diffutils" } }, "createTime": "2024-06-25T14:17:46.578123Z" }, "installedPackage-manpages:all:4.16-2": { "id": "installedPackage-manpages:all:4.16-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "4.16-2", "packageName": "manpages" } }, "createTime": "2024-06-25T14:17:46.578294Z" }, "installedPackage-libip4tc0:x86_64:1.8.2-4": { "id": "installedPackage-libip4tc0:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "libip4tc0" } }, "createTime": "2024-06-25T14:17:46.578213Z" }, "installedPackage-libcom-err2:x86_64:1.44.5-1+deb10u3": { "id": "installedPackage-libcom-err2:x86_64:1.44.5-1+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.44.5-1+deb10u3", "packageName": "libcom-err2" } }, "createTime": "2024-06-25T14:17:46.578184Z" }, "installedPackage-grub2-common:x86_64:2.06-3~deb10u4": { "id": "installedPackage-grub2-common:x86_64:2.06-3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.06-3~deb10u4", "packageName": "grub2-common" } }, "createTime": "2024-06-25T14:17:46.578158Z" }, "installedPackage-ca-certificates:all:20200601~deb10u2": { "id": "installedPackage-ca-certificates:all:20200601~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "20200601~deb10u2", "packageName": "ca-certificates" } }, "createTime": "2024-06-25T14:17:46.578098Z" }, "installedPackage-libnpth0:x86_64:1.6-1": { "id": "installedPackage-libnpth0:x86_64:1.6-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.6-1", "packageName": "libnpth0" } }, "createTime": "2024-06-25T14:17:46.578246Z" }, "installedPackage-mariadb-common:all:1:10.3.39-0+deb10u2": { "id": "installedPackage-mariadb-common:all:1:10.3.39-0+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:10.3.39-0+deb10u2", "packageName": "mariadb-common" } }, "createTime": "2024-06-25T14:17:46.578294Z" }, "installedPackage-liblzma5:x86_64:5.2.4-1+deb10u1": { "id": "installedPackage-liblzma5:x86_64:5.2.4-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.2.4-1+deb10u1", "packageName": "liblzma5" } }, "createTime": "2024-06-25T14:17:46.578229Z" }, "installedPackage-libnftnl11:x86_64:1.1.2-2": { "id": "installedPackage-libnftnl11:x86_64:1.1.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.2-2", "packageName": "libnftnl11" } }, "createTime": "2024-06-25T14:17:46.578245Z" }, "installedPackage-apt-utils:x86_64:1.8.2.3": { "id": "installedPackage-apt-utils:x86_64:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2.3", "packageName": "apt-utils" } }, "createTime": "2024-06-25T14:17:46.578091Z" }, "installedPackage-libmailutils5:x86_64:1:3.5-4": { "id": "installedPackage-libmailutils5:x86_64:1:3.5-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.5-4", "packageName": "libmailutils5" } }, "createTime": "2024-06-25T14:17:46.578232Z" }, "installedPackage-libprocps7:x86_64:2:3.3.15-2": { "id": "installedPackage-libprocps7:x86_64:2:3.3.15-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:3.3.15-2", "packageName": "libprocps7" } }, "createTime": "2024-06-25T14:17:46.578259Z" }, "installedPackage-openssh-server:x86_64:1:7.9p1-10+deb10u4": { "id": "installedPackage-openssh-server:x86_64:1:7.9p1-10+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:7.9p1-10+deb10u4", "packageName": "openssh-server" } }, "createTime": "2024-06-25T14:17:46.578303Z" }, "installedPackage-google-cloud-packages-archive-keyring:all:1.2-629101324": { "id": "installedPackage-google-cloud-packages-archive-keyring:all:1.2-629101324", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.2-629101324", "packageName": "google-cloud-packages-archive-keyring" } }, "createTime": "2024-06-25T14:17:46.578144Z" }, "installedPackage-libsasl2-modules:x86_64:2.1.27+dfsg-1+deb10u2": { "id": "installedPackage-libsasl2-modules:x86_64:2.1.27+dfsg-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.27+dfsg-1+deb10u2", "packageName": "libsasl2-modules" } }, "createTime": "2024-06-25T14:17:46.578268Z" }, "installedPackage-tcpdump:x86_64:4.9.3-1~deb10u2": { "id": "installedPackage-tcpdump:x86_64:4.9.3-1~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.9.3-1~deb10u2", "packageName": "tcpdump" } }, "createTime": "2024-06-25T14:17:46.578332Z" }, "installedPackage-libparted2:x86_64:3.2-25": { "id": "installedPackage-libparted2:x86_64:3.2-25", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2-25", "packageName": "libparted2" } }, "createTime": "2024-06-25T14:17:46.578253Z" }, "installedPackage-mysql-common:all:5.8+1.0.5": { "id": "installedPackage-mysql-common:all:5.8+1.0.5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "5.8+1.0.5", "packageName": "mysql-common" } }, "createTime": "2024-06-25T14:17:46.578297Z" }, "installedPackage-libfstrm0:x86_64:0.4.0-1": { "id": "installedPackage-libfstrm0:x86_64:0.4.0-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.4.0-1", "packageName": "libfstrm0" } }, "createTime": "2024-06-25T14:17:46.578200Z" }, "installedPackage-libzstd1:x86_64:1.3.8+dfsg-3+deb10u2": { "id": "installedPackage-libzstd1:x86_64:1.3.8+dfsg-3+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.8+dfsg-3+deb10u2", "packageName": "libzstd1" } }, "createTime": "2024-06-25T14:17:46.578286Z" }, "installedPackage-python3-chardet:all:3.0.4-3": { "id": "installedPackage-python3-chardet:all:3.0.4-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.0.4-3", "packageName": "python3-chardet" } }, "createTime": "2024-06-25T14:17:46.578312Z" }, "installedPackage-libedit2:x86_64:3.1-20181209-1": { "id": "installedPackage-libedit2:x86_64:3.1-20181209-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.1-20181209-1", "packageName": "libedit2" } }, "createTime": "2024-06-25T14:17:46.578191Z" }, "installedPackage-fdisk:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-fdisk:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "fdisk" } }, "createTime": "2024-06-25T14:17:46.578132Z" }, "installedPackage-bzip2:x86_64:1.0.6-9.2~deb10u2": { "id": "installedPackage-bzip2:x86_64:1.0.6-9.2~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.6-9.2~deb10u2", "packageName": "bzip2" } }, "createTime": "2024-06-25T14:17:46.578097Z" }, "installedPackage-libisc-export1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-libisc-export1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "libisc-export1100" } }, "createTime": "2024-06-25T14:17:46.578214Z" }, "installedPackage-libgsasl7:x86_64:1.8.0-8+deb10u1": { "id": "installedPackage-libgsasl7:x86_64:1.8.0-8+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.0-8+deb10u1", "packageName": "libgsasl7" } }, "createTime": "2024-06-25T14:17:46.578209Z" }, "installedPackage-init:x86_64:1.56+nmu1": { "id": "installedPackage-init:x86_64:1.56+nmu1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.56+nmu1", "packageName": "init" } }, "createTime": "2024-06-25T14:17:46.578162Z" }, "installedPackage-libhavege1:x86_64:1.9.1-7": { "id": "installedPackage-libhavege1:x86_64:1.9.1-7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.9.1-7", "packageName": "libhavege1" } }, "createTime": "2024-06-25T14:17:46.578210Z" }, "installedPackage-net-tools:x86_64:1.60+git20180626.aebd88e-1": { "id": "installedPackage-net-tools:x86_64:1.60+git20180626.aebd88e-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.60+git20180626.aebd88e-1", "packageName": "net-tools" } }, "createTime": "2024-06-25T14:17:46.578300Z" }, "installedPackage-libpcre3:x86_64:2:8.39-12": { "id": "installedPackage-libpcre3:x86_64:2:8.39-12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:8.39-12", "packageName": "libpcre3" } }, "createTime": "2024-06-25T14:17:46.578256Z" }, "installedPackage-libntlm0:x86_64:1.5-1+deb10u1": { "id": "installedPackage-libntlm0:x86_64:1.5-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.5-1+deb10u1", "packageName": "libntlm0" } }, "createTime": "2024-06-25T14:17:46.578248Z" }, "installedPackage-lsb-base:all:10.2019051400": { "id": "installedPackage-lsb-base:all:10.2019051400", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "10.2019051400", "packageName": "lsb-base" } }, "createTime": "2024-06-25T14:17:46.578290Z" }, "availablePackage-google-osconfig-agent:x86_64:1:20240524.03-g1": { "id": "availablePackage-google-osconfig-agent:x86_64:1:20240524.03-g1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20240524.03-g1", "packageName": "google-osconfig-agent" } }, "createTime": "2024-06-25T14:17:46.578083Z" }, "installedPackage-libcurl3-gnutls:x86_64:7.64.0-4+deb10u9": { "id": "installedPackage-libcurl3-gnutls:x86_64:7.64.0-4+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.64.0-4+deb10u9", "packageName": "libcurl3-gnutls" } }, "createTime": "2024-06-25T14:17:46.578185Z" }, "installedPackage-liblognorm5:x86_64:2.0.5-1": { "id": "installedPackage-liblognorm5:x86_64:2.0.5-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.0.5-1", "packageName": "liblognorm5" } }, "createTime": "2024-06-25T14:17:46.578225Z" }, "installedPackage-haveged:x86_64:1.9.1-7": { "id": "installedPackage-haveged:x86_64:1.9.1-7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.9.1-7", "packageName": "haveged" } }, "createTime": "2024-06-25T14:17:46.578160Z" }, "installedPackage-libaudit1:x86_64:1:2.8.4-3": { "id": "installedPackage-libaudit1:x86_64:1:2.8.4-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.8.4-3", "packageName": "libaudit1" } }, "createTime": "2024-06-25T14:17:46.578177Z" }, "installedPackage-python3.7:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-python3.7:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "python3.7" } }, "createTime": "2024-06-25T14:17:46.578321Z" }, "installedPackage-libcurl4:x86_64:7.64.0-4+deb10u9": { "id": "installedPackage-libcurl4:x86_64:7.64.0-4+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.64.0-4+deb10u9", "packageName": "libcurl4" } }, "createTime": "2024-06-25T14:17:46.578186Z" }, "installedPackage-libselinux1:x86_64:2.8-1+b1": { "id": "installedPackage-libselinux1:x86_64:2.8-1+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.8-1+b1", "packageName": "libselinux1" } }, "createTime": "2024-06-25T14:17:46.578270Z" }, "installedPackage-readline-common:all:7.0-5": { "id": "installedPackage-readline-common:all:7.0-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "7.0-5", "packageName": "readline-common" } }, "createTime": "2024-06-25T14:17:46.578323Z" }, "installedPackage-sensible-utils:all:0.0.12": { "id": "installedPackage-sensible-utils:all:0.0.12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.0.12", "packageName": "sensible-utils" } }, "createTime": "2024-06-25T14:17:46.578326Z" }, "installedPackage-isc-dhcp-client:x86_64:4.4.1-2+deb10u3": { "id": "installedPackage-isc-dhcp-client:x86_64:4.4.1-2+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.4.1-2+deb10u3", "packageName": "isc-dhcp-client" } }, "createTime": "2024-06-25T14:17:46.578166Z" }, "installedPackage-xxd:x86_64:2:8.1.0875-5+deb10u6": { "id": "installedPackage-xxd:x86_64:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:8.1.0875-5+deb10u6", "packageName": "xxd" } }, "createTime": "2024-06-25T14:17:46.578340Z" }, "installedPackage-libpython3.7-minimal:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-libpython3.7-minimal:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "libpython3.7-minimal" } }, "createTime": "2024-06-25T14:17:46.578264Z" }, "installedPackage-file:x86_64:1:5.35-4+deb10u2": { "id": "installedPackage-file:x86_64:1:5.35-4+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:5.35-4+deb10u2", "packageName": "file" } }, "createTime": "2024-06-25T14:17:46.578133Z" }, "installedPackage-libcap2-bin:x86_64:1:2.25-2": { "id": "installedPackage-libcap2-bin:x86_64:1:2.25-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.25-2", "packageName": "libcap2-bin" } }, "createTime": "2024-06-25T14:17:46.578183Z" }, "installedPackage-libsemanage1:x86_64:2.8-2": { "id": "installedPackage-libsemanage1:x86_64:2.8-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.8-2", "packageName": "libsemanage1" } }, "createTime": "2024-06-25T14:17:46.578271Z" }, "installedPackage-efibootmgr:x86_64:15-1": { "id": "installedPackage-efibootmgr:x86_64:15-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "15-1", "packageName": "efibootmgr" } }, "createTime": "2024-06-25T14:17:46.578128Z" }, "installedPackage-shim-helpers-amd64-signed:x86_64:1+15.8+1~deb10u1": { "id": "installedPackage-shim-helpers-amd64-signed:x86_64:1+15.8+1~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1+15.8+1~deb10u1", "packageName": "shim-helpers-amd64-signed" } }, "createTime": "2024-06-25T14:17:46.578326Z" }, "installedPackage-google-compute-engine:all:1:20240307.00-g1": { "id": "installedPackage-google-compute-engine:all:1:20240307.00-g1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:20240307.00-g1", "packageName": "google-compute-engine" } }, "createTime": "2024-06-25T14:17:46.578145Z" }, "installedPackage-grub-efi-amd64-signed:x86_64:1+2.06+3~deb10u4": { "id": "installedPackage-grub-efi-amd64-signed:x86_64:1+2.06+3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1+2.06+3~deb10u4", "packageName": "grub-efi-amd64-signed" } }, "createTime": "2024-06-25T14:17:46.578156Z" }, "installedPackage-libfastjson4:x86_64:0.99.8-2+deb10u1": { "id": "installedPackage-libfastjson4:x86_64:0.99.8-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.99.8-2+deb10u1", "packageName": "libfastjson4" } }, "createTime": "2024-06-25T14:17:46.578196Z" }, "installedPackage-libelf1:x86_64:0.176-1.1+deb10u1": { "id": "installedPackage-libelf1:x86_64:0.176-1.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.176-1.1+deb10u1", "packageName": "libelf1" } }, "createTime": "2024-06-25T14:17:46.578193Z" }, "installedPackage-klibc-utils:x86_64:2.0.6-1+deb10u1": { "id": "installedPackage-klibc-utils:x86_64:2.0.6-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.0.6-1+deb10u1", "packageName": "klibc-utils" } }, "createTime": "2024-06-25T14:17:46.578167Z" }, "installedPackage-passwd:x86_64:1:4.5-1.1": { "id": "installedPackage-passwd:x86_64:1:4.5-1.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:4.5-1.1", "packageName": "passwd" } }, "createTime": "2024-06-25T14:17:46.578306Z" }, "availablePackage-google-cloud-cli:x86_64:482.0.0-0": { "id": "availablePackage-google-cloud-cli:x86_64:482.0.0-0", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "x86_64", "version": "482.0.0-0", "packageName": "google-cloud-cli" } }, "createTime": "2024-06-25T14:17:46.578080Z" }, "installedPackage-google-guest-agent:x86_64:1:20240109.00-g1": { "id": "installedPackage-google-guest-agent:x86_64:1:20240109.00-g1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20240109.00-g1", "packageName": "google-guest-agent" } }, "createTime": "2024-06-25T14:17:46.578146Z" }, "installedPackage-isc-dhcp-common:x86_64:4.4.1-2+deb10u3": { "id": "installedPackage-isc-dhcp-common:x86_64:4.4.1-2+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.4.1-2+deb10u3", "packageName": "isc-dhcp-common" } }, "createTime": "2024-06-25T14:17:46.578167Z" }, "installedPackage-gpg:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpg:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpg" } }, "createTime": "2024-06-25T14:17:46.578148Z" }, "installedPackage-iptables:x86_64:1.8.2-4": { "id": "installedPackage-iptables:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "iptables" } }, "createTime": "2024-06-25T14:17:46.578165Z" }, "installedPackage-krb5-locales:all:1.17-3+deb10u6": { "id": "installedPackage-krb5-locales:all:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.17-3+deb10u6", "packageName": "krb5-locales" } }, "createTime": "2024-06-25T14:17:46.578169Z" }, "installedPackage-xz-utils:x86_64:5.2.4-1+deb10u1": { "id": "installedPackage-xz-utils:x86_64:5.2.4-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.2.4-1+deb10u1", "packageName": "xz-utils" } }, "createTime": "2024-06-25T14:17:46.578341Z" }, "installedPackage-ifupdown:x86_64:0.8.35": { "id": "installedPackage-ifupdown:x86_64:0.8.35", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.8.35", "packageName": "ifupdown" } }, "createTime": "2024-06-25T14:17:46.578161Z" }, "installedPackage-openssl:x86_64:1.1.1n-0+deb10u6": { "id": "installedPackage-openssl:x86_64:1.1.1n-0+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.1n-0+deb10u6", "packageName": "openssl" } }, "createTime": "2024-06-25T14:17:46.578304Z" }, "installedPackage-vim:x86_64:2:8.1.0875-5+deb10u6": { "id": "installedPackage-vim:x86_64:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:8.1.0875-5+deb10u6", "packageName": "vim" } }, "createTime": "2024-06-25T14:17:46.578337Z" }, "installedPackage-libglib2.0-0:x86_64:2.58.3-2+deb10u6": { "id": "installedPackage-libglib2.0-0:x86_64:2.58.3-2+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.58.3-2+deb10u6", "packageName": "libglib2.0-0" } }, "createTime": "2024-06-25T14:17:46.578205Z" }, "installedPackage-libklibc:x86_64:2.0.6-1+deb10u1": { "id": "installedPackage-libklibc:x86_64:2.0.6-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.0.6-1+deb10u1", "packageName": "libklibc" } }, "createTime": "2024-06-25T14:17:46.578219Z" }, "installedPackage-distro-info-data:all:0.41+deb10u9": { "id": "installedPackage-distro-info-data:all:0.41+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.41+deb10u9", "packageName": "distro-info-data" } }, "createTime": "2024-06-25T14:17:46.578124Z" }, "installedPackage-libdebconfclient0:x86_64:0.249": { "id": "installedPackage-libdebconfclient0:x86_64:0.249", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.249", "packageName": "libdebconfclient0" } }, "createTime": "2024-06-25T14:17:46.578188Z" }, "installedPackage-google-cloud-cli:x86_64:476.0.0-0": { "id": "installedPackage-google-cloud-cli:x86_64:476.0.0-0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "476.0.0-0", "packageName": "google-cloud-cli" } }, "createTime": "2024-06-25T14:17:46.578141Z" }, "installedPackage-libapparmor1:x86_64:2.13.2-10": { "id": "installedPackage-libapparmor1:x86_64:2.13.2-10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.13.2-10", "packageName": "libapparmor1" } }, "createTime": "2024-06-25T14:17:46.578170Z" }, "installedPackage-libpython3-stdlib:x86_64:3.7.3-1": { "id": "installedPackage-libpython3-stdlib:x86_64:3.7.3-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-1", "packageName": "libpython3-stdlib" } }, "createTime": "2024-06-25T14:17:46.578263Z" }, "installedPackage-nvme-cli:x86_64:1.7-1": { "id": "installedPackage-nvme-cli:x86_64:1.7-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.7-1", "packageName": "nvme-cli" } }, "createTime": "2024-06-25T14:17:46.578301Z" }, "installedPackage-bsdmainutils:x86_64:11.1.2+b1": { "id": "installedPackage-bsdmainutils:x86_64:11.1.2+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "11.1.2+b1", "packageName": "bsdmainutils" } }, "createTime": "2024-06-25T14:17:46.578096Z" }, "installedPackage-libuuid1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libuuid1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libuuid1" } }, "createTime": "2024-06-25T14:17:46.578283Z" }, "installedPackage-curl:x86_64:7.64.0-4+deb10u9": { "id": "installedPackage-curl:x86_64:7.64.0-4+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.64.0-4+deb10u9", "packageName": "curl" } }, "createTime": "2024-06-25T14:17:46.578102Z" }, "installedPackage-base-files:x86_64:10.3+deb10u13": { "id": "installedPackage-base-files:x86_64:10.3+deb10u13", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "10.3+deb10u13", "packageName": "base-files" } }, "createTime": "2024-06-25T14:17:46.578092Z" }, "installedPackage-libss2:x86_64:1.44.5-1+deb10u3": { "id": "installedPackage-libss2:x86_64:1.44.5-1+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.44.5-1+deb10u3", "packageName": "libss2" } }, "createTime": "2024-06-25T14:17:46.578274Z" }, "installedPackage-libtinfo6:x86_64:6.1+20181013-2+deb10u5": { "id": "installedPackage-libtinfo6:x86_64:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "6.1+20181013-2+deb10u5", "packageName": "libtinfo6" } }, "createTime": "2024-06-25T14:17:46.578279Z" }, "installedPackage-libpython3.7:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-libpython3.7:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "libpython3.7" } }, "createTime": "2024-06-25T14:17:46.578264Z" }, "installedPackage-libreadline7:x86_64:7.0-5": { "id": "installedPackage-libreadline7:x86_64:7.0-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.0-5", "packageName": "libreadline7" } }, "createTime": "2024-06-25T14:17:46.578266Z" }, "installedPackage-mokutil:x86_64:0.6.0-2~deb10u1": { "id": "installedPackage-mokutil:x86_64:0.6.0-2~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.6.0-2~deb10u1", "packageName": "mokutil" } }, "createTime": "2024-06-25T14:17:46.578296Z" }, "installedPackage-libiptc0:x86_64:1.8.2-4": { "id": "installedPackage-libiptc0:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "libiptc0" } }, "createTime": "2024-06-25T14:17:46.578213Z" }, "installedPackage-libmount1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libmount1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libmount1" } }, "createTime": "2024-06-25T14:17:46.578234Z" }, "installedPackage-coreutils:x86_64:8.30-3": { "id": "installedPackage-coreutils:x86_64:8.30-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "8.30-3", "packageName": "coreutils" } }, "createTime": "2024-06-25T14:17:46.578100Z" }, "installedPackage-libsqlite3-0:x86_64:3.27.2-3+deb10u2": { "id": "installedPackage-libsqlite3-0:x86_64:3.27.2-3+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.27.2-3+deb10u2", "packageName": "libsqlite3-0" } }, "createTime": "2024-06-25T14:17:46.578274Z" }, "installedPackage-mawk:x86_64:1.3.3-17+b3": { "id": "installedPackage-mawk:x86_64:1.3.3-17+b3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.3-17+b3", "packageName": "mawk" } }, "createTime": "2024-06-25T14:17:46.578295Z" }, "installedPackage-base-passwd:x86_64:3.5.46": { "id": "installedPackage-base-passwd:x86_64:3.5.46", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.5.46", "packageName": "base-passwd" } }, "createTime": "2024-06-25T14:17:46.578093Z" }, "installedPackage-libisc1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11": { "id": "installedPackage-libisc1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u11", "packageName": "libisc1100" } }, "createTime": "2024-06-25T14:17:46.578215Z" }, "installedPackage-libkmod2:x86_64:26-1": { "id": "installedPackage-libkmod2:x86_64:26-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "26-1", "packageName": "libkmod2" } }, "createTime": "2024-06-25T14:17:46.578219Z" }, "installedPackage-libfuse2:x86_64:2.9.9-1+deb10u1": { "id": "installedPackage-libfuse2:x86_64:2.9.9-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.9.9-1+deb10u1", "packageName": "libfuse2" } }, "createTime": "2024-06-25T14:17:46.578201Z" }, "installedPackage-libpcap0.8:x86_64:1.8.1-6+deb10u1": { "id": "installedPackage-libpcap0.8:x86_64:1.8.1-6+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.1-6+deb10u1", "packageName": "libpcap0.8" } }, "createTime": "2024-06-25T14:17:46.578254Z" }, "installedPackage-libssh2-1:x86_64:1.8.0-2.1+deb10u1": { "id": "installedPackage-libssh2-1:x86_64:1.8.0-2.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.0-2.1+deb10u1", "packageName": "libssh2-1" } }, "createTime": "2024-06-25T14:17:46.578275Z" }, "installedPackage-python3-pkg-resources:all:40.8.0-1": { "id": "installedPackage-python3-pkg-resources:all:40.8.0-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "40.8.0-1", "packageName": "python3-pkg-resources" } }, "createTime": "2024-06-25T14:17:46.578317Z" }, "installedPackage-sed:x86_64:4.7-1": { "id": "installedPackage-sed:x86_64:4.7-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.7-1", "packageName": "sed" } }, "createTime": "2024-06-25T14:17:46.578325Z" }, "installedPackage-cpio:x86_64:2.12+dfsg-9+deb10u1": { "id": "installedPackage-cpio:x86_64:2.12+dfsg-9+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.12+dfsg-9+deb10u1", "packageName": "cpio" } }, "createTime": "2024-06-25T14:17:46.578100Z" }, "installedPackage-libncurses6:x86_64:6.1+20181013-2+deb10u5": { "id": "installedPackage-libncurses6:x86_64:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "6.1+20181013-2+deb10u5", "packageName": "libncurses6" } }, "createTime": "2024-06-25T14:17:46.578235Z" }, "installedPackage-libpsl5:x86_64:0.20.2-2": { "id": "installedPackage-libpsl5:x86_64:0.20.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.20.2-2", "packageName": "libpsl5" } }, "createTime": "2024-06-25T14:17:46.578260Z" } }, "name": "projects/12340051/locations/us-central1-a/instances/1574288005952962235/inventory", "updateTime": "2024-06-25T17:07:46.454014Z" } ], "nextPageToken": "CJfytMableLuLg==" } ================================================ FILE: test-data/osconfig1/json-dumps/inventory.json ================================================ { "osInfo": { "longName": "Debian GNU/Linux 10 (buster)", "shortName": "debian", "version": "10", "architecture": "x86_64", "kernelVersion": "#1 SMP Debian 4.19.304-1 (2024-01-09)", "kernelRelease": "4.19.0-26-cloud-amd64", "osconfigAgentVersion": "20231207.01-g1", "hostname": "fake-instance" }, "items": { "installedPackage-libassuan0:x86_64:2.5.2-1": { "id": "installedPackage-libassuan0:x86_64:2.5.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.5.2-1", "packageName": "libassuan0" } }, "createTime": "2024-04-08T17:39:06.556110Z" }, "installedPackage-libgpm2:x86_64:1.20.7-5": { "id": "installedPackage-libgpm2:x86_64:1.20.7-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.20.7-5", "packageName": "libgpm2" } }, "createTime": "2024-04-08T17:39:06.556143Z" }, "installedPackage-python3-debian:all:0.1.35": { "id": "installedPackage-python3-debian:all:0.1.35", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.1.35", "packageName": "python3-debian" } }, "createTime": "2024-04-08T17:39:06.556218Z" }, "installedPackage-linux-base:all:4.6": { "id": "installedPackage-linux-base:all:4.6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "4.6", "packageName": "linux-base" } }, "createTime": "2024-04-08T17:39:06.556197Z" }, "installedPackage-libext2fs2:x86_64:1.44.5-1+deb10u3": { "id": "installedPackage-libext2fs2:x86_64:1.44.5-1+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.44.5-1+deb10u3", "packageName": "libext2fs2" } }, "createTime": "2024-04-08T17:39:06.556134Z" }, "installedPackage-procps:x86_64:2:3.3.15-2": { "id": "installedPackage-procps:x86_64:2:3.3.15-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:3.3.15-2", "packageName": "procps" } }, "createTime": "2024-04-08T17:39:06.556213Z" }, "installedPackage-libc6:x86_64:2.28-10+deb10u2": { "id": "installedPackage-libc6:x86_64:2.28-10+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.28-10+deb10u2", "packageName": "libc6" } }, "createTime": "2024-04-08T17:39:06.556124Z" }, "installedPackage-python3-pysimplesoap:all:1.16.2-1": { "id": "installedPackage-python3-pysimplesoap:all:1.16.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.16.2-1", "packageName": "python3-pysimplesoap" } }, "createTime": "2024-04-08T17:39:06.556222Z" }, "installedPackage-libgcrypt20:x86_64:1.8.4-5+deb10u1": { "id": "installedPackage-libgcrypt20:x86_64:1.8.4-5+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.4-5+deb10u1", "packageName": "libgcrypt20" } }, "createTime": "2024-04-08T17:39:06.556139Z" }, "installedPackage-kmod:x86_64:26-1": { "id": "installedPackage-kmod:x86_64:26-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "26-1", "packageName": "kmod" } }, "createTime": "2024-04-08T17:39:06.556106Z" }, "installedPackage-libidn11:x86_64:1.33-2.2": { "id": "installedPackage-libidn11:x86_64:1.33-2.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.33-2.2", "packageName": "libidn11" } }, "createTime": "2024-04-08T17:39:06.556146Z" }, "installedPackage-python3-apt:x86_64:1.8.4.3": { "id": "installedPackage-python3-apt:x86_64:1.8.4.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.4.3", "packageName": "python3-apt" } }, "createTime": "2024-04-08T17:39:06.556215Z" }, "installedPackage-libexpat1:x86_64:2.2.6-2+deb10u7": { "id": "installedPackage-libexpat1:x86_64:2.2.6-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.6-2+deb10u7", "packageName": "libexpat1" } }, "createTime": "2024-04-08T17:39:06.556133Z" }, "installedPackage-dmidecode:x86_64:3.2-1": { "id": "installedPackage-dmidecode:x86_64:3.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2-1", "packageName": "dmidecode" } }, "createTime": "2024-04-08T17:39:06.556076Z" }, "installedPackage-dash:x86_64:0.5.10.2-5": { "id": "installedPackage-dash:x86_64:0.5.10.2-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.5.10.2-5", "packageName": "dash" } }, "createTime": "2024-04-08T17:39:06.556071Z" }, "installedPackage-libargon2-1:x86_64:0~20171227-0.2": { "id": "installedPackage-libargon2-1:x86_64:0~20171227-0.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0~20171227-0.2", "packageName": "libargon2-1" } }, "createTime": "2024-04-08T17:39:06.556109Z" }, "installedPackage-gpgconf:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpgconf:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpgconf" } }, "createTime": "2024-04-08T17:39:06.556093Z" }, "installedPackage-libmariadb3:x86_64:1:10.3.39-0+deb10u2": { "id": "installedPackage-libmariadb3:x86_64:1:10.3.39-0+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:10.3.39-0+deb10u2", "packageName": "libmariadb3" } }, "createTime": "2024-04-08T17:39:06.556161Z" }, "installedPackage-libfribidi0:x86_64:1.0.5-3.1+deb10u2": { "id": "installedPackage-libfribidi0:x86_64:1.0.5-3.1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.5-3.1+deb10u2", "packageName": "libfribidi0" } }, "createTime": "2024-04-08T17:39:06.556136Z" }, "installedPackage-google-compute-engine-oslogin:x86_64:1:20231004.00-g1+deb10": { "id": "installedPackage-google-compute-engine-oslogin:x86_64:1:20231004.00-g1+deb10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20231004.00-g1+deb10", "packageName": "google-compute-engine-oslogin" } }, "createTime": "2024-04-08T17:39:06.556088Z" }, "installedPackage-python3:x86_64:3.7.3-1": { "id": "installedPackage-python3:x86_64:3.7.3-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-1", "packageName": "python3" } }, "createTime": "2024-04-08T17:39:06.556215Z" }, "installedPackage-libltdl7:x86_64:2.4.6-9": { "id": "installedPackage-libltdl7:x86_64:2.4.6-9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.4.6-9", "packageName": "libltdl7" } }, "createTime": "2024-04-08T17:39:06.556157Z" }, "installedPackage-libmnl0:x86_64:1.0.4-2": { "id": "installedPackage-libmnl0:x86_64:1.0.4-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.4-2", "packageName": "libmnl0" } }, "createTime": "2024-04-08T17:39:06.556161Z" }, "installedPackage-libapt-pkg5.0:x86_64:1.8.2.3": { "id": "installedPackage-libapt-pkg5.0:x86_64:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2.3", "packageName": "libapt-pkg5.0" } }, "createTime": "2024-04-08T17:39:06.556109Z" }, "installedPackage-libpython2.7-minimal:x86_64:2.7.16-2+deb10u4": { "id": "installedPackage-libpython2.7-minimal:x86_64:2.7.16-2+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.7.16-2+deb10u4", "packageName": "libpython2.7-minimal" } }, "createTime": "2024-04-08T17:39:06.556180Z" }, "installedPackage-gpgv:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpgv:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpgv" } }, "createTime": "2024-04-08T17:39:06.556094Z" }, "installedPackage-bsdutils:x86_64:1:2.33.1-0.1+deb10u1": { "id": "installedPackage-bsdutils:x86_64:1:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.33.1-0.1+deb10u1", "packageName": "bsdutils" } }, "createTime": "2024-04-08T17:39:06.556066Z" }, "installedPackage-libblkid1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libblkid1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libblkid1" } }, "createTime": "2024-04-08T17:39:06.556122Z" }, "installedPackage-libnettle6:x86_64:3.4.1-1+deb10u1": { "id": "installedPackage-libnettle6:x86_64:3.4.1-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.4.1-1+deb10u1", "packageName": "libnettle6" } }, "createTime": "2024-04-08T17:39:06.556164Z" }, "installedPackage-e2fsprogs:x86_64:1.44.5-1+deb10u3": { "id": "installedPackage-e2fsprogs:x86_64:1.44.5-1+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.44.5-1+deb10u3", "packageName": "e2fsprogs" } }, "createTime": "2024-04-08T17:39:06.556077Z" }, "installedPackage-libksba8:x86_64:1.3.5-2+deb10u2": { "id": "installedPackage-libksba8:x86_64:1.3.5-2+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.5-2+deb10u2", "packageName": "libksba8" } }, "createTime": "2024-04-08T17:39:06.556154Z" }, "installedPackage-publicsuffix:all:20220811.1734-0+deb10u1": { "id": "installedPackage-publicsuffix:all:20220811.1734-0+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "20220811.1734-0+deb10u1", "packageName": "publicsuffix" } }, "createTime": "2024-04-08T17:39:06.556214Z" }, "installedPackage-findutils:x86_64:4.6.0+git+20190209-2": { "id": "installedPackage-findutils:x86_64:4.6.0+git+20190209-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.6.0+git+20190209-2", "packageName": "findutils" } }, "createTime": "2024-04-08T17:39:06.556081Z" }, "installedPackage-python3-debianbts:all:2.8.2": { "id": "installedPackage-python3-debianbts:all:2.8.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.8.2", "packageName": "python3-debianbts" } }, "createTime": "2024-04-08T17:39:06.556218Z" }, "installedPackage-libpython2.7-stdlib:x86_64:2.7.16-2+deb10u4": { "id": "installedPackage-libpython2.7-stdlib:x86_64:2.7.16-2+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.7.16-2+deb10u4", "packageName": "libpython2.7-stdlib" } }, "createTime": "2024-04-08T17:39:06.556181Z" }, "installedPackage-libsasl2-2:x86_64:2.1.27+dfsg-1+deb10u2": { "id": "installedPackage-libsasl2-2:x86_64:2.1.27+dfsg-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.27+dfsg-1+deb10u2", "packageName": "libsasl2-2" } }, "createTime": "2024-04-08T17:39:06.556184Z" }, "installedPackage-libsepol1:x86_64:2.8-1": { "id": "installedPackage-libsepol1:x86_64:2.8-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.8-1", "packageName": "libsepol1" } }, "createTime": "2024-04-08T17:39:06.556188Z" }, "installedPackage-vim-common:all:2:8.1.0875-5+deb10u6": { "id": "installedPackage-vim-common:all:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2:8.1.0875-5+deb10u6", "packageName": "vim-common" } }, "createTime": "2024-04-08T17:39:06.556238Z" }, "installedPackage-libestr0:x86_64:0.1.10-2.1": { "id": "installedPackage-libestr0:x86_64:0.1.10-2.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.1.10-2.1", "packageName": "libestr0" } }, "createTime": "2024-04-08T17:39:06.556132Z" }, "installedPackage-ncurses-base:all:6.1+20181013-2+deb10u5": { "id": "installedPackage-ncurses-base:all:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "6.1+20181013-2+deb10u5", "packageName": "ncurses-base" } }, "createTime": "2024-04-08T17:39:06.556206Z" }, "installedPackage-hostname:x86_64:3.21": { "id": "installedPackage-hostname:x86_64:3.21", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.21", "packageName": "hostname" } }, "createTime": "2024-04-08T17:39:06.556100Z" }, "installedPackage-libunistring2:x86_64:0.9.10-1": { "id": "installedPackage-libunistring2:x86_64:0.9.10-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.9.10-1", "packageName": "libunistring2" } }, "createTime": "2024-04-08T17:39:06.556194Z" }, "installedPackage-libapt-inst2.0:x86_64:1.8.2.3": { "id": "installedPackage-libapt-inst2.0:x86_64:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2.3", "packageName": "libapt-inst2.0" } }, "createTime": "2024-04-08T17:39:06.556108Z" }, "installedPackage-libnghttp2-14:x86_64:1.36.0-2+deb10u2": { "id": "installedPackage-libnghttp2-14:x86_64:1.36.0-2+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.36.0-2+deb10u2", "packageName": "libnghttp2-14" } }, "createTime": "2024-04-08T17:39:06.556166Z" }, "installedPackage-lsb-release:all:10.2019051400": { "id": "installedPackage-lsb-release:all:10.2019051400", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "10.2019051400", "packageName": "lsb-release" } }, "createTime": "2024-04-08T17:39:06.556200Z" }, "installedPackage-initramfs-tools:all:0.133+deb10u1": { "id": "installedPackage-initramfs-tools:all:0.133+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.133+deb10u1", "packageName": "initramfs-tools" } }, "createTime": "2024-04-08T17:39:06.556102Z" }, "installedPackage-libgmp10:x86_64:2:6.1.2+dfsg-4+deb10u1": { "id": "installedPackage-libgmp10:x86_64:2:6.1.2+dfsg-4+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:6.1.2+dfsg-4+deb10u1", "packageName": "libgmp10" } }, "createTime": "2024-04-08T17:39:06.556141Z" }, "installedPackage-google-cloud-packages-archive-keyring:all:1.2-614705963": { "id": "installedPackage-google-cloud-packages-archive-keyring:all:1.2-614705963", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.2-614705963", "packageName": "google-cloud-packages-archive-keyring" } }, "createTime": "2024-04-08T17:39:06.556087Z" }, "installedPackage-libnfnetlink0:x86_64:1.0.1-3+b1": { "id": "installedPackage-libnfnetlink0:x86_64:1.0.1-3+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.1-3+b1", "packageName": "libnfnetlink0" } }, "createTime": "2024-04-08T17:39:06.556165Z" }, "installedPackage-libunbound8:x86_64:1.9.0-2+deb10u4": { "id": "installedPackage-libunbound8:x86_64:1.9.0-2+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.9.0-2+deb10u4", "packageName": "libunbound8" } }, "createTime": "2024-04-08T17:39:06.556194Z" }, "installedPackage-python3-distro-info:all:0.21+deb10u1": { "id": "installedPackage-python3-distro-info:all:0.21+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.21+deb10u1", "packageName": "python3-distro-info" } }, "createTime": "2024-04-08T17:39:06.556219Z" }, "installedPackage-mime-support:all:3.62": { "id": "installedPackage-mime-support:all:3.62", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.62", "packageName": "mime-support" } }, "createTime": "2024-04-08T17:39:06.556203Z" }, "installedPackage-libdbus-1-3:x86_64:1.12.28-0+deb10u1": { "id": "installedPackage-libdbus-1-3:x86_64:1.12.28-0+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.12.28-0+deb10u1", "packageName": "libdbus-1-3" } }, "createTime": "2024-04-08T17:39:06.556128Z" }, "installedPackage-libudev1:x86_64:241-7~deb10u10": { "id": "installedPackage-libudev1:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "libudev1" } }, "createTime": "2024-04-08T17:39:06.556193Z" }, "installedPackage-exim4-daemon-light:x86_64:4.92-8+deb10u9": { "id": "installedPackage-exim4-daemon-light:x86_64:4.92-8+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.92-8+deb10u9", "packageName": "exim4-daemon-light" } }, "createTime": "2024-04-08T17:39:06.556080Z" }, "installedPackage-libidn2-0:x86_64:2.0.5-1+deb10u1": { "id": "installedPackage-libidn2-0:x86_64:2.0.5-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.0.5-1+deb10u1", "packageName": "libidn2-0" } }, "createTime": "2024-04-08T17:39:06.556146Z" }, "installedPackage-gpgsm:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpgsm:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpgsm" } }, "createTime": "2024-04-08T17:39:06.556093Z" }, "installedPackage-libp11-kit0:x86_64:0.23.15-2+deb10u1": { "id": "installedPackage-libp11-kit0:x86_64:0.23.15-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.23.15-2+deb10u1", "packageName": "libp11-kit0" } }, "createTime": "2024-04-08T17:39:06.556172Z" }, "installedPackage-grub-pc-bin:x86_64:2.06-3~deb10u4": { "id": "installedPackage-grub-pc-bin:x86_64:2.06-3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.06-3~deb10u4", "packageName": "grub-pc-bin" } }, "createTime": "2024-04-08T17:39:06.556097Z" }, "installedPackage-libfdisk1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libfdisk1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libfdisk1" } }, "createTime": "2024-04-08T17:39:06.556135Z" }, "installedPackage-perl-base:x86_64:5.28.1-6+deb10u1": { "id": "installedPackage-perl-base:x86_64:5.28.1-6+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.28.1-6+deb10u1", "packageName": "perl-base" } }, "createTime": "2024-04-08T17:39:06.556212Z" }, "installedPackage-gcc-8-base:x86_64:8.3.0-6": { "id": "installedPackage-gcc-8-base:x86_64:8.3.0-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "8.3.0-6", "packageName": "gcc-8-base" } }, "createTime": "2024-04-08T17:39:06.556082Z" }, "installedPackage-libcap2:x86_64:1:2.25-2": { "id": "installedPackage-libcap2:x86_64:1:2.25-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.25-2", "packageName": "libcap2" } }, "createTime": "2024-04-08T17:39:06.556125Z" }, "installedPackage-libtasn1-6:x86_64:4.13-3+deb10u1": { "id": "installedPackage-libtasn1-6:x86_64:4.13-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.13-3+deb10u1", "packageName": "libtasn1-6" } }, "createTime": "2024-04-08T17:39:06.556192Z" }, "installedPackage-iproute2:x86_64:4.20.0-2+deb10u1": { "id": "installedPackage-iproute2:x86_64:4.20.0-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.20.0-2+deb10u1", "packageName": "iproute2" } }, "createTime": "2024-04-08T17:39:06.556103Z" }, "installedPackage-libldap-common:all:2.4.47+dfsg-3+deb10u7": { "id": "installedPackage-libldap-common:all:2.4.47+dfsg-3+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.4.47+dfsg-3+deb10u7", "packageName": "libldap-common" } }, "createTime": "2024-04-08T17:39:06.556156Z" }, "installedPackage-systemd-sysv:x86_64:241-7~deb10u10": { "id": "installedPackage-systemd-sysv:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "systemd-sysv" } }, "createTime": "2024-04-08T17:39:06.556232Z" }, "installedPackage-login:x86_64:1:4.5-1.1": { "id": "installedPackage-login:x86_64:1:4.5-1.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:4.5-1.1", "packageName": "login" } }, "createTime": "2024-04-08T17:39:06.556199Z" }, "installedPackage-grub-cloud-amd64:x86_64:0.0.4": { "id": "installedPackage-grub-cloud-amd64:x86_64:0.0.4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.0.4", "packageName": "grub-cloud-amd64" } }, "createTime": "2024-04-08T17:39:06.556095Z" }, "installedPackage-chrony:x86_64:3.4-4+deb10u2": { "id": "installedPackage-chrony:x86_64:3.4-4+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.4-4+deb10u2", "packageName": "chrony" } }, "createTime": "2024-04-08T17:39:06.556068Z" }, "installedPackage-gzip:x86_64:1.9-3+deb10u1": { "id": "installedPackage-gzip:x86_64:1.9-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.9-3+deb10u1", "packageName": "gzip" } }, "createTime": "2024-04-08T17:39:06.556099Z" }, "availablePackage-google-cloud-cli:x86_64:471.0.0-0": { "id": "availablePackage-google-cloud-cli:x86_64:471.0.0-0", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "x86_64", "version": "471.0.0-0", "packageName": "google-cloud-cli" } }, "createTime": "2024-04-08T17:39:06.556043Z" }, "installedPackage-libhogweed4:x86_64:3.4.1-1+deb10u1": { "id": "installedPackage-libhogweed4:x86_64:3.4.1-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.4.1-1+deb10u1", "packageName": "libhogweed4" } }, "createTime": "2024-04-08T17:39:06.556145Z" }, "installedPackage-libicu63:x86_64:63.1-6+deb10u3": { "id": "installedPackage-libicu63:x86_64:63.1-6+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "63.1-6+deb10u3", "packageName": "libicu63" } }, "createTime": "2024-04-08T17:39:06.556145Z" }, "installedPackage-grep:x86_64:3.3-1": { "id": "installedPackage-grep:x86_64:3.3-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.3-1", "packageName": "grep" } }, "createTime": "2024-04-08T17:39:06.556094Z" }, "installedPackage-libc-bin:x86_64:2.28-10+deb10u2": { "id": "installedPackage-libc-bin:x86_64:2.28-10+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.28-10+deb10u2", "packageName": "libc-bin" } }, "createTime": "2024-04-08T17:39:06.556123Z" }, "installedPackage-grub-common:x86_64:2.06-3~deb10u4": { "id": "installedPackage-grub-common:x86_64:2.06-3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.06-3~deb10u4", "packageName": "grub-common" } }, "createTime": "2024-04-08T17:39:06.556096Z" }, "installedPackage-gpg-wks-server:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpg-wks-server:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpg-wks-server" } }, "createTime": "2024-04-08T17:39:06.556092Z" }, "installedPackage-libpam-modules:x86_64:1.3.1-5": { "id": "installedPackage-libpam-modules:x86_64:1.3.1-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.1-5", "packageName": "libpam-modules" } }, "createTime": "2024-04-08T17:39:06.556172Z" }, "installedPackage-uuid-runtime:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-uuid-runtime:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "uuid-runtime" } }, "createTime": "2024-04-08T17:39:06.556237Z" }, "installedPackage-libkrb5-3:x86_64:1.17-3+deb10u6": { "id": "installedPackage-libkrb5-3:x86_64:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.17-3+deb10u6", "packageName": "libkrb5-3" } }, "createTime": "2024-04-08T17:39:06.556153Z" }, "installedPackage-librtmp1:x86_64:2.4+20151223.gitfa8646d.1-2": { "id": "installedPackage-librtmp1:x86_64:2.4+20151223.gitfa8646d.1-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.4+20151223.gitfa8646d.1-2", "packageName": "librtmp1" } }, "createTime": "2024-04-08T17:39:06.556184Z" }, "installedPackage-google-fluentd-catch-all-config:all:0.8.0": { "id": "installedPackage-google-fluentd-catch-all-config:all:0.8.0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.8.0", "packageName": "google-fluentd-catch-all-config" } }, "createTime": "2024-04-08T17:39:06.556089Z" }, "installedPackage-libpam-runtime:all:1.3.1-5": { "id": "installedPackage-libpam-runtime:all:1.3.1-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.3.1-5", "packageName": "libpam-runtime" } }, "createTime": "2024-04-08T17:39:06.556173Z" }, "installedPackage-libmagic1:x86_64:1:5.35-4+deb10u2": { "id": "installedPackage-libmagic1:x86_64:1:5.35-4+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:5.35-4+deb10u2", "packageName": "libmagic1" } }, "createTime": "2024-04-08T17:39:06.556160Z" }, "installedPackage-libgeoip1:x86_64:1.6.12-1": { "id": "installedPackage-libgeoip1:x86_64:1.6.12-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.6.12-1", "packageName": "libgeoip1" } }, "createTime": "2024-04-08T17:39:06.556140Z" }, "installedPackage-libpam-cap:x86_64:1:2.25-2": { "id": "installedPackage-libpam-cap:x86_64:1:2.25-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.25-2", "packageName": "libpam-cap" } }, "createTime": "2024-04-08T17:39:06.556172Z" }, "installedPackage-bash:x86_64:5.0-4": { "id": "installedPackage-bash:x86_64:5.0-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.0-4", "packageName": "bash" } }, "createTime": "2024-04-08T17:39:06.556063Z" }, "installedPackage-gnupg-utils:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gnupg-utils:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gnupg-utils" } }, "createTime": "2024-04-08T17:39:06.556086Z" }, "availablePackage-google-osconfig-agent:x86_64:1:20240320.00-g1": { "id": "availablePackage-google-osconfig-agent:x86_64:1:20240320.00-g1", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20240320.00-g1", "packageName": "google-osconfig-agent" } }, "createTime": "2024-04-08T17:39:06.556052Z" }, "installedPackage-shim-signed:x86_64:1.39~1+deb10u1+15.7-1~deb10u1": { "id": "installedPackage-shim-signed:x86_64:1.39~1+deb10u1+15.7-1~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.39~1+deb10u1+15.7-1~deb10u1", "packageName": "shim-signed" } }, "createTime": "2024-04-08T17:39:06.556229Z" }, "installedPackage-libsemanage-common:all:2.8-2": { "id": "installedPackage-libsemanage-common:all:2.8-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.8-2", "packageName": "libsemanage-common" } }, "createTime": "2024-04-08T17:39:06.556187Z" }, "installedPackage-libcap-ng0:x86_64:0.7.9-2": { "id": "installedPackage-libcap-ng0:x86_64:0.7.9-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.7.9-2", "packageName": "libcap-ng0" } }, "createTime": "2024-04-08T17:39:06.556124Z" }, "installedPackage-shim-signed-common:all:1.39~1+deb10u1+15.7-1~deb10u1": { "id": "installedPackage-shim-signed-common:all:1.39~1+deb10u1+15.7-1~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.39~1+deb10u1+15.7-1~deb10u1", "packageName": "shim-signed-common" } }, "createTime": "2024-04-08T17:39:06.556229Z" }, "installedPackage-gpg-agent:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpg-agent:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpg-agent" } }, "createTime": "2024-04-08T17:39:06.556092Z" }, "installedPackage-libbsd0:x86_64:0.9.1-2+deb10u1": { "id": "installedPackage-libbsd0:x86_64:0.9.1-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.9.1-2+deb10u1", "packageName": "libbsd0" } }, "createTime": "2024-04-08T17:39:06.556122Z" }, "installedPackage-nano:x86_64:3.2-3": { "id": "installedPackage-nano:x86_64:3.2-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2-3", "packageName": "nano" } }, "createTime": "2024-04-08T17:39:06.556205Z" }, "installedPackage-libgcc1:x86_64:1:8.3.0-6": { "id": "installedPackage-libgcc1:x86_64:1:8.3.0-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:8.3.0-6", "packageName": "libgcc1" } }, "createTime": "2024-04-08T17:39:06.556138Z" }, "installedPackage-mailutils:x86_64:1:3.5-4": { "id": "installedPackage-mailutils:x86_64:1:3.5-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.5-4", "packageName": "mailutils" } }, "createTime": "2024-04-08T17:39:06.556201Z" }, "installedPackage-tar:x86_64:1.30+dfsg-6+deb10u1": { "id": "installedPackage-tar:x86_64:1.30+dfsg-6+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.30+dfsg-6+deb10u1", "packageName": "tar" } }, "createTime": "2024-04-08T17:39:06.556233Z" }, "installedPackage-dirmngr:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-dirmngr:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "dirmngr" } }, "createTime": "2024-04-08T17:39:06.556075Z" }, "installedPackage-apt-listchanges:all:3.19": { "id": "installedPackage-apt-listchanges:all:3.19", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.19", "packageName": "apt-listchanges" } }, "createTime": "2024-04-08T17:39:06.556060Z" }, "installedPackage-libwrap0:x86_64:7.6.q-28": { "id": "installedPackage-libwrap0:x86_64:7.6.q-28", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.6.q-28", "packageName": "libwrap0" } }, "createTime": "2024-04-08T17:39:06.556195Z" }, "installedPackage-pinentry-curses:x86_64:1.1.0-2": { "id": "installedPackage-pinentry-curses:x86_64:1.1.0-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.0-2", "packageName": "pinentry-curses" } }, "createTime": "2024-04-08T17:39:06.556213Z" }, "installedPackage-ucf:all:3.0038+nmu1": { "id": "installedPackage-ucf:all:3.0038+nmu1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.0038+nmu1", "packageName": "ucf" } }, "createTime": "2024-04-08T17:39:06.556235Z" }, "installedPackage-libprotobuf-c1:x86_64:1.3.1-1+b1": { "id": "installedPackage-libprotobuf-c1:x86_64:1.3.1-1+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.1-1+b1", "packageName": "libprotobuf-c1" } }, "createTime": "2024-04-08T17:39:06.556179Z" }, "installedPackage-dmsetup:x86_64:2:1.02.155-3": { "id": "installedPackage-dmsetup:x86_64:2:1.02.155-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:1.02.155-3", "packageName": "dmsetup" } }, "createTime": "2024-04-08T17:39:06.556076Z" }, "installedPackage-libgpg-error0:x86_64:1.35-1": { "id": "installedPackage-libgpg-error0:x86_64:1.35-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.35-1", "packageName": "libgpg-error0" } }, "createTime": "2024-04-08T17:39:06.556142Z" }, "installedPackage-gdisk:x86_64:1.0.3-1.1": { "id": "installedPackage-gdisk:x86_64:1.0.3-1.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.3-1.1", "packageName": "gdisk" } }, "createTime": "2024-04-08T17:39:06.556083Z" }, "installedPackage-openssh-sftp-server:x86_64:1:7.9p1-10+deb10u4": { "id": "installedPackage-openssh-sftp-server:x86_64:1:7.9p1-10+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:7.9p1-10+deb10u4", "packageName": "openssh-sftp-server" } }, "createTime": "2024-04-08T17:39:06.556209Z" }, "installedPackage-libattr1:x86_64:1:2.4.48-4": { "id": "installedPackage-libattr1:x86_64:1:2.4.48-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.4.48-4", "packageName": "libattr1" } }, "createTime": "2024-04-08T17:39:06.556113Z" }, "installedPackage-libfreetype6:x86_64:2.9.1-3+deb10u3": { "id": "installedPackage-libfreetype6:x86_64:2.9.1-3+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.9.1-3+deb10u3", "packageName": "libfreetype6" } }, "createTime": "2024-04-08T17:39:06.556136Z" }, "installedPackage-python3-certifi:all:2018.8.24-1": { "id": "installedPackage-python3-certifi:all:2018.8.24-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2018.8.24-1", "packageName": "python3-certifi" } }, "createTime": "2024-04-08T17:39:06.556216Z" }, "installedPackage-libpython2.7:x86_64:2.7.16-2+deb10u4": { "id": "installedPackage-libpython2.7:x86_64:2.7.16-2+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.7.16-2+deb10u4", "packageName": "libpython2.7" } }, "createTime": "2024-04-08T17:39:06.556180Z" }, "installedPackage-libseccomp2:x86_64:2.3.3-4": { "id": "installedPackage-libseccomp2:x86_64:2.3.3-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.3.3-4", "packageName": "libseccomp2" } }, "createTime": "2024-04-08T17:39:06.556186Z" }, "installedPackage-sudo:x86_64:1.8.27-1+deb10u6": { "id": "installedPackage-sudo:x86_64:1.8.27-1+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.27-1+deb10u6", "packageName": "sudo" } }, "createTime": "2024-04-08T17:39:06.556231Z" }, "installedPackage-python3-debconf:all:1.5.71+deb10u1": { "id": "installedPackage-python3-debconf:all:1.5.71+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.5.71+deb10u1", "packageName": "python3-debconf" } }, "createTime": "2024-04-08T17:39:06.556217Z" }, "installedPackage-unattended-upgrades:all:1.11.2": { "id": "installedPackage-unattended-upgrades:all:1.11.2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.11.2", "packageName": "unattended-upgrades" } }, "createTime": "2024-04-08T17:39:06.556236Z" }, "installedPackage-gnupg-l10n:all:2.2.12-1+deb10u2": { "id": "installedPackage-gnupg-l10n:all:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.2.12-1+deb10u2", "packageName": "gnupg-l10n" } }, "createTime": "2024-04-08T17:39:06.556085Z" }, "installedPackage-libpipeline1:x86_64:1.5.1-2": { "id": "installedPackage-libpipeline1:x86_64:1.5.1-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.5.1-2", "packageName": "libpipeline1" } }, "createTime": "2024-04-08T17:39:06.556177Z" }, "installedPackage-exim4-base:x86_64:4.92-8+deb10u9": { "id": "installedPackage-exim4-base:x86_64:4.92-8+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.92-8+deb10u9", "packageName": "exim4-base" } }, "createTime": "2024-04-08T17:39:06.556079Z" }, "installedPackage-python3-minimal:x86_64:3.7.3-1": { "id": "installedPackage-python3-minimal:x86_64:3.7.3-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-1", "packageName": "python3-minimal" } }, "createTime": "2024-04-08T17:39:06.556221Z" }, "installedPackage-libmagic-mgc:x86_64:1:5.35-4+deb10u2": { "id": "installedPackage-libmagic-mgc:x86_64:1:5.35-4+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:5.35-4+deb10u2", "packageName": "libmagic-mgc" } }, "createTime": "2024-04-08T17:39:06.556159Z" }, "installedPackage-python3-reportbug:all:7.5.3~deb10u2": { "id": "installedPackage-python3-reportbug:all:7.5.3~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "7.5.3~deb10u2", "packageName": "python3-reportbug" } }, "createTime": "2024-04-08T17:39:06.556223Z" }, "installedPackage-reportbug:all:7.5.3~deb10u2": { "id": "installedPackage-reportbug:all:7.5.3~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "7.5.3~deb10u2", "packageName": "reportbug" } }, "createTime": "2024-04-08T17:39:06.556226Z" }, "installedPackage-libkeyutils1:x86_64:1.6-6": { "id": "installedPackage-libkeyutils1:x86_64:1.6-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.6-6", "packageName": "libkeyutils1" } }, "createTime": "2024-04-08T17:39:06.556152Z" }, "installedPackage-libpam-systemd:x86_64:241-7~deb10u10": { "id": "installedPackage-libpam-systemd:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "libpam-systemd" } }, "createTime": "2024-04-08T17:39:06.556174Z" }, "installedPackage-mount:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-mount:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "mount" } }, "createTime": "2024-04-08T17:39:06.556204Z" }, "installedPackage-bash-completion:all:1:2.8-6": { "id": "installedPackage-bash-completion:all:1:2.8-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:2.8-6", "packageName": "bash-completion" } }, "createTime": "2024-04-08T17:39:06.556064Z" }, "installedPackage-libpam-modules-bin:x86_64:1.3.1-5": { "id": "installedPackage-libpam-modules-bin:x86_64:1.3.1-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.1-5", "packageName": "libpam-modules-bin" } }, "createTime": "2024-04-08T17:39:06.556173Z" }, "installedPackage-exim4-config:all:4.92-8+deb10u9": { "id": "installedPackage-exim4-config:all:4.92-8+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "4.92-8+deb10u9", "packageName": "exim4-config" } }, "createTime": "2024-04-08T17:39:06.556079Z" }, "installedPackage-libuchardet0:x86_64:0.0.6-3": { "id": "installedPackage-libuchardet0:x86_64:0.0.6-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.0.6-3", "packageName": "libuchardet0" } }, "createTime": "2024-04-08T17:39:06.556193Z" }, "installedPackage-libxml2:x86_64:2.9.4+dfsg1-7+deb10u6": { "id": "installedPackage-libxml2:x86_64:2.9.4+dfsg1-7+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.9.4+dfsg1-7+deb10u6", "packageName": "libxml2" } }, "createTime": "2024-04-08T17:39:06.556196Z" }, "installedPackage-libpopt0:x86_64:1.16-12": { "id": "installedPackage-libpopt0:x86_64:1.16-12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.16-12", "packageName": "libpopt0" } }, "createTime": "2024-04-08T17:39:06.556178Z" }, "installedPackage-libkyotocabinet16v5:x86_64:1.2.76-4.2+b1": { "id": "installedPackage-libkyotocabinet16v5:x86_64:1.2.76-4.2+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.2.76-4.2+b1", "packageName": "libkyotocabinet16v5" } }, "createTime": "2024-04-08T17:39:06.556154Z" }, "installedPackage-whiptail:x86_64:0.52.20-8": { "id": "installedPackage-whiptail:x86_64:0.52.20-8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.52.20-8", "packageName": "whiptail" } }, "createTime": "2024-04-08T17:39:06.556240Z" }, "installedPackage-libnewt0.52:x86_64:0.52.20-8": { "id": "installedPackage-libnewt0.52:x86_64:0.52.20-8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.52.20-8", "packageName": "libnewt0.52" } }, "createTime": "2024-04-08T17:39:06.556165Z" }, "installedPackage-libgc1c2:x86_64:1:7.6.4-0.4": { "id": "installedPackage-libgc1c2:x86_64:1:7.6.4-0.4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:7.6.4-0.4", "packageName": "libgc1c2" } }, "createTime": "2024-04-08T17:39:06.556138Z" }, "installedPackage-libpcre2-8-0:x86_64:10.32-5+deb10u1": { "id": "installedPackage-libpcre2-8-0:x86_64:10.32-5+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "10.32-5+deb10u1", "packageName": "libpcre2-8-0" } }, "createTime": "2024-04-08T17:39:06.556176Z" }, "installedPackage-ncurses-bin:x86_64:6.1+20181013-2+deb10u5": { "id": "installedPackage-ncurses-bin:x86_64:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "6.1+20181013-2+deb10u5", "packageName": "ncurses-bin" } }, "createTime": "2024-04-08T17:39:06.556206Z" }, "installedPackage-screen:x86_64:4.6.2-3+deb10u1": { "id": "installedPackage-screen:x86_64:4.6.2-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.6.2-3+deb10u1", "packageName": "screen" } }, "createTime": "2024-04-08T17:39:06.556227Z" }, "installedPackage-libbz2-1.0:x86_64:1.0.6-9.2~deb10u2": { "id": "installedPackage-libbz2-1.0:x86_64:1.0.6-9.2~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.6-9.2~deb10u2", "packageName": "libbz2-1.0" } }, "createTime": "2024-04-08T17:39:06.556123Z" }, "installedPackage-libsmartcols1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libsmartcols1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libsmartcols1" } }, "createTime": "2024-04-08T17:39:06.556189Z" }, "installedPackage-dpkg:x86_64:1.19.8": { "id": "installedPackage-dpkg:x86_64:1.19.8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.19.8", "packageName": "dpkg" } }, "createTime": "2024-04-08T17:39:06.556077Z" }, "installedPackage-systemd:x86_64:241-7~deb10u10": { "id": "installedPackage-systemd:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "systemd" } }, "createTime": "2024-04-08T17:39:06.556231Z" }, "installedPackage-liblwres161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-liblwres161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "liblwres161" } }, "createTime": "2024-04-08T17:39:06.556158Z" }, "installedPackage-python3-pycurl:x86_64:7.43.0.2-0.1": { "id": "installedPackage-python3-pycurl:x86_64:7.43.0.2-0.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.43.0.2-0.1", "packageName": "python3-pycurl" } }, "createTime": "2024-04-08T17:39:06.556222Z" }, "installedPackage-debian-archive-keyring:all:2019.1+deb10u2": { "id": "installedPackage-debian-archive-keyring:all:2019.1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2019.1+deb10u2", "packageName": "debian-archive-keyring" } }, "createTime": "2024-04-08T17:39:06.556073Z" }, "installedPackage-man-db:x86_64:2.8.5-2+deb10u1": { "id": "installedPackage-man-db:x86_64:2.8.5-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.8.5-2+deb10u1", "packageName": "man-db" } }, "createTime": "2024-04-08T17:39:06.556202Z" }, "installedPackage-tzdata:all:2021a-0+deb10u12": { "id": "installedPackage-tzdata:all:2021a-0+deb10u12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2021a-0+deb10u12", "packageName": "tzdata" } }, "createTime": "2024-04-08T17:39:06.556235Z" }, "installedPackage-vim-runtime:all:2:8.1.0875-5+deb10u6": { "id": "installedPackage-vim-runtime:all:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2:8.1.0875-5+deb10u6", "packageName": "vim-runtime" } }, "createTime": "2024-04-08T17:39:06.556239Z" }, "installedPackage-python3-httplib2:all:0.11.3-2": { "id": "installedPackage-python3-httplib2:all:0.11.3-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.11.3-2", "packageName": "python3-httplib2" } }, "createTime": "2024-04-08T17:39:06.556220Z" }, "installedPackage-libldap-2.4-2:x86_64:2.4.47+dfsg-3+deb10u7": { "id": "installedPackage-libldap-2.4-2:x86_64:2.4.47+dfsg-3+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.4.47+dfsg-3+deb10u7", "packageName": "libldap-2.4-2" } }, "createTime": "2024-04-08T17:39:06.556155Z" }, "installedPackage-groff-base:x86_64:1.22.4-3+deb10u1": { "id": "installedPackage-groff-base:x86_64:1.22.4-3+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.22.4-3+deb10u1", "packageName": "groff-base" } }, "createTime": "2024-04-08T17:39:06.556095Z" }, "installedPackage-libisccc161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-libisccc161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "libisccc161" } }, "createTime": "2024-04-08T17:39:06.556149Z" }, "installedPackage-netbase:all:5.6": { "id": "installedPackage-netbase:all:5.6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "5.6", "packageName": "netbase" } }, "createTime": "2024-04-08T17:39:06.556207Z" }, "installedPackage-python3-urllib3:all:1.24.1-1+deb10u2": { "id": "installedPackage-python3-urllib3:all:1.24.1-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.24.1-1+deb10u2", "packageName": "python3-urllib3" } }, "createTime": "2024-04-08T17:39:06.556224Z" }, "installedPackage-libbind9-161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-libbind9-161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "libbind9-161" } }, "createTime": "2024-04-08T17:39:06.556121Z" }, "installedPackage-python3.7-minimal:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-python3.7-minimal:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "python3.7-minimal" } }, "createTime": "2024-04-08T17:39:06.556225Z" }, "installedPackage-psmisc:x86_64:23.2-1+deb10u1": { "id": "installedPackage-psmisc:x86_64:23.2-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "23.2-1+deb10u1", "packageName": "psmisc" } }, "createTime": "2024-04-08T17:39:06.556213Z" }, "installedPackage-liblmdb0:x86_64:0.9.22-1": { "id": "installedPackage-liblmdb0:x86_64:0.9.22-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.9.22-1", "packageName": "liblmdb0" } }, "createTime": "2024-04-08T17:39:06.556156Z" }, "installedPackage-liblzo2-2:x86_64:2.10-0.1": { "id": "installedPackage-liblzo2-2:x86_64:2.10-0.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.10-0.1", "packageName": "liblzo2-2" } }, "createTime": "2024-04-08T17:39:06.556159Z" }, "installedPackage-libaudit-common:all:1:2.8.4-3": { "id": "installedPackage-libaudit-common:all:1:2.8.4-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:2.8.4-3", "packageName": "libaudit-common" } }, "createTime": "2024-04-08T17:39:06.556113Z" }, "installedPackage-iputils-ping:x86_64:3:20180629-2+deb10u2": { "id": "installedPackage-iputils-ping:x86_64:3:20180629-2+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3:20180629-2+deb10u2", "packageName": "iputils-ping" } }, "createTime": "2024-04-08T17:39:06.556104Z" }, "installedPackage-libssl1.1:x86_64:1.1.1n-0+deb10u6": { "id": "installedPackage-libssl1.1:x86_64:1.1.1n-0+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.1n-0+deb10u6", "packageName": "libssl1.1" } }, "createTime": "2024-04-08T17:39:06.556190Z" }, "installedPackage-python-apt-common:all:1.8.4.3": { "id": "installedPackage-python-apt-common:all:1.8.4.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.8.4.3", "packageName": "python-apt-common" } }, "createTime": "2024-04-08T17:39:06.556214Z" }, "installedPackage-libstdc++6:x86_64:8.3.0-6": { "id": "installedPackage-libstdc++6:x86_64:8.3.0-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "8.3.0-6", "packageName": "libstdc++6" } }, "createTime": "2024-04-08T17:39:06.556191Z" }, "installedPackage-traceroute:x86_64:1:2.1.0-2": { "id": "installedPackage-traceroute:x86_64:1:2.1.0-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.1.0-2", "packageName": "traceroute" } }, "createTime": "2024-04-08T17:39:06.556234Z" }, "installedPackage-openssh-client:x86_64:1:7.9p1-10+deb10u4": { "id": "installedPackage-openssh-client:x86_64:1:7.9p1-10+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:7.9p1-10+deb10u4", "packageName": "openssh-client" } }, "createTime": "2024-04-08T17:39:06.556208Z" }, "installedPackage-cron:x86_64:3.0pl1-134+deb10u1": { "id": "installedPackage-cron:x86_64:3.0pl1-134+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.0pl1-134+deb10u1", "packageName": "cron" } }, "createTime": "2024-04-08T17:39:06.556070Z" }, "installedPackage-gce-disk-expand:all:1:20200716.00-g1": { "id": "installedPackage-gce-disk-expand:all:1:20200716.00-g1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:20200716.00-g1", "packageName": "gce-disk-expand" } }, "createTime": "2024-04-08T17:39:06.556082Z" }, "installedPackage-libffi6:x86_64:3.2.1-9": { "id": "installedPackage-libffi6:x86_64:3.2.1-9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2.1-9", "packageName": "libffi6" } }, "createTime": "2024-04-08T17:39:06.556136Z" }, "installedPackage-liblz4-1:x86_64:1.8.3-1+deb10u1": { "id": "installedPackage-liblz4-1:x86_64:1.8.3-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.3-1+deb10u1", "packageName": "liblz4-1" } }, "createTime": "2024-04-08T17:39:06.556158Z" }, "installedPackage-libgnutls30:x86_64:3.6.7-4+deb10u12": { "id": "installedPackage-libgnutls30:x86_64:3.6.7-4+deb10u12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.6.7-4+deb10u12", "packageName": "libgnutls30" } }, "createTime": "2024-04-08T17:39:06.556142Z" }, "installedPackage-parted:x86_64:3.2-25": { "id": "installedPackage-parted:x86_64:3.2-25", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2-25", "packageName": "parted" } }, "createTime": "2024-04-08T17:39:06.556211Z" }, "installedPackage-rsyslog:x86_64:8.1901.0-1+deb10u2": { "id": "installedPackage-rsyslog:x86_64:8.1901.0-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "8.1901.0-1+deb10u2", "packageName": "rsyslog" } }, "createTime": "2024-04-08T17:39:06.556227Z" }, "installedPackage-libsystemd0:x86_64:241-7~deb10u10": { "id": "installedPackage-libsystemd0:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "libsystemd0" } }, "createTime": "2024-04-08T17:39:06.556191Z" }, "installedPackage-python3-dbus:x86_64:1.2.8-3": { "id": "installedPackage-python3-dbus:x86_64:1.2.8-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.2.8-3", "packageName": "python3-dbus" } }, "createTime": "2024-04-08T17:39:06.556217Z" }, "installedPackage-python3-idna:all:2.6-1": { "id": "installedPackage-python3-idna:all:2.6-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.6-1", "packageName": "python3-idna" } }, "createTime": "2024-04-08T17:39:06.556220Z" }, "installedPackage-libgnutls-dane0:x86_64:3.6.7-4+deb10u12": { "id": "installedPackage-libgnutls-dane0:x86_64:3.6.7-4+deb10u12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.6.7-4+deb10u12", "packageName": "libgnutls-dane0" } }, "createTime": "2024-04-08T17:39:06.556141Z" }, "installedPackage-libsasl2-modules-db:x86_64:2.1.27+dfsg-1+deb10u2": { "id": "installedPackage-libsasl2-modules-db:x86_64:2.1.27+dfsg-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.27+dfsg-1+deb10u2", "packageName": "libsasl2-modules-db" } }, "createTime": "2024-04-08T17:39:06.556185Z" }, "installedPackage-libisccfg163:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-libisccfg163:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "libisccfg163" } }, "createTime": "2024-04-08T17:39:06.556150Z" }, "installedPackage-adduser:all:3.118": { "id": "installedPackage-adduser:all:3.118", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.118", "packageName": "adduser" } }, "createTime": "2024-04-08T17:39:06.556057Z" }, "installedPackage-init-system-helpers:all:1.56+nmu1": { "id": "installedPackage-init-system-helpers:all:1.56+nmu1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.56+nmu1", "packageName": "init-system-helpers" } }, "createTime": "2024-04-08T17:39:06.556101Z" }, "installedPackage-gettext-base:x86_64:0.19.8.1-9": { "id": "installedPackage-gettext-base:x86_64:0.19.8.1-9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.19.8.1-9", "packageName": "gettext-base" } }, "createTime": "2024-04-08T17:39:06.556083Z" }, "installedPackage-libefivar1:x86_64:37-2+deb10u1": { "id": "installedPackage-libefivar1:x86_64:37-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "37-2+deb10u1", "packageName": "libefivar1" } }, "createTime": "2024-04-08T17:39:06.556131Z" }, "installedPackage-libjson-c3:x86_64:0.12.1+ds-2+deb10u1": { "id": "installedPackage-libjson-c3:x86_64:0.12.1+ds-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.12.1+ds-2+deb10u1", "packageName": "libjson-c3" } }, "createTime": "2024-04-08T17:39:06.556150Z" }, "installedPackage-linux-image-4.19.0-26-cloud-amd64:x86_64:4.19.304-1": { "id": "installedPackage-linux-image-4.19.0-26-cloud-amd64:x86_64:4.19.304-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.19.304-1", "packageName": "linux-image-4.19.0-26-cloud-amd64" } }, "createTime": "2024-04-08T17:39:06.556198Z" }, "installedPackage-debconf:all:1.5.71+deb10u1": { "id": "installedPackage-debconf:all:1.5.71+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.5.71+deb10u1", "packageName": "debconf" } }, "createTime": "2024-04-08T17:39:06.556073Z" }, "installedPackage-libk5crypto3:x86_64:1.17-3+deb10u6": { "id": "installedPackage-libk5crypto3:x86_64:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.17-3+deb10u6", "packageName": "libk5crypto3" } }, "createTime": "2024-04-08T17:39:06.556151Z" }, "installedPackage-libevent-2.1-6:x86_64:2.1.8-stable-4": { "id": "installedPackage-libevent-2.1-6:x86_64:2.1.8-stable-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.8-stable-4", "packageName": "libevent-2.1-6" } }, "createTime": "2024-04-08T17:39:06.556133Z" }, "installedPackage-apt:x86_64:1.8.2.3": { "id": "installedPackage-apt:x86_64:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2.3", "packageName": "apt" } }, "createTime": "2024-04-08T17:39:06.556059Z" }, "installedPackage-dbus:x86_64:1.12.28-0+deb10u1": { "id": "installedPackage-dbus:x86_64:1.12.28-0+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.12.28-0+deb10u1", "packageName": "dbus" } }, "createTime": "2024-04-08T17:39:06.556071Z" }, "installedPackage-libgdbm6:x86_64:1.18.1-4": { "id": "installedPackage-libgdbm6:x86_64:1.18.1-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.18.1-4", "packageName": "libgdbm6" } }, "createTime": "2024-04-08T17:39:06.556139Z" }, "installedPackage-util-linux:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-util-linux:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "util-linux" } }, "createTime": "2024-04-08T17:39:06.556237Z" }, "installedPackage-libgssapi-krb5-2:x86_64:1.17-3+deb10u6": { "id": "installedPackage-libgssapi-krb5-2:x86_64:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.17-3+deb10u6", "packageName": "libgssapi-krb5-2" } }, "createTime": "2024-04-08T17:39:06.556144Z" }, "installedPackage-libncursesw6:x86_64:6.1+20181013-2+deb10u5": { "id": "installedPackage-libncursesw6:x86_64:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "6.1+20181013-2+deb10u5", "packageName": "libncursesw6" } }, "createTime": "2024-04-08T17:39:06.556163Z" }, "installedPackage-os-prober:x86_64:1.77": { "id": "installedPackage-os-prober:x86_64:1.77", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.77", "packageName": "os-prober" } }, "createTime": "2024-04-08T17:39:06.556210Z" }, "installedPackage-libdns-export1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-libdns-export1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "libdns-export1104" } }, "createTime": "2024-04-08T17:39:06.556129Z" }, "installedPackage-sysvinit-utils:x86_64:2.93-8": { "id": "installedPackage-sysvinit-utils:x86_64:2.93-8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.93-8", "packageName": "sysvinit-utils" } }, "createTime": "2024-04-08T17:39:06.556233Z" }, "installedPackage-libdb5.3:x86_64:5.3.28+dfsg1-0.5": { "id": "installedPackage-libdb5.3:x86_64:5.3.28+dfsg1-0.5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.3.28+dfsg1-0.5", "packageName": "libdb5.3" } }, "createTime": "2024-04-08T17:39:06.556127Z" }, "installedPackage-libatm1:x86_64:1:2.5.1-2": { "id": "installedPackage-libatm1:x86_64:1:2.5.1-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.5.1-2", "packageName": "libatm1" } }, "createTime": "2024-04-08T17:39:06.556112Z" }, "installedPackage-linux-image-cloud-amd64:x86_64:4.19+105+deb10u21": { "id": "installedPackage-linux-image-cloud-amd64:x86_64:4.19+105+deb10u21", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.19+105+deb10u21", "packageName": "linux-image-cloud-amd64" } }, "createTime": "2024-04-08T17:39:06.556199Z" }, "installedPackage-logrotate:x86_64:3.14.0-4": { "id": "installedPackage-logrotate:x86_64:3.14.0-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.14.0-4", "packageName": "logrotate" } }, "createTime": "2024-04-08T17:39:06.556199Z" }, "installedPackage-udev:x86_64:241-7~deb10u10": { "id": "installedPackage-udev:x86_64:241-7~deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "241-7~deb10u10", "packageName": "udev" } }, "createTime": "2024-04-08T17:39:06.556236Z" }, "installedPackage-libcryptsetup12:x86_64:2:2.1.0-5+deb10u2": { "id": "installedPackage-libcryptsetup12:x86_64:2:2.1.0-5+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:2.1.0-5+deb10u2", "packageName": "libcryptsetup12" } }, "createTime": "2024-04-08T17:39:06.556126Z" }, "installedPackage-initramfs-tools-core:all:0.133+deb10u1": { "id": "installedPackage-initramfs-tools-core:all:0.133+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.133+deb10u1", "packageName": "initramfs-tools-core" } }, "createTime": "2024-04-08T17:39:06.556102Z" }, "installedPackage-vim-tiny:x86_64:2:8.1.0875-5+deb10u6": { "id": "installedPackage-vim-tiny:x86_64:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:8.1.0875-5+deb10u6", "packageName": "vim-tiny" } }, "createTime": "2024-04-08T17:39:06.556239Z" }, "installedPackage-libslang2:x86_64:2.3.2-2": { "id": "installedPackage-libslang2:x86_64:2.3.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.3.2-2", "packageName": "libslang2" } }, "createTime": "2024-04-08T17:39:06.556188Z" }, "installedPackage-socat:x86_64:1.7.3.2-2": { "id": "installedPackage-socat:x86_64:1.7.3.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.7.3.2-2", "packageName": "socat" } }, "createTime": "2024-04-08T17:39:06.556230Z" }, "installedPackage-debianutils:x86_64:4.8.6.1": { "id": "installedPackage-debianutils:x86_64:4.8.6.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.8.6.1", "packageName": "debianutils" } }, "createTime": "2024-04-08T17:39:06.556074Z" }, "installedPackage-libxtables12:x86_64:1.8.2-4": { "id": "installedPackage-libxtables12:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "libxtables12" } }, "createTime": "2024-04-08T17:39:06.556196Z" }, "installedPackage-libpci3:x86_64:1:3.5.2-1": { "id": "installedPackage-libpci3:x86_64:1:3.5.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.5.2-1", "packageName": "libpci3" } }, "createTime": "2024-04-08T17:39:06.556176Z" }, "installedPackage-python3-requests:all:2.21.0-1+deb10u1": { "id": "installedPackage-python3-requests:all:2.21.0-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.21.0-1+deb10u1", "packageName": "python3-requests" } }, "createTime": "2024-04-08T17:39:06.556223Z" }, "installedPackage-libdns1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-libdns1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "libdns1104" } }, "createTime": "2024-04-08T17:39:06.556130Z" }, "installedPackage-shim-helpers-amd64-signed:x86_64:1+15.7+1~deb10u1": { "id": "installedPackage-shim-helpers-amd64-signed:x86_64:1+15.7+1~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1+15.7+1~deb10u1", "packageName": "shim-helpers-amd64-signed" } }, "createTime": "2024-04-08T17:39:06.556228Z" }, "installedPackage-wget:x86_64:1.20.1-1.1": { "id": "installedPackage-wget:x86_64:1.20.1-1.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.20.1-1.1", "packageName": "wget" } }, "createTime": "2024-04-08T17:39:06.556240Z" }, "installedPackage-gpg-wks-client:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpg-wks-client:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpg-wks-client" } }, "createTime": "2024-04-08T17:39:06.556092Z" }, "installedPackage-apparmor:x86_64:2.13.2-10": { "id": "installedPackage-apparmor:x86_64:2.13.2-10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.13.2-10", "packageName": "apparmor" } }, "createTime": "2024-04-08T17:39:06.556058Z" }, "installedPackage-libip6tc0:x86_64:1.8.2-4": { "id": "installedPackage-libip6tc0:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "libip6tc0" } }, "createTime": "2024-04-08T17:39:06.556147Z" }, "installedPackage-libkrb5support0:x86_64:1.17-3+deb10u6": { "id": "installedPackage-libkrb5support0:x86_64:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.17-3+deb10u6", "packageName": "libkrb5support0" } }, "createTime": "2024-04-08T17:39:06.556154Z" }, "installedPackage-libnetfilter-conntrack3:x86_64:1.0.7-1": { "id": "installedPackage-libnetfilter-conntrack3:x86_64:1.0.7-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.7-1", "packageName": "libnetfilter-conntrack3" } }, "createTime": "2024-04-08T17:39:06.556164Z" }, "installedPackage-ethtool:x86_64:1:4.19-1": { "id": "installedPackage-ethtool:x86_64:1:4.19-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:4.19-1", "packageName": "ethtool" } }, "createTime": "2024-04-08T17:39:06.556079Z" }, "installedPackage-libacl1:x86_64:2.2.53-4": { "id": "installedPackage-libacl1:x86_64:2.2.53-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.53-4", "packageName": "libacl1" } }, "createTime": "2024-04-08T17:39:06.556107Z" }, "installedPackage-libpng16-16:x86_64:1.6.36-6": { "id": "installedPackage-libpng16-16:x86_64:1.6.36-6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.6.36-6", "packageName": "libpng16-16" } }, "createTime": "2024-04-08T17:39:06.556178Z" }, "installedPackage-libpam0g:x86_64:1.3.1-5": { "id": "installedPackage-libpam0g:x86_64:1.3.1-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.1-5", "packageName": "libpam0g" } }, "createTime": "2024-04-08T17:39:06.556174Z" }, "installedPackage-mailutils-common:all:1:3.5-4": { "id": "installedPackage-mailutils-common:all:1:3.5-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:3.5-4", "packageName": "mailutils-common" } }, "createTime": "2024-04-08T17:39:06.556201Z" }, "installedPackage-bind9-host:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-bind9-host:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "bind9-host" } }, "createTime": "2024-04-08T17:39:06.556065Z" }, "installedPackage-libefiboot1:x86_64:37-2+deb10u1": { "id": "installedPackage-libefiboot1:x86_64:37-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "37-2+deb10u1", "packageName": "libefiboot1" } }, "createTime": "2024-04-08T17:39:06.556131Z" }, "installedPackage-apt-transport-https:all:1.8.2.3": { "id": "installedPackage-apt-transport-https:all:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.8.2.3", "packageName": "apt-transport-https" } }, "createTime": "2024-04-08T17:39:06.556061Z" }, "installedPackage-guile-2.2-libs:x86_64:2.2.4+1-2+deb10u1": { "id": "installedPackage-guile-2.2-libs:x86_64:2.2.4+1-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.4+1-2+deb10u1", "packageName": "guile-2.2-libs" } }, "createTime": "2024-04-08T17:39:06.556098Z" }, "installedPackage-libdevmapper1.02.1:x86_64:2:1.02.155-3": { "id": "installedPackage-libdevmapper1.02.1:x86_64:2:1.02.155-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:1.02.155-3", "packageName": "libdevmapper1.02.1" } }, "createTime": "2024-04-08T17:39:06.556129Z" }, "installedPackage-python3-six:all:1.12.0-1": { "id": "installedPackage-python3-six:all:1.12.0-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.12.0-1", "packageName": "python3-six" } }, "createTime": "2024-04-08T17:39:06.556224Z" }, "installedPackage-pciutils:x86_64:1:3.5.2-1": { "id": "installedPackage-pciutils:x86_64:1:3.5.2-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.5.2-1", "packageName": "pciutils" } }, "createTime": "2024-04-08T17:39:06.556212Z" }, "installedPackage-libpython3.7-stdlib:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-libpython3.7-stdlib:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "libpython3.7-stdlib" } }, "createTime": "2024-04-08T17:39:06.556182Z" }, "installedPackage-zlib1g:x86_64:1:1.2.11.dfsg-1+deb10u2": { "id": "installedPackage-zlib1g:x86_64:1:1.2.11.dfsg-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:1.2.11.dfsg-1+deb10u2", "packageName": "zlib1g" } }, "createTime": "2024-04-08T17:39:06.556242Z" }, "installedPackage-grub-efi-amd64-bin:x86_64:2.06-3~deb10u4": { "id": "installedPackage-grub-efi-amd64-bin:x86_64:2.06-3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.06-3~deb10u4", "packageName": "grub-efi-amd64-bin" } }, "createTime": "2024-04-08T17:39:06.556096Z" }, "installedPackage-gnupg:all:2.2.12-1+deb10u2": { "id": "installedPackage-gnupg:all:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "2.2.12-1+deb10u2", "packageName": "gnupg" } }, "createTime": "2024-04-08T17:39:06.556084Z" }, "installedPackage-libmpdec2:x86_64:2.4.2-2": { "id": "installedPackage-libmpdec2:x86_64:2.4.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.4.2-2", "packageName": "libmpdec2" } }, "createTime": "2024-04-08T17:39:06.556162Z" }, "installedPackage-libutempter0:x86_64:1.1.6-3": { "id": "installedPackage-libutempter0:x86_64:1.1.6-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.6-3", "packageName": "libutempter0" } }, "createTime": "2024-04-08T17:39:06.556195Z" }, "installedPackage-diffutils:x86_64:1:3.7-3": { "id": "installedPackage-diffutils:x86_64:1:3.7-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.7-3", "packageName": "diffutils" } }, "createTime": "2024-04-08T17:39:06.556074Z" }, "installedPackage-manpages:all:4.16-2": { "id": "installedPackage-manpages:all:4.16-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "4.16-2", "packageName": "manpages" } }, "createTime": "2024-04-08T17:39:06.556202Z" }, "installedPackage-libip4tc0:x86_64:1.8.2-4": { "id": "installedPackage-libip4tc0:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "libip4tc0" } }, "createTime": "2024-04-08T17:39:06.556147Z" }, "installedPackage-libcom-err2:x86_64:1.44.5-1+deb10u3": { "id": "installedPackage-libcom-err2:x86_64:1.44.5-1+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.44.5-1+deb10u3", "packageName": "libcom-err2" } }, "createTime": "2024-04-08T17:39:06.556125Z" }, "installedPackage-google-cloud-cli:x86_64:468.0.0-0": { "id": "installedPackage-google-cloud-cli:x86_64:468.0.0-0", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "468.0.0-0", "packageName": "google-cloud-cli" } }, "createTime": "2024-04-08T17:39:06.556087Z" }, "installedPackage-grub2-common:x86_64:2.06-3~deb10u4": { "id": "installedPackage-grub2-common:x86_64:2.06-3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.06-3~deb10u4", "packageName": "grub2-common" } }, "createTime": "2024-04-08T17:39:06.556098Z" }, "installedPackage-ca-certificates:all:20200601~deb10u2": { "id": "installedPackage-ca-certificates:all:20200601~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "20200601~deb10u2", "packageName": "ca-certificates" } }, "createTime": "2024-04-08T17:39:06.556068Z" }, "installedPackage-google-fluentd:x86_64:1.10.1-1": { "id": "installedPackage-google-fluentd:x86_64:1.10.1-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.10.1-1", "packageName": "google-fluentd" } }, "createTime": "2024-04-08T17:39:06.556089Z" }, "installedPackage-libnpth0:x86_64:1.6-1": { "id": "installedPackage-libnpth0:x86_64:1.6-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.6-1", "packageName": "libnpth0" } }, "createTime": "2024-04-08T17:39:06.556171Z" }, "installedPackage-mariadb-common:all:1:10.3.39-0+deb10u2": { "id": "installedPackage-mariadb-common:all:1:10.3.39-0+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:10.3.39-0+deb10u2", "packageName": "mariadb-common" } }, "createTime": "2024-04-08T17:39:06.556203Z" }, "installedPackage-liblzma5:x86_64:5.2.4-1+deb10u1": { "id": "installedPackage-liblzma5:x86_64:5.2.4-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.2.4-1+deb10u1", "packageName": "liblzma5" } }, "createTime": "2024-04-08T17:39:06.556158Z" }, "installedPackage-libnftnl11:x86_64:1.1.2-2": { "id": "installedPackage-libnftnl11:x86_64:1.1.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.2-2", "packageName": "libnftnl11" } }, "createTime": "2024-04-08T17:39:06.556166Z" }, "installedPackage-apt-utils:x86_64:1.8.2.3": { "id": "installedPackage-apt-utils:x86_64:1.8.2.3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2.3", "packageName": "apt-utils" } }, "createTime": "2024-04-08T17:39:06.556061Z" }, "installedPackage-libmailutils5:x86_64:1:3.5-4": { "id": "installedPackage-libmailutils5:x86_64:1:3.5-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:3.5-4", "packageName": "libmailutils5" } }, "createTime": "2024-04-08T17:39:06.556160Z" }, "installedPackage-libprocps7:x86_64:2:3.3.15-2": { "id": "installedPackage-libprocps7:x86_64:2:3.3.15-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:3.3.15-2", "packageName": "libprocps7" } }, "createTime": "2024-04-08T17:39:06.556178Z" }, "installedPackage-openssh-server:x86_64:1:7.9p1-10+deb10u4": { "id": "installedPackage-openssh-server:x86_64:1:7.9p1-10+deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:7.9p1-10+deb10u4", "packageName": "openssh-server" } }, "createTime": "2024-04-08T17:39:06.556209Z" }, "installedPackage-libsasl2-modules:x86_64:2.1.27+dfsg-1+deb10u2": { "id": "installedPackage-libsasl2-modules:x86_64:2.1.27+dfsg-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.1.27+dfsg-1+deb10u2", "packageName": "libsasl2-modules" } }, "createTime": "2024-04-08T17:39:06.556185Z" }, "installedPackage-tcpdump:x86_64:4.9.3-1~deb10u2": { "id": "installedPackage-tcpdump:x86_64:4.9.3-1~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.9.3-1~deb10u2", "packageName": "tcpdump" } }, "createTime": "2024-04-08T17:39:06.556234Z" }, "installedPackage-libparted2:x86_64:3.2-25": { "id": "installedPackage-libparted2:x86_64:3.2-25", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.2-25", "packageName": "libparted2" } }, "createTime": "2024-04-08T17:39:06.556175Z" }, "installedPackage-mysql-common:all:5.8+1.0.5": { "id": "installedPackage-mysql-common:all:5.8+1.0.5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "5.8+1.0.5", "packageName": "mysql-common" } }, "createTime": "2024-04-08T17:39:06.556205Z" }, "installedPackage-libfstrm0:x86_64:0.4.0-1": { "id": "installedPackage-libfstrm0:x86_64:0.4.0-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.4.0-1", "packageName": "libfstrm0" } }, "createTime": "2024-04-08T17:39:06.556137Z" }, "installedPackage-libzstd1:x86_64:1.3.8+dfsg-3+deb10u2": { "id": "installedPackage-libzstd1:x86_64:1.3.8+dfsg-3+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.8+dfsg-3+deb10u2", "packageName": "libzstd1" } }, "createTime": "2024-04-08T17:39:06.556197Z" }, "installedPackage-python3-chardet:all:3.0.4-3": { "id": "installedPackage-python3-chardet:all:3.0.4-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "3.0.4-3", "packageName": "python3-chardet" } }, "createTime": "2024-04-08T17:39:06.556216Z" }, "installedPackage-libedit2:x86_64:3.1-20181209-1": { "id": "installedPackage-libedit2:x86_64:3.1-20181209-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.1-20181209-1", "packageName": "libedit2" } }, "createTime": "2024-04-08T17:39:06.556130Z" }, "installedPackage-fdisk:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-fdisk:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "fdisk" } }, "createTime": "2024-04-08T17:39:06.556080Z" }, "installedPackage-libisc-export1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-libisc-export1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "libisc-export1100" } }, "createTime": "2024-04-08T17:39:06.556148Z" }, "installedPackage-bzip2:x86_64:1.0.6-9.2~deb10u2": { "id": "installedPackage-bzip2:x86_64:1.0.6-9.2~deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.0.6-9.2~deb10u2", "packageName": "bzip2" } }, "createTime": "2024-04-08T17:39:06.556067Z" }, "installedPackage-libgsasl7:x86_64:1.8.0-8+deb10u1": { "id": "installedPackage-libgsasl7:x86_64:1.8.0-8+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.0-8+deb10u1", "packageName": "libgsasl7" } }, "createTime": "2024-04-08T17:39:06.556143Z" }, "installedPackage-init:x86_64:1.56+nmu1": { "id": "installedPackage-init:x86_64:1.56+nmu1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.56+nmu1", "packageName": "init" } }, "createTime": "2024-04-08T17:39:06.556101Z" }, "installedPackage-libhavege1:x86_64:1.9.1-7": { "id": "installedPackage-libhavege1:x86_64:1.9.1-7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.9.1-7", "packageName": "libhavege1" } }, "createTime": "2024-04-08T17:39:06.556144Z" }, "installedPackage-net-tools:x86_64:1.60+git20180626.aebd88e-1": { "id": "installedPackage-net-tools:x86_64:1.60+git20180626.aebd88e-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.60+git20180626.aebd88e-1", "packageName": "net-tools" } }, "createTime": "2024-04-08T17:39:06.556207Z" }, "installedPackage-libpcre3:x86_64:2:8.39-12": { "id": "installedPackage-libpcre3:x86_64:2:8.39-12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:8.39-12", "packageName": "libpcre3" } }, "createTime": "2024-04-08T17:39:06.556177Z" }, "installedPackage-libntlm0:x86_64:1.5-1+deb10u1": { "id": "installedPackage-libntlm0:x86_64:1.5-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.5-1+deb10u1", "packageName": "libntlm0" } }, "createTime": "2024-04-08T17:39:06.556171Z" }, "installedPackage-lsb-base:all:10.2019051400": { "id": "installedPackage-lsb-base:all:10.2019051400", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "10.2019051400", "packageName": "lsb-base" } }, "createTime": "2024-04-08T17:39:06.556200Z" }, "installedPackage-libcurl3-gnutls:x86_64:7.64.0-4+deb10u9": { "id": "installedPackage-libcurl3-gnutls:x86_64:7.64.0-4+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.64.0-4+deb10u9", "packageName": "libcurl3-gnutls" } }, "createTime": "2024-04-08T17:39:06.556126Z" }, "installedPackage-liblognorm5:x86_64:2.0.5-1": { "id": "installedPackage-liblognorm5:x86_64:2.0.5-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.0.5-1", "packageName": "liblognorm5" } }, "createTime": "2024-04-08T17:39:06.556157Z" }, "installedPackage-haveged:x86_64:1.9.1-7": { "id": "installedPackage-haveged:x86_64:1.9.1-7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.9.1-7", "packageName": "haveged" } }, "createTime": "2024-04-08T17:39:06.556099Z" }, "installedPackage-libaudit1:x86_64:1:2.8.4-3": { "id": "installedPackage-libaudit1:x86_64:1:2.8.4-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.8.4-3", "packageName": "libaudit1" } }, "createTime": "2024-04-08T17:39:06.556121Z" }, "installedPackage-python3.7:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-python3.7:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "python3.7" } }, "createTime": "2024-04-08T17:39:06.556225Z" }, "installedPackage-libcurl4:x86_64:7.64.0-4+deb10u9": { "id": "installedPackage-libcurl4:x86_64:7.64.0-4+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.64.0-4+deb10u9", "packageName": "libcurl4" } }, "createTime": "2024-04-08T17:39:06.556127Z" }, "installedPackage-libselinux1:x86_64:2.8-1+b1": { "id": "installedPackage-libselinux1:x86_64:2.8-1+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.8-1+b1", "packageName": "libselinux1" } }, "createTime": "2024-04-08T17:39:06.556186Z" }, "installedPackage-readline-common:all:7.0-5": { "id": "installedPackage-readline-common:all:7.0-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "7.0-5", "packageName": "readline-common" } }, "createTime": "2024-04-08T17:39:06.556226Z" }, "installedPackage-sensible-utils:all:0.0.12": { "id": "installedPackage-sensible-utils:all:0.0.12", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.0.12", "packageName": "sensible-utils" } }, "createTime": "2024-04-08T17:39:06.556228Z" }, "installedPackage-isc-dhcp-client:x86_64:4.4.1-2+deb10u3": { "id": "installedPackage-isc-dhcp-client:x86_64:4.4.1-2+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.4.1-2+deb10u3", "packageName": "isc-dhcp-client" } }, "createTime": "2024-04-08T17:39:06.556105Z" }, "installedPackage-xxd:x86_64:2:8.1.0875-5+deb10u6": { "id": "installedPackage-xxd:x86_64:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:8.1.0875-5+deb10u6", "packageName": "xxd" } }, "createTime": "2024-04-08T17:39:06.556241Z" }, "installedPackage-libpython3.7-minimal:x86_64:3.7.3-2+deb10u7": { "id": "installedPackage-libpython3.7-minimal:x86_64:3.7.3-2+deb10u7", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-2+deb10u7", "packageName": "libpython3.7-minimal" } }, "createTime": "2024-04-08T17:39:06.556182Z" }, "availablePackage-google-cloud-packages-archive-keyring:all:1.2-622881512": { "id": "availablePackage-google-cloud-packages-archive-keyring:all:1.2-622881512", "originType": "INVENTORY_REPORT", "type": "AVAILABLE_PACKAGE", "availablePackage": { "aptPackage": { "architecture": "all", "version": "1.2-622881512", "packageName": "google-cloud-packages-archive-keyring" } }, "createTime": "2024-04-08T17:39:06.556051Z" }, "installedPackage-file:x86_64:1:5.35-4+deb10u2": { "id": "installedPackage-file:x86_64:1:5.35-4+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:5.35-4+deb10u2", "packageName": "file" } }, "createTime": "2024-04-08T17:39:06.556081Z" }, "installedPackage-libcap2-bin:x86_64:1:2.25-2": { "id": "installedPackage-libcap2-bin:x86_64:1:2.25-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:2.25-2", "packageName": "libcap2-bin" } }, "createTime": "2024-04-08T17:39:06.556125Z" }, "installedPackage-libsemanage1:x86_64:2.8-2": { "id": "installedPackage-libsemanage1:x86_64:2.8-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.8-2", "packageName": "libsemanage1" } }, "createTime": "2024-04-08T17:39:06.556187Z" }, "installedPackage-efibootmgr:x86_64:15-1": { "id": "installedPackage-efibootmgr:x86_64:15-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "15-1", "packageName": "efibootmgr" } }, "createTime": "2024-04-08T17:39:06.556078Z" }, "installedPackage-google-compute-engine:all:1:20240307.00-g1": { "id": "installedPackage-google-compute-engine:all:1:20240307.00-g1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1:20240307.00-g1", "packageName": "google-compute-engine" } }, "createTime": "2024-04-08T17:39:06.556088Z" }, "installedPackage-grub-efi-amd64-signed:x86_64:1+2.06+3~deb10u4": { "id": "installedPackage-grub-efi-amd64-signed:x86_64:1+2.06+3~deb10u4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1+2.06+3~deb10u4", "packageName": "grub-efi-amd64-signed" } }, "createTime": "2024-04-08T17:39:06.556097Z" }, "installedPackage-libfastjson4:x86_64:0.99.8-2+deb10u1": { "id": "installedPackage-libfastjson4:x86_64:0.99.8-2+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.99.8-2+deb10u1", "packageName": "libfastjson4" } }, "createTime": "2024-04-08T17:39:06.556135Z" }, "installedPackage-libelf1:x86_64:0.176-1.1+deb10u1": { "id": "installedPackage-libelf1:x86_64:0.176-1.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.176-1.1+deb10u1", "packageName": "libelf1" } }, "createTime": "2024-04-08T17:39:06.556132Z" }, "installedPackage-klibc-utils:x86_64:2.0.6-1+deb10u1": { "id": "installedPackage-klibc-utils:x86_64:2.0.6-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.0.6-1+deb10u1", "packageName": "klibc-utils" } }, "createTime": "2024-04-08T17:39:06.556106Z" }, "installedPackage-passwd:x86_64:1:4.5-1.1": { "id": "installedPackage-passwd:x86_64:1:4.5-1.1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:4.5-1.1", "packageName": "passwd" } }, "createTime": "2024-04-08T17:39:06.556211Z" }, "installedPackage-google-guest-agent:x86_64:1:20240109.00-g1": { "id": "installedPackage-google-guest-agent:x86_64:1:20240109.00-g1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20240109.00-g1", "packageName": "google-guest-agent" } }, "createTime": "2024-04-08T17:39:06.556090Z" }, "installedPackage-isc-dhcp-common:x86_64:4.4.1-2+deb10u3": { "id": "installedPackage-isc-dhcp-common:x86_64:4.4.1-2+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.4.1-2+deb10u3", "packageName": "isc-dhcp-common" } }, "createTime": "2024-04-08T17:39:06.556105Z" }, "installedPackage-gpg:x86_64:2.2.12-1+deb10u2": { "id": "installedPackage-gpg:x86_64:2.2.12-1+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.2.12-1+deb10u2", "packageName": "gpg" } }, "createTime": "2024-04-08T17:39:06.556091Z" }, "installedPackage-iptables:x86_64:1.8.2-4": { "id": "installedPackage-iptables:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "iptables" } }, "createTime": "2024-04-08T17:39:06.556104Z" }, "installedPackage-krb5-locales:all:1.17-3+deb10u6": { "id": "installedPackage-krb5-locales:all:1.17-3+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "1.17-3+deb10u6", "packageName": "krb5-locales" } }, "createTime": "2024-04-08T17:39:06.556107Z" }, "installedPackage-xz-utils:x86_64:5.2.4-1+deb10u1": { "id": "installedPackage-xz-utils:x86_64:5.2.4-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "5.2.4-1+deb10u1", "packageName": "xz-utils" } }, "createTime": "2024-04-08T17:39:06.556241Z" }, "installedPackage-ifupdown:x86_64:0.8.35": { "id": "installedPackage-ifupdown:x86_64:0.8.35", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.8.35", "packageName": "ifupdown" } }, "createTime": "2024-04-08T17:39:06.556100Z" }, "installedPackage-openssl:x86_64:1.1.1n-0+deb10u6": { "id": "installedPackage-openssl:x86_64:1.1.1n-0+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.1.1n-0+deb10u6", "packageName": "openssl" } }, "createTime": "2024-04-08T17:39:06.556210Z" }, "installedPackage-vim:x86_64:2:8.1.0875-5+deb10u6": { "id": "installedPackage-vim:x86_64:2:8.1.0875-5+deb10u6", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2:8.1.0875-5+deb10u6", "packageName": "vim" } }, "createTime": "2024-04-08T17:39:06.556238Z" }, "installedPackage-libglib2.0-0:x86_64:2.58.3-2+deb10u5": { "id": "installedPackage-libglib2.0-0:x86_64:2.58.3-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.58.3-2+deb10u5", "packageName": "libglib2.0-0" } }, "createTime": "2024-04-08T17:39:06.556140Z" }, "installedPackage-libklibc:x86_64:2.0.6-1+deb10u1": { "id": "installedPackage-libklibc:x86_64:2.0.6-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.0.6-1+deb10u1", "packageName": "libklibc" } }, "createTime": "2024-04-08T17:39:06.556152Z" }, "installedPackage-distro-info-data:all:0.41+deb10u8": { "id": "installedPackage-distro-info-data:all:0.41+deb10u8", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "0.41+deb10u8", "packageName": "distro-info-data" } }, "createTime": "2024-04-08T17:39:06.556075Z" }, "installedPackage-libdebconfclient0:x86_64:0.249": { "id": "installedPackage-libdebconfclient0:x86_64:0.249", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.249", "packageName": "libdebconfclient0" } }, "createTime": "2024-04-08T17:39:06.556128Z" }, "installedPackage-libapparmor1:x86_64:2.13.2-10": { "id": "installedPackage-libapparmor1:x86_64:2.13.2-10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.13.2-10", "packageName": "libapparmor1" } }, "createTime": "2024-04-08T17:39:06.556108Z" }, "installedPackage-libpython3-stdlib:x86_64:3.7.3-1": { "id": "installedPackage-libpython3-stdlib:x86_64:3.7.3-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.7.3-1", "packageName": "libpython3-stdlib" } }, "createTime": "2024-04-08T17:39:06.556181Z" }, "installedPackage-nvme-cli:x86_64:1.7-1": { "id": "installedPackage-nvme-cli:x86_64:1.7-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.7-1", "packageName": "nvme-cli" } }, "createTime": "2024-04-08T17:39:06.556208Z" }, "installedPackage-bsdmainutils:x86_64:11.1.2+b1": { "id": "installedPackage-bsdmainutils:x86_64:11.1.2+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "11.1.2+b1", "packageName": "bsdmainutils" } }, "createTime": "2024-04-08T17:39:06.556066Z" }, "installedPackage-libuuid1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libuuid1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libuuid1" } }, "createTime": "2024-04-08T17:39:06.556195Z" }, "installedPackage-curl:x86_64:7.64.0-4+deb10u9": { "id": "installedPackage-curl:x86_64:7.64.0-4+deb10u9", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.64.0-4+deb10u9", "packageName": "curl" } }, "createTime": "2024-04-08T17:39:06.556070Z" }, "installedPackage-base-files:x86_64:10.3+deb10u13": { "id": "installedPackage-base-files:x86_64:10.3+deb10u13", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "10.3+deb10u13", "packageName": "base-files" } }, "createTime": "2024-04-08T17:39:06.556062Z" }, "installedPackage-libss2:x86_64:1.44.5-1+deb10u3": { "id": "installedPackage-libss2:x86_64:1.44.5-1+deb10u3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.44.5-1+deb10u3", "packageName": "libss2" } }, "createTime": "2024-04-08T17:39:06.556190Z" }, "installedPackage-libtinfo6:x86_64:6.1+20181013-2+deb10u5": { "id": "installedPackage-libtinfo6:x86_64:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "6.1+20181013-2+deb10u5", "packageName": "libtinfo6" } }, "createTime": "2024-04-08T17:39:06.556192Z" }, "installedPackage-libreadline7:x86_64:7.0-5": { "id": "installedPackage-libreadline7:x86_64:7.0-5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "7.0-5", "packageName": "libreadline7" } }, "createTime": "2024-04-08T17:39:06.556183Z" }, "installedPackage-google-osconfig-agent:x86_64:1:20231207.01-g1": { "id": "installedPackage-google-osconfig-agent:x86_64:1:20231207.01-g1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:20231207.01-g1", "packageName": "google-osconfig-agent" } }, "createTime": "2024-04-08T17:39:06.556091Z" }, "installedPackage-mokutil:x86_64:0.6.0-2~deb10u1": { "id": "installedPackage-mokutil:x86_64:0.6.0-2~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.6.0-2~deb10u1", "packageName": "mokutil" } }, "createTime": "2024-04-08T17:39:06.556204Z" }, "installedPackage-libiptc0:x86_64:1.8.2-4": { "id": "installedPackage-libiptc0:x86_64:1.8.2-4", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.2-4", "packageName": "libiptc0" } }, "createTime": "2024-04-08T17:39:06.556148Z" }, "installedPackage-less:x86_64:487-0.1+b1": { "id": "installedPackage-less:x86_64:487-0.1+b1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "487-0.1+b1", "packageName": "less" } }, "createTime": "2024-04-08T17:39:06.556107Z" }, "installedPackage-libmount1:x86_64:2.33.1-0.1+deb10u1": { "id": "installedPackage-libmount1:x86_64:2.33.1-0.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.33.1-0.1+deb10u1", "packageName": "libmount1" } }, "createTime": "2024-04-08T17:39:06.556162Z" }, "installedPackage-coreutils:x86_64:8.30-3": { "id": "installedPackage-coreutils:x86_64:8.30-3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "8.30-3", "packageName": "coreutils" } }, "createTime": "2024-04-08T17:39:06.556069Z" }, "installedPackage-libsqlite3-0:x86_64:3.27.2-3+deb10u2": { "id": "installedPackage-libsqlite3-0:x86_64:3.27.2-3+deb10u2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.27.2-3+deb10u2", "packageName": "libsqlite3-0" } }, "createTime": "2024-04-08T17:39:06.556189Z" }, "installedPackage-mawk:x86_64:1.3.3-17+b3": { "id": "installedPackage-mawk:x86_64:1.3.3-17+b3", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.3.3-17+b3", "packageName": "mawk" } }, "createTime": "2024-04-08T17:39:06.556203Z" }, "installedPackage-base-passwd:x86_64:3.5.46": { "id": "installedPackage-base-passwd:x86_64:3.5.46", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "3.5.46", "packageName": "base-passwd" } }, "createTime": "2024-04-08T17:39:06.556062Z" }, "installedPackage-libisc1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10": { "id": "installedPackage-libisc1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1:9.11.5.P4+dfsg-5.1+deb10u10", "packageName": "libisc1100" } }, "createTime": "2024-04-08T17:39:06.556149Z" }, "installedPackage-libkmod2:x86_64:26-1": { "id": "installedPackage-libkmod2:x86_64:26-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "26-1", "packageName": "libkmod2" } }, "createTime": "2024-04-08T17:39:06.556153Z" }, "installedPackage-libfuse2:x86_64:2.9.9-1+deb10u1": { "id": "installedPackage-libfuse2:x86_64:2.9.9-1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.9.9-1+deb10u1", "packageName": "libfuse2" } }, "createTime": "2024-04-08T17:39:06.556137Z" }, "installedPackage-libpcap0.8:x86_64:1.8.1-6+deb10u1": { "id": "installedPackage-libpcap0.8:x86_64:1.8.1-6+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.1-6+deb10u1", "packageName": "libpcap0.8" } }, "createTime": "2024-04-08T17:39:06.556175Z" }, "installedPackage-libssh2-1:x86_64:1.8.0-2.1+deb10u1": { "id": "installedPackage-libssh2-1:x86_64:1.8.0-2.1+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "1.8.0-2.1+deb10u1", "packageName": "libssh2-1" } }, "createTime": "2024-04-08T17:39:06.556190Z" }, "installedPackage-python3-pkg-resources:all:40.8.0-1": { "id": "installedPackage-python3-pkg-resources:all:40.8.0-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "all", "version": "40.8.0-1", "packageName": "python3-pkg-resources" } }, "createTime": "2024-04-08T17:39:06.556221Z" }, "installedPackage-sed:x86_64:4.7-1": { "id": "installedPackage-sed:x86_64:4.7-1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "4.7-1", "packageName": "sed" } }, "createTime": "2024-04-08T17:39:06.556228Z" }, "installedPackage-cpio:x86_64:2.12+dfsg-9+deb10u1": { "id": "installedPackage-cpio:x86_64:2.12+dfsg-9+deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "2.12+dfsg-9+deb10u1", "packageName": "cpio" } }, "createTime": "2024-04-08T17:39:06.556069Z" }, "installedPackage-libncurses6:x86_64:6.1+20181013-2+deb10u5": { "id": "installedPackage-libncurses6:x86_64:6.1+20181013-2+deb10u5", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "6.1+20181013-2+deb10u5", "packageName": "libncurses6" } }, "createTime": "2024-04-08T17:39:06.556162Z" }, "installedPackage-libpsl5:x86_64:0.20.2-2": { "id": "installedPackage-libpsl5:x86_64:0.20.2-2", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "0.20.2-2", "packageName": "libpsl5" } }, "createTime": "2024-04-08T17:39:06.556179Z" }, "installedPackage-shim-unsigned:x86_64:15.7-1~deb10u1": { "id": "installedPackage-shim-unsigned:x86_64:15.7-1~deb10u1", "originType": "INVENTORY_REPORT", "type": "INSTALLED_PACKAGE", "installedPackage": { "aptPackage": { "architecture": "x86_64", "version": "15.7-1~deb10u1", "packageName": "shim-unsigned" } }, "createTime": "2024-04-08T17:39:06.556230Z" } }, "name": "projects/12340051/locations/us-central1-a/instances/5086889629880924895/inventory", "updateTime": "2024-04-08T20:49:06.619439Z" } ================================================ FILE: test-data/osconfig1/json-dumps/project.json ================================================ { "name": "projects/12340051", "parent": "folders/9839384", "projectId": "fake-project", "state": "ACTIVE", "displayName": "fake-project", "createTime": "2021-03-08T19:21:27.432Z", "updateTime": "2021-03-08T19:21:29.381Z", "etag": "W/\"862e160906ef825f\"" } ================================================ FILE: test-data/osconfig1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340051/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" is supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340051" }, { "name": "projects/12340051/services/osconfig.googleapis.com", "config": { "name": "osconfig.googleapis.com", "title": "OS Config API", "documentation": { "summary": "OS management tools that can be used for patch management, patch compliance, and configuration management on VM instances." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "osconfig.googleapis.com/PatchJob", "displayName": "Patch Job", "description": "A patch job ran by VM Manager.", "labels": [ { "key": "resource_container", "description": "The GCP project associated with the patch job." }, { "key": "location", "description": "The location that contains the patch job." }, { "key": "id", "description": "Id uniquely identifying the patch job." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "osconfig.googleapis.com/PatchJob", "metrics": [ "osconfig.googleapis.com/patch/job/instance_state" ] } ] } }, "state": "ENABLED", "parent": "projects/12340051" } ] } ================================================ FILE: test-data/osconfig1/project.tf ================================================ /** * Copyright 2024 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. */ locals { project_id = var.project_id } provider "google" { project = local.project_id region = "us-central1" zone = "us-central1-a" } terraform { required_providers { google = { source = "hashicorp/google" version = "= 3.46.0" } google-beta = { source = "hashicorp/google-beta" version = ">= 3.46.0" } } } resource "google_project_service" "osconfig" { project = local.project_id service = "osconfig.googleapis.com" } output "project_nr" { value = var.project_nr } output "org_id" { value = var.org_id } output "folder_id" { value = var.folder_id } output "project_id" { value = local.project_id } output "instance_name" { value = var.instance_name } ================================================ FILE: test-data/osconfig1/variables.tf ================================================ variable "org_id" {} variable "folder_id" {} variable "project_nr" {} variable "project_id" { } variable "instance_name" {} ================================================ FILE: test-data/pubsub1/Makefile ================================================ PROJECT_ID := $(shell terraform output project_id | sed -e 's|"||g') PROJECT_ID_SUFFIX := $(shell terraform output -json project_id_suffix) PROJECT_NR := $(shell terraform output -json project_nr | sed -e 's|"||g') ORG_ID := $(shell terraform output -json org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner TOPIC := $(shell terraform output -json topic | sed -e 's|"||g') SUBSCRIPTION := $(shell terraform output -json subscription | sed -e 's|"||g') BQ_SUBSCRIPTION := $(shell terraform output -json bqsubscription | sed -e 's|"||g') GCS_SUBSCRIPTION := $(shell terraform output -json gcs_subscription | sed -e 's|"||g') BUCKET_ID := $(shell terraform output -json gcs_subscription_bucket_name | sed -e 's|"||g') FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340014 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/topics.json \ json-dumps/topic-iam.json \ json-dumps/subscriptions.json \ json-dumps/pull-subscription.json \ json-dumps/bq-subscription.json \ json-dumps/gcs-subscription.json \ json-dumps/subscriptions-iam.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/monitoring-query.json \ json-dumps/bucket-roles.json json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/topics.json: $(CURL) -fv \ 'https://pubsub.googleapis.com/v1/projects/${PROJECT_ID}/topics' \ | $(SED_SUBST_FAKE) >$@ json-dumps/topic-iam.json: $(CURL) -fv \ 'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/topics/$(TOPIC):getIamPolicy' \ | $(SED_SUBST_FAKE) >$@ json-dumps/subscriptions.json: $(CURL) -fv \ 'https://pubsub.googleapis.com/v1/projects/${PROJECT_ID}/subscriptions' \ | $(SED_SUBST_FAKE) >$@ json-dumps/pull-subscription.json: $(CURL) -fv \ 'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/subscriptions/$(SUBSCRIPTION)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/bq-subscription.json: $(CURL) -fv \ 'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/subscriptions/$(BQ_SUBSCRIPTION)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/gcs-subscription.json: $(CURL) -fv \ 'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/subscriptions/$(GCS_SUBSCRIPTION)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/subscriptions-iam.json: $(CURL) -fv \ 'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/subscriptions/$(SUBSCRIPTION):getIamPolicy' \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-policy.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \ -X POST --header "Content-Type:text/json" \ -d "" \ | $(SED_SUBST_FAKE) >$@ json-dumps/iam-service-accounts.json: $(CURL) -fsS \ 'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \ | $(SED_SUBST_FAKE) >$@ define BQ_SUB_PUSH_REQUESTS_QUERY { \ "query": "fetch pubsub_subscription::pubsub.googleapis.com/subscription/push_request_count \ | filter resource.project_id == '"'"'$(PROJECT_ID)'"'"' && resource.subscription_id == '"'"'$(BQ_SUBSCRIPTION)'"'"'\ | within 10m \ | group_by [metric.response_class],[value_push_request_count_aggregate: aggregate(value.push_request_count)] \ | within 10m \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query'\ --header "Content-Type: application/json" -X POST \ --data '$(BQ_SUB_PUSH_REQUESTS_QUERY)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/bucket-roles.json: $(CURL) -fv \ 'https://storage.googleapis.com/storage/v1/b/${BUCKET_ID}/iam' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/pubsub1/json-dumps/bq-subscription.json ================================================ { "name": "projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1", "topic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1", "pushConfig": {}, "ackDeadlineSeconds": 10, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" }, "deadLetterPolicy": { "deadLetterTopic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-bqdlqtopic-9pm6hng1", "maxDeliveryAttempts": 5 }, "bigqueryConfig": { "table": "gcpdiag-pubsub1-aaaa.pubsub1_dataset.pubsub1_table", "state": "ACTIVE" }, "state": "ACTIVE" } ================================================ FILE: test-data/pubsub1/json-dumps/bucket-roles.json ================================================ { "kind": "storage#policy", "resourceId": "projects/_/buckets/pubsub1_bucket", "version": 1, "etag": "CAE=", "bindings": [ { "role": "roles/storage.legacyBucketOwner", "members": [ "projectEditor:gcpdiag-pubsub1-aaaa", "projectOwner:gcpdiag-pubsub1-aaaa" ] }, { "role": "roles/storage.legacyBucketReader", "members": [ "projectViewer:gcpdiag-pubsub1-aaaa" ] }, { "role": "roles/storage.legacyObjectOwner", "members": [ "projectEditor:gcpdiag-pubsub1-aaaa", "projectOwner:gcpdiag-pubsub1-aaaa" ] }, { "role": "roles/storage.legacyObjectReader", "members": [ "projectViewer:gcpdiag-pubsub1-aaaa" ] }, { "role": "roles/storage.admin", "members": [ "serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com" ] } ] } ================================================ FILE: test-data/pubsub1/json-dumps/gcs-subscription.json ================================================ { "name": "projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription3gcs-9pm6hng1", "topic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1", "pushConfig": {}, "ackDeadlineSeconds": 300, "messageRetentionDuration": "604800s", "labels": { "goog-terraform-provisioned": "true" }, "expirationPolicy": { "ttl": "2678400s" }, "deadLetterPolicy": { "deadLetterTopic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-gcsdlqtopic-9pm6hng1", "maxDeliveryAttempts": 5 }, "state": "ACTIVE", "cloudStorageConfig": { "bucket": "pubsub1_bucket", "textConfig": {}, "maxDuration": "300s", "maxBytes": "1000", "state": "ACTIVE" } } ================================================ FILE: test-data/pubsub1/json-dumps/iam-policy.json ================================================ { "version": 1, "etag": "BwYPm4/BKyY=", "bindings": [ { "role": "roles/bigquery.dataEditor", "members": [ "serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com" ] }, { "role": "roles/owner", "members": [ "user:dummymail@dummymail.com" ] }, { "role": "roles/pubsub.publisher", "members": [ "serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com" ] }, { "role": "roles/pubsub.serviceAgent", "members": [ "serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com" ] }, { "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com" ] }, { "role": "roles/storage.admin", "members": [ "serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com" ] }, { "role": "roles/websecurityscanner.serviceAgent", "members": [ "serviceAccount:service-12340014@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ] } ] } ================================================ FILE: test-data/pubsub1/json-dumps/iam-service-accounts.json ================================================ { "accounts": [] } ================================================ FILE: test-data/pubsub1/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": {} } ================================================ FILE: test-data/pubsub1/json-dumps/project.json ================================================ { "name": "projects/12340014", "parent": "organizations/11112222", "projectId": "gcpdiag-pubsub1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - pubsub1", "createTime": "2022-01-05T11:22:57.729Z", "updateTime": "2022-01-05T11:22:59.801Z", "etag": "os+RgnRglVh4dCaEwZYnzw==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/pubsub1/json-dumps/pull-subscription.json ================================================ { "name": "projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1", "topic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1", "pushConfig": {}, "ackDeadlineSeconds": 10, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" }, "state": "ACTIVE" } ================================================ FILE: test-data/pubsub1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340014/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquery.googleapis.com/Table", "displayName": "BigQuery Table Resource.", "description": "BigQuery Table Resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The cloud location of the BigQuery table." }, { "key": "table_reference", "description": "The table reference in the format of project_id:dataset_id.table_id for the BigQuery table." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/Location", "displayName": "CheckIamPolicy Request Location", "description": "A BigQuery Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded", "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit" ] }, { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340014" }, { "name": "projects/12340014/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340014" }, { "name": "projects/12340014/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340014" }, { "name": "projects/12340014/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340014" }, { "name": "projects/12340014/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340014" } ] } ================================================ FILE: test-data/pubsub1/json-dumps/subscriptions-iam.json ================================================ { "version": 1, "etag": "BwYPijt35Pk=", "bindings": [ { "role": "roles/viewer", "members": [ "domain:google.com" ] } ] } ================================================ FILE: test-data/pubsub1/json-dumps/subscriptions.json ================================================ { "subscriptions": [ { "name": "projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription3gcs-9pm6hng1", "topic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1", "pushConfig": {}, "ackDeadlineSeconds": 300, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" }, "deadLetterPolicy": { "deadLetterTopic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-gcsdlqtopic-9pm6hng1", "maxDeliveryAttempts": 5 }, "state": "ACTIVE", "cloudStorageConfig": { "bucket": "pubsub1_bucket", "textConfig": {}, "maxDuration": "300s", "maxBytes": "1000", "state": "ACTIVE" } }, { "name": "projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1", "topic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1", "pushConfig": {}, "ackDeadlineSeconds": 10, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" }, "deadLetterPolicy": { "deadLetterTopic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-bqdlqtopic-9pm6hng1", "maxDeliveryAttempts": 5 }, "bigqueryConfig": { "table": "gcpdiag-pubsub1-aaaa.pubsub1_dataset.pubsub1_table", "state": "ACTIVE" }, "state": "ACTIVE" }, { "name": "projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1", "topic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1", "pushConfig": {}, "ackDeadlineSeconds": 10, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" }, "state": "ACTIVE" }, { "name": "projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-bqdlqsubscription-9pm6hng1", "topic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-bqdlqtopic-9pm6hng1", "pushConfig": {}, "ackDeadlineSeconds": 10, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" }, "state": "ACTIVE" }, { "name": "projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-gcsdlqsubscription-9pm6hng1", "topic": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-gcsdlqtopic-9pm6hng1", "pushConfig": {}, "ackDeadlineSeconds": 10, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" }, "state": "ACTIVE" } ] } ================================================ FILE: test-data/pubsub1/json-dumps/topic-iam.json ================================================ { "version": 1, "etag": "BwYHmcy7AxA=", "bindings": [ { "role": "roles/viewer", "members": [ "domain:google.com" ] } ] } ================================================ FILE: test-data/pubsub1/json-dumps/topics.json ================================================ { "topics": [ { "name": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1" }, { "name": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-gcsdlqtopic-9pm6hng1" }, { "name": "projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-bqdlqtopic-9pm6hng1" } ] } ================================================ FILE: test-data/pubsub1/project.tf ================================================ /** * 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. */ terraform { required_providers { google = { source = "hashicorp/google" version = "= 3.46.0" } google-beta = { source = "hashicorp/google-beta" version = ">= 4.50.0" } } } resource "random_string" "project_id_suffix" { length = 8 lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - pubsub1" project_id = "gcpdiag-pubsub1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "pubsub" { project = google_project.project.project_id service = "pubsub.googleapis.com" } resource "google_project_service" "bigquery" { project = google_project.project.project_id service = "bigquery.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } output "topic" { value = google_pubsub_topic.pubsub1topic.name } output "subscription" { value = google_pubsub_subscription.pubsub1subscription.name } output "bqsubscription" { value = google_pubsub_subscription.pubsub1subscription2.name } output "gcs_subscription" { value = google_pubsub_subscription.pubsub1subscription3gcs.name } output "gcs_subscription_bucket_name" { value = google_storage_bucket.pubsub_gcs_subscription_bucket.name } ================================================ FILE: test-data/pubsub1/pubsub1.tf ================================================ resource "google_pubsub_topic" "pubsub1topic" { project = google_project.project.project_id name = "gcpdiag-pubsub1topic-${random_string.project_id_suffix.id}" } resource "google_pubsub_subscription" "pubsub1subscription" { project = google_project.project.project_id name = "gcpdiag-pubsub1subscription-${random_string.project_id_suffix.id}" topic = google_pubsub_topic.pubsub1topic.name } data "google_iam_policy" "admin" { binding { role = "roles/viewer" members = [ "domain:google.com", ] } } resource "google_pubsub_topic_iam_policy" "policy" { project = google_project.project.project_id topic = google_pubsub_topic.pubsub1topic.name policy_data = data.google_iam_policy.admin.policy_data } resource "google_pubsub_subscription_iam_policy" "policy1" { project = google_project.project.project_id subscription = "gcpdiag-pubsub1subscription-${random_string.project_id_suffix.id}" policy_data = data.google_iam_policy.admin.policy_data } # BQ subscription # dlq resource "google_project_iam_member" "pubsub_publisher_role" { project = google_project.project.project_id provider = google-beta role = "roles/pubsub.publisher" member = "serviceAccount:service-${google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" } resource "google_project_iam_member" "pubsub_subscriber_role" { project = google_project.project.project_id provider = google-beta role = "roles/pubsub.subscriber" member = "serviceAccount:service-${google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" } resource "google_pubsub_topic" "dlq_bq_topic" { project = google_project.project.project_id name = "gcpdiag-bqdlqtopic-${random_string.project_id_suffix.id}" depends_on = [google_project_iam_member.pubsub_publisher_role, google_project_iam_member.pubsub_subscriber_role] } resource "google_pubsub_subscription" "dlq_bq_subscription" { project = google_project.project.project_id name = "gcpdiag-bqdlqsubscription-${random_string.project_id_suffix.id}" topic = google_pubsub_topic.dlq_bq_topic.name } # bq resource "google_project_iam_member" "bq_editor" { project = google_project.project.project_id provider = google-beta role = "roles/bigquery.dataEditor" member = "serviceAccount:service-${google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" } resource "google_bigquery_dataset" "pubsub1_dataset" { project = google_project.project.project_id dataset_id = "pubsub1_dataset" provider = google-beta } resource "google_bigquery_table" "pubsub1_table" { # deletion_protection = false table_id = "pubsub1_table" project = google_project.project.project_id dataset_id = google_bigquery_dataset.pubsub1_dataset.dataset_id provider = google-beta schema = <$@ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/tpu1/json-dumps/logging-entries-1.json ================================================ { "entries": [ ] } ================================================ FILE: test-data/tpu1/json-dumps/project.json ================================================ { "name": "projects/12340008", "parent": "folders/373737373737", "projectId": "gcpdiag-tpu1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - tpu1", "createTime": "2022-06-14T16:09:44.361Z", "updateTime": "2022-06-14T16:09:46.341Z", "etag": "VUd/OqH5H6ielVfs/YQw7g==" } ================================================ FILE: test-data/tpu1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340008/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/cloudtrace.googleapis.com", "config": { "name": "cloudtrace.googleapis.com", "title": "Cloud Trace API", "documentation": { "summary": "Sends application trace data to Cloud Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Cloud Trace API directly. If you are looking to instrument your application for Cloud Trace, we recommend using OpenTelemetry.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "cloudtrace.googleapis.com/charged_project", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "monitoring.googleapis.com/service" }, { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" } ] }, { "type": "cloudtrace.googleapis.com/ChargedProject", "displayName": "Cloud trace target", "description": "A cloud trace specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "api_service", "description": "The name of the API service with which the data is associated (e.g.,'cloudtrace.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "cloudtrace.googleapis.com/CloudtraceProject", "displayName": "Cloud Trace", "description": "Cloud trace resource, e.g. project.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container associated with the resource." }, { "key": "location", "description": "The location that the Cloud Trace service recording the metrics is running." } ], "launchStage": "EARLY_ACCESS" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "cloudtrace.googleapis.com/ChargedProject", "metrics": [ "cloudtrace.googleapis.com/billing/ingested_spans" ] }, { "monitoredResource": "cloudtrace.googleapis.com/charged_project", "metrics": [ "cloudtrace.googleapis.com/billing/retrieved_spans" ] }, { "monitoredResource": "cloudtrace.googleapis.com/CloudtraceProject", "metrics": [ "cloudtrace.googleapis.com/internal/plugin_server_span_count", "cloudtrace.googleapis.com/internal/reader_root_query_count", "cloudtrace.googleapis.com/internal/reader_root_query_latencies", "cloudtrace.googleapis.com/bigquery_export/exported_span_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/deploymentmanager.googleapis.com", "config": { "name": "deploymentmanager.googleapis.com", "title": "Cloud Deployment Manager V2 API", "documentation": { "summary": "The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\nresources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] } ] } }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/logging.googleapis.com", "config": { "name": "logging.googleapis.com", "title": "Cloud Logging API", "documentation": { "summary": "Writes log entries and manages your Cloud Logging configuration." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "logging.googleapis.com/ChargedProject", "displayName": "Cloud logging target", "description": "A cloud logging specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'logging.googleapis.com')." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "logging.googleapis.com/ChargedProject", "metrics": [ "logging.googleapis.com/billing/ingested_bytes" ] } ] } }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" and \"cluster\" are supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/storage-component.googleapis.com", "config": { "name": "storage-component.googleapis.com", "title": "Cloud Storage", "documentation": { "summary": "Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\n infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/request_count", "serviceruntime.googleapis.com/api/consumer/error_count", "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/api/consumer/total_latencies", "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies", "serviceruntime.googleapis.com/api/consumer/backend_latencies", "serviceruntime.googleapis.com/api/consumer/request_sizes", "serviceruntime.googleapis.com/api/consumer/response_sizes", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country", "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340008" }, { "name": "projects/12340008/services/tpu.googleapis.com", "config": { "name": "tpu.googleapis.com", "title": "Cloud TPU API", "documentation": { "summary": "TPU API provides customers with access to Google TPU technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/universal", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "saas_instance", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "saasaccelerator.googleapis.com/service_name" }, { "key": "cloud.googleapis.com/location" }, { "key": "saasaccelerator.googleapis.com/consumer_project" }, { "key": "saasaccelerator.googleapis.com/consumer_project_number" }, { "key": "saasaccelerator.googleapis.com/instance_id" }, { "key": "saasaccelerator.googleapis.com/resource_number" }, { "key": "cloud.googleapis.com/uid" } ] }, { "type": "saas_instance_node", "labels": [ { "key": "cloud.googleapis.com/project" }, { "key": "saasaccelerator.googleapis.com/service_name" }, { "key": "cloud.googleapis.com/location" }, { "key": "saasaccelerator.googleapis.com/consumer_project" }, { "key": "saasaccelerator.googleapis.com/consumer_project_number" }, { "key": "saasaccelerator.googleapis.com/instance_id" }, { "key": "saasaccelerator.googleapis.com/resource_number" }, { "key": "saasaccelerator.googleapis.com/node_id" }, { "key": "cloud.googleapis.com/uid" } ] }, { "type": "serviceruntime.googleapis.com/api", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "serviceruntime.googleapis.com/api_version" }, { "key": "serviceruntime.googleapis.com/api_method" }, { "key": "serviceruntime.googleapis.com/consumer_project" }, { "key": "cloud.googleapis.com/project" }, { "key": "cloud.googleapis.com/service" } ] }, { "type": "serviceruntime.googleapis.com/consumer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "serviceruntime.googleapis.com/producer_quota", "labels": [ { "key": "cloud.googleapis.com/location" }, { "key": "cloud.googleapis.com/uid" }, { "key": "cloud.googleapis.com/service" }, { "key": "cloud.googleapis.com/resource_id" }, { "key": "cloud.googleapis.com/resource_node" }, { "key": "cloud.googleapis.com/consumer_resource_node" }, { "key": "cloud.googleapis.com/quota_metric" }, { "key": "cloud.googleapis.com/quota_location" } ] }, { "type": "tpu.googleapis.com/TpuWorker", "displayName": "TPU Worker", "description": "A TPU Worker executing Tensorflow work for a TPU Node.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "zone", "description": "The Google Cloud zone in which the TPU Worker is running." }, { "key": "node_id", "description": "The ID of the TPU Node." }, { "key": "worker_id", "description": "The ID of a TPU Worker within the TPU Node." }, { "key": "tf_version", "description": "Which tf version this node is using." }, { "key": "preemptible", "description": "Whether the node is preemptible." }, { "key": "source", "description": "Source of the node - tpu, gke, etc..." }, { "key": "internal", "description": "Whether the node is internal or external." }, { "key": "accelerator_type", "description": "Accelerator type of the tpu this worker belongs to." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "tpu.googleapis.com/TpuWorker", "metrics": [ "tpu.googleapis.com/cpu/utilization", "tpu.googleapis.com/cpu/utilization/mean", "tpu.googleapis.com/cpu/utilization/range", "tpu.googleapis.com/cpu/utilization/standard_deviation", "tpu.googleapis.com/network/received_bytes_count", "tpu.googleapis.com/network/sent_bytes_count", "tpu.googleapis.com/memory/usage", "tpu.googleapis.com/memory/total", "tpu.googleapis.com/systemd/restart_count", "tpu.googleapis.com/container/state", "tpu.googleapis.com/container/image", "tpu.googleapis.com/container/uptime", "tpu.googleapis.com/container/cpu/utilization", "tpu.googleapis.com/container/memory/usage", "tpu.googleapis.com/tpu/mxu/utilization", "tpu.googleapis.com/tfserver/sessions/created_count", "tpu.googleapis.com/tfserver/sessions/active", "tpu.googleapis.com/tfserver/health", "tpu.googleapis.com/tfserver/gcs/block_request_count", "tpu.googleapis.com/tfserver/gcs/block_retrieved_bytes_count", "tpu.googleapis.com/tfserver/gcs/stat_object_request_count", "tpu.googleapis.com/tfserver/gcs/dataset_file_count", "tpu.googleapis.com/tfserver/gcs/estimated_dataset_size", "tpu.googleapis.com/tfserver/gcs/http_request_count", "tpu.googleapis.com/tfserver/gcs/http_response_count", "tpu.googleapis.com/tfserver/gcs/throttle_tokens", "tpu.googleapis.com/tfserver/gcs/throttle_enabled", "tpu.googleapis.com/tfserver/gcs/block_cache_size", "tpu.googleapis.com/tfserver/gcs/distrib_block_cache_hit_bytes", "tpu.googleapis.com/tfserver/gcs/distrib_block_cache_miss_bytes", "tpu.googleapis.com/tfserver/gcs/non_distrib_block_cache_hit_bytes", "tpu.googleapis.com/tfserver/gcs/non_distrib_block_cache_miss_bytes", "tpu.googleapis.com/tfserver/profiler/profile_count", "tpu.googleapis.com/billing/external", "tpu.googleapis.com/mode/inference" ] }, { "monitoredResource": "serviceruntime.googleapis.com/api", "metrics": [ "serviceruntime.googleapis.com/api/consumer/quota_used_count", "serviceruntime.googleapis.com/api/consumer/quota_refund_count", "serviceruntime.googleapis.com/quota/used", "serviceruntime.googleapis.com/quota/limit", "serviceruntime.googleapis.com/quota/exceeded", "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" ] }, { "monitoredResource": "serviceruntime.googleapis.com/consumer_quota", "metrics": [ "serviceruntime.googleapis.com/quota/rate/consumer/used_count", "serviceruntime.googleapis.com/quota/rate/consumer/refund_count", "serviceruntime.googleapis.com/quota/allocation/consumer/usage", "serviceruntime.googleapis.com/quota/consumer/limit", "serviceruntime.googleapis.com/quota/consumer/exceeded" ] } ] } }, "state": "ENABLED", "parent": "projects/12340008" } ] } ================================================ FILE: test-data/tpu1/project.tf ================================================ resource "random_string" "project_id" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - tpu1" project_id = "gcpdiag-tpu1-${random_string.project_id.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id } resource "google_project_service" "tpu" { project = google_project.project.project_id service = "tpu.googleapis.com" } resource "google_project_service" "logging" { project = google_project.project.project_id service = "logging.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/tpu1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/vertex1/Makefile ================================================ PROJECT_ID := $(shell terraform output project_id | sed -e 's|"||g') PROJECT_ID_SUFFIX := $(shell terraform output -json project_id_suffix) PROJECT_NR := $(shell terraform output -json project_nr) ORG_ID := $(shell terraform output -json org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner LOCATION = us-west1 FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340015 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/featurestores.json \ json-dumps/project.json: $(CURL) -fsS \ 'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/services.json: $(CURL) -fv \ 'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \ | $(SED_SUBST_FAKE) >$@ json-dumps/featurestores.json: $(CURL) -fv \ 'https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/featurestores' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/vertex1/json-dumps/featurestores.json ================================================ { "featurestores": [ { "name": "projects/12340015/locations/us-west1/featurestores/gcpdiag_vertex1featurestore_aaaa", "createTime": "2023-08-18T08:57:10.529141Z", "updateTime": "2023-08-18T08:57:10.634433Z", "etag": "AMEw9yNUiHRCssGYdRqY4e5lYEMsU5Pw4pd_Lli5B3sjnhpSKQ-dY_X56aEECOhyP_UJ", "onlineServingConfig": {}, "state": "STABLE" } ] } ================================================ FILE: test-data/vertex1/json-dumps/project.json ================================================ { "name": "projects/12340015", "parent": "folders/373737373737", "projectId": "gcpdiag-vertex1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - vertex1", "createTime": "2023-08-18T08:45:07.448788Z", "updateTime": "2023-08-18T08:45:07.448788Z", "etag": "W/\"f67f3aafb1347923\"", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/vertex1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340015/services/aiplatform.googleapis.com", "config": { "name": "aiplatform.googleapis.com", "title": "Vertex AI API", "documentation": { "summary": "Train high-quality custom machine learning models with minimal machine learning expertise and effort." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "aiplatform.googleapis.com/DeploymentResourcePool", "displayName": "Vertex AI Deployment Resource Pool", "description": "A Vertex AI Deployment Resource Pool.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Deployment Resource Pool." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "deployment_resource_pool_id", "description": "The ID of the Deployment Resource Pool." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Endpoint", "displayName": "Vertex AI Endpoint", "description": "A Vertex AI API Endpoint where Models are deployed into it.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Endpoint." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "endpoint_id", "description": "The ID of the Endpoint." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Featurestore", "displayName": "Vertex AI Feature Store", "description": "A Vertex AI Feature Store.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Featurestore." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "featurestore_id", "description": "The ID of the Featurestore." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/FeatureOnlineStore", "displayName": "Vertex AI Feature Online Store", "description": "A Vertex AI Feature Online Store.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the FeatureOnlineStore." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "feature_online_store_id", "description": "The ID of the Feature Online Store." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Index", "displayName": "Matching Engine Index", "description": "An Index built through the cloud Matching Engine service.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Index." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "index_id", "description": "The ID of the Index." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/IndexEndpoint", "displayName": "Matching Engine Index Endpoint", "description": "An Endpoint to which Matching Engine Indexes are deployed.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Index." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "index_endpoint_id", "description": "The ID of the index endpoint." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/PipelineJob", "displayName": "Vertex Pipelines Job", "description": "A Vertex Pipelines Job.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "pipeline_job_id", "description": "The ID of the PipelineJob." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Location", "displayName": "Location", "description": "A Google Cloud Project and region where a job is running.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "location", "description": "The region in which the service is running." } ], "launchStage": "BETA" }, { "type": "aiplatform.googleapis.com/Model", "displayName": "Vertex AI Model", "description": "A Vertex AI Model.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP Project owning the Model." }, { "key": "location", "description": "The region in which the service is running." }, { "key": "model", "description": "The identifier of the Model." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "aiplatform.googleapis.com/Endpoint", "metrics": [ "aiplatform.googleapis.com/prediction/internal/online/cmle_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/component_latencies", "aiplatform.googleapis.com/prediction/internal/online/core_infra_latencies", "aiplatform.googleapis.com/prediction/internal/online/custom/istio_request_duration_milliseconds", "aiplatform.googleapis.com/prediction/internal/online/custom/istio_requests_total", "aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_exit_total", "aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_launch_total", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_latencies", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_count", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_cache_lookup_count", "aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_states", "aiplatform.googleapis.com/prediction/internal/online/directpath_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/harpoon_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/internal_error_count", "aiplatform.googleapis.com/prediction/internal/online/prediction_latencies", "aiplatform.googleapis.com/prediction/internal/online/request_byte_count", "aiplatform.googleapis.com/prediction/internal/online/response_count", "aiplatform.googleapis.com/prediction/online/streaming_message_overhead_latencies", "aiplatform.googleapis.com/prediction/online/streaming_message_count", "aiplatform.googleapis.com/prediction/online/streaming_message_bytes_count", "aiplatform.googleapis.com/prediction/online/open_streams", "aiplatform.googleapis.com/prediction/online/error_count", "aiplatform.googleapis.com/prediction/online/prediction_count", "aiplatform.googleapis.com/prediction/online/prediction_latencies", "aiplatform.googleapis.com/prediction/online/response_count", "aiplatform.googleapis.com/prediction/online/replicas", "aiplatform.googleapis.com/prediction/online/target_replicas", "aiplatform.googleapis.com/prediction/internal/online/cpu/utilization", "aiplatform.googleapis.com/prediction/internal/online/memory/bytes_used", "aiplatform.googleapis.com/prediction/internal/online/accelerator/duty_cycle", "aiplatform.googleapis.com/prediction/internal/online/accelerator/memory/bytes_used", "aiplatform.googleapis.com/prediction/internal/online/network/received_bytes_count", "aiplatform.googleapis.com/prediction/internal/online/network/sent_bytes_count", "aiplatform.googleapis.com/prediction/internal/online/llm_backend_latencies", "aiplatform.googleapis.com/prediction/internal/online/concurrent_requests", "aiplatform.googleapis.com/prediction/internal/online/throttled_request_count", "aiplatform.googleapis.com/prediction/internal/online/resource_usage_error_count", "aiplatform.googleapis.com/prediction/internal/online/l2_operator_reconcile_latencies" ] }, { "monitoredResource": "aiplatform.googleapis.com/DeploymentResourcePool", "metrics": [ "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/replicas", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/target_replicas", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/cpu/utilization", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/memory/bytes_used", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/duty_cycle", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/memory/bytes_used", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/received_bytes_count", "aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/sent_bytes_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/IndexEndpoint", "metrics": [ "aiplatform.googleapis.com/scann/query/request_count", "aiplatform.googleapis.com/scann/query/latencies", "aiplatform.googleapis.com/scann/internal/query/latency_bucketized", "aiplatform.googleapis.com/matching_engine/query/request_count", "aiplatform.googleapis.com/matching_engine/query/query_count", "aiplatform.googleapis.com/matching_engine/query/request_count_v2", "aiplatform.googleapis.com/matching_engine/internal/query/request_count", "aiplatform.googleapis.com/matching_engine/query/latencies", "aiplatform.googleapis.com/matching_engine/query/query_latencies", "aiplatform.googleapis.com/matching_engine/internal/query/latency_bucketized", "aiplatform.googleapis.com/matching_engine/internal/query/match_server_request_count", "aiplatform.googleapis.com/matching_engine/internal/query/match_server_latencies" ] }, { "monitoredResource": "aiplatform.googleapis.com/IndexEndpoint", "metrics": [ "aiplatform.googleapis.com/scann/current_shards", "aiplatform.googleapis.com/scann/current_replicas", "aiplatform.googleapis.com/matching_engine/current_shards", "aiplatform.googleapis.com/matching_engine/current_replicas", "aiplatform.googleapis.com/matching_engine/internal/current_replicas", "aiplatform.googleapis.com/matching_engine/cpu/request_cores", "aiplatform.googleapis.com/matching_engine/cpu/request_utilization", "aiplatform.googleapis.com/matching_engine/memory/used_bytes", "aiplatform.googleapis.com/matching_engine/memory/request_bytes" ] }, { "monitoredResource": "aiplatform.googleapis.com/Index", "metrics": [ "aiplatform.googleapis.com/matching_engine/stream_update/datapoint_count", "aiplatform.googleapis.com/matching_engine/stream_update/latency", "aiplatform.googleapis.com/matching_engine/stream_update/latencies", "aiplatform.googleapis.com/matching_engine/internal/stream_update/catchup_latency", "aiplatform.googleapis.com/matching_engine/stream_update/request_count", "aiplatform.googleapis.com/matching_engine/index/size", "aiplatform.googleapis.com/matching_engine/index/embeddings", "aiplatform.googleapis.com/matching_engine/index/last_batch_update_time", "aiplatform.googleapis.com/matching_engine/index/last_compaction_time" ] }, { "monitoredResource": "aiplatform.googleapis.com/Featurestore", "metrics": [ "aiplatform.googleapis.com/featurestore/online_entities_updated", "aiplatform.googleapis.com/featurestore/online_serving/request_count", "aiplatform.googleapis.com/featurestore/online_serving/latencies", "aiplatform.googleapis.com/featurestore/online_serving/response_size", "aiplatform.googleapis.com/featurestore/online_serving/request_bytes_count", "aiplatform.googleapis.com/featurestore/streaming_write/offline_processed_count", "aiplatform.googleapis.com/featurestore/streaming_write/offline_write_delays" ] }, { "monitoredResource": "aiplatform.googleapis.com/Featurestore", "metrics": [ "aiplatform.googleapis.com/featurestore/storage/stored_bytes", "aiplatform.googleapis.com/featurestore/storage/billable_processed_bytes", "aiplatform.googleapis.com/featurestore/node_count", "aiplatform.googleapis.com/featurestore/cpu_load", "aiplatform.googleapis.com/featurestore/cpu_load_hottest_node" ] }, { "monitoredResource": "aiplatform.googleapis.com/FeatureOnlineStore", "metrics": [ "aiplatform.googleapis.com/FeatureOnlineStore/online_serving/request_count", "aiplatform.googleapis.com/FeatureOnlineStore/online_serving/serving_bytes_count", "aiplatform.googleapis.com/FeatureOnlineStore/online_serving/serving_latencies", "aiplatform.googleapis.com/FeatureOnlineStore/serving_data_ages", "aiplatform.googleapis.com/FeatureOnlineStore/serving_data_by_sync_time", "aiplatform.googleapis.com/featureonlinestore/online_serving/request_count", "aiplatform.googleapis.com/featureonlinestore/online_serving/serving_bytes_count", "aiplatform.googleapis.com/featureonlinestore/online_serving/serving_latencies", "aiplatform.googleapis.com/featureonlinestore/serving_data_ages", "aiplatform.googleapis.com/featureonlinestore/serving_data_by_sync_time" ] }, { "monitoredResource": "aiplatform.googleapis.com/FeatureOnlineStore", "metrics": [ "aiplatform.googleapis.com/FeatureOnlineStore/storage/stored_bytes", "aiplatform.googleapis.com/FeatureOnlineStore/storage/bigtable_cpu_load", "aiplatform.googleapis.com/FeatureOnlineStore/storage/bigtable_cpu_load_hottest_node", "aiplatform.googleapis.com/FeatureOnlineStore/storage/bigtable_nodes", "aiplatform.googleapis.com/FeatureOnlineStore/running_sync", "aiplatform.googleapis.com/featureonlinestore/storage/stored_bytes", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load_hottest_node", "aiplatform.googleapis.com/featureonlinestore/storage/bigtable_nodes", "aiplatform.googleapis.com/featureonlinestore/running_sync" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/executing_vertexai_pipeline_jobs", "aiplatform.googleapis.com/executing_vertexai_pipeline_tasks" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/online_prediction_requests_per_base_model", "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/usage", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/exceeded", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/usage", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/exceeded", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/usage" ] }, { "monitoredResource": "aiplatform.googleapis.com/Model", "metrics": [ "aiplatform.googleapis.com/ml_monitoring/feature_skew_deviation", "aiplatform.googleapis.com/ml_monitoring/feature_drift_deviation", "aiplatform.googleapis.com/ml_monitoring/feature_attribution_skew_deviation", "aiplatform.googleapis.com/ml_monitoring/feature_attribution_drift_deviation", "aiplatform.googleapis.com/model_monitoring/feature_skew_deviation", "aiplatform.googleapis.com/model_monitoring/feature_drift_deviation", "aiplatform.googleapis.com/model_monitoring/feature_attribution_skew_deviation", "aiplatform.googleapis.com/model_monitoring/feature_attribution_drift_deviation" ] }, { "monitoredResource": "aiplatform.googleapis.com/PipelineJob", "metrics": [ "aiplatform.googleapis.com/pipelinejob/duration", "aiplatform.googleapis.com/pipelinejob/completed_tasks", "aiplatform.googleapis.com/pipelinejob/task_completed_count" ] }, { "monitoredResource": "aiplatform.googleapis.com/Location", "metrics": [ "aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/limit", "aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/limit", "aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/limit" ] } ] } }, "state": "ENABLED", "parent": "projects/12340015" } ] } ================================================ FILE: test-data/vertex1/project.tf ================================================ /** * Copyright 2023 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. */ terraform { required_providers { google = { source = "hashicorp/google" version = "= 3.46.0" } google-beta = { source = "hashicorp/google-beta" version = ">= 3.46.0" } } } resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - vertex1" project_id = "gcpdiag-vertex1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "vertex" { project = google_project.project.project_id service = "aiplatform.googleapis.com" } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/vertex1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/vertex1/vertex1.tf ================================================ /** * Copyright 2023 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. */ # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/vertex_ai_featurestore resource "google_vertex_ai_featurestore" "vertex1featurestore" { project = google_project.project.project_id name = "gcpdiag_vertex1featurestore_aaaa" provider = google-beta region = "us-west1" } ================================================ FILE: test-data/vpc1/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner FAKE_PROJECT_ID_SUFFIX = aaaa FAKE_PROJECT_NR = 12340009 FAKE_ORG_ID = 11112222 SED_SUBST_FAKE = sed -e "s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/" \ -e "s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/" \ -e "s/$(ORG_ID)/$(FAKE_ORG_ID)/" \ all: \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/monitoring-query.json \ json-dumps/compute-regions.json \ include ../Makefile.inc define MONITORING_QUERY { \ "query": "fetch gce_instance::compute.googleapis.com/instance/uptime_total \ | within 10m \ | group_by [resource.zone, metric.instance_name] \ | group_by 5m, [.mean, .count] \ " \ } endef json-dumps/monitoring-query.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY)' \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/vpc1/json-dumps/compute-addresses.json ================================================ { "kind": "compute#addressAggregatedList", "id": "projects/gcpdiag-vpc1-aaaa/aggregated/addresses", "items": { "regions/us-central1": { "addresses": [ { "kind": "compute#address", "id": "7997470120382759841", "creationTimestamp": "2024-01-07T07:03:42.222-08:00", "name": "address1", "description": "", "address": "10.128.0.26", "status": "IN_USE", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address1", "users": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/forwardingRules/gk3-us-central1-composer-test-7ff47cd0-g-c4d8afc4-8j765f778-pe" ], "networkTier": "PREMIUM", "labelFingerprint": "42WmS008rSM=", "addressType": "INTERNAL", "purpose": "GCE_ENDPOINT", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/subnetworks/default" }, { "kind": "compute#address", "id": "5823057272250092066", "creationTimestamp": "2024-01-03T06:53:01.418-08:00", "name": "address2", "description": "", "address": "192.168.0.18", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address2", "networkTier": "PREMIUM", "labelFingerprint": "42WmS008rSM=", "addressType": "INTERNAL", "purpose": "GCE_ENDPOINT", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/subnetworks/subnet-us1" }, { "kind": "compute#address", "id": "2295464241063840289", "creationTimestamp": "2024-01-03T06:53:02.536-08:00", "name": "address3", "description": "", "address": "192.168.0.26", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address3", "networkTier": "PREMIUM", "labelFingerprint": "42WmS008rSM=", "addressType": "INTERNAL", "purpose": "GCE_ENDPOINT", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/subnetworks/subnet-us1" } ] }, "regions/asia-east1": { "addresses": [ { "kind": "compute#address", "id": "5969362064718299255", "creationTimestamp": "2024-01-05T00:32:24.377-08:00", "name": "address4", "description": "", "address": "10.0.3.3", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1/addresses/address4", "networkTier": "PREMIUM", "labelFingerprint": "42WmS008rSM=", "ipVersion": "IPV4", "addressType": "INTERNAL", "purpose": "GCE_ENDPOINT", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1/subnetworks/sub-2" } ] } }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/aggregated/addresses" } ================================================ FILE: test-data/vpc1/json-dumps/compute-network-default.json ================================================ { "kind": "compute#network", "id": "8281558288356801985", "creationTimestamp": "2022-06-07T05:23:10.477-07:00", "name": "default", "description": "Default network for the project", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/global/networks/8281558288356801985", "autoCreateSubnetworks": true, "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-north1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-southwest1/subnetworks/default" ], "routingConfig": { "routingMode": "REGIONAL" }, "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL" } ================================================ FILE: test-data/vpc1/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "Ycbmf6LsqV4=", "kind": "compute#metadata" }, "creationTimestamp": "2022-06-07T05:23:03.772-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12340009-compute@developer.gserviceaccount.com", "id": "6665735726961982920", "kind": "compute#project", "name": "gcpdiag-vpc1-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 4 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 1 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 500, "metric": "HEALTH_CHECKS", "usage": 0 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 0 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 35 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa", "xpnProjectStatus": "HOST" } ================================================ FILE: test-data/vpc1/json-dumps/compute-regions.json ================================================ { "kind": "compute#regionList", "id": "projects/gcpdiag-vpc1-aaaa/regions", "items": [ { "kind": "compute#region", "id": "1220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1", "description": "asia-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2", "description": "asia-east2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east2", "supportsPzs": true }, { "kind": "compute#region", "id": "1250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1", "description": "asia-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2", "description": "asia-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3", "description": "asia-northeast3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 100, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast3", "supportsPzs": false }, { "kind": "compute#region", "id": "1320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1", "description": "asia-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2", "description": "asia-south2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-south2", "supportsPzs": false }, { "kind": "compute#region", "id": "1260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1", "description": "asia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-southeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2", "description": "asia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1", "description": "australia-southeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast1-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/australia-southeast1", "supportsPzs": true }, { "kind": "compute#region", "id": "1480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2", "description": "australia-southeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast2-b" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/australia-southeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2", "description": "europe-central2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-central2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-central2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-central2-a" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-central2", "supportsPzs": false }, { "kind": "compute#region", "id": "1350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1", "description": "europe-north1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-north1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-north1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-north1-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-north1", "supportsPzs": false }, { "kind": "compute#region", "id": "1540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1", "description": "europe-southwest1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-southwest1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-southwest1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-southwest1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-southwest1", "supportsPzs": false }, { "kind": "compute#region", "id": "1100", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1", "description": "europe-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2", "description": "europe-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west2-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west2", "supportsPzs": true }, { "kind": "compute#region", "id": "1300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3", "description": "europe-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west3-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west3-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west3", "supportsPzs": true }, { "kind": "compute#region", "id": "1340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4", "description": "europe-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west4-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west4", "supportsPzs": false }, { "kind": "compute#region", "id": "1380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6", "description": "europe-west6", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west6-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west6-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west6-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west6", "supportsPzs": false }, { "kind": "compute#region", "id": "1510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8", "description": "europe-west8", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west8-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west8-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west8-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west8", "supportsPzs": false }, { "kind": "compute#region", "id": "1520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9", "description": "europe-west9", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west9-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west9-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west9-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west9", "supportsPzs": false }, { "kind": "compute#region", "id": "1330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1", "description": "northamerica-northeast1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/northamerica-northeast1", "supportsPzs": false }, { "kind": "compute#region", "id": "1460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2", "description": "northamerica-northeast2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast2-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast2-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/northamerica-northeast2", "supportsPzs": false }, { "kind": "compute#region", "id": "1310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1", "description": "southamerica-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-east1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-east1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/southamerica-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1", "description": "southamerica-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 300, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 2000, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 0, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 300, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/southamerica-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1", "description": "us-central1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-central1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-central1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-central1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-central1-f" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1", "supportsPzs": false }, { "kind": "compute#region", "id": "1230", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1", "description": "us-east1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east1-d" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east1", "supportsPzs": false }, { "kind": "compute#region", "id": "1270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4", "description": "us-east4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east4-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east4-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east4", "supportsPzs": true }, { "kind": "compute#region", "id": "1530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5", "description": "us-east5", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east5-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east5-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east5-a" ], "quotas": [ { "metric": "CPUS", "limit": 24, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 4096, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 500, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 6000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 0, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 128, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east5", "supportsPzs": false }, { "kind": "compute#region", "id": "1550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1", "description": "us-south1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-south1-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-south1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-south1-b" ], "quotas": [ { "metric": "CPUS", "limit": 24, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 4096, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 8, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 500, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 6000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 50, "usage": 0 }, { "metric": "INSTANCES", "limit": 240, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 50, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 20, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 20, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 0, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 100, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 20, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 0, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 0, "usage": 0 }, { "metric": "C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 24, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 100, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 0, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 128, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 0, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 0, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 120000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 24, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 0, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 15, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 24, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 24, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-south1", "supportsPzs": false }, { "kind": "compute#region", "id": "1210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1", "description": "us-west1", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west1-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west1-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west1-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west1", "supportsPzs": false }, { "kind": "compute#region", "id": "1360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2", "description": "us-west2", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west2-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west2-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west2-a" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west2", "supportsPzs": false }, { "kind": "compute#region", "id": "1420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3", "description": "us-west3", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west3-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west3-b", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west3-c" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west3", "supportsPzs": false }, { "kind": "compute#region", "id": "1430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4", "description": "us-west4", "status": "UP", "zones": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west4-c", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west4-a", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west4-b" ], "quotas": [ { "metric": "CPUS", "limit": 600, "usage": 0 }, { "metric": "DISKS_TOTAL_GB", "limit": 102400, "usage": 0 }, { "metric": "STATIC_ADDRESSES", "limit": 175, "usage": 0 }, { "metric": "IN_USE_ADDRESSES", "limit": 575, "usage": 0 }, { "metric": "SSD_TOTAL_GB", "limit": 40960, "usage": 0 }, { "metric": "LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "INSTANCE_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INSTANCE_GROUP_MANAGERS", "limit": 500, "usage": 0 }, { "metric": "INSTANCES", "limit": 6000, "usage": 0 }, { "metric": "AUTOSCALERS", "limit": 500, "usage": 0 }, { "metric": "REGIONAL_AUTOSCALERS", "limit": 200, "usage": 0 }, { "metric": "REGIONAL_INSTANCE_GROUP_MANAGERS", "limit": 200, "usage": 0 }, { "metric": "TARGET_TCP_PROXIES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_CPUS", "limit": 5000, "usage": 0 }, { "metric": "NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_LOCAL_SSD_TOTAL_GB", "limit": 25000, "usage": 0 }, { "metric": "COMMITMENTS", "limit": 2000, "usage": 0 }, { "metric": "NETWORK_ENDPOINT_GROUPS", "limit": 1000, "usage": 0 }, { "metric": "INTERNAL_ADDRESSES", "limit": 200, "usage": 0 }, { "metric": "NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_LOCAL_SSD_GB", "limit": 0, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_K80_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_GPUS", "limit": 16, "usage": 0 }, { "metric": "NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "NODE_GROUPS", "limit": 100, "usage": 0 }, { "metric": "NODE_TEMPLATES", "limit": 100, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_V100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P100_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_P4_VWS_GPUS", "limit": 1, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_PER_REGION", "limit": 16, "usage": 0 }, { "metric": "INTERCONNECT_ATTACHMENTS_TOTAL_MBPS", "limit": 80000, "usage": 0 }, { "metric": "RESOURCE_POLICIES", "limit": 250, "usage": 0 }, { "metric": "IN_USE_SNAPSHOT_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_T4_VWS_GPUS", "limit": 4, "usage": 0 }, { "metric": "IN_USE_BACKUP_SCHEDULES", "limit": 500, "usage": 0 }, { "metric": "PUBLIC_DELEGATED_PREFIXES", "limit": 10, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_K80_GPUS", "limit": 16, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P100_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_P4_GPUS", "limit": 1, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_V100_GPUS", "limit": 8, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_T4_GPUS", "limit": 8, "usage": 0 }, { "metric": "C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_C2_CPUS", "limit": 300, "usage": 0 }, { "metric": "RESERVATIONS", "limit": 2000, "usage": 0 }, { "metric": "COMMITTED_LICENSES", "limit": 150, "usage": 0 }, { "metric": "N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "COMMITTED_N2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "SERVICE_ATTACHMENTS", "limit": 800, "usage": 0 }, { "metric": "STATIC_BYOIP_ADDRESSES", "limit": 1024, "usage": 0 }, { "metric": "AFFINITY_GROUPS", "limit": 10, "usage": 0 }, { "metric": "NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "PREEMPTIBLE_NVIDIA_A100_GPUS", "limit": 64, "usage": 0 }, { "metric": "COMMITTED_NVIDIA_A100_GPUS", "limit": 16, "usage": 0 }, { "metric": "M1_CPUS", "limit": 160, "usage": 0 }, { "metric": "M2_CPUS", "limit": 0, "usage": 0 }, { "metric": "A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_A2_CPUS", "limit": 192, "usage": 0 }, { "metric": "COMMITTED_MEMORY_OPTIMIZED_CPUS", "limit": 160, "usage": 0 }, { "metric": "NETWORK_FIREWALL_POLICIES", "limit": 60, "usage": 0 }, { "metric": "PSC_INTERNAL_LB_FORWARDING_RULES", "limit": 800, "usage": 0 }, { "metric": "EXTERNAL_NETWORK_LB_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "EXTERNAL_PROTOCOL_FORWARDING_RULES", "limit": 150, "usage": 0 }, { "metric": "PD_EXTREME_TOTAL_PROVISIONED_IOPS", "limit": 720000, "usage": 0 }, { "metric": "E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "COMMITTED_E2_CPUS", "limit": 600, "usage": 0 }, { "metric": "EXTERNAL_MANAGED_FORWARDING_RULES", "limit": 25, "usage": 0 }, { "metric": "C2D_CPUS", "limit": 300, "usage": 0 }, { "metric": "N2A_CPUS", "limit": 128, "usage": 0 }, { "metric": "T2D_CPUS", "limit": 128, "usage": 0 }, { "metric": "M3_CPUS", "limit": 0, "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west4", "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions" } ================================================ FILE: test-data/vpc1/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": {} } ================================================ FILE: test-data/vpc1/json-dumps/project.json ================================================ { "name": "projects/12340009", "parent": "folders/11112222", "projectId": "gcpdiag-vpc1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - vpc1", "createTime": "2022-06-07T12:06:37.529Z", "updateTime": "2022-06-07T12:06:39.191Z", "etag": "73LYwBG8oClJWMj4WmVI7w==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/vpc1/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12340009/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12340009" }, { "name": "projects/12340009/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12340009" } ] } ================================================ FILE: test-data/vpc1/project.tf ================================================ /** * 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. */ resource "random_string" "project_id_suffix" { length = 8 number = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag test - vpc1" project_id = "gcpdiag-vpc1-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null billing_account = var.billing_account_id labels = { gcpdiag : "test" } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } resource "google_compute_shared_vpc_host_project" "host" { project = google_project.project.project_id } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/vpc1/variables.tf ================================================ variable "billing_account_id" {} variable "org_id" {} variable "folder_id" { default = "" } ================================================ FILE: test-data/vpc2/Makefile ================================================ PROJECT_ID := $(shell terraform output -raw project_id) PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix) PROJECT_NR := $(shell terraform output -raw project_nr) ORG_ID := $(shell terraform output -raw org_id) CURL = ../../bin/curl-wrap.sh JSON_CLEANER = ../../bin/json-cleaner ZONE_1 = us-central1-a FAKE_PROJECT_ID_SUFFIX = runbook FAKE_PROJECT_NR = 12345601 FAKE_ORG_ID = 11112222 COMPUTE_INSTANCES_MAXRESULTS=5 INSTANCE_NAME_GCE1=public-linux-valid INSTANCE_NAME_GCE2=public-linux-faulty INSTANCE_NAME_GCE3=private-linux-valid INSTANCE_NAME_GCE4=private-linux-faulty GATEWAY_NAME=nat-gateway CONNECTIVITY_TEST_ID=vmexternalipconnectivitytest all: \ json-dumps/compute-effective-firewalls-default.json \ json-dumps/compute-instances-$(ZONE_1).json \ json-dumps/compute-instances-empty.json \ json-dumps/compute-disks-empty.json \ json-dumps/compute-network-default.json \ json-dumps/compute-project.json \ json-dumps/compute-zones.json \ json-dumps/iam-policy.json \ json-dumps/iam-service-accounts.json \ json-dumps/project.json \ json-dumps/services.json \ json-dumps/compute-network-routes.json \ json-dumps/connectivity-test.json \ json-dumps/monitoring-query-nat-allocation-failed.json \ json-dumps/monitoring-query-nat-dropped-sent-packets-count.json \ json-dumps/monitoring-query-nat-dropped-received-packets-count.json \ json-dumps/monitoring-query-instance-dropped-received-packets-count.json \ include ../Makefile.inc define MONITORING_QUERY_NAT_ALLOCATION_FAILED { \ "query": "fetch nat_gateway \ | metric 'router.googleapis.com/nat/nat_allocation_failed' \ | within 5m \ " \ } endef json-dumps/monitoring-query-nat-allocation-failed.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY_NAT_ALLOCATION_FAILED)' \ | $(SED_SUBST_FAKE) >$@ define MONITORING_QUERY_NAT_DROPPED_SENT_PACKETS_COUNT { \ "query": "fetch nat_gateway \ | metric 'router.googleapis.com/nat/dropped_sent_packets_count' \ | align rate(10m) | within 10m \ | group_by [metric.reason], [value_dropped_sent_packets_count_aggregate:aggregate(value.dropped_sent_packets_count)] \ " \ } endef json-dumps/monitoring-query-nat-dropped-sent-packets-count.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY_NAT_DROPPED_SENT_PACKETS_COUNT)' \ | $(SED_SUBST_FAKE) >$@ define MONITORING_QUERY_NAT_DROPPED_RECEIVED_PACKETS_COUNT { \ "query": "fetch nat_gateway \ | metric 'router.googleapis.com/nat/dropped_received_packets_count' \ | align rate(5m) | within 5m \ | group_by [], [value_dropped_received_packets_count_aggregate:aggregate(value.dropped_received_packets_count)] \ " \ } endef json-dumps/monitoring-query-nat-dropped-received-packets-count.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY_NAT_DROPPED_RECEIVED_PACKETS_COUNT)' \ | $(SED_SUBST_FAKE) >$@ define MONITORING_QUERY_INSTANCE_DROPPED_RECEIVED_PACKETS_COUNT { \ "query": "fetch gce_instance \ | metric 'compute.googleapis.com/nat/dropped_received_packets_count' \ | align rate(5m) | every 5m \ | group_by [resource.instance_id], [value_dropped_received_packets_count_aggregate:aggregate(value.dropped_received_packets_count)] \ " \ } endef json-dumps/monitoring-query-instance-dropped-received-packets-count.json: $(CURL) -fsS \ 'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \ --header "Content-Type: application/json" -X POST \ --data '$(MONITORING_QUERY_INSTANCE_DROPPED_RECEIVED_PACKETS_COUNT)' \ | $(SED_SUBST_FAKE) >$@ json-dumps/connectivity-test.json: $(CURL) -fsS \ 'https://networkmanagement.googleapis.com/v1/projects/$(PROJECT_ID)/locations/global/connectivityTests/$(CONNECTIVITY_TEST_ID)' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ json-dumps/compute-network-routes.json: $(CURL) -fsS \ 'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/routes' \ --header "Content-Type:text/json" \ | $(SED_SUBST_FAKE) >$@ ================================================ FILE: test-data/vpc2/external_connectivity_private_instance_faulty.tf ================================================ /** * Copyright 2023 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. */ resource "google_compute_instance" "private-linux-faulty" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "private-linux-faulty" machine_type = "e2-micro" zone = var.zone desired_status = "RUNNING" network_interface { network = "default" subnetwork = google_compute_subnetwork.private_subnet.id } tags = ["faulty-vpc-instance-private"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = "debian-cloud/debian-11" # Choose an image } } labels = { foo = "bar" } } # firewall configuration used for connectivity testing resource "google_compute_firewall" "private-linux-egress-deny" { name = "private-linux-egress-deny" network = "default" project = google_project.project.project_id priority = 930 direction = "EGRESS" deny { protocol = "all" } target_tags = google_compute_instance.private-linux-faulty.tags depends_on = [google_compute_instance.private-linux-faulty] } ================================================ FILE: test-data/vpc2/external_connectivity_private_instance_valid.tf ================================================ /** * Copyright 2023 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. */ resource "google_compute_instance" "private-linux-valid" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "private-linux-valid" machine_type = "e2-micro" zone = var.zone desired_status = "RUNNING" network_interface { network = "default" subnetwork = google_compute_subnetwork.private_subnet.id } tags = ["valid-vpc-instance-private"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = "debian-cloud/debian-11" # Choose an image } } labels = { foo = "bar" } } # firewall configuration used for connectivity testing resource "google_compute_firewall" "private-linux-egress-allow" { name = "private-linux-egress-allow" network = "default" project = google_project.project.project_id priority = 920 direction = "EGRESS" allow { protocol = "all" } target_tags = google_compute_instance.private-linux-valid.tags depends_on = [google_compute_instance.private-linux-valid] } ================================================ FILE: test-data/vpc2/external_connectivity_public_instance_faulty.tf ================================================ /** * Copyright 2023 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. */ resource "google_compute_instance" "public-linux-faulty" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "public-linux-faulty" machine_type = "e2-micro" zone = var.zone desired_status = "RUNNING" network_interface { network = "default" subnetwork = google_compute_subnetwork.public_subnet.id access_config {} } tags = ["faulty-vpc-instance"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = "debian-cloud/debian-11" # Choose an image } } labels = { foo = "bar" } } # firewall configuration used for connectivity testing resource "google_compute_firewall" "public-linux-egress-deny" { name = "public-linux-egress-deny" network = "default" project = google_project.project.project_id priority = 910 direction = "EGRESS" deny { protocol = "all" } target_tags = google_compute_instance.public-linux-faulty.tags depends_on = [google_compute_instance.public-linux-faulty] } ================================================ FILE: test-data/vpc2/external_connectivity_public_instance_valid.tf ================================================ /** * Copyright 2023 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. */ resource "google_compute_instance" "public-linux-valid" { project = google_project.project.project_id depends_on = [google_project_service.compute] name = "public-linux-valid" machine_type = "e2-micro" zone = var.zone desired_status = "RUNNING" network_interface { network = "default" subnetwork = google_compute_subnetwork.public_subnet.id access_config {} } tags = ["valid-vpc-instance"] scheduling { preemptible = true automatic_restart = false } boot_disk { initialize_params { image = "debian-cloud/debian-11" # Choose an image } } labels = { foo = "bar" } } # firewall configuration used for connectivity testing resource "google_compute_firewall" "public-linux-egress-allow" { name = "public-linux-egress-allow" network = "default" project = google_project.project.project_id priority = 900 direction = "EGRESS" allow { protocol = "all" } target_tags = google_compute_instance.public-linux-valid.tags depends_on = [google_compute_instance.public-linux-valid] } ================================================ FILE: test-data/vpc2/json-dumps/compute-disks-europe-west2-b.json ================================================ { "kind": "compute#diskList", "id": "projects/gcpdiag-vpc2-runbook/zones/europe-west2-b/disks", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-b/disks" } ================================================ FILE: test-data/vpc2/json-dumps/compute-effective-firewalls-default.json ================================================ { "firewalls": [ { "kind": "compute#firewall", "id": "5258731537686370531", "creationTimestamp": "2024-06-02T19:10:20.564-07:00", "name": "private-linux-egress-deny", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 930, "destinationRanges": [ "0.0.0.0/0" ], "targetTags": [ "faulty-vpc-instance-private" ], "denied": [ { "IPProtocol": "all" } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-deny" }, { "kind": "compute#firewall", "id": "3455842435923767294", "creationTimestamp": "2024-05-30T21:24:49.095-07:00", "name": "default-allow-rdp", "description": "Allow RDP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/default-allow-rdp" }, { "kind": "compute#firewall", "id": "152245658759239907", "creationTimestamp": "2024-06-02T19:10:20.044-07:00", "name": "private-linux-egress-allow", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 920, "destinationRanges": [ "0.0.0.0/0" ], "targetTags": [ "valid-vpc-instance-private" ], "allowed": [ { "IPProtocol": "all" } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-allow" }, { "kind": "compute#firewall", "id": "1755075759400349695", "creationTimestamp": "2024-05-30T21:24:48.970-07:00", "name": "default-allow-internal", "description": "Allow internal traffic on the default network", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "10.128.0.0/9" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/default-allow-internal" }, { "kind": "compute#firewall", "id": "8294557148557383907", "creationTimestamp": "2024-06-02T19:10:20.824-07:00", "name": "public-linux-egress-deny", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 910, "destinationRanges": [ "0.0.0.0/0" ], "targetTags": [ "faulty-vpc-instance" ], "denied": [ { "IPProtocol": "all" } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/public-linux-egress-deny" }, { "kind": "compute#firewall", "id": "3528317728416133118", "creationTimestamp": "2024-05-30T21:24:49.032-07:00", "name": "default-allow-ssh", "description": "Allow SSH from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/default-allow-ssh" }, { "kind": "compute#firewall", "id": "185081169068464356", "creationTimestamp": "2024-06-02T19:10:19.667-07:00", "name": "public-linux-egress-allow", "description": "", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 900, "destinationRanges": [ "0.0.0.0/0" ], "targetTags": [ "valid-vpc-instance" ], "allowed": [ { "IPProtocol": "all" } ], "direction": "EGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/public-linux-egress-allow" }, { "kind": "compute#firewall", "id": "3872261333704830974", "creationTimestamp": "2024-05-30T21:24:49.160-07:00", "name": "default-allow-icmp", "description": "Allow ICMP from anywhere", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 65534, "sourceRanges": [ "0.0.0.0/0" ], "allowed": [ { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/default-allow-icmp" } ], "firewallPolicys": [ { "name": "902824820698", "type": "HIERARCHY", "shortName": "default-firewall-policy", "displayName": "default-firewall-policy", "rules": [ { "kind": "compute#firewallPolicyRule", "description": "", "priority": 0, "match": { "srcIpRanges": [ "34.168.226.0/26", "34.102.114.64/26", "34.16.224.64/26", "34.48.81.64/26", "34.168.146.160/27", "34.16.224.160/27", "34.82.66.0/24", "34.82.90.0/24", "34.82.98.0/24", "34.82.160.0/24", "34.82.166.128/25" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 1, "match": { "destIpRanges": [ "34.83.160.25/32", "34.125.160.60/32" ], "layer4Configs": [ { "ipProtocol": "tcp" }, { "ipProtocol": "udp" } ] }, "action": "allow", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 487, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 488, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS" }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 600, "match": { "srcIpRanges": [ "35.235.240.0/20" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "22", "3389", "5900-5901" ] } ] }, "action": "allow", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 601, "match": { "srcIpRanges": [ "35.191.0.0/16", "130.211.0.0/22", "209.85.152.0/22", "209.85.204.0/22", "169.254.169.254", "108.170.220.0/23" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 602, "match": { "srcIpRanges": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10", "240.0.0.0/4" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 603, "match": { "srcIpRanges": [ "35.199.192.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "53" ] }, { "ipProtocol": "udp", "ports": [ "53" ] } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 604, "match": { "srcIpRanges": [ "107.178.230.64/26", "35.199.224.0/19" ], "layer4Configs": [ { "ipProtocol": "tcp", "ports": [ "667" ] }, { "ipProtocol": "udp", "ports": [ "665-666" ] }, { "ipProtocol": "icmp" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 700, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "deny", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483644, "match": { "destIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483645, "match": { "srcIpRanges": [ "::/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483646, "match": { "destIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "EGRESS", "enableLogging": false }, { "kind": "compute#firewallPolicyRule", "description": "", "priority": 2147483647, "match": { "srcIpRanges": [ "0.0.0.0/0" ], "layer4Configs": [ { "ipProtocol": "all" } ] }, "action": "goto_next", "direction": "INGRESS", "enableLogging": false } ] } ] } ================================================ FILE: test-data/vpc2/json-dumps/compute-instances-europe-west2-b.json ================================================ { "id": "projects/gcpdiag-vpc2-runbook/zones/europe-west2-b/instances", "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-b/instances" } ================================================ FILE: test-data/vpc2/json-dumps/compute-instances-us-central1-a.json ================================================ { "id": "projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances", "items": [ { "canIpForward": false, "cpuPlatform": "Intel Haswell", "creationTimestamp": "2024-06-02T19:10:04.195-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/disks/private-linux-faulty", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "342964849769224982", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2024-06-02T19:10:10.535-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-linux-faulty", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "networkIP": "10.10.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/private-subnet" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-faulty", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "faulty-vpc-instance-private" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a" }, { "canIpForward": false, "cpuPlatform": "Intel Haswell", "creationTimestamp": "2024-06-02T19:10:03.767-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/disks/private-linux-valid", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "7242411489568529174", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2024-06-02T19:10:10.031-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "private-linux-valid", "networkInterfaces": [ { "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "networkIP": "10.10.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/private-subnet" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-valid", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "valid-vpc-instance-private" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a" }, { "canIpForward": false, "cpuPlatform": "Intel Haswell", "creationTimestamp": "2024-06-02T19:10:04.424-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/disks/public-linux-faulty", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "2168525421735353110", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2024-06-02T19:10:09.875-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "public-linux-faulty", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "35.238.187.232", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "networkIP": "10.0.0.3", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/public-subnet" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/public-linux-faulty", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "faulty-vpc-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a" }, { "canIpForward": false, "cpuPlatform": "Intel Haswell", "creationTimestamp": "2024-06-02T19:10:02.494-07:00", "deletionProtection": false, "disks": [ { "architecture": "X86_64", "autoDelete": true, "boot": true, "deviceName": "persistent-disk-0", "diskSizeGb": "10", "guestOsFeatures": [ { "type": "UEFI_COMPATIBLE" }, { "type": "VIRTIO_SCSI_MULTIQUEUE" }, { "type": "GVNIC" }, { "type": "SEV_CAPABLE" } ], "index": 0, "interface": "SCSI", "kind": "compute#attachedDisk", "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye" ], "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/disks/public-linux-valid", "type": "PERSISTENT" } ], "fingerprint": "REDACTED", "id": "3614107599914441494", "kind": "compute#instance", "labelFingerprint": "1TQLkowq0ZY=", "labels": { "foo": "bar" }, "lastStartTimestamp": "2024-06-02T19:10:10.182-07:00", "machineType": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/machineTypes/e2-micro", "metadata": { "fingerprint": "REDACTED", "kind": "compute#metadata" }, "name": "public-linux-valid", "networkInterfaces": [ { "accessConfigs": [ { "kind": "compute#accessConfig", "name": "external-nat", "natIP": "34.172.48.224", "networkTier": "PREMIUM", "type": "ONE_TO_ONE_NAT" } ], "fingerprint": "REDACTED", "kind": "compute#networkInterface", "name": "nic0", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "networkIP": "10.0.0.2", "stackType": "IPV4_ONLY", "subnetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/public-subnet" } ], "satisfiesPzi": false, "scheduling": { "automaticRestart": false, "onHostMaintenance": "TERMINATE", "preemptible": true }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/public-linux-valid", "shieldedInstanceConfig": { "enableIntegrityMonitoring": true, "enableSecureBoot": false, "enableVtpm": true }, "shieldedInstanceIntegrityPolicy": { "updateAutoLearnPolicy": true }, "startRestricted": false, "status": "RUNNING", "tags": { "fingerprint": "REDACTED", "items": [ "valid-vpc-instance" ] }, "zone": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a" } ], "kind": "compute#instanceList", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances" } ================================================ FILE: test-data/vpc2/json-dumps/compute-network-default.json ================================================ { "autoCreateSubnetworks": true, "creationTimestamp": "2024-05-30T21:24:04.557-07:00", "description": "Default network for the project", "id": "7439775982828187147", "kind": "compute#network", "name": "default", "networkFirewallPolicyEnforcementOrder": "AFTER_CLASSIC_FIREWALL", "routingConfig": { "routingMode": "REGIONAL" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/7439775982828187147", "subnetworks": [ "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east5/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-southwest1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/public-subnet", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-central2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west10/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west12/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-east1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west8/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east4/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west9/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east7/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/private-subnet", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/africa-south1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast2/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast1/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west3/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west6/subnetworks/default", "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-north1/subnetworks/default" ] } ================================================ FILE: test-data/vpc2/json-dumps/compute-network-routes.json ================================================ { "kind": "compute#routeList", "id": "projects/gcpdiag-vpc2-runbook/global/routes", "items": [ { "kind": "compute#route", "id": "6504832813046471455", "creationTimestamp": "2024-06-02T19:09:52.075-07:00", "name": "default-route-0256760961424ef9", "description": "Default local route to the subnetwork 10.0.0.0/24.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.0.0.0/24", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-0256760961424ef9" }, { "kind": "compute#route", "id": "5567157631748206080", "creationTimestamp": "2024-05-30T21:24:15.897-07:00", "name": "default-route-098f7fe9ec876980", "description": "Default local route to the subnetwork 10.138.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.138.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-098f7fe9ec876980" }, { "kind": "compute#route", "id": "4975633896561765919", "creationTimestamp": "2024-05-30T21:24:16.048-07:00", "name": "default-route-162969572b253fc6", "description": "Default local route to the subnetwork 10.132.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.132.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-162969572b253fc6" }, { "kind": "compute#route", "id": "6290265124635995648", "creationTimestamp": "2024-05-30T21:24:15.346-07:00", "name": "default-route-32b1ae3462c226b4", "description": "Default local route to the subnetwork 10.202.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.202.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-32b1ae3462c226b4" }, { "kind": "compute#route", "id": "5951494803160362526", "creationTimestamp": "2024-05-30T21:24:17.044-07:00", "name": "default-route-359865837b3f5c4c", "description": "Default local route to the subnetwork 10.210.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.210.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-359865837b3f5c4c" }, { "kind": "compute#route", "id": "1186609843905238139", "creationTimestamp": "2024-05-31T03:46:45.004-07:00", "name": "default-route-3bd81733a6885746", "description": "Default local route to the subnetwork 10.196.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.196.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-3bd81733a6885746" }, { "kind": "compute#route", "id": "9123881136885657118", "creationTimestamp": "2024-05-30T21:24:17.599-07:00", "name": "default-route-3d71e3ffb7b793e2", "description": "Default local route to the subnetwork 10.168.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.168.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-3d71e3ffb7b793e2" }, { "kind": "compute#route", "id": "7308510787146149407", "creationTimestamp": "2024-05-30T21:24:16.683-07:00", "name": "default-route-41a15b5b06c6e5b6", "description": "Default local route to the subnetwork 10.164.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.164.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-41a15b5b06c6e5b6" }, { "kind": "compute#route", "id": "2763373422954475034", "creationTimestamp": "2024-05-30T21:24:21.780-07:00", "name": "default-route-478468a891fadc87", "description": "Default local route to the subnetwork 10.194.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.194.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-478468a891fadc87" }, { "kind": "compute#route", "id": "2607223156694642205", "creationTimestamp": "2024-05-30T21:24:18.874-07:00", "name": "default-route-489ed525a0117f1b", "description": "Default local route to the subnetwork 10.174.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.174.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-489ed525a0117f1b" }, { "kind": "compute#route", "id": "3246083178149244443", "creationTimestamp": "2024-05-30T21:24:20.818-07:00", "name": "default-route-5252c68c47ecb304", "description": "Default local route to the subnetwork 10.148.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.148.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-5252c68c47ecb304" }, { "kind": "compute#route", "id": "8941047407046880798", "creationTimestamp": "2024-05-30T21:24:17.782-07:00", "name": "default-route-5757ee60f1680659", "description": "Default local route to the subnetwork 10.186.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.186.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-5757ee60f1680659" }, { "kind": "compute#route", "id": "4419597277118918175", "creationTimestamp": "2024-05-30T21:24:16.119-07:00", "name": "default-route-594f82c5c4606a64", "description": "Default local route to the subnetwork 10.162.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.162.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-594f82c5c4606a64" }, { "kind": "compute#route", "id": "6353336843931807233", "creationTimestamp": "2024-05-30T21:24:14.531-07:00", "name": "default-route-5a86e4d51373c72a", "description": "Default local route to the subnetwork 10.206.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.206.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-5a86e4d51373c72a" }, { "kind": "compute#route", "id": "2784935868177378847", "creationTimestamp": "2024-05-30T21:24:16.813-07:00", "name": "default-route-65021bdf65c9447c", "description": "Default local route to the subnetwork 10.172.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.172.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-65021bdf65c9447c" }, { "kind": "compute#route", "id": "4432167937724422912", "creationTimestamp": "2024-06-02T19:09:51.807-07:00", "name": "default-route-652ce9d5b5cca29c", "description": "Default local route to the subnetwork 10.10.0.0/24.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.10.0.0/24", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-652ce9d5b5cca29c" }, { "kind": "compute#route", "id": "7343470871747816989", "creationTimestamp": "2024-05-30T21:24:18.316-07:00", "name": "default-route-654bb6ab29dde3b0", "description": "Default local route to the subnetwork 10.208.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.208.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-654bb6ab29dde3b0" }, { "kind": "compute#route", "id": "4236987435335347741", "creationTimestamp": "2024-05-30T21:24:18.444-07:00", "name": "default-route-663f8640c2ad7135", "description": "Default local route to the subnetwork 10.178.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.178.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-663f8640c2ad7135" }, { "kind": "compute#route", "id": "4039912384217017862", "creationTimestamp": "2024-05-30T21:24:09.632-07:00", "name": "default-route-733dd203fb86133b", "description": "Default route to the Internet.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "0.0.0.0/0", "priority": 1000, "nextHopGateway": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/gateways/default-internet-gateway", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-733dd203fb86133b" }, { "kind": "compute#route", "id": "1989173501624643102", "creationTimestamp": "2024-05-30T21:24:17.314-07:00", "name": "default-route-76e7a2d55acd6c17", "description": "Default local route to the subnetwork 10.198.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.198.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-76e7a2d55acd6c17" }, { "kind": "compute#route", "id": "169643802476473882", "creationTimestamp": "2024-05-30T21:24:21.656-07:00", "name": "default-route-780976f08fea61e5", "description": "Default local route to the subnetwork 10.218.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.218.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-780976f08fea61e5" }, { "kind": "compute#route", "id": "449770163751153152", "creationTimestamp": "2024-05-30T21:24:15.936-07:00", "name": "default-route-78ded18ec0e6ec9e", "description": "Default local route to the subnetwork 10.182.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.182.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-78ded18ec0e6ec9e" }, { "kind": "compute#route", "id": "2400967123354840605", "creationTimestamp": "2024-05-30T21:24:18.378-07:00", "name": "default-route-7c67edeed583ea2b", "description": "Default local route to the subnetwork 10.140.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.140.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-7c67edeed583ea2b" }, { "kind": "compute#route", "id": "9217106666220482049", "creationTimestamp": "2024-05-30T21:24:14.156-07:00", "name": "default-route-7f23cca4f2794d4d", "description": "Default local route to the subnetwork 10.128.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.128.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-7f23cca4f2794d4d" }, { "kind": "compute#route", "id": "9023919956369403419", "creationTimestamp": "2024-05-30T21:24:20.632-07:00", "name": "default-route-82895d24b42d3fa4", "description": "Default local route to the subnetwork 10.158.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.158.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-82895d24b42d3fa4" }, { "kind": "compute#route", "id": "6046833533714230808", "creationTimestamp": "2024-05-30T21:24:23.937-07:00", "name": "default-route-8c7c6946e9b3df48", "description": "Default local route to the subnetwork 10.192.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.192.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-8c7c6946e9b3df48" }, { "kind": "compute#route", "id": "3506435050431639064", "creationTimestamp": "2024-05-30T21:24:23.386-07:00", "name": "default-route-8f34df4caa391385", "description": "Default local route to the subnetwork 10.184.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.184.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-8f34df4caa391385" }, { "kind": "compute#route", "id": "5937812733867388447", "creationTimestamp": "2024-05-30T21:24:16.673-07:00", "name": "default-route-8f5bf5cc001fde03", "description": "Default local route to the subnetwork 10.156.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.156.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-8f5bf5cc001fde03" }, { "kind": "compute#route", "id": "6296264682847399455", "creationTimestamp": "2024-05-30T21:24:16.474-07:00", "name": "default-route-901ccc748787fd4e", "description": "Default local route to the subnetwork 10.214.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.214.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-901ccc748787fd4e" }, { "kind": "compute#route", "id": "966807634037763611", "creationTimestamp": "2024-05-30T21:24:20.710-07:00", "name": "default-route-93a00623ff2c9d9b", "description": "Default local route to the subnetwork 10.212.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.212.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-93a00623ff2c9d9b" }, { "kind": "compute#route", "id": "8944993343825752807", "creationTimestamp": "2024-05-31T10:42:32.966-07:00", "name": "default-route-9bad42061d48e9bd", "description": "Default local route to the subnetwork 10.220.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.220.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-9bad42061d48e9bd" }, { "kind": "compute#route", "id": "2920411012277792257", "creationTimestamp": "2024-05-30T21:24:14.730-07:00", "name": "default-route-9f7db9d88de1109a", "description": "Default local route to the subnetwork 10.142.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.142.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-9f7db9d88de1109a" }, { "kind": "compute#route", "id": "6097409105791872543", "creationTimestamp": "2024-05-30T21:24:16.797-07:00", "name": "default-route-ae07c29208f9faea", "description": "Default local route to the subnetwork 10.204.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.204.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-ae07c29208f9faea" }, { "kind": "compute#route", "id": "7409627734771822110", "creationTimestamp": "2024-05-30T21:24:17.816-07:00", "name": "default-route-b13cd7339b5abf15", "description": "Default local route to the subnetwork 10.146.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.146.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-b13cd7339b5abf15" }, { "kind": "compute#route", "id": "1637122277981351455", "creationTimestamp": "2024-05-30T21:24:16.016-07:00", "name": "default-route-c945a8e45ba52c77", "description": "Default local route to the subnetwork 10.188.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.188.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-c945a8e45ba52c77" }, { "kind": "compute#route", "id": "8773365948166237720", "creationTimestamp": "2024-05-30T21:24:23.440-07:00", "name": "default-route-d160f5979c71486e", "description": "Default local route to the subnetwork 10.160.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.160.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-d160f5979c71486e" }, { "kind": "compute#route", "id": "7391783468506869276", "creationTimestamp": "2024-05-30T21:24:19.499-07:00", "name": "default-route-d5fd7f607073d322", "description": "Default local route to the subnetwork 10.152.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.152.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-d5fd7f607073d322" }, { "kind": "compute#route", "id": "3256695458222108188", "creationTimestamp": "2024-05-30T21:24:19.396-07:00", "name": "default-route-d64c41358ef1ef42", "description": "Default local route to the subnetwork 10.166.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.166.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-d64c41358ef1ef42" }, { "kind": "compute#route", "id": "4249506418894630400", "creationTimestamp": "2024-05-30T21:24:15.270-07:00", "name": "default-route-dc8e80c4aec139bb", "description": "Default local route to the subnetwork 10.150.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.150.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-dc8e80c4aec139bb" }, { "kind": "compute#route", "id": "5057211972806045213", "creationTimestamp": "2024-05-30T21:24:18.504-07:00", "name": "default-route-ee8853665c7ab1e9", "description": "Default local route to the subnetwork 10.170.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.170.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-ee8853665c7ab1e9" }, { "kind": "compute#route", "id": "2614791937042214400", "creationTimestamp": "2024-05-30T21:24:16.026-07:00", "name": "default-route-f99d363bdb25a8a8", "description": "Default local route to the subnetwork 10.154.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.154.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-f99d363bdb25a8a8" }, { "kind": "compute#route", "id": "7296526758943452672", "creationTimestamp": "2024-05-30T21:24:15.461-07:00", "name": "default-route-f9c072bbc8f44b2b", "description": "Default local route to the subnetwork 10.180.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.180.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-f9c072bbc8f44b2b" }, { "kind": "compute#route", "id": "405334320437587487", "creationTimestamp": "2024-05-30T21:24:16.633-07:00", "name": "default-route-f9c93e17b1e224fd", "description": "Default local route to the subnetwork 10.200.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.200.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-f9c93e17b1e224fd" }, { "kind": "compute#route", "id": "5853707331362418200", "creationTimestamp": "2024-05-30T21:24:23.900-07:00", "name": "default-route-fc1ecfcfa61f4fde", "description": "Default local route to the subnetwork 10.190.0.0/20.", "network": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "destRange": "10.190.0.0/20", "priority": 0, "nextHopNetwork": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-fc1ecfcfa61f4fde" } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes" } ================================================ FILE: test-data/vpc2/json-dumps/compute-project.json ================================================ { "cloudArmorTier": "CA_STANDARD", "commonInstanceMetadata": { "fingerprint": "mHrypaKBFl8=", "kind": "compute#metadata" }, "creationTimestamp": "2024-05-30T21:23:57.022-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12345601-compute@developer.gserviceaccount.com", "id": "8958047398705557043", "kind": "compute#project", "name": "gcpdiag-vpc2-runbook", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 8 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 0 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 1000, "metric": "HEALTH_CHECKS", "usage": 0 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 0 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 1 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 0 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 60, "metric": "NETWORK_FIREWALL_POLICIES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES", "usage": 0 }, { "limit": 750, "metric": "GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook", "vmDnsSetting": "GLOBAL_DEFAULT", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/vpc2/json-dumps/compute-zones.json ================================================ { "kind": "compute#zoneList", "id": "projects/gcpdiag-vpc2-runbook/zones", "items": [ { "kind": "compute#zone", "id": "2231", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-b", "description": "us-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2233", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-c", "description": "us-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2234", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east1-d", "description": "us-east1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2272", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-c", "description": "us-east4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2271", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-b", "description": "us-east4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2270", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east4-a", "description": "us-east4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2002", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-c", "description": "us-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Arm Development Platform", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2000", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-a", "description": "us-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Arm Development Platform", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2004", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-f", "description": "us-central1-f", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-f", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2001", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-central1-b", "description": "us-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2211", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-b", "description": "us-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2212", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-c", "description": "us-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2210", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west1-a", "description": "us-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2342", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-a", "description": "europe-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west4-a", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2341", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-b", "description": "europe-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west4-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2340", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west4-c", "description": "europe-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west4-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2101", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-b", "description": "europe-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2104", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-d", "description": "europe-west1-d", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west1-d", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2103", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west1-c", "description": "europe-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2300", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-c", "description": "europe-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2301", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-a", "description": "europe-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2302", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west3-b", "description": "europe-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2292", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-c", "description": "europe-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2291", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-b", "description": "europe-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2290", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west2-a", "description": "europe-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2221", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-b", "description": "asia-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2220", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-a", "description": "asia-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2222", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east1-c", "description": "asia-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2261", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-b", "description": "asia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast1-b", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2260", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-a", "description": "asia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Ampere Siryn", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2262", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast1-c", "description": "asia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast1-c", "availableCpuPlatforms": [ "Ampere Altra", "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2251", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-b", "description": "asia-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2252", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-c", "description": "asia-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2250", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast1-a", "description": "asia-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2322", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-c", "description": "asia-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2320", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-b", "description": "asia-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2321", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south1-a", "description": "asia-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2282", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-b", "description": "australia-southeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2280", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-c", "description": "australia-southeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2281", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast1-a", "description": "australia-southeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2311", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-b", "description": "southamerica-east1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-east1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2312", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-c", "description": "southamerica-east1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-east1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2310", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-east1-a", "description": "southamerica-east1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-east1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-east1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2611", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-a", "description": "africa-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/africa-south1-a", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2610", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-b", "description": "africa-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/africa-south1-b", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2612", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "africa-south1-c", "description": "africa-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/africa-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/africa-south1-c", "availableCpuPlatforms": [ "Intel Cascade Lake", "Intel Ice Lake", "AMD Milan", "AMD Rome" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2372", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-a", "description": "asia-east2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2371", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-b", "description": "asia-east2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2370", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-east2-c", "description": "asia-east2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2392", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-a", "description": "asia-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2390", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-b", "description": "asia-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2391", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast2-c", "description": "asia-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2410", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-a", "description": "asia-northeast3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2412", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-b", "description": "asia-northeast3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2411", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-northeast3-c", "description": "asia-northeast3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2470", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-a", "description": "asia-south2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2472", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-b", "description": "asia-south2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2471", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-south2-c", "description": "asia-south2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2440", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-a", "description": "asia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2442", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-b", "description": "asia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2441", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "asia-southeast2-c", "description": "asia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2480", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-a", "description": "australia-southeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2482", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-b", "description": "australia-southeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2481", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "australia-southeast2-c", "description": "australia-southeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2452", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-a", "description": "europe-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2450", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-b", "description": "europe-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2451", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-central2-c", "description": "europe-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2352", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-a", "description": "europe-north1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-north1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2350", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-b", "description": "europe-north1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-north1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2351", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-north1-c", "description": "europe-north1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-north1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-north1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2541", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-a", "description": "europe-southwest1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-southwest1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2540", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-b", "description": "europe-southwest1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-southwest1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2542", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-southwest1-c", "description": "europe-southwest1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-southwest1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-southwest1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2591", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-a", "description": "europe-west10-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west10-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2592", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-b", "description": "europe-west10-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west10-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2590", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west10-c", "description": "europe-west10-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west10", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west10-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2571", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-a", "description": "europe-west12-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west12-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2572", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-b", "description": "europe-west12-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west12-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2570", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west12-c", "description": "europe-west12-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west12", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west12-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2382", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-a", "description": "europe-west6-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west6-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2380", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-b", "description": "europe-west6-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west6-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2381", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west6-c", "description": "europe-west6-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west6", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west6-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2510", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-a", "description": "europe-west8-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west8-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2511", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-b", "description": "europe-west8-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west8-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2512", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west8-c", "description": "europe-west8-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west8", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west8-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2521", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-a", "description": "europe-west9-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west9-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2520", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-b", "description": "europe-west9-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west9-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2522", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "europe-west9-c", "description": "europe-west9-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west9", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west9-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2580", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-a", "description": "me-central1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2581", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-b", "description": "me-central1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2582", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central1-c", "description": "me-central1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2601", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-a", "description": "me-central2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2602", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-b", "description": "me-central2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2600", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-central2-c", "description": "me-central2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2561", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-a", "description": "me-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2560", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-b", "description": "me-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2562", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "me-west1-c", "description": "me-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2330", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-a", "description": "northamerica-northeast1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2331", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-b", "description": "northamerica-northeast1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2332", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast1-c", "description": "northamerica-northeast1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2461", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-a", "description": "northamerica-northeast2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2460", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-b", "description": "northamerica-northeast2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2462", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "northamerica-northeast2-c", "description": "northamerica-northeast2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2490", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-a", "description": "southamerica-west1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-west1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2491", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-b", "description": "southamerica-west1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-west1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2492", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "southamerica-west1-c", "description": "southamerica-west1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-west1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-west1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2532", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-a", "description": "us-east5-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east5-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2531", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-b", "description": "us-east5-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east5-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Emerald Rapids", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2530", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-east5-c", "description": "us-east5-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east5", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east5-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2551", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-a", "description": "us-south1-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-south1-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2552", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-b", "description": "us-south1-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-south1-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2550", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-south1-c", "description": "us-south1-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-south1", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-south1-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2362", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-a", "description": "us-west2-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west2-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2361", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-b", "description": "us-west2-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west2-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2360", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west2-c", "description": "us-west2-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west2", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west2-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2420", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-a", "description": "us-west3-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west3-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2421", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-b", "description": "us-west3-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west3-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2422", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west3-c", "description": "us-west3-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west3", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west3-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": true }, { "kind": "compute#zone", "id": "2431", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-a", "description": "us-west4-a", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west4-a", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "AMD Genoa", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Sapphire Rapids", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2432", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-b", "description": "us-west4-b", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west4-b", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false }, { "kind": "compute#zone", "id": "2430", "creationTimestamp": "1969-12-31T16:00:00.000-08:00", "name": "us-west4-c", "description": "us-west4-c", "status": "UP", "region": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west4", "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west4-c", "availableCpuPlatforms": [ "Intel Broadwell", "Intel Cascade Lake", "Intel Haswell", "Intel Ice Lake", "Intel Ivy Bridge", "AMD Milan", "AMD Rome", "Intel Sandy Bridge", "Intel Skylake" ], "supportsPzs": false } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones" } ================================================ FILE: test-data/vpc2/json-dumps/connectivity-test.json ================================================ { "name": "projects/gcpdiag-vpc2-runbook/locations/global/connectivityTests/vmexternalipconnectivitytest", "source": { "ipAddress": "10.10.0.3", "network": "projects/gcpdiag-vpc2-runbook/global/networks/default", "projectId": "gcpdiag-vpc2-runbook", "cloudFunction": {}, "appEngineVersion": {}, "cloudRunRevision": {} }, "destination": { "ipAddress": "151.101.3.5", "port": 443, "networkType": "NON_GCP_NETWORK", "cloudFunction": {}, "appEngineVersion": {}, "cloudRunRevision": {} }, "protocol": "TCP", "displayName": "vmexternalipconnectivitytest", "createTime": "2024-05-31T16:02:44.883795965Z", "updateTime": "2024-06-04T00:31:09.639861810Z", "reachabilityDetails": { "result": "REACHABLE", "verifyTime": "2024-06-04T00:31:09.450544252Z", "traces": [ { "endpointInfo": { "sourceIp": "10.10.0.3", "destinationIp": "151.101.3.5", "protocol": "TCP", "sourcePort": 63951, "destinationPort": 443, "sourceNetworkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default" }, "steps": [ { "description": "Initial state: packet originating from a Compute Engine instance.", "state": "START_FROM_INSTANCE", "projectId": "gcpdiag-vpc2-runbook", "instance": { "displayName": "private-linux-valid", "uri": "projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-valid", "interface": "nic0", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "internalIp": "10.10.0.3", "networkTags": [ "valid-vpc-instance-private" ] } }, { "description": "Config checking state: verify EGRESS firewall rule.", "state": "APPLY_EGRESS_FIREWALL_RULE", "projectId": "gcpdiag-vpc2-runbook", "firewall": { "displayName": "private-linux-egress-allow", "uri": "projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-allow", "direction": "EGRESS", "action": "ALLOW", "priority": 920, "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "targetTags": [ "valid-vpc-instance-private" ], "firewallRuleType": "VPC_FIREWALL_RULE" } }, { "description": "Config checking state: verify route.", "state": "APPLY_ROUTE", "projectId": "gcpdiag-vpc2-runbook", "route": { "displayName": "default-route-733dd203fb86133b", "uri": "projects/gcpdiag-vpc2-runbook/global/routes/default-route-733dd203fb86133b", "destIpRange": "0.0.0.0/0", "nextHop": "internet gateway", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "priority": 1000, "routeType": "STATIC", "nextHopType": "NEXT_HOP_INTERNET_GATEWAY", "routeScope": "NETWORK" } }, { "description": "Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].", "state": "NAT", "projectId": "gcpdiag-vpc2-runbook", "nat": { "type": "CLOUD_NAT", "protocol": "TCP", "networkUri": "projects/gcpdiag-vpc2-runbook/global/networks/default", "oldSourceIp": "10.10.0.3", "newSourceIp": "34.123.41.124", "oldDestinationIp": "151.101.3.5", "newDestinationIp": "151.101.3.5", "oldSourcePort": 63951, "newSourcePort": 49732, "oldDestinationPort": 443, "newDestinationPort": 443, "routerUri": "projects/gcpdiag-vpc2-runbook/regions/us-central1/routers/nat-router", "natGatewayName": "nat-gateway" } }, { "description": "Final state: packet delivered to Internet.", "state": "DELIVER", "deliver": { "target": "INTERNET", "ipAddress": "151.101.3.5" } } ], "forwardTraceId": 1 } ] }, "probingDetails": { "result": "REACHABLE", "verifyTime": "2024-06-04T00:30:59.820702Z", "sentProbeCount": 50, "successfulProbeCount": 50, "probingLatency": { "latencyPercentiles": [ { "percent": 50, "latencyMicros": "4940" }, { "percent": 95, "latencyMicros": "5094" } ] }, "destinationEgressLocation": { "metropolitanArea": "Chicago, IL, US" } } } ================================================ FILE: test-data/vpc2/json-dumps/iam-policy.json ================================================ { "bindings": [ { "members": [ "serviceAccount:service-12345601@compute-system.iam.gserviceaccount.com" ], "role": "roles/compute.serviceAgent" }, { "members": [ "serviceAccount:service-12345601@container-engine-robot.iam.gserviceaccount.com" ], "role": "roles/container.serviceAgent" }, { "members": [ "serviceAccount:service-12345601@containerregistry.iam.gserviceaccount.com" ], "role": "roles/containerregistry.ServiceAgent" }, { "members": [ "serviceAccount:12345601-compute@developer.gserviceaccount.com", "serviceAccount:12345601@cloudservices.gserviceaccount.com" ], "role": "roles/editor" }, { "members": [ "serviceAccount:service-12345601@gcp-sa-networkmanagement.iam.gserviceaccount.com" ], "role": "roles/networkmanagement.serviceAgent" }, { "members": [ "user:testuser@example.com" ], "role": "roles/owner" }, { "members": [ "serviceAccount:service-12345601@gcp-sa-pubsub.iam.gserviceaccount.com" ], "role": "roles/pubsub.serviceAgent" }, { "members": [ "serviceAccount:service-12345601@gcp-sa-websecurityscanner.iam.gserviceaccount.com" ], "role": "roles/websecurityscanner.serviceAgent" } ], "etag": "BwYZxH9u9WI=", "version": 1 } ================================================ FILE: test-data/vpc2/json-dumps/iam-service-accounts.json ================================================ { "accounts": [ { "displayName": "Compute Engine default service account", "email": "12345601-compute@developer.gserviceaccount.com", "etag": "MDEwMjE5MjA=", "name": "projects/gcpdiag-vpc2-runbook/serviceAccounts/12345601-compute@developer.gserviceaccount.com", "oauth2ClientId": "REDACTED", "projectId": "gcpdiag-vpc2-runbook", "uniqueId": "111906885506070469088" } ] } ================================================ FILE: test-data/vpc2/json-dumps/monitoring-query-instance-dropped-received-packets-count.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.instance_id" } ], "pointDescriptors": [ { "key": "value_dropped_received_packets_count_aggregate", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "{packet}/s" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "7242411489568529174" } ], "pointData": [ { "values": [ { "doubleValue": 0 } ], "timeInterval": { "startTime": "2024-06-03T23:26:31.812631Z", "endTime": "2024-06-03T23:26:31.812631Z" } } ] } ] } ================================================ FILE: test-data/vpc2/json-dumps/monitoring-query-nat-allocation-failed.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.project_id" }, { "key": "resource.region" }, { "key": "resource.router_id" }, { "key": "resource.gateway_name" } ], "pointDescriptors": [ { "key": "value.nat_allocation_failed", "valueType": "BOOL", "metricKind": "GAUGE" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "gcpdiag-vpc2-runbook" }, { "stringValue": "us-central1" }, { "stringValue": "3282795716781579009" }, { "stringValue": "nat-gateway" } ], "pointData": [ { "values": [ { "boolValue": false } ], "timeInterval": { "startTime": "2024-06-03T02:12:00Z", "endTime": "2024-06-03T02:12:00Z" } }, { "values": [ { "boolValue": false } ], "timeInterval": { "startTime": "2024-06-03T02:11:00Z", "endTime": "2024-06-03T02:11:00Z" } } ] } ] } ================================================ FILE: test-data/vpc2/json-dumps/monitoring-query-nat-dropped-received-packets-count.json ================================================ { "timeSeriesDescriptor": { "pointDescriptors": [ { "key": "value_dropped_received_packets_count_aggregate", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "{packet}/s" } ] }, "timeSeriesData": [ { "pointData": [ { "values": [ { "doubleValue": 0 } ], "timeInterval": { "startTime": "2024-06-03T22:38:30.599128Z", "endTime": "2024-06-03T22:38:30.599128Z" } } ] } ] } ================================================ FILE: test-data/vpc2/json-dumps/monitoring-query-nat-dropped-sent-packets-count.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "metric.reason" } ], "pointDescriptors": [ { "key": "value_dropped_sent_packets_count_aggregate", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "{packet}/s" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "ENDPOINT_INDEPENDENCE_CONFLICT" } ], "pointData": [ { "values": [ { "doubleValue": 0 } ], "timeInterval": { "startTime": "2024-06-03T22:37:27.897428Z", "endTime": "2024-06-03T22:37:27.897428Z" } } ] }, { "labelValues": [ { "stringValue": "OUT_OF_RESOURCES" } ], "pointData": [ { "values": [ { "doubleValue": 0 } ], "timeInterval": { "startTime": "2024-06-03T22:37:27.897428Z", "endTime": "2024-06-03T22:37:27.897428Z" } } ] } ] } ================================================ FILE: test-data/vpc2/json-dumps/project.json ================================================ { "name": "projects/12345602", "parent": "folders/222222222222", "projectId": "gcpdiag-vpc2-runbook", "state": "ACTIVE", "displayName": "gcpdiag-vpc2-runbook", "createTime": "2024-05-31T04:17:56.682276Z", "updateTime": "2024-05-31T04:17:56.682276Z", "etag": "W/\"c4bf534f1f39f587\"", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/vpc2/json-dumps/services.json ================================================ { "services": [ { "name": "projects/12345601/services/analyticshub.googleapis.com", "config": { "name": "analyticshub.googleapis.com", "title": "Analytics Hub API", "documentation": { "summary": "Exchange data and analytics assets securely and efficiently." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/artifactregistry.googleapis.com", "config": { "name": "artifactregistry.googleapis.com", "title": "Artifact Registry API", "documentation": { "summary": "Store and manage build artifacts in a scalable and integrated service built on Google infrastructure." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "artifactregistry.googleapis.com/Location", "displayName": "Artifact Registry Location", "description": "A location in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "artifactregistry.googleapis.com/Project", "displayName": "Artifact Registry Project", "description": "A Cloud project in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "BETA" }, { "type": "artifactregistry.googleapis.com/Repository", "displayName": "Artifact Registry Repository", "description": "A repository in Artifact Registry.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my_project\" or \"organizations/5678\"." }, { "key": "location", "description": "Location of resource." }, { "key": "repository_id", "description": "The identifier of the Artifact Registry repository, such as \"my_repository\"." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/project_region_upstream_host_reads", "artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage", "artifactregistry.googleapis.com/region_upstream_host_reads", "artifactregistry.googleapis.com/us_multi_region_upstream_host_reads" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Location", "metrics": [ "artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit", "artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Project", "metrics": [ "artifactregistry.googleapis.com/project/api/request_count", "artifactregistry.googleapis.com/project/api/request_latencies", "artifactregistry.googleapis.com/project/request_count", "artifactregistry.googleapis.com/project/request_latencies" ] }, { "monitoredResource": "artifactregistry.googleapis.com/Repository", "metrics": [ "artifactregistry.googleapis.com/repository/api/request_count", "artifactregistry.googleapis.com/repository/api/request_latencies", "artifactregistry.googleapis.com/repository/request_count", "artifactregistry.googleapis.com/repository/request_latencies", "artifactregistry.googleapis.com/repository/size" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/autoscaling.googleapis.com", "config": { "name": "autoscaling.googleapis.com", "title": "Cloud Autoscaling API", "documentation": { "summary": "An API for the Cloud Autoscaling for consuming autoscaling signals.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/bigquery.googleapis.com", "config": { "name": "bigquery.googleapis.com", "title": "BigQuery API", "documentation": { "summary": "A data platform for customers to create, manage, share and query data." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquery.googleapis.com/Table", "displayName": "BigQuery Table Resource.", "description": "BigQuery Table Resource.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container associated with this resource, such as \"my-project\" or \"organizations/123\"." }, { "key": "location", "description": "The cloud location of the BigQuery table." }, { "key": "table_reference", "description": "The table reference in the format of project_id:dataset_id.table_id for the BigQuery table." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/Location", "displayName": "CheckIamPolicy Request Location", "description": "A BigQuery Location (sometimes called Region).", "labels": [ { "key": "resource_container", "description": "The id of the GCP resource container associated with this resource." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget", "description": "Differential Privacy Budget.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." }, { "key": "multi_region", "description": "The multi-region identifier for the associated resource (e.g \"us\", \"eu\"). Used only for multi-region quota metrics." } ], "launchStage": "ALPHA" }, { "type": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "displayName": "Differential Privacy Budget External", "description": "Differential Privacy Budget exposed externally to provide privacy budget metrics.", "labels": [ { "key": "resource_container", "description": "The GCP container associated with the metric." }, { "key": "location", "description": "Location for the quota." }, { "key": "budget_id", "description": "A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets)." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded", "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget", "bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/exceeded", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/Location", "metrics": [ "bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit" ] }, { "monitoredResource": "bigquery.googleapis.com/Table", "metrics": [ "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit", "bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/InternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/usage", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit", "bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/privacybudget/dp_delta_budget", "bigquery.googleapis.com/privacybudget/dp_epsilon_budget", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded" ] }, { "monitoredResource": "bigquery.googleapis.com/ExternalDifferentialPrivacyBudget", "metrics": [ "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit", "bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/bigqueryconnection.googleapis.com", "config": { "name": "bigqueryconnection.googleapis.com", "title": "BigQuery Connection API", "documentation": { "summary": "Allows users to manage BigQuery connections to external data sources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/bigquerydatapolicy.googleapis.com", "config": { "name": "bigquerydatapolicy.googleapis.com", "title": "BigQuery Data Policy API", "documentation": { "summary": "Allows users to manage BigQuery data policies." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/bigquerymigration.googleapis.com", "config": { "name": "bigquerymigration.googleapis.com", "title": "BigQuery Migration API", "documentation": { "summary": "The migration service, exposing apis for migration jobs operations, and agent management." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/bigqueryreservation.googleapis.com", "config": { "name": "bigqueryreservation.googleapis.com", "title": "BigQuery Reservation API", "documentation": { "summary": "A service to modify your BigQuery flat-rate reservations." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/bigquerystorage.googleapis.com", "config": { "name": "bigquerystorage.googleapis.com", "title": "BigQuery Storage API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "bigquerystorage.googleapis.com/DataflowWrite", "displayName": "BigQuery Storage Write API metrics for Dataflow jobs.", "description": "BigQuery Storage Write API metrics for Dataflow jobs.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job." }, { "key": "location", "description": "The BigQuery region in which the Storage API server locates." }, { "key": "job_name", "description": "The name of the Dataflow job this worker belongs to." }, { "key": "job_id", "description": "The id of the dataflow job the worker belongs to." }, { "key": "worker_id", "description": "The ID of the worker, unique for this job_id." }, { "key": "destination_project", "description": "The project of BigQuery destination table of the Dataflow job." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "bigquerystorage.googleapis.com/DataflowWrite", "metrics": [ "bigquerystorage.googleapis.com/dataflow_write/request_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count", "bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count", "bigquerystorage.googleapis.com/dataflow_write/connection_results_count", "bigquerystorage.googleapis.com/dataflow_write/server_side_latencies", "bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies", "bigquerystorage.googleapis.com/dataflow_write/concurrent_connections" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/compute.googleapis.com", "config": { "name": "compute.googleapis.com", "title": "Compute Engine API", "documentation": { "summary": "Creates and runs virtual machines on Google Cloud Platform.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "compute.googleapis.com/VpcNetwork", "displayName": "VPC Network", "description": "VPC Network.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the VPC Network." }, { "key": "location", "description": "Location of the VPC Network, global always." }, { "key": "network_id", "description": "VPC Network resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Location", "displayName": "Compute Location", "description": "A location in the Compute API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Compute Location." }, { "key": "location", "description": "Location of resource." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/Interconnect", "displayName": "Interconnect", "description": "Interconnect.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the Interconnect." }, { "key": "location", "description": "Location of the Interconnect." }, { "key": "interconnect_id", "description": "Interconnect resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/FirewallPolicy", "displayName": "Firewall policy", "description": "Firewall policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project or organization) associated with the firewall policy." }, { "key": "location", "description": "Location of the firewall policy." }, { "key": "firewall_policy_id", "description": "Firewall policy resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/OperationType", "displayName": "Operation Type", "description": "Operation Type.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the operation." }, { "key": "location", "description": "Location of the operation." }, { "key": "operation_type", "description": "Operation type." } ], "launchStage": "ALPHA" }, { "type": "compute.googleapis.com/Reservation", "displayName": "Reservation", "description": "Monitored resource representing a reservation.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The zone that contains the reservation." }, { "key": "reservation_id", "description": "Reservation resource ID." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/StoragePool", "displayName": "Storage Pool", "description": "Monitored resource representing a storage pool.", "labels": [ { "key": "resource_container", "description": "The GCP container (e.g. project number) associated with the reservation." }, { "key": "location", "description": "The location that contains the storage pool." }, { "key": "storage_pool_id", "description": "Numerical resource ID of the storage pool." } ], "launchStage": "ALPHA" }, { "type": "gce_instance", "displayName": "VM Instance", "description": "A virtual machine instance hosted in Compute Engine.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"." }, { "key": "instance_id", "description": "The numeric VM instance identifier assigned by Compute Engine." }, { "key": "zone", "description": "The Compute Engine zone in which the VM is running." } ], "launchStage": "GA" }, { "type": "compute.googleapis.com/SecurityPolicy", "displayName": "Security policy", "description": "Security policy.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP container (i.e. project) associated with the security policy." }, { "key": "location", "description": "Location of the security policy." }, { "key": "security_policy_id", "description": "Security policy resource ID." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/dynamic_routes_per_region_per_peering_group", "compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/instances_per_peering_group", "compute.googleapis.com/instances_per_vpc_network", "compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network", "compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group", "compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network", "compute.googleapis.com/ip_aliases_per_peering_group", "compute.googleapis.com/ip_aliases_per_vpc_network", "compute.googleapis.com/peerings_per_vpc_network", "compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network", "compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network", "compute.googleapis.com/psc_propagated_connections_per_vpc_network", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/instances_per_peering_group/exceeded", "compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/instances_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded", "compute.googleapis.com/quota/peerings_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded", "compute.googleapis.com/quota/static_routes_per_peering_group/exceeded", "compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded", "compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network", "compute.googleapis.com/static_routes_per_peering_group", "compute.googleapis.com/static_routes_per_vpc_network", "compute.googleapis.com/subnet_ranges_per_peering_group", "compute.googleapis.com/subnet_ranges_per_vpc_network" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/cpus_per_vm_family", "compute.googleapis.com/global_dns/request_count", "compute.googleapis.com/gpus_per_gpu_family", "compute.googleapis.com/inter_region_egress_bandwidth", "compute.googleapis.com/local_ssd_total_storage_per_vm_family", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded", "compute.googleapis.com/quota/cpus_per_vm_family/exceeded", "compute.googleapis.com/quota/gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded", "compute.googleapis.com/quota/inter_region_egress_bandwidth/usage", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded", "compute.googleapis.com/quota/tpus_per_tpu_family/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/interconnect_attachments_per_interconnect", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/fqdns_per_global_network_firewall_policy", "compute.googleapis.com/fqdns_per_regional_network_firewall_policy", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded", "compute.googleapis.com/rule_attributes_per_global_network_firewall_policy", "compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/global_concurrent_operations", "compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded", "compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded", "compute.googleapis.com/regional_concurrent_operations" ] }, { "monitoredResource": "gce_instance", "metrics": [ "compute.googleapis.com/instance/global_dns/request_count" ] }, { "monitoredResource": "compute.googleapis.com/Reservation", "metrics": [ "compute.googleapis.com/reservation/reserved", "compute.googleapis.com/reservation/assured", "compute.googleapis.com/reservation/used", "compute.googleapis.com/reservation/internal/matching_instances", "compute.googleapis.com/reservation/internal/prespuns_by_state" ] }, { "monitoredResource": "compute.googleapis.com/StoragePool", "metrics": [ "compute.googleapis.com/storage_pool/disks", "compute.googleapis.com/storage_pool/provisioned_capacity", "compute.googleapis.com/storage_pool/used_capacity", "compute.googleapis.com/storage_pool/total_disk_provisioned_capacity", "compute.googleapis.com/storage_pool/provisioned_iops", "compute.googleapis.com/storage_pool/used_iops", "compute.googleapis.com/storage_pool/total_disk_provisioned_iops", "compute.googleapis.com/storage_pool/provisioned_throughput", "compute.googleapis.com/storage_pool/used_throughput", "compute.googleapis.com/storage_pool/total_disk_provisioned_throughput", "compute.googleapis.com/storage_pool/capacity_utilization", "compute.googleapis.com/storage_pool/iops_utilization", "compute.googleapis.com/storage_pool/throughput_utilization" ] }, { "monitoredResource": "compute.googleapis.com/Location", "metrics": [ "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit", "compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage", "compute.googleapis.com/quota/cpus_per_vm_family/limit", "compute.googleapis.com/quota/cpus_per_vm_family/usage", "compute.googleapis.com/quota/gpus_per_gpu_family/limit", "compute.googleapis.com/quota/gpus_per_gpu_family/usage", "compute.googleapis.com/quota/inter_region_egress_bandwidth/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit", "compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit", "compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit", "compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit", "compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage", "compute.googleapis.com/quota/tpus_per_tpu_family/limit", "compute.googleapis.com/quota/tpus_per_tpu_family/usage" ] }, { "monitoredResource": "compute.googleapis.com/VpcNetwork", "metrics": [ "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit", "compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit", "compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage", "compute.googleapis.com/quota/instances_per_peering_group/limit", "compute.googleapis.com/quota/instances_per_peering_group/usage", "compute.googleapis.com/quota/instances_per_regional_vpc_network/limit", "compute.googleapis.com/quota/instances_per_regional_vpc_network/usage", "compute.googleapis.com/quota/instances_per_vpc_network/limit", "compute.googleapis.com/quota/instances_per_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_peering_group/limit", "compute.googleapis.com/quota/ip_aliases_per_peering_group/usage", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit", "compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage", "compute.googleapis.com/quota/peerings_per_vpc_network/limit", "compute.googleapis.com/quota/peerings_per_vpc_network/usage", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_connections_per_vpc_network/usage", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit", "compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit", "compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit", "compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit", "compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit", "compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage", "compute.googleapis.com/quota/static_routes_per_peering_group/limit", "compute.googleapis.com/quota/static_routes_per_peering_group/usage", "compute.googleapis.com/quota/static_routes_per_vpc_network/limit", "compute.googleapis.com/quota/static_routes_per_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit", "compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit", "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage" ] }, { "monitoredResource": "compute.googleapis.com/Interconnect", "metrics": [ "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit", "compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage" ] }, { "monitoredResource": "compute.googleapis.com/FirewallPolicy", "metrics": [ "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit", "compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage" ] }, { "monitoredResource": "compute.googleapis.com/OperationType", "metrics": [ "compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit", "compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded", "compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded" ] }, { "monitoredResource": "compute.googleapis.com/SecurityPolicy", "metrics": [ "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage", "compute.googleapis.com/quota/advanced_rules_per_security_policy/limit", "compute.googleapis.com/quota/advanced_rules_per_security_policy/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/container.googleapis.com", "config": { "name": "container.googleapis.com", "title": "Kubernetes Engine API", "documentation": { "summary": "Builds and manages container-based applications, powered by the open source Kubernetes technology." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoredResources": [ { "type": "container.googleapis.com/Cluster", "displayName": "Kubernetes Cluster Limits", "description": "Kubernetes Cluster.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." } ], "launchStage": "BETA" }, { "type": "container.googleapis.com/NodePool", "displayName": "GKE Node Pool", "description": "GKE Node Pool.", "labels": [ { "key": "resource_container", "description": "Project or organization." }, { "key": "location", "description": "Region or zone where the cluster was created." }, { "key": "cluster_name", "description": "Cluster name." }, { "key": "node_pool_name", "description": "Node pool name." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/containers_per_cluster_autopilot", "container.googleapis.com/quota/containers_per_cluster_standard", "container.googleapis.com/quota/etcd_database_size_bytes", "container.googleapis.com/quota/nodes_per_cluster", "container.googleapis.com/quota/pods_per_cluster_autopilot", "container.googleapis.com/quota/pods_per_cluster_standard", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded", "container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded", "container.googleapis.com/quota/quota/nodes_per_cluster/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded", "container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/nodes_per_node_pool", "container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded" ] }, { "monitoredResource": "container.googleapis.com/Cluster", "metrics": [ "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/containers_per_cluster_standard/limit", "container.googleapis.com/quota/quota/containers_per_cluster_standard/usage", "container.googleapis.com/quota/quota/etcd_database_size_bytes/limit", "container.googleapis.com/quota/quota/etcd_database_size_bytes/usage", "container.googleapis.com/quota/quota/etcd_database_size_gib/limit", "container.googleapis.com/quota/quota/etcd_database_size_gib/usage", "container.googleapis.com/quota/quota/nodes_per_cluster/limit", "container.googleapis.com/quota/quota/nodes_per_cluster/usage", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit", "container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage", "container.googleapis.com/quota/quota/pods_per_cluster_standard/limit", "container.googleapis.com/quota/quota/pods_per_cluster_standard/usage" ] }, { "monitoredResource": "container.googleapis.com/NodePool", "metrics": [ "container.googleapis.com/quota/quota/nodes_per_node_pool/limit", "container.googleapis.com/quota/quota/nodes_per_node_pool/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/containerfilesystem.googleapis.com", "config": { "name": "containerfilesystem.googleapis.com", "title": "Container File System API", "documentation": { "summary": "Stream images stored in Artifact Registry to GKE\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/containerregistry.googleapis.com", "config": { "name": "containerregistry.googleapis.com", "title": "Container Registry API", "documentation": { "summary": "Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/dataform.googleapis.com", "config": { "name": "dataform.googleapis.com", "title": "Dataform API", "documentation": { "summary": "Service to develop, version control, and operationalize SQL pipelines in BigQuery." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/dataplex.googleapis.com", "config": { "name": "dataplex.googleapis.com", "title": "Cloud Dataplex API", "documentation": { "summary": "Dataplex API is used to manage the lifecycle of data lakes." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "dataplex.googleapis.com/Lake", "displayName": "Cloud Dataplex Lake", "description": "A Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of this Lake resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Zone", "displayName": "Cloud Dataplex Zone", "description": "A Zone within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of this Zone resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Asset", "displayName": "Cloud Dataplex Asset", "description": "An Asset within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "zone_id", "description": "The identifier of the Zone resource containing this resource." }, { "key": "asset_id", "description": "The identifier of this Asset resource." } ], "launchStage": "BETA" }, { "type": "dataplex.googleapis.com/Environment", "displayName": "Cloud Dataplex Environment", "description": "An Environment within a Cloud Dataplex Lake.", "labels": [ { "key": "resource_container", "description": "The identifier of GCP project associated with this resource." }, { "key": "location", "description": "The GCP region associated with this resource." }, { "key": "lake_id", "description": "The identifier of the Lake resource containing this resource." }, { "key": "environment_id", "description": "The identifier of this Environment resource." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "dataplex.googleapis.com/Lake", "metrics": [ "dataplex.googleapis.com/lake/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Zone", "metrics": [ "dataplex.googleapis.com/zone/requires_action" ] }, { "monitoredResource": "dataplex.googleapis.com/Asset", "metrics": [ "dataplex.googleapis.com/asset/requires_action", "dataplex.googleapis.com/asset/active", "dataplex.googleapis.com/asset/data_items", "dataplex.googleapis.com/asset/data_size", "dataplex.googleapis.com/asset/tables", "dataplex.googleapis.com/asset/filesets", "dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates", "dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/dns.googleapis.com", "config": { "name": "dns.googleapis.com", "title": "Cloud DNS API", "documentation": {}, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/billing-enabled" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/gkebackup.googleapis.com", "config": { "name": "gkebackup.googleapis.com", "title": "Backup for GKE API", "documentation": { "summary": "Backup for GKE is a managed Kubernetes workload backup and restore service\nfor GKE clusters." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "gkebackup.googleapis.com/BackupPlan", "displayName": "GKE Backup Plan", "description": "A backup plan provides configuration, location, and management functions for a sequence of backups.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this backupPlan resides." }, { "key": "backup_plan_id", "description": "The name of the backupPlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/RestorePlan", "displayName": "GKE Restore Plan", "description": "A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud container associated with the resource." }, { "key": "location", "description": "The Google Cloud location where this restorePlan resides." }, { "key": "restore_plan_id", "description": "The name of the restorePlan." } ], "launchStage": "GA" }, { "type": "gkebackup.googleapis.com/Project", "displayName": "Backup for GKE Project", "description": "A Project in the Backup for GKE API.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource." }, { "key": "location", "description": "The Google Cloud location of the resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "gkebackup.googleapis.com/BackupPlan", "metrics": [ "gkebackup.googleapis.com/backup_created_count", "gkebackup.googleapis.com/backup_deleted_count", "gkebackup.googleapis.com/backup_completion_times" ] }, { "monitoredResource": "gkebackup.googleapis.com/RestorePlan", "metrics": [ "gkebackup.googleapis.com/restore_created_count" ] }, { "monitoredResource": "gkebackup.googleapis.com/Project", "metrics": [ "gkebackup.googleapis.com/internal/backup_plan_created_count", "gkebackup.googleapis.com/internal/backup_plan_existence" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/iam.googleapis.com", "config": { "name": "iam.googleapis.com", "title": "Identity and Access Management (IAM) API", "documentation": { "summary": "Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "iam_service_account", "displayName": "IAM Service Account", "description": "An IAM Service Account.", "labels": [ { "key": "project_id", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "unique_id", "description": "The unique_id of the service account." } ], "launchStage": "GA" }, { "type": "iam.googleapis.com/WorkloadIdentityPoolProvider", "displayName": "Workload Identity Pool Provider", "description": "A workload identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this resource, such as 'my-project'." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workload identity pool parent resource." }, { "key": "provider_id", "description": "The ID of the workload identity pool provider resource." } ], "launchStage": "BETA" }, { "type": "iam.googleapis.com/WorkforcePoolProvider", "displayName": "Workforce Identity Pool Provider", "description": "A workforce identity pool provider.", "labels": [ { "key": "resource_container", "description": "The identifier of the Google Cloud organization associated with this resource." }, { "key": "location", "description": "The location of the resource." }, { "key": "pool_id", "description": "The ID of the provider's workforce pool parent resource." }, { "key": "provider_id", "description": "The ID of the workforce pool provider resource." } ], "launchStage": "ALPHA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "iam.googleapis.com/WorkloadIdentityPoolProvider", "metrics": [ "iam.googleapis.com/workload_identity_federation/count", "iam.googleapis.com/workload_identity_federation/key_usage_count" ] }, { "monitoredResource": "iam_service_account", "metrics": [ "iam.googleapis.com/service_account/authn_events_count", "iam.googleapis.com/service_account/key/authn_events_count", "iam.googleapis.com/service_account/authn_events_count_preprod", "iam.googleapis.com/service_account/key/authn_events_count_preprod" ] }, { "monitoredResource": "iam.googleapis.com/WorkforcePoolProvider", "metrics": [ "iam.googleapis.com/workforce_identity_federation/count" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/iamcredentials.googleapis.com", "config": { "name": "iamcredentials.googleapis.com", "title": "IAM Service Account Credentials API", "documentation": { "summary": "Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/monitoring.googleapis.com", "config": { "name": "monitoring.googleapis.com", "title": "Cloud Monitoring API", "documentation": { "summary": "Manages your Cloud Monitoring data and configurations.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "monitoring.googleapis.com/ChargedProject", "displayName": "Cloud monitoring target", "description": "A cloud monitoring specialization target schema of cloud.ChargedProject.", "labels": [ { "key": "resource_container", "description": "The monitored resource container. Could be project, workspace, etc." }, { "key": "location", "description": "The service-specific notion of location." }, { "key": "service", "description": "The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com')." } ], "launchStage": "ALPHA" }, { "type": "monitoring.googleapis.com/MetricStatistics", "displayName": "Metric Statistics", "description": "Information about a user-written metric in Cloud Monitoring.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The cloud region where the metric was received." }, { "key": "metric_type", "description": "The metric type." } ], "launchStage": "BETA" }, { "type": "monitoring.googleapis.com/MetricIngestionAttribution", "displayName": "Metric Ingestion Attribution", "description": "Attribution for metric ingestion.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project to which the metric is written, such as 'my-project'." }, { "key": "location", "description": "The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received." }, { "key": "attribution_dimension", "description": "The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \"namespace\" and \"cluster\" are supported." }, { "key": "attribution_id", "description": "The attribution id of the source of the metric write." } ], "launchStage": "BETA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "monitoring.googleapis.com/ChargedProject", "metrics": [ "monitoring.googleapis.com/billing/bytes_ingested", "monitoring.googleapis.com/billing/samples_ingested", "monitoring.googleapis.com/internal/billing/gke_enterprise_samples_ingested", "monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested", "monitoring.googleapis.com/internal/stats/filtered_sample_count", "monitoring.googleapis.com/internal/stats/filtered_byte_count", "monitoring.googleapis.com/internal/stats/metrics_queried_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricStatistics", "metrics": [ "monitoring.googleapis.com/collection/write_request_count", "monitoring.googleapis.com/collection/write_request_point_count" ] }, { "monitoredResource": "monitoring.googleapis.com/MetricIngestionAttribution", "metrics": [ "monitoring.googleapis.com/collection/attribution/sample_count", "monitoring.googleapis.com/collection/attribution/write_sample_count" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/networkconnectivity.googleapis.com", "config": { "name": "networkconnectivity.googleapis.com", "title": "Network Connectivity API", "documentation": { "summary": "This API enables connectivity with and between Google Cloud resources." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoredResources": [ { "type": "networkconnectivity.googleapis.com/Hub", "displayName": "Network Connectivity Hub", "description": "A Network Connectivity hub.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP resource container that this hub is in." }, { "key": "location", "description": "The identifier of the location that this hub is in." }, { "key": "hub_id", "description": "The identifier of this hub." } ], "launchStage": "GA" }, { "type": "networkconnectivity.googleapis.com/RouteTable", "displayName": "Network Connectivity Route Table", "description": "A route table associated with a Network Connectivity hub.", "labels": [ { "key": "resource_container", "description": "The identifier of the GCP project associated with this route table." }, { "key": "location", "description": "The identifier of the location that this route table is in." }, { "key": "hub_id", "description": "The identifier of the hub that is associated with this route table." }, { "key": "route_table_id", "description": "The identifier of this route table." } ], "launchStage": "GA" } ], "monitoring": { "consumerDestinations": [ { "monitoredResource": "networkconnectivity.googleapis.com/Hub", "metrics": [ "networkconnectivity.googleapis.com/active_vpc_spokes_per_hub", "networkconnectivity.googleapis.com/groups_per_hub", "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/exceeded", "networkconnectivity.googleapis.com/quota/groups_per_hub/exceeded" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/RouteTable", "metrics": [ "networkconnectivity.googleapis.com/quota/routes_per_route_table/exceeded", "networkconnectivity.googleapis.com/routes_per_route_table" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/Hub", "metrics": [ "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/limit", "networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/usage", "networkconnectivity.googleapis.com/quota/groups_per_hub/limit", "networkconnectivity.googleapis.com/quota/groups_per_hub/usage" ] }, { "monitoredResource": "networkconnectivity.googleapis.com/RouteTable", "metrics": [ "networkconnectivity.googleapis.com/quota/routes_per_route_table/limit", "networkconnectivity.googleapis.com/quota/routes_per_route_table/usage" ] } ] } }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/networkmanagement.googleapis.com", "config": { "name": "networkmanagement.googleapis.com", "title": "Network Management API", "documentation": { "summary": "The Network Management API provides a collection of network performance monitoring and diagnostic capabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud", "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/oslogin.googleapis.com", "config": { "name": "oslogin.googleapis.com", "title": "Cloud OS Login API", "documentation": { "summary": "You can use OS Login to manage access to your VM instances using IAM roles." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/storage-api.googleapis.com", "config": { "name": "storage-api.googleapis.com", "title": "Google Cloud Storage JSON API", "documentation": { "summary": "Lets you store and retrieve potentially-large, immutable data objects." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" }, { "name": "projects/12345601/services/websecurityscanner.googleapis.com", "config": { "name": "websecurityscanner.googleapis.com", "title": "Web Security Scanner API", "documentation": { "summary": "Scans your Compute and App Engine apps for common web vulnerabilities." }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, "state": "ENABLED", "parent": "projects/12345601" } ] } ================================================ FILE: test-data/vpc2/network.tf ================================================ /** * Copyright 2023 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. */ # Public Subnet resource "google_compute_subnetwork" "public_subnet" { name = "public-subnet" project = google_project.project.project_id network = "default" ip_cidr_range = "10.0.0.0/24" # Adjust as needed region = var.region } # Private Subnet resource "google_compute_subnetwork" "private_subnet" { name = "private-subnet" project = google_project.project.project_id network = "default" ip_cidr_range = "10.10.0.0/24" # Adjust as needed region = var.region } # Cloud Router resource "google_compute_router" "nat_router" { name = "nat-router" region = var.region network = "default" project = google_project.project.project_id } # Cloud NAT Gateway resource "google_compute_router_nat" "nat_gateway" { name = "nat-gateway" router = google_compute_router.nat_router.name region = var.region nat_ip_allocate_option = "AUTO_ONLY" # Allocate ephemeral IP automatically source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES" project = google_project.project.project_id log_config { enable = true filter = "ERRORS_ONLY" } } ================================================ FILE: test-data/vpc2/project.tf ================================================ /** * Copyright 2021 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. */ resource "random_string" "project_id_suffix" { length = 8 numeric = true lower = true upper = false special = false } resource "google_project" "project" { name = "gcpdiag-vpc2-runbook" project_id = var.project_id != "" ? var.project_id : "gcpdiag-vpc2-${random_string.project_id_suffix.id}" org_id = var.folder_id == "" ? var.org_id : null folder_id = var.folder_id != "" ? var.folder_id : null //billing_account = var.billing_account_id labels = { gcpdiag : "test" } lifecycle { ignore_changes = all } } resource "google_project_service" "compute" { project = google_project.project.project_id service = "compute.googleapis.com" } data "google_compute_default_service_account" "default" { project = google_project.project.project_id depends_on = [google_project_service.compute] } output "project_id" { value = google_project.project.project_id } output "project_id_suffix" { value = random_string.project_id_suffix.id } output "project_nr" { value = google_project.project.number } output "org_id" { value = var.org_id } ================================================ FILE: test-data/vpc2/variables.tf ================================================ /** * Copyright 2023 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. */ variable "org_id" {} variable "project_id" { //default = "use-an-existing-test-project" } variable "billing_account_id" {} variable "region" { default = "us-central1" } variable "zone" { default = "us-central1-a" } variable "folder_id" { default = "" } variable "roles" { description = "List of SSH related roles to assign" type = list(string) default = [ "roles/owner", "roles/compute.osLogin", "roles/compute.osAdminLogin", "roles/iam.serviceAccountUser", "roles/iap.tunnelResourceAccessor", "roles/compute.instanceAdmin.v1", ] } ================================================ FILE: test-data/vpn/json-dumps/compute-project.json ================================================ { "commonInstanceMetadata": { "fingerprint": "5WfGmP2rsbA=", "items": [ { "key": "serial-port-logging-enable", "value": "true" }, { "key": "gke-gke1-f36cf6dd-cidr", "value": "default:10.0.0.0/14" } ], "kind": "compute#metadata" }, "creationTimestamp": "2022-04-26T08:19:36.093-07:00", "defaultNetworkTier": "PREMIUM", "defaultServiceAccount": "12340001-compute@developer.gserviceaccount.com", "id": "7145890083999429480", "kind": "compute#project", "name": "gcpdiag-vpn1-aaaa", "quotas": [ { "limit": 10000, "metric": "SNAPSHOTS", "usage": 0 }, { "limit": 30, "metric": "NETWORKS", "usage": 1 }, { "limit": 500, "metric": "FIREWALLS", "usage": 8 }, { "limit": 5000, "metric": "IMAGES", "usage": 0 }, { "limit": 175, "metric": "STATIC_ADDRESSES", "usage": 0 }, { "limit": 300, "metric": "ROUTES", "usage": 5 }, { "limit": 150, "metric": "FORWARDING_RULES", "usage": 0 }, { "limit": 500, "metric": "TARGET_POOLS", "usage": 0 }, { "limit": 500, "metric": "HEALTH_CHECKS", "usage": 0 }, { "limit": 575, "metric": "IN_USE_ADDRESSES", "usage": 0 }, { "limit": 500, "metric": "TARGET_INSTANCES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTP_PROXIES", "usage": 0 }, { "limit": 100, "metric": "URL_MAPS", "usage": 0 }, { "limit": 150, "metric": "BACKEND_SERVICES", "usage": 0 }, { "limit": 1000, "metric": "INSTANCE_TEMPLATES", "usage": 2 }, { "limit": 50, "metric": "TARGET_VPN_GATEWAYS", "usage": 0 }, { "limit": 100, "metric": "VPN_TUNNELS", "usage": 0 }, { "limit": 30, "metric": "BACKEND_BUCKETS", "usage": 0 }, { "limit": 20, "metric": "ROUTERS", "usage": 0 }, { "limit": 100, "metric": "TARGET_SSL_PROXIES", "usage": 0 }, { "limit": 100, "metric": "TARGET_HTTPS_PROXIES", "usage": 0 }, { "limit": 100, "metric": "SSL_CERTIFICATES", "usage": 0 }, { "limit": 275, "metric": "SUBNETWORKS", "usage": 35 }, { "limit": 100, "metric": "TARGET_TCP_PROXIES", "usage": 0 }, { "limit": 10, "metric": "SECURITY_POLICIES", "usage": 0 }, { "limit": 200, "metric": "SECURITY_POLICY_RULES", "usage": 0 }, { "limit": 1000, "metric": "XPN_SERVICE_PROJECTS", "usage": 0 }, { "limit": 150, "metric": "PACKET_MIRRORINGS", "usage": 0 }, { "limit": 1000, "metric": "NETWORK_ENDPOINT_GROUPS", "usage": 0 }, { "limit": 6, "metric": "INTERCONNECTS", "usage": 0 }, { "limit": 5000, "metric": "GLOBAL_INTERNAL_ADDRESSES", "usage": 0 }, { "limit": 50, "metric": "VPN_GATEWAYS", "usage": 0 }, { "limit": 5000, "metric": "MACHINE_IMAGES", "usage": 0 }, { "limit": 20, "metric": "SECURITY_POLICY_CEVAL_RULES", "usage": 0 }, { "limit": 50, "metric": "EXTERNAL_VPN_GATEWAYS", "usage": 0 }, { "limit": 1, "metric": "PUBLIC_ADVERTISED_PREFIXES", "usage": 0 }, { "limit": 10, "metric": "PUBLIC_DELEGATED_PREFIXES", "usage": 0 }, { "limit": 1024, "metric": "STATIC_BYOIP_ADDRESSES", "usage": 0 }, { "limit": 150, "metric": "INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES", "usage": 0 }, { "limit": 150, "metric": "GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES", "usage": 0 } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa", "xpnProjectStatus": "UNSPECIFIED_XPN_PROJECT_STATUS" } ================================================ FILE: test-data/vpn/json-dumps/logging-entries-1.json ================================================ { "entries": [ ] } ================================================ FILE: test-data/vpn/json-dumps/monitoring-query.json ================================================ { "timeSeriesDescriptor": { "labelDescriptors": [ { "key": "resource.zone" }, { "key": "metric.instance_name" } ], "pointDescriptors": [ { "key": "value_uptime_total_aggregate_mean", "valueType": "DOUBLE", "metricKind": "GAUGE", "unit": "s" }, { "key": "value_uptime_total_aggregate_count", "valueType": "INT64", "metricKind": "GAUGE", "unit": "1" } ] }, "timeSeriesData": [ { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "mig-7pvl" } ], "pointData": [ { "values": [ { "doubleValue": 70829 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70559 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "mig-4h21" } ], "pointData": [ { "values": [ { "doubleValue": 70829 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70559 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "gce2" } ], "pointData": [ { "values": [ { "doubleValue": 70889 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70619 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west4-a" }, { "stringValue": "gce1" } ], "pointData": [ { "values": [ { "doubleValue": 70889 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70619 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-35923fbc-k05c" } ], "pointData": [ { "values": [ { "doubleValue": 70829 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70559 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-35923fbc-fv50" } ], "pointData": [ { "values": [ { "doubleValue": 70770 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70500 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-35923fbc-c12f" } ], "pointData": [ { "values": [ { "doubleValue": 70829 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70559 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] }, { "labelValues": [ { "stringValue": "europe-west1-b" }, { "stringValue": "gke-gke1-default-pool-35923fbc-2xxp" } ], "pointData": [ { "values": [ { "doubleValue": 70769 }, { "int64Value": "4" } ], "timeInterval": { "startTime": "2022-04-27T11:05:16.345995Z", "endTime": "2022-04-27T11:05:16.345995Z" } }, { "values": [ { "doubleValue": 70499 }, { "int64Value": "5" } ], "timeInterval": { "startTime": "2022-04-27T11:00:16.345995Z", "endTime": "2022-04-27T11:00:16.345995Z" } } ] } ] } ================================================ FILE: test-data/vpn/json-dumps/project.json ================================================ { "name": "projects/12340001", "parent": "organizations/11112222", "projectId": "gcpdiag-vpn1-aaaa", "state": "ACTIVE", "displayName": "gcpdiag test - gce1", "createTime": "2022-04-26T15:18:57.559Z", "updateTime": "2022-04-26T15:18:59.029Z", "etag": "MQV1kuwMB6N2UKQqCiihhA==", "labels": { "gcpdiag": "test" } } ================================================ FILE: test-data/vpn/json-dumps/vpn-tunnel-1.json ================================================ { "name": "vpn-tunnel-1", "id": "123456789", "status": "ESTABLISHED", "peerIp": "1.1.1.1", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa/regions/europe-west4/routers/r1", "localTrafficSelector": ["0.0.0.0/0"], "remoteTrafficSelector": ["0.0.0.0/0"], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1" } ================================================ FILE: test-data/vpn/json-dumps/vpn-tunnel-down.json ================================================ { "name": "vpn-tunnel-down", "id": "987654321", "status": "FIRST_HANDSHAKE", "peerIp": "1.1.1.1", "router": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa/regions/europe-west4/routers/r1", "localTrafficSelector": ["0.0.0.0/0"], "remoteTrafficSelector": ["0.0.0.0/0"], "selfLink": "https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-down" } ================================================ FILE: test-data/web/Makefile ================================================ CURL = exec curl all: \ static/cloud-google-com-kubernetes-engine-docs-release-schedule \ static/cloud-google-com-data-fusion-docs-support-version-support-policy \ static/cloud-google-com-data-fusion-docs-concepts-configure-clusters static/cloud-google-com-data-fusion-docs-concepts-configure-clusters-test: $(CURL) -fsS \ 'https://cloud.google.com/data-fusion/docs/concepts/configure-clusters' \ --header "Content-Type:text/html" > $@ static/cloud-google-com-data-fusion-docs-support-version-support-policy-test: $(CURL) -fsS \ 'https://cloud.google.com/data-fusion/docs/support/version-support-policy' \ --header "Content-Type:text/html" > $@ static/cloud-google-com-kubernetes-engine-docs-release-schedule-test: $(CURL) -fsS \ 'https://cloud.google.com/kubernetes-engine/docs/release-schedule' \ --header "Content-Type:text/html" > $@ ================================================ FILE: test-data/web/static/cloud-google-com-data-fusion-docs-concepts-configure-clusters ================================================

Dataproc cluster configuration

In Cloud Data Fusion, cluster configuration refers to defining how your data processing pipelines utilize computational resources when running Spark jobs on Dataproc. This page describes the main approaches to cluster configuration.

Default ephemeral clusters (recommended)

Using the default clusters is the recommended approach for Cloud Data Fusion pipelines.

  • Cloud Data Fusion automatically provisions and manages ephemeral Dataproc clusters for each pipeline execution. It creates a cluster at the beginning of the pipeline run, and then deletes it after the pipeline run completes.
  • Benefits of ephemeral clusters:
    • Simplicity: you don't need to manually configure or manage the cluster.
    • Cost-effectiveness: you only pay for the resources used during pipeline execution.

To adjust clusters and tune performance, see Cluster sizing.

Static clusters (for specific scenarios)

In the following scenarios, you can use static clusters:

  • Long-running pipelines: for pipelines that run continuously or for extended periods, a static cluster can be more cost-effective than repeatedly creating and tearing down ephemeral clusters.
  • Centralized cluster management: if your organization requires centralized control over cluster creation and management policies, static clusters can be used alongside tools like Terraform.
  • Cluster creation time: when the time it takes to create a new cluster for every pipeline is prohibitive for your use case.

However, static clusters require more manual configuration and involve managing the cluster lifecycle yourself.

To use a static cluster, you must set the following property on the Dataproc cluster:

dataproc:dataproc.conscrypt.provider.enable=false

Cluster configuration options for static clusters

If you choose to use static clusters, Cloud Data Fusion offers configuration options for the following aspects:

  • Worker machine type: specify the virtual machine type for the worker nodes in your cluster. This determines the vCPUs and memory available for each worker.
  • Number of workers: define the initial number of worker nodes in your cluster. Dataproc might still autoscale this number, based on workload.
  • Zone: select your cluster's Google Cloud zone. Location can affect data locality and network performance.
  • Additional configurations: you can configure advanced options for your static cluster, such as preemption settings, network settings, and initialization actions.

Best practices

When creating a static cluster for your pipelines, use the following configurations.

Parameters Description
yarn.nodemanager.delete.debug-delay-sec Retains YARN logs.
Recommended value: 86400 (equivalent to one day)
yarn.nodemanager.pmem-check-enabled Enables YARN to check for physical memory limits and kill containers if they go beyond physical memory.
Recommended value: false
yarn.nodemanager.vmem-check-enabled Enables YARN to check for virtual memory limits and kill containers if they go beyond physical memory.
Recommended value: false.

For more information, see Run a pipeline against an existing Dataproc cluster.

Reusing clusters

You can reuse Dataproc clusters between runs to improve processing time. Cluster reuse is implemented in a model similar to connection pooling or thread pooling. Any cluster is kept up and running for a specified time after the run is finished. When a new run is started, it will try to find an idle cluster available that matches the configuration of the compute profile. If one is present, it will be used, otherwise a new cluster will be started.

Considerations for reusing clusters

  • Clusters are not shared. Similar to the regular ephemeral cluster provisioning model, a cluster runs a single pipeline run at a time. A cluster is reused only if it is idle.
  • If you enable cluster reuse for all your runs, the necessary number of clusters to process all your runs will be created as needed. Similar to the ephemeral Dataproc provisioner, there is no direct control on the number of clusters created. You can still use Google Cloud quotes to manage resources. For example, if you run 100 runs with 7 maximum parallel runs, you will have up to 7 clusters at a given point of time.
  • Clusters are reused between different pipelines as soon as those pipelines are using the same profile and share the same profile settings. If profile customization is used, clusters will still be reused, but only if customizations are exactly the same, including all cluster settings like cluster labeling.

  • When cluster reuse is enabled, there are two main cost considerations:

    • Less resources are used for cluster startup and initialization.
    • More resources are used for clusters to sit idle between the pipeline runs and after the last pipeline run.

While it's hard to predict the cost effect of cluster reuse, you can employ a strategy to get maximum savings. The strategy is to identify a critical path for chained pipelines and enable cluster reuse for this critical path. This would ensure the cluster is immediately reused, no idle time is wasted and maximum performance benefits are achieved.

Enable Cluster Reuse

In the Compute Config section of deployed pipeline configuration or when creating new compute profile:

  • Enable Skip Cluster Delete.
  • Max Idle Time is the time up to which a cluster waits for the next pipeline to reuse it. The default Max Idle Time is 30 minutes. For Max Idle Time, consider the cost versus cluster availability for reuse. The higher the value of Max Idle Time, the more clusters sit idle, ready for a run.

Troubleshoot: Version compatibility

Problem: The version of your Cloud Data Fusion environment might not be compatible with the version of your Dataproc cluster.

Recommended: Upgrade to the latest Cloud Data Fusion version and use one of the supported Dataproc versions.

Earlier versions of Cloud Data Fusion are only compatible with unsupported versions of Dataproc. Dataproc does not provide updates and support for clusters created with these versions. Although you can continue running a cluster that was created with an unsupported version, we recommend replacing it with one created with a supported version.

Cloud Data Fusion version Dataproc version
6.7 1.3**
6.4-6.6 2.0 *, 1.3 **
6.1-6.3 1.3**

* Cloud Data Fusion versions 6.4 and later are compatible with supported versions of Dataproc. Unless specific OS features are needed, the recommended practice is to specify the major.minor image version.
To specify the OS version used in your Dataproc cluster, the OS version must be compatible with one of the supported Dataproc versions for your Cloud Data Fusion in the preceding table.

** Cloud Data Fusion versions 6.1 to 6.6 are compatible with unsupported Dataproc version 1.3.

What's next

================================================ FILE: test-data/web/static/cloud-google-com-data-fusion-docs-support-version-support-policy ================================================ Version support policy  |  Cloud Data Fusion Documentation  |  Google Cloud

Version support policy

A major or minor version of Cloud Data Fusion environment is supported for a specific period of time after it is released. During that period, Cloud Data Fusion instances that use the environment version are supported. After that period, instances that continue to use the environment version are no longer supported. When a version is not supported, existing instances will continue to work, but no new instances can be created. No additional fixes will be made and, if you have issues, Cloud Customer Care will recommend upgrading your environment to the latest version.

Cloud Data Fusion version support is defined as follows:

  • 0-18 months after a major or minor version of Cloud Data Fusion environment is released: Cloud Data Fusion instances running the version are supported.

  • Beyond 18 months after a major or minor version of Cloud Data Fusion environment is released: Cloud Data Fusion instances running the version are unsupported and need to be updated to regain support.

Versions are not supported after the following dates:

Cloud Data Fusion minor version GA release date Last day of support
6.9 September 7, 2023 March 31, 2025
6.8 February 28, 2023 August 31, 2024
6.7 August 15, 2022 February 28, 2023
6.6 April 1, 2022 October 31, 2023
6.5 November 5, 2021 May 31, 2023
6.4 May 27, 2021 November 30, 2022
6.3 * January 21, 2021 July 31, 2022
6.2 * September 30, 2020 March 31, 2022
6.1 * December 10, 2019 June 30, 2021

* Versions 6.1 through 6.3 use an unsupported version of Dataproc. See Version compatibility.

close
================================================ FILE: test-data/web/static/cloud-google-com-kubernetes-engine-docs-release-schedule ================================================

Estimated schedule for release channels

GKE automatically upgrades clusters in a release channel on or after the dates specified in the Auto Upgrade column of the following schedule. The patches of a minor version remain available in all release channels until the end of standard support (formerly known as end of life), except for clusters enrolled in the Extended channel, where the minor version and its patches remain available until the end of extended support. When choosing a version older than the default version for the channel, you can use maintenance exclusions to prevent a cluster from being automatically upgraded until its end of support date.

Dates are best-effort predictions and are updated periodically when new information becomes available. Consider the English language documentation as the source of truth if the dates in other languages differ due to delays in translation.

See the following schedule for clusters enrolled in a release channel follow this schedule:

Minor version (release date) Rapid Regular Stable Extended End of standard support (formerly end of life)3 End of extended support3
Available1 Auto Upgrade2 Available1 Auto Upgrade2 Available1 Auto Upgrade2 Available1 Auto Upgrade2
1.26 2023-02-21 2023-06-16 2023-04-07 2023-06-23 2023-06-16 2024-01-25 N/A5 N/A5 2024-06-304 N/A5
1.27 2023-06-09 2023-08-09 2023-06-16 2024-02-03 2023-07-06 2024-04-29 2023-06-16 2025-04-14 2024-10-01 2025-06-14
1.28 2023-09-04 2024-01-05 2023-11-30 2024-06-11 2024-01-05 2024-07-23 2023-11-30 2025-10-04 2025-02-04 2025-12-04
1.29 2024-01-05 2024-04-15 2024-01-25 2024-07-09 2024-06-11 2024-08-09 2024-01-25 2025-11-25 2025-03-21 2026-01-25
1.30 2024-04-29 2024-07-30 2024-07-30 2024-09-17 2024-08-13 2024-09-24 2024-07-30 2026-04 2025-09-30 2026-07-30
1.31 2024-08-20 2024-09-17 2024-106 2024-116 2024-106 2024-126 2024-106 2026-04 2025-Q46 2026-Q46
================================================ FILE: website/api_render.py ================================================ #!/usr/bin/env python3 # Copyright 2021 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. # pylint: disable=cyclic-import """Generates API documentation for queries modules""" import textwrap from pathlib import Path import pdoc pwd = Path().parent modules = pwd / '..' / 'gcpdiag' output = pwd / 'content' / 'en' / 'docs' / 'development' / 'api' pdoc.render.configure(template_directory=pwd / 'assets' / 'pdoc_templates', docformat='google') def customize_index_file(file_directory, page_title, page_link_title, page_weight, page_description) -> None: """pdoc creates an index.html file per directory, however Hugo expects _index.html file. This method removes the default index.html file and creates a custom one per directory Args: file_directory (pathlib.PosixPath): Path to parent directory containing index.html file. page_tile (str): Title for the index page. page_link_title (str): Used for creating a link to the index page. page_weight (int): Used for ordering the index page in lists. page_description (str): """ filename = file_directory / 'index.html' # For backward compartibility with 3.7 without missing_ok flag try: filename.unlink() except FileNotFoundError: pass new_filename = file_directory / '_index.html' try: new_filename.unlink() except FileNotFoundError: pass new_filename.write_text( textwrap.dedent(f''' --- title: {page_title} linkTitle: {page_link_title} weight: {page_weight} description: > {page_description} --- ''')) # Generate API documentation for queries module queries_output = output / 'queries' queries = modules / 'queries' query_modules = [] for module in queries.iterdir(): if (module.suffix == '.py' and 'test' not in module.name and 'stub' not in module.name and '__init__' not in module.name): query_modules.append(module) # Create output directory if it does not exist if not queries_output.exists(): queries_output.mkdir(parents=True) pdoc.pdoc(*query_modules, output_directory=queries_output) # Generate API documentation for models module models_output = output / 'models' models = modules / 'models.py' # Create output directory if it does not exist if not models_output.exists(): models_output.mkdir(parents=True) pdoc.pdoc(models, output_directory=models_output) # Customize api index.html title = 'API Documentation' link_title = 'API' weight = 100 description = 'Documentation for reusable libraries' customize_index_file(output, title, link_title, weight, description) # Customize queries index.html title = 'Queries module' link_title = 'Queries' weight = 100 description = 'Documentation for queries module' customize_index_file(queries_output, title, link_title, weight, description) # Customize models index.html title = 'Models module' link_title = 'Models' weight = 100 description = 'Documentation for models module' customize_index_file(models_output, title, link_title, weight, description) ================================================ FILE: website/archetypes/default.md ================================================ --- title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} draft: true --- ================================================ FILE: website/assets/pdoc_templates/frame.html.jinja2 ================================================ {% block content %}{% endblock %} {% filter minify_css %} {% block style %} {# The same CSS files as in pdoc's default template, except for layout.css. You may leave out Bootstrap Reboot, which corrects inconsistences across browsers but may conflict with you website's stylesheet. #} {% endblock %} {% endfilter %}
{% block attribution %}{% endblock %}
================================================ FILE: website/assets/pdoc_templates/module.html.jinja2 ================================================ {% macro description(var) %} {% if var.docstring %} {{ var.docstring.replace('\r', '').replace('\n', ' ') }} {% endif %} {% endmacro %} --- title: {{ module.modulename }} linkTitle: {{ module.name }} weight: 2 description: > {{ description(module) }} --- {% block module_info %}{% endblock %} {% extends "default/module.html.jinja2" %} ================================================ FILE: website/assets/scss/_variables_project.scss ================================================ // based on the great work done by the Agones team: https://agones.dev/site/ // https://coolors.co/ffffff-0e8ec4-0b3954-ff5a5f-c81d25 $white: #ffffffff; $blue-ncs: #0e8ec4ff; $prussian-blue: #0b3954ff; $sizzling-red: #ff5a5fff; $lava: #c81d25ff; $sapphire-blue: #006b99ff; $display1-weight: 500 !default; $display2-weight: 100 !default; $primary: rgb(255, 255,255) !default; $primary-light: lighten($primary, 75%) !default; $secondary: $prussian-blue !default; $light: $white !default; $grey: #888 !default; $orange: $secondary; $td-sidebar-tree-root-color: #222 !default; .td-toc #TableOfContents a { color: #444 !important; } .td-toc #TableOfContents a:hover { color: #3176d9 !important; } .nav-shadow { box-shadow: 0 2px 2px -2px rgba(0,0,0,.2); } .navbar-brand { color: black !important } .control-bar { display: none; } .td-navbar .td-search-input { background: rgba(190, 185, 185, 0.3) !important; } input[type="search"]::placeholder { color: #9B9595 !important; } .td-box--secondary p > a:hover { color: #121314 !important; } #community a { color: #121314 !important; } .showcase img { margin: 0 30px; } img#gcpdiag-demo-cover { object-fit: none; /* will not be resized */ object-position: 0 0; /* clip to your coordinates*/ width: 550px; height: 260px; border-radius: 5px; } @media (min-width: 992px) { .td-content pre { max-width: 99% !important; } } ================================================ FILE: website/config.toml ================================================ baseURL = "/" title = "gcpdiag" enableRobotsTXT = true contentDir = "content/en" defaultContentLanguage = "en" defaultContentLanguageInSubdir = false enableMissingTranslationPlaceholders = true disablePathToLower = true [module] [[module.imports]] path = "github.com/google/docsy" version = "v0.12.0" [[module.imports]] path = "github.com/google/docsy/dependencies" # disable taxonomies disableKinds = ["taxonomy", "taxonomyTerm"] # # Highlighting config pygmentsCodeFences = true pygmentsUseClasses = false #pygmentsOptions = "linenos=table" pygmentsStyle = "tango" [[menu.main]] name = "GitHub" weight = 50 pre = "" url = "https://github.com/GoogleCloudPlatform/gcpdiag" [permalinks] blog = "/:section/:year/:month/:day/:slug/" # Configuration of Goldmark Markdown parser (Replacing deprecated BlackFriday Markdown) [markup.goldmark.renderer] unsafe = true # Image processing configuration. [imaging] resampleFilter = "CatmullRom" quality = 75 anchor = "smart" [services] [services.googleAnalytics] # Comment out the next line to disable GA tracking. Also disables the feature described in [params.ui.feedback]. id = "UA-00000000-0" # Language configuration [languages] [languages.en] title = "gcpdiag" description = "Diagnostics for GCP" languageName ="English" weight = 1 [outputs] section = ["HTML"] [params] github_repo = "https://github.com/GoogleCloudPlatform/gcpdiag" github_subdir = "website" github_branch= "main" gcs_engine_id = "b920527de2312a391" copyright = "Google LLC" privacy_policy = "/privacy/" images = ["images/website-preview.jpg"] [params.ui] navbar_logo = false breadcrumb_disable = true sidebar_search_disable = true # sidebar_menu_compact = true sidebar_menu_foldable = true ul_show = 1 [params.ui.feedback] enable = false [params.links] [[params.links.developer]] name = "GitHub" url = "https://github.com/GoogleCloudPlatform/gcpdiag" icon = "fab fa-github" desc = "Development takes place here!" [deployment] order = [".jpg$", ".gif$"] [[deployment.targets]] name = "gcs-staging" URL = "gs://gcpdiag-website-staging" [[deployment.targets]] name = "gcs-prod" URL = "gs://gcpdiag-website-prod" [[deployment.matchers]] # Cache static assets for 1 year. pattern = "^.+\\.(js|css|svg|ttf)$" cacheControl = "max-age=31536000, no-transform, public" gzip = true [[deployment.matchers]] pattern = "^.+\\.(png|jpg)$" cacheControl = "max-age=31536000, no-transform, public" gzip = false [[deployment.matchers]] # Set custom content type for /sitemap.xml pattern = "^sitemap\\.xml$" contentType = "application/xml" gzip = true [[deployment.matchers]] pattern = "^.+\\.(html|xml|json)$" gzip = true ================================================ FILE: website/content/en/_index.html ================================================ --- title: gcpdiag linkTitle: gcpdiag --- {{< blocks/cover title="" image_anchor="top" height="min" color="white" >}}
}}"> Learn More Releases

Helps you smoothly run infrastructure on GCP.

{{< blocks/link-down color="secondary" >}}
{{< /blocks/cover >}} {{< blocks/lead color="secondary" >}}

What is gcpdiag?

gcpdiag is a command-line diagnostics tool for GCP customers. It finds and helps to fix common issues in Google Cloud Platform projects. It is used to test projects against a wide range of best practices and common mistakes, based on the troubleshooting experience of the Google Cloud Support team.

gcpdiag is an open-source community project, and not an officially supported Google product.

{{< /blocks/lead >}} {{< blocks/section color="dark" >}} {{% blocks/feature icon="fas fa-scroll" title="A Test Suite for GCP" url="./docs/" %}} gcpdiag works similarly like code testing. The lint command runs a test suite to detect whether the project is deviating from a list of expected conditions and creates a report. {{% /blocks/feature %}} {{% blocks/feature icon="fas fa-hat-wizard" title="Troubleshooting by Google Cloud Support TSEs" url="./docs/" %}} gcpdiag includes automated diagnostics based on the troubleshooting experience of Google Cloud Support's Technical Solution Engineers, solving real customer issues. {{% /blocks/feature %}} {{% blocks/feature icon="fab fa-github" title="Open Source" url="https://github.com/GoogleCloudPlatform/gcpdiag" %}} gcpdiag is an open-source project hosted on GitHub, and contributors are welcome! We encourage you to file GitHub issues for any idea or problem that you have, and also welcome code contributions. {{% /blocks/feature %}} {{< /blocks/section >}} ================================================ FILE: website/content/en/docs/_index.md ================================================ --- title: "Documentation" linkTitle: "Documentation" menu: main: weight: 20 pre: description: > User and development guides for gcpdiag. --- ================================================ FILE: website/content/en/docs/authentication.md ================================================ --- title: "Authentication" linkTitle: "Authentication" weight: 5 description: > Authentication mechanisms. --- gcpdiag supports authentication using multiple mechanisms: 1. Application default credentials gcpdiag can use Cloud SDK's [Application Default Credentials](https://google-auth.readthedocs.io/en/latest/reference/google.auth.html#google.auth.default). This might require that you first run `gcloud auth login --update-adc` to update the cached credentials. This is the default in Cloud Shell because in that environment, ADC credentials are automatically provisioned. 1. Service account key You can also use the `--auth-key` parameter to specify the [private key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys) of a service account. The credentials that you use with gcpdiag needs to have at minimum the following roles granted (both of them): - `Viewer` on the inspected project - `Service Usage Consumer` on the project used for billing/quota enforcement, which is per default the project being inspected, but can be explicitly set using the `--billing-project` option The Editor and Owner roles include all the required permissions, but we recommend that if you use service account authentication (`--auth-key`), you only grant the Viewer+Service Usage Consumer on that service account. ================================================ FILE: website/content/en/docs/development/_index.md ================================================ --- title: "Development Guides" linkTitle: "Development" weight: 100 description: > How to contribute to gcpdiag. --- ================================================ FILE: website/content/en/docs/development/architecture.md ================================================ --- title: "gcpdiag Architecture" linkTitle: "Architecture" weight: 2 description: > gcpdiag internal code architecture. --- ## Overview gcpdiag exclusively uses **public APIs** and is designed to be a sort of test suite or **linter**, where each lint rule verifies a single aspect of a GCP project that might be problematic. Example: the IAM permissions of a service account are not set correctly so a GCE instance can't send logs to Cloud Logging. The high-level architecture of gcpdiag looks as follows: ![gcpdiag architecture diagram](/images/gcpdiag-architecture.png) Every lint rule (e.g. `gce/bp_2021_001` above) is represented as a Python module that registers to the main command gcpdiag with some metadata about the lint rule, and the implementation of a `run_rule()` method to run the rule checking code. Writing new rules should be as easy and quick as possible, to foster a lively and up-to-date set of rules. ## Queries Modules Any queries that are done to the GCP API are done via so-called "queries" modules, which encapsulate all the queries that are required by gcpdiag lint rules. The queries are separated from the lint rules to **facilitate code reuse** and also to **improve performance**. Most queries done by the query modules cache their results, so that subsequent queries are very fast. This is necessary because if every rule needs to do GCP API calls every time that it needs to verify something, the lint command would take too long to run. The queries modules are also used to make the implementation of the **lint rules as simple as possible**. Also, we strive for very good test coverage only for the queries modules and not for lint rules. ## Context Objects gcpdiag allows users to select the resources that should be inspected by specifying the following criteria: - Project id (mandatory, e.g.: `my-project-id`) - Regions list (e.g.: `us-central1`, `europe-west2`) - Labels list (e.g.: `{'environment': 'prod'}`, `{'environment': 'pre-prod'}` When all three are specified, all must match (the values in the lists are ORed). **`models.Context`** (see: [models.py](http://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/models.py#L30)) represents the filter given by the user and is used in queries modules to select resources. ## Resource Objects Queries modules generally return objects that implement the **`models.Resource`** abstract class. A Resource object represents a single resource in GCP and must have these three methods: - `project_id` (property) - `full_path` (property) - returns the full path of this resource (e.g.: `projects/gcpdiag-gke-1-9b90/zones/europe-west4-a/clusters/gke1`) - `short_path` (property) - returns the short name for this resource (e.g.: `gcpdiag-gke-1-9b90/europe-west4-a/gke1`) Queries modules provide functions that generally require as input a `Context` object and return a dictionary or list of `Resource`. It is the responsibility of those functions to implement the filtering according to the provided context. For example, [gke.py](http://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/queries/gke.py) provides: ```python def get_clusters(context: models.Context) -> Mapping[str, gke.Cluster] ``` Resource objects provide abstraction to retrieve attributes of these resources, so for example for a `gke.Cluster` object you can for example use the `has_logging_enabled()` method to check whether logging is enabled: ```python for c in gke.get_clusters(context).values() if c.has_logging_enabled(): ... ``` Note that we don't strive to have a complete model for all resources in GCP, because that would be way beyond the scope of this project. We are only implementing the functionality that is needed in linting rules, nothing more. Lint rules are not allowed to access the APIs directly and are also discouraged to access internal resource representations. ## LintReportRuleInterface Lint rules need to report their findings back to the user and we want a way to do that that is both very simple from a rule-implementation point of view, but also allows flexibility in structuring the output in a beautiful way in the console, or also to provide alternative output formats such as JSON or HTML. The way we achieve that is by abstracting all the lint rule reporting into an object, that is passed to the lint rule executor, and that is used to report back the findings. The interface looks as follows: ```python class LintReportRuleInterface: def add_skipped(self, resource: Optional[models.Resource], reason: str, short_info: str = None): def add_ok(self, resource: models.Resource, short_info: str = ''): def add_failed(self, resource: models.Resource, reason: str, short_info: str = None): ``` Rule modules are given a Context object to determine what they should analyze, and a LintReportRuleInterface object to report back their findings. The findings can be for any resource one of: - Skipped (the rule is not relevant / can't be checked) - OK - Failed The following diagram shows the information flow: ![LintReport diagram](/images/lintreport-diagram.png) ## Rule Modules Creating a new rule should require not more than a page-length of code, because all the complex querying logic should be implemented in the reusable queries modules. Each rule implements the rule checking logic as Python functions: - **run_rule**(*context*: models.Context, *report*: lint.LintReportRuleInterface): This function is the main function used to run the rule logic on a certain *context* (list of projects + resource selectors). The function is supposed to provide results about the rule evaluation using the *report* interface. - **prefetch\_rule**(*context*: models.Context): Each run_rule function is called in order of rule execution, one function at a time. To minimize the total runtime of gcpdiag, rules can implement the `prefetch_rule` function to do data collection before the rule is actually started. The difference is that no reporting is possible: that will need to happen in the `run_rule` function. The `prefetch_rule` functions are called in parallel using multiple worker threads. - **prepare\_rule**(*context*: models.Context): The `prepare\_rule` function is similar to `prefetch\_rule` because it is also used to pre-load data before the rule is executed. The difference is that the `prepare\_rule` for all rules is called first, and not in parallel. This is useful for tasks that need to run as early as possible, but don't actually take a long time to complete. Currently the only use-case is for defining logs queries. Rule modules should **never access the API directly**, but always use query modules instead. This ensures proper testing and separation of concerns. Also, this way we can make sure that the queries modules cover all the required functionality, and that the API calls are cached. You can see the documentation of this rule [here](https://gcpdiag.dev/rules/gke/ERR/2021_007/) and the github logic for this rule [here](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/gcpdiag/lint/gke/err_2021_007_gke_sa.py) Example code: ```python """GKE service account permissions. Verify that the Google Kubernetes Engine service account exists and has the Kubernetes Engine Service Agent role on the project. """ from gcpdiag import lint, models from gcpdiag.queries import crm, gke, iam # defining role ROLE = 'roles/container.serviceAgent' # creating rule to report if default SA exists def run_rule(context: models.Context, report: lint.LintReportRuleInterface): clusters = gke.get_clusters(context) if not clusters: report.add_skipped(None, 'no clusters found') return project = crm.get_project(context.project_id) sa = 'service-{}@container-engine-robot.iam.gserviceaccount.com'.format( project.number) iam_policy = iam.get_project_policy(context.project_id) if iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE): report.add_ok(project) else: report.add_failed(project, reason=f'service account: {sa}\nmissing role: {ROLE}') ``` Metadata about the rule is determined as follows: - **Product**: directory where the rule is placed. Example: `gke`. - **Class**: filename, e.g.: `gke/bp_2021_001_cloudops_enabled.py` -> class BP. - **Id**: product+class+id uniquely identify a rule. Also determined by the filename, same as class (see above). - **Short description**: the first line of the module docstring is the rule short description, this is what appears in the rule line in the report. - **Long description**: docstring after the first line. When a rule fails, the long description is printed as well. ## Rule Execution gcpdiag lint is a general "broad" diagnostics tool that runs as many diagnostic test as possible, so that it can detect issues that you are completely unaware of. GCP API calls can however take a considerable amount of time to complete, so in order for the total runtime not to be too long, two techniques are used: **caching** and **parallel execution**. Caching takes care of making sure that the same query is never executed twice, and is explained more in detail in the next section. Parallel execution is implemented as follows: ![rule execution diagram](/images/rule-execution.png) 1. First, the `prepare_rule` function of each rule is called (if the rule defines one). These are called serially in the main thread, and are supposed to be quick to execute. The main use case is to prepare some aggregated querying that will need to happen later (only for logs at the moment). 1. Worker threads are started (currently 10) and execute first all required logging API queries, then all `prefetch_rule` functions that rule can define. 1. Immediately after starting the worker threads with logs and prefetch_rules, the main thread continues and starts executing the `run_rules` functions in the right order (alphabetically sorted) and synchronously starting to print the report. 1. The rule scheduler makes sure that any dependent logging or prefetch_rule execution that is required by a rule completes, before starting the rule (e.g. this is shown in the diagram where the second `run_rule` is executed only after a certain logs query has finished). ## Caching Every rule is independent and uses the queries modules to query for example the list of GKE clusters in a project. This makes the implementation of rules easier, but since multiple rules require the same data, this would mean fetching for example the list of GKE clusters multiple times. In order to avoid doing the same query multiple times, the results of API calls are cached either to memory or to disk. Considering that the amount of data can be significant and in order to keep the memory consumption of gcpdiag at reasonable levels, generally caching will be done to disk, but then most cached data will be deleted once gcpdiag has finished executing. The implementation uses the [diskcache](http://www.grantjenks.com/docs/diskcache/) Python module, which uses Sqlite under the hood to provide a very quick and featureful caching implementation. To make the implementation as streamlined as possible, we have implemented a function decorator called `caching.cached_api_call`: ``` @caching.cached_api_call def get_clusters(context: models.Context) -> Mapping[str, Cluster]: ``` `cached_api_call` is very similar to functools.lru_cache, with the following differences: - uses diskcache, so that the memory footprint doesn't grow uncontrollably. - uses a lock so that if the function is called from two threads simultaneously, only one API call will be done and the other will wait until the result is available in the cache. Parameters: - `expire`: number of seconds until the key expires (default: expire when the process ends) - `in_memory`: if true the result will be kept in memory, similarly to lru_cache (but with the locking). ## API Libraries and Authentication We use the low-level [google-api-python-client](https://github.com/googleapis/google-api-python-client) and not the new "idiomatic" client libraries because only the API library has full support for all GCP APIs (through discovery). Authentication is done either with the Application Default Credentials (via gcloud command-line) or with a key file for a service account. The [`apis.get_api`](http://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/queries/apis.py) function is used to retrieve the API interface and also takes care of doing any necessary authentication step. ================================================ FILE: website/content/en/docs/development/environment.md ================================================ --- title: "Development Environment" linkTitle: "Dev Environment" weight: 1 description: > How to prepare your environment to do development work. --- ## Environment setup - Make a fork of the official gcpdiag repository - Clone your fork ``` git clone git@github.com:xxxxxx/gcpdiag.git cd gcpdiag git submodule update --init ``` - Install pipenv and all the required Python dependencies: ``` apt install pipenv pipenv shell pipenv install --dev ``` or for mac: ``` brew install pipenv pipenv shell pipenv install --dev ``` - Install pre-commit (for the "presubmit" tests): ``` pipenv shell pre-commit install ``` - You can run tests and gcpdiag in the pipenv shell, so that all required modules are installed: ``` pipenv shell make test bin/gcpdiag lint --project=xxx ``` ================================================ FILE: website/content/en/docs/running.md ================================================ --- title: "Running gcpdiag" linkTitle: "Running gcpdiag" weight: 3 description: > Prerequisites and how to run gcpdiag. --- ## Pre-requisites gcpdiag requires the following in order to be able to run correctly: #### 1. Permissions The credentials that you use with gcpdiag needs to have at minimum the following roles granted (both of them): - `Viewer` on the inspected project - `Service Usage Consumer` on the project used for billing/quota enforcement, which is per default the project being inspected, but can be explicitly set using the `--billing-project` option The Editor and Owner roles include all the required permissions, but we recommend that if you use service account authentication (`--auth-key`), you only grant the Viewer+Service Usage Consumer on that service account. #### 2. Required APIs gcpdiag requires some APIs to be enabled in order for the inspection of resources to work correctly: - `cloudresourcemanager.googleapis.com` *(Cloud Resource Manager API)* - `iam.googleapis.com` *(Identity and Access Management API)* - `logging.googleapis.com` *(Cloud Logging API)* - `serviceusage.googleapis.com` *(Service Usage API)* You can enable these APIs using Cloud Console or via command-line: ``` gcloud --project=MYPROJECT services enable \ cloudresourcemanager.googleapis.com \ iam.googleapis.com \ logging.googleapis.com \ serviceusage.googleapis.com ``` ## Running in Cloud Shell gcpdiag is integrated in Cloud Shell: ``` gcpdiag lint --project=MYPROJECT ``` ## Running with Docker You can run gcpdiag using a shell wrapper that starts gcpdiag in a Docker container. This should work on any machine with Docker or Podman installed. ``` curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag chmod +x gcpdiag ./gcpdiag lint --project=MYPROJECT ``` ================================================ FILE: website/content/en/docs/usage.md ================================================ --- title: "Usage information" linkTitle: "Usage information" weight: 4 description: > gcpdiag command-line usage --- ## Command Line Options Currently gcpdiag mainly supports one subcommand: `lint`, which is used to run diagnostics on one or more GCP projects. ``` usage: gcpdiag lint --project P [OPTIONS] Run diagnostics in GCP projects. optional arguments: -h, --help show this help message and exit --auth-adc Authenticate using Application Default Credentials (default) --auth-key FILE Authenticate using a service account private key file --universe_domain DOMAIN Domain for API endpoint (default 'googleapis.com') --project P Project ID of project to inspect --billing-project P Project used for billing/quota of API calls done by gcpdiag (default is the inspected project, requires 'serviceusage.services.use' permission) --show-skipped Show skipped rules --hide-ok Hide rules with result OK --include INCLUDE Include rule pattern (e.g.: `gke`, `gke/*/2021*`). Multiple pattern can be specified (comma separated, or with multiple arguments) --exclude EXCLUDE Exclude rule pattern (e.g.: `BP`, `*/*/2022*`) --include-extended Include extended rules. Additional rules might generate false positives (default: False) -v, --verbose Increase log verbosity --within-days D How far back to search logs and metrics (default: 3 days) --config FILE Read configuration from FILE --logging-ratelimit-requests R Configure rate limit for logging queries (default: 60) --logging-ratelimit-period-seconds S Configure rate limit period for logging queries (default: 60 seconds) --logging-page-size P Configure page size for logging queries (default: 500) --logging-fetch-max-entries E Configure max entries to fetch by logging queries (default: 10000) --logging-fetch-max-time-seconds S Configure timeout for logging queries (default: 120 seconds) --output FORMATTER Format output as one of [terminal, json, csv] (default: terminal) ``` ## Configuration File The configuration for the gcpdiag run can be provided as a local configuration file via the `--config path/to/file` CLI flag written in YAML format. If a value is provided on both the command line and via a configuration file, the values from the configuration file will be preferred. ### Example configuration which will be applied to any projects ``` --- billing_project: sample include: - '*BP*' exclude: - '*SEC*' - '*ERR*' include_extended: True verbose: 3 within_days: 5 ``` ### Example configuration which will be applied to specific project ``` --- logging_fetch_max_time_seconds: 300 verbose: 3 within_days: 5 projects: myproject: billing_project: perproject include: - '*BP*' exclude: - '*SEC*' - '*ERR*' include_extended: True ``` If values are provided via a configuration file for any projects and specific project, the values from the configuration defined to specific project will be preferred. > All values are supported (except `--project` and `-config`) and function identically to their CLI counterparts. ## Output formats The output format for the gcpdiag run can be configured via `--output formatter` CLI flag, where `formatter` can be one of the following options: - `terminal` - which is default output format designed to be human readable - `json` - can be helpful as a machine readable format used for example with CI/CD pipelines - `csv` - can be helpful as a machine readable format used for example with analytic tools Final report can be easily streamed to file by using file redirection. Result will contain only a report of the lint execution with configured output format. For example: ``` gcpdiag lint --project example-project --output csv > gcpdiag.report.csv ``` will generate file `gcpdiag.report.csv` with following content: ``` rule,resource,status,message,doc_url gcs/BP/2022_001,b/example-project/artifacts.example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001 gcs/BP/2022_001,b/example-project/example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001 gcs/BP/2022_001,b/example-project/staging.example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001 iam/SEC/2021_001,projects/example-project,OK,-,https://gcpdiag.dev/rules/iam/SEC/2021_001 ``` > Value can be also provided as a yaml configuration file via the `--config path/to/file` CLI flag. ### Example of the terminal (default) output format ``` gcpdiag 🩺 0.54-test Starting lint inspection (project: example-project)... 🔎 gcs/BP/2022_001: Buckets are using uniform access - example-project/artifacts.example-project.appspot.com [FAIL] it is recommend to use uniform access on your bucket - example-project/example-project.appspot.com [FAIL] it is recommend to use uniform access on your bucket - example-project/staging.example-project.appspot.com [FAIL] it is recommend to use uniform access on your bucket Google recommends using uniform access for a Cloud Storage bucket IAM policy https://cloud.google.com/storage/docs/access- control#choose_between_uniform_and_fine-grained_access https://gcpdiag.dev/rules/gcs/BP/2022_001 🔎 iam/SEC/2021_001: No service accounts have the Owner role - example-project [ OK ] Rules summary: 64 skipped, 1 ok, 1 failed How good were the results? https://forms.gle/jG1dUdkxhP2s5ced6 ``` ### Example of the json output format ``` gcpdiag 0.54-test Starting lint inspection (project: example-project)... [ { "rule": "gcs/BP/2022_001", "resource": "b/artifacts.example-project.appspot.com", "status": "FAIL", "message": "it is recommend to use uniform access on your bucket", "doc_url": "https://gcpdiag.dev/rules/gcs/BP/2022_001" }, { "rule": "gcs/BP/2022_001", "resource": "b/example-project.appspot.com", "status": "FAIL", "message": "it is recommend to use uniform access on your bucket", "doc_url": "https://gcpdiag.dev/rules/gcs/BP/2022_001" }, { "rule": "gcs/BP/2022_001", "resource": "b/staging.example-project.appspot.com", "status": "FAIL", "message": "it is recommend to use uniform access on your bucket", "doc_url": "https://gcpdiag.dev/rules/gcs/BP/2022_001" }, { "rule": "iam/SEC/2021_001", "resource": "projects/example-project", "status": "OK", "message": "-", "doc_url": "https://gcpdiag.dev/rules/iam/SEC/2021_001" }, ] Rules summary: 64 skipped, 1 ok, 1 failed How good were the results? https://forms.gle/jG1dUdkxhP2s5ced6 ``` ### Example of the csv output format ``` gcpdiag 0.54-test Starting lint inspection (project: example-project)... rule,resource,status,message,doc_url gcs/BP/2022_001,b/artifacts.example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001 gcs/BP/2022_001,b/example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001 gcs/BP/2022_001,b/staging.example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001 iam/SEC/2021_001,projects/example-project,OK,-,https://gcpdiag.dev/rules/iam/SEC/2021_001 Rules summary: 64 skipped, 1 ok, 1 failed How good were the results? https://forms.gle/jG1dUdkxhP2s5ced6 ``` ================================================ FILE: website/content/en/privacy.md ================================================ --- title: "gcpdiag Privacy Policy" linkTitle: "Privacy Policy" type: docs hide_summary: true --- ## gcpdiag tool ### Data collected via public APIs gcpdiag is a command-line tool that uses credentials provided by you (via service account key or application default credentials) to access your data in Google Cloud Platform via public APIs. The collected data is never stored or transmitted anywhere except on the environment where you run it: - gcpdiag caches data (credentials and certain API call results) under `$HOME/.cache/gcpdiag` or `$HOME/.cache/gcpdiag-dockerized`, which you can delete at any time. - gcpdiag will display findings to stdout/stderr (console) or to local files you specify. In other words: the data collected by gcpdiag always stays with you. ### User-agent The gcpdiag command-line tool sets a specific User-agent string for the GCP API calls, which makes it possible to identify them as originating from the gcpdiag tool. The [Google Cloud Privacy Notice](https://cloud.google.com/terms/cloud-privacy-notice) describes how Google collects and processes personal information in relation to Google Cloud Platform and Google’s other Cloud Services. ## Website For the website http://gcpdiag.dev, the privacy policy at https://policies.google.com/privacy applies. ================================================ FILE: website/content/en/rules/_index.md ================================================ --- title: "Lint Rules" linkTitle: "Rules" type: docs menu: main: weight: 30 --- In this section you find documentation for the gcpdiag lint rules implemented for the following GCP products: ================================================ FILE: website/content/en/rules/apigee/ERR/2022_001.md ================================================ --- title: "apigee/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > Apigee Service Agent permissions --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Apigee uses a Google-managed service account, which is called Apigee Service Agent, to authenticate Apigee API requests sent by the Apigee runtime components to the Management plane. The `apigee.serviceAgent` role should be assigned to this account and shouldn’t be revoked. ### Remediation Ensure that you’ve the following binding in the IAM policy for the project: - Principal: `service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com` - Role: `roles/apigee.serviceAgent` ### Further information - [About Google-managed service accounts ](https://cloud.google.com/iam/docs/service-agents) ================================================ FILE: website/content/en/rules/apigee/ERR/2022_002.md ================================================ --- title: "apigee/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > Cloud KMS key is enabled and could be accessed by Apigee Service Agent --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Apigee X uses a database encryption key, to encrypts the application-level data stored in the database and a disk encryption key to encrypts runtime instance data before it is written to disk. Verify that the runtime database encryption key and disk encryption key are not disabled or destroyed and the Apigee Service Agent account has the `cloudkms.cryptoKeyEncrypterDecrypter` role to access the KMS keys. ### Remediation [View current IAM policy on the kms keys](https://cloud.google.com/kms/docs/iam#viewing_permissions_on_a_resource) and ensure that you have the following binding in the IAM policy for the kms keys: - Principal: `service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com` - Role: `roles/cloudkms.cryptoKeyEncrypterDecrypter` If not, please [grant the above role](https://cloud.google.com/kms/docs/iam#granting_roles_on_a_resource) on the kms key. ### Further information - [About the Apigee encryption keys](https://cloud.google.com/apigee/docs/api-platform/security/encryption-keys) ================================================ FILE: website/content/en/rules/apigee/ERR/2023_001.md ================================================ --- title: "apigee/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > Customer's network is peered to Apigee's network --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Apigee X instance runs in a Google managed tenant project. It is required to connect Apigee X instance's network with the user's VPC network through VPC peering to enable communication with Apigee X instance from the user's VPC network. ### Remediation [View existing VPC peering connections](https://cloud.google.com/vpc/docs/using-vpc-peering#list-peer-connections) for your VPC network which needs to be connected to Apigee and ensure that you have an active VPC peering connection connected with `servicenetworking.googleapis.com` ### Further information - - You can find step-by-step details in the [Configure service networking](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli#service-networking) step from Apigee X provisioning guide. ================================================ FILE: website/content/en/rules/apigee/ERR/2023_002.md ================================================ --- title: "apigee/ERR/2023_002" linkTitle: "ERR/2023_002" weight: 1 type: docs description: > Network bridge managed instance group is correctly configured. --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description You could choose to use a managed instance group (MIG) or Private Service Connect to send API traffic from your network to Apigee X instances. If the API traffic is being sent through a MIG, the MIG should be created in the network which is peered to the Apigee X instance, the MIG should also point to the correct Apigee X instance IP. ### Remediation [Check the status of managed instances in the MIG](https://cloud.google.com/compute/docs/instance-groups/getting-info-about-migs#verify_instances) created in the project which contains VPC network which needs to be connected to Apigee and ensure that the instances have the following metadata configured: - startup-script-url: gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh - ENDPOINT: $APIGEE_INSTANCE_ENDPOINT ### Further information - - You can find step-by-step details in the [Configure routing](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli#externalmig) step from Apigee X provisioning guide. ================================================ FILE: website/content/en/rules/apigee/ERR/2023_003.md ================================================ --- title: "apigee/ERR/2023_003" linkTitle: "ERR/2023_003" weight: 1 type: docs description: > Private Google Access (PGA) for subnet of Managed Instance Group is enabled. --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description If a managed instance group (MIG) is being used to route traffic to Apigee X instance running in a Google managed tenant project, the MIG's subnet should have Private Google Access (PGA) enabled. ### Remediation [Enable Private Google Access](https://cloud.google.com/vpc/docs/configure-private-google-access#enabling-pga) in the MIG's subnet as described in the documentation. ### Further information - [Enable Private Google Access](https://cloud.google.com/vpc/docs/configure-private-google-access#enabling-pga) ================================================ FILE: website/content/en/rules/apigee/ERR/2023_004.md ================================================ --- title: "apigee/ERR/2023_004" linkTitle: "ERR/2023_004" weight: 1 type: docs description: > Apigee Networking Service Agent account requires the servicenetworking.serviceAgent role --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Apigee uses a Google-managed service account, which is called Networking Service Agent which is used to create/modify the Apigee runtime networking. Service Networking enables you to offer your managed services on internal IP addresses to service consumers. Service consumers use private services access to privately connect to your service. The `servicenetworking.serviceAgent` role should be assigned to this account and shouldn’t be revoked. ### Remediation Ensure that you’ve the following binding in the IAM policy for the project: - Principal: `service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com` - Role: `roles/servicenetworking.serviceAgent` Steps to validate: - Verify if Service Networking is enabled, if not, enable it using the below command `gcloud services enable servicenetworking.googleapis.com --project={PROJECT_ID}` - Create a service account for service networking `gcloud beta services identity create --service=servicenetworking.googleapis.com --project={PROJECT_ID}` - Bind the service account created with the role servicenetworking.serviceAgent ``` gcloud projects add-iam-policy-binding {PROJECT_ID} \ --member=serviceAccount:service-{PROJECT_NUMBER}@service-networking.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent ``` ### Further information - [ About Google-managed service accounts ](https://cloud.google.com/iam/docs/service-agents) - [ About Enabling the Networking Service ](https://cloud.google.com/service-infrastructure/docs/service-networking/getting-started#enabling_the_service) ================================================ FILE: website/content/en/rules/apigee/ERR/2023_005.md ================================================ --- title: "apigee/ERR/2023_005" linkTitle: "ERR/2023_005" weight: 1 type: docs description: > Apigee connectivity: Load balancer to Managed Instance Group connectivity. --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description In order for the Apigee Managed Instance Group (MIG) to work correctly, network connection from the External Load Balancer (XLB) to the MIG must be allowed by the firewall rules ### Remediation Ensure that the following firewall rules are present on the project: - By default during the installation of ApigeeX a firewall rule is created with the name: `k8s-allow-lb-to-apigee-proxy` - IP address ranges `130.211.0.0/22` and `35.191.0.0/16` are the source IP address ranges for Google Load Balancing - The target parameters needs to have the `target-tags` of the MIG which can be identified from the MIG template. - By default `gke-apigee-proxy` is the tag used by the MIG instance template. Recreation Steps : - Identify the Managed Instance Group name and list out the configuration for it. `gcloud compute instance-templates describe {INSTANCE_NAME}` - Identify the tags used for the instance template from the above configuration - Create the firewall rule with the target tag identified from the Instance Template ``` gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --description "Allow incoming from GLB on TCP port 443 to Apigee Proxy" \ --project {PROJECT_ID} --network {VPC_NAME} --allow=tcp:443 \ --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags={MIG_INSTANCE_TAGS} ``` ### Further information - [ Creating Apigee Firewall Rule ](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli#:~:text=Create%20a%20firewall%20rule) - [ About Firewall Rules ](https://cloud.google.com/load-balancing/docs/https#firewall-rules) - [About Using VPC Firewall Rules](https://cloud.google.com/firewall/docs/using-firewalls) ================================================ FILE: website/content/en/rules/apigee/ERR/2023_006.md ================================================ --- title: "apigee/ERR/2023_006" linkTitle: "ERR/2023_006" weight: 1 type: docs description: > A multi-region setup requires a separate MIG for each region. --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description If Apigee X instances exist in multiple regions, then a MIG should be created in each region. Otherwise the traffic will only be routed to one region. ### Remediation If you are provisioning Apigee X with VPC peering by using MIGs (Managed Instance Groups), you need to create a MIG for each of the region where you created an Apigee X instance. You can follow the documentation for [External routing (MIG)](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli-paygo#external-routing-mig) and repeat Steps 8b and 8c for each region. ### Further information - [Provision a paid org with VPC peering](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli-paygo) - [External routing (MIG)](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli-paygo#external-routing-mig) ================================================ FILE: website/content/en/rules/apigee/WARN/2021_001.md ================================================ --- title: "apigee/WARN/2021_001" linkTitle: "WARN/2021_001" weight: 1 type: docs description: > Every environment group contains at least one environment. --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: WARN - Something that is possibly wrong ### Description Every environment group contains at least one environment. An environment must be a member of at least one environment group before you can access resources defined within it. In other words, you must assign an environment to a group before you can use it. Or you would receive 404 errors while accessing every hostname in the environment group. ### Remediation Make sure that you have attached at least one environment to every environment group. You can use the following steps to add environments to an environment group: https://cloud.google.com/apigee/docs/api-platform/fundamentals/environmentgroups-working-with#adding ### Further information - [Overview of environments and environment groups](https://cloud.google.com/apigee/docs/api-platform/fundamentals/environments-overview) ================================================ FILE: website/content/en/rules/apigee/WARN/2022_001.md ================================================ --- title: "apigee/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > Environment groups are created in the Apigee runtime plane. --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: WARN - Something that is possibly wrong ### Description Every environment group needs to be created in both management plane and runtime plane. For Apigee hybrid users: please make sure that every environment group you create with an attached environment is included in all override files where the environment is used. ### Remediation Please [apply virtualhosts changes](https://cloud.google.com/apigee/docs/hybrid/v1.7/base-path-routing?hl=en#applying) to create an environment group in the runtime plane. You can use the following Cloud Logging filter to find matching log lines: ``` resource.type= "k8s_container" log_id("stdout") resource.labels.container_name= "apigee-watcher" severity=ERROR jsonPayload.error:"INTERNAL: NOT_FOUND: failed to create ApigeeRoute" ``` ### Further information - [Working with environment groups](https://cloud.google.com/apigee/docs/api-platform/fundamentals/environmentgroups-working-with) ================================================ FILE: website/content/en/rules/apigee/WARN/2022_002.md ================================================ --- title: "apigee/WARN/2022_002" linkTitle: "WARN/2022_002" weight: 1 type: docs description: > Environments are attached to Apigee X instances --- **Product**: [Apigee API Management](https://cloud.google.com/apigee)\ **Rule class**: WARN - Something that is possibly wrong ### Description Each environment must be attached to an Apigee instance. An environment must be attached to at least one Apigee X instance before you can deploy API proxies within it. You will get the API proxy deployments fail with **No active runtime pods** warning in a specific environment if this environment is not being attached to any Apigee X instances. ### Remediation Make sure that you have attached all environments to at least one Apigee X instance. You can use the following steps to attach environments to an instance: https://cloud.google.com/apigee/docs/api-platform/system-administration/instances#add-envs ### Further information - [About environments](https://cloud.google.com/apigee/docs/api-platform/fundamentals/environments-working-with#about-environments) ================================================ FILE: website/content/en/rules/apigee/_index.md ================================================ --- title: "APIGEE" linkTitle: "apigee" type: docs description: Apigee API Management --- ================================================ FILE: website/content/en/rules/asm/ERR/2023_001.md ================================================ --- title: "asm/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > ASM traffic indicates Client side requests failure --- **Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Istio proxies are responsible for sending data plane traffic from one workload to another. These proxies log the status codes of requests proxied. 4XX response code indicate client side issue such as malformed headers, page not found etc ### Remediation Identify the source and destination workload for request failing and inspect the failed request for client side issues. Inspect the client failing. ### Further information - [How to collect access logs ](https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-collect-logs) ================================================ FILE: website/content/en/rules/asm/ERR/2023_002.md ================================================ --- title: "asm/ERR/2023_002" linkTitle: "ERR/2023_002" weight: 1 type: docs description: > ASM traffic indicates Client side requests failure --- **Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Istio proxies are responsible for sending data plane traffic from one workload to another. These proxies log the status codes of requests proxied. 5XX response code indicate server side issue such as no upstream resources, TLS handshake failure etc. ### Remediation Identify the source and destination workload for request failing and inspect the failed request for server side issues. Inspect the destination workload pod logs for issue with failing request. ### Further information - [How to collect access logs ](https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-collect-logs) ================================================ FILE: website/content/en/rules/asm/ERR/2024_001.md ================================================ --- title: "asm/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > Getting timed out error for secret not found for ingress gateway --- **Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description When deploying Ingress gateway which is using a secret, you may get the following error: gRPC config: initial fetch timed out for type.googleapis.com/envoy.extensions. transport_sockets.tls.v3.Secret This means Ingress gateway is trying to get certs but failing. This could mean istiod is denying the requests or otherwise cannot access them. ### Remediation One possible solution is to confirm if the secret exists in the given namespace. You can use the command `kubectl get secrets -n ` to verify the existence of secret. One way to check is by looking at the audit logs to confirm if the secret was deleted somehow. ### Further information - Further, checking the Istiod logs will likely give more info. ================================================ FILE: website/content/en/rules/asm/ERR/2024_002.md ================================================ --- title: "asm/ERR/2024_002" linkTitle: "ERR/2024_002" weight: 1 type: docs description: > Sufficient resources (CPU and memory) then Istiod pods are scheduled. --- **Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description When provisioning ASM, make sure that the istiod ods have sufficient resources so that they can be scheduled properly. Insufficient memory or CPU resources can prevent Istiod pods from being scheduled, potentially leading to control plane malfunctions and disruptions in Anthos Service Mesh (ASM) functionality. ### Remediation If the Istiod pods are not getting enough resources, you may need to increase their resource requests in the Istio configuration. Also, ensure that your GKE nodes have enough allocatable CPU and memory resources to accommodate the increased requests for Istiod pods. ### Further information - Further, checking the Istiod logs will likely give more info. ================================================ FILE: website/content/en/rules/asm/WARN/2023_001.md ================================================ --- title: "asm/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > gRCP Config stream reset event detected in istio proxies --- **Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\ **Rule class**: WARN - Something that is possibly wrong ### Description Envoy proxies running as istio side car proxies in Anthos Service mesh communicate to control plane with gRPC stream. These streams are regulalry closed every 30secs if there is no update from the control plane. These connections are flused and log entries are created in proxies. In an event where these warning are quite often within 30sec, it indicate a possible issue with control plane. ### Remediation You can use the following step by step guide to troubleshoot Anthos service mesh https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-intro ### Further information - [OSS Istio issue](https://github.com/istio/istio/issues/19321) ================================================ FILE: website/content/en/rules/asm/WARN/2024_001.md ================================================ --- title: "asm/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > No webhook creation failures were found. --- **Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\ **Rule class**: WARN - Something that is possibly wrong ### Description Error occurred while calling the webhook "namespace.sidecar-injector.istio.io". ### Remediation Make sure that endpoints are available for the service istiod-asm-ASM-version ================================================ FILE: website/content/en/rules/asm/WARN/2025_001.md ================================================ --- title: "asm/WARN/2025_001" linkTitle: "WARN/2025_001" weight: 1 type: docs description: > ASM: Envoy doesn't report connection failure --- **Product**: [Anthos Service Mesh](https://cloud.google.com/anthos \ **Rule class**: WARN - Something that is very likely to be wrong ### Description The error code 111 typically corresponds to the ECONNREFUSED error in Linux which means that the connection was refused by the server(sidecar). This generally indicates that no process is listening on the IP:Port combination that the client is trying to connect to ### Remediation Verify that the application port in the pod is correctly configured and responding to the defined server port. Use tools like curl or netcat to test connectivity to the application port from within the pod. Ensure there are no misconfigurations or firewall rules blocking the connection. ================================================ FILE: website/content/en/rules/asm/WARN/2025_002.md ================================================ --- title: "asm/WARN/2025_002" linkTitle: "WARN/2025_002" weight: 1 type: docs description: > ASM: Upstream connection established successfully with no protocol errors --- **Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\ **Rule class**: WARN - Something that is very likely to be wrong ### Description The error "upstream connect error or disconnect/reset before headers. reset reason: protocol error" typically indicates a invalid headers during the connection establishment between Envoy and the upstream service. This could occur when Envoy receives headers that are not properly formatted contain duplicates, or conflict with each other (e.g., multiple Transfer-Encoding headers) leading to a protocol error. ### Remediation To remediate the "upstream connect error or disconnect/reset before headers reset reason: protocol error": Ensure the upstream service is not sending duplicate or conflicting headers, such as multiple Transfer-Encoding headers Validate the headers are properly formatted and comply with HTTP standards You can also perform a PCAP capture on the application pod to check the response headers being sent by application. ================================================ FILE: website/content/en/rules/asm/_index.md ================================================ --- title: "ASM" linkTitle: "asm" type: docs description: Anthos Service Mesh --- ================================================ FILE: website/content/en/rules/bigquery/ERR/2022_001.md ================================================ --- title: "bigquery/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > BigQuery jobs not failing due to concurrent DML updates on the same table --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Multiple DML queries running concurrently are conflicting with each other. ### Remediation Consider spacing out the DML operations to a single table enough so that they don't overlap, or start another one only after the earlier one is completed. ### Further information - [Learn how BigQuery handles DML statements](https://cloud.google.com/blog/products/data-analytics/dml-without-limits-now-in-bigquery) ================================================ FILE: website/content/en/rules/bigquery/ERR/2022_002.md ================================================ --- title: "bigquery/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > BigQuery jobs are not failing due to results being larger than the maximum response size --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Query results for SQL queries in BigQuery that generate excessively large results and don't set a destination table fail with job error "responseTooLarge" ### Remediation Adding a **LIMIT** clause can sometimes help, or removing the **ORDER BY** clause. If you want to ensure that large results can return, you can specify a destination table and also set the **allowLargeResults** option to true if using Legacy SQL. ### Further information - [Learn how to write large query results in BigQuery](https://cloud.google.com/bigquery/docs/writing-results#large-results) ================================================ FILE: website/content/en/rules/bigquery/ERR/2022_003.md ================================================ --- title: "bigquery/ERR/2022_003" linkTitle: "ERR/2022_003" weight: 1 type: docs description: > BigQuery jobs are not failing while accessing data in Drive due to a permission issue --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description BigQuery jobs are failing because the authentication token is missing the Google Drive access scope or the user/service account is not granted at least the Viewer role on the Drive file ### Remediation - Make sure the user/service account has at least the **Viewer** access to the Drive file - Make sure that the Drive scope ("https://www.googleapis.com/auth/drive") is applied when using a client library - If a scheduled query is failing, you might need to [refresh credentials](https://cloud.google.com/bigquery/docs/scheduling-queries#updating_the_credentials_of_a_scheduled_query) ### Further information The drive scope can be applied at a different level as well: - When running [`gcloud auth login`](https://cloud.google.com/sdk/gcloud/reference/auth/login#--enable-gdrive-access): ``` gcloud auth login --enable-gdrive-access ``` - If you user credentials are used as Application Default Credentials, you can specify scopes the following way (`--scopes` can be used to add any scope, not limited to `drive` or `bigquery`): ``` gcloud auth application-default login --scopes openid,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/bigquery ``` - Using the [bq tool](https://cloud.google.com/bigquery/docs/reference/bq-cli-reference#global_flags) when running `bq query`: ``` bq query --enable_gdrive=true 'SELECT ....' ``` - For a [GKE node pool](https://cloud.google.com/sdk/gcloud/reference/container/node-pools/create#--scopes) during creation: ``` gcloud container node-pools create {POOL-NAME} \ --cluster={CLUSTER-NAME} \ --disk-type=pd-ssd --machine-type=n1-standard-16 --enable-autoscaling --max-nodes=3 --min-nodes=0 --num-nodes=0 --preemptible --zone=us-west1-a \ --scopes=cloud-platform,https://www.googleapis.com/auth/drive ``` - For a [GCE instance](https://cloud.google.com/sdk/gcloud/reference/compute/instances/create#--scopes) during creation: ``` gcloud compute instances create {INSTANCE-NAME} \ --zone=us-west1-a --image-family=debian-9 --image-project=debian-cloud --machine-type=n1-standard-16 \ --scopes=cloud-platform,https://www.googleapis.com/auth/drive ``` ================================================ FILE: website/content/en/rules/bigquery/ERR/2022_004.md ================================================ --- title: "bigquery/ERR/2022_004" linkTitle: "ERR/2022_004" weight: 1 type: docs description: > BigQuery jobs are not failing due to shuffle operation resources exceeded --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The query job failed because the maximum disk and memory limit available for shuffle operations was exceeded for the project or organization. ### Remediation The limit cannot be increased for users - it is linearly correlated to the number of slots available in the project. Provision more slots for this to be increased. Further recommendations that can help: - Reduce query concurrency - Optimize the query to use less shuffle resources - Query less data within a single query job - Materialize intermediate results ### Further information - [Read more about avoiding SQL anti-patterns in BigQuery](https://cloud.google.com/bigquery/docs/best-practices-performance-patterns) - [Read more about optimizing communication between slots](https://cloud.google.com/bigquery/docs/best-practices-performance-communication) ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_001.md ================================================ --- title: "bigquery/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > There was an API call via the getQueryResults method that returned "Not Found Job: {job ID}" --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description This happens when BigQuery jobs have been requested via the API but cannot be found. This can be due to incorrect information being provided in the call, such as the jobID or location. For example, if the jobID is misspelled or the location is not specified (especially if it is not a US or a EU multi-regional location), the job will not be found. To avoid this error, make sure to provide accurate information in the API call. You can also check the BigQuery job history to see if the job has been completed or deleted. ### Remediation To ensure that your API calls are correct, verify that they include the necessary information, such as a job ID, project ID, and location (if applicable). You must specify the location to run the job in the following cases: - If the location to run a job is not in the US or the EU multi-regional location. - If the job's location is in a single region (for example, us-central1). ### Further - [Read more about how to use the getQueryResult API Method](https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/getQueryResults) ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_002.md ================================================ --- title: "bigquery/ERR/2023_002" linkTitle: "ERR/2023_002" weight: 1 type: docs description: > Dataset not found during copy table operation --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description While trying to copy a table, either the destination or source dataset was not found. This could be due to a few things. - When you copy a table, the name of the destination table must adhere to the same naming conventions as when you create a table. - Table copies are subject to BigQuery limits on copy jobs. - The Google Cloud console supports copying only one table at a time. You cannot overwrite an existing table in the destination dataset. The table must have a unique name in the destination dataset. - Copying multiple source tables into a destination table is not supported by the Google Cloud console. - When copying multiple source tables to a destination table using the API, bq command-line tool, or the client libraries, all source tables must have identical schemas, including any partitioning or clustering. - The time that BigQuery takes to copy tables might vary significantly across different runs because the underlying storage is managed dynamically. - You cannot copy and append a source table to a destination table that has more columns than the source table, and the additional columns have default values. Instead, you can run INSERT destination_table SELECT * FROM source_table to copy over the data. - When copying tables, the destination dataset must reside in the same location as the dataset containing the table being copied. For example, you cannot copy a table from an EU-based dataset and write it to a US-based dataset. ### Remediation When copying a table make sure that the destination table is in the same region as the source table. if you want to copy cross-region we recommend to copy a dataset cross region. Make sure the source and destination datasets exist. ### Further information - [Read more about the best practices for copying a table](https://cloud.google.com/bigquery/docs/managing-tables#copy-table) - [Read more about the best practices for copying a dataset](https://cloud.google.com/bigquery/docs/copying-datasets) ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_003.md ================================================ --- title: "bigquery/ERR/2023_003" linkTitle: "ERR/2023_003" weight: 1 type: docs description: > BigQuery query job do not encounter resource exceeded error --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description A BigQuery query sometimes could not be executed in the allotted memory ``` resource.type="bigquery_resource" severity=ERROR protoPayload.methodName="jobservice.jobcompleted" protoPayload.status.message:"Resources exceeded during query execution: The query could not be executed" ``` ### Remediation The common root causes for resources getting exceeded are data skew, join operations, table creating more partitions after query completion , too many subqueries or query complexity ### Further information Please follow the best practices mentioned here http://cloud/bigquery/docs/best-practices-performance-patterns to avoid Data skew and https://cloud.google.com/bigquery/docs/best-practices-performance-compute ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_004.md ================================================ --- title: "bigquery/ERR/2023_004" linkTitle: "ERR/2023_004" weight: 1 type: docs description: > BigQuery query job do not encounter dml concurrency issue when mutating concurrently. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Mutating DML Queries that run concurrently, end up conflicting with each other. For these DML queries to maintain consistency, in case there are multiple queries that run at roughly the same time, it's possible that one of them failed. ``` resource.type="bigquery_resource" severity=ERROR protoPayload.methodName="jobservice.jobcompleted" protoPayload.status.message:"Could not serialize access to" ``` ### Remediation The failure here is due to the concurrent DML updates. Such kind of failure is by design if there are multiple conflict DML running against the same table. The BigQuery system retries internally for up to 3 times. Recommendation: The best way to avoid the failure is by trying to issue such kind of jobs in a serialized way. For this suggestion would be to either space out the concurrent dml or serialize dml updates such that subsequent dml updates are triggered after the previous one completes. Another suggestion to have parallelism along with less chance of conflict is for the users to use Partitioned table. In such a case, if the parallel running DMLs touch separate partition tables then they would not lead to conflicts . More information on how [BQ handles DML queries](https://cloud.google.com/blog/products/data-analytics/dml-without-limits-now-in-bigquery) ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_005.md ================================================ --- title: "bigquery/ERR/2023_005" linkTitle: "ERR/2023_005" weight: 1 type: docs description: > Scheduled query not failing due to outdated credentials. --- **Product**: [BigQuery](https://cloud.google.com/bigquery) **Rule class**: ERR - Something that is very likely to be wrong ### Description If you're scheduling an existing query, you might need to update the user credentials on the query. Credentials are automatically up to date for new scheduled queries. Some other situations that could require updating credentials include the following: * You want to query Google Drive data in a scheduled query. * You receive an INVALID_USER error when you attempt to schedule the query: ``` Error code 5 : Authentication failure: User Id not found. Error code: INVALID_USERID ``` ### Remediation Scheduled queries are a kind of transfer. To update the credentials of a scheduled query, you can use the bq_cli to update the transfer configuration. Enter the `bq update` command and supply the transfer flag `--transfer_config`. The following flags are also required: * `--update_credentials` Optional flag: * `--service_account_name` is for authenticating your scheduled query with a service account instead of your individual user account. ### Further information [Update scheduled query credentials](https://cloud.google.com/bigquery/docs/scheduling-queries#update_scheduled_query_credentials) ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_006.md ================================================ --- title: "bigquery/ERR/2023_006" linkTitle: "ERR/2023_006" weight: 1 type: docs description: > An organization's policy doesn't block the BigQuery user domain --- **Product**: [BigQuery](https://cloud.google.com/bigquery) **Rule class**: ERR - Something that is very likely to be wrong ### Description There can be domain restriction policies applied to customer's organization. The domain of the user (the part after '@' in the user's email) that you are trying to share the BigQuery dataset with should be present in the list of "Allowed" fields for the constraint constraints/iam.allowedPolicyMemberDomains. Using the below logs filter, you can see the IAM policy bindings for the dataset. Please go through the list of bindings to identify the user whose domain is not allowed within your organization policies: ``` resource.type="bigquery_dataset" protoPayload.methodName="google.iam.v1.IAMPolicy.SetIamPolicy" severity=ERROR protoPayload.status.message:"One or more users named in the policy do not belong to a permitted customer." ``` ### Remediation If the domain of the user is not present in the "Allowed" fields for the constraint constraints/iam.allowedPolicyMemberDomains, please add it to resolve the error. ### Further information [Restricting Domains - Setting the Organization Policy](https://cloud.google.com/resource-manager/docs/organization-policy/restricting-domains#setting_the_organization_policy) ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_007.md ================================================ --- title: "bigquery/ERR/2023_007" linkTitle: "ERR/2023_007" weight: 1 type: docs description: > Data Transfer Service Agent exists and has the required roles. --- **Product**: [BigQuery](https://cloud.google.com/bigquery) **Rule class**: ERR - Something that is very likely to be wrong ### Description To verify that the BigQuery Data Transfer service agent exists and has been granted the IAM role roles/bigquerydatatransfer.serviceAgent, please navigate to the IAM page and click on the 'Include Google-provided role grants' check box. In the 'VIEW BY PRINCIPALS' tab, please check if a service account with the email address format service-@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com exists and has the IAM role roles/bigquerydatatransfer.serviceAgent. ### Remediation If the Data Transfer service agent does not exist when the Data Transfer service API is enabled, then please create the service agent manually by following [Manual Service Agent Creation](https://cloud.google.com/bigquery/docs/enable-transfer-service#manual_service_agent_creation) When you manually trigger service agent creation, Google doesn't grant the predefined service agent role automatically. You must manually grant the service agent the predefined role using the following Google Cloud CLI command: ``` gcloud projects add-iam-policy-binding project_number \ --member serviceAccount:service-project_number@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com \ --role roles/bigquerydatatransfer.serviceAgent ``` ### Further information [Read more about BigQuery Data Transfer Service](https://cloud.google.com/bigquery/docs/dts-introduction) ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_008.md ================================================ --- title: "bigquery/ERR/2023_008" linkTitle: "ERR/2023_008" weight: 1 type: docs description: > User has the required roles to create or modify scheduled queries. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description To verify that the user trying to create or modify scheduled queries has the role roles/bigquery.admin. If pub sub notification is configured, then user should also have permission pubsub.topics.getIamPolicy which is part of the role roles/pubsub.admin. ### Remediation If the user trying to create or modify scheduled queries doesn't have the role roles/bigquery.admin, then please add it by following [Grant an IAM role](https://cloud.google.com/iam/docs/grant-role-console#grant_an_iam_role) If pub sub notification is also configured and user doesn't have permission pubsub.topics.getIamPolicy, then please add the permission using a [custom role](https://cloud.google.com/iam/docs/creating-custom-roles#creating) or add role roles/pubsub.admin which contains this permission. ### Further information [Read more about scheduled queries in BigQuery](https://cloud.google.com/bigquery/docs/scheduling-queries) ================================================ FILE: website/content/en/rules/bigquery/ERR/2023_009.md ================================================ --- title: "bigquery/ERR/2023_009" linkTitle: "ERR/2023_009" weight: 1 type: docs description: > BigQuery job not failed due to Scheduled query with multiple DML --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Destination/Target dataset can only be set up for scheduled queries with one single DML statement. When two DML statements are present the second DML statement will not pick up the correct destination/target dataset and will throw an error. ### Remediation Recreate the scheduled query and make sure that the Target/Destination dataset `(--target_dataset)` value is not explicitly being set. ### Further information - [BigQuery Scheduled Query error](https://cloud.google.com/knowledge/kb/bigquery-scheduled-query-error-dataset-specified-in-the-query-is-not-consistent-with-destination-dataset-000004330) ================================================ FILE: website/content/en/rules/bigquery/ERR/2024_001.md ================================================ --- title: "bigquery/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > BigQuery query job do not encounter query is too complex --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description A BigQuery query has too many subqueries or query is too complex ``` resource.type="bigquery_resource" severity=ERROR protoPayload.methodName="jobservice.jobcompleted" protoPayload.status.message:"Resources exceeded during query execution: Not enough resources for query planning - too many subqueries or query is too complex" ``` ### Remediation This error occurs when a query is too complex. The primary causes of complexity are: * WITH clauses that are deeply nested or used repeatedly. * Views that are deeply nested or used repeatedly. * Repeated use of the [UNION ALL operator](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#union_example). To address this error, try the following options: * Split the query into multiple queries, then use procedural language to run those queries in a sequence with shared state. * Use temporary tables instead of WITH clauses. * Rewrite your query to reduce the number of referenced objects and comparisons. ### Further information Please follow the best practices mentioned here http://cloud/bigquery/docs/best-practices-performance-patterns For additional information on how to resolve these issues, see Troubleshoot [resources exceeded issues](https://cloud.google.com/bigquery/docs/troubleshoot-queries#ts-resources-exceeded) ================================================ FILE: website/content/en/rules/bigquery/WARN/2022_001.md ================================================ --- title: "bigquery/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > BigQuery does not exceed rate limits --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description BigQuery has various quotas that limit the rate and volume of incoming requests. These quotas exist both to protect the backend systems, and to help guard against unexpected billing if you submit large jobs. ### Remediation Slow down the request rate. To resolve these limit issues, retry the operation after few seconds. Use exponential backoff between retry attempts. If you consistently reach one of these longer-term quota limits, you should analyze your workload for ways to mitigate the issue. Mitigations can include optimizing your workload or requesting a quota increase. ### Further information To diagnose issues, do the following: * Use INFORMATION_SCHEMA views to analyze the underlying issue. These views contain metadata about your BigQuery resources, including jobs, reservations, and streaming inserts. For example, the following query uses the INFORMATION_SCHEMA.JOBS view to list all quota-related errors within the past day: ``` SELECT job_id, creation_time, error_result FROM `region-us`.INFORMATION_SCHEMA.JOBS WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) AND error_result.reason IN ('rateLimitExceeded', 'quotaExceeded') ``` * View errors in Cloud Audit Logs Using Logs Explorer, the following query returns errors with either Quota exceeded or limit in the message string: ``` resource.type = ("bigquery_project" OR "bigquery_dataset") protoPayload.status.code ="7" protoPayload.status.message: ("Quota exceeded" OR "limit") ``` - [Troubleshoot BigQuery quota errors](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#overview) ================================================ FILE: website/content/en/rules/bigquery/WARN/2022_002.md ================================================ --- title: "bigquery/WARN/2022_002" linkTitle: "WARN/2022_002" weight: 1 type: docs description: > BigQuery does not violate column level security --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description BigQuery provides fine-grained access to sensitive columns using policy tags. Using BigQuery column-level security, you can create policies that check, at query time, whether a user has proper access. ### Remediation The Data Catalog Fine-Grained Reader role is required for users who need access to data in secured columns. You can find who violates the access permission by taking a look the "authenticationInfo" from Cloud Logging and grant proper role to the user if needed. ### Further information - [Introduction to column-level access control](https://cloud.google.com/bigquery/docs/column-level-security-intro) - [Data Catalog IAM](https://cloud.google.com/data-catalog/docs/concepts/iam) ================================================ FILE: website/content/en/rules/bigquery/WARN/2022_003.md ================================================ --- title: "bigquery/WARN/2022_003" linkTitle: "WARN/2022_003" weight: 1 type: docs description: > BigQuery copy job does not exceed the daily copy quota --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description The copy job fails because the number of copy jobs running in a project has exceeded the daily limit. You can search in the Logs Explorer with the logging query: ``` resource.type="bigquery_resource" severity=ERROR "Quota exceeded: Your project exceeded quota for copies per project." ``` ### Remediation - Retry after the daily quota is refreshed - If the goal of the frequent copy operations is to create a snapshot of data, consider using [table snapshots](https://cloud.google.com/bigquery/docs/table-snapshots-intro) instead. Table snapshots are cheaper and faster alternative to copying full tables. - You can request a quota increase by contacting support or sales. It might take several days to review and process the request. We recommend stating the priority, use case, and the project ID in the request. ### Further information - [Quotas and limitations - Copy quotas](https://cloud.google.com/bigquery/docs/copying-datasets#copy_quotas) - [Maximum number of copy jobs per day per project quota errors](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#ts-maximum-number-of-copy-jobs-per-day-per-project-quota) - [Quickly, easily and affordably back up your data with BigQuery table snapshots](https://cloud.google.com/blog/products/data-analytics/google-bigquery-table-snapshots-for-data-backups) ================================================ FILE: website/content/en/rules/bigquery/WARN/2022_004.md ================================================ --- title: "bigquery/WARN/2022_004" linkTitle: "WARN/2022_004" weight: 1 type: docs description: > BigQuery copy job does not exceed the cross-region daily copy quota --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description The copy job fails because the number of cross-region copy jobs running in a project has exceeded the daily limit. You can search in the Logs Explorer with the logging query: ``` resource.type="bigquery_resource" severity=ERROR ("Quota exceeded: Your project exceeded quota for cross region copies per project." OR "Quota exceeded: Your table exceeded quota for cross region copies per table.") ``` ### Remediation - Retry after the daily quota is refreshed - You can request a quota increase by contacting support or sales. It might take several days to review and process the request. We recommend stating the priority, use case, and the project ID in the request. ### Further information - [Quotas and limitations - Copy quotas](https://cloud.google.com/bigquery/docs/copying-datasets#copy_quotas) ================================================ FILE: website/content/en/rules/bigquery/WARN/2023_001.md ================================================ --- title: "bigquery/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > BigQuery query job does not time out during execution --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description A BigQuery query or multi-statement query job can execute for up to six hours, after which it times out and fails. You can search in the Logs Explorer for such jobs with the logging query: ``` resource.type="bigquery_resource" severity=ERROR protoPayload.methodName="jobservice.jobcompleted" protoPayload.status.message:"Operation timed out after 6.0 hours" ``` ### Remediation - If the exact query is being run for the first time or has never succeeded before, optimize the query being run by following [documented best practices for BigQuery jobs](https://cloud.google.com/bigquery/docs/best-practices-performance-compute). - If the same query used to succeed before, make sure that there were enough [computational resources (slots)](https://cloud.google.com/bigquery/docs/slots) available for the job to run and check whether the amount of data being queried has changed significantly since the last successful run. You can reach out to [Support](https://cloud.google.com/support) if you are not able to determine why the job fails. ### Further information - [Optimizing query performance](https://cloud.google.com/bigquery/docs/best-practices-performance-overview) - [Quotas and Limits - Query Jobs](https://cloud.google.com/bigquery/quotas#query_jobs) ================================================ FILE: website/content/en/rules/bigquery/WARN/2023_002.md ================================================ --- title: "bigquery/WARN/2023_005" linkTitle: "WARN/2023_005" weight: 1 type: docs description: > Erratic failure with wildcard table --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description In order to execute a GoogleSQL query that uses a wildcard table, BigQuery automatically infers the schema for that table. BigQuery uses the schema for the most recently created table that matches the wildcard as the schema for the wildcard table. Even if you restrict the number of tables that you want to use from the wildcard table using the `_TABLE_SUFFIX` pseudo column in a `WHERE` clause, BigQuery uses the schema for the most recently created table that matches the wildcard. If the schema is inconsistent across the tables matched by the wildcard query, then BigQuery returns an error. This is the case when the columns of the matched tables have different data types, or when the columns which are not present in all of the matched tables cannot be assumed to have a null value. ### Remediation You will need to either rewrite the query, or change the schema in the wildcard tables you are querying, or not use a wildcard. ### Further information - [Read more about Wildcard tables in BigQuery](https://cloud.google.com/bigquery/docs/querying-wildcard-tables) - [Read more about Querying a Wildcard Table](https://cloud.google.com/bigquery/docs/reference/standard-sql/wildcard-table-reference) - [Read more about best practices for writing a query for a Wildcard table](https://cloud.google.com/bigquery/docs/querying-wildcard-tables#schema_used_for_query_evaluation) ================================================ FILE: website/content/en/rules/bigquery/WARN/2023_003.md ================================================ --- title: "bigquery/WARN/2023_003" linkTitle: "WARN/2023_003" weight: 1 type: docs description: > BigQuery query job does not fail with too many output columns error --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description This issue is caused when a job cannot be completed within a memory budget because of the possibility of user's schema being too large and nested. ### Remediation The number of columns is the highest contributor to memory footprint and reducing the number of columns would be the best workaround for this issue. ================================================ FILE: website/content/en/rules/bigquery/WARN/2023_004.md ================================================ --- title: "bigquery/WARN/2023_004" linkTitle: "WARN/2023_004" weight: 1 type: docs description: > BigQuery CMEK-related operations do not fail due to missing permissions --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description BigQuery CMEK-related operations will fail if the BigQuery encryption service account for that project does not have the permission to encrypt and decrypt using that CMEK KMS key. You can search in the Logs Explorer for such failing operations with the logging query: ``` resource.type="bigquery_resource" severity=ERROR protoPayload.serviceName="bigquery.googleapis.com" protoPayload.status.message=~"Access Denied: BigQuery BigQuery: Cloud KMS Error: Permission .* Please grant Cloud KMS CryptoKey Encrypter/Decrypter role to BigQuery service account.*" ``` ### Remediation To protect your BigQuery data with a CMEK key, grant the BigQuery encryption service account permission to encrypt and decrypt using that key via the Cloud KMS CryptoKey Encrypter/Decrypter IAM role. The BigQuery encryption service account is of the form `bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com` ### Further information - [Grant encryption and decryption permission to BigQuery encryption service account](https://cloud.google.com/bigquery/docs/customer-managed-encryption#grant_permission) ================================================ FILE: website/content/en/rules/bigquery/WARN/2024_001.md ================================================ --- title: "bigquery/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > BigQuery table does not exceeds the limit for imports or query appends --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description BigQuery returns this error message when your table reaches the limit for table operations per day for Standard tables. Table operations include the combined total of all load jobs, copy jobs, and query jobs that append or overwrite a destination table. You can search in the Logs Explorer with the logging query: ``` resource.type="bigquery_resource" severity>=ERROR "Your table exceeded quota for imports or query appends per table" ``` ### Remediation If you have not identified the source from where most table operations are originating, do the following: 1. Make a note of the project, dataset, and table that the failed query, load, or the copy job is writing to. 2. Use `INFORMATION_SCHEMA.JOBS_BY_*` tables to learn more about jobs that modify the table. The following example finds the hourly count of jobs grouped by job type for a 24-hour period using `JOBS_BY_PROJECT`. If you expect multiple projects to write to the table, replace `JOBS_BY_PROJECT` with `JOBS_BY_ORGANIZATION`. ``` SELECT TIMESTAMP_TRUNC(creation_time, HOUR), job_type, count(1) FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT #Adjust time WHERE creation_time BETWEEN "2021-06-20 00:00:00" AND "2021-06-21 00:00:00" AND destination_table.project_id = "my-project-id" AND destination_table.dataset_id = "my_dataset" AND destination_table.table_id = "my_table" GROUP BY 1, 2 ORDER BY 1 DESC ``` **This quota cannot be increased. To resolve this quota error, do the following:** * If you frequently load data from multiple small files stored in Cloud Storage that uses a job per file, then combine multiple load jobs into a single job. You can load from multiple Cloud Storage URIs with a comma-separated list (for example, `gs://my_path/file_1,gs://my_path/file_2`), or by using wildcards (for example, `gs://my_path/*`). For more information, see [Batch loading data](https://cloud.google.com/bigquery/docs/batch-loading-data#permissions-load-data-from-cloud-storage) * If you use load, select or copy jobs to append single rows of data to a table, for example, then you should consider batching multiple jobs into one job. BigQuery doesn't perform well when used as a relational database. As a best practice, avoid running frequent, single-row append actions. * To append data at a high rate, consider using [BigQuery Storage Write API](https://cloud.google.com/bigquery/docs/write-api). It is a recommended solution for high-performance data ingestion. The BigQuery Storage Write API has robust features, including exactly-once delivery semantics. To learn about limits and quotas, see [Storage Write API](https://cloud.google.com/bigquery/quotas#write-api-limits) and to see costs of using this API, see [BigQuery data ingestion pricing.](https://cloud.google.com/bigquery/pricing#data_ingestion_pricing) ### Further information - [Quotas and limitations - Table modifications per day](https://cloud.google.com/bigquery/quotas#standard_tables) ================================================ FILE: website/content/en/rules/bigquery/WARN/2024_002.md ================================================ --- title: "bigquery/WARN/2024_002" linkTitle: "WARN/2024_002" weight: 1 type: docs description: > BigQuery external connection with Cloud SQL does not fail --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description When connecting with Cloud SQL external connection using bigquery the BigQuery Connection Service Agent is automatically created and given an IAM role as Cloud SQL client. If the role doesn't exists, query over the associated data source connection fails. ### Remediation Ensure that valid credentials were used and all prerequisites were followed to create the connection for Cloud SQL. Check if the service account that is automatically created when a connection to Cloud SQL is created has the Cloud SQL Client (roles/cloudsql.client) role. The service account is of the following format: service-PROJECT_NUMBER@gcp-sa-bigqueryconnection.iam.gserviceaccount.com ### Further information [1] https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries#troubleshooting [2] https://cloud.google.com/bigquery/docs/connect-to-sql#access-sql ================================================ FILE: website/content/en/rules/bigquery/WARN/2024_003.md ================================================ --- title: "bigquery/WARN/2024_003" linkTitle: "WARN/2024_003" weight: 1 type: docs description: > BigQuery job does not fail due to Maximum API requests per user per method exceeded. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description BigQuery returns Quota exceeded or Exceeded rate limits error when you hit the rate limit for the number of API requests to a BigQuery API per user per method. ### Remediation The quota for a few calls for example, the ```tables.get``` method calls from a service account, or the ```jobs.insert``` method calls. The default quota considered for these calls is 100 calls per second and is enforced per user and not per project. The error thrown when this limit is breached is as follows: ```Exceeded rate limits: too many api requests per user per method for this user_method``` When you encounter this error, [diagnose](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#ts-maximum-api-request-limit-diagnose) the issue and then follow the [recommended](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#ts-maximum-api-request-limit-resolution) steps to resolve it. ### Further information - [API quotas and limits](https://cloud.google.com/bigquery/quotas#api_quotas_and_limits) ================================================ FILE: website/content/en/rules/bigquery/WARN/2024_004.md ================================================ --- title: "bigquery/WARN/2024_004" linkTitle: "WARN/2024_004" weight: 1 type: docs description: > BigQuery job not exceeding the concurrent queries limit for remote functions. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description BigQuery encountered a "Exceeded rate limits" error. This means the number of queries simultaneously using remote functions surpassed a predefined threshold to ensure system stability. To avoid overloading the system, BigQuery restricts the number of concurrent operations. ### Remediation [Maximum number of concurrent queries that contain remote functions](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#ts-maximum-number-of-concurrent-remote-functions) ### Further information [Remote function limits.](https://cloud.google.com/bigquery/quotas#remote_function_limits) ================================================ FILE: website/content/en/rules/bigquery/WARN/2024_005.md ================================================ --- title: "bigquery/WARN/2024_005" linkTitle: "WARN/2024_005" weight: 1 type: docs description: > BigQuery table does not exceed quota for Number of partition modifications to a column partitioned table --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description BigQuery returns this error when your column-partitioned table reaches the quota of the number of partition modifications permitted per day. Partition modifications include the total of all load jobs, copy jobs, and query jobs that append or overwrite a destination partition. To see the value of the Number of partition modifications per column-partitioned table per day limit, see [Partitioned tables](https://cloud.google.com/bigquery/quotas#partitioned_tables). ### Remediation **This quota cannot be increased. To resolve this quota error, do the following:** * Change the partitioning on the table to have more data in each partition, in order to decrease the total number of partitions. For example, change from [partitioning by day to partitioning by month](https://cloud.google.com/bigquery/docs/partitioned-tables#choosing_daily_hourly_monthly_or_yearly_partitioning) or change [how you partition the table.](https://cloud.google.com/bigquery/docs/partitioned-tables) * Use [clustering](https://cloud.google.com/bigquery/docs/clustered-tables#when_to_use_clustering) instead of partitioning. * If you frequently load data from multiple small files stored in Cloud Storage that uses a job per file, then combine multiple load jobs into a single job. You can load from multiple Cloud Storage URIs with a comma-separated list (for example, gs://my_path/file_1,gs://my_path/file_2), or by using wildcards (for example, gs://my_path/*). For more information, see [Batch loading data.](https://cloud.google.com/bigquery/docs/batch-loading-data#permissions-load-data-from-cloud-storage) * If you use load, select or copy jobs to append single rows of data to a table, for example, then you should consider batching multiple jobs into one job. BigQuery doesn't perform well when used as a relational database. As a best practice, avoid running frequent, single-row append actions. * To append data at a high rate, consider using [BigQuery Storage Write API.](https://cloud.google.com/bigquery/docs/write-api) It is a recommended solution for high-performance data ingestion. The BigQuery Storage Write API has robust features, including exactly-once delivery semantics. To learn about limits and quotas, see Storage Write API and to see costs of using this API, see BigQuery data ingestion pricing. ### Further information - [Quotas and limitations - Partitioned tables](https://cloud.google.com/bigquery/quotas#partitioned_tables) ================================================ FILE: website/content/en/rules/bigquery/WARN/2024_006.md ================================================ --- title: "bigquery/WARN/2024_006" linkTitle: "WARN/2024_006" weight: 1 type: docs description: > BigQuery project does not exceed maximum tabledata.list bytes per second per project --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Rule class**: WARN - Something that is possibly wrong ### Description BigQuery returns this error when the project number mentioned in the error message reaches the maximum size of data that can be read through the tabledata.list API call in a project per second. Your project can return a maximum of 7.5 GB of table row data per minute via tabledata.list in the us and eu multi-regions, and 3.7 GB of table row data per minute in all other regions. This quota applies to the project that contains the table being read. Other APIs including jobs.getQueryResults and fetching results from jobs.query and jobs.insert can also consume this quota. ### Remediation To resolve this error, do the following: * In general, we recommend trying to stay below this limit. For example, by spacing out requests over a longer period with delays. If the error doesn't happen frequently, implementing retries with exponential backoff solves this issue. * If the use case expects fast and frequent reading of large amount of data from a table, we recommend using [BigQuery Storage Read API](https://cloud.google.com/bigquery/docs/reference/storage) instead of the `tabledata.list` API. * If the preceding suggestions do not work, you can request a quota increase from Google Cloud console API dashboard by doing the following: 1. Go to the Google Cloud console API dashboard. 2. In the dashboard, filter for Quota: `Tabledata list bytes per minute (default quota)`. 3. Select the quota and follow the instruction in [Requesting higher quota limit.](https://cloud.google.com/docs/quotas/view-manage#requesting_higher_quota) It might take several days to review and process the request. ### Further information The [BigQuery Storage Read API](https://cloud.google.com/bigquery/docs/reference/storage) can sustain significantly higher throughput than `tabledata.list`. If you need more throughput than allowed under this quota, consider using the BigQuery Storage Read API. ================================================ FILE: website/content/en/rules/bigquery/_index.md ================================================ --- title: "BIGQUERY" linkTitle: "bigquery" type: docs --- ================================================ FILE: website/content/en/rules/billing/WARN/2022_001.md ================================================ --- title: "billing/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > Projects have billing enabled --- **Product**: [Cloud Billing](https://cloud.google.com/billing)\ **Rule class**: WARN - Something that is possibly wrong ### Description Check whether all projects the user has permission to view have billing enabled. GCP services, require an active billing account attached to the project in order to be activated, and remain active. Disabling billing for a project will stop all the active paid resources immediately. If the project continues without a Billing Account attached for a long time, some resources may be deleted unrecoverably after an undertemined but short amount of time. ### Remediation - [How to enable billing](https://cloud.google.com/billing/docs/how-to/modify-project#how-to-enable-billing) ### Further information ================================================ FILE: website/content/en/rules/billing/WARN/2022_002.md ================================================ --- title: "billing/WARN/2022_002" linkTitle: "WARN/2022_002" weight: 1 type: docs description: > Billing Accounts have at least one project associated with them --- **Product**: [Cloud Billing](https://cloud.google.com/billing)\ **Rule class**: WARN - Something that is possibly wrong ### Description Check whether all active billing accounts the user has permission to view have at least one project associated with them. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/billing/WARN/2022_003.md ================================================ --- title: "billing/WARN/2022_003" linkTitle: "WARN/2022_003" weight: 1 type: docs description: > Check for any billing anomalies using cost insights --- **Product**: [Cloud Billing](https://cloud.google.com/billing)\ **Rule class**: WARN - Something that is possibly wrong ### Description Cost insights are part of the Recommender service, and you can use them to find important patterns in your costs. For example, you see a cost insight in the Insights API if your costs for a day are significantly higher or lower than your typical daily costs. You can use this information to find out if some of your resources are getting more usage than expected, and take action to optimize your costs. Note, cost insights are calculated before any credits (such as promotional credits or Committed Use Discounts (CUDs)) are applied to your Cloud Billing account. ### Remediation The details of the WARNING will let you know if the costs are higher or lower than expected. For lower than expected costs, check whether all services you expect to be running are indeed running. For higher than expected costs, take a look at the Billing Console to see what product is causing the spike. ### Further information - [How to view your billing reports](https://cloud.google.com/billing/docs/how-to/reports) - [Understanding cost insights](https://cloud.google.com/billing/docs/how-to/get-cost-insights) ================================================ FILE: website/content/en/rules/billing/_index.md ================================================ --- title: "BILLING" linkTitle: "billing" type: docs --- ================================================ FILE: website/content/en/rules/cloudrun/ERR/2022_001.md ================================================ --- title: "cloudrun/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > Cloud Run service agent has the run.serviceAgent role. --- **Product**: [Cloud Run](https://cloud.google.com/run)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Cloud Run Service Agent is missing the run.serviceAgent role, which gives Cloud Run service account access to managed resources. You can resolve this error by granting the run.serviceAgent IAM role to service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com. ### Remediation ### Further information - [Troubleshooting permission errors](https://cloud.google.com/run/docs/troubleshooting#service-agent) ================================================ FILE: website/content/en/rules/cloudrun/_index.md ================================================ --- title: "CLOUDRUN" linkTitle: "cloudrun" type: docs description: "Cloud Run" --- ================================================ FILE: website/content/en/rules/cloudsql/BP/2023_001.md ================================================ --- title: "cloudsql/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > Cloud SQL is not assigned Public IP. --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: Best practices ### Description To lower your attack surface, Cloud SQL databases should not have public IPs. Private IPs provide improved network security and lower latency for your application. ### Remediation Make sure that you do not assign Public IP to CloudSQL instances. ### Further information - [Configure private IP](https://cloud.google.com/sql/docs/mysql/configure-private-ip) ================================================ FILE: website/content/en/rules/cloudsql/BP/2023_002.md ================================================ --- title: "cloudsql/BP/2023_002" linkTitle: "BP/2023_002" weight: 1 type: docs description: > Cloud SQL is configured with automated backup --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: Best practices ### Description Backups help you restore lost data to your Cloud SQL instance. Additionally, if an instance is having a problem, you can restore it to a previous state by using the backup to overwrite it. Enable automated backups for any instance that contains necessary data. Backups protect your data from loss or damage. ### Remediation You can set the autoamted backup option when you create an instance. Additionally, you can [set this option on an existing instance](https://cloud.google.com/sql/docs/mysql/edit-instance#edit_an_instance). ### Further information - [Instance configuration and administration](https://cloud.google.com/sql/docs/best-practices.md#backup-recovery) - [About Cloud SQL backups](https://cloud.google.com/sql/docs/mysql/backup-recovery/backups) ================================================ FILE: website/content/en/rules/cloudsql/BP/2023_003.md ================================================ --- title: "cloudsql/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > Cloud SQL instance's log_output flag is not configured as TABLE --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: WARN - Something that is possibly wrong ### Description If you set log_output to TABLE, the log output is placed in a table in the mysql system database. It might consume a considerable amount of disk space. If this table becomes large, it can affect instance restart time or cause the instance to lose its SLA coverage. For this reason, the TABLE option is not recommended. ### Remediation Change the `log_output` flag to `FILE` or `NONE`. Note that to minimize instance storage cost, logs on the instance disk are rotated when the log file is older than 24 hours (and no changes have been made within that duration) or greater than 100MB in size. Old log files are automatically deleted after the rotation. ### Further information - [Tips for working with flags](https://cloud.google.com/sql/docs/mysql/flags#tips) ================================================ FILE: website/content/en/rules/cloudsql/BP_EXT/2023_001.md ================================================ --- title: "cloudsql/BP_EXT/2023_001" linkTitle: "BP_EXT/2023_001" weight: 1 type: docs description: > Cloud SQL is defined with Maintenance Window as any. --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Configure a maintenance window for your primary instance to control when disruptive updates can occur. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/cloudsql/BP_EXT/2023_002.md ================================================ --- title: "cloudsql/BP_EXT/2023_002" linkTitle: "BP_EXT/2023_002" weight: 1 type: docs description: > Cloud SQL is not configured with Deletion Protection. --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Protect your CloudSQL instance and backups from accidental deletion. ### Remediation You can set the deletion protection option when you create an instance. Additionally, you can set this option on an existing instance. In both cases, deletion is prevented at the instance level. By default, the deletion protection option is disabled unless you use the Google Cloud console or Terraform to create an instance. ### Further information - [Deletion Protection](https://cloud.google.com/sql/docs/mysql/deletion-protection) ================================================ FILE: website/content/en/rules/cloudsql/BP_EXT/2023_003.md ================================================ --- title: "cloudsql/BP_EXT/2023_003" linkTitle: "BP_EXT/2023_003" weight: 1 type: docs description: > Cloud SQL enables automatic storage increases feature --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Configure storage to accommodate critical database maintennance by enabling the automatic storage increases feature. Otherwise, ensure that you have at least 20% available space to accommodate any critical database maintenance operations that Cloud SQL may perform. Keep in mind that when an instance becomes unable to add storage that it needs, the instance likely stops accepting incoming connections and could go offline. ### Remediation You can set the automatic storage increases option when you create an instance. Additionally, you can [set this option on an existing instance](https://cloud.google.com/sql/docs/mysql/edit-instance#edit_an_instance). ### Further information - [Instance configuration and administration](https://cloud.google.com/sql/docs/best-practices.md#admin) - [Enable automatic storage increases](https://cloud.google.com/sql/docs/mysql/instance-settings#automatic-storage-increase-2ndgen) ================================================ FILE: website/content/en/rules/cloudsql/BP_EXT/2023_004.md ================================================ --- title: "cloudsql/BP_EXT/2023_004" linkTitle: "BP_EXT/2023_004" weight: 1 type: docs description: > Cloud SQL instance is covered by the SLA --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Only Cloud SQL instances configured for high availability with at least one dedicated CPU are covered by the Cloud SQL SLA. Shared-core instances and single-zone instances are not covered by the SLA. These machine types are configured to use a shared-core CPU, and are designed to provide low-cost test and development instances only. Don't use them for production instances. ### Remediation You can change the machine type and high availability configurations when you create an instance. Otherwise, you can [set this option on an existing instance](https://cloud.google.com/sql/docs/mysql/edit-instance#edit_an_instance). ### Further information - [Operational guidelines](https://cloud.google.com/sql/docs/operational-guidelines#general_configuration_requirements) - [About instance settings](https://cloud.google.com/sql/docs/mysql/instance-settings#machine-type-2ndgen) ================================================ FILE: website/content/en/rules/cloudsql/ERR/2023_001.md ================================================ --- title: "cloudsql/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > Cloud SQL instance should not be in SUSPENDED state --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The SUSPENDED state indicates a billing issue with your Google Cloud account. You can determine your billing status by filing a Billing Support Request. After the billing issue is resolved, the instance returns to runnable status within a few hours. Note that suspended MySQL instances are deleted after 90 days. ### Remediation Make sure that your billing status is not disabled and has no issue by filing a [Billing Support Request](https://cloud.google.com/support/billing/?visit_id=638223058593313080-26640928&rd=1). ### Further information - [FAQ: Why is my instance suspended?](https://cloud.google.com/sql/faq) ================================================ FILE: website/content/en/rules/cloudsql/SEC/2023_001.md ================================================ --- title: "cloudsql/SEC/2023_001" linkTitle: "SEC/2023_001" weight: 1 type: docs description: > Cloud SQL is not publicly accessible. --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: SEC - Potential security issue ### Description Your SQL instance has 0.0.0.0/0 as an allowed network. This occurrence means that any IPv4 client can pass the network firewall and make login attempts to your instance, including clients you might not have intended to allow. Clients still need valid credentials to successfully log in to your instance. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/cloudsql/WARN/2022_001.md ================================================ --- title: "cloudsql/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > Cloud SQL is not using Docker bridge network. --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: WARN - Something that is possibly wrong ### Description The IP range 172.17.0.0/16 is reserved for the Docker bridge network. Any Cloud SQL instances created with an IP in that range will be unreachable. Connections from any IP within that range to Cloud SQL instances using private IP fail. ### Remediation Make sure that you do not use Docker bridge network for instances that need to get accessed via private ip. ### Further information - [Configure private IP](https://cloud.google.com/sql/docs/mysql/configure-private-ip) ================================================ FILE: website/content/en/rules/cloudsql/WARN/2023_002.md ================================================ --- title: "cloudsql/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > Cloud SQL instance's avg CPU utilization is not over 98% for 6 hours --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: WARN - Something that is possibly wrong ### Description If CPU utilization is over 98% for six hours, your instance is not properly sized for your workload, and it is not covered by the SLA. ### Remediation [Increase the number of CPUs for your instance](https://cloud.google.com/sql/docs/mysql/edit-instance). Note that changing CPUs requires an instance restart. If your instance is already at the maximum number of CPUs, shard your database to multiple instances. ### Further information - [Optimize high CPU utilization](https://cloud.google.com/sql/docs/mysql/optimize-cpu-usage) - [Operational guidelines](https://cloud.google.com/sql/docs/mysql/operational-guidelines#resource_constraints) ================================================ FILE: website/content/en/rules/cloudsql/WARN/2023_003.md ================================================ --- title: "cloudsql/WARN/2023_003" linkTitle: "WARN/2023_003" weight: 1 type: docs description: > Cloud SQL instance's memory usage does not exceed 90% --- **Product**: [CloudSQL](https://cloud.google.com/sql)\ **Rule class**: WARN - Something that is possibly wrong ### Description If you have less than 10% memory in database/memory/components.cache and database/memory/components.free combined, the risk of an OOM event is high. ### Remediation [Calculate the maximum memory usage](https://cloud.google.com/sql/docs/mysql/optimize-high-memory-usage#calculate_memory_consumption) by your MySQL database to select the appropriate instance type for your MySQL database. After you analyze the memory usage by different components, set the appropriate flag in your MySQL database. Lastly, if the memory usage is still high and you feel running queries and flag values are optimized, then consider [increasing the instance size](https://cloud.google.com/sql/docs/mysql/edit-instance) to avoid OOM. ### Further information - [Optimize high memory consumption in instances](https://cloud.google.com/sql/docs/mysql/optimize-high-memory-usage#recommendations) ================================================ FILE: website/content/en/rules/cloudsql/_index.md ================================================ --- title: "CLOUDSQL" linkTitle: "cloudsql" type: docs description: Cloud SQL --- ================================================ FILE: website/content/en/rules/composer/BP/2023_001.md ================================================ --- title: "composer/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > Cloud Composer logging level is set to INFO --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Logging level of Airflow may have been set to DEBUG for troubleshooting purposes. However, it is highly recommended to revert the logging level back to INFO after the troubleshooting is completed. Leaving the logging level at DEBUG might increase costs associated with Cloud Storage. Logging levels higher than INFO (WARNING, ERROR) could suppress logs that are useful to troubleshooting, so it also not recommended. ### Remediation Revert the logging level back to INFO. ### Further information - [Logging Level of Airflow](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#troubleshooting-workflow) ================================================ FILE: website/content/en/rules/composer/BP/2023_002.md ================================================ --- title: "composer/BP/2023_002" linkTitle: "BP/2023_002" weight: 1 type: docs description: > Cloud Composer's worker concurrency is not limited by parallelism parameter --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description The parallelism defines the maximum number of task instances that can run concurrently in Airflow. Generally, the parameter should be equal or higher than a product of maximum number of workers and worker_concurrency. Otherwise, resources in workers could not be fully-utilized. ### Remediation Observe your environment's performance and adjust `parallelism` or `worker_concurrency` parameter properly. ### Further information - [Optimize environment performance and costs](https://cloud.google.com/composer/docs/composer-2/optimize-environments) - [Scaling Airflow configuration](https://cloud.google.com/composer/docs/composer-2/troubleshooting-scheduling#scaling_airflow_configuration) - [Worker concurrency](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-worker-concurrency) ================================================ FILE: website/content/en/rules/composer/BP/2023_003.md ================================================ --- title: "composer/BP/2023_003" linkTitle: "BP/2023_003" weight: 1 type: docs description: > Cloud Composer does not override the StatsD configuration --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Metrics from Cloud Composer like scheduler heartbeat, number of completed tasks and pods are collected via the StatsD daemon. If you override the default StatsD configuration, it will cause missing metrics in the monitoring pages and components including airflow-scheduler that depend on Statsd metrics for healthcheck will be marked as unhealthy. ### Remediation Remove the overridden StatsD Airflow configurations, otherwise the monitoring page will never work. Note that there is no way to make both the composer default settings and your customized StatsD settings work. ### Further information - [StatsD plugin](https://cloud.google.com/monitoring/agent/plugins/statsd) - [Airflow Metrics](https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/logging-monitoring/metrics.html) ================================================ FILE: website/content/en/rules/composer/BP_EXT/2023_001.md ================================================ --- title: "composer/BP_EXT/2023_001" linkTitle: "BP_EXT/2023_001" weight: 1 type: docs description: > Cloud Composer has no more than 2 Airflow schedulers --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Cloud Composer is configured more than 2 Airflow schedulers. In general, extra schedulers more than 2 consumes resources of your environment without contributing to overall performance. We recommend starting with two schedulers and then monitoring the performance of your environment. ### Remediation Ensure that having more than 2 schedulers doesn't affect the performance negatively. Otherwise adjust the schedulers less or equal to 2. ### Further information - [Adjust the number of schedulers](https://cloud.google.com/composer/docs/composer-2/scale-environments#scheduler-count) ================================================ FILE: website/content/en/rules/composer/BP_EXT/2023_002.md ================================================ --- title: "composer/BP_EXT/2023_002" linkTitle: "BP_EXT/2023_002" weight: 1 type: docs description: > Cloud Composer has higher version than airflow-2.2.3 --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Cloud Composer has higher version than airflow-2.2.3 Airflow UI in Airflow 2.2.3 or earlier versions is vulnerable to CVE-2021-45229. "Trigger DAG with config" screen was susceptible to XSS attacks through the origin query argument. ### Remediation Upgrade to the latest Cloud Composer version that supports Airflow 2.2.5. ### Further information - [Known Issue](https://cloud.google.com/composer/docs/composer-2/known-issues#airflow_ui_in_airflow_223_or_earlier_versions_is_vulnerable_to_cve-2021-45229) ================================================ FILE: website/content/en/rules/composer/ERR/2022_001.md ================================================ --- title: "composer/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > Composer Service Agent permissions --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Cloud Composer uses a Google-managed service account, which is called Cloud Composer Service Agent, to provision resources in the project. `composer.serviceAgent` role is automatically assigned to this account during Composer API activation and shouldn't be revoked. ### Remediation Ensure that you've the following binding in the IAM policy for the project: - Principal: `service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com` - Role: `roles/composer.serviceAgent` ### Further information - [About Cloud Composer Service Agent account](https://cloud.google.com/composer/docs/how-to/access-control#about-composer-sa) ================================================ FILE: website/content/en/rules/composer/ERR/2022_002.md ================================================ --- title: "composer/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > Composer Environment Service Account permissions --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The service account used by a Cloud Composer environment is required to have `composer.worker` role. In addition to that, in Private IP environments temporary GKE node pools can be created and the environment's service account needs to impersonate to itself. ### Remediation Ensure that you've the following binding in the IAM policy for the project: - Principal: service account of a Composer environment - Role: `roles/composer.worker` Private IP environments additionally require the following binding in the IAM policy for the environment's service account or for the whole project: - Principal: service account of a Composer environment - Role: `roles/iam.serviceAccountUser` ### Further information - [Assign roles to a user-managed service account](https://cloud.google.com/composer/docs/composer-2/access-control#service-account) ================================================ FILE: website/content/en/rules/composer/ERR/2023_001.md ================================================ --- title: "composer/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > Cloud Composer is not in ERROR state --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The ERROR state indicates that the environment has encountered an error and cannot be used. Creating/updating environment through misconfigured Terraform config, errors in PyPI Package or etc could be the cause of the issue. ### Remediation The cause of the issue could be various. To narrow down the scope, see the following troubleshooting documentations. ### Further information - [Troubleshooting environment creation](https://cloud.google.com/composer/docs/composer-2/troubleshooting-environment-creation) - [Troubleshooting environment updates and upgrades](https://cloud.google.com/composer/docs/composer-2/troubleshooting-updates-upgrades) - [Troubleshooting PyPI package installation](https://cloud.google.com/composer/docs/composer-2/troubleshooting-package-installation) ================================================ FILE: website/content/en/rules/composer/ERR/2023_002.md ================================================ --- title: "composer/ERR/2023_002" linkTitle: "ERR/2023_002" weight: 1 type: docs description: > Cloud Composer private IP Cluster non-RFC1918 IP range --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Private IP cluster (Pods, Services) Should use ALLOWED IP RANGES to create the environment.Make sure you are using ALLOWED IP RANGES during environment Creation. ### Remediation Use Private IP Range or Non-RFC1918 AllOWED IP RANGES to create private IP cluster in Composer Environment. ALLOWED_IP_RANGES : Private IP Range ``` ['10.0.0.0/8','172.16.0.0/12','192.168.0.0/16'] ``` Non-RFC1918 IP Range ``` ['100.64.0.0/10','192.0.0.0/24','192.0.2.0/24','192.88.99.0/24','198.18.0.0/15','198.51.100.0/24','203.0.113.0/24','240.0.0.0/4' ] ``` ### Further information - [Non-RFC 1918 address ranges are partially supported for Pods and Services](https://cloud.google.com/composer/docs/known-issues#non-rfc_1918_address_ranges_are_partially_supported_for_pods_and_services) - [Valid IPv4 ranges](https://cloud.google.com/vpc/docs/subnets#valid-ranges) ================================================ FILE: website/content/en/rules/composer/ERR/2023_003.md ================================================ --- title: "composer/ERR/2023_003" linkTitle: "ERR/2023_003" weight: 1 type: docs description: > Cloud Composer Dags are not getting timed out by the Dag Processor --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Sometimes we can see dag processor logs with task time out error. "Processor for/home/airflow/gcs/dags/exampledagname.py with PID 12345678 started at has timed out, killing it." In an ideal composer environment this error shouldnot occur as it is a cause of scheduler resource constraint and complex DAGparsing implementation. ### Remediation Use the dag code [best practices](https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html#top-level-python-code) so that parse time get improved. Make sure scheduler is working at its best in terms of the resources. You may start reducing the schdeuler's work by increasing the [min_file_process_interval](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#min-file-process-interval) [This page](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#dag-processor) will help to mask the issue by increasing the parsing timeout value, but it will not prevent the issue. Please follow the above points to identify and fix the DAG parsing issue. ### Further information Please visit [this page](https://cloud.google.com/composer/docs/composer-2/troubleshooting-scheduling#inspect-dag-processor-logs) for more information about DAG parsing inspection. ================================================ FILE: website/content/en/rules/composer/ERR/2023_004.md ================================================ --- title: "composer/ERR/2023_004" linkTitle: "ERR/2023_004" weight: 1 type: docs description: > Cloud Composer Dags are getting zombie error --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Based on heartbeats, the Airflow scheduler is able to detect abnormally terminated tasks - if they're missing for extended period of time, a task will be detected as a zombie and the following message will be written in logs: ``` Detected zombie job: {'full_filepath': '/home/airflow/gcs/dags/xxxx.py', 'processor_subdir': '/home/airflow/gcs/dags', 'msg': "{'DAG Id': 'DAGName', 'Task Id': 'TaskName', 'Run Id': 'scheduled__2023-12-12Txx:xx:xx.xx+00:00', 'Hostname': 'airflow-worker-xxxxx', 'External Executor Id': 'xxxx-xxxx-xxxx'}", 'simple_task_instance': , 'is_failure_callback': True} ``` This could be verified from Cloud Logging using following logging filter: ``` resource.type="cloud_composer_environment" severity>=ERROR log_id("airflow-scheduler") textPayload:"Detected zombie job" ``` ### Remediation The usual reason for Zombie tasks is the resource pressure in your environment's cluster. As a result, an Airflow worker might not be able to report the status of a task. Hence, the scheduler marks the task as a Zombie. To avoid Zombie tasks, assign more resources to your environment by using the [optimization](https://cloud.google.com/composer/docs/composer-2/optimize-environments) and [scaling](https://cloud.google.com/composer/docs/composer-2/environment-scaling steps). As a temporary workaround, you may consider increasing [scheduler]scheduler_zombie_task_threshold [Airflow configuration](https://cloud.google.com/composer/docs/composer-2/override-airflow-configurations), however, it will only change when zombies are detected and not going to prevent them. ### Further information [Troubleshooting Zombie tasks](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#zombie-tasks) [Zombie tasks](https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/tasks.html#zombie-undead-tasks_) ================================================ FILE: website/content/en/rules/composer/ERR/2023_005.md ================================================ --- title: "composer/ERR/2023_005" linkTitle: "ERR/2023_005" weight: 1 type: docs description: > Composer environment deletion not failed due to NAT configuration --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Having Composer automatically create pods and services' secondary IP ranges and then configuring Cloud NAT for the subnet and these ranges makes it so the environment deletion will fail. Verify a Composer environment deletion attempt failed due to a Cloud NAT configuration. ### Remediation - Identify the relevant NAT Gateway ID(From the error message) - Find the NAT Gateway `(Network services > Cloud NAT)` and remove the IP ranges that are no longer needed (ranges that are used by the environment's GKE cluster) in NAT mapping. - Delete the Composer Environment again. ### Further information - [Cloud NAT prevents Composer environment deletion](https://cloud.google.com/knowledge/kb/cloud-nat-prevents-composer-environment-deletion-000004225) ================================================ FILE: website/content/en/rules/composer/ERR/2024_001.md ================================================ --- title: "composer/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > Composer Creation not failed due to 'no error was surfaced' Error. --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description 'no error was surfaced' error when creating a private IP composer environment. This can happen due to a number of different reasons, possibly missing IAM permissions, misconfigured firewall rules or insufficient/incompatible IP ranges used in GKE clusters. ### Remediation To overcome the error, please check the following in the project - IAM permissions : As mentioned in the error message description, it can be caused by lack of permissions. Check all the required [IAM Permission](https://cloud.google.com/composer/docs/how-to/access-control)(not only the composer worker role mentioned in the message) for creating private IP environment. - Firewall rules: Lack or misconfiguration of firewall rules can cause such failure as well. Make sure all the [requiresd firewall rules](https://cloud.google.com/composer/docs/how-to/managing/configuring-private-ip#private-ip-firewall-rules) are in place, and there is no deny rule with higher priority to block the communication within GKE clusters. - Exhausted IP addresses : In some cases, you may find error messages like ‘IP_SPACE_EXHAUSTED’. This usually means that the IP range assigned is not sufficient to bring up the component. It is important to check which component is failed. General recommendations of the IP ranges [Configure private IP networking](https://cloud.google.com/composer/docs/how-to/managing/configuring-private-ip#step_1_check_network_requirements), and also [understand CIDR ranges for a GKE cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) - Invalid secondary IP ranges used in GKE clusters : This error can also be as a result of using invalid non-RFC 1918 addresses for Pods and Services of the GKE cluster. You should only use RFC 1918 address, or [supported non-RFC 1918 ranges](https://cloud.google.com/composer/docs/composer-2/known-issues#non-rfc_1918_address_ranges_are_partially_supported_for_pods_and_services) for these secondary addresses. - Private Service Connect : This error can also occur when You choose VPC Peerings instead of Private Service Connect (PSC) as the connection type in Composer environment configuration in Shared VPC setup. [Configuring Private Service Connect](https://cloud.google.com/composer/docs/composer-2/configure-private-service-connect) ### Further information ================================================ FILE: website/content/en/rules/composer/WARN/2022_001.md ================================================ --- title: "composer/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > Composer Service Agent permissions for Composer 2.x --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Cloud Composer 2 uses Workload Identity and requires additional permissions in order to successfully create an environment. Those permissions are provided by `composer.ServiceAgentV2Ext` role and must be granted manually. ### Remediation Ensure that you've the following binding in the IAM policy for the project: - Principal: `service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com` - Role: `roles/composer.ServiceAgentV2Ext` ### Further information - [Grant required permissions to Cloud Composer service account](https://cloud.google.com/composer/docs/composer-2/create-environments#grant-permissions) ================================================ FILE: website/content/en/rules/composer/WARN/2022_002.md ================================================ --- title: "composer/WARN/2022_002" linkTitle: "WARN/2022_002" weight: 1 type: docs description: > fluentd pods in Composer environments are not crashing --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description The fluentd runs as a daemonset and collects logs from all environment components and uploads the logs to Cloud Logging. All fluentd pods in an environment could be stuck in a CrashLoopBackOff state after upgrading the enviromennt and no logs appear in the Cloud Logging. ### Remediation This could be caused by configuration settings in the tenant project, please open a support case and share the detailed issue description. ### Further information - [Composer environment components](https://cloud.google.com/composer/docs/composer-2/environment-architecture#other_environment_components) ================================================ FILE: website/content/en/rules/composer/WARN/2022_003.md ================================================ --- title: "composer/WARN/2022_003" linkTitle: "WARN/2022_003" weight: 1 type: docs description: > Composer scheduler parses all DAG files without overloading --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description The schedulers parse DAGs before scheduling DAG runs. If DAGs take a long time to parse, this consumes scheduler's capacity and might reduce the performance of DAG runs. If the total DAG parse time exceeds about 10 seconds, the schedulers might be overloaded with DAG parsing and cannot run DAGs effectively. The default DAG parsing frequency in Airflow is 30 seconds; if DAG parsing time exceeds this threshold, parsing cycles start to overlap, which then exhausts scheduler's capacity. To check on the Monitoring dashboard, observe graphs for the total DAG parse time in the Composer Monitoring - DAG Statistics section. ### Remediation According to your observations, you might want to: - Simplify your DAGs, including their Python dependencies. - [Increase the DAG file parsing interval](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-file-process) and [increase the DAG directory listing interval](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-dir-list). - [Increase the number of schedulers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#scheduler-count). - [Increase the CPU of schedulers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#workloads-scheduler). ### Further information - [Monitor the total parse time for all DAG files](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor_the_total_parse_time_for_all_dag_files) ================================================ FILE: website/content/en/rules/composer/WARN/2023_001.md ================================================ --- title: "composer/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > Cloud Composer does not override Kerberos configurations --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Cloud Composer does not support Airflow Kerberos configuration yet. ### Remediation Remove Kerberos configurations from the environment. ### Further information - [Support for Kerberos](https://cloud.google.com/composer/docs/composer-2/known-issues#kerberos-support) ================================================ FILE: website/content/en/rules/composer/WARN/2023_002.md ================================================ --- title: "composer/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > Cloud Composer tasks are not interrupted by SIGKILL --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Sometimes your task might be using more memory than Airflow worker is allocated. In such a situation it might be interrupted by Negsignal.SIGKILL. The system sends this signal to avoid further memory consumption which might impact the execution of other Airflow tasks. You can find the issue from Cloud Logging with the filter below: ``` resource.type="cloud_composer_environment" log_id("airflow-worker") textPayload="Task exited with return code Negsignal.SIGKILL" resource.labels.environment_name="" severity=INFO ``` ### Remediation Possible solutions: - Lower worker_concurrency of Airflow worker - In the case of Cloud Composer 2, increase memory of Airflow workers - In the case of Cloud Composer 1, upgrade to bigger machine type used in Composer cluster - Optimize your tasks to use less memory ### Further information - [Troubleshooting DAGs](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#task-fails-with-negsignalsigkill) ================================================ FILE: website/content/en/rules/composer/WARN/2023_003.md ================================================ --- title: "composer/WARN/2023_003" linkTitle: "WARN/2023_003" weight: 1 type: docs description: > Cloud Composer tasks are not failed due to resource pressure --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description During execution of a task, Airflow worker's subprocess responsible for Airflow task execution could be interrupted abruptly due to resource pressure. In this case, the task would be failed without emitting logs. ### Remediation Possible solutions: - In Cloud Composer 1, create a new environment with a larger [machine type](https://cloud.google.com/compute/docs/machine-resource) than the current machine type. Consider adding more nodes to your environment and lower [[celery]worker_concurrency](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#worker-concurrency) for your workers. - In Cloud Composer 2, [increase memory limits](https://cloud.google.com/composer/docs/composer-2/scale-environments#autoscaling-workers) for Airflow workers. ### Further information - [Troubleshooting DAGs](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#task-fails-without-logs-resource-pressure) ================================================ FILE: website/content/en/rules/composer/WARN/2023_004.md ================================================ --- title: "composer/WARN/2023_004" linkTitle: "WARN/2023_004" weight: 1 type: docs description: > Cloud Composer database CPU usage does not exceed 80% --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Airflow database performance issues can lead to overall DAG execution issues. If the database CPU usage exceeds 80% for more than a few percent of the total time, the database is overloaded and requires scaling. ### Remediation Database size settings are controlled by the environment size property of your environment. To scale the database up or down, [change the environment size](https://cloud.google.com/composer/docs/composer-2/optimize-environments#env-size) to a different tier (Small, Medium, or Large). Increasing the environment size increases the costs of your environment. ### Further information - [Monitor the database CPU and memory usage](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor_the_database_cpu_and_memory_usage) ================================================ FILE: website/content/en/rules/composer/WARN/2023_005.md ================================================ --- title: "composer/WARN/2023_005" linkTitle: "WARN/2023_005" weight: 1 type: docs description: > Cloud Composer is consistently in healthy state --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Cloud Composer runs a liveness DAG named airflow_monitoring, which runs on a schedule and reports environment health. If the liveness DAG run finishes successfully, the health status is True, which means healthy. Otherwise, the health status is False. Note that the environment health could be intermittently unhealthy due to events like scheduled maintenances. However, overall it should be healthy. ### Remediation The environment health metric depends on a Composer-managed DAG named airflow_monitoring that is triggered periodically by the airflow-monitoring pod. If the DAG isn't deleted and doesn't report failures in the Airflow UI, check the airflow-monitoring logs to see if there are any problems related to reading the DAG's run statuses. Otherwise, you can check if there was a maintenance operation aligned with the unhealthy time frame from the [monitoring dashboard](https://cloud.google.com/composer/docs/composer-2/use-monitoring-dashboard#environment-overview). Note that maintenance operations happen during the configured maintenance window. If your current maintenance window does not fit to your business requirements, please consider changing it. ### Further information - [Monitor environments with Cloud Monitoring](https://cloud.google.com/composer/docs/composer-2/monitor-environments#environment-health) - [Specify maintenance windows](https://cloud.google.com/composer/docs/composer-2/specify-maintenance-windows) ================================================ FILE: website/content/en/rules/composer/WARN/2023_006.md ================================================ --- title: "composer/WARN/2023_006" linkTitle: "WARN/2023_006" weight: 1 type: docs description: > Airflow schedulers are healthy for the last hour --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Airflow schedulers report heartbeat signals every predefined interval called scheduler_heartbeat_sec (default: 5 seconds). If any heartbeats are received within the threshold time (default: 30 seconds), the Scheduler heartbeat from the monitoring dashboard is marked as Green, which means healthy. Otherwise the status is unhealthy. Note that if your environment has more than one scheduler, then the status is healthy as long as at least one of schedulers is responding. ### Remediation Identify if the issue happens at DAG parse time or while processing tasks at execution time. For more information about symptoms, see [Troubleshooting Airflow scheduler issues](https://cloud.google.com/composer/docs/composer-2/troubleshooting-scheduling). For issues at DAG parse time, inspect DAG Processor logs and increase parameters related to DAG parsing (dagbag-import-timeout, dag-file-processor-timeout) if there are DAGs not parsed properly. Otherwise, fix or remove DAGs that cause problems to the DAG processor. For issues at execution time, make sure that airflow-scheduler pods of the GKE cluster are not overloaded. If you can find singns of being overloaded like CPU usage hitting limit, restarting due to OOMKilled or ephemeral storage usage is reaching its limit, [adjust scheduler scale and performance parameters](https://cloud.google.com/composer/docs/composer-2/scale-environments#workloads-configuration) properly. ### Further information - [Troubleshooting Airflow scheduler issues](https://cloud.google.com/composer/docs/composer-2/troubleshooting-scheduling) - [Known issues](https://cloud.google.com/composer/docs/composer-2/known-issues) - [scheduler_heartbeat_sec](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#scheduler-heartbeat-sec) - [scheduler_health_check_threshold](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#scheduler-health-check-threshold) - [dagbag_import_timeout](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#dagbag-import-timeout) - [dag_file_processor_timeout](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#dag-file-processor-timeout) ================================================ FILE: website/content/en/rules/composer/WARN/2023_007.md ================================================ --- title: "composer/WARN/2023_007" linkTitle: "WARN/2023_007" weight: 1 type: docs description: > Cloud Composer Scheduler CPU limit exceeded --- **Product**: [Cloud Composer](https://cloud.google.com/composer) **Rule class**: WARN - Something that is possibly wrong ### Description Airflow scheduler's CPU and memory metrics help you check whether the scheduler's performance is a bottleneck in the overall Airflow performance. ### Remediation If Scheduler CPU usage exceeds 80% for longer than a few percent of the total time, you might want to: [Increase the DAG file parsing interval](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-file-process) and [increase the DAG directory listing interval](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-dir-list) [Increase the number of schedulers.](https://cloud.google.com/composer/docs/composer-2/optimize-environments#scheduler-count) [Increase the CPU of schedulers.](https://cloud.google.com/composer/docs/composer-2/optimize-environments#workloads-scheduler) ### Further information - [Monitor scheduler CPU and memory metrics](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor-scheduler) ================================================ FILE: website/content/en/rules/composer/WARN/2023_008.md ================================================ --- title: "composer/WARN/2023_008" linkTitle: "WARN/2023_008" weight: 1 type: docs description: > Cloud Composer Airflow database is in healthy state --- **Product**: [Cloud Composer](https://cloud.google.com/composer) **Rule class**: WARN - Something that is possibly wrong ### Description The Airflow monitoring pod pings the database every minute and reports health status as True if a SQL connection can be established or False if not. Note that the environment health could be intermittently unhealthy due to events like scheduled maintenances. However, overall it should be healthy. ### Remediation To check the health of your database, you can use the following health status metric: composer.googleapis.com/environment/database_health. Otherwise, you can check if there was a maintenance operation aligned with the unhealthy time frame from the [monitoring dashboard](https://cloud.google.com/composer/docs/composer-2/use-monitoring-dashboard#environment-overview). Note that maintenance operations happen during the configured maintenance window. If your current maintenance window does not fit to your business requirements, please consider changing it. ### Further information - [Monitor environments with Cloud Monitoring](https://cloud.google.com/composer/docs/how-to/managing/monitoring-environments#database-metrics) - [Specify maintenance windows](https://cloud.google.com/composer/docs/composer-2/specify-maintenance-windows) ================================================ FILE: website/content/en/rules/composer/WARN/2023_009.md ================================================ --- title: "composer/WARN/2023_009" linkTitle: "WARN/2023_009" weight: 1 type: docs description: > Cloud Composer Intermittent Task Failure during Scheduling --- **Product**: [Cloud Composer](https://cloud.google.com/composer) **Rule class**: WARN - Something that is possibly wrong ### Description The issue is seen in a Airflow Scheduler for the task instance during the execution of task. However, the logs do not explain the cause of task failure and Airflow Worker and Airflow Scheduler looked relatively healthy. The error message on Airflow Scheduler may look like the following error: ``` Executor reports task instance finished (failed) although the task says its queued. (Info: None) Was the task killed externally? ``` Or there might be some error on Airflow Worker similar to following error: ``` Log file is not found: gs://$BUCKET_NAME/logs/$DAG_NAME/$TASK_NAME/2023-01-25T05:01:17.044759+00:00/1.log. The task might not have been executed or worker executing it might have finished abnormally (e.g. was evicted). ``` This could be verified from Cloud Logging using following logging filter: ``` resource.type="cloud_composer_environment" severity>=ERROR log_id("airflow-scheduler") textPayload:"[queued]> finished (failed) although the task says its queued." ``` ### Remediation There could be multiple reasons for the failure, we strongly recommend to check the below methods to mitigate the issue - Could be due to longstanding issue in [Airflow](https://github.com/apache/airflow/issues/10790), Proactively implementing appropriate retry strategies at both the task and DAG levels. - [Enable task retries](https://cloud.google.com/composer/docs/release-notes#August_05_2021); starting on Composer version 1.16.13, Airflow 2 performs two retries for a failed task by default. - [Provision enough resources for workers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor_workers_cpu_and_memory_usage). - Make sure `[celery]worker_concurrency` is not [too high](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-worker-concurrency). - [Optimize top level code](https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html#top-level-python-code) and avoid unnecessary code. - Reduce [DAG complexity](https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html#reducing-dag-complexity). - Review the Airflow community recommendations for [dynamic DAGs generation](https://airflow.apache.org/docs/apache-airflow/stable/howto/dynamic-dag-generation.html) ### Further information - [Airflow Known Issue](https://github.com/apache/airflow/issues/10790) - [Intermittent Task Failure during Scheduling in Cloud Composer](https://cloud.google.com/composer/docs/known-issues#intermittent_task_failure_during_scheduling_in) - [Monitoring running and queued tasks](https://cloud.google.com/composer/docs/troubleshooting-scheduling#monitoring_running_and_queued_tasks) ================================================ FILE: website/content/en/rules/composer/WARN/2024_001.md ================================================ --- title: "composer/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > Cloud Composer Scheduler CPU usage above 30%-35%. --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Scheduler CPU usage is consistently below 30%-35%, Recommended to Reduce the number of schedulers and Reduce the CPU of schedulers for Optimize environment performance and costs ### Remediation If the Scheduler CPU usage is consistently below 30%-35%, you might want to: - [Reduce the number of schedulers.](https://cloud.google.com/composer/docs/composer-2/optimize-environments#scheduler-count) - [Reduce the CPU of schedulers.](https://cloud.google.com/composer/docs/composer-2/optimize-environments#workloads-scheduler) ### Further information - Learn More about [Optimize environment performance and costs](https://cloud.google.com/composer/docs/composer-2/optimize-environments) - [Monitor scheduler CPU and memory metrics](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor-scheduler) ================================================ FILE: website/content/en/rules/composer/WARN/2024_002.md ================================================ --- title: "composer/WARN/2024_002" linkTitle: "WARN/2024_002" weight: 1 type: docs description: > Cloud Composer Airflow Worker Pods not in Eviction state. --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Pod eviction can happen when a particular pod in your environment's cluster reaches its resource limits.If an Airflow worker pod is evicted, all task instances running on that pod are interrupted, and later marked as failed by Airflow. ### Remediation If you observe Airflow Worker Pod eviction in Composer environment, you might want to: - [Increase the memory available to workers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#workloads-workers). - [Reduce worker concurrency](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-worker-concurrency). In this way, a single worker handles fewer tasks at once. - If you change worker concurrency, you might also want to [increase the maximum number of workers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#worker-count). ### Further information - Learn More about [Optimize environment performance and costs](https://cloud.google.com/composer/docs/composer-2/optimize-environments) - [Monitor worker pod evictions](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor-evictions) ================================================ FILE: website/content/en/rules/composer/WARN/2024_003.md ================================================ --- title: "composer/WARN/2024_003" linkTitle: "WARN/2024_003" weight: 1 type: docs description: > Having the composer API enabled ensures the environment remains in a healthy state. --- **Product**: [Cloud Composer](https://cloud.google.com/composer)\ **Rule class**: WARN - Something that is possibly wrong ### Description Disabling the Cloud Composer's service (API) puts Composer environments into a permanent failed state, and permanently deletes the Composer tenant project. Make sure that all Cloud Composer environments in your project are deleted. ### Remediation Any of these error messages may appear as a banner on the Environment details page in Console: - ```This environment cannot be edited due to the errors that occurred during environment creation/update. Please investigate the logs to determine the cause, or create a new environment.``` - ```An error occurred with retrieving the last operation on this environment``` - ```The most recent update failed due to below error.The environment has been set to ERROR state permanently due to deactivation of the Cloud Composer service API.``` - ```ERROR: (gcloud.beta.composer.environments.restart-web-server) FAILED_PRECONDITION: Cannot update environment in state ERROR. Environment must be in RUNNING state.``` 1. Re-enable the Composer API ([public doc](https://cloud.google.com/composer/docs/composer-2/enable-composer-service)). 2. Note that re-enabling the API will **NOT** restore old Composer environments which entered into the permanent failed state. 3. Create a new Composer environment. 4. Delete the old environment, which cannot be recovered. ### Further information ================================================ FILE: website/content/en/rules/composer/_index.md ================================================ --- title: "COMPOSER" linkTitle: "composer" type: docs description: "Cloud Composer" --- ================================================ FILE: website/content/en/rules/dataflow/BP/2023_001.md ================================================ --- title: "dataflow/WARN/2023_005" linkTitle: "WARN/2023_005" weight: 1 type: docs description: > Dataflow job is using supported Apache Beam SDK version --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: WARN - Something that is possibly wrong ### Description Apache Beam SDK versions are supported by Dataflow from their release date until their deprecation date. ### Remediation When an SDK version is deprecated, it continues to work with Dataflow but might be decommissioned in the future. Before an SDK version is decommissioned, customers are notified and given time to upgrade their environments. Requests for jobs submitted from deprecated SDK versions result in a warning message. It's recommended that you update environments that use a deprecated version of an SDK to a supported version, but deprecated SDK versions continue to work with Dataflow. ### Further information [Dataflow SDK version support status](https://cloud.google.com/dataflow/docs/support/sdk-version-support-status) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_001.md ================================================ --- title: "dataflow/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > Dataflow service account has dataflow.serviceAgent role --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Check that the service account service-@dataflow-service-producer-prod.iam.gserviceaccount.com has the following role: roles/dataflow.serviceAgent ### Remediation This role is assigned automatically to the service account when you enable the Dataflow API for your project from the APIs page in the Google Cloud console. ### Further information Refer [link](https://cloud.google.com/dataflow/docs/concepts/access-control#:~:text=The%20Dataflow%20Service%20Agent%20role) to know more about this. ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_002.md ================================================ --- title: "dataflow/ERR/2023_002" linkTitle: "ERR/2023_002" weight: 1 type: docs description: > Dataflow job does not fail during execution due to IP space exhaustion --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description A Dataflow job runs successfully if subnet has enough ip space for all workers in job, otherwise it fails with IP_SPACE_EXHAUSTED error. You can search in the Logs Explorer for such jobs with the logging query: ``` resource.type="dataflow_step" log_id("dataflow.googleapis.com/job-message") severity=ERROR textPayload=~"IP_SPACE_EXHAUSTED" ``` ### Remediation - If dataflow job failed because of IP_SPACE_EXHAUSTED error, then this might be because of exhaustion of subnet IP address space. The possible resolution can be either by reducing the number of workers requesting IP addresses, [increasing the subnet IP address space](https://cloud.google.com/sdk/gcloud/reference/compute/networks/subnets/expand-ip-range), or running enough jobs to not reach this limitation. ### Further information - [Expand subnet IP range](https://cloud.google.com/sdk/gcloud/reference/compute/networks/subnets/expand-ip-range) - [Reason of failure of worker pool startup](https://cloud.google.com/dataflow/docs/guides/common-errors#worker-pool-failure) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_003.md ================================================ --- title: "dataflow/ERR/2023_003" linkTitle: "ERR/2023_003" weight: 1 type: docs description: > Dataflow job does not fail during execution due to incorrect specification of subnet --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description A dataflow job runs successfully if subnet is properly specified while launching the job, otherwise it fails with Invalid subnetwork specified error. You can search in the Logs Explorer for such jobs with the logging query: ``` resource.type="dataflow_step" log_id("dataflow.googleapis.com/job-message") severity=ERROR textPayload=~"Workflow failed. Causes: Invalid subnetwork specified: .* should match regions/REGION/subnetworks/SUBNETWORK." ``` ### Remediation - If the subnetwork is located in a Shared VPC network, you must use the complete URL. When specifying the subnetwork URL for Shared VPC, ensure that HOST_PROJECT_ID is the project in which the VPC is hosted. Please make sure specified subnet exists in your project if you are not using shared VPC or exists in host project if you are using shared VPC. For best practices, please follow this [doc](https://cloud.google.com/dataflow/docs/guides/specifying-networks). ### Further information - [Specify a network and subnetwork for dataflow jobs](https://cloud.google.com/dataflow/docs/guides/specifying-networks) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_004.md ================================================ --- title: "dataflow/ERR/2023_004" linkTitle: "ERR/2023_004" weight: 1 type: docs description: > Dataflow job does not fail during execution due to violating an organization policy constraint in project --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description A Dataflow job might fail if there are organization policy constraints (eg: constraints/compute.vmExternalIpAccess, constraints/compute.requireShieldedVm etc.) that might limit VM instance creation in their project. You can search in the Logs Explorer for such jobs with the logging query: ``` resource_type='dataflow_step', severity=ERROR log_id("dataflow.googleapis.com/job-message") textPayload=~"Constraint constraints/.* violated for project" ``` ### Remediation The error occurs because your organization has constraints in place that prohibit some aspect of the VM instance creation process, like the account being used, or the zone being targeted. A possible resolution can be found in [doc](https://cloud.google.com/dataflow/docs/guides/common-errors#worker-pool-failure). Recommendations for specific constraints violated are as follows: - **constraints/compute.vmExternalIpAccess** - This indicates that you have a policy that restricts the use of external IP addresses. To fix this error, you can set the [no_use_public_ips](https://cloud.google.com/dataflow/docs/reference/pipeline-options#:~:text=in%20Flex%20Templates.-,no_use_public_ips,-Command%2Dline%20flag) flag to use internal IP addresses for all communication within Dataflow workers. - **constraints/compute.requireShieldedVm** - This indicates that you have a policy that requires all new Compute Engine VM instances use Shielded disk images with Secure Boot, vTPM, and Integrity Monitoring options enabled. To fix this error, we can specify enable_secure_boot in dataflow_service_options configuration, or through experiment --experiments=enable_secure_boot to be compliant with constraints/compute.requireShieldedVm org policy. For jobs affected by other organization policy constraints, please refer the [documentation](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints) to identify how resource is being restricted and work with your organization admin to overcome these errors. ### Further information - [Worker pool failure error](https://cloud.google.com/dataflow/docs/guides/common-errors#worker-pool-failure) - [Organization policy constraints](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_005.md ================================================ --- title: "dataflow/ERR/2023_005" linkTitle: "ERR/2023_005" weight: 1 type: docs description: > Dataflow job does not fail during execution due to credential or permission issue --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description A dataflow job runs successfully if dataflow api is enabled and dataflow service account and controller service account have sufficient permissiont. You can search in the Logs Explorer for such jobs with the logging query: ``` resource_type='dataflow_step', severity=ERROR log_id("dataflow.googleapis.com/job-message") textPayload=~"Workflow failed. Causes: There was a problem refreshing your credentials." ``` ### Remediation Complete error message is: ``` Workflow failed. Causes: There was a problem refreshing your credentials. Please check: 1. The Dataflow API is enabled for your project. 2. Make sure both the Dataflow service account and the controller service account have sufficient permissions. If you are not specifying a controller service account, ensure the default Compute Engine service account PROJECT_NUMBER-compute@developer.gserviceaccount.com exists and has sufficient permissions. If you have deleted the default Compute Engine service account, you must specify a controller service account ``` To resolve this error: - Dataflow API should be enabled - Worker Service Account should have the roles/dataflow.worker role - Dataflow service account of type service-@dataflow-service-producer-prod.iam.gserviceaccount.com should have roles/dataflow.serviceAgent role ### Further information - [Troubleshooting dataflow permission error](https://cloud.google.com/dataflow/docs/guides/troubleshoot-permissions#refresh) - [Dataflow security and permissions](https://cloud.google.com/dataflow/docs/concepts/security-and-permissions) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_006.md ================================================ --- title: "dataflow/ERR/2023_006" linkTitle: "ERR/2023_006" weight: 1 type: docs description: > Dataflow job failure when the subnetwork does not have Private Google Access enabled --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataflow job fails if Private Google Access is disabled on the Subnetwork used by the job, which is required when Dataflow workers only use Private addresses. Private Google Access allows workers to connect to external Google Api's and Services. You can search in the Logs Explorer with the logging query: ``` resource.type="dataflow_step" severity=ERROR "does not have Private Google Access, which is required for usage of private IP addresses by the Dataflow workers" ``` ### Remediation Enable Private Google Access on the subnetworks used by the Dataflow jobs. ### Further information [Private Google Access](https://cloud.google.com/vpc/docs/configure-private-google-access#configuring_access_to_google_services_from_internal_ips) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_007.md ================================================ --- title: "dataflow/ERR/2023_007" linkTitle: "ERR/2023_007" weight: 1 type: docs description: > Streaming Dataflow job gets stuck when firewall rules are not configured --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description When Streaming Engine is disabled, Dataflow workers communicate over port 12345 to shuffle intermediate data. Job will get stuck if the required firewall rules are not present to allow communication between workers. Issue occurs only when a job runs with more than one worker. ### Remediation Configure necessary Firewall rules to allow communication between Dataflow workers over port 12345. ### Further information [Firewall rules for Dataflow](https://cloud.google.com/dataflow/docs/guides/routes-firewall#firewall_rules) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_008.md ================================================ --- title: "dataflow/ERR/2023_008" linkTitle: "ERR/2023_008" weight: 1 type: docs description: > Dataflow worker service account has roles/dataflow.worker role --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Check that the worker service account used in dataflow job has the following role: roles/dataflow.worker role ### Remediation The Dataflow Worker role (roles/dataflow.worker role) must be assigned to worker service account that is able to request and update work from the Dataflow service. ### Further information Refer [link](https://cloud.google.com/dataflow/docs/concepts/access-control#:~:text=The%20Dataflow%20Worker%20role) to know more about this. ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_009.md ================================================ --- title: "dataflow/ERR/2023_009" linkTitle: "ERR/2023_009" weight: 1 type: docs description: > Splunk HEC endpoint uses a valid public SSL certificate, or a correct root-CA certificate is provided. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Dataflow job will fail if the root-CA certificate provided is not the correct one or if the endpoint is not signed by a valid issuer. Check that the issuer for the certificate is valid and the correct certificate is provided. ### Remediation Use a valid `rootCaCertificatePath` path parameter as [shown in this template](https://cloud.google.com/dataflow/docs/guides/templates/provided/pubsub-to-splunk#template-parameters). ### Further information - [Pub/Sub to Splunk template parameters](https://cloud.google.com/dataflow/docs/guides/templates/provided/pubsub-to-splunk#template-parameters) - [Using Splunk with Dataflow blog](https://cloud.google.com/blog/products/data-analytics/connect-to-splunk-with-a-dataflow-template) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_010.md ================================================ --- title: "dataflow/ERR/2023_010" linkTitle: "ERR/2023_010" weight: 1 type: docs description: > Dataflow job using streaming insert did not fail due to missing required field. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Dataflow job writing to bigquery using streaming inserts can fail due to missing required field. ### Remediation BigQuery streaming insert request has wrong rows resulting in Missing required field error. This means a row missed certain column or column is set as null. The missing column value can be found from error message in the logs of dataflow job id . Need to fix the pipeline code to put column values correctly. ### Further information [Streaming insert errors](https://cloud.google.com/bigquery/docs/error-messages#metadata-errors-for-streaming-inserts) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_011.md ================================================ --- title: "dataflow/ERR/2023_011" linkTitle: "ERR/2023_011" weight: 1 type: docs description: > Dataflow job using streaming insert did not fail due to mismatched column type. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Dataflow job writing to bigquery using streaming inserts can fail due to mismatched column type. ### Remediation As the error indicate, the BigQuery streaming insert request has wrong rows. [BigQuery error messages](https://cloud.google.com/bigquery/docs/error-messages#metadata-errors-for-streaming-inserts) Review the mismatched columns to fix the pipeline code to put column values correctly. Mismatched column name can be found from the error message in the logs for the dataflow job. For eg - Cannot convert value to integer (bad value):str_for_int_column ### Further information ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_012.md ================================================ --- title: "dataflow/ERR/2023_012" linkTitle: "ERR/2023_012" weight: 1 type: docs description: > Dataflow job writing to spanner did not fail due to OOM. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Dataflow job writing to spanner can fail in case of out of memory errors. To write data to spanner, The SpannerIO package in Beam's Java sdk provides a write transform. It uses SpannerIO.write() transform to execute a collection of input row mutations. The Dataflow connector groups mutations into batches for efficiency. Given a PCollection of Mutations – SpannerIO.Write groups, sorts and batches the mutations on the primary key and applies the mutations on Spanner. SpannerIO uses local memory for creating batches of sorted mutations which can lead to high memory consumption ### Remediation There are several options to address high memory consumption by SpannerIO.write(): - increase the machine type/memory [machine types](https://cloud.google.com/compute/docs/machine-resource#recommendations_for_machine_types) - reducing the [number_of_worker_harness_threads](https://cloud.google.com/dataflow/docs/reference/pipeline-options#:~:text=numberOfWorkerHarnessThreads) - alter the SpannerIO.write() parameters to reduce the amount of data that needs to be stored in memory - disable Sorting by setting .withGroupingFactor(1) (negatively affects performance of SpannerIO.write()) - disable Sorting and Batching by setting .withMaxNumMutations(0) (negatively affects performance of SpannerIO.write()) The latter can be done using the SpannerIO.write() parameters. For example: SpannerIO.write().withBatchSizeBytes (100_000).withMaxNumMutations(500).withGroupingFactor(100) will use approx 1/10th of the memory. ### Further information [SpannerIO code](https://github.com/apache/beam/blob/v2.36.0/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.java#L222) [javadoc](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.Write.html#withMaxNumMutations-long-). [Dataflow connector](https://cloud.google.com/spanner/docs/dataflow-connector#write-transform) [BeamIO connectors] (https://beam.apache.org/documentation/io/connectors/) ================================================ FILE: website/content/en/rules/dataflow/ERR/2023_013.md ================================================ --- title: "dataflow/ERR/2023_013" linkTitle: "ERR/2023_013" weight: 1 type: docs description: > Dataflow job reading from spanner did not fail due to deadline exceeded error. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Dataflow job reading from spanner, failed with deadline exceeded error a. If the job is not already using shuffle service, try enabling shuffle service. b. Timeouts are caused by too large work items. To make sure there are no timeouts, it is recommended trying to tweak some configurations in Spanner Read such as “maxPartittions” and “partitionSizeBytes”. c. If the CPU utilization is high, might have to scale up the metadata database. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/dataflow/ERR/2024_001.md ================================================ --- title: "dataflow/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > Dataflow job is not facing GCE resource constraints. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataflow jobs may fail due to GCE resource quotas which can inadversedly cause jobs to fail to launch. You can search in the Log Explorer for such jobs with the below mentioned logging query: ``` resource_type='dataflow_step', severity>=WARNING log_id("dataflow.googleapis.com/job-message") textPayload~="has insufficient quota(s) to execute this workflow" OR "The quota check has failed" OR "Quota exceeded" OR "Compute Engine API has not fully initialized" OR "Throttling logger worker" OR "This workload is drawing too much egress bandwidth from Cloud Storage" OR "Per-customer shuffle size limit exceeded" OR "RESOURCE_EXHAUSTED: Exceeds 'AppendRows throughput' quota" OR "RESOURCE_EXHAUSTED: Exceeds 'Concurrent connections'" OR "RESOURCE_EXHAUSTED: Exceeds 'CreateWriteStream requests'" ``` ### Remediation Below are the remediation for different types of errors: 1. 'has insufficient quota(s) to execute this workflow', 'The quota check has failed', 'Quota exceeded', Please refer to the following [documentation](https://cloud.google.com/compute/resource-usage) to request for a quota increase. 2. "Compute Engine API has not fully initialized" Please reach out to Cloud Support Team to help increase quota. 3. "Throttling logger worker" Dataflow job is running into Dataflow abusive logs quota. This limit is hardcoded and cannot be increased. Possible mitigations include logging only on errors or writing these logs to storage sink (BigQuery, GCS, etc.). [Reference](https://cloud.google.com/dataflow/docs/guides/logging#LogLimits) 4. "This workload is drawing too much egress bandwidth from Cloud Storage" Dataflow job is running into Cloud Storage egress bandwidth quota errors. This quota depends on bucket settings and may be different for single or multi-region buckets. Please check the documentation on how to increase the limits for the project. [Reference](https://cloud.google.com/storage/docs/bandwidth-usage#increase) 5. "Per-customer shuffle size limit exceeded" OR "RESOURCE_EXHAUSTED: Exceeds 'AppendRows throughput' quota" OR "RESOURCE_EXHAUSTED: Exceeds 'Concurrent connections' quota" OR "RESOURCE_EXHAUSTED: Exceeds 'CreateWriteStream requests' quota" Please reach out to Cloud Support Team to help increase quota. ### Further information - [GCE Allocation quotas](https://cloud.google.com/compute/resource-usage) ================================================ FILE: website/content/en/rules/dataflow/ERR/2024_002.md ================================================ --- title: "dataflow/ERR/2024_002" linkTitle: "ERR/2024_002" weight: 1 type: docs description: > Dataflow job is not returning KeyCommitTooLargeException errors. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataflow streaming jobs may fail due to the following error message: ``` Error message from worker: org.apache.beam.runners.dataflow.worker.StreamingDataflowWorker$KeyCommitTooLargeException: Commit request for stage P59 and key 7460 has size 1422763350 which is more than the limit of 1073741824. This may be caused by grouping a very large amount of data in a single window without using Combine, or by producing a large amount of data from a single input element. ``` You can search this in Logs Explorer for such jobs with the below mentioned Logging Query: """ resource.type="dataflow_step" resource.labels.job_id="%dataflowJobID%" "KeyCommitTooLargeException" OR "This may be caused by grouping a very large amount of data in a single window without using Combine, or by producing a large amount of data from a single input element" severity>="WARNING" """ ### Remediation This error occurs in streaming scenarios if a very large amount of data is grouped without using a Combine transform, or if a large amount of data is produced from a single input element. To reduce the possibility of encountering this error, use the following strategies: 1. Ensure that processing a single element cannot result in outputs or state modifications exceeding the limit. 2. If multiple elements were grouped by a key, consider increasing the key space to reduce the elements grouped per key. 3. If elements for a key are emitted at a high frequency over a short time, that might result in many GB of events for that key in windows. 4. Rewrite the pipeline to detect keys like this and only emit an output indicating the key was frequently present in that window. 5. Use sublinear space Combine transforms for commutative and associate operations. Don't use a combiner if it doesn't reduce space. For example, combiner for strings that just appends strings together is worse than not using combiner. ### Further information - [Streaming Pipelines](https://cloud.google.com/dataflow/docs/concepts/streaming-pipelines) - [KeyCommitTooLarge](https://cloud.google.com/dataflow/docs/guides/common-errors#key-commit-too-large-exception) ================================================ FILE: website/content/en/rules/dataflow/ERR/2024_003.md ================================================ --- title: "dataflow/ERR/2024_003" linkTitle: "ERR/2024_003" weight: 1 type: docs description: > Streaming Dataflow jobs are not using WRITE_TRUNCATE when working with unbounded PCollections. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataflow jobs when using WRITE_TRUNCATE with unbounded PCollections sources would return the below warning: ``` WriteDisposition.WRITE_TRUNCATE is not supported for an unbounded PCollection ``` ### Remediation BigQueryIO doesn't support streaming query (or an unbounded source) to BigQuery with the "Overwrite table" (WriteDisposition.WRITE_TRUNCATE) option. If the user selects a Pub/Sub topic as the source, in the Create Dataflow job panel under the path Destination > BigQuery > Write disposition, it will not show `Overwrite table` option but only the options `Write if empty` and `Append to table`. This is an intended behavior to prevent the exception mentioned above. If you are manually setting this parameter in your code base, the above warning is thrown, which will lead to stuckness on the job. ### Further information - [BigQuery job](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job) ================================================ FILE: website/content/en/rules/dataflow/ERR/2024_004.md ================================================ --- title: "dataflow/ERR/2024_004" linkTitle: "ERR/2024_004" weight: 1 type: docs description: > The Dataflow job has the necessary GCS permissions for the temporary bucket. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Two primary reasons cause Dataflow jobs to fail when writing to a storage bucket: either the specified bucket does not exist within the targeted Google Cloud project, or the associated service account lacks the necessary permissions to write to it. ### Remediation - If the bucket is missing, create it in the target project - If this is permissions error, assign the role ```storage.objectAdmin``` to the service account. The service account is the same which is managing the Compute Engine instance. ### Further information - [Cloud Storage Roles](https://cloud.google.com/iam/docs/understanding-roles#cloud-storage-roles) - [Create a new bucket](https://cloud.google.com/storage/docs/creating-buckets#create_a_new_bucket) ================================================ FILE: website/content/en/rules/dataflow/ERR/2024_005.md ================================================ --- title: "dataflow/ERR/2024_005" linkTitle: "ERR/2024_005" weight: 1 type: docs description: > Dataflow and its controller service account have the necessary permissions to interact with Pub/Sub topics. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataflow jobs rely on IAM permissions to access Pub/Sub topics.While the Dataflow job itself needs the 'pubsub.subscriber' role to receive messages, the controller service account also requires permission to view topic details ('pubsub.topics.get'). This permission is usually included in the broader 'pubsub.viewer' role. If the controller service account lacks 'pubsub.topics.get' permission, it will fail to create subscriptions, resulting in a 'GETTING_PUBSUB_SUBSCRIPTION_FAILED' error. ### Remediation The Controller service account also needs ```pubsub.topics.get``` permission [included in role ```pubsub.viewer```](https://cloud.google.com/pubsub/docs/access-control#pubsub.viewer) in addition to role ```pubsub.subscriber```. ### Further information [Public documentation - Accessing Pub/Sub topics and subscriptions](https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#accessing_pubsub) ================================================ FILE: website/content/en/rules/dataflow/WARN/2023_001.md ================================================ --- title: "dataflow/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > Dataflow job does not have a hot key --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: WARN - Something that is possibly wrong ### Description A Dataflow job might have hot key which can limit the ability of Dataflow to process elements in parallel, which increases execution time. You can search in the Logs Explorer for such jobs with the logging query: ``` resource.type="dataflow_step" log_id("dataflow.googleapis.com/worker") OR log_id("dataflow.googleapis.com/harness") severity>=WARNING textPayload=~"A hot key(\s''.*'')? was detected in step" OR "A hot key was detected" ``` ### Remediation To resolve this issue, check that your data is evenly distributed. If a key has disproportionately many values, consider the following courses of action: - Rekey your data. Apply a [ParDo transform](https://beam.apache.org/documentation/programming-guide/#pardo) to output new key-value pairs. - For Java jobs, use the [Combine.PerKey.withHotKeyFanout](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/transforms/Combine.PerKey.html) transform. - For Python jobs, use the [CombinePerKey.with_hot_key_fanout](https://beam.apache.org/releases/pydoc/current/apache_beam.transforms.core.html#apache_beam.transforms.core.CombinePerKey.with_hot_key_fanout) transform. - Enable Dataflow Shuffle ### Further information - [Hot key detection](https://cloud.google.com/dataflow/docs/guides/common-errors#hot-key-detected) ================================================ FILE: website/content/en/rules/dataflow/WARN/2023_003.md ================================================ --- title: "dataflow/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > Dataflow worker logs are Throttled --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: WARN - Something that is possibly wrong ### Description Worker log messages are limited to 15,000 messages every 30 seconds, per worker. If this limit is reached, a single worker log message is added saying that logging is throttled. ### Remediation 1. Limit the log messages by logging only errors using try/catch blocks within ParDo's. 2. Write the required logs as Strings, make it a second output PCollection that can be written to a storage sink like BigQuery, Cloud Storage. ### Further information [Dataflow Worker Log Limits](https://cloud.google.com/dataflow/docs/guides/logging#LogLimits) ================================================ FILE: website/content/en/rules/dataflow/WARN/2023_004.md ================================================ --- title: "dataflow/WARN/2023_003" linkTitle: "WARN/2023_003" weight: 1 type: docs description: > Dataflow job doesn't stuck at draining state for more than 3 hours --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: WARN - Something that is possibly wrong ### Description A Dataflow job might got stuck at draining as draining doesn't fix stuck pipelines. ### Remediation Draining doesn't fix stuck pipelines. If data movement is blocked, the pipeline remains stuck after the drain command. To address a stuck pipeline, use the update command to update the pipeline with code that resolves the error that is creating the problem. You can also cancel stuck jobs, but canceling jobs might result in data loss. ### Further information - [Stopping a stuck pipeline](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#stuck) - [Important information about draining](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#important_information_about_draining_a_job) ================================================ FILE: website/content/en/rules/dataflow/WARN/2023_006.md ================================================ --- title: "dataflow/WARN/2023_006" linkTitle: "WARN/2023_006" weight: 1 type: docs description: > A Dataflow job doesn't stuck in the cancelling state --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: WARN - Something that is possibly wrong ### Description A Dataflow job may get stuck in the cancelling state if it is requested to cancel while a snapshot is in progress. ### Remediation Consider force canceling in this situation as force canceling is only intended for jobs that have become stuck in the regular canceling process. For more information, see [Force cancel a job](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#forcecancel). ### Further information - [Cancel a Dataflow job](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#cancel) - [Important information about cancelling a job](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#important_information_about_canceling_a_job) ================================================ FILE: website/content/en/rules/dataflow/WARN/2024_001.md ================================================ --- title: "dataflow/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > Dataflow job is not returning Operation ongoing or Processing Stuck logs. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: WARN - Something that is possibly wrong ### Description The Dataflow job will return this warning when your DoFn code is slow, or waiting for some slow external operation to complete or when your DoFn code might be stuck, deadlocked, or abnormally slow to finish processing. You can search this in Logs Explorer for such jobs with the below mentioned Logging Query: """ resource.type="dataflow_step" resource.labels.job_id="%dataflowJobID%" "Operation ongoing in step" OR "Processing stuck in step" OR "Operation ongoing for over" OR "Operation ongoing in transform" OR "Operation ongoing in bundle" severity>="WARNING" """ ### Remediation To determine which is the case, expand the Cloud Monitoring log entry to see a stack trace by running the above log query. Look for messages that indicate that the DoFn code is stuck or otherwise encountering issues. If no messages are present, the issue might be the execution speed of the DoFn code. Consider using Cloud Profiler or other tool to investigate the performance of your code. ### Further information - [Operation ongoing and Processing Stuck errors](https://cloud.google.com/dataflow/docs/guides/common-errors#processing-stuck) ================================================ FILE: website/content/en/rules/dataflow/WARN/2024_002.md ================================================ --- title: "dataflow/WARN/2024_002" linkTitle: "WARN/2024_002" weight: 1 type: docs description: > Dataflow job using Streaming Appliance is not getting stuck due to Commit failed: computation doesn't have the state family. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Rule class**: WARN - Something that is possibly wrong ### Description A Dataflow job running with Streaming Appliance may get stuck and return the below warnings during its execution: Commit failed: computation doesn't have the state family You can search this in Logs Explorer for such jobs with the below mentioned Logging Query: """ resource.type="dataflow_step" resource.labels.job_id="%dataflowJobID%" "Commit failed: computation doesn't have the state family" severity>="WARNING" """ This warning will not be visible for jobs using Streaming Engine as we proactively reject such problematic pipelines, however in Appliance jobs, it may get into a bad state and become stuck. ### Remediation This is a known issue when updating pipelines that have a flatten operation followed by a ParDo that uses a side input. The workaround is to change the pipeline shape to avoid this issue. For example if the pipeline looks something like: ParDo ParDo \ / \ / A flatten operation | | ParDo using side input | Output The recommended work-around is to change this to something like: ParDo ParDo \ / \ / ParDo using side input ParDo using side input \ / \ / A flatten operation | | Output ### Further information - [Streaming Pipelines](https://cloud.google.com/dataflow/docs/concepts/streaming-pipelines) - [Streaming Engine](https://cloud.google.com/dataflow/docs/streaming-engine) ================================================ FILE: website/content/en/rules/dataflow/_index.md ================================================ --- title: "DATAFLOW" linkTitle: "dataflow" type: docs description: "Cloud Dataflow" --- ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_001.md ================================================ --- title: "datafusion/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > Firewall rules allow for Data Fusion to communicate to Dataproc VMs. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Cloud Data Fusion runs in a Google managed tenant project. In Data Fusion versions below 6.2.0 and private Data Fusion instances the Google managed resources in the tenant project need to be able to communicate to the Dataproc running pipeline jobs in the client project. ### Remediation - If your Cloud Data Fusion is private, create the [allow-ssh firewall rule](https://cloud.google.com/data-fusion/docs/how-to/create-private-ip#create_a_firewall_rule) with a high priority (e.g `--priority=100`) to override any conflicting firewall rules that may be blocking communication. - If your Cloud Data Fusion is public and has a version below 6.2.0 create the [Default allow ssh firewall rule](https://cloud.google.com/data-fusion/docs/concepts/networking#firewall-rules) with a high priority (e.g `--priority=100`) to override any conflicting firewall rules that may be blocking communication. ### Further information - You can find the firewall version disclaimer in the `Creating a Cloud Data Fusion instance` [Before you begin](https://cloud.google.com/data-fusion/docs/how-to/create-instance#before_you_begin) section. ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_002.md ================================================ --- title: "datafusion/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > Private Data Fusion instance has valid host VPC IP range. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Cloud Data Fusion runs in a Google managed tenant project. Private Data Fusion instances using a shared VPC network require a large enough internal IP range to create all of the required Data Fusion resources in the tenant project. ### Remediation - If your Cloud Data Fusion is private and uses a shared VPC you must enable the `Service Networking API` in the host project. - Once `Service Networking API` is enabled, you are then able to allocate an IP range of at least size `/22` to be used to create the Data Fusion instance resources in the Google managed project. ### Further information - You can find step-by-step details in the [Allocate an IP range](https://cloud.google.com/data-fusion/docs/how-to/create-private-ip#shared-vpc-network) Data Fusion private instance guide. ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_003.md ================================================ --- title: "datafusion/ERR/2022_003" linkTitle: "ERR/2022_003" weight: 1 type: docs description: > Private Data Fusion instance is peered to the tenant project. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Cloud Data Fusion runs in a Google managed tenant project. Private Data Fusion instances are required to be peered to the user's VPC network to enable communication with jobs. ### Remediation - The name of the tenant project VPC network name to be peered is 'INSTANCE_REGION-INSTANCE_ID'. - The peered connection needs to import custom routes so that you can access the Data Fusion UI. - The peered connection needs to export custom routes so that Data Fusion can access any on-prem resources. ### Further information - You can find step-by-step details in the [Create a peering connection](https://cloud.google.com/data-fusion/docs/how-to/create-private-ip#create_a_peering_connection) Data Fusion private instance guide. ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_004.md ================================================ --- title: "datafusion/ERR/2022_004" linkTitle: "ERR/2022_004" weight: 1 type: docs description: > Cloud Data Fusion Service Account has necessary permissions --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Google-managed service account, called the Cloud Data Fusion API Service Agent, is created by Cloud Data Fusion to gain access to customer resources so that it can act on the customer's behalf. It is used in the tenant project to access customer project resources. The ``roles/datafusion.serviceAgent`` role is automatically assigned to this account during Cloud Data Fusion API activation and shouldn't be revoked for Cloud Data Fusion to function correctly. ### Remediation Grant roles/datafusion.serviceAgent to the Cloud Data Fusion service account. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool command : ``` gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_ID@gcp-sa-datafusion.iam.gserviceaccount.com' --role='roles/datafusion.serviceAgent' ``` where PROJECT_ID could be either host or service project id depending on whether Data Fusion Instance exists at a Service or Host project. ### Further information Learn more about [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) Learn more about [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts) Learn more about [Service agents](https://cloud.google.com/iam/docs/service-agents) ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_005.md ================================================ --- title: "datafusion/ERR/2022_005" linkTitle: "ERR/2022_005" weight: 1 type: docs description: > Private Data Fusion instance has networking permissions. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Private Data Fusion instances that use a shared VPC host network in another project require permissions in that host project. ### Remediation - The Cloud Data Fusion API Service Agent 'service-PROJECT_NUMBER@gcp-sa-datafusion.iam.gserviceaccount.com' requires the 'Compute Network User' role on the host project, OR the 'Compute Network Viewer' role on the host project and the 'Compute Network User' role on a subnetwork in the Data Fusion instance region. - The Dataproc Service Agent service account 'service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com' also requires the 'Compute Network User' role on the host project, OR the 'Compute Network Viewer' role on the host project and the 'Compute Network User' role on a subnetwork in the Data Fusion instance region. ### Further information - You can find details about how to [Set up Data Fusion IAM permissions](https://cloud.google.com/data-fusion/docs/how-to/create-private-ip#set_up_iam_permissions) and more about the [Service accounts in Cloud Data Fusion](https://cloud.google.com/data-fusion/docs/concepts/service-accounts#service_accounts_in) in our Data Fusion guides. ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_006.md ================================================ --- title: "datafusion/ERR/2022_006" linkTitle: "ERR/2022_006" weight: 1 type: docs description: > Private Google Access enabled for private Data Fusion instance subnetwork. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The region where you create your private Cloud Data Fusion instance must have a subnet with Private Google Access enabled. This allows for your jobs to make API requests to Google services. ### Remediation By default Data Fusion uses the very first subnetwork located in the configured instance network for the region of the Data Fusion instance. - You may also override the subnetwork used via a [Compute Profile](https://cdap.atlassian.net/wiki/spaces/DOCS/pages/480314016/Creating+Compute+Profiles). You are required to enable `Private Google Access` on the subnetwork configured for the private Data Fusion instance. ### Further information - You can find details about how to [Enable Private Google Access](https://cloud.google.com/vpc/docs/configure-private-google-access#config-pga) in our VPC guide. ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_007.md ================================================ --- title: "datafusion/ERR/2022_007" linkTitle: "ERR/2022_007" weight: 1 type: docs description: > Cloud Data Fusion Service Account exists at a Project --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Google-managed service account, called the Cloud Data Fusion API Service Agent, is created by Cloud Data Fusion to gain access to customer resources so that it can act on the customer's behalf. It is used in the tenant project to access customer project resources. It is also know as the Cloud Data Fusion Service Account. Although a Cloud Data Fusion instance has Cloud Data Fusion Service Account associated with it the Project may or may not contain a Cloud Data Fusion Service Account. The reason could be either an accidental deletion by user via Terraform, CLI or console. In this case the Cloud Data Fusion has no way of knowing about this deletion which may to an improper operation of CDF instance. ### Remediation Create a Cloud Data Fusion service account by specifying a role. The Service Account cannot be created without a role. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool command : ``` gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_ID@gcp-sa-datafusion.iam.gserviceaccount.com' --role='roles/datafusion.serviceAgent' ``` where $PROJECT_ID should be the id of the project in which the Data Fusion instance is running. ### Further information - [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) - [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts) - [Service agents](https://cloud.google.com/iam/docs/service-agents) ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_008.md ================================================ --- title: "datafusion/ERR/2022_008" linkTitle: "ERR/2022_008" weight: 1 type: docs description: > Cloud Data Fusion SA has Service Account User permissions on the Dataproc SA --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Running pipelines on your Dataproc clusters that reside in customer project need access to your resources so that they can act on your behalf. Whether you use a user-managed service account, or the default Compute Engine service account on the virtual machines in a cluster, you must grant the Service Account User role to Cloud Data Fusion. Otherwise, Cloud Data Fusion cannot provision virtual machines in a Dataproc cluster. PROVISION task failed in REQUESTING_CREATE state for program run [pipeline-name] due to Dataproc operation failure: INVALID_ARGUMENT: User not authorized to act as service account '[service-account-name]' ### Remediation In order to solve Dataproc operation failure error you can follow one of the following approaches: 1. Service Account level: Grant the Service Account User role for Cloud Data Fusion Service Account on the Data Proc Service Account 2. Project level: Grant the Service Account User role for Cloud Data Fusion Service Agent on the Project. This would lead to an inheritance at the Service Account Level. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool commands : ``` gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT --member='serviceAccount:service-PROJECT_ID@gcp-sa-datafusion.iam.gserviceaccount.com' --role='roles/iam.serviceAccountUser' ``` where SERVICE_ACCOUNT could be either Compute Engine default service account or a custom Service Account ``` gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_ID@gcp-sa-datafusion.iam.gserviceaccount.com' --role='roles/iam.serviceAccountUser' ``` ### Further information - [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) - [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts) - [Service agents](https://cloud.google.com/iam/docs/service-agents) ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_009.md ================================================ --- title: "datafusion/ERR/2022_009" linkTitle: "ERR/2022_009" weight: 1 type: docs description: > Cloud Dataproc Service Account has a Cloud Data Fusion Runner role --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Granted to the Dataproc service account so that Dataproc is authorized to communicate the pipeline runtime information such as status, logs, and metrics to the Cloud Data Fusion services running in the tenant project. The service account used by the Dataproc needs to be granted with the roles/datafusion.runner role. The role is needed in order for the job in Dataproc be able to talk back to Data Fusion ### Remediation Add an IAM policy binding to a Cloud Dataproc service account by specifying a role. The Service Account cannot be created without a role. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool command : ``` gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:SERVICE_ACCOUNT' --role='roles/datafusion.runner' ``` where SERVICE_ACCOUNT could be either Compute Engine default service account or the App Engine default service account or instead a user-specified service account. ### Further information - [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) - [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts) - [Service agents](https://cloud.google.com/iam/docs/service-agents) ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_010.md ================================================ --- title: "datafusion/ERR/2022_010" linkTitle: "ERR/2022_010" weight: 1 type: docs description: > Cloud Dataproc Service Account has a Dataproc Worker role. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Dataproc Worker role provides the VM service account with the minimum permissions necessary to operate with Dataproc. To create a cluster with a user-specified service account, the specified service account must have all permissions granted by the Dataproc Worker role ### Remediation Add an IAM policy binding to a Cloud Dataproc service account by specifying a role. The Service Account cannot be created without a role. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool command: ``` gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:-compute@developer.gserviceaccount.com' --role='roles/dataproc.worker' ``` ### Further information - [Dataproc service accounts](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts) - [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) - [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts) - [Service agents](https://cloud.google.com/iam/docs/service-agents) ================================================ FILE: website/content/en/rules/datafusion/ERR/2022_011.md ================================================ --- title: "datafusion/ERR/2022_011" linkTitle: "ERR/2022_011" weight: 1 type: docs description: > Cloud Data Fusion version >= 6.2.0 has a storage admin role --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Grants full control of buckets and objects. When applied to an individual bucket, control applies only to the specified bucket and objects within the bucket. In Cloud Data Fusion versions 6.2.0 and above, grant the Cloud Storage admin role (roles/storage.admin) to service accounts that are used by Dataproc in your project. ### Remediation Add an IAM policy binding to the Cloud Dataproc service account by specifying a role. The Service Account cannot be created without a role. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#admin-permission) or by running the following gcloud tool command : ``` gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:-compute@developer.gserviceaccount.com' --role='roles/storage.admin' ``` ### Further information - [Dataproc service accounts](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts) - [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) - [Cloud Storage admin role](https://cloud.google.com/storage/docs/access-control/iam-roles#standard-roles) - [Service agents](https://cloud.google.com/iam/docs/service-agents) ================================================ FILE: website/content/en/rules/datafusion/ERR/2024_001.md ================================================ --- title: "datafusion/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > Datafusion delete operation not failing. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description During the instance deletion process there are cases wherein a networking resource (i.e route) in the tenant project might not get deleted due to which the process gets stalled in Deleting, and other reasons include missing IAM roles in Google managed datafusion serviceAccount. ### Remediation - [Instance stuck in deleting](https://datafusion.atlassian.net/wiki/spaces/KB/pages/32276574/Instance+stuck+in+deleting), instance deletion can fail due to missing IAM roles on the Cloud Data Fusion P4 service account which is a Google-managed service account, such as Cloud Data Fusion API Service Agent [(roles/datafusion.serviceAgent)](https://cloud.google.com/iam/docs/understanding-roles#datafusion.serviceAgent) IAM role. - Some other Common problems leading to instances deletion failure - Failure to find expected resources : In this case, clean up the resources manually from the GKE cluster and then re-attempt the delete again with [REST API](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances/delete). - PVCs stuck in terminating state : This is caused by leftover pods in GKE that is using the PVC, In this case, manually delete the cluster and PVCs and then re-attempt the delete again with [REST API](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances/delete). - Pods get into crashloop due to secret missing : In this case manually [delete the cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/deleting-a-cluster#deleting_a_cluster) ### Further information ================================================ FILE: website/content/en/rules/datafusion/WARN/2024_001.md ================================================ --- title: "datafusion/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > Data Fusion version is supported. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: WARN - Something that is possibly wrong ### Description A major or minor version of Cloud Data Fusion environment is supported for a specific period of time after it is released.After that period, instances that continue to use the environment version are no longer supported. ### Remediation [Upgrade your environment](https://cloud.google.com/data-fusion/docs/how-to/upgrading#upgrade-instances) to the latest version. ### Further information Check the [Version support policy](https://cloud.google.com/data-fusion/docs/version-support-policy) ================================================ FILE: website/content/en/rules/datafusion/WARN/2024_002.md ================================================ --- title: "datafusion/WARN/2024_002" linkTitle: "WARN/2024_002" weight: 1 type: docs description: > Data Fusion instance is not in a running state, The datafusion state is either Disabled or Failed, The reason for this disabled or Failed state could be due to configuration errors, KMS key disabled/denied access or key revoked etc. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: WARN - Something that is possibly wrong ### Description Data Fusion instance is not in a running state, The datafusion state is either Disabled or Failed, The reason for this disabled or Failed state could be due to configuration errors, KMS key disabled/denied access or key revoked etc. ### Remediation There are many ways in which a Data Fusion instance might failed to be created. Review the [Cloud Logs](https://cloud.google.com/data-fusion/docs/how-to/audit-logging) to identify the cause. The reason for disabling the instance if the state is DISABLED. https://cloud.google.com/data-fusion/docs/reference/rest/v1/projects.locations.instances#disabledreason ### Further information - [Instance states](https://cloud.google.com/data-fusion/docs/reference/rest/v1/projects.locations.instances#state) https://cloud.google.com/data-fusion/docs/how-to/customer-managed-encryption-keys ================================================ FILE: website/content/en/rules/datafusion/WARN/2024_003.md ================================================ --- title: "datafusion/WARN/2024_003" linkTitle: "WARN/2024_003" weight: 1 type: docs description: > Scaling down is disabled for the Compute Profile for Dataproc. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: WARN - Something that is possibly wrong ### Description Autoscaling is not recommended for scaling down. Decreasing the cluster size with autoscaling removes nodes that hold intermediate data, which might cause your pipelines to run slowly or fail in datafusion. ### Remediation [Setting scaleDownFactor](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling#setting_scaledownfactor) ### Further information - [Autoscale Dataproc clusters](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling) - [When to use autoscaling](https://cloud.google.com/data-fusion/docs/concepts/configure-clusters#autoscaling) - [Enable Predefined Dataproc Autoscaling](https://cdap.atlassian.net/wiki/spaces/DOCS/pages/480412227/Google+Dataproc#Enable-Predefined-Dataproc-Autoscaling) ================================================ FILE: website/content/en/rules/datafusion/WARN/2024_004.md ================================================ --- title: "datafusion/WARN/2024_004" linkTitle: "WARN/2024_004" weight: 1 type: docs description: > Data Fusion version is compatible with Dataproc version from the corresponding compute profiles. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: WARN - Something that is possibly wrong ### Description The version of your Cloud Data Fusion environment might not be compatible with the version of your Dataproc cluster from the corresponding compute profiles. ### Remediation Check [Version compatibility](https://cloud.google.com/data-fusion/docs/concepts/configure-clusters#version-compatibility) Upgrade to the latest Cloud Data Fusion version and use one of the [supported Dataproc versions.](https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters#supported_dataproc_versions) ### Further information - [Change the Dataproc image version in Compute profile](https://cloud.google.com/data-fusion/docs/how-to/change-dataproc-image#system-compute-profiles) - [Dataproc cluster configuration](https://cloud.google.com/data-fusion/docs/concepts/configure-clusters) ================================================ FILE: website/content/en/rules/datafusion/WARN/2024_005.md ================================================ --- title: "datafusion/WARN/2024_005" linkTitle: "WARN/2024_005" weight: 1 type: docs description: > Data Fusion version is compatible with Dataproc version from the preferences settings. --- **Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\ **Rule class**: WARN - Something that is possibly wrong ### Description The version of your Cloud Data Fusion environment might not be compatible with the version of your Dataproc cluster from the CDAP Preferences settings.Check image version set in the Compute Configurations, Namespace Preferences, or Pipeline Runtime Arguments. ### Remediation Check [Version Compatibility](https://cloud.google.com/data-fusion/docs/concepts/configure-clusters#version-compatibility) Upgrade to the latest Cloud Data Fusion version and use one of the [supported Dataproc versions](https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters#supported_dataproc_versions) ### Further information - [CDAP Preferences](https://cdap.atlassian.net/wiki/x/CgDFRw) - [Change the Dataproc image version in Cloud Data Fusion](https://cloud.google.com/data-fusion/docs/how-to/change-dataproc-image) ================================================ FILE: website/content/en/rules/datafusion/_index.md ================================================ --- title: "DATAFUSION" linkTitle: "datafusion" type: docs description: "Cloud Data Fusion" --- ================================================ FILE: website/content/en/rules/dataproc/BP/2021_001.md ================================================ --- title: 'dataproc/BP/2021_001' linkTitle: 'BP/2021_001' weight: 1 type: docs description: > Stackdriver Logging is enabled in the cluster --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description Enabling stackdriver logging for your dataproc cluster impacts the ability to troubleshoot any issues that you might have. If you are a Google Cloud Support customer, keeping system logging and monitoring enabled is important even if you have your own monitoring solution, because otherwise the support team won’t have access to logs and monitoring data used for troubleshooting. This is the more relevant when creating ephemeral clusters. ### Remediation dataproc.logging.stackdriver.enable is enabled by default when a cluster is created. If you disabled this during cluster creation by setting the above property to false, please create create a new clsuter without this property. ### Further information - [Dataproc job logs in Logging](https://cloud.google.com/dataproc/docs/guides/logging#job_logs_in) ================================================ FILE: website/content/en/rules/dataproc/BP/2022_001.md ================================================ --- title: "dataproc/BP/2022_001" linkTitle: "BP/2022_001" weight: 1 type: docs description: > Cloud Monitoring agent is enabled. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Memory and disk usage metrics are often useful when troubleshooting, however, the Cloud Monitoring agent is not enabled by default when a cluster is created. ### Remediation Enable [dataproc.monitoring.stackdriver.enable](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties) during cluter creation. ### Further information - [Cloud Monitoring cluster metrics](https://cloud.google.com/dataproc/docs/guides/monitoring) ================================================ FILE: website/content/en/rules/dataproc/BP/2022_098.md ================================================ --- title: "dataproc/BP/2022_098" linkTitle: "BP/2022_098" weight: 1 type: docs description: > Another dummy async rule --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Another dummy async rule ### Remediation ### Further information ================================================ FILE: website/content/en/rules/dataproc/BP/2022_099.md ================================================ --- title: "dataproc/BP/2022_099" linkTitle: "BP/2022_099" weight: 1 type: docs description: > Dummy async rule --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Dummy async rule ### Remediation ### Further information ================================================ FILE: website/content/en/rules/dataproc/ERR/2022_002.md ================================================ --- title: "dataproc/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > Dataproc is not using deprecated images --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description It is better to avoid using deprecated dataproc images. This is not supported and could cause a wide range of problems. ### Remediation If possible, recreate Dataproc clusters with the latest image versions. ### Further information - [Dataproc Image version list](https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-versions) ================================================ FILE: website/content/en/rules/dataproc/ERR/2022_003.md ================================================ --- title: "dataproc/ERR/2022_003" linkTitle: "ERR/2022_003" weight: 1 type: docs description: > Dataproc Service Account permissions --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Verify that the Dataproc Service Account exists and has the Dataproc Service Agent role on the project. ### Remediation Add the [Dataproc Service Agent](https://cloud.google.com/iam/docs/understanding-roles#dataproc.serviceAgent) role to the Dataproc Service Agent service account (service-[project-number]@dataproc-accounts.iam.gserviceaccount.com) or to the Google APIs service agent account ([project-number]@cloudservices.gserviceaccount.com) for control plane operations. ### Further information - [Dataproc service accounts](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts.md#dataproc_service_accounts_2) ================================================ FILE: website/content/en/rules/dataproc/ERR/2022_004.md ================================================ --- title: "dataproc/ERR/2022_004" linkTitle: "ERR/2022_004" weight: 1 type: docs description: > Dataproc on GCE master VM is able to communicate with worker VM --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must be able to communicate with each other using ICMP, TCP (all ports), and UDP (all ports) protocols. ### Remediation You must create your own rule that meets [Dataproc connectivity requirements](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#dataproc_connectivity_requirements) and apply it to your cluster's VPC network. ### Further information https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network ================================================ FILE: website/content/en/rules/dataproc/ERR/2023_001.md ================================================ --- title: "dataproc/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > Dataproc cluster initialization completed by the end of the timeout period. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataproc cluster initialization action executable or script should be completed within the timeout value. If the initialization script has not completed, dataproc cancels the initialization action and fails with "Initialization action timed out" error. The default timeout value is 10 minutes. ### Remediation - You can check the output logs of the initialization script for more details. You can find the initialization script output file location from the log error message ( log query given below). The output file location pattern will be like 'gs:// /google-cloud-dataproc-metainfo///dataproc-initialization-script-0_output'. Log query example : resource.type="cloud_dataproc_cluster" \ resource.labels.cluster_name="" \ "Initialization action timed out" \ logName: "projects//logs/google.dataproc.agent" - You can specify initialization timeout with --initialization-action-timeout flag to change timeout period if required. ### Further information [Initialization action timeout](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/init-actions#using_initialization_actions) ================================================ FILE: website/content/en/rules/dataproc/ERR/2023_002.md ================================================ --- title: "dataproc/ERR/2023_002" linkTitle: "ERR/2023_002" weight: 1 type: docs description: > Checking if any orphaned YARN application has been killed by dataproc agent in the cluster. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataproc considers a yarn app to be orphaned if the job driver that submitted the yarn app has exited. By default, dataproc:dataproc.yarn.orphaned-app-termination.enable is set to True, which means Dataproc agent is enabled to kill the orphaned yarn app. ### Remediation - You can see the log from dataproc agent if the yarn app became orphaned and killed by dataproc agent. Log query example : resource.type="cloud_dataproc_cluster" \ resource.labels.cluster_uuid="" \ "" \ logName: "projects//logs/google.dataproc.agent" - If you use Spark cluster mode (spark.submit.deployMode=cluster) with spark.yarn.submit.waitAppCompletion=false, then you should also set dataproc:dataproc.yarn.orphaned-app-termination.enable=false ================================================ FILE: website/content/en/rules/dataproc/ERR/2023_003.md ================================================ --- title: "dataproc/ERR/2023_003" linkTitle: "ERR/2023_003" weight: 1 type: docs description: > Dataproc cluster check IAM permission to launch cluster --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataproc cluster launch requires set of permissions to be enabled for the service account that is used to create the cluster. If the required set of permissions are not available, the cluster launch operation fails with "Required permission for " ### Remediation - You can check the output logs to check on the error. If you want to provide the permission yo can navigate to cloud IAM console and provide the permissions. Log query example : resource.type="cloud_dataproc_cluster" \ resource.labels.cluster_name="" \ "Required permission for " \ logName: "projects//logs/google.dataproc.agent" ### Further information [DataProc IAM permissions](https://cloud.google.com/dataproc/docs/concepts/iam/iam) ================================================ FILE: website/content/en/rules/dataproc/ERR/2023_004.md ================================================ --- title: "dataproc/ERR/2023_004" linkTitle: "ERR/2023_004" weight: 1 type: docs description: > Dataproc cluster firewall rules for connectivity between master and worker nodes established! --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The master node needs to communicate with the worker nodes during cluster creation. Sometimes VM to VM communications are blocked by firewall rules. ### Remediation - You can see the log from dataproc agent if the yarn app became orphaned and killed by dataproc agent. Log query example : resource.type="cloud_dataproc_cluster" \ resource.labels.cluster_uuid="" \ "" \ logName: "projects//logs/google.dataproc.agent" - Check for firewall rule warnings. Make sure that the user has the correct firewall rule in place. Refer to the public documentation for the correct [Dataproc Cluster Network Configuration](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#overview). To see what is blocking the master node from communicating with the worker nodes, a connectivity test can be performed by using the [Ad Hoc Connectivity Test](https://cloud.google.com/dataproc/docs/troubleshooting#cluster_creation_error_messages) found under "Network Intelligence" in your GCP console. ================================================ FILE: website/content/en/rules/dataproc/ERR/2023_005.md ================================================ --- title: "dataproc/ERR/2023_005" linkTitle: "ERR/2023_005" weight: 1 type: docs description: > Dataproc cluster has sufficient quota --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description When creating a Dataproc cluster, your project must have available quotas for the resources you request, such as CPU, disk, and IP addresses. If your request exceeds your project's quotas, the cluster creation will fail. ### Remediation - You can search the logs to check on the quota error. Log query example : severity=ERROR protoPayload.status.message=~"Insufficient" resource.type="cloud_dataproc_cluster" - You can raise a request to [increase quota limit](https://cloud.google.com/docs/quota) ### Further information [Quota Exceeded errors](https://cloud.google.com/dataproc/docs/troubleshooting#cluster_creation_error_messages) ================================================ FILE: website/content/en/rules/dataproc/ERR/2023_006.md ================================================ --- title: "dataproc/ERR/2023_006" linkTitle: "ERR/2023_006" weight: 1 type: docs description: > Dataproc cluster check permissions on shared Host VPC Project --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Dataproc cluster launched on a shared VPC requires permission on the Host Subnet that is used to create the cluster. If the required set of permissions are not available, the cluster launch operation fails. The permission is to be set for DataProc service agent from service project. ### Remediation - You can check the permissions on Host Project where the Shared VPC exists. The permissions need to be set for DataProc service agent from project where cluster is launched. Permissions Required : Computer Network User, Compute Network Viewer ### Further information [DataProc cluster in shared VPC](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#create_a_cluster_that_uses_a_network_in_another_project) ================================================ FILE: website/content/en/rules/dataproc/ERR/2023_007.md ================================================ --- title: "dataproc/ERR/2023_007" linkTitle: "ERR/2023_007" weight: 1 type: docs description: > Region has sufficient resources for user to create a cluster --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description User is attempting to create a dataproc cluster in a region or zone that doesn't have enough/required resources to successfully provision and create the cluster. Resources can include : - Certain machine types (compute optimized, memory optimised, GPUs) - Multiple very large persistent disks capacity of same disk type ### Remediation - Try a different zone or region: If you are experiencing a zonal stockout, try deploying your workload to a different zone in the same region. If you are experiencing a regional stockout, try deploying your workload to a different region. - Try retrying your request in a while. This can be anywhere from 15 minutes to an hour, but it depends on the resources, region, and popularity. - Contact support: If you are unable to resolve the stockout on your own or a specific zone is needed, you can contact Google Cloud support for assistance. ### Further information - We recommend to use [autozone](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone) for resource provisioning and reservation - We recommend also to explore [partial clusters](https://cloud.google.com/dataproc/docs/guides/create-partial-cluster) for increasing availability - An all inclusive guide on [Managing Capacity, Quota, and Stockouts in the Cloud](https://www.googlecloudcommunity.com/gc/Community-Blogs/Managing-Capacity-Quota-and-Stockouts-in-the-Cloud-Concepts-and/ba-p/464770#:~:text=Stockouts%20can%20happen%20when%20there's,resources%20are%20not%20currently%20available.) ================================================ FILE: website/content/en/rules/dataproc/ERR/2023_008.md ================================================ --- title: "dataproc/ERR/2023_008" linkTitle: "ERR/2023_008" weight: 1 type: docs description: > Disk space of YARN NodeManagers is okay. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description YARN ResourceManager has reported UNHEALTHY YARN NodeManagers due to exceeding the maximum percentage of disk space utilization allowed. ### Remediation - The user cache is stored in the directory specified by the `yarn.nodemanager.local-dirs` property in the `yarn-site.xml` file. This file is located at `/etc/hadoop/conf/yarn-site.xml`. You can check the free space in the `/hadoop/yarn/nm-local-dir` path, and free up space by deleting the `/hadoop/yarn/nm-local-dir/usercache` user cache folder. - Recreate your cluster with larger disk space, which will increase the [throughput cap](https://cloud.google.com/dataproc/docs/support/spark-job-tuning#optimize_disk_size). ### Further information - Check the following documentation to address the issue: https://cloud.google.com/dataproc/docs/support/spark-job-tuning#yarn_nodes_are_unhealthy. - YARN properties: [yarn-default.xml](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml). ================================================ FILE: website/content/en/rules/dataproc/WARN/2021_001.md ================================================ --- title: "dataproc/WARN/2021_001" linkTitle: "WARN/2021_001" weight: 1 type: docs description: > Dataproc cluster is in RUNNING state --- **Product**: [Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description Cluster should normally spend most of the time in RUNNING state. ### Remediation ### Further information - [The cluster state](https://cloud.google.com/dataproc/docs/reference/rest/v1/projects.regions.clusters#state) ================================================ FILE: website/content/en/rules/dataproc/WARN/2022_001.md ================================================ --- title: "dataproc/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > Dataproc clusters are not failed to stop due to the local SSDs --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description You cannot stop clusters with local SSDs attached since it triggers shutdown to the VM. However, if you do shut down a VM using local SSDs, then you can't start the VM again later, and the data on the local SSD is lost. ### Remediation Make sure that you migrate your critical data from the local SSD to a persistent disk or to another VM before stopping the Dataproc clusters. ### Further information - [Starting and stopping clusters](https://cloud.google.com/dataproc/docs/guides/dataproc-start-stop#limitations) - [Stop and start a VM](https://cloud.google.com/compute/docs/instances/stop-start-instance#restrictions) ================================================ FILE: website/content/en/rules/dataproc/WARN/2022_002.md ================================================ --- title: "dataproc/WARN/2022_002" linkTitle: "WARN/2022_002" weight: 1 type: docs description: > Job rate limit was not exceeded --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description If the Dataproc agent reach the job submission rate limit, Dataproc job scheduling delays can be observed. ### Remediation By default, the Dataproc agent job submission is limited at 1.0 QPS, which you can set to a different value when you create a cluster with the dataproc:dataproc.scheduler.job-submission-rate cluster property. ### Further information - [Troubleshoot job delays](https://cloud.google.com/dataproc/docs/concepts/jobs/troubleshoot-job-delays) ================================================ FILE: website/content/en/rules/dataproc/WARN/2022_003.md ================================================ --- title: "dataproc/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > Dataproc VM Service Account has necessary permissions --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description VM Service Account should have required permissions to function correctly. Though required permission may be granted via user-managed role or primitive roles, it is recommended to grant roles/dataproc.worker on project level. ### Remediation Grant roles/dataproc.worker to VM Service Account ### Further information - [Dataproc service accounts](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts#dataproc_service_accounts_2) - [Dataproc VM Service Account](https://cloud.google.com/dataproc/docs/concepts/iam/dataproc-principals#vm_service_account_data_plane_identity) - [Dataproc Roles](https://cloud.google.com/dataproc/docs/concepts/iam/iam#roles) ================================================ FILE: website/content/en/rules/dataproc/WARN/2022_004.md ================================================ --- title: "dataproc/WARN/2022_004" linkTitle: "WARN/2022_004" weight: 1 type: docs description: > Dataproc cluster is in RUNNING state --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description Cluster should normally spend most of the time in RUNNING state. ### Remediation ### Further information - [The cluster state](https://cloud.google.com/dataproc/docs/reference/rest/v1/projects.regions.clusters#state) ================================================ FILE: website/content/en/rules/dataproc/WARN/2023_001.md ================================================ --- title: "dataproc/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > Concurrent Job limit was not exceeded --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description If the Dataproc agent reach the concurrent job submission limit, Dataproc job scheduling delays can be observed. ### Remediation The maximum number of concurrent jobs based on master VM memory is exceeded (the job driver runs on the Dataproc cluster master VM). By default, Dataproc reserves 3.5GB of memory for applications, and allows 1 job per GB.Set the dataproc:dataproc.scheduler.max-concurrent-jobs [cluster property](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties#service_properties) to a value suited to your job requirements ### Further information [Troubleshoot job delays](https://cloud.google.com/dataproc/docs/concepts/jobs/troubleshoot-job-delays) ================================================ FILE: website/content/en/rules/dataproc/WARN/2023_002.md ================================================ --- title: "dataproc/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > Master Node High System Memory Usage --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description By default, the Dataproc agent throttles job submission when memory use reaches 90% (0.9). When this limit is reached, new jobs cannot be scheduled. The amount of free memory needed to schedule another job on the cluster is not sufficient. ### Remediation When you create a cluster Increase the value of the dataproc:dataproc.scheduler.max-memory-used cluster property. For example, set it above the 0.90 default to 0.95. Setting the value to 1.0 disables master-memory-utilization job throttling. ### Further information [Troubleshoot job delays](https://cloud.google.com/dataproc/docs/concepts/jobs/troubleshoot-job-delays) ================================================ FILE: website/content/en/rules/dataproc/WARN/2024_001.md ================================================ --- title: "dataproc/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > HDFS NameNode Safemode is disabled. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description When HDFS NameNode [Safemode](https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Safemode) is enabled, the HDFS filesystem is in read-only mode and no changes are allowed. The NameNode enters the Safemode due to different reasons: - The DataNode(s) did not send the block report to the NameNode. - Not enough space in the NameNode directory specified in `dfs.namenode.resource.du.reserved`. - Not enough memory in the NameNode to load the FsImage and EditLog. - Unavailable HDFS blocks due to Datanode(s) down. - Corrupted HDFS blocks. - A user manually enabled the Safemode. ### Remediation Check the current Safemode status, use the following command from the Master node: `hdfs dfsadmin -safemode get`. If Safemode is OFF, HDFS is working as expected. If Safemode is ON: - Inspect the NameNode logs to understand the cause. - Check the HDFS filesystem status by running the following command from the Master node: `hdfs fsck /`. - Check HDFS related metrics such as `dataproc.googleapis.com/cluster/hdfs/unhealthy_blocks` and `dataproc.googleapis.com/cluster/hdfs/storage_utilization`. After the cause has been identified and fixed, i.e. the NameNode and all the HDFS DataNodes and blocks are healthy (`hdfs dfsadmin -report`), leave the Safemode using the following command: `hdfs dfsadmin -safemode leave`. ================================================ FILE: website/content/en/rules/dataproc/WARN/2024_002.md ================================================ --- title: "dataproc/WARN/2024_002" linkTitle: "WARN/2024_002" weight: 1 type: docs description: > HDFS can write file(s) to DataNode(s). --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Rule class**: WARN - Something that is possibly wrong ### Description HDFS had issues writing file(s) to DataNode(s). The HDFS NameNode logs show the following message: ``` java.io.IOException: File [...] could only be [written/replicated] to x nodes instead of minReplication (=n). There are y datanode(s) running and z node(s) are excluded in this operation. ``` This can be caused by different reasons: - The HDFS filesystem has no available space. - The DataNodes may be unavailable or there is no communication between NameNode and Datanode(s). - The reserved space for non-DFS use is not sufficient (`dfs.datanode.du.reserved`). ### Remediation - Check the [HDFS remaining capacity](https://cloud.google.com/dataproc/docs/guides/dataproc-metrics#hdfs_metrics): dfs/FSNamesystem/CapacityRemainingGB. - If low, free up some HDFS space or add primary worker nodes to the cluster. - Check the status of NameNode and DataNodes services and the related logs. - Address the issue based on the findings, e.g. network related issues related to the communication between NameNode and Datanodes. ================================================ FILE: website/content/en/rules/dataproc/_index.md ================================================ --- title: "DATAPROC" linkTitle: "dataproc" type: docs description: "Dataproc" --- ================================================ FILE: website/content/en/rules/gae/ERR/2023_001.md ================================================ --- title: "gae/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > App Engine: VPC Connector creation failure due to Org Policy --- **Product**: [App Engine](https://cloud.google.com/appengine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Organizational policy is preventing the creation of a Serverless VPC Access Connector. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/gae/ERR/2023_002.md ================================================ --- title: "gae/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > App Engine: VPC Connector creation due to subnet overlap --- **Product**: [App Engine](https://cloud.google.com/appengine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description When creating a VPC connector it fails to create a subnet overlapping with the auto subnet networks in the range 10.128.0.0/9 ### Remediation ### Further information ================================================ FILE: website/content/en/rules/gae/ERR/2025_001.md ================================================ --- title: "gae/ERR/2025_001" linkTitle: "ERR/2025_001" weight: 1 type: docs description: > App Engine default service account is deleted --- **Product**: [App Engine](https://cloud.google.com/appengine)\ **Rule class**: GAE application deployment potentially fail if default service account has been deleted ### Description App Engine default service account (@appspot.gserviceaccount.com) by default is used for GAE applications deployment when user-defined service account is not declared If it's recently deleted, recover the SA otherwise use user-defined service account Sample logging query to find deleted GAE default service account: ``` protoPayload.methodName="google.iam.admin.v1.DeleteServiceAccount" resource.labels.email_id="[PROJECT_ID]@appspot.gserviceaccount.com" resource.type="service_account" ``` ### Remediation The App Engine default service account was recently deleted (within 30 days). Please follow the steps at https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting to recover it Otherwise, please use user-defined service account https://cloud.google.com/appengine/docs/legacy/standard/python/user-managed-service-accounts ### Further information - [App Engine Standard default Service Account](https://cloud.google.com/appengine/docs/legacy/standard/python/service-account) - [App Engine Flexible default Service Account](https://cloud.google.com/appengine/docs/flexible/configure-service-accounts#assign_an_app-level_default_service_account) ================================================ FILE: website/content/en/rules/gae/WARN/2022_001.md ================================================ --- title: "gae/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > App Engine Standard versions don't use deprecated runtimes. --- **Product**: [App Engine](https://cloud.google.com/appengine)\ **Rule class**: WARN - Something that is possibly wrong ### Description The following runtimes are deprecated: 'go16', 'go18', 'go19', 'java7', 'php'. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/gae/WARN/2022_002.md ================================================ --- title: "gae/WARN/2022_002" linkTitle: "WARN/2022_002" weight: 1 type: docs description: > App Engine Flexible versions don't use deprecated runtimes. --- **Product**: [App Engine](https://cloud.google.com/appengine)\ **Rule class**: WARN - Something that is possibly wrong ### Description The following runtimes are deprecated: 'go16', 'go18', 'python27'. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/gae/_index.md ================================================ --- title: "GAE" linkTitle: "gae" type: docs description: "Google App Engine" --- ================================================ FILE: website/content/en/rules/gcb/ERR/2022_001.md ================================================ --- title: "gcb/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > Cloud Build service account has the cloudbuild.builds.editor role. --- **Product**: [Cloud Build](https://cloud.google.com/build)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Cloud Build service account is missing the cloudbuild.builds.create IAM permission, which is required for the service account to run a build trigger. You can resolve this error by granting the Cloud Build Service Account IAM role to [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. ### Remediation ### Further information [Default permissions of Cloud Build service account](https://cloud.google.com/build/docs/cloud-build-service-account#default_permissions_of_service_account) ================================================ FILE: website/content/en/rules/gcb/ERR/2022_002.md ================================================ --- title: "gcb/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > Builds don't fail because its service account did not have registry permissions. --- **Product**: [Cloud Build](https://cloud.google.com/build)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Builds configured to upload image to Artifact Registry must use service account that has write permission for it. ### Remediation You can resolve this error by granting IAM role to the used service account. If you did not specify service account for this build, then it used default one: [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. ### Further information ================================================ FILE: website/content/en/rules/gcb/ERR/2022_003.md ================================================ --- title: "gcb/ERR/2022_003" linkTitle: "ERR/2022_003" weight: 1 type: docs description: > Builds don't fail because of retention policy set on logs bucket. --- **Product**: [Cloud Build](https://cloud.google.com/build)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Builds that upload logs to bucket with retention policy must do that once build is finished instead of streaming them. ### Remediation You can resolve this error by removing this retention policy on the bucket, or setting following build options: "logging: GCS_ONLY" and "logStreamingOption: STREAM_OFF". ### Further information - https://cloud.google.com/build/docs/api/reference/rest/v1/projects.builds#logstreamingoption - https://cloud.google.com/build/docs/api/reference/rest/v1/projects.builds#loggingmode - https://cloud.google.com/storage/docs/bucket-lock#retention-policy ================================================ FILE: website/content/en/rules/gcb/ERR/2022_004.md ================================================ --- title: "gcb/ERR/2022_004" linkTitle: "ERR/2022_004" weight: 1 type: docs description: > Cloud Build Service Agent has the cloudbuild.serviceAgent role. --- **Product**: [Cloud Build](https://cloud.google.com/build)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Cloud Build service account is missing the cloudbuild.builds.builder role, which gives Cloud Build service account access to managed resources. You can resolve this error by granting the Cloud Build Service Agent (roles/cloudbuild.serviceAgent) IAM role to service-[PROJECT_NUMBER]@gcp-sa-cloudbuild.iam.gserviceaccount.com. ### Remediation ### Further information - https://cloud.google.com/iam/docs/service-agents#:~:text=None-,Cloud%20Build%20Service%20Agent,-cloudbuild.gserviceaccount ================================================ FILE: website/content/en/rules/gcb/_index.md ================================================ --- title: "GCB" linkTitle: "gcb" type: docs description: "Cloud Build" --- ================================================ FILE: website/content/en/rules/gce/BP/2021_001.md ================================================ --- title: "gce/BP/2021_001" linkTitle: "BP/2021_001" weight: 1 type: docs description: > Serial port logging is enabled. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: Best practices ### Description If this rule failed, it means that some instances have serial output logging disabled, and it is recommended that you enable it. Serial port output can be often useful for troubleshooting, and enabling serial logging makes sure that you don't lose the information when the VM is restarted. Additionally, serial port logs are timestamped, which is useful to determine when a particular serial output line was printed. gcpdiag makes uses of the serial output logs to detect some common issues in GCE, which won't work if serial output logging is disabled. ### Remediation See *Viewing serial port output* link below for instructions on how to enable serial output logging for GCE instances. ### Further information - [Viewing serial port output](https://cloud.google.com/compute/docs/instances/viewing-serial-port-output) ================================================ FILE: website/content/en/rules/gce/BP/2022_003.md ================================================ --- title: "gce/BP/2022_003" linkTitle: "BP/2022_003" weight: 1 type: docs description: > GCE unattached bootable disk. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP - Something that is possibly wrong ### Description Unattached bootable disks are abandoned or orphaned resources that are detached from a instance or service. You might want to delete abandoned and unused bootable disks and lowers your overall costs. ### Remediation Find an unattached disk: ``` gcloud compute disks list --filter="-users:*" ``` Delete unattached disk: ``` gcloud compute disks delete --zone= ``` ### Further information - [Detaching and reattaching boot disks](https://cloud.google.com/compute/docs/disks/detach-reattach-boot-disk) - [List Google Compute Engine disks](https://cloud.google.com/sdk/gcloud/reference/compute/disks/list) - [Delete a Compute Engine disk](https://cloud.google.com/sdk/gcloud/reference/compute/disks/delete) ================================================ FILE: website/content/en/rules/gce/BP/2023_001.md ================================================ --- title: "gce/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > Instance time source is configured with Google NTP server --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Google recommends Compute Engine instances to be configured with Google NTP servers to facilitate reliable time sync. Google can't predict how external NTP services behave. If at all possible, it is recommended that you do not use external NTP sources with Compute Engine virtual machines. ### Remediation - [Configure](https://cloud.google.com/compute/docs/instances/configure-ntp#configure_ntp_for_your_instances) VM to use Google NTP Server ### Further information - [Configure NTP Server](https://cloud.google.com/compute/docs/instances/configure-ntp) on VM ================================================ FILE: website/content/en/rules/gce/BP/2024_001.md ================================================ --- title: "gce/BP/2024_001" linkTitle: "BP/2024_001" weight: 1 type: docs description: > Verify that GCE VM Instances Don't Have Legacy Monitoring Agent Installed. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description This rule checks that no GCE VMs in the GCP project use the [legacy Monitoring Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/monitoring/installation). It leverages two public GCP APIs for detection: 1. The [OS Config API](https://cloud.google.com/compute/docs/osconfig/rest) (to check installed packages). 2. The [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) (to examine agent uptime metrics). The rule queries the [OS Config API](https://cloud.google.com/compute/docs/osconfig/rest) first, and uses [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) as a fallback. If the agent is detected in either location, the rule fails. If neither API is enabled or both APIs return an empty result, the rule skips the VM as it cannot determine the legacy agent installation status. It's recommended to [enable VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) which enables OS Config API automatically to guarantee the rule's ability to detect the legacy monitoring agent. We recommend transitioning to the [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent), which consolidates logging and monitoring into a single, actively supported solution. It's designed as the eventual replacement for the [legacy Monitoring Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/monitoring/installation). ### Remediation To resolve the rule violation, please [uninstall](https://cloud.google.com/stackdriver/docs/solutions/agents/monitoring/installation#uninstall) the legacy Monitoring Agent from any affected VMs. Please also [install](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#joint-install) the Ops Agent for continued monitoring. ### Further information - [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent) - [Legacy Monitoring Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/monitoring) - [VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) ================================================ FILE: website/content/en/rules/gce/BP/2024_002.md ================================================ --- title: "gce/BP/2024_002" linkTitle: "BP/2024_002" weight: 1 type: docs description: > Verify that GCE VM Instances Don't Have Legacy Logging Agent Installed. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description This rule checks that no GCE VMs in the GCP project use the [legacy Logging Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/logging/installation). It leverages two public GCP APIs for detection: 1. The [OS Config API](https://cloud.google.com/compute/docs/osconfig/rest) (to check installed packages). 2. The [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) (to examine agent uptime metrics). The rule queries the [OS Config API](https://cloud.google.com/compute/docs/osconfig/rest) first, and uses [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) as a fallback. If the agent is detected in either location, the rule fails. If neither API is enabled or both APIs return an empty result, the rule skips the VM as it cannot determine the legacy agent installation status. It's recommended to [enable VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) which enables OS Config API automatically to guarantee the rule's ability to detect the legacy logging agent. We recommend transitioning to the [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent), which consolidates logging and monitoring into a single, actively supported solution. It's designed as the eventual replacement for the [legacy Logging Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/logging/installation). ### Remediation To resolve the rule violation, please [uninstall](https://cloud.google.com/stackdriver/docs/solutions/agents/logging/installation#uninstall) the legacy Logging Agent from any affected VMs. Please also [install](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#joint-install) the Ops Agent for continued logging. ### Further information - [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent) - [Legacy Logging Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/logging) - [VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) ================================================ FILE: website/content/en/rules/gce/BP_EXT/2021_003.md ================================================ --- title: "gce/BP_EXT/2021_003" linkTitle: "BP_EXT/2021_003" weight: 1 type: docs description: > Secure Boot is enabled --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Google recommends enabling Secure Boot if you can ensure that it doesn't prevent a representative test VM from booting and if it is appropriate for your workload. Compute Engine does not enable Secure Boot by default because unsigned drivers and other low-level software might not be compatible. ### Remediation ### Further information - [Shielded VM](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm) ================================================ FILE: website/content/en/rules/gce/BP_EXT/2022_001.md ================================================ --- title: "gce/BP_EXT/2022_001" linkTitle: "BP_EXT/2022_001" weight: 1 type: docs description: > GCP project has VM Manager enabled --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Google recommends enabling VM Manager. It provides visibility on software vulnerabilities, missing updates and enables to set configuration management policies ### Remediation ### Further information [VM Manager](https://cloud.google.com/compute/docs/vm-manager) ================================================ FILE: website/content/en/rules/gce/BP_EXT/2023_001.md ================================================ --- title: "gce/BP_EXT/2023_001" linkTitle: "BP_EXT/2023_001" weight: 1 type: docs description: > Compute Engine scopes best practices --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description Google recommends enabling a custom service account with very fine-grained permissions and a very restricted access scope so that you can ensure that access scopes to connect to or from the VM is limited and implements a security-in-depth strategy where multiple layers of security are used for holistic protection. ### Remediation Please consider following the principle of least previlige and avoid using defaults service account for production applications. It is recommended to use a custom service account with restricted permissions that are required to your use case. ### Further information [Scopes Best Practices](https://cloud.google.com/compute/docs/access/service-accounts#scopes_best_practice) ================================================ FILE: website/content/en/rules/gce/BP_EXT/2024_001.md ================================================ --- title: "gce/BP_EXT/2024_001" linkTitle: "BP_EXT/2024_001" weight: 1 type: docs description: > Instance has a public ip address --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description If the Compute Engine instance does not have a public ip address, then the SSH button will be disabled in the SSH in browser UI. The SSH button in the Google Cloud Console is disabled if the instance does not have a public IP address. ### Remediation A variety of resolutions are available (especially when assigning a external IP is not a option): [Internal IP options](https://cloud.google.com/compute/docs/connect/ssh-internal-ip) ### Further information Documentation for [external IP](https://cloud.google.com/compute/docs/instances/connecting-advanced#sshbetweeninstances) is also available. ================================================ FILE: website/content/en/rules/gce/BP_EXT/2024_002.md ================================================ --- title: "gce/BP_EXT/2024_002" linkTitle: "BP_EXT/2024_002" weight: 1 type: docs description: > Calculate GCE VM's IOPS and Throughput Limits --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation ### Description This lint rules provide a easy method to calculate the Instance's disk IOPS and Throughput applicable limits and current usage. ### Remediation To understand a VM's storage performance, [view performance metrics](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#viewing-performance-metrics) for Throughput, Operations (IOPS), I/O Size, I/O Latency, and Queue Length. Disk throughput and IOPS indicate whether the VM workload is operating as expected. If throughput or IOPS is lower than the expected maximum listed in the [disk type chart](https://cloud.google.com/compute/docs/disks/performance#type_comparison), then I/O size, queue length, or I/O latency performance issues might be present. You can expect I/O size to be between 4-16 KiB for workloads that require high IOPS and low latency, and 256 KiB-1 MiB for workloads that involve sequential or large write sizes. I/O size outside of these ranges indicate disk performance issues. Queue length, also known as queue depth, is a factor of throughput and IOPS. When a disk performs well, its queue length should be about the same as the queue length recommended to achieve a particular throughput or IOPS level, listed in the [Recommended I/O queue depth](https://cloud.google.com/compute/docs/disks/optimizing-pd-performance#io-queue-depth) chart. I/O latency is dependent on queue length and I/O size. If the queue length or I/O size for a disk is high, the latency will also be high. If any storage performance metrics indicate disk performance issues, do one or more of the following: - Review [Optimizing Persistent Disk performance](https://cloud.google.com/compute/docs/disks/optimizing-pd-performance) or [Optimize Hyperdisk performance](https://cloud.google.com/compute/docs/disks/optimize-hyperdisk) and implement the best practices suggested to improve performance. - [Attach a new persistent disk to the VM](https://cloud.google.com/compute/docs/disks/add-persistent-disk) or [Add Hyperdisk storage to a VM](https://cloud.google.com/compute/docs/disks/add-hyperdisk) to increase the disk performance limits. Disk performance is based on the total amount of storage attached to an instance. This option is the least disruptive as it does not require a you to unmount the file system, restart, or shutdown the instance. - Modify the [Hyperdisk](https://cloud.google.com/compute/docs/disks/modify-hyperdisks) to increase the per-disk IOPS and throughput limits. For Persistent Disk, you must [increase the size of the disk](https://cloud.google.com/compute/docs/disks/resize-persistent-disk) to increase the per-disk IOPS and throughput limits. Disks don't have any reserved, unusable capacity, so you can use the full disk without performance degradation. - [Change the disk type](https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type) to a disk type that offers higher performance. ### Further information - [Review Persistent Disk performance metrics](https://cloud.google.com/compute/docs/disks/review-disk-metrics) - [Configure disks to meet performance requirements](https://cloud.google.com/compute/docs/disks/performance) - [Troubleshooting compute instance performance issues](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance) - [Benchmarking persistent disk performance on a Linux VM](https://cloud.google.com/compute/docs/disks/benchmarking-pd-performance-linux) ================================================ FILE: website/content/en/rules/gce/ERR/2021_001.md ================================================ --- title: "gce/ERR/2021_001" linkTitle: "ERR/2021_001" weight: 1 type: docs description: > Managed instance groups are not reporting scaleup failures. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The managed instance group autoscaler will report via Cloud Logging any scale up failures, and the logs can help you determine why a scale up didn't succeed. ### Remediation You can use the following Cloud Logging query to find matching log entries: ``` resource.type="gce_instance" log_id(cloudaudit.googleapis.com/activity) severity=ERROR protoPayload.methodName="v1.compute.instances.insert" protoPayload.requestMetadata.callerSuppliedUserAgent="GCE Managed Instance Group" ``` ### Further information - [Autoscaling groups of instances](https://cloud.google.com/compute/docs/autoscaler) ================================================ FILE: website/content/en/rules/gce/ERR/2021_002.md ================================================ --- title: "gce/ERR/2021_002" linkTitle: "ERR/2021_002" weight: 1 type: docs description: > OS Config service account has the required permissions. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The OS Config service account must have the osconfig.serviceAgent role. ### Remediation Make sure that you have the following role binding in the IAM policy: - Principal: `serviceAccount:service-PROJECTNR@gcp-sa-osconfig.iam.gserviceaccount.com` - Role: `roles/osconfig.serviceAgent` ### Further information - [OS configuration management](https://cloud.google.com/compute/docs/os-config-management) ================================================ FILE: website/content/en/rules/gce/ERR/2021_003.md ================================================ --- title: "gce/ERR/2021_003" linkTitle: "ERR/2021_003" weight: 1 type: docs description: > Google APIs service agent has the Editor role. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Google API service agent runs internal Google processes on your behalf. It is automatically granted the Editor role on the project. ### Remediation Make sure that you have the following role binding in the IAM policy: - Principal: `serviceAccount:PROJECTNR@cloudservices.gserviceaccount.com` - Role: `roles/editor` ### Further information - [Google-managed service accounts](https://cloud.google.com/iam/docs/service-accounts#google-managed) ================================================ FILE: website/content/en/rules/gce/ERR/2021_004.md ================================================ --- title: "gce/ERR/2021_004" linkTitle: "ERR/2021_004" weight: 1 type: docs description: > Serial logs don't contain Secure Boot error messages. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The messages: "Security Violation" / "Binary is blacklisted" / "UEFI: Failed to start image" / "UEFI: Failed to load image" in serial output usually indicate that the Secure Boot doesn't pass its pre-checks. Google Security team may update the UEFI default dbx to implement blacklists based on UEFI revocation list files in response to published CVEs. ### Remediation Make sure that you don't use outdated images or images with known security issues. ### Further information - [Secure Boot](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#secure-boot) - [Default EUFI certificates](https://cloud.google.com/compute/shielded-vm/docs/creating-shielded-images#default_certificates) - [UEFI revocation list file](https://www.uefi.org/revocationlistfile) - [Security bulletins](https://cloud.google.com/compute/docs/security-bulletins) ================================================ FILE: website/content/en/rules/gce/ERR/2021_005.md ================================================ --- title: "gce/ERR/2021_005" linkTitle: "ERR/2021_005" weight: 1 type: docs description: > Serial logs don't contain mount error messages. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The messages: "You are in emergency mode" / "Failed to mount" / "Unrecognized mount option" in serial output usually indicate that a Linux instance cannot mount the root partition. ### Remediation Make sure that root filesistem is healthy and the bootloader (grub) configuration is correct. Restore the boot disk from a snapshot. ### Further information - [Troubleshooting VM start up](https://cloud.google.com/compute/docs/troubleshooting/vm-startup#correct_the_boot_issue) - [Best practices for persistent disk snapshots](https://cloud.google.com/compute/docs/disks/snapshot-best-practices) ================================================ FILE: website/content/en/rules/gce/ERR/2022_001.md ================================================ --- title: "gce/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > Project limits were not exceeded. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Google Cloud establishes various quotas that you can use to track and limit the resources consumed by a project or organization. In most cases, if you run out of quota the task that you are trying to perform, such as deploying an application, creating a new project, or calling an API, fails and you get a quota error. The Cloud Monitoring will record the event when any service in your project is reporting a quota exceeded error. ### Remediation The task continues to fail until you free up resources (for allocation quota), the time period resets (for rate quota), or you [request and are granted a quota adjustment](https://cloud.google.com/docs/quotas/overview#about_increase_requests). ### Further information - [Working with quota](https://cloud.google.com/docs/quota) ================================================ FILE: website/content/en/rules/gce/ERR/2022_002.md ================================================ --- title: "gce/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > Serial logs don't contain Guest OS activation errors --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Premium Guest OSes need to activate their license when created and refreshed regularly after activation. In an event that the guest OS cannot communicate with the license servers, the messages: "Could not contact activation server." / "Server needs to be activated by a KMS Server" / "Exiting without registration" in the serial output would indicate license activation failures. ### Remediation ### Further information - https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows#licensing - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances#kms-server ================================================ FILE: website/content/en/rules/gce/ERR/2024_001.md ================================================ --- title: "gce/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > Snapshot creation not failed due to rate limit. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description When you try to snapshot your disk more than once during a ten minute period, or issue more than six burst snapshot requests in 60 minutes, you will encounter rate exceeded error. Follow best practices for disk snapshots. ### Remediation [To resolve this issue](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-snapshots#creating_snapshots_from_persistent_disks), take a snapshot of the disk at most once per hour as a best practice. Avoid taking snapshots more often than that. The easiest way to achieve this is to set up a snapshot schedule. ### Further information - [ Best practices for creating snapshots from persistent disks.](https://cloud.google.com/compute/docs/disks/snapshot-best-practices#freq-create-snaps) ================================================ FILE: website/content/en/rules/gce/ERR/2024_002.md ================================================ --- title: "gce/ERR/2024_002" linkTitle: "ERR/2024_002" weight: 1 type: docs description: > GCE VM is operating within optimal performance thresholds --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Checks the performance of the GCE instances in a project - CPU Usage, Memory Usage, Disk Usage and Serial port logs errors. Threshold for CPU Usage, Memory Usage, Disk Usage is 95%. ### Remediation To understand the performance of GCE VM, please [review the instance monitoring metrics](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#viewing-performance-metrics) related to CPU, Memory, Network and Disks. - **CPU and Memory metrics:** Consistently high CPU or memory utilization indicate the need to scale up a VM. If the VM consistently uses greater than 90% of its CPU or memory, [change the VM's machine type](https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#changing_a_machine_type) to a machine type with more vCPUs or memory. - **Network metrics:** Consistently high outgoing network traffic might indicate the need to [change the VM's machine type](https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#changing_a_machine_type) to a machine type that has a higher egress bandwidth limit. If you notice high numbers of incoming packets denied by firewalls, visit the [Network Intelligence Firewall Insights page](https://console.cloud.google.com/net-intelligence/firewalls) in the Google Cloud console to learn more about the origins of denied packets. - **Disk Metrics:** I/O latency is dependent on queue length and I/O size. If the queue length or I/O size for a disk is high, the latency will also be high. If any storage performance metrics indicate disk performance issues, do one or more of the following: - Review [Optimizing persistent disk performance](https://cloud.google.com/compute/docs/disks/optimizing-pd-performance) and implement the best practices suggested to improve performance. - [Resize the persistent disks](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#:~:text=Resize%20the%20persistent%20disks) to increase the per-disk IOPS and throughput limits. Persistent disks do not have any reserved, unusable capacity, so you can use the full disk without performance degradation. - [Change the disk type](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#:~:text=Change%20the%20disk%20type) to a disk type that offers higher performance. For more information, see [Configure disks to meet performance requirements](https://cloud.google.com/compute/docs/disks/performance). ### Further information - [Troubleshooting VM performance issues](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance) - [Machine families resource and comparison guide](https://cloud.google.com/compute/docs/machine-resource) ================================================ FILE: website/content/en/rules/gce/ERR/2024_003.md ================================================ --- title: "gce/ERR/2024_003" linkTitle: "ERR/2024_003" weight: 1 type: docs description: > GCE Shielded VM secure boot validations --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Identifies if Shielded VMs are facing boot issues due to Secure boot configurations and if there are Secure boot related fail events in cloud logging. ### Remediation To determine the cause of boot integrity validation failure, please [review the article](https://cloud.google.com/compute/shielded-vm/docs/integrity-monitoring#diagnosing-failure). [Update the baseline](https://cloud.google.com/compute/shielded-vm/docs/integrity-monitoring#updating-baseline) after any planned boot-specific changes in the instance configuration, like kernel updates or kernel driver installation, as these will cause integrity validation failures. If you have an unexpected integrity validation failure, you should investigate the reason for the failure and be prepared to stop the instance if necessary. ### Further information - [Monitoring integrity on Shielded VMs](https://cloud.google.com/compute/shielded-vm/docs/integrity-monitoring) - [Automating responses to integrity validation failures](https://cloud.google.com/compute/shielded-vm/docs/automating-responses-integrity-failures) ================================================ FILE: website/content/en/rules/gce/ERR/2024_004.md ================================================ --- title: "gce/ERR/2024_004" linkTitle: "ERR/2024_004" weight: 1 type: docs description: > Verify Ops Agent is installed on GCE VMs and is sending logs and metrics. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description This Rule verifies that VMs in the project have the Ops Agent installed and that the agent is successfully sending both logs and metrics to Google Cloud. The rule fails if the agent isn't transmitting these data streams. Seeing logs and metrics from your GCE VMs in Logs Explorer and Metrics Explorer, respectively, confirms successful Ops Agent telemetry transmission. Conversely, missing logs or metrics on either dashboard indicates a transmission failure with the Ops Agent. This check programmatically analyzes both log and metric transmission and reports the results individually in the final rule report. This Rule relies on the OS Config API to check Ops Agent installation on GCE VMs. It's recommended to [enable VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) which enables OS Config API automatically to guarantee the rule's ability to detect the ops agent installation. Without verifying the installation, the rule can't proceed to check for log and metric transmission. Top Reasons Why Ops Agent Fails to Transmit Logs and Metrics: 1. Missing VM Access Scopes: The VM should enable both "logging.write" and "monitoring.write" scopes. Follow this [instruction](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/authorization#before_you_begin) to update your VM access scopes. 2. Missing Service Account IAM Roles: The Service Account associated with the VM requires both ["roles/monitoring.metricWriter"](https://cloud.google.com/monitoring/access-control#mon_roles_desc) and ["roles/logging.logWriter"](https://cloud.google.com/logging/docs/access-control#logging.logWriter). Read [here](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-install-startup#agent-svc-acct-permissions) for more information. 3. GCP API Not Enabled: Ops Agent requires both [Cloud Monitoring API](https://cloud.google.com/monitoring/api/enable-api) and [Cloud Logging API](https://cloud.google.com/logging/docs/api/enable-api) enabled on the project. ### Remediation Why isn't the Ops Agent transmitting logs and metrics? Please run the Agent health check: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-find-info#start-checks to find out, and look up the error code table: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-find-info#health-checks to locate the corresponding fix. To install the latest version of Ops Agent, please follow: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#install-latest-version. To troubleshoot Ops Agent installation failure, please follow: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-install-startup#install-failed. ### Further information - [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent) - [VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) ================================================ FILE: website/content/en/rules/gce/WARN/2021_001.md ================================================ --- title: "gce/WARN/2021_001" linkTitle: "WARN/2021_001" weight: 1 type: docs description: > GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions and APIs Required for Logging. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description A GCP project should have Cloud Logging API enabled. The service account attached to the GCE VM instances should have the logging.logWriter IAM role permission. Also, a GCE instance should have the logging.write access scope. Without these, Ops Agent won't be able to collect logs from GCE VMs and display on Logs Explorer. ### Remediation Make sure that you have [enabled the Cloud Logging API](https://cloud.google.com/logging/docs/api/enable-api) in your GCP project. Make sure that you have the following role binding in the IAM policy: - Principal: service account attached to the GCE VM instance - Role: [`roles/logging.logWriter`](https://cloud.google.com/logging/docs/access-control#grant-roles) Make sure that the instance has one of the following [access scopes](https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes): - https://www.googleapis.com/auth/cloud-platform (default) - https://www.googleapis.com/auth/logging.admin - https://www.googleapis.com/auth/logging.write ### Further information - [Logging access control](https://cloud.google.com/logging/docs/access-control) ================================================ FILE: website/content/en/rules/gce/WARN/2021_002.md ================================================ --- title: "gce/WARN/2021_002" linkTitle: "WARN/2021_002" weight: 1 type: docs description: > GCE nodes have good disk performance. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description Verify that the persistent disks used by the GCE instances provide a "good" performance, where good is defined to be less than 100ms IO queue time. ### Remediation If the disk IO queue time is high, it probably means that the instance would benefit from a faster disk (changing the type or making it larger). ### Further information - [Block storage performance](https://cloud.google.com/compute/docs/disks/performance) ================================================ FILE: website/content/en/rules/gce/WARN/2021_003.md ================================================ --- title: "gce/WARN/2021_003" linkTitle: "WARN/2021_003" weight: 1 type: docs description: > GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions and APIs Required for Monitoring. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description A GCP project should have Cloud Monitoring API enabled. The service account attached to the GCE VM instances should have the monitoring.metricWriter IAM role permission. Also, a GCE instance should have the monitoring.write access scope. Without these, Ops Agent won't be able to collect metrics from GCE VMs and display on Metrics Explorer. ### Remediation Make sure that you have [enabled the Cloud Monitoring API](https://cloud.google.com/monitoring/api/enable-api) in your GCP project. Make sure that you have the following role binding in the IAM policy: - Principal: service account attached to the GCE VM instance - Role: [`roles/monitoring.metricWriter`](https://cloud.google.com/monitoring/access-control#grant-monitoring-access) Make sure that the GCE VM instance has one of the following [access scopes](https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes): - https://www.googleapis.com/auth/cloud-platform (default) - https://www.googleapis.com/auth/monitoring - https://www.googleapis.com/auth/monitoring.write ### Further information - [Monitoring access control](https://cloud.google.com/monitoring/access-control) ================================================ FILE: website/content/en/rules/gce/WARN/2021_004.md ================================================ --- title: "gce/WARN/2021_004" linkTitle: "WARN/2021_004" weight: 1 type: docs description: > Serial logs don't contain disk full messages --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description The messages: "No space left on device" / "I/O error" / "No usable temporary directory found" in serial output usually indicate that the disk is full. ### Remediation Delete some files or increase the size of the disk. You can use the following log query to find matching log lines: ``` resource.type="gce_instance" log_id("serialconsole.googleapis.com/serial_port_1_output") textPayload:( "No space left on device" OR "I/O error" OR "No usable temporary directory found" ) ``` ### Further information - [Resizing a persistent disk](https://cloud.google.com/compute/docs/disks/working-with-persistent-disks#resize_pd) ================================================ FILE: website/content/en/rules/gce/WARN/2021_005.md ================================================ --- title: "gce/WARN/2021_005" linkTitle: "WARN/2021_005" weight: 1 type: docs description: > Serial logs don't contain out-of-memory messages --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description The messages: "Out of memory: Kill process" / "sacrifice child" / "Killed process" / "Memory cgroup out of memory" in serial output usually indicate that a Linux instance is under memory pressure. ### Remediation Scale up the instance (add memory) by adjusting the instance's `machineType`, check for possible memory leaks in applications. You can use the following log query to find matching log lines: ``` resource.type="gce_instance" log_id("serialconsole.googleapis.com/serial_port_1_output") textPayload:( "Out of memory: Kill process" OR "sacrifice child" OR "Killed process" OR "Memory cgroup out of memory" ) ``` ### Further information - [Updating instance properties](https://cloud.google.com/compute/docs/instances/update-instance-properties) ================================================ FILE: website/content/en/rules/gce/WARN/2021_006.md ================================================ --- title: "gce/WARN/2021_006" linkTitle: "WARN/2021_006" weight: 1 type: docs description: > Serial logs don't contain "Kernel panic" messages --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description The "Kernel panic" messages in serial output usually indicate that some fatal error occurred on a Linux instance. ### Remediation This issue requires further troubleshooting as root causes vary in this case. Some common issues that could cause kernel to panic: - Memory pressure - Disk pressure - Filesystem issues - Software (driver) issues - Hardware issues You can use the following log query to find matching log lines: ``` resource.type="gce_instance" log_id("serialconsole.googleapis.com/serial_port_1_output") textPayload:("Kernel panic") ``` ### Further information - [Kernel panic](https://en.wikipedia.org/wiki/Kernel_panic) - [What to do in case of a Linux kernel panic](https://www.redhat.com/sysadmin/linux-kernel-panic) - [Documentation for /proc/sys/kernel/](https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html) ================================================ FILE: website/content/en/rules/gce/WARN/2021_007.md ================================================ --- title: "gce/WARN/2021_007" linkTitle: "WARN/2021_007" weight: 1 type: docs description: > Serial logs don't contain "BSOD" messages --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description The messages: "Dumping stack trace" / "pvpanic.sys" in serial output usually indicate that some fatal error occurred on a Windows instance. ### Remediation This issue requires further troubleshooting as root causes vary in this case. Some common issues that could cause BSODs: - Memory pressure - Disk pressure - Filesystem issues - Software (driver) issues - Hardware issues You can use the following log query to find matching log lines: ``` resource.type="gce_instance" log_id("serialconsole.googleapis.com/serial_port_1_output") textPayload:( "Dumping stack trace" OR "pvpanic.sys" ) ``` ### Further information - [Troubleshooting blue screen errors](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows#blue-screen) ================================================ FILE: website/content/en/rules/gce/WARN/2022_001.md ================================================ --- title: "gce/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > GCE connectivity: IAP service can connect to SSH/RDP port on instances. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description Traffic from the IP range 35.235.240.0/20 to VM instances is necessary for IAP TCP forwarding to establish an encrypted tunnel over which you can forward SSH, RDP traffic to VM instances. ### Further information [Using IAP for TCP forwarding](https://cloud.google.com/iap/docs/using-tcp-forwarding) ================================================ FILE: website/content/en/rules/gce/WARN/2022_002.md ================================================ --- title: "gce/WARN/2022_002" linkTitle: "WARN/2022_002" weight: 1 type: docs description: > Instance groups named ports are using unique names. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description Named ports are key-value pairs that represent a port's name and number. It is recommended to use unique port name for the same application, so that backend service can only forward traffic to one named port at a time. ### Remediation ### Further information - [Instance groups](https://cloud.google.com/compute/docs/instance-groups) - [Assigning named ports](https://cloud.google.com/compute/docs/instance-groups/adding-an-instance-group-to-a-load-balancer#assign_named_ports) ================================================ FILE: website/content/en/rules/gce/WARN/2022_003.md ================================================ --- title: "gce/WARN/2022_003" linkTitle: "WARN/2022_003" weight: 1 type: docs description: > GCE VM instances quota is not near the limit. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description VM instances quota is a regional quota and limits the number of VM instances that can exist in a given region. Rule will start failing if quota usage will be higher then configured threshold (80%). ### Further information - [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability) - [VM instances](https://cloud.google.com/compute/quotas#vm_instance_quota) ================================================ FILE: website/content/en/rules/gce/WARN/2022_004.md ================================================ --- title: "gce/WARN/2022_004" linkTitle: "WARN/2022_004" weight: 1 type: docs description: > Cloud SQL Docker bridge network should be avoided. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description The IP range 172.17.0.0/16 is reserved for the Docker bridge network. Connections from any IP within that range to Cloud SQL instances using private IP fail. ### Remediation Make sure that you do not use Docker bridge network for instances that need to access Cloud SQL via private ip. ### Further information - [Configure private IP](https://cloud.google.com/sql/docs/mysql/configure-private-ip) ================================================ FILE: website/content/en/rules/gce/WARN/2022_005.md ================================================ --- title: "gce/WARN/2022_005" linkTitle: "WARN/2022_005" weight: 1 type: docs description: > GCE CPU quota is not near the limit. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description CPU quota is a regional quota and limits the number of CPU that can exist in a given region. Rule will start failing if quota usage will be higher then configured threshold (80%). ### Further information - [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability) - [CPU quota](https://cloud.google.com/compute/quotas#cpu_quota) ================================================ FILE: website/content/en/rules/gce/WARN/2022_006.md ================================================ --- title: "gce/WARN/2022_006" linkTitle: "WARN/2022_006" weight: 1 type: docs description: > GCE GPU quota is not near the limit. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description GPU quota is a regional quota and limits the number of GPU that can exist in a given region. Rule will start failing if quota usage will be higher then configured threshold (80%). ### Further information - [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability) - [GPU quota](https://cloud.google.com/compute/quotas#gpu_quota) ================================================ FILE: website/content/en/rules/gce/WARN/2022_007.md ================================================ --- title: "gce/WARN/2022_007" linkTitle: "WARN/2022_007" weight: 1 type: docs description: > Compute Engine VM has the proper scope to connect using the Cloud SQL Admin API --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description The service account used by Compute Engine VM should have permission (roles/cloudsql.client) to connect to the Cloud SQL using the Cloud SQL Admin API, otherwise connection won't work. ### Remediation Configure the service account to have Cloud SQL Client (roles/cloudsql.client) permission and set the GCE VM the either of the following access scopes: - https://www.googleapis.com/auth/sqlservice.admin - https://www.googleapis.com/auth/cloud-platform ### Further information - [Cloud SQL admin API scopes](https://cloud.google.com/sql/docs/mysql/connect-compute-engine.html#prereq) - [Cloud SQL roles and permissions](https://cloud.google.com/sql/docs/mysql/roles-and-permissions#introduction) ================================================ FILE: website/content/en/rules/gce/WARN/2022_008.md ================================================ --- title: "gce/WARN/2022_008" linkTitle: "WARN/2022_008" weight: 1 type: docs description: > GCE External IP addresses quota is not near the limit. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description Regional IP quota is for assigning IPv4 addresses to VMs in that region. Global IP quota is for assigning IPv4 addresses to global networking resources such as load balancers. Rule will start failing if quota usage will be higher then configured threshold (80%). ### Further information - [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability) - [External IP addresses](https://cloud.google.com/compute/quotas#external_ip_addresses) ================================================ FILE: website/content/en/rules/gce/WARN/2022_009.md ================================================ --- title: "gce/WARN/2022_009" linkTitle: "WARN/2022_009" weight: 1 type: docs description: > GCE disk quota is not near the limit. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description The following persistent disk and local SSD quotas apply on a per-region basis: - Local SSD (GB) - Persistent disk standard (GB) - Persistent disk SSD (GB) Rule will start failing if quota usage will be higher then configured threshold (80%). ### Further information - [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability) - [Disk Quota](https://cloud.google.com/compute/quotas#disk_quota) ================================================ FILE: website/content/en/rules/gce/WARN/2022_010.md ================================================ --- title: "gce/WARN/2022_010" linkTitle: "WARN/2022_010" weight: 1 type: docs description: > GCE has enough resources available to fulfill requests --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description Resource availability errors can occur when using GCE resource on demand and a zone cannot accommodate your request due to resource exhaustion for the specific VM configuration. Consider trying your request in other zones, requesting again with a different VM hardware configuration or at a later time. For more information, see the troubleshooting documentation. ### Remediation - Create [reservations](https://cloud.google.com/compute/docs/instances/reservations-overview) for workloads ### Further information - https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation?#resource_availability ================================================ FILE: website/content/en/rules/gce/WARN/2022_011.md ================================================ --- title: "gce/WARN/2022_011" linkTitle: "WARN/2022_011" weight: 1 type: docs description: > GCE VM service account is valid --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description Disabling or deleting the service account used by a GCE VM will results in authentication issues for gcloud components and dependent apps. Restore/enable the service account use by the VM. ### Remediation - Replace attached service account with a new service account or re-enable the account. Service account deleted less than 30 days ago can be [restored](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting). ### Further information - https://cloud.google.com/iam/docs/creating-managing-service-accounts#disabling ================================================ FILE: website/content/en/rules/gce/WARN/2022_012.md ================================================ --- title: "gce/WARN/2022_012" linkTitle: "WARN/2022_012" weight: 1 type: docs description: > PAYG licensed Windows instance can reach KMS to activate --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description Validates if a Microsoft Windows instance is able to activate using GCP PAYG licence. ### Remediation https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows#licensing ### Further information https://cloud.google.com/compute/docs/instances/windows/ms-licensing https://cloud.google.com/compute/docs/instances/windows/ms-licensing-faq ================================================ FILE: website/content/en/rules/gce/WARN/2023_001.md ================================================ --- title: "gce/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > GCE snapshot policies are defined only for used disks --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description GCE snapshot policies are defined only for used disks. Schedule snapshots on unused disk are unnecessary since disk delta doesn't change. ### Remediation 1. Verify the disk hasn't been detached by mistake from the VM, else remove the schedule snapshot policy from such a disk. 2. A point in time snapshot should suffice (manual snapshot) ### Further information You can read more about schedule snapshots here: https://cloud.google.com/compute/docs/disks/scheduled-snapshots ================================================ FILE: website/content/en/rules/gce/WARN/2023_002.md ================================================ --- title: "gce/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > Serial logs don't contain out-of-memory message due to Airflow task run --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Rule class**: WARN - Something that is possibly wrong ### Description Sometimes Composer Airflow task might be using more memory and no proper logs will be seen in task log. In such cases we can observe out of memory messages in the k8s node log in the following way: "Memory cgroup out of memory: Killed process 123456 (airflow task ru)". ### Remediation 1. Consider reducing the worker_concurrency and observe the worker performance. 2. Based on the task usage requirement, consider increasing the airflow-worker memory. ### Further information You need to scale the Composer environment based on observation: https://cloud.google.com/composer/docs/composer-2/optimize-environments ================================================ FILE: website/content/en/rules/gce/_index.md ================================================ --- title: "GCE" linkTitle: "gce" type: docs description: Compute Engine --- ================================================ FILE: website/content/en/rules/gcf/ERR/2022_001.md ================================================ --- title: "gcf/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > Cloud Functions service agent has the cloudfunctions.serviceAgent role. --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Cloud Functions Service Agent is missing the cloudfunctions.serviceAgent role, which gives Cloud Functions Service Agent access to managed resources. You can resolve this error by granting the cloudfunctions.serviceAgent IAM role to service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com. ### Remediation ### Further information - [Troubleshooting permission errors](https://cloud.google.com/functions/docs/concepts/iam#troubleshooting_permission_errors) ================================================ FILE: website/content/en/rules/gcf/ERR/2022_002.md ================================================ --- title: "gcf/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > Cloud Function deployment failure due to Resource Location Constraint. --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Function is deployed in a region not allowed by the Organization Policy There is an Organization Policy in place for your project with a constraint named Resource Location Restriction. This restricts the physical location of the new resource (in your case Cloud Functions) that you are trying to deploy. Thus you are facing the error The request has violated one or more Org Policies. Please refer to the respective violations for more information. ### Remediation ### Further information - [Troubleshooting Cloud Functions](https://cloud.google.com/functions/docs/troubleshooting#resource-location) - [Organization policy constraints](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints) - [Restricting Resource Locations](https://cloud.google.com/resource-manager/docs/organization-policy/defining-locations) ================================================ FILE: website/content/en/rules/gcf/ERR/2022_003.md ================================================ --- title: "gcf/ERR/2022_003" linkTitle: "ERR/2022_003" weight: 1 type: docs description: > Function invocation interrupted due to memory limit exceeded. --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description When configuring Cloud Functions, you can choose how much memory is allocated to run the function. By default, the memory allocated to each function is 256 MB. You should ensure that the function executes within the amount of memory specified otherwise they will encounter an Out-of-Memory (OOM) error which will interrupt their function invocation. ### Remediation ### Further information - [Cloud Functions execution environment](https://cloud.google.com/functions/docs/concepts/exec#memory) ================================================ FILE: website/content/en/rules/gcf/WARN/2021_001.md ================================================ --- title: "gcf/WARN/2021_001" linkTitle: "WARN/2021_001" weight: 1 type: docs description: > Cloud Functions don't use deprecated runtimes. --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Rule class**: WARN - Something that is possibly wrong ### Description The following runtimes are deprecated: Go111, Nodejs6, Nodejs8. ### Remediation Nodejs14 and Go113 are recommended. ### Further information - [Cloud functions Runtime Support](https://cloud.google.com/functions/docs/runtime-support) ================================================ FILE: website/content/en/rules/gcf/WARN/2021_002.md ================================================ --- title: "gcf/WARN/2021_002" linkTitle: "WARN/2021_002" weight: 1 type: docs description: > Cloud Functions have no scale up issues. --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Rule class**: WARN - Something that is possibly wrong ### Description Cloud Functions infrastructure is not able to scale up instances fast enough to handle the incoming load for the function. ### Remediation You can use the following filter to find matching log lines: ``` resource.type="cloud_function" log_id("cloudfunctions.googleapis.com/cloud-functions") textPayload:"The request was aborted because there was no available instance" ``` ### Further information The additional troubleshooting documentation can be found at https://cloud.google.com/functions/docs/troubleshooting#scalability. ================================================ FILE: website/content/en/rules/gcf/_index.md ================================================ --- title: "GCF" linkTitle: "gcf" type: docs description: Cloud Functions --- ================================================ FILE: website/content/en/rules/gcs/BP/2022_001.md ================================================ --- title: "gcs/BP/2022_001" linkTitle: "BP/2022_001" weight: 1 type: docs description: > Buckets are using uniform access --- **Product**: [Cloud Storage](https://cloud.google.com/storage) **Rule class**: Best practices ### Description Google recommends using uniform access for a Cloud Storage bucket IAM policy ### Remediation ### Further information - [Access Control](https://cloud.google.com/storage/docs/access-control#choose_between_uniform_and_fine-grained_access ) ================================================ FILE: website/content/en/rules/gcs/_index.md ================================================ --- title: "GCS" linkTitle: "gcs" type: docs description: "Cloud Storage" --- ================================================ FILE: website/content/en/rules/gke/BP/2021_001.md ================================================ --- title: "gke/BP/2021_001" linkTitle: "BP/2021_001" weight: 1 type: docs description: > GKE logging and monitoring enabled. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Disabling logging (SYSTEM, WORKLOADS) and monitoring (aka "GKE Cloud Operations") impacts the ability to troubleshoot any issues that you might have. If you are a Google Cloud Support customer, keeping logging (SYSTEM, WORKLOADS) and monitoring enabled is important even if you have your own monitoring solution, because otherwise the support team won't have access to logs and monitoring data used for troubleshooting. ### Remediation Make sure that you enable Cloud Monitoring for SYSTEM metrics and Cloud Logging for SYSTEM and WORKLOADS logs. ### Further information - [Managing GKE logs](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs) - [Managing GKE metrics](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-metrics) - [GKE Support](https://cloud.google.com/kubernetes-engine/docs/getting-support) ================================================ FILE: website/content/en/rules/gke/BP/2022_001.md ================================================ --- title: "gke/BP/2022_001" linkTitle: "BP/2022_001" weight: 1 type: docs description: > GKE clusters are regional. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description The availability of regional clusters (both control plane and nodes) is higher for regional clusters as they are replicated across zones in the region. It is recommended to use regional clusters for the production workload. ### Further information - [GKE Regional clusters](https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters) ================================================ FILE: website/content/en/rules/gke/BP/2022_002.md ================================================ --- title: "gke/BP/2022_002" linkTitle: "BP/2022_002" weight: 1 type: docs description: > GKE clusters are using unique subnets. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Verify that the Google Kubernetes Engine clusters are not sharing subnets. It is recommended to use unique subnet for each cluster. Keep in mind that subnets may be also reused in other projects. ### Further information - [GKE Networking Best Practicies](https://cloud.google.com/kubernetes-engine/docs/best-practices/networking) ================================================ FILE: website/content/en/rules/gke/BP/2022_003.md ================================================ --- title: "gke/BP/2022_003" linkTitle: "BP/2022_003" weight: 1 type: docs description: > GKE cluster is not near to end of life --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description The GKE clusters should be updated regularly. It is recommended to keep your GKE cluster version up to date and avoid reaching end of life. Rule will start failing if scheduled end of life is in less than 30 days. ### Further information - [GKE release schedule](https://cloud.google.com/kubernetes-engine/docs/release-schedule#schedule_for_static_no_channel_versions) - [GKE versioning and support](https://cloud.google.com/kubernetes-engine/versioning#version_support) ================================================ FILE: website/content/en/rules/gke/BP/2022_004.md ================================================ --- title: "gke/BP/2022_004" linkTitle: "BP/2022_004" weight: 1 type: docs description: > GKE clusters should have HTTP load balancing enabled to use GKE ingress. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description If this is disabled GKE ingresses will be stuck in the creating state. Similarly, if this is disabled after GKE ingresses have been created but before they are deleted they will be stuck in the deleting state. It is also recommended to use container-native load balancing on GKE which requires that HTTP load balancing is enabled. ### Remediation Enable HTTP load balancing on the GKE cluster to allow creation/deletion of GKE ingresses. ### Further information - [GKE Ingress](https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer#ingress) - [Container-native load balancing](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#container-native_load_balancing) - [Requirements for container-native load balancing on GKE](https://cloud.google.com/kubernetes-engine/docs/concepts/container-native-load-balancing#requirements) ================================================ FILE: website/content/en/rules/gke/BP/2023_001.md ================================================ --- title: "gke/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > GKE network policy enforcement --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description The recommended minimum cluster size to run network policy enforcement is three e2-medium instances to ensure redundancy, high availability and to avoid down time due to maintenance activities. Network policy is not supported for clusters whose nodes are f1-micro or g1-small instances, as the resource requirements are too high. Enabling this feature on such machines might lead to user workloads not getting scheduled or having very little resources available as kube-system workloads will be consuming all or most resources. ### Remediation It is recommended to have at least three nodes the cluster, increase nodes in the cluster to meet the requirements. For nodes with f1-micro or g1-small instances it might be possible to run very light weight user workloads but it is recommended to have at least e2-medium instances. ### Further information - [Requirements for GKE network policy enforcement](https://cloud.google.com/kubernetes-engine/docs/how-to/network-policy#overhead_limitations_and_caveats) ================================================ FILE: website/content/en/rules/gke/BP/2023_002.md ================================================ --- title: "gke/BP/2023_002" linkTitle: "BP/2023_002" weight: 1 type: docs description: > Stateful workloads not run on preemptible node --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Please understand the risk of application level disruption or data corruption if you decide to run stateful workloads on preemptible nodes. You can use node taints and tolerations to make stateful Pods not be scheduled onto node pools that use preemptible VMs. ### Further information See [public troubleshooting docs](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms#best-practices) about the best practices using preemptible nodes in GKE. ================================================ FILE: website/content/en/rules/gke/BP/2023_004.md ================================================ --- title: "gke/BP/2023_004" linkTitle: "BP/2023_004" weight: 1 type: docs description: > GKE clusters are VPC-native. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description It's recommended to use VPC-native clusters. VPC-native clusters use alias IP address ranges on GKE nodes and are required for private GKE clusters and for creating clusters on Shared VPCs, as well as many other features. VPC-native clusters scale more easily than routes-based clusters without consuming Google Cloud routes and so are less susceptible to hitting routing limits. ### Remediation Migrate to VPC-Native cluster by recreating the cluster. ### Further information - [VPC-Native best practice](https://cloud.google.com/kubernetes-engine/docs/best-practices/networking#vpc-native-clusters) - [Creating a VPC-Native cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips) ================================================ FILE: website/content/en/rules/gke/BP/2023_005.md ================================================ --- title: "gke/BP/2023_005" linkTitle: "BP/2023_005" weight: 1 type: docs description: > Enable gateway resources through Gateway API. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - BP - Best practice, opinionated recommendation ### Description There is a possibility that healthcheckpolicies.networking.gke.io, gcpbackendpolicies.networking.gke.io, or gcpgatewaypolicies.networking.gke.io CRD are notpresent. You can use the following filter to find matching log lines: ``` jsonPayload.message=~".*Please enable the gateway API for your cluster using gcloud: https://cloud.google.com/kubernetes-engine/docs/how-to/deploying-gateways#enable-gateway.*" resource.type="k8s_cluster" severity="WARNING" ``` ### Remediation Kindly enable the Gateway API on new or existing GKE Autopilot and Standard clusters. ### Further information You may follow the steps in the below guide: - https://cloud.devsite.corp.google.com/kubernetes-engine/docs/how-to/deploying-gateways#enable-gateway ================================================ FILE: website/content/en/rules/gke/BP/2025_001.md ================================================ --- title: "gke/BP/2025_001" linkTitle: "BP/2025_001" weight: 1 type: docs description: > GKE clusters should have NodeLocal DNSCache enabled for better DNS performance. --- **Product**: [Google Kubernetes Networking](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description NodeLocal DNSCache improves DNS reliability and performance within the cluster by running a local DNS cache on each node. This reduces latency and load on kube-dns. It is a recommended best practice for most Standard clusters. Autopilot clusters have this enabled by default. ### Remediation Enable NodeLocal DNSCache on an existing Standard cluster using the following `gcloud` command: ``` gcloud container clusters update ${CLUSTER_NAME} \ --location=${COMPUTE_LOCATION} \ --update-addons=NodeLocalDNS=ENABLED ``` Replace ${CLUSTER_NAME} and ${COMPUTE_LOCATION} (e.g., us-central1 for region) with your cluster's details. ### Further information See https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache ================================================ FILE: website/content/en/rules/gke/BP_EXT/2022_001.md ================================================ --- title: "gke/BP_EXT/2022_001" linkTitle: "BP_EXT/2022_001" weight: 1 type: docs description: > Google Groups for RBAC enabled. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP_EXT - Best practice, opinionated recommendation ### Description User access should be managed with Google Groups so Workspace administrators can maintain the users and group memberships. This allows your teams to follow user account management best practices. ### Remediation Follow the documentation for steps on [How to enable Google Groups for RBAC](https://cloud.google.com/kubernetes-engine/docs/how-to/google-groups-rbac#enable) on GKE clusters. ### Further information - [GKE Access Control](https://cloud.google.com/kubernetes-engine/docs/concepts/access-control) - [How to enable Google Groups for RBAC](https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control#google-groups-for-gke) - [GKE Support](https://cloud.google.com/kubernetes-engine/docs/getting-support) ================================================ FILE: website/content/en/rules/gke/BP_EXT/2023_001.md ================================================ --- title: "gke/BP_EXT/2023_003" linkTitle: "BP_EXT/2023_003" weight: 1 type: docs description: > GKE maintenance windows are defined --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Maintenance windows give you fine-grained control over when automatic maintenance can occur on GKE clusters. They allow administrators to control the timing and impact of these updates, ensuring minimal disruption to running workloads. ### Further information - [Maintenance windows and exclusions](https://cloud.google.com/kubernetes-engine/docs/concepts/maintenance-windows-and-exclusions) - [Configure maintenance windows and exclusions](https://cloud.google.com/kubernetes-engine/docs/how-to/maintenance-windows-and-exclusions) ================================================ FILE: website/content/en/rules/gke/BP_EXT/2023_002.md ================================================ --- title: "gke/BP_EXT/2023_006" linkTitle: "BP_EXT/2023_006" weight: 1 type: docs description: > GKE clusters are private clusters. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: BP_EXT - Best practice, opinionated recommendation ### Description A private cluster is a type of VPC-native cluster that only depends on internal IP addresses. Nodes, Pods, and Services in a private cluster require unique subnet IP address ranges. Private clusters are used when the applicationas and services are needed to be isolated from the outside connections completely. This ensures the workloads are private and not exposed to untrusted sources. ### Remediation [Create Pirvate Cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters) ### Further information [Related Doc](https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept) ================================================ FILE: website/content/en/rules/gke/ERR/2021_001.md ================================================ --- title: "gke/ERR/2021_001" linkTitle: "ERR/2021_001" weight: 1 type: docs description: > GKE nodes service account permissions for logging. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The service account used by GKE nodes should have the logging.logWriter role, otherwise ingestion of logs won't work. ### Remediation Make sure that you have the following role binding in the IAM policy: - Principal: GKE node pool service account - Role: `roles/logging.logWriter` ### Further information - [Hardening your cluster's security](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster) ================================================ FILE: website/content/en/rules/gke/ERR/2021_002.md ================================================ --- title: "gke/ERR/2021_002" linkTitle: "ERR/2021_002" weight: 1 type: docs description: > GKE nodes service account permissions for monitoring. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The service account used by GKE nodes should have the monitoring.metricWriter role, otherwise ingestion of metrics won't work. ### Remediation Make sure that you have the following role binding in the IAM policy: - Principal: GKE node pool service account - Role: `roles/monitoring.metricWriter` ### Further information - [Hardening your cluster's security](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster) ================================================ FILE: website/content/en/rules/gke/ERR/2021_003.md ================================================ --- title: "gke/ERR/2021_003" linkTitle: "ERR/2021_003" weight: 1 type: docs description: > App-layer secrets encryption is activated and Cloud KMS key is enabled. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description GKE's default service account cannot use a disabled or destroyed Cloud KMS key for application-level secrets encryption. ### Further information - [Encrypting secrets at the application layer](https://cloud.google.com/kubernetes-engine/docs/how-to/encrypting-secrets) ================================================ FILE: website/content/en/rules/gke/ERR/2021_004.md ================================================ --- title: "gke/ERR/2021_004" linkTitle: "ERR/2021_004" weight: 1 type: docs description: > GKE nodes aren't reporting connection issues to apiserver. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description GKE nodes need to connect to the control plane to register and to report status regularly. If connection errors are found in the logs, possibly there is a connectivity issue, like a firewall rule blocking access. ### Remediation You can use the following filter to find matching log lines: ``` resource.type="k8s_node" log_id("kubelet") jsonPayload.MESSAGE:"Failed to connect to apiserver" ``` ### Further information - [GKE Troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting) ================================================ FILE: website/content/en/rules/gke/ERR/2021_005.md ================================================ --- title: "gke/ERR/2021_005" linkTitle: "ERR/2021_005" weight: 1 type: docs description: > GKE nodes aren't reporting connection issues to storage.google.com. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description GKE node need to download artifacts from storage.google.com:443 when booting. If a node reports that it can't connect to storage.google.com, it probably means that it can't boot correctly. ### Remediation You can use the following filter to find matching log lines: ``` resource.type="k8s_node" log_id("kubelet") jsonPayload.MESSAGE:"Failed to connect to storage.googleapis.com" ``` ### Further information - [GKE Troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting) ================================================ FILE: website/content/en/rules/gke/ERR/2021_006.md ================================================ --- title: "gke/ERR/2021_006" linkTitle: "ERR/2021_006" weight: 1 type: docs description: > GKE Autoscaler isn't reporting scaleup failures. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description If the GKE autoscaler reported a problem when trying to add nodes to a cluster, it could mean that you don't have enough resources to accommodate for new nodes. E.g. you might not have enough free IP addresses in the GKE cluster network. ### Remediation You can use the following filter to find matching log lines: ``` resource.type="gce_instance" log_id(cloudaudit.googleapis.com/activity) severity=ERROR protoPayload.methodName="v1.compute.instances.insert" protoPayload.requestMetadata.callerSuppliedUserAgent="GCE Managed Instance Group for GKE" ``` ### Further information - [Troubleshooting Cluster Autoscaler](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler#troubleshooting) ================================================ FILE: website/content/en/rules/gke/ERR/2021_007.md ================================================ --- title: "gke/ERR/2021_007" linkTitle: "ERR/2021_007" weight: 1 type: docs description: > GKE service account permissions. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Verify that the Google Kubernetes Engine service account exists and has the Kubernetes Engine Service Agent role on the project. ### Remediation Make sure that you have the following role binding in the IAM policy: - Principal: `serviceAccount:service-PROJECTNR@container-engine-robot.iam.gserviceaccount.com` - Role: `roles/container.serviceAgent` ### Further information - [GKE Troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting#gke_service_account_deleted) ================================================ FILE: website/content/en/rules/gke/ERR/2021_008.md ================================================ --- title: "gke/ERR/2021_008" linkTitle: "ERR/2021_008" weight: 1 type: docs description: > Google APIs service agent has Editor role. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The Google API service agent project-number@cloudservices.gserviceaccount.com runs internal Google processes on your behalf. It is automatically granted the Editor role on the project. ### Remediation Make sure that you have the following role binding in the IAM policy: - Principal: `serviceAccount:PROJECTNR@cloudservices.gserviceaccount.com` - Role: `roles/editor` ### Further information - [Google-managed service accounts](https://cloud.google.com/iam/docs/service-accounts#google-managed) ================================================ FILE: website/content/en/rules/gke/ERR/2021_009.md ================================================ --- title: "gke/ERR/2021_009" linkTitle: "ERR/2021_009" weight: 1 type: docs description: > Version skew between cluster and node pool --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Difference between cluster version and node pools version should be no more than 2 (K8s Check internal peering forwarding limits which affect GKE. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Internal Load Balancer creation can fail due to VPC internal forwarding rules limits. ### Remediation You can use the following Cloud Logging filter to find matching log lines: ``` resource.type="k8s_cluster" log_id("events") jsonPayload.message:"INTERNAL_FORWARDING_RULES_WITH_PEERING_LIMITS_EXCEEDED" jsonPayload.reason:"SyncLoadBalancerFailed" ``` ### Further information - [VPC Quotas and Limits](https://cloud.google.com/vpc/docs/quota) ================================================ FILE: website/content/en/rules/gke/ERR/2021_011.md ================================================ --- title: "gke/ERR/2021_011" linkTitle: "ERR/2021_011" weight: 1 type: docs description: > ip-masq-agent not reporting errors --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description If ip-masq-agent is reporting errors, it is possible that the config received is invalid. In that case, it is possible that the applied config is not reflecting the desired masquerading behavior, which could lead to unexpected connectivity issues. ### Remediation For more details on how to configure ip-masq-agent, please review: You can use the following Cloud Logging filter to find matching log lines: ``` resource.type="k8s_container" resource.labels.container_name="ip-masq-agent" log_id("stderr") ``` ### Further information - [ip-masq-agent configuration](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#config_agent_configmap) ================================================ FILE: website/content/en/rules/gke/ERR/2021_012.md ================================================ --- title: "gke/ERR/2021_012" linkTitle: "ERR/2021_012" weight: 1 type: docs description: > Node pool service account exists and is not disabled. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Disabling or deleting the service account used by a node pool will render the node pool not functional. ### Remediation Restore the default compute account or service account that was specified when the node pool was created. ### Further information - [gcloud beta iam service-accounts undelete](https://cloud.google.com/sdk/gcloud/reference/beta/iam/service-accounts/undelete) ================================================ FILE: website/content/en/rules/gke/ERR/2021_013.md ================================================ --- title: "gke/ERR/2021_013" linkTitle: "ERR/2021_013" weight: 1 type: docs description: > GKE cluster firewall rules are configured. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description GKE automatically creates firewall rules for cluster communication. We verify that the VPC firewall rules are present. ### Remediation If the firewall rules are not present, it could be because of one of the following reasons: - The firewall rules couldn't be created (for example in a shared VPC scenario) - The firewall rules were disabled or deleted ### Further information - [Automatically created firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules) - [Providing the GKE Ingress controller permission to manage host project firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#providing_the_ingress_controller_permission_to_manage_host_project_firewall_rules) ================================================ FILE: website/content/en/rules/gke/ERR/2021_014.md ================================================ --- title: "gke/ERR/2021_014" linkTitle: "ERR/2021_014" weight: 1 type: docs description: > GKE masters of private clusters can reach the nodes. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Nodes of private clusters must allow certain connections from the masters (tcp:443 and tcp:10250) The GKE control plane automatically creates a firewall rule called `gke-[cluster-name]-[cluster-hash]-master` to allow these connections, but if the connections get blocked, the following could be the reason: - The firewall rules couldn't be created (for example in a shared VPC scenario) - The firewall rules were disabled or deleted - There is a higher priority firewall rule configured for the VPC - There is a firewall policy at the organization or folder level which blocks these connections. ### Remediation The gcpdiag output should tell you if the connection was blocked by a firewall rule or policy. ### Further information - [Automatically created firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules) ================================================ FILE: website/content/en/rules/gke/ERR/2021_015.md ================================================ --- title: "gke/ERR/2021_015" linkTitle: "ERR/2021_015" weight: 1 type: docs description: > GKE connectivity: node to pod communication. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Agents and host-network pods from a node must be able to communicate with all pods on all nodes. The GKE control plane automatically creates a firewall rule called `gke-[cluster-name]-[cluster-hash]-vms` to allow these connections, but if the connections get blocked, the following could be the reason: - The firewall rules couldn't be created (for example in a shared VPC scenario) - The firewall rules were disabled or deleted - There is a higher priority firewall rule configured for the VPC - There is a firewall policy at the organization or folder level which blocks these connections. ### Remediation The gcpdiag output should tell you if the connection was blocked by a firewall rule or policy. ### Further information - [Automatically created firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules) ================================================ FILE: website/content/en/rules/gke/ERR/2022_001.md ================================================ --- title: "gke/ERR/2022_001" linkTitle: "ERR/2022_001" weight: 1 type: docs description: > GKE connectivity: pod to pod communication. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Traffic between all pods on a cluster is required by the Kubernetes networking model. Following protocols must be allowed: TCP, UDP, SCTP, ICMP, ESP, AH. ### Further information - [GKE cluster firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules#cluster-fws) - [Kubernetes network model](https://kubernetes.io/docs/concepts/cluster-administration/networking/#the-kubernetes-network-model) ================================================ FILE: website/content/en/rules/gke/ERR/2022_002.md ================================================ --- title: "gke/ERR/2022_002" linkTitle: "ERR/2022_002" weight: 1 type: docs description: > GKE nodes of private clusters can access Google APIs and services. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Private GKE clusters must have Private Google Access enabled on the subnet where cluster is deployed. ### Further information - [GKE Private Clusters](https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters) - [Private Google Access](https://cloud.google.com/vpc/docs/private-google-access) ================================================ FILE: website/content/en/rules/gke/ERR/2022_003.md ================================================ --- title: "gke/ERR/2022_003" linkTitle: "ERR/2022_003" weight: 1 type: docs description: > GKE connectivity: load balancer to node communication (ingress). --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description In order for the Ingress service to work correctly, the network connection from the load balancer must be allowed. ### Further information - [GKE Ingress firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules#ingress-fws) - [GKE Ingress](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress) - [Health checks](https://cloud.google.com/load-balancing/docs/health-check-concepts) ================================================ FILE: website/content/en/rules/gke/ERR/2023_001.md ================================================ --- title: "gke/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > Container File System API quota not exceeded --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Verify that Image Streaming has not exceeded the Container File System API quota. That might cause a CrashLoopBackOff error on your pods. ### Remediation You can use the following Cloud Logging filter to find matching log lines: ``` resource.type="k8s_node" log_id("gcfsd") jsonPayload.MESSAGE:"Quota exceeded for quota metric" ``` To resolve this issue, [increase the following quotas](https://cloud.google.com/docs/quota#requesting_higher_quota): - Content requests per project per region per minute per region - Content requests per project per region ### Further information See [public troubleshooting docs](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming#quota_exceeded) about possible issues on image streaming. ================================================ FILE: website/content/en/rules/gke/ERR/2023_002.md ================================================ --- title: "gke/ERR/2023_002" linkTitle: "ERR/2023_002" weight: 1 type: docs description: > GKE private clusters are VPC-native. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Private cluster is a type of VPC-native cluster and must not be Routes-based. VPC-native clusters use alias IP address ranges on GKE nodes and are required for private GKE clusters and for creating clusters on Shared VPCs, as well as many other features. ### Remediation Migrate to VPC-Native private cluster by recreating the cluster. ### Further information - [VPC-Native best practices](https://cloud.google.com/kubernetes-engine/docs/best-practices/networking#vpc-native-clusters) - [Creating a VPC-Native cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips) ================================================ FILE: website/content/en/rules/gke/ERR/2023_003.md ================================================ --- title: "gke/ERR/2023_003" linkTitle: "ERR/2023_003" weight: 1 type: docs description: > containerd config.toml is valid. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description `containerd` container runtime is a crucial component of a GKE cluster that runs on all nodes. If its configuration file was customized and became invalid, `containerd` can't be started and its node will stay in `NotReady` state. The config file in question is `/etc/containerd/config.toml`. ### Remediation Usually such a change is introduced via a DaemonSet with a privileged container. A short-term remidiation is to disable (delete) the DaemonSet and recreate all affected nodes by scaling the affected nodepools to 0 nodes and then back, to the original value. A long-term solution is to fix the issue at the source (the application in the DaemonSet). One of the known DaemonSets that could cause this issue is `twistlock defender` from [Prizma Cloud security suite](https://docs.paloaltonetworks.com/prisma/prisma-cloud), which could inject configuration entries in old configuration file format to a configuration file created with a newer configuration file format. You can use the following filter to find matching log lines: ``` resource.type="k8s_node" log_id("container-runtime") jsonPayload.MESSAGE:"containerd: failed to load TOML" ``` ### Further information - [config.toml - configuration file for containerd](https://github.com/containerd/containerd/blob/main/docs/man/containerd-config.toml.5.md) ================================================ FILE: website/content/en/rules/gke/ERR/2023_004.md ================================================ --- title: "gke/ERR/2023_004" linkTitle: "ERR/2023_004" weight: 1 type: docs description: > GKE ingresses are well configured. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Check Kubernetes ingress to avoid potential misconfigurations. ### Further information - [GKE Ingress Configuration](https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-configuration) - [GKE Ingress for HTTP(S) Load Balancing](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress) ================================================ FILE: website/content/en/rules/gke/ERR/2023_005.md ================================================ --- title: "gke/ERR/2023_005" linkTitle: "ERR/2023_005" weight: 1 type: docs description: > Workloads not reporting misconfigured CNI plugins --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Workloads in cluster are unable to setup pod networking which is likely to fail here due to CNI plugin issue. Check for any recent changes in your CNI plugin. Verify working and non working node's /etc/cni content. Rebuild the node if CNI is broken. You can use the following filter to find matching log lines: ``` jsonPayload.MESSAGE =~"CreatePodSandbox for pod failed.* failed to setup network for sandbox" resource.type="k8s_node" ``` ### Remediation - [Workaround for cilium cni failures](https://cloud.google.com/kubernetes-engine/docs/how-to/dataplane-v2#workarounds_for_standard_clusters) ### Further information ================================================ FILE: website/content/en/rules/gke/ERR/2023_006.md ================================================ --- title: "gke/ERR/2023_006" linkTitle: "ERR/2023_006" weight: 1 type: docs description: > GKE Gateway controller reporting misconfigured annotations in Gateway resource --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Gateway controller creates loadbalancing resources based on annotations specified in gateway resources. It expects the user to use correct set of supported annotations name and values. It might be case that annotation name has a typo or mistake. You can use the following filter to find matching log entries with gateway resource containing misconfigured annotations: ``` jsonPayload.MESSAGE =~"Error GWCER101: Annotation" resource.type="k8s_cluster" ``` ### Remediation - Fix the annotations in gateway resources obtained from above query ### Further information ================================================ FILE: website/content/en/rules/gke/ERR/2023_007.md ================================================ --- title: "gke/ERR/2023_007" linkTitle: "ERR/2023_007" weight: 1 type: docs description: > GKE Gateway controller reporting missing or invalid resource references in Gateway resource --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Gateway controller creates urls maps based on HTTPRoute resources. If the HTTP route has invalid reference to gateway or invalid spec, controller will not be able create url maps. You can use the following filter to find matching log entries with gateway resource containing misconfigured httproute: ``` jsonPayload.MESSAGE =~"Error GWCER106: Gateway" resource.type="k8s_cluster" ``` ### Remediation - Fix the HTTProute resource ### Further information ================================================ FILE: website/content/en/rules/gke/ERR/2023_008.md ================================================ --- title: "gke/ERR/2023_008" linkTitle: "ERR/2023_008" weight: 1 type: docs description: > GKE Cluster does not have any pods in Crashloopbackoff state. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description CrashLoopBackOff indicates that a container is repeatedly crashing after restarting. A container might crash for many reasons, and checking a Pod's logs might aid in troubleshooting the root cause. ### Remediation Follow the below document for troubleshooting this issue: https://cloud.google.com/kubernetes-engine/docs/troubleshooting#CrashLoopBackOff ### Further information ================================================ FILE: website/content/en/rules/gke/ERR/2023_009.md ================================================ --- title: "gke/ERR/2023_007" linkTitle: "ERR/2023_007" weight: 1 type: docs description: > Missing request for CPU resources. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Error means that HPA is unable to calculate the number of replicas that should be scaled up or down based on the current metrics because there is no request for CPU resources specified in the deployment or pod. The HPA requires at least one metric to be specified to scale the deployment or replica set. You can use the following filter to find matching log lines: ``` jsonPayload.message="missing request for cpu" resource.type="k8s_cluster" severity="WARNING" ``` ### Remediation To add a CPU resource request to your deployment configuration, simply include a resources section in your deployment configuration file. You may follow the steps in the below guide: - https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits ### Further information If the cluster is in Autopilot cluster, you may follow the below steps to configure resource requests: - https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-resource-requests ================================================ FILE: website/content/en/rules/gke/ERR/2023_010.md ================================================ --- title: "gke/ERR/2023_010" linkTitle: "ERR/2023_010" weight: 1 type: docs description: > NodeLocal DNSCache timeout errors. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description On clusters with NodeLocal DNSCache enabled sometimes response to a DNS request was not received from kube-dns in 2 seconds and hence the DNS timeout errors crop up. You can use the following filter to find matching log lines: ``` textPayload:"[ERROR] plugin/errors: 2" resource.type="k8s_container" ``` ### Remediation Increase the number of kube-dns replicas. ### Further information - https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache ================================================ FILE: website/content/en/rules/gke/ERR/2023_011.md ================================================ --- title: "gke/ERR/2023_011" linkTitle: "ERR/2023_011" weight: 1 type: docs description: > GKE Metadata Server isn't reporting errors for pod IP not found --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The gke-metadata-server DaemonSet uses pod IP addresses to match client requests to Kubernetes Service Accounts. Pod IP not found errors may indicate a misconfiguration or a workload that is not compatible with GKE Workload Identity. You can use the following Cloud Logging filter to find errors in the GKE Metadata Server logs: ``` resource.type="k8s_container" log_id("stderr") resource.labels.container_name="gke-metadata-server" severity=ERROR ``` Examples from **gke-metadata-server --component-version=0.4.276**: > [conn-id:bc54e859ac0e7269] Unable to find pod: generic::not_found: retry budget exhausted (50 attempts): ip "169.254.123.2" not recorded in the snapshot > > [conn-id:bc54e859ac0e7269 rpc-id:29b6f8cbdbdaafb5] Caller is not authenticated Older example from **gke-metadata-server --component-version=0.4.275**: > [ip:172.17.0.2 pod:/ rpc-id:387a551d4b506f31] Failed to find Workload Identity configuration for pod: while retrieving pod from cache: pod "" not found Note: **172.17.0.0/16** and **169.254.123.0/24** are the default ranges used by the Docker daemon for container networking. ### Remediation One known cause of these errors is use of the deprecated legacy logging agent on [COS GKE Nodes](https://cloud.google.com/container-optimized-os/docs/how-to/logging) via project metadata `google-logging-enabled=true` without `google-logging-use-fluentbit=true` which was introduced in COS Milestone 105. Enabling the fluent-bit agent will automatically update all existing nodes and prevent them from generating pod not found error messages. In [COS Milestone 109](https://cloud.google.com/container-optimized-os/docs/concepts/versioning) the fluent-bit agent will become the default when enabling logging via project metadata. Another cause could be docker-in-docker pods (often used by CI/CD systems to build containers) running with `hostNetwork: true` or other docker based VM agents running outside Kubernetes. If you identify a workload that is not compatible with the GKE Metadata Server, you can [create a nodepool](https://cloud.google.com/sdk/gcloud/reference/container/node-pools/create#--workload-metadata) with `--workload-metadata=GCE_METADATA` and use [taints/tolerations](https://cloud.google.com/kubernetes-engine/docs/how-to/node-taints) to specify where the workload should run. ### Further information See [Workload Identity docs](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity) for more restrictions and alternatives. ================================================ FILE: website/content/en/rules/gke/ERR/2023_012.md ================================================ --- title: "gke/ERR/2022_012" linkTitle: "ERR/2022_012" weight: 1 type: docs description: > Missing request for memory resources. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Error means that HPA is unable to calculate the number of replicas that should be scaled up or down based on the current metrics because there is no request for memory resources specified in the deployment or pod. The HPA requires at least one metric to be specified to scale the deployment or replica set. You can use the following filter to find matching log lines: ``` jsonPayload.message="missing request for memory" resource.type="k8s_cluster" severity="WARNING" ``` ### Remediation To add a memory resource request to your deployment configuration, simply include a resources section in your deployment configuration file. You may follow the steps in the below guide: - https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits ### Further information If the cluster is in Autopilot cluster, you may follow the below steps to configure resource requests: - https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-resource-requests ================================================ FILE: website/content/en/rules/gke/ERR/2024_001.md ================================================ --- title: "gke/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > Checking for no Pod Security Admission violations in the project. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description The rule checks the project for no Pod Security Admission violations. Verify that there are no PSA violations in any namespace of any cluster in the project. If there are any violations inspect the logs to find what caused the violation and if required adjust the policy or pod manifest. Use below logging filter to find the logs: ``` log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" resource.labels.cluster_name="CLUSTER_NAME" severity=DEFAULT protoPayload.response.message:"violates PodSecurity" protoPayload.response.reason="Forbidden" protoPayload.resourceName="RESOURCE_NAME" ``` Replace * CLUSTER_NAME with the name of the cluster affected * RESOURCE_NAME with the pod resource output generated by the rule ### Remediation If the workload is of interest, the fix would be to analyze the violation by inspecting `protoPayload.response.message` of the log and referring to the [Pod Security Standards Profile](https://kubernetes.io/docs/concepts/security/pod-security-standards/) to make the required corrections in the workload manifest. ### Further information 1. https://cloud.google.com/kubernetes-engine/docs/how-to/podsecurityadmission 2. https://kubernetes.io/docs/concepts/security/pod-security-admission/ ================================================ FILE: website/content/en/rules/gke/ERR/2024_002.md ================================================ --- title: "gke/ERR/2024_002" linkTitle: "ERR/2024_002" weight: 1 type: docs description: > GKE Webhook failures can seriously impact GKE Cluster. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description Impact typically depends on the webhook failure policy and what type of GKE API are handled by the webhook. In some cases, a failing customer created webhook can render a cluster unusable until corrected. Inability to create Pod (and similar)can lead to system pod not getting scheduled / new pod not reaching a healthy state. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/gke/ERR/2024_003.md ================================================ --- title: "gke/ERR/2024_003" linkTitle: "ERR/2024_003" weight: 1 type: docs description: > GKE nodes service account permissions fit container.defaultNodeServiceAccount role --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: Something that is very likely to be wrong ### Description The service account used by GKE nodes should possess the permissions of the container.defaultNodeServiceAccount role, otherwise ingestion of logs or metrics won't work. ### Remediation Make sure your GKE node pool service accounts have the following role binding in the IAM policy - Principal: GKE node pool service account - Role: `container.defaultNodeServiceAccount` or use a custom role which contains [those permissions](https://cloud.google.com/iam/docs/understanding-roles#container.defaultNodeServiceAccount) ### Further information - [Hardening your cluster - Use least privilege IAM service Accounts](https://cloud.google.com/linhttps://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#use_least_privilege_sa) ================================================ FILE: website/content/en/rules/gke/ERR/2025_001.md ================================================ --- title: "gke/ERR/2025_001" linkTitle: "ERR/2025_001" weight: 1 type: docs description: > GKE cluster complies with the serial port logging organization policy. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: ERR - Something that is very likely to be wrong ### Description When the constraints/compute.disableSerialPortLogging organization policy is enabled, GKE clusters must be created with logging disabled (serial-port-logging-enable: 'false'), otherwise the creation will fail. If cluster was initially created with "serial-port-logging-enable: 'true'" and the organization policy was enabled after that, all new node pools have to be created with explicit "serial-port-logging-enable: 'false'" ### Remediation Cluster metadata and nodepool metadata can be defined only during the creation and they cannot be modified afterwards. To remediate you need to take either of the following steps: 1) Disable the organization policy ex. gcloud resource-manager org-policies disable-enforce "compute.disableSerialPortAccess" --organization=112233xx4455 2) Recreate all non-compliant clusters ex. gcloud container clusters create example-cluster \ --metadata serial-port-logging-enable=false 3) Recreate all non-compliant node pools ex. gcloud container node-pools create node-pool-1 \ --cluster=example-cluster --metadata serial-port-logging-enable=false ### Further information 1. https://cloud.google.com/resource-manager/docs/organization-policy/creating-managing-policies https://cloud.google.com/sdk/gcloud/reference/resource-manager/org-policies/disable-enforce 2. https://cloud.google.com/sdk/gcloud/reference/container/clusters/create#--metadata 3. https://cloud.google.com/sdk/gcloud/reference/container/node-pools/create#--metadata ================================================ FILE: website/content/en/rules/gke/SEC/2021_001.md ================================================ --- title: "gke/SEC/2021_001" linkTitle: "SEC/2021_001" weight: 1 type: docs description: > GKE nodes don't use the GCE default service account. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: SEC - Potential security issue ### Description The GCE default service account has more permissions than are required to run your Kubernetes Engine cluster. ### Remediation You should either use GKE Workload Identity or create and use a minimally privileged service account. ### Further information - [Hardening your cluster's security](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#use_least_privilege_sa) ================================================ FILE: website/content/en/rules/gke/SEC/2023_001.md ================================================ --- title: "gke/SEC/2023_001" linkTitle: "SEC/2023_001" weight: 1 type: docs description: > GKE Workload Identity is enabled --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: SEC - Potential security issue ### Description Workload Identity allows a Kubernetes service account in your GKE cluster to act as an IAM service account. Pods that use the configured Kubernetes service account automatically authenticate as the IAM service account when accessing [Google Cloud APIs](https://cloud.google.com/apis). Using Workload Identity allows you to assign distinct, fine-grained identities and authorization for each application in your cluster, along with protecting the node's metadata (GCE MD). Without Workload Identity, node's [Service Account](https://cloud.google.com/iam/docs/service-account-overview) is used by the pods/containers that has access to subset of GCP APIs. ### Remediation [Enable and configure Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) on your Google Kubernetes Engine (GKE) clusters. ### Further information - [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity) - [Enabling Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#workload_identity) - [Metadata concealment](https://cloud.google.com/kubernetes-engine/docs/how-to/protecting-cluster-metadata#concealment) ================================================ FILE: website/content/en/rules/gke/WARN/2021_001.md ================================================ --- title: "gke/WARN/2021_001" linkTitle: "WARN/2021_001" weight: 1 type: docs description: > GKE master version available for new clusters. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description The GKE master version should be a version that is available for new clusters. If a version is not available it could mean that it is deprecated, or possibly retired due to issues with it. ### Remediation Upgrade the GKE master to a supported version. ### Further information - [Standard cluster upgrades](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-upgrades) ================================================ FILE: website/content/en/rules/gke/WARN/2021_002.md ================================================ --- title: "gke/WARN/2021_002" linkTitle: "WARN/2021_002" weight: 1 type: docs description: > GKE nodes version available for new clusters. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description The GKE nodes version should be a version that is available for new clusters. If a version is not available it could mean that it is deprecated, or possibly retired due to issues with it. ### Remediation Upgrade the GKE nodes to a supported version. ### Further information - [Standard cluster upgrades](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-upgrades) ================================================ FILE: website/content/en/rules/gke/WARN/2021_003.md ================================================ --- title: "gke/WARN/2021_003" linkTitle: "WARN/2021_003" weight: 1 type: docs description: > GKE cluster size close to maximum allowed by pod range --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description The maximum amount of nodes in a GKE cluster is limited based on its pod CIDR range. This test checks if the cluster is above the threshold of 80% for pod CIDR utilization. ### Further information - [GKE IP address utilization insights](https://cloud.google.com/network-intelligence-center/docs/network-analyzer/insights/kubernetes-engine/gke-ip-utilization) - [Optimizing IP address allocation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) ================================================ FILE: website/content/en/rules/gke/WARN/2021_004.md ================================================ --- title: "gke/WARN/2021_004" linkTitle: "WARN/2021_004" weight: 1 type: docs description: > GKE system workloads are running stable. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description GKE includes some system workloads running in the user-managed nodes which are essential for the correct operation of the cluster. We verify that restart count of containers in one of the system namespaces (kube-system, istio-system, custom-metrics) stayed stable in the last 24 hours. ### Remediation You can use this Cloud Monitoring query to find what system workloads are restarting: ``` fetch k8s_container | metric 'kubernetes.io/container/restart_count' | filter (resource.namespace_name == 'kube-system' || resource.namespace_name == 'istio-system') | align delta(1h) | every 1h | group_by [resource.pod_name], .sum | filter val() > 0 ``` ### Further information - [Observing your GKE clusters](https://cloud.google.com/stackdriver/docs/solutions/gke/observing) ================================================ FILE: website/content/en/rules/gke/WARN/2021_005.md ================================================ --- title: "gke/WARN/2021_005" linkTitle: "WARN/2021_005" weight: 1 type: docs description: > GKE nodes have good disk performance. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Disk performance is essential for the proper operation of GKE nodes. If too much IO is done and the disk latency gets too high, system components can start to misbehave. Often the boot disk is a bottleneck because it is used for multiple things: the operating system, docker images, container filesystems (usually including /tmp, etc.), and EmptyDir volumes. ### Remediation You can use the following Cloud Monitoring query to determine the average disk latency for your GKE nodes: ``` fetch gce_instance | {{ metric 'compute.googleapis.com/guest/disk/operation_time' ; metric 'compute.googleapis.com/guest/disk/operation_count' }} | {within_str} | filter metric.device_name = 'sda' | group_by [resource.instance_id], .sum() | every 1m | ratio | value(val() > cast_units({SLO_LATENCY_MS}, "ms")) | group_by 1d, [ .count_true, .count ] ``` ### Further information - [Block storage performance](https://cloud.google.com/compute/docs/disks/performance) ================================================ FILE: website/content/en/rules/gke/WARN/2021_006.md ================================================ --- title: "gke/WARN/2021_006" linkTitle: "WARN/2021_006" weight: 1 type: docs description: > GKE nodes aren't reporting conntrack issues. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description The following string was found in the serial logs: `nf_conntrack: table full`. This indicates that the Linux Kernel connection tracking table is full. ### Remediation See the *GKE Troubleshooting* guide linked below. To find the matching log lines, use the following filter in Cloud Logging: ``` resource.type="gce_instance" log_id("serialconsole.googleapis.com/serial_port_1_output") textPayload:"nf_conntrack: table full" ``` ### Further information - [GKE Troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting) ================================================ FILE: website/content/en/rules/gke/WARN/2021_007.md ================================================ --- title: "gke/WARN/2021_007" linkTitle: "WARN/2021_007" weight: 1 type: docs description: > GKE nodes have enough free space on the boot disk. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description GKE nodes need free space on their boot disks to be able to function properly. If /var is getting full, it might be because logs are not being rotated correctly, or maybe a container is creating too much data in the overlayfs. ### Remediation You can use the following Cloud Monitoring query to determine the nodes with full disk: ``` fetch gce_instance | metric 'compute.googleapis.com/guest/disk/bytes_used' | filter metric.device_name == 'sda1' | {within_str} | next_older 5m | filter_ratio_by [resource.instance_id], metric.state == 'free' | every 5m ``` ### Further information ================================================ FILE: website/content/en/rules/gke/WARN/2021_008.md ================================================ --- title: "gke/WARN/2021_008" linkTitle: "WARN/2021_008" weight: 1 type: docs description: > Istio/ASM version not deprecated nor close to deprecation in GKE --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description At the end of 2021, those Istio/ASM versions of 1.10.2 and below reached end of life and not supported. It is recommended that you upgrade to ASM Managed Control Plane or Istio version 1.10.3+ to avoid outages. ### Remediation It is recommended that you upgrade to ASM Managed Control Plane or Istio version 1.10.3+ to avoid outages. ### Further information - [GitHub issue](https://github.com/istio/istio/issues/34665) - [Support status of Istio releases](https://istio.io/latest/docs/releases/supported-releases/#support-status-of-istio-releases) ================================================ FILE: website/content/en/rules/gke/WARN/2021_009.md ================================================ --- title: "gke/WARN/2021_009" linkTitle: "WARN/2021_009" weight: 1 type: docs description: > GKE nodes use a containerd image. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Node images with the Docker runtime are deprecated. ### Remediation Switch to the containerd image types. ### Further information - [GKE node images](https://cloud.google.com/kubernetes-engine/docs/concepts/node-images) - [Using containerd](https://cloud.google.com/kubernetes-engine/docs/concepts/using-containerd) ================================================ FILE: website/content/en/rules/gke/WARN/2022_001.md ================================================ --- title: "gke/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > GKE clusters with workload identity are regional. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Workload Identity is highly dependent of the availability of the cluster control plane during token fetches. It is recommended to use regional clusters for the production workload with Workload Identity enabled. ### Further information - [GKE Regional clusters](https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters) - [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) - [Hardening your cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#workload_identity) ================================================ FILE: website/content/en/rules/gke/WARN/2022_002.md ================================================ --- title: "gke/WARN/2022_002" linkTitle: "WARN/2022_002" weight: 1 type: docs description: > GKE metadata concealment is not in use --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Metadata concealment is scheduled to be deprecated and removed in the future. Workload Identity replaces the need to use metadata concealment and the two approaches are incompatible. It is recommended that you use Workload Identity instead of metadata concealment. ### Remediation Migrate your node pools with metadata concealment enabled to node pools with Workload Identity. ### Further information - [Metadata concealment](https://cloud.google.com/kubernetes-engine/docs/how-to/protecting-cluster-metadata#concealment) - [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) ================================================ FILE: website/content/en/rules/gke/WARN/2022_003.md ================================================ --- title: "gke/WARN/2022_003" linkTitle: "WARN/2022_003" weight: 1 type: docs description: > GKE service account permissions to manage project firewall rules. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Verify that the Google Kubernetes Engine service account has the Compute Network Admin role or custom role with [sufficient fine-grained permissions](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#providing_the_ingress_controller_permission_to_manage_host_project_firewall_rules) to manage firewall rules in the current or host project with Shared VPC. ### Remediation ### Further information - [GKE Ingress](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#ingress_for_external_and_internal_traffic) - [Shared VPC](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#shared_vpc) ================================================ FILE: website/content/en/rules/gke/WARN/2022_004.md ================================================ --- title: "gke/WARN/2022_004" linkTitle: "WARN/2022_004" weight: 1 type: docs description: > Cloud Logging API enabled when GKE logging is enabled --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description If Cloud Logging API is disabled, while GKE logging is enabled the Workload and Node logs won't be ingested, and thus, won't be visible in Logs Explorer. ### Remediation Cloud Logging API can be enabled in the Cloud Console, or by running the following command: ``` gcloud services enable logging.googleapis.com --project={project-id} ``` ### Further information ================================================ FILE: website/content/en/rules/gke/WARN/2022_005.md ================================================ --- title: "gke/WARN/2022_005" linkTitle: "WARN/2022_005" weight: 1 type: docs description: > NVIDIA GPU device drivers are installed on GKE nodes with GPU --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description After adding GPU nodes to the GKE cluster, the NVIDIA's device drivers should be installed in the nodes. Google provides a DaemonSet that will install for the drivers. This rule detects that if the `nvidia-driver-installer` DaemonSet is missing using the `kubernetes.io/container/uptime` metric. ### Remediation Installing NVIDIA GPU device drivers based on the node systems. Refer to the section in [Running GPUs](https://cloud.google.com/kubernetes-engine/docs/how-to/gpus#installing_drivers) for installation instructions for Container-Optimized OS (COS) and Ubuntu nodes. ### Further information [Running GPUs](https://cloud.google.com/kubernetes-engine/docs/how-to/gpus) ================================================ FILE: website/content/en/rules/gke/WARN/2022_006.md ================================================ --- title: "gke/WARN/2022_006" linkTitle: "WARN/2022_006" weight: 1 type: docs description: > GKE NAP nodes use a containerd image. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description GKE will stop supporting node images that use Docker as the runtime in GKE version 1.24 and later. ### Remediation Switch to the containerd image types. ### Further information - [GKE NAP node images](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#default-image-type) - [Using containerd](https://cloud.google.com/kubernetes-engine/docs/concepts/using-containerd) - [Migrating from Docker to containerd](https://cloud.google.com/kubernetes-engine/docs/deprecations/docker-containerd) ================================================ FILE: website/content/en/rules/gke/WARN/2022_007.md ================================================ --- title: "gke/WARN/2022_007" linkTitle: "WARN/2022_007" weight: 1 type: docs description: > GKE nodes need Storage API access scope to retrieve build artifacts --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description GKE nodes must have `storage.googleapis.com` API access scope to retrieve build artifacts. These artifacts can be binaries/configs for node bootstrapping process or images from private Container or Artifact Registry repositories. Nodes may report connection timeouts during node bootstrapping or `401 Unauthorized` if they cannot pull from a private repositories. ### Remediation The [best practice](https://cloud.google.com/compute/docs/access/service-accounts#scopes_best_practice) when it comes to access scopes is to set the `cloud-platform` access scope and then control the service account's access by granting it IAM roles. Alternatively, use the `gke-default` alias when creating node pools or clusters to provide all the [scopes required for GKE](https://cloud.google.com/sdk/gcloud/reference/container/clusters/create#--scopes) to run smoothly. ### Further information - [Cannot pull images from private container registry repository](https://cloud.google.com/kubernetes-engine/docs/troubleshooting#401_unauthorized_cannot_pull_images_from_private_container_registry_repository) - [Storage API Scopes](https://cloud.google.com/storage/docs/authentication#oauth-scopes) - [Access required for Artifact Registry](https://cloud.google.com/artifact-registry/docs/access-control#gcp) - [Access required for Container Registry](https://cloud.google.com/container-registry/docs/access-control#gce) ================================================ FILE: website/content/en/rules/gke/WARN/2022_008.md ================================================ --- title: "gke/WARN/2022_008" linkTitle: "WARN/2022_008" weight: 1 type: docs description: > GKE connectivity: possible dns timeout in some gke versions. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Some GKE versions (starting with 1.18.16-gke.300) have DNS timeout issues when intranode visibility is enabled and if the client Pod and kube-dns Pod are located on the same node. See: https://cloud.google.com/kubernetes-engine/docs/how-to/intranode-visibility#dns_timeouts ### Remediation ### Further information ================================================ FILE: website/content/en/rules/gke/WARN/2023_001.md ================================================ --- title: "gke/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > Container File System has the required scopes for Image Streaming --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Verify GKE nodes have the required scopes to use Image Streaming. ### Remediation You can use the following Cloud Logging filter to find matching log lines: ``` resource.type="k8s_node" log_id("gcfsd") jsonPayload.MESSAGE:"Request had insufficient authentication scopes" ``` To resolve this issue, add the `devstorage.read_only` scope to the cluster or node pool ### Further information See https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming#permissiondenied ================================================ FILE: website/content/en/rules/gke/WARN/2023_002.md ================================================ --- title: "gke/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > GKE workload timeout to Compute Engine metadata server. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description If the workload uses a Google Authentication library, the default timeout for requests to the Compute Engine Metadata server might be too aggressive. Failed requests may return something like 'DefaultCredentialsError'. ### Remediation Check if you are possibly using a Google Authentication library and the requests to the metadata server are timing out. If so, try increasing the default timeout. ### Further information For google-auth-library-python, it's possible to set the environment variable GCE_METADATA_TIMEOUT to increase the [default timeout](https://github.com/googleapis/google-auth-library-python/blob/3fcd31984a019e183debcb6a234821dae0b2af27/google/auth/compute_engine/_metadata.py#L58) of 3 seconds. Read more about [Workload Identity troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting/troubleshooting-security#workload-identity) ================================================ FILE: website/content/en/rules/gke/WARN/2023_003.md ================================================ --- title: "gke/WARN/2023_003" linkTitle: "WARN/2023_003" weight: 1 type: docs description: > Cloud Monitoring API enabled when GKE monitoring is enabled --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description If Cloud Monitoring API is disabled, while GKE monitoring is enabled the monitoring metrics won't be ingested, and thus, won't be visible in Cloud Monitoring. ### Remediation Cloud Monitoring API can be [enabled in the Cloud Console](https://cloud.google.com/monitoring/api/enable-api), or by running the following command: ``` gcloud services enable monitoring.googleapis.com --project={project-id} ``` ### Further information ================================================ FILE: website/content/en/rules/gke/WARN/2023_004.md ================================================ --- title: "gke/WARN/2023_004" linkTitle: "WARN/2023_004" weight: 1 type: docs description: > A Node Pool doesn't have too low `maxPodsPerNode` number --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Modern GKE clusters could run multiple system DaemonSets, and enabling a GKE feature could add another DaemonSet or two. 7+ DaemonSets is the norm for an average GKE cluster. Keeping a small reserve (1-2 slots) for non-DaemonSet pods requires close attention, as enabling a new GKE feature or adding a new DeamonSet could prevent normal workload scheduling as all the available slots could be occupied by system or custom DaemonSet pods. This could also cause the Cluster Autoscaler to misbehave: it could add new nodes and remove them promptly as empty ones, because no pods except DaemonSet ones can be scheduled on the nodes. Note that with new versions of GKE, some features could be enabled by default, bringing a DeamonSet along. Here is an incomplete list of system GKE DaemonSets that are added by a corresponding GKE-feature: | \# | DeamonSet name | GKE Feature | | --- | ------------------------- | ------------------------------------------------------------------------------------------ | | 1 | kube-proxy | non-DPv2 clusters | | 2 | konnectivity-agent | some GKE = 16 should be a safer option. ### Remediation Recreate the Node Pool with higher (>=16) `maxPodsPerNode`. Alternatively, you can create a new Node Pool and migrate your workloads to the new one. ### Further information - [Migrate your workloads to another Node Pool](https://cloud.google.com/kubernetes-engine/docs/tutorials/migrating-node-pool#step_4_migrate_the_workloads) ================================================ FILE: website/content/en/rules/gke/WARN/2024_001.md ================================================ --- title: "gke/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > GKE Node Auto Provisioning scales nodes to match workload demands. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description If a GKE cluster has Node Auto Provisioning (NAP) enabled, resource limits are configured to support workload scaling. Increased demand triggers successful node creation, ensuring application continuity. If NAP resource limits (CPU, memory) are configured too low, the autoscaler may be unable to add new nodes during high demand. This could potentially cause application disruptions. To prevent this, ensure NAP resource limits are set appropriately or consider manually scaling node pools as needed. ### Remediation Use the following search filter to identify the issue in Cloud Logging. - **Project:** Your Project Name (``) - **Cluster:** Your Cluster's Name (``) - **Filter:** ```lql resource.type="k8s_cluster" resource.labels.cluster_name="" logName="projects//logs/container.googleapis.com%2Fcluster-autoscaler-visibility" jsonPayload.noDecisionStatus.noScaleUp.unhandledPodGroups.napFailureReasons.messageId="no.scale.up.nap.pod.zonal.resources.exceeded" ``` To fix the issue, either increase your NAP resource limits or manually scale your node pools. Increase NAP resource limits: 1. Review your cluster's typical workload patterns to estimate the appropriate new resource limits for NAP. 2. Use the Google Cloud Console or gcloud commands to modify the NAP settings, ensuring the new limits provide sufficient headroom for your application's workload spikes. Manually scale your node pools: - If you cannot confidently increase NAP resource limits or need an immediate workaround, manually add nodes to the affected node pools. This is a temporary solution, and you should still investigate why the cluster needs additional nodes. ### Further information Read more about configuring Node Auto Provisioning in the [documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning). ================================================ FILE: website/content/en/rules/gke/WARN/2024_002.md ================================================ --- title: "gke/WARN/2024_002" linkTitle: "WARN/2024_002" weight: 1 type: docs description: > Number of KSAs in the workload Identity-enabled clusters. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description GKE metadata server pods may experience a crash loop scenario when the number of Kubernetes Service Accounts within the cluster surpasses three thousand. ### Remediation To restore functionality to the GKE metadata server, reduce the number of service accounts in your cluster to less than 3,000. ### Further information - [Metadata Server Crashes](https://cloud.google.com/kubernetes-engine/docs/troubleshooting/authentication#metadata-server-crashes) ================================================ FILE: website/content/en/rules/gke/WARN/2024_003.md ================================================ --- title: "gke/WARN/2024_003" linkTitle: "WARN/2024_003" weight: 1 type: docs description: > Ingress creation is successful if service is correctly mapped --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description If the service associated with an existing Ingress is inadvertently deleted, the Ingress is left in a "dangling" or orphaned state. This occurs because the Ingress relies on the presence of the mapped service to route incoming traffic effectively. Consequently, the Ingress becomes unable to fulfill its primary function of directing requests to the intended service. Error Seen in Cloud logging/UI: "Translation failed: invalid ingress spec:\ could not find service" ### Remediation To fix a dangling or ineffective Ingress in GKE, recreate the missing service, update the Ingress to point to the correct service. ### Further information ================================================ FILE: website/content/en/rules/gke/WARN/2024_004.md ================================================ --- title: "gke/WARN/2024_004" linkTitle: "WARN/2024_004" weight: 1 type: docs description: > Ingress creation is successful if Backendconfig crd is correctly mapped --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description Any custom settings defined in the BackendConfig (like timeouts, health checks, etc.) will no longer apply to the Ingress. Error Seen in Cloud logging/UI: "Translation failed: invalid ingress spec: error getting BackendConfig for port" ### Remediation If the BackendConfig linked to your GKE Ingress is deleted, you'll need to recreate it (either from a backup or by configuring it anew). Then, update your Ingress resource to reference this new BackendConfig. ### Further information ================================================ FILE: website/content/en/rules/gke/WARN/2024_005.md ================================================ --- title: "gke/WARN/2024_005" linkTitle: "WARN/2024_005" weight: 1 type: docs description: > GKE Ingress successfully routes external traffic to the service, accessible via a NodePort --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description For Ingress to work without container-native load balancing, the backend Service must be of type NodePort. Error Seen in Cloud logging/UI: Translation failed: invalid ingress spec: service "default/whereami" is type "ClusterIP", expected "NodePort" or "LoadBalancer" ### Remediation In the Service manifest, you must use type: NodePort unless you're using container native load balancing. If using container native load balancing, use the type: ClusterIP. ### Further information ================================================ FILE: website/content/en/rules/gke/WARN/2024_007.md ================================================ --- title: "gke/WARN/2024_007" linkTitle: "WARN/2024_007" weight: 1 type: docs description: > Google Kubernetes Engine (GKE) clusters with dual-stack networking and IPv6 enabled need internal IP address for Internal LB --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description When using a Google Kubernetes Engine (GKE) cluster with a dual-stack subnet configured for external IPv6 access, you won't be able to create or update an internal load balancer service. Internal load balancers require an internal IP address, typically obtained from the GKE subnet. External IPv6 access prevents internal IPallocation. When your subnet is set up for external IPv6 access, the system prioritizes external IPs, making it impossible to get an internal IPv6 address for the load balancer. This limitation applies to services with the annotation "networking.gke.io/load-balancer-type: "Internal" which specifically instructs GKE to create an internal load balancer. ### Remediation Create a separate subnet within your VPC specifically for internal resources and services. Configure this subnet with internal IPv6 access only. This ensures that internal IPv6 addresses are available for your internal load balancer. When creating your GKE cluster, specify this new subnet for your nodes and internal services. ### References [Load Balancer subnet](https://cloud.google.com/kubernetes-engine/docs/concepts/service-load-balancer-parameters#custom-subnet) [Configuring dual-stack clusters](https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips#dual-stack) ================================================ FILE: website/content/en/rules/gke/WARN/2025_001.md ================================================ --- title: "gke/WARN/2025_001" linkTitle: "WARN/2025_001" weight: 1 type: docs description: > GKE External LoadBalancer service fails with subnet configured with ipv6 internal access only --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Rule class**: WARN - Something that is possibly wrong ### Description GKE cluster in a dual-stack subnet with internal IPs allocated for internal load balancers and external IPs for external access. If you're using a Google Kubernetes Engine (GKE) cluster with a dual-stack subnet configured for internal IPv6 access, you won't be able to create or update an external load balancer service. External load balancers need an external IP address. This address is normally taken from the GKE subnet. Internal IPv6 access prevents external IP allocation. When your subnet is set up for internal IPv6 access, the system prioritizes internal IPs, making it impossible to get an external IPv6 address for the load balancer. This limitation applies to services without the annotation "networking.gke.io/load-balancer-type: "Internal" which specifically instructs GKE to create an external load balancer ### Remediation Create a separate subnet within your VPC specifically for external resources and services Configure this subnet with external IPv6 access only. This ensures that external IPv6 addresses are available for your external load balancer When creating your GKE cluster, specify this new subnet for your nodes and external services ### Further information ================================================ FILE: website/content/en/rules/gke/_index.md ================================================ --- title: "GKE" linkTitle: "gke" type: docs description: Google Kubernetes Engine --- ================================================ FILE: website/content/en/rules/iam/BP/2023_001.md ================================================ --- title: "iam/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > Policy constraint 'AutomaticIamGrantsForDefaultServiceAccounts' is enforced --- **Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Policy constraint [AutomaticIamGrantsForDefaultServiceAccounts](https://cloud.google.com/iam/docs/best-practices-service-accounts#automatic-role-grants) is strongly recommended to be enforced in production projects according to security best practices. According to security best practices, admins should limit as much as possible the permission set of all users and service accounts of a project. This policy Constraint will prevent the automatic 'editor' role grant to default service accounts [zero trust approach](https://cloud.google.com/blog/topics/developers-practitioners/what-zero-trust-identity-security) ### Remediation To improve security, we strongly recommend that you [disable the automatic role grant](https://cloud.google.com/resource-manager/docs/organization-policy/restricting-service-accounts#disable_service_account_default_grants). Use the iam.automaticIamGrantsForDefaultServiceAccounts boolean constraint to disable the automatic role grant. [Turn on the policy constraint enforcement using gcloud SDK](https://cloud.google.com/sdk/gcloud/reference/resource-manager/org-policies/enable-enforce) ### Further information Can read more at- https://cloud.google.com/resource-manager/docs/organization-policy/restricting-service-accounts#disable_service_account_default_grants ================================================ FILE: website/content/en/rules/iam/SEC/2021_001.md ================================================ --- title: "iam/SEC/2021_001" linkTitle: "SEC/2021_001" weight: 1 type: docs description: > No service accounts have the Owner role --- **Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\ **Rule class**: SEC - Potential security issue ### Description A service account should not have a role that could potentially increase the security risk to the project to malicious activity ### Remediation Restrict the permissions of all service accounts in your project to the minimum required permissions. ### Further information - [Best Practices for Securing Service Accounts](https://cloud.google.com/iam/docs/best-practices-for-securing-service-accounts) ================================================ FILE: website/content/en/rules/iam/SEC/2024_001.md ================================================ --- title: "iam/SEC/2024_001" linkTitle: "SEC/2024_001" weight: 1 type: docs description: > No Unused Service Accounts Found --- **Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\ **Rule class**: SEC - Potential security issue ### Description Unused service accounts create an unnecessary security risk, so we recommend disabling unused service accounts then deleting the service accounts when you are sure that you no longer need them ### Remediation [Service accounts overview](https://cloud.google.com/iam/docs/service-account-overview) ### Further information [View usage metrics for all service accounts](https://cloud.google.com/iam/docs/service-account-monitoring#view-metrics-all) ================================================ FILE: website/content/en/rules/iam/_index.md ================================================ --- title: "IAM" linkTitle: "iam" type: docs description: Identity and Access Management (IAM) --- ================================================ FILE: website/content/en/rules/interconnect/BP/2023_001.md ================================================ --- title: "interconnect/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > VLAN attachments deployed in same metro are in different EADs (Edge Availability Domains). --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description To establish 99.99% high availability for interconnects, the following conditions are required: - Two metros are required, each metro has two attachments; - Attachments in same metro are in different EADs; - Two regions are required with four cloud router TASKS evenly distributed; - Global routing must be enabled on those cloud routers. ### Remediation Ensure there are vlan attachments from same metro in different EADs, and ensure the following conditions: - Two metros are required, each metro has two attachments; - Attachments in same metro are in different EADs; - Two regions are required with four cloud router TASKS evenly distributed; - Global routing must be enabled on those cloud routers. ### Further information - [Interconnect REST resource reference](https://cloud.google.com/compute/docs/reference/rest/v1/interconnects) - [VLAN Attachment REST resource reference](https://cloud.google.com/compute/docs/reference/rest/v1/interconnectAttachments) ================================================ FILE: website/content/en/rules/interconnect/WARN/2023_001.md ================================================ --- title: "interconnect/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > VLAN attachment is using Dataplane V1. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Rule class**: WARN - Something that is possibly wrong ### Description Dataplane V1 doesn't support certain feature such as BFD, consider upgrading to Dataplane V2. For more information: https://cloud.google.com/network-connectivity/docs/interconnect/concepts/terminology#dataplaneVersion ### Remediation ### Further information ================================================ FILE: website/content/en/rules/interconnect/WARN/2023_002.md ================================================ --- title: "interconnect/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > VLAN attachment is in a non-functional state. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Rule class**: WARN - Something that is possibly wrong ### Description This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted.. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/interconnect/WARN/2023_003.md ================================================ --- title: "interconnect/WARN/2023_003" linkTitle: "WARN/2023_003" weight: 1 type: docs description: > The interconnect link is undergoing a maintenance window. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Rule class**: WARN - Something that is possibly wrong ### Description Please check the email sent to the technical contacts for further details about the maintenance.. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/interconnect/WARN/2025_001.md ================================================ --- title: "interconnect/WARN/2025_001" linkTitle: "WARN/2025_001" weight: 1 type: docs description: > VLAN attachment MTU matches VPC MTU --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Rule class**: WARN - Something that is possibly wrong ### Description This rule verifies that the Maximum Transmission Unit (MTU) of your VLAN attachment matches the MTU of your VPC network. Consistent MTU settings across your VPC network, VLAN attachments, and on-premises networks prevent packet fragmentation or drops, ensuring optimal network performance. Mismatched MTUs can lead to performance issues like increased latency or packet loss, as packets exceeding the smaller MTU will be dropped or fragmented. For details on how mismatched MTUs are handled and best practices, see Google's pages about [Mismatched MTUs](https://cloud.google.com/vpc/docs/mtu#mss-clamping-and-pmtud) and [MTU best practices](https://cloud.google.com/network-connectivity/docs/interconnect/concepts/best-practices#mtu-for-vlan-attachments). ### Remediation There are two main ways to ensure MTU consistency between a VPC network and VLAN attachments in Google Cloud: 1. **Change the MTU of the VLAN attachment.**: You can adjust the Maximum Transmission Unit (MTU) setting of your Virtual Private Cloud (VPC) network to match the MTU of your VLAN attachments. This can be done by using following commands: For each zone in the network, stop all VMs in that zone. ``` gcloud compute instances stop \ --zone= ``` Update network MTU. ``` gcloud compute networks update \ --mtu= ``` For each zone in the network, start all VMs in that zone. ``` gcloud compute instances start \ --zone= ``` 2. **Change the MTU of the VPC network.** : Alternatively, you can configure the MTU of your VLAN attachments to align with the MTU of your VPC network. This can be done by using this command: ``` gcloud compute interconnects attachments dedicated update \ --region= \ --description= \ --bandwidth= \ --mtu= ``` ### Further information Please reference the following documents for MTU update command details. - [Change VPC network MTU reference](https://cloud.google.com/vpc/docs/change-mtu-vpc-network) - [Change VLAN attachment MTU reference](https://cloud.google.com/network-connectivity/docs/interconnect/how-to/dedicated/modifying-vlan-attachments#modify-description-capacity-mtu) ================================================ FILE: website/content/en/rules/interconnect/_index.md ================================================ --- title: "Interconnect" linkTitle: "interconnect" type: docs description: Interconnect --- ================================================ FILE: website/content/en/rules/lb/BP/2022_001.md ================================================ --- title: "lb/BP/2022_001" linkTitle: "BP/2022_001" weight: 1 type: docs description: > LocalityLbPolicy compatible with sessionAffinity. --- **Product**: [Backend services](https://cloud.google.com/load-balancing/docs/backend-service)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description If sessionAffinity is not NONE, and localityLbPolicy field is not set to MAGLEV or RING_HASH, session affinity settings will not take effect. ### Remediation Set localityLbPolicy to MAGLEV or RING_HASH if sessionAffinity is enabled. ### Further information - [Backend services REST resource reference](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) ================================================ FILE: website/content/en/rules/lb/BP/2023_001.md ================================================ --- title: "lb/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > Cloud CDN is enabled on backend services for Global External HTTP(S) load balancers --- **Product**: [Backend services](https://cloud.google.com/load-balancing/docs/backend-service)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description It is recommended to turn on Cloud CDN and caching as part of your default, global external HTTP(S) load balancer configuration for improved performance. ### Remediation Turn on Cloud CDN and caching as part of your default, global external HTTP(S) load balancer configuration - [Enabling caching](https://cloud.google.com/cdn/docs/using-cache-modes#cache-mode) ### Further information - [HTTP(S) Load Balancing Performance Best Practices](https://cloud.google.com/load-balancing/docs/https/http-load-balancing-best-practices#enable_caching_with) ================================================ FILE: website/content/en/rules/lb/BP/2023_002.md ================================================ --- title: "lb/BP/2023_002" linkTitle: "BP/2023_002" weight: 1 type: docs description: > Health check logging is enabled on health checks for load balancer backend services --- **Product**: [Health checks](https://cloud.google.com/load-balancing/docs/health-check-concepts) **Rule class**: BP - Best practice, opinionated recommendation ### Description It is recommended to enable logging on health checks associated with load balancer backend services, for easier debugging of health check failures. ### Remediation Turn on health check logging as part of your default health check configuration - [Enabling logging](https://cloud.google.com/load-balancing/docs/health-check-logging) ### Further information - [Enable and disable health check logging](https://cloud.google.com/load-balancing/docs/ health-check-logging#enable_and_disable_logging) ================================================ FILE: website/content/en/rules/lb/BP/2024_001.md ================================================ --- title: "lb/BP/2024_001" linkTitle: "BP/2024_001" weight: 1 type: docs description: > Session Affinity configured on backend services for Global External Application load balancers --- **Product**: [Backend services](https://cloud.google.com/load-balancing/docs/backend-service)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description In some cases, it might be beneficial for the same backend to handle requests that are from the same end users, or related to the same end user, at least for a short period of time. This can be configured by using session affinity, a setting configured on the backend service. ### Remediation Depending on your application, you can use different backend services with different session affinity settings. For example, if a part of your application is serving static content to many users, it is unlikely to benefit from session affinity.You would use a Cloud CDN-enabled backend service to serve cached responses instead. - [Configuring session affinity](https://cloud.google.com/load-balancing/docs/backend-service#session_affinity) ### Further information - [Application Load Balancing Performance Best Practices](https://cloud.google.com/load-balancing/docs/https/http-load-balancing-best-practices#configure_session_affinity) ================================================ FILE: website/content/en/rules/lb/BP/2024_002.md ================================================ --- title: "lb/BP/2024_002" linkTitle: "BP/2024_002" weight: 1 type: docs description: > Global Access enabled on Regional Internal Load Balancer --- **Product**: [Load Balancing](https://cloud.google.com/load-balancing)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description When global access is not on, resources/clients in other location might not be able to visit the Internal Load Balancer(iLB). It's recommended to enable the global access in regional iLB. ### Remediation By default global access is not enabled in regional iLB. You have to [enable global access](https://cloud.google.com/load-balancing/docs/l7-internal/setting-up-l7-internal#global-access) to allow clients from any region to access your load balancer. Backends must also be in the same region as the load balancer. ### Further information - [Forwarding rules](https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts) - [Internal Application Load Balancer](https://cloud.google.com/load-balancing/docs/l7-internal) - [Internal Proxy Network Load Balancer](https://cloud.google.com/load-balancing/docs/tcp/internal-proxy) - [Internal Passthrough Network Load Balancer](https://cloud.google.com/load-balancing/docs/internal) ================================================ FILE: website/content/en/rules/lb/BP/2025_001.md ================================================ --- title: "lb/BP/2025_001" linkTitle: "BP/2025_001" weight: 1 type: docs description: > Backend Protocol selection for Global External Application Load Balancers --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Your choice of backend protocol (HTTP, HTTPS, or HTTP/2) impacts application latency and the network bandwidth available for your application. For example, using HTTP/2 between the load balancer and the backend instance can require significantly more TCP connections to the instance than HTTP(S). Connection pooling, an optimization that reduces the number of these connections with HTTP(S), is not available with HTTP/2. As a result, you might see high backend latencies because backend connections are made more frequently. ### Remediation For typical web applications and APIs, HTTP or HTTPS generally offer better performance due to connection pooling, which reduces the overhead of establishing new TCP connections for each request. This is especially true if your application experiences many small, frequent requests. ### Further information Please refer https://cloud.google.com/load-balancing/docs/https/http-load-balancing-best-practices#backend_service_protocol_selection for more information related to backend service protocol selection. ================================================ FILE: website/content/en/rules/lb/BP/2025_002.md ================================================ --- title: "lb/BP/2025_002" linkTitle: "BP/2025_002" weight: 1 type: docs description: > Backend Service Timeout for Global External Application Load Balancers --- **Product**: [Load Balancing](https://cloud.google.com/load-balancing)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description The default timeout is 30 seconds for external application load balancers and we don't recommend backend service timeout values greater than 24 hours (86,400 seconds) because Google Cloud periodically restarts GFEs for software updates and other routine maintenance. The longer the backend service timeout value, the more likely it is that Google Cloud terminates TCP connections for maintenance. ### Remediation Implement Retry Logic in Client Systems for Long Running Connections: Ensure client systems can handle retries if the TCP connection cannot remain open for long periods. ### Further information Please refer https://cloud.google.com/load-balancing/docs/https#timeout-bes for more information related to backend service timeout. ================================================ FILE: website/content/en/rules/lb/BP/2025_003.md ================================================ --- title: "lb/BP/2025_002" linkTitle: "BP/2025_002" weight: 1 type: docs description: > LB: Reports the backend services that does not has connection draining configured. --- **Product**: [Load Balancing](https://cloud.google.com/load-balancing)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Connection draining is a process that ensures that existing, in-progress requests are given time to complete when a virtual machine (VM) instance is removed from an instance group or when an endpoint is removed from network endpoint groups (NEGs). Performance best practices recommend configuring connection draining timeout to allow existing requests to complete when instances are removed from a backend service. ### Remediation Set connection draining timeout on an existing backend service. ## Further information - [Enable Connection Draining](https://cloud.google.com/load-balancing/docs/enabling-connection-draining) ================================================ FILE: website/content/en/rules/lb/_index.md ================================================ --- title: "LB" linkTitle: "lb" type: docs description: Load balancing (LB) --- ================================================ FILE: website/content/en/rules/looker/BP/2025_001.md ================================================ --- title: "looker/BP/2025_001" linkTitle: "BP/2025_001" weight: 1 type: docs description: > List all Looker instances --- **Product**: [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/looker-core-overview)\ **Rule class**: BP - Best practice, to retrieve about instances. ### Description This rule lists all Looker core instances found in a given GCP Project. ### Remediation If the result for a project is "No instances found," it indicates that no Looker core instances were detected in that project. No action is required if this is the expected state. ### Further information - [Create Looker core Public IP instance](https://cloud.google.com/looker/docs/looker-core-instance-create) [Create Looker core Private IP instance](https://cloud.google.com/looker/docs/looker-core-create-private-ip) [Looker Core Edition](https://cloud.google.com/looker/docs/looker-core-overview#editions) ================================================ FILE: website/content/en/rules/looker/BP/2025_002.md ================================================ --- title: "looker/BP/2025_002" linkTitle: "BP/2025_002" weight: 1 type: docs description: > Listing number of Expensive BigQuery Jobs in Looker Studio --- **Product**: [Looker](https://cloud.google.com/looker)\ **Rule class**: BP - Best practice, Expensive BigQuery Jobs in Looker Studio ### Description Verifies that there are no high-cost (>1GB) BigQuery jobs originating from Looker Studio. ### Remediation Inefficient data filtering in queries, overly large tables, and extensive user exploration in Looker Studio are causing excessive BigQuery scans and queries. ### Further information - [Please follow the best practices for optimizing BigQuery costs, covering query optimization, data storage, and cost management tools](https://cloud.google.com/bigquery/docs/best-practices-costs) - [Visualize your costs with Looker Studio ](https://cloud.google.com/billing/docs/how-to/visualize-data) ================================================ FILE: website/content/en/rules/looker/BP/2025_003.md ================================================ --- title: "looker/BP/2025_003" linkTitle: "BP/2025_003" weight: 1 type: docs description: > List all Looker instances operations --- **Product**: [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/looker-core-overview)\ **Rule class**: BP - Best practice, to retrieve operations performed on Looker instances. ### Description All Looker (Google Cloud core) instance operations are inventoried. ### Remediation If the result for a project is "No operations found," it indicates that no operations have been performed on any Looker (Google Cloud core) instance in that project. No action is required if this is the expected state. ### Further information [Looker core Operations Overview](https://cloud.google.com/looker/docs/reference/rest/v1/projects.locations.operations) ================================================ FILE: website/content/en/rules/looker/_index.md ================================================ --- title: "Looker" linkTitle: "looker" type: docs description: Looker --- ================================================ FILE: website/content/en/rules/notebooks/BP/2023_001.md ================================================ --- title: "notebooks/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > Vertex AI Workbench instance enables system health report --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description User-managed notebooks instances can report the system health of the core services like Docker service, Docker reverse proxy agent, Jupyter service and Jupyter API. ### Remediation To use system health guest attributes to report on your user-managed notebooks instance's health, you must select the **Enable system health report** checkbox when you create a user-managed notebooks instance. You can enable the system health report by using either the Google Cloud console or the Google Cloud CLI. ### Further information - [Monitor health status](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/monitor-health) ================================================ FILE: website/content/en/rules/notebooks/BP/2023_002.md ================================================ --- title: "notebooks/BP/2023_002" linkTitle: "BP/2023_002" weight: 1 type: docs description: > Vertex AI Workbench user-managed notebook instances are up to date --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description You might want to upgrade the environment of your user-managed notebooks instance for any of the following reasons: - To use new capabilities that are only available in a newer version of your environment. - To benefit from framework updates, package updates, and bug fixes that have been implemented in a newer version of your environment. ### Remediation There are two ways to upgrade a user-managed notebooks instance: - **Automatic upgrade**: Enable auto upgrade when you create a user-managed notebooks instance. During a recurring time period that you specify, Vertex AI Workbench checks whether your instance can be upgraded, and if so, Vertex AI Workbench upgrades your instance. - **Manual upgrade**: If an existing user-managed notebooks instance meets the requirements for upgrading, you can upgrade the instance manually. ### Further information - [Upgrade the environment of a user-managed notebook instance](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/upgrade) ================================================ FILE: website/content/en/rules/notebooks/BP/2023_003.md ================================================ --- title: "notebooks/BP/2023_003" linkTitle: "BP/2023_003" weight: 1 type: docs description: > Vertex AI Workbench runtimes for managed notebooks are up to date --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description Maintaining runtimes up to date is generally beneficial thanks to new capabilities, framework updates, package updates, and bug fixes that have been implemented in newer versions of your environment. ### Remediation You can manually upgrade a managed notebooks instance in the Google Cloud console. Go to the Managed notebooks page and click the `Upgrade all` button if you want to upgrade all upgradeable instances. Otherwise, select the managed notebooks instance that you want to upgrade. ### Further information - [Upgrade the environment of a managed notebooks instance](https://cloud.google.com/vertex-ai/docs/workbench/managed/upgrade) ================================================ FILE: website/content/en/rules/notebooks/BP/2023_004.md ================================================ --- title: "notebooks/BP/2023_004" linkTitle: "BP/2023_004" weight: 1 type: docs description: > Vertex AI Workbench runtimes for managed notebooks enable idle shutdown --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description To help manage costs, you can set your managed notebooks instance to shut down after being idle for a specific time period. You can change the amount of time. ### Remediation Go to the `SOFTWARE AND SECURITY` tab and mark the `Enable Idle Shutdown` checkbox. ### Further information - [Idle shutdown](https://cloud.google.com/vertex-ai/docs/workbench/managed/idle-shutdown) ================================================ FILE: website/content/en/rules/notebooks/ERR/2023_001.md ================================================ --- title: "notebooks/ERR/2023_001" linkTitle: "ERR/2023_001" weight: 1 type: docs description: > Vertex AI Workbench user-managed notebook instances should be in healthy state --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: ERR - Something that is wrong ### Description The health state for a Vertex AI Workbench user-managed notebook instance should be "HEALTHY" to be correctly used ### Remediation [Monitoring health status of user-managed notebooks instances](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#monitoring_health_status_of_instances) and what to do in case of failures ### Further information - [Vertex AI Workbench user-managed notebooks](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/introduction) - [Monitor the health state of a user-managed notebook instance](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/monitor-health) ================================================ FILE: website/content/en/rules/notebooks/ERR/2023_002.md ================================================ --- title: "notebooks/ERR/2023_002" linkTitle: "ERR/2023_002" weight: 1 type: docs description: > Vertex AI Workbench account has compute.subnetworks permissions to create notebook in VPC --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: ERR - Something that is wrong ### Description Creating notebook inside VPC requires user and service-*@gcp-sa-notebooks.iam.gserviceaccount.com to have compute.subnetworks.use and compute.subnetworks.useExternalIp permissions in VPC project ### Remediation 1. Add [“AI Platform Notebooks Service Agent” Role](https://cloud.google.com/iam/docs/understanding-roles?&_ga=2.228497117.-137841820.1685712188#notebooks.serviceAgent) to the Google-provided service account in the format of "service-%number%@gcp-sa-notebooks.iam.gserviceaccount.com" in the project which hosts the notebooks 2. Add [“Compute Network User” Role](https://cloud.google.com/iam/docs/understanding-roles?&_ga=2.228497117.-137841820.1685712188#compute.networkUser) to the account or Google-provided service account in the format of "service-%number%@gcp-sa-notebooks.iam.gserviceaccount.com" in the project which hosts the VPC 3. It is also possible to only add compute.subnetworks.use and compute.subnetworks.useExternalIp permissions to the Google-provided service account in the format of "service-%number%@gcp-sa-notebooks.iam.gserviceaccount.com" in the project which hosts the VPC ### Further information - [Creating user-managed notebooks instances - Troubleshooting](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#creating_instances) ================================================ FILE: website/content/en/rules/notebooks/ERR/2023_003.md ================================================ --- title: "notebooks/ERR/2023_003" linkTitle: "ERR/2023_003" weight: 1 type: docs description: > Vertex AI Workbench account has required permissions to create and use notebooks --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: ERR - Something that is wrong ### Description Creating and using a notebook requires service-*@gcp-sa-notebooks.iam.gserviceaccount.com to have "AI Platform Notebooks Service Agent" role and for user to have "Service Account User" role ### Remediation 1. Add [“AI Platform Notebooks Service Agent” Role](https://cloud.google.com/iam/docs/understanding-roles?&_ga=2.228497117.-137841820.1685712188#notebooks.serviceAgent) to the Google-provided service account in the format of "service-%number%@gcp-sa-notebooks.iam.gserviceaccount.com" 2. Add [“Service Account User” Role](https://cloud.google.com/iam/docs/service-account-permissions#user-role) to the user account creating, owning or using the notebook. ### Further information - [Creating user-managed notebooks instances - Troubleshooting](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#creating_instances) ================================================ FILE: website/content/en/rules/notebooks/ERR/2023_004.md ================================================ --- title: "notebooks/ERR/2023_004" linkTitle: "ERR/2023_004" weight: 1 type: docs description: > Vertex AI Workbench runtimes for managed notebooks are healthy --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: ERR - Something that is wrong ### Description The health state for a Vertex AI runtime for a managed notebook should be "HEALTHY" to be correctly used ### Remediation - [Troubleshooting Vertex AI Workbench managed notebooks](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#managed-notebooks) - Restart the managed notebook - [Upgrade the managed notebook](https://cloud.google.com/vertex-ai/docs/workbench/managed/upgrade) - [Migrate data to a new managed notebook](https://cloud.google.com/vertex-ai/docs/workbench/managed/migrate) ### Further information - [Vertex AI Workbench runtimes for managed notebook health state](https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v1/projects.locations.runtimes#healthstate) - [Run diagnostics command to get more information](https://cloud.google.com/sdk/gcloud/reference/notebooks/runtimes/diagnose) ================================================ FILE: website/content/en/rules/notebooks/ERR/2024_001.md ================================================ --- title: "notebooks/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > Vertex AI Workbench Notebooks Executor code uses explicit project selection --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: ERR - Something that is wrong ### Description Running a notebook code execution requires user to explicitly set client libraries with the user's project to avoid 40X errors with the executor project ### Remediation - [Troubleshooting Vertex AI Workbench managed notebooks](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#401-error-executor-managed) - Use explicit project selection when initializing Google Cloud client libraries ### Further information - [Vertex AI Workbench Executor - Use explicit project selection](https://cloud.google.com/vertex-ai/docs/workbench/managed/executor#explicit-project-selection) ================================================ FILE: website/content/en/rules/notebooks/WARN/2023_001.md ================================================ --- title: "notebooks/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > Vertex AI Workbench instance is not being OOMKilled --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: WARN - Something that is possibly wrong ### Description High memory utilization more than 85% in the user-managed notebooks instance could be a cause of 524 (A Timeout Occurred) errors while opening Jupyterlab. ### Remediation Verify memory utilization in the user-managed notebooks instance. 1. [Connect to your Deep Learning VM instance using SSH](https://cloud.google.com/compute/docs/instances/connecting-to-instance). 2. Run the `free -t -h` command. If the **used** memory is above 85% of the **total**, you should consider [changing the machine type](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-hardware-accelerators). 3. You can [install Cloud Monitoring agent](https://cloud.google.com/monitoring/agent/monitoring/installation#joint-install) to monitor if there is high memory usage in your user-managed notebooks instance. See [pricing information](https://cloud.google.com/stackdriver/pricing#monitoring-costs). ### Further information - [Opening a notebook results in a 524 error](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#timeout-524-error-user-managed) ================================================ FILE: website/content/en/rules/notebooks/WARN/2023_002.md ================================================ --- title: "notebooks/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > Vertex AI Workbench instance is in healthy data disk space status --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: WARN - Something that is possibly wrong ### Description The data disk space status is unhealthy if the disk space is greater than 85% full. ### Remediation If your data disk space status is unhealthy, try the following: - From a terminal session in the user-managed notebooks instance or [using ssh to connect](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#ssh-connect), check the amount of free disk space using the command `df -h -T /home/jupyter`. - Delete large files to increase the available disk space. Use the command `find . -type d -size +100M` to help you find large files. - If the previous steps don't solve your problem, [get support](https://cloud.google.com/vertex-ai/docs/support/getting-support). ### Further information - [Monitoring health status of user-managed notebooks instances](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#data_disk_utilization_percent) ================================================ FILE: website/content/en/rules/notebooks/WARN/2023_003.md ================================================ --- title: "notebooks/WARN/2023_003" linkTitle: "WARN/2023_003" weight: 1 type: docs description: > Vertex AI Workbench instance is in healthy boot disk space status --- **Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\ **Rule class**: WARN - Something that is possibly wrong ### Description The boot disk space status is unhealthy if the disk space is greater than 85% full. ### Remediation If your boot disk space status is unhealthy, try the following: - From a terminal session in the user-managed notebooks instance or using ssh to connect, check the amount of free disk space using the command `df -H`. - Use the command `find . -type d -size +100M` to help you find large files that you might be able to delete, but don't delete them unless you are sure you can safely do so. If you aren't sure, you can [get help from support](https://cloud.google.com/vertex-ai/docs/support/getting-support). - If the previous steps don't solve your problem, [get support](https://cloud.google.com/vertex-ai/docs/support/getting-support). ### Further information - [Monitoring health status of user-managed notebooks instances](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#boot_disk_utilization_percent) ================================================ FILE: website/content/en/rules/notebooks/_index.md ================================================ --- title: "NOTEBOOKS" linkTitle: "notebooks" type: docs description: > Vertex AI Workbench user-managed notebook instances should be in healthy state --- ================================================ FILE: website/content/en/rules/pubsub/BP/2024_001.md ================================================ --- title: "pubsub/BP/2024_001" linkTitle: "BP/2024_001" weight: 1 type: docs description: > Oldest Unacked Message Age Value less than 24 hours. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: BP - Best practice, opinionated recommendations ### Description Increasing Oldest Unacked Message Age indicates presence of a message on the subscription that has not been processed yet; either undelivered, being nacked by the subscriber or overall being acked in an untimely manner from the subscriber causing expiring acks. ### Remediation Configure subscribers to [pull](https://cloud.google.com/pubsub/docs/pull) from the subscription and ensure messages are successfully processed and acked. Alternatively ensure push endpoints or destinations work correctly to receive and ack messages. ### Further information [Pub/Sub Storage Pricing](https://cloud.google.com/pubsub/pricing#storage_costs) [Pub/Sub Delivery Latency Health](https://cloud.google.com/pubsub/docs/monitoring#delivery_latency_health) ================================================ FILE: website/content/en/rules/pubsub/ERR/2024_001.md ================================================ --- title: "pubsub/ERR/2024_001" linkTitle: "ERR/2024_001" weight: 1 type: docs description: > Pub/Sub Bigquery Subscription Created using Exist BigQuery table. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: ERR - Something that is possibly wrong ### Description Unable to Create the BigQuery Subscription using BigQuery table does not already exist, Check If the table you are trying to use for Bigquery Subscription creation is already existed in the BigQuery or not. ### Remediation The BigQuery table does not already exist, which is required for setting up a BigQuery subscription. so please create the BigQuery table before using it. ### Further information Please find below for more information about the table creation. [BigQuery Table Creation](https://cloud.google.com/bigquery/docs/tables#console) ================================================ FILE: website/content/en/rules/pubsub/ERR/2024_002.md ================================================ --- title: "pubsub/ERR/2024_002" linkTitle: "ERR/2024_002" weight: 1 type: docs description: > Creating Pub/Sub Push didn't fail because of organization policy. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: ERR - Something that is possibly wrong ### Description Creating New Pub/Sub Push Subscription in VPC-SC enabled project is not allowed. Unable to create new Push Subscription if the project is VPC-SC enabled. The following filter can be used to find the log lines that are matched by the rule: ``` resource.type='pubsub_subscription' log_name="cloudaudit.googleapis.com/activity" severity=ERROR protoPayload.methodName="google.pubsub.v1.Subscriber.CreateSubscription" protoPayload.status.message="Request is prohibited by organization's policy" ``` ### Remediation The workaround is to remove VPC-SC temporarily and create the new Push subscription and then reapply VPC-SC again. ### Further information Please find below for more information about this limitation. [Pub/Sub New Push Subscription](https://cloud.google.com/vpc-service-controls/docs/supported-products#table_pubsub) ================================================ FILE: website/content/en/rules/pubsub/ERR/2024_003.md ================================================ --- title: "pubsub/ERR/2024_003" linkTitle: "ERR/2024_003" weight: 1 type: docs description: > Pub/Sub Snapshot creation fails if subscription backlog is too old. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: ERR - Something that is possibly wrong ### Description Pub/Sub Snapshot creation fails if subscription backlog is too old. Unable to create snapshot if the subscription backlog is too old and message of 'subscription's backlog is too old' is displayed on the cloud console. ### Remediation Create the snapshot well before its maximum expiry time of 7days. The exact lifetime of snapshot is 7 days - (age of oldest unacked message in the subscription). ### Further information Please find below for more information about the snapshot creation. [Pub/Sub Snapshot Creation](https://cloud.google.com/pubsub/docs/reference/rest/v1/Snapshot) ================================================ FILE: website/content/en/rules/pubsub/ERR/2025_001.md ================================================ --- title: "pubsub/ERR/2025_001" linkTitle: "ERR/2025_001" weight: 1 type: docs description: > Pub/Sub push subscription service agent has the Service Account Token Creator Role. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/) **Rule class**: ERR - Something that is very likely to be wrong ### Description The Pub/Sub service agent (`service-{project-number}@gcp-sa-pubsub.iam.gserviceaccount.com`) must be granted the Service Account Token Creator Role (`roles/iam.serviceAccountTokenCreator`) on the service account used by a push subscription with authentication enabled. Without this role, Pub/Sub cannot generate tokens to authenticate to the push endpoint, leading to message delivery failures. ### Remediation To fix this issue, grant the `Service Account Token Creator` role to the Pub/Sub service agent for the service account used in the push subscription. Execute the following `gcloud` command: ```bash gcloud iam service-accounts add-iam-policy-binding "SERVICE_ACCOUNT_EMAIL" \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator" ``` Replace the following: - `SERVICE_ACCOUNT_EMAIL`: The email address of the service account used in your push subscription. - `PROJECT_NUMBER`: Your Google Cloud project number. ### Further information For more information, see the official documentation on [push authentication](https://cloud.google.com/pubsub/docs/create-push-subscription#authentication). ================================================ FILE: website/content/en/rules/pubsub/WARN/2023_001.md ================================================ --- title: "pubsub/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > Project should not have a detached subscription. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description A detached subscription is one whose reading privilege from the topic has been revoked; it's retained messages are also deleted. To free up the quota, it should be deleted. ### Remediation Detached subscriptions can be effectively deleted on console, using the gcloud command `gcloud pubsub subscriptions delete SUBSCRIPTION_ID` or using REST APIs - [doc](https://cloud.google.com/pubsub/docs/delete-subscriptions). The deleting user account needs to have the `roles/pubsub.editor` IAM role or a role with similar permissions. ### Further information [Detached subscriptions](https://cloud.google.com/pubsub/docs/detach-subscriptions) ================================================ FILE: website/content/en/rules/pubsub/WARN/2023_002.md ================================================ --- title: "pubsub/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > BigQuery subscription should have a dead-letter topic attached. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description A BigQuery subscription could be configured to forward undeliverable/failed messages to a special dead-letter topic for further analysis/handling. ### Remediation When a Pub/Sub message cannot be written to BigQuery, the message cannot be acknowledged. To forward such undeliverable messages, [configure a dead-letter topic](https://cloud.google.com/pubsub/docs/handling-failures#dead_letter_topic) on the [BigQuery subscription](https://cloud.google.com/pubsub/docs/bigquery#handle_message_failures). ### Further information [BigQuery subscriptions](https://cloud.google.com/pubsub/docs/bigquery) ================================================ FILE: website/content/en/rules/pubsub/WARN/2023_003.md ================================================ --- title: "pubsub/WARN/2023_003" linkTitle: "WARN/2023_003" weight: 1 type: docs description: > Each topic has at least one subscription attached. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description Without a subscription, subscribers cannot pull messages or receive pushed messages published to the topic. At the end of the max message retention period, the messages will be discarded from Pub/Sub regardless, resulting in loss of data published to the topic. ### Remediation [Attach a subscription](https://cloud.google.com/pubsub/docs/subscriber) to the topic in order to deliver messages published to the topic before they expire and are discarded leading to data loss. Once the subscription is attached, depending on the type of the subscription, simply pull from it for pull subscriptions, or accept delivered messages to your configured endpoint for push messages. ### Further information To determine which subscription is suitable for your use-case: [Choose a subscription](https://cloud.google.com/pubsub/docs/subscriber) ================================================ FILE: website/content/en/rules/pubsub/WARN/2023_004.md ================================================ --- title: "pubsub/WARN/2023_004" linkTitle: "WARN/2023_004" weight: 1 type: docs description: > Project should not have a subscription without a topic attached. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description For a subscription whose topic is deleted, it cannot be reattached to a new topic and thus cannot receive new published messages. Messages in the subscription will expire after the message retention period if unacked, and discarded from Pub/Sub which may lead to data loss. The subscription is then counting as quota consumed for an unusable resource. ### Remediation [Delete a subscription](https://cloud.google.com/pubsub/docs/delete-subscriptions) whose topic is deleted to free up [the quota](https://cloud.google.com/pubsub/quotas#resource_limits) for new subscriptions. ### Further information You can also set expiration policy for subscriptions to delete inactive subscriptions past their expiry period. By default this value is [31 days](https://cloud.google.com/pubsub/docs/subscription-properties#expiration_period). However, subscriptions set to `never expire` will not be deleted even if they are inactive and count against the project's quota usage. ================================================ FILE: website/content/en/rules/pubsub/WARN/2023_005.md ================================================ --- title: "pubsub/WARN/2023_005" linkTitle: "WARN/2023_005" weight: 1 type: docs description: > Pub/Sub service account has BigQuery Permissions if BigQuery Subscription(s) exist. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description For any BigQuery subscriptions to deliver messages successfully, they should have the appropriate BigQuery Editor permissions to the appropriate service. ### Remediation Assign the [roles/bigquery.dataEditor](https://cloud.google.com/pubsub/docs/create-bigquery-subscription#assign_bigquery_service_account) role to the Pub/Sub Service Account to assign BigQuery Editor Permissions. ### Further information The full list of permissions available in this role can be found at the [Big Query Permissions](https://cloud.google.com/bigquery/docs/access-control#bigquery.dataEditor). ================================================ FILE: website/content/en/rules/pubsub/WARN/2023_006.md ================================================ --- title: "pubsub/WARN/2023_006" linkTitle: "WARN/2023_006" weight: 1 type: docs description: > Push delivery requests for push subscriptions are not failing. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description For any push subscription, delivery to the endpoint should return an ack response for successfully processed messages. ### Remediation For push subscriptions the error code returned by the endpoint if it's not listed in the ack [http status codes](https://cloud.google.com/pubsub/docs/push#receive_push), and resolve the occurring issue. Logging within the endpoint system may help in debugging the processing error. For [export subscriptions](https://cloud.google.com/pubsub/docs/subscription-overview#push_pull), attach a [dead-letter topic](https://cloud.google.com/pubsub/docs/handling-failures#dead_letter_topic) and subscription, pull from this dead-letter subscription and check the [attributes](https://cloud.google.com/pubsub/docs/handling-failures#track-delivery-attempts) of the resulting messages for the processing error. ### Further information [Properties of a push subscription](https://cloud.google.com/pubsub/docs/push#properties_of_a_push_subscription) [Handling delivery failures](https://cloud.google.com/pubsub/docs/handling-failures) ================================================ FILE: website/content/en/rules/pubsub/WARN/2024_001.md ================================================ --- title: "pubsub/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > Pub/Sub Service Account has the Publisher and Subscriber Permissions if DLQ Subscription(s) exist. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description To forward undeliverable messages to a dead-letter topic, Pub/Sub must have the 'roles/pubsub.subscriber' and 'roles/pubsub.publisher' permissions enabled on the automatically created Pub/Sub service account. ### Remediation In Pub/Sub, access control can be configured at the project level and at the individual resource level. Pub/Sub creates and maintains a service account for each project: `service-{project-number}@gcp-sa-pubsub.iam.gserviceaccount.com`. You can grant forwarding permissions by assigning publisher and subscriber roles to this service account. - Project Level: [Access control with IAM](https://cloud.google.com/pubsub/docs/access-control#console) - Individual resource level: [Grant IAM roles to use dead-letter topics](https://cloud.google.com/pubsub/docs/handling-failures#grant_forwarding_permissions) to the service account. ### Further information ================================================ FILE: website/content/en/rules/pubsub/WARN/2024_002.md ================================================ --- title: "pubsub/WARN/2024_002" linkTitle: "WARN/2024_002" weight: 1 type: docs description: > Pub/Sub service account has GCS permissions if GCS subscription(s) exist. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description For any GCS subscriptions to deliver messages successfully, they should have the appropriate permissions at the project or bucket level. ### Remediation Assign the [`roles/storage.admin`](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#assign_roles_cloudstorage) role to the Pub/Sub Service Account to assign GCS Storage Admin Permissions. Alternatively, assign the Pub/Sub Service Account `roles/storage.objectCreator` and roles/storage.legacyBucketReader roles. ### Further information The full list of permissions available in these roles can be found at the [GCS Permissions Doc](https://cloud.google.com/storage/docs/access-control/iam-roles). ================================================ FILE: website/content/en/rules/pubsub/WARN/2024_003.md ================================================ --- title: "pubsub/WARN/2024_003" linkTitle: "WARN/2024_003" weight: 1 type: docs description: > Pub/Sub service account has the Encrypter and Decrypter Role if CMEK exist. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Rule class**: WARN - Something that is possibly wrong ### Description As long as the service account has the CyptoKey Encrypter/Decrypter role, the service can encrypt and decrypt its data. If you revoke this role, or if you disable or destroy the CMEK key, that data can't be accessed. ### Remediation Assign the [`roles/cloudkms.cryptoKeyEncrypterDecrypter`](https://cloud.google.com/pubsub/docs/encryption#using-cmek) role to the Pub/Sub Service Account to assign CyptoKey Encrypter/Decrypter role Permissions. ### Further information Please find below for more information about the role permissions. - [Cloud KMS Permissions Doc](https://cloud.google.com/iam/docs/understanding-roles#cloud-kms-roles). - [Customer-managed encryption keys (CMEK)](https://cloud.google.com/kms/docs/cmek#cmek) ================================================ FILE: website/content/en/rules/pubsub/_index.md ================================================ --- title: "PUBSUB" linkTitle: "pubsub" type: docs --- ================================================ FILE: website/content/en/rules/tpu/WARN/2022_001.md ================================================ --- title: "tpu/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > Cloud TPU resource availability --- **Product**: [Cloud TPU](https://cloud.google.com/tpu)\ **Rule class**: WARN - Something that is possibly wrong ### Description Resource errors occur when you try to request new resources in a zone that cannot accommodate your request due to the current unavailability of a Cloud TPU resource. ### Remediation You can try in another zone where Cloud TPU Nodes are offered or please contact your account or sales team to consider purchasing reserved resources (CUD) ### Further information - [Cloud TPU Regions](https://cloud.google.com/tpu/docs/regions) - [Resource availability](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation#resource_availability) - [Committed use discounts](https://cloud.google.com/compute/docs/instances/signing-up-committed-use-discounts) ================================================ FILE: website/content/en/rules/tpu/_index.md ================================================ --- title: "TPU" linkTitle: "tpu" type: docs description: "Cloud TPU" --- ================================================ FILE: website/content/en/rules/vertex/WARN/2023_001.md ================================================ --- title: "vertex/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > Vertex AI Featurestores should have known state --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Rule class**: WARN - ### Description - Vertex AI Feature Store documentation can be found [here](https://cloud.google.com/vertex-ai/docs/featurestore) - Vertex AI REST API reference for Feature Stores states can be found [here](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores#state) - STABLE: The featurestore is usable - UPDATING: The featurestore is still usable in this state - STATE_UNSPECIFIED: The featurestore is unusable in this state ### Remediation - User should investigate in Cloud Logging why the feature store has an unknown state ================================================ FILE: website/content/en/rules/vertex/_index.md ================================================ --- title: "VERTEX" linkTitle: "vertex" type: docs description: > Vertex AI --- ================================================ FILE: website/content/en/rules/vpc/BP/2022_001.md ================================================ --- title: "vpc/BP/2022_001" linkTitle: "BP/2022_001" weight: 1 type: docs description: > Explicit routes for Google APIs if the default route is modified. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description If you need to modify the default route, then add explicit routes for Google API destination IP ranges. https://cloud.google.com/architecture/best-practices-vpc-design#explicit-routes Note: This does not consider tagged routes or shadowed default routes. Validate with a Connectivity Test. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/vpc/BP/2023_001.md ================================================ --- title: "vpc/BP/2023_001" linkTitle: "BP/2023_001" weight: 1 type: docs description: > DNS logging is enabled for public zones. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Rule class**: BP - Best practice, opinionated recommendation ### Description If not enabled, customers wouldn't have visibility to what queries are being made to the zone. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/vpc/SEC/2023_001.md ================================================ --- title: "vpc/SEC/2023_001" linkTitle: "SEC/2023_001" weight: 1 type: docs description: > DNSSEC is enabled for public zones. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Rule class**: SEC - Potential security issue ### Description It is recommended to enable DNSSEC for public zones. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/vpc/WARN/2022_001.md ================================================ --- title: "vpc/WARN/2022_001" linkTitle: "WARN/2022_001" weight: 1 type: docs description: > Per-project quotas are not near the limit. --- **Product**: [Quotas](https://cloud.google.com/docs/quota)\ **Rule class**: WARN - Something that is possibly wrong ### Description Google Cloud uses quotas to restrict how much of a particular shared Google Cloud resource that you can use. Each quota represents a specific countable resource. Project level quota limits the resources you can use in each project, such as the number of VPCs you can create. Rule will start failing if quota usage will be higher then configured threshold (80%). ### Further information - [Working with quotas](https://cloud.google.com/docs/quota) ================================================ FILE: website/content/en/rules/vpc/WARN/2023_001.md ================================================ --- title: "vpc/WARN/2023_001" linkTitle: "WARN/2023_001" weight: 1 type: docs description: > On-premises host can communicate with the setvice producer's network --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Rule class**: WARN - Something that is possibly wrong ### Description When you create a private connection, the VPC network and service producer's network only exchange subnet routes by default. Enabling the export of custom routes to this private connection allows on-premises hosts to access the service producer's network via private services access. ### Remediation In your VPC network, [update the peering connection](https://cloud.google.com/vpc/docs/using-vpc-peering#update-peer-connection) to export custom routes to the service producer's network. ### Further information See [On-premises hosts can't communicate with the service producer's network](https://cloud.google.com/vpc/docs/configure-private-services-access#on-prem). ================================================ FILE: website/content/en/rules/vpc/WARN/2023_002.md ================================================ --- title: "vpc/WARN/2023_002" linkTitle: "WARN/2023_002" weight: 1 type: docs description: > Private zone is attached to a VPC. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Rule class**: WARN - Something that is possibly wrong ### Description If not attached to a VPC, Private zones will not be usable. ### Remediation ### Further information ================================================ FILE: website/content/en/rules/vpc/WARN/2024_001.md ================================================ --- title: "vpc/WARN/2024_001" linkTitle: "WARN/2024_001" weight: 1 type: docs description: > No Unused reserved IP addresses are found. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Rule class**: WARN - Something that is possibly wrong ### Description We can reserve IP addresses and persists until we explicitly release it. Unused reserved IP addresses over the time will cause extra money. Make sure you identify and release those IP addresses. ### Remediation - [Release a static external IP address](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address#release_ip) - [Release a static internal IPv4 or IPv6 address](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address#delete_a_static_internal_ip_address) ### Further information ================================================ FILE: website/content/en/rules/vpc/_index.md ================================================ --- title: "VPC" linkTitle: "vpc" type: docs description: Virtual Private Cloud (VPC) --- ================================================ FILE: website/content/en/runbook/_index.md ================================================ --- title: "Runbook Rules" linkTitle: "Runbook" type: docs menu: main: weight: 30 --- In this section you find documentation for the gcpdiag runbook Diagnostic Trees and steps implemented for the following GCP products: ================================================ FILE: website/content/en/runbook/diagnostic-trees/_index.md ================================================ --- title: "Debugging Trees" linkTitle: "Debugging Trees" type: docs weight: 1 --- ================================================ FILE: website/content/en/runbook/diagnostic-trees/bigquery/_index.md ================================================ --- title: "BIGQUERY" linkTitle: "bigquery" type: docs weight: 2 --- All diagnostic tree available in bigquery ================================================ FILE: website/content/en/runbook/diagnostic-trees/bigquery/failed-query.md ================================================ --- title: "bigquery/Failed Query" linkTitle: "bigquery/failed-query" weight: 3 type: docs description: > Diagnoses issues with a failed BigQuery query job. --- **Product**: [BigQuery](https://cloud.google.com/bigquery) **Kind**: Debugging Tree ### Description This runbook investigates why a specific BigQuery job failed by verifying the job's status and analyzing the error message against a set of known issues to provide targeted remediation steps. ### Executing this runbook ```shell gcpdiag runbook bigquery/failed-query \ -p project_id=value \ -p bigquery_job_region=value \ -p bigquery_job_id=value \ -p bigquery_skip_permission_check=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID where the BigQuery job was run. | | `bigquery_job_region` | True | None | str | The region where the BigQuery job was run. | | `bigquery_job_id` | True | None | str | The identifier of the failed BigQuery Job. | | `bigquery_skip_permission_check` | False | False | bool | Indicates whether to skip the permission check to speed up the investigation. | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Big Query Failed Query Start](/runbook/steps/bigquery/big-query-failed-query-start) - [Run Permission Checks](/runbook/steps/bigquery/run-permission-checks) - [Big Query End](/runbook/steps/bigquery/big-query-end) - [Big Query End](/runbook/steps/bigquery/big-query-end) - [Big Query Job Exists](/runbook/steps/bigquery/big-query-job-exists) - [Big Query End](/runbook/steps/bigquery/big-query-end) - [Big Query End](/runbook/steps/bigquery/big-query-end) - [Confirm Bq Job Is Done](/runbook/steps/bigquery/confirm-bq-job-is-done) - [Big Query End](/runbook/steps/bigquery/big-query-end) - [Big Query End](/runbook/steps/bigquery/big-query-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/cloudrun/_index.md ================================================ --- title: "CLOUDRUN" linkTitle: "cloudrun" type: docs weight: 2 --- All diagnostic tree available in cloudrun ================================================ FILE: website/content/en/runbook/diagnostic-trees/cloudrun/service-deployment.md ================================================ --- title: "cloudrun/Service Deployment" linkTitle: "cloudrun/service-deployment" weight: 3 type: docs description: > Investigates the necessary GCP components searching for reasons for deployment errors. --- **Product**: [Cloud Run](https://cloud.google.com/run) **Kind**: Debugging Tree ### Description This runbook will examine the following key areas: 1. Container and code Checks. - Ensures the Container is in correct state to run in Cloud Run Scope of Investigation: - Note that this runbook does not provide troubleshooting steps for errors caused by the code running in the container. ### Executing this runbook ```shell gcpdiag runbook cloudrun/service-deployment \ -p project_id=value \ -p region=value \ -p service_name=value \ -p cloudrun_service_name=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `region` | True | None | str | Region of the service. | | `service_name` | False | None | str | Name of the Cloud Run service | | `cloudrun_service_name` | True | None | str | Name of the Cloud Run service | | `start_time` | False | None | datetime | Start time of the issue | | `end_time` | False | None | datetime | End time of the issue | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Service Deployment Start](/runbook/steps/cloudrun/service-deployment-start) - [Service Deployment Code Step](/runbook/steps/cloudrun/service-deployment-code-step) - [Container Failed To Start Step](/runbook/steps/cloudrun/container-failed-to-start-step) - [Image Was Not Found Step](/runbook/steps/cloudrun/image-was-not-found-step) - [No Permission For Image Step](/runbook/steps/cloudrun/no-permission-for-image-step) ================================================ FILE: website/content/en/runbook/diagnostic-trees/dataflow/_index.md ================================================ --- title: "DATAFLOW" linkTitle: "dataflow" type: docs weight: 2 --- All diagnostic tree available in dataflow ================================================ FILE: website/content/en/runbook/diagnostic-trees/dataflow/failed-streaming-pipeline.md ================================================ --- title: "dataflow/Failed Streaming Pipeline" linkTitle: "dataflow/failed-streaming-pipeline" weight: 3 type: docs description: > Diagnostic checks for failed Dataflow Streaming Pipelines. --- **Product**: [Dataflow](https://cloud.google.com/dataflow) **Kind**: Debugging Tree ### Description Provides a DiagnosticTree to check for issues related to failed streaming pipelines. - Examples: - Pipeline failed to launch - Workers not starting ### Executing this runbook ```shell gcpdiag runbook dataflow/failed-streaming-pipeline \ -p project_id=value \ -p job_id=value \ -p dataflow_job_id=value \ -p job_region=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `job_id` | False | None | str | The Job ID returned when the launch command is submitted | | `dataflow_job_id` | True | None | str | The Job ID returned when the launch command is submitted | | `job_region` | True | None | str | The region configured for the job | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Failed Streaming Pipeline Start](/runbook/steps/dataflow/failed-streaming-pipeline-start) - [Job Is Streaming](/runbook/steps/dataflow/job-is-streaming) - [Valid Sdk](/runbook/steps/dataflow/valid-sdk) - [Job Graph Is Constructed](/runbook/steps/dataflow/job-graph-is-constructed) - [Failed Streaming Pipeline End](/runbook/steps/dataflow/failed-streaming-pipeline-end) - [Job Logs Visible](/runbook/steps/dataflow/job-logs-visible) - [Failed Streaming Pipeline End](/runbook/steps/dataflow/failed-streaming-pipeline-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/dataflow/job-permissions.md ================================================ --- title: "dataflow/Job Permissions" linkTitle: "dataflow/job-permissions" weight: 3 type: docs description: > Analysis and Resolution of Dataflow Jobs Permissions issues. --- **Product**: [Dataflow](https://cloud.google.com/dataflow) **Kind**: Debugging Tree ### Description This runbook investigates Dataflow permissions and recommends remediation steps. Areas Examined: - Dataflow User Account Permissions: Verify that individual Dataflow users have the necessary permissions to access and manage Dataflow jobs (e.g., create,update,cancel). - Dataflow Service Account Permissions: Verify that the Dataflow Service Account has the required permissions to execute and manage the Dataflow jobs - Dataflow Worker Service Account: Verify that the Dataflow Worker Service Account has the necessary permissions for worker instances within a Dataflow job to access input and output resources during job execution. - Dataflow Resource Permissions: Verify that Dataflow resources (e.g., Cloud Storage buckets, BigQuery datasets) have the necessary permissions to be accessed and used by Dataflow jobs. By ensuring that Dataflow resources have the necessary permissions, you can prevent errors and ensure that your jobs run smoothly. ### Executing this runbook ```shell gcpdiag runbook dataflow/job-permissions \ -p project_id=value \ -p principal=value \ -p worker_service_account=value \ -p cross_project_id=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `principal` | True | None | str | The authenticated user account email. This is the user account that is used to authenticate the user to the console or the gcloud CLI. | | `worker_service_account` | True | None | str | Dataflow Worker Service Account used for Dataflow Job Creationand execution | | `cross_project_id` | False | None | str | Cross Project ID, where service account is located if it is not in the same project as the Dataflow Job | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Start Step](/runbook/steps/gcpdiag/start-step) - [Dataflow User Account Permissions](/runbook/steps/dataflow/dataflow-user-account-permissions) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Dataflow Worker Service Account Permissions](/runbook/steps/dataflow/dataflow-worker-service-account-permissions) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Org Policy Check](/runbook/steps/crm/org-policy-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Dataflow Resource Permissions](/runbook/steps/dataflow/dataflow-resource-permissions) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Dataflow Permissions End](/runbook/steps/dataflow/dataflow-permissions-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/dataproc/_index.md ================================================ --- title: "DATAPROC" linkTitle: "dataproc" type: docs weight: 2 --- All diagnostic tree available in dataproc ================================================ FILE: website/content/en/runbook/diagnostic-trees/dataproc/cluster-creation.md ================================================ --- title: "dataproc/Cluster Creation" linkTitle: "dataproc/cluster-creation" weight: 3 type: docs description: > Provides a comprehensive analysis of common issues which affect Dataproc cluster creation. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc) **Kind**: Debugging Tree ### Description This runbook focuses on a range of potential problems for Dataproc clusters on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of cluster creation difficulties. The following areas are examined: - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the region/zone. - Quota availability: Checks for the quota availability in Dataproc cluster project. - Network configuration: Performs GCE Network Connectivity Tests, checks necessary firewall rules, external/internal IP configuration. - Cross-project configuration: Checks if the service account is not in the same project and reviews additional roles and organization policies enforcement. - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC network and evaluates if right service account roles are added. - Init actions script failures: Evaluates Logs Explorer logs regarding init actions script failures or timeouts. ### Executing this runbook ```shell gcpdiag runbook dataproc/cluster-creation \ -p project_id=value \ -p cluster_name=value \ -p dataproc_cluster_name=value \ -p region=value \ -p cluster_uuid=value \ -p project_number=value \ -p service_account=value \ -p constraint=value \ -p stackdriver=value \ -p zone=value \ -p network=value \ -p dataproc_network=value \ -p subnetwork=value \ -p internal_ip_only=value \ -p start_time=value \ -p end_time=value \ -p cross_project=value \ -p host_vpc_project=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID where the Dataproc cluster is located | | `cluster_name` | False | None | str | Dataproc cluster Name of an existing/active resource | | `dataproc_cluster_name` | True | None | str | Dataproc cluster Name of an existing/active resource | | `region` | True | None | str | Dataproc cluster Region | | `cluster_uuid` | False | None | str | Dataproc cluster UUID | | `project_number` | False | None | str | The Project Number where the Dataproc cluster is located | | `service_account` | False | None | str | Dataproc cluster Service Account used to create the resource | | `constraint` | False | None | bool | Checks if the Dataproc cluster has an enforced organization policy constraint | | `stackdriver` | False | True | str | Checks if stackdriver logging is enabled for further troubleshooting | | `zone` | False | None | str | Dataproc cluster Zone | | `network` | False | None | str | Dataproc cluster Network | | `dataproc_network` | False | None | str | Dataproc cluster Network | | `subnetwork` | False | None | str | Dataproc cluster Subnetwork | | `internal_ip_only` | False | None | bool | Checks if the Dataproc cluster has been created with only Internal IP | | `start_time` | False | None | datetime | Start time of the issue | | `end_time` | False | None | datetime | End time of the issue | | `cross_project` | False | None | str | Cross Project ID, where service account is located if it is not in the same project as the Dataproc cluster | | `host_vpc_project` | False | None | str | Project ID of the Shared VPC network | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Cluster Creation Start](/runbook/steps/dataproc/cluster-creation-start) - [Cluster Details Dependency Gateway](/runbook/steps/dataproc/cluster-details-dependency-gateway) - [Check Init Script Failure](/runbook/steps/dataproc/check-init-script-failure) - [Check Cluster Network](/runbook/steps/dataproc/check-cluster-network) - [Internal Ip Gateway](/runbook/steps/dataproc/internal-ip-gateway) - [Service Account Exists](/runbook/steps/dataproc/service-account-exists) - [Check Shared Vpc Roles](/runbook/steps/dataproc/check-shared-vpc-roles) - [Cluster Creation Quota](/runbook/steps/dataproc/cluster-creation-quota) - [Cluster Creation Stockout](/runbook/steps/dataproc/cluster-creation-stockout) - [Cluster Creation End](/runbook/steps/dataproc/cluster-creation-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/dataproc/spark-job-failures.md ================================================ --- title: "dataproc/Spark Job Failures" linkTitle: "dataproc/spark-job-failures" weight: 3 type: docs description: > Provides a comprehensive analysis of common issues which affects Dataproc Spark job failures. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc) **Kind**: Debugging Tree ### Description This runbook focuses on a range of potential problems for Dataproc Spark jobs on Google Cloud Platform. By conducting a series of checks, the runbook aims to pinpoint the root cause of Spark job failures. The following areas are examined: - Cluster version supportability: Evaluates if the job was run on a supported cluster image version. - Permissions: Checks for permission related issues on the cluster and GCS bucket level. - OOM: Checks Out-Of-Memory issues for the Spark job on master or worker nodes. - Logs: Check other logs related to shuffle failures, broken pipe, YARN runtime exception, import failures. - Throttling: Checks if the job was throttled and provides the exact reason for it. - GCS Connector: Evaluates possible issues with the GCS Connector. - BigQuery Connector: Evaluates possible issues with BigQuery Connector, such as dependency version conflicts. ### Executing this runbook ```shell gcpdiag runbook dataproc/spark-job-failures \ -p project_id=value \ -p job_id=value \ -p dataproc_job_id=value \ -p region=value \ -p zone=value \ -p service_account=value \ -p cross_project=value \ -p stackdriver=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `job_id` | False | None | str | The Job ID of the resource under investigation | | `dataproc_job_id` | True | None | str | The Job ID of the resource under investigation | | `region` | True | None | str | Dataproc job/cluster Region | | `zone` | False | None | str | Dataproc cluster Zone | | `service_account` | False | None | str | Dataproc cluster Service Account used to create the resource | | `cross_project` | False | None | str | Cross Project ID, where service account is located if it is not in the same project as the Dataproc cluster | | `stackdriver` | False | False | str | Checks if stackdriver logging is enabled for further troubleshooting | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Job Start](/runbook/steps/dataproc/job-start) - [Job Details Dependency Gateway](/runbook/steps/dataproc/job-details-dependency-gateway) - [Check Task Not Found](/runbook/steps/dataproc/check-task-not-found) - [Check Master Oom](/runbook/steps/dataproc/check-master-oom) - [Check Worker Oom](/runbook/steps/dataproc/check-worker-oom) - [Check Sw Preemption](/runbook/steps/dataproc/check-sw-preemption) - [Check Worker Disk Usage Issue](/runbook/steps/dataproc/check-worker-disk-usage-issue) - [Check Port Exhaustion](/runbook/steps/dataproc/check-port-exhaustion) - [Check Killing Orphaned Application](/runbook/steps/dataproc/check-killing-orphaned-application) - [Check Python Import Failure](/runbook/steps/dataproc/check-python-import-failure) - [Check Shuffle Service Kill](/runbook/steps/dataproc/check-shuffle-service-kill) - [Check Gc Pause](/runbook/steps/dataproc/check-gc-pause) - [Check Yarn Runtime Exception](/runbook/steps/dataproc/check-yarn-runtime-exception) - [Check Job Throttling](/runbook/steps/dataproc/check-job-throttling) - [Check Gcs Connector](/runbook/steps/dataproc/check-gcs-connector) - [Check Shuffle Failures](/runbook/steps/dataproc/check-shuffle-failures) - [Check Stackdriver Setting](/runbook/steps/dataproc/check-stackdriver-setting) - [Check Cluster Version](/runbook/steps/dataproc/check-cluster-version) - [Check Permissions](/runbook/steps/dataproc/check-permissions) - [Check Cluster Network Connectivity](/runbook/steps/dataproc/check-cluster-network-connectivity) - [Check Bq Connector](/runbook/steps/dataproc/check-bq-connector) - [Spark Job End](/runbook/steps/dataproc/spark-job-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gce/_index.md ================================================ --- title: "GCE" linkTitle: "gce" type: docs weight: 2 --- All diagnostic tree available in gce ================================================ FILE: website/content/en/runbook/diagnostic-trees/gce/guestos-bootup.md ================================================ --- title: "gce/Guestos Bootup" linkTitle: "gce/guestos-bootup" weight: 3 type: docs description: > Google Compute Engine VM Guest OS boot-up runbook. --- **Product**: [Compute Engine](https://cloud.google.com/compute) **Kind**: Debugging Tree ### Description This runbook is designed to investigate the various boot-up stages of a Linux or Windows Guest OS running on Google Compute Engine. It is intended to help you identify and troubleshoot issues that may arise during the boot process. The runbook provides a structured approach to resolve issues. Key Investigation Areas: Boot Issues: - Check for Boot issues happening due to Kernel panics - Check for GRUB related issues. - Check if system failed to find boot disk. - Check if Filesystem corruption is causing issues with system boot. - Check if "/" Filesystem consumption is causing issues with system boot. Cloud-init checks: - Check if cloud-init has initialised or started. - Check if NIC has received the IP. Network related issues: - Check if metadata server became unreachable since last boot. - Check if there are any time sync related errors. Google Guest Agent checks: - Check if there are logs related to successful startup of Google Guest Agent. ### Executing this runbook ```shell gcpdiag runbook gce/guestos-bootup \ -p project_id=value \ -p instance_name=value \ -p instance_id=value \ -p zone=value \ -p serial_console_file=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID associated with the VM | | `instance_name` | True | None | str | The name of the VM | | `instance_id` | False | None | str | The instance-id of the VM | | `zone` | True | None | str | The Google Cloud zone where the VM is located. | | `serial_console_file` | False | None | str | Absolute path of files contailing the Serial console logs, in case if gcpdiag is not able to reach the VM Serial logs. i.e -p serial_console_file="filepath1,filepath2" | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Guestos Bootup Start](/runbook/steps/gce/guestos-bootup-start) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Cloud Init Checks](/runbook/steps/gce/cloud-init-checks) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [End Step](/runbook/steps/gcpdiag/end-step) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gce/ops-agent.md ================================================ --- title: "gce/Ops Agent" linkTitle: "gce/ops-agent" weight: 3 type: docs description: > Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM --- **Product**: [Compute Engine](https://cloud.google.com/compute) **Kind**: Debugging Tree ### Description This runbook will examine the following key areas: 1. API Service Checks: - Ensures that Cloud APIs for Logging and/or Monitoring are accessible. 2. Permission Checks: - Verifies that the necessary permissions are in place for exporting logs and/or metrics. 3. Workload Authentication: - Confirms that the Ops Agent has a service account for authentication. - If using Google Application Credentials, provide the service account with the `gac_service_account` parameter. 4. Scope of Investigation: - Note that this runbook does not include internal VM checks, such as guest OS investigations. ### Executing this runbook ```shell gcpdiag runbook gce/ops-agent \ -p project_id=value \ -p instance_name=value \ -p instance_id=value \ -p zone=value \ -p start_time=value \ -p end_time=value \ -p gac_service_account=value \ -p check_logging=value \ -p check_monitoring=value \ -p check_serial_port_logging=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID containing the VM | | `instance_name` | True | None | str | Name of the GCE instance running the Ops Agent | | `instance_id` | False | None | str | ID of the GCE instance running the Ops Agent | | `zone` | True | None | str | Zone of the GCE instance running the Ops Agent | | `start_time` | False | None | datetime | Start time of the issue | | `end_time` | False | None | datetime | End time of the issue | | `gac_service_account` | False | None | str | GOOGLE_APPLICATION_CREDENTIALS used by ops agent, if applicable | | `check_logging` | False | True | bool | Investigate logging issues | | `check_monitoring` | False | True | bool | Investigate monitoring issues | | `check_serial_port_logging` | False | True | bool | Check if VM Serial logging is enabled | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Ops Agent Start](/runbook/steps/gce/ops-agent-start) - [Vm Has A Service Account](/runbook/steps/gce/vm-has-a-service-account) - [Vm Has An Active Service Account](/runbook/steps/iam/vm-has-an-active-service-account) - [Investigate Logging Monitoring](/runbook/steps/gce/investigate-logging-monitoring) - [Service Api Status Check](/runbook/steps/gcp/service-api-status-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Vm Scope](/runbook/steps/gce/vm-scope) - [Vm Has Ops Agent](/runbook/steps/gce/vm-has-ops-agent) - [Check Serial Port Logging](/runbook/steps/gce/check-serial-port-logging) - [Service Api Status Check](/runbook/steps/gcp/service-api-status-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Vm Scope](/runbook/steps/gce/vm-scope) - [Vm Has Ops Agent](/runbook/steps/gce/vm-has-ops-agent) - [Ops Agent End](/runbook/steps/gce/ops-agent-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gce/serial-log-analyzer.md ================================================ --- title: "gce/Serial Log Analyzer" linkTitle: "gce/serial-log-analyzer" weight: 3 type: docs description: > Google Compute Engine VM Serial log analyzer --- **Product**: [Compute Engine](https://cloud.google.com/compute) **Kind**: Debugging Tree ### Description This runbook is designed to assist you in investigating the serial console logs of a vm. Key Investigation Areas: Boot Issues: - Check for Boot issues happening due to Kernel panics - Check for GRUB related issues. - Check if system failed to find boot disk. - Check if Filesystem corruption is causing issues with system boot. - Check if "/" Filesystem consumption is causing issues with system boot. Memory crunch issues: - Check if OOM kills happened on the VM or any other memory related issues. Cloud-init checks: - Check if cloud-init has initialised or started. - Check if NIC has received the IP. Network related issues: - Check if metadata server became unreachable since last boot. - Check if there are any time sync related errors. SSHD checks: - Check if there are logs related to successful startup of SSHD service. SSHD Auth Failures checks: - Check for SSH issues due to bad permissions of files or directories Google Guest Agent checks: - Check if there are logs related to successful startup of Google Guest Agent. SSH guard check: - Check if SSHGuard is active and may be blocking IP addresses ### Executing this runbook ```shell gcpdiag runbook gce/serial-log-analyzer \ -p project_id=value \ -p name=value \ -p instance_name=value \ -p id=value \ -p zone=value \ -p serial_console_file=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID associated with the VM for which you want to analyse the Serial logs. | | `name` | False | None | str | The name of the VM, for which you want to analyse the Serial logs. Or provide the id i.e -p name= | | `instance_name` | True | None | str | The name of the VM, for which you want to analyse the Serial logs. Or provide the id i.e -p name= | | `id` | False | None | str | The instance-id of the VM, for which you want to analyse the Serial logs. Or provide the id i.e -p id= | | `zone` | True | None | str | The Google Cloud zone where the VM is located. | | `serial_console_file` | False | None | str | Absolute path of files contailing the Serial console logs, in case if gcpdiag is not able to reach the VM Serial logs. i.e -p serial_console_file="filepath1,filepath2" | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Serial Log Analyzer Start](/runbook/steps/gce/serial-log-analyzer-start) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Cloud Init Checks](/runbook/steps/gce/cloud-init-checks) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Analysing Serial Logs End](/runbook/steps/gce/analysing-serial-logs-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gce/ssh.md ================================================ --- title: "gce/Ssh" linkTitle: "gce/ssh" weight: 3 type: docs description: > A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs. --- **Product**: [Compute Engine](https://cloud.google.com/compute) **Kind**: Debugging Tree ### Description Investigates components required for ssh on either Windows and Linux VMs hosted on Google Cloud Platform and pinpoint misconfigurations. Areas Examined: - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt normal SSH operations. - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to leverage OS Login features and to use metadata-based SSH keys for authentication. - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys, flags and other essential configuration details that facilitate SSH access. - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no network barriers preventing SSH access to the VM. - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any misconfigurations or service disruptions that could be obstructing SSH functionality. - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and the organization policies permits SSH in Browser. ### Executing this runbook ```shell gcpdiag runbook gce/ssh \ -p project_id=value \ -p name=value \ -p instance_name=value \ -p instance_id=value \ -p id=value \ -p zone=value \ -p principal=value \ -p local_user=value \ -p posix_user=value \ -p tunnel_through_iap=value \ -p proxy=value \ -p check_os_login=value \ -p client=value \ -p src_ip=value \ -p protocol_type=value \ -p port=value \ -p check_ssh_in_browser=value \ -p access_method=value \ -p mfa=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The ID of the project hosting the GCE Instance | | `name` | False | None | str | The name of the target GCE Instance | | `instance_name` | False | None | str | The name of the target GCE Instance | | `instance_id` | False | None | int | The instance ID of the target GCE Instance | | `id` | False | None | int | The instance ID of the target GCE Instance | | `zone` | True | None | str | The zone of the target GCE Instance | | `principal` | False | None | str | The user or service account initiating the SSH connection. This user should be authenticated in gcloud/cloud console when sshing into to a GCE instance. For service account impersonation, it should be the service account's email. (format: user:user@example.com or serviceAccount:service-account-name@project-id.iam.gserviceaccount.com) | | `local_user` | False | None | str | Posix User on the VM | | `posix_user` | False | None | str | Posix User on the VM | | `tunnel_through_iap` | False | True | bool | ('A boolean parameter (true or false) indicating whether ', 'Identity-Aware Proxy should be used for establishing the SSH connection.') | | `proxy` | False | None | str | ('A string that specifies the method used to establish the SSH connection, ', 'and indicating whether Identity-Aware Proxy (IAP) or a jumphost is utilized.') | | `check_os_login` | False | True | bool | A boolean value (true or false) indicating whether OS Login should be used for SSH authentication | | `client` | False | None | str | The SSH client application used to establish SSH connection | | `src_ip` | False | None | IPv4Address | The IPv4 address of the workstation connecting to the network, or the IP of the bastion/jumphost if currently logged in through one. | | `protocol_type` | False | tcp | str | Protocol used to connect to SSH | | `port` | False | 22 | int | The port used to connect to on the remote host (default: 22) | | `check_ssh_in_browser` | False | False | bool | Check that SSH in Browser is feasible | | `access_method` | False | None | str | The method used to share or restrict access to the instance | | `mfa` | False | None | str | Multifactor authentication required to access to the instance | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Ssh Start](/runbook/steps/gce/ssh-start) - [Vm Lifecycle State](/runbook/steps/gce/vm-lifecycle-state) - [Vm Performance Checks](/runbook/steps/gce/vm-performance-checks) - [High Vm Memory Utilization](/runbook/steps/gce/high-vm-memory-utilization) - [High Vm Disk Utilization](/runbook/steps/gce/high-vm-disk-utilization) - [High Vm Cpu Utilization](/runbook/steps/gce/high-vm-cpu-utilization) - [Vm Guest Os Type](/runbook/steps/gce/vm-guest-os-type) - [Linux Guest Os Checks](/runbook/steps/gce/linux-guest-os-checks) - [Windows Guest Os Checks](/runbook/steps/gce/windows-guest-os-checks) - [Gcp Ssh Permissions](/runbook/steps/gce/gcp-ssh-permissions) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Os Login Status Check](/runbook/steps/gce/os-login-status-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [Gce Firewall Allows Ssh](/runbook/steps/gce/gce-firewall-allows-ssh) - [Gce Vpc Connectivity Check](/runbook/steps/gce/gce-vpc-connectivity-check) - [Gce Vpc Connectivity Check](/runbook/steps/gce/gce-vpc-connectivity-check) - [Gce Vpc Connectivity Check](/runbook/steps/gce/gce-vpc-connectivity-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Ssh In Browser Check](/runbook/steps/gce/ssh-in-browser-check) - [Org Policy Check](/runbook/steps/crm/org-policy-check) - [Ssh End](/runbook/steps/gce/ssh-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gce/vm-creation.md ================================================ --- title: "gce/Vm Creation" linkTitle: "gce/vm-creation" weight: 3 type: docs description: > Runbook for diagnosing VM creation issues. --- **Product**: [Compute Engine](https://cloud.google.com/compute) **Kind**: Debugging Tree ### Description This runbook helps identify and resolve issues related to VM creation in Google Cloud. - Checks for quota-related issues. - Checks for permission-related issues. - Checks for conflicts such as resource already existing. ### Executing this runbook ```shell gcpdiag runbook gce/vm-creation \ -p project_id=value \ -p instance_name=value \ -p zone=value \ -p principal=value \ -p start_time=value \ -p end_time=value \ -p check_zone_separation_policy=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID which will host the VM to be created. | | `instance_name` | True | None | str | The name of the VM to be created. | | `zone` | True | None | str | The Google Cloud zone of the VM to be created. | | `principal` | False | None | str | The authenticated principal that initiated the VM creation. | | `start_time` | False | None | datetime | The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ | | `check_zone_separation_policy` | False | False | bool | Check if the zone separation policy is enforced. | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Start Step](/runbook/steps/gcpdiag/start-step) - [Investigate Vm Creation Log Failure](/runbook/steps/gce/investigate-vm-creation-log-failure) - [Org Policy Check](/runbook/steps/crm/org-policy-check) - [End Step](/runbook/steps/gcpdiag/end-step) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gce/vm-performance.md ================================================ --- title: "gce/Vm Performance" linkTitle: "gce/vm-performance" weight: 3 type: docs description: > Google Compute Engine VM performance checks --- **Product**: [Compute Engine](https://cloud.google.com/compute) **Kind**: Debugging Tree ### Description This runbook is designed to assist you in investigating and understanding the underlying reasons behind the performance issues of your Google Compute Engine VMs within Google Cloud Platform. Key Investigation Areas: - High CPU utilisation - CPU Over-commitment for E2 or Sole-Tenant VMs - High Memory utilisation - Disk space high utilisation - High Disk IOPS utilisation - High Disk Throughput utilisation - Disk Health check - Disk IO latency check - Disk Slowness check - Check for Live Migrations - Usual Error checks in Serial console logs ### Executing this runbook ```shell gcpdiag runbook gce/vm-performance \ -p project_id=value \ -p name=value \ -p instance_name=value \ -p zone=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID associated with the VM having performance issues. | | `name` | False | None | str | The name of the VM having performance issues. Or provide the id i.e -p name= | | `instance_name` | True | None | str | The name of the VM having performance issues. Or provide the id i.e -p name= | | `zone` | True | None | str | The Google Cloud zone where the VM having performance issues, is located. | | `start_time` | False | None | datetime | The start window(in UTC) to investigate vm performance issues.Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | The end window(in UTC) for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Vm Performance Start](/runbook/steps/gce/vm-performance-start) - [Vm Lifecycle State](/runbook/steps/gce/vm-lifecycle-state) - [High Vm Cpu Utilization](/runbook/steps/gce/high-vm-cpu-utilization) - [Cpu Overcommitment Check](/runbook/steps/gce/cpu-overcommitment-check) - [High Vm Memory Utilization](/runbook/steps/gce/high-vm-memory-utilization) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Disk Health Check](/runbook/steps/gce/disk-health-check) - [High Vm Disk Utilization](/runbook/steps/gce/high-vm-disk-utilization) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check) - [Disk Avg Io Latency Check](/runbook/steps/gce/disk-avg-io-latency-check) - [Check Live Migrations](/runbook/steps/gce/check-live-migrations) - [Disk Iops Throughput Utilisation Checks](/runbook/steps/gce/disk-iops-throughput-utilisation-checks) - [Disk Iops Throughput Utilisation Checks](/runbook/steps/gce/disk-iops-throughput-utilisation-checks) - [Vm Performance End](/runbook/steps/gce/vm-performance-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gce/vm-termination.md ================================================ --- title: "gce/Vm Termination" linkTitle: "gce/vm-termination" weight: 3 type: docs description: > GCE Instance unexpected shutdowns and reboots diagnostics --- **Product**: [Compute Engine](https://cloud.google.com/compute) **Kind**: Debugging Tree ### Description This runbook assists in investigating and understanding the reasons behind unexpected terminations or reboots of GCE Virtual Machines (VMs). Areas investigated: - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud systems due to maintenance events, hardware failures, or resource constraints. - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions, such as API calls made by users or service accounts, including manual shutdowns, restarts, or automated processes impacting VM states. ### Executing this runbook ```shell gcpdiag runbook gce/vm-termination \ -p project_id=value \ -p instance_name=value \ -p instance_id=value \ -p zone=value \ -p start_time=value \ -p end_time=value \ -p operation_type=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID hosting the terminated VM. | | `instance_name` | True | None | str | The name of the terminated VM. Or provide the id i.e -p id= | | `instance_id` | False | None | int | The instance ID of the terminated VM. Or provide name instead i.e -p name= | | `zone` | True | None | str | The Google Cloud zone where the terminated VM is located. | | `start_time` | False | None | datetime | The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ | | `operation_type` | False | None | str | The type of operation to investigate. eg. "compute.instances.hostError" | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Vm Termination Start](/runbook/steps/gce/vm-termination-start) - [Termination Operation Type](/runbook/steps/gce/termination-operation-type) - [Managed Instance Group Recreation](/runbook/steps/gce/managed-instance-group-recreation) - [Preemptible Instance](/runbook/steps/gce/preemptible-instance) - [Host Error](/runbook/steps/gce/host-error) - [Guest Os Issued Shutdown](/runbook/steps/gce/guest-os-issued-shutdown) - [Terminate On Host Maintenance](/runbook/steps/gce/terminate-on-host-maintenance) - [Stop Operation Gateway](/runbook/steps/gce/stop-operation-gateway) - [Vm Termination End](/runbook/steps/gce/vm-termination-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gcf/_index.md ================================================ --- title: "GCF" linkTitle: "gcf" type: docs weight: 2 --- All diagnostic tree available in gcf ================================================ FILE: website/content/en/runbook/diagnostic-trees/gcf/failed-deployments.md ================================================ --- title: "gcf/Failed Deployments" linkTitle: "gcf/failed-deployments" weight: 3 type: docs description: > Cloud Run function failed deployments check --- **Product**: [Cloud Functions](https://cloud.google.com/functions) **Kind**: Debugging Tree ### Description This runbook will assist users to check reasons for failed deployments of Gen2 cloud functions. Current basic Validations: - Check for existence of Default SA - Check for existence of Cloud function Service Agent - Check for existence of cloud functions Service Agent and its permissions - Check for error logs for global scope code errors and resource location constraint. ### Executing this runbook ```shell gcpdiag runbook gcf/failed-deployments \ -p project_id=value \ -p name=value \ -p cloud_function_name=value \ -p region=value \ -p start_time=value \ -p end_time=value \ -p gac_service_account=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID containing the cloud function | | `name` | False | None | str | Name of the cloud function failing deployment | | `cloud_function_name` | True | None | str | Name of the cloud function failing deployment | | `region` | True | None | str | Region of the cloud function failing deployment | | `start_time` | False | None | datetime | Start time of the issue Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | End time of the issue. Format: YYYY-MM-DDTHH:MM:SSZ | | `gac_service_account` | False | None | str | Service account used by the user for deployment. | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Failed Deployments Start](/runbook/steps/gcf/failed-deployments-start) - [Default Service Account Check](/runbook/steps/gcf/default-service-account-check) - [Iam Policy Check](/runbook/steps/iam/iam-policy-check) - [User Service Account Check](/runbook/steps/gcf/user-service-account-check) - [Function Global Scope Check](/runbook/steps/gcf/function-global-scope-check) - [Location Constraint Check](/runbook/steps/gcf/location-constraint-check) - [Failed Deployment End Step](/runbook/steps/gcf/failed-deployment-end-step) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/_index.md ================================================ --- title: "GKE" linkTitle: "gke" type: docs weight: 2 --- All diagnostic tree available in gke ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/cluster-autoscaler.md ================================================ --- title: "gke/Cluster Autoscaler" linkTitle: "gke/cluster-autoscaler" weight: 3 type: docs description: > Analyses logs in the project where the cluster is running. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description If there are log entries that contain messages listed in the public documentation https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#messages then provide details on how each particular issue can be solved. The following ScaleUP logs messages are covered: - scale.up.error.out.of.resources - scale.up.error.quota.exceeded - scale.up.error.waiting.for.instances.timeout - scale.up.error.ip.space.exhausted - scale.up.error.service.account.deleted The following ScaleDown logs messages are covered: - scale.down.error.failed.to.evict.pods - no.scale.down.node.node.group.min.size.reached - no.scale.down.node.scale.down.disabled.annotation - no.scale.down.node.minimal.resource.limits.exceeded - no.scale.down.node.no.place.to.move.pods - no.scale.down.node.pod.not.backed.by.controller - no.scale.down.node.pod.not.safe.to.evict.annotation - no.scale.down.node.pod.kube.system.unmovable - no.scale.down.node.pod.not.enough.pdb - no.scale.down.node.pod.controller.not.found - no.scale.down.node.pod.unexpected.error ### Executing this runbook ```shell gcpdiag runbook gke/cluster-autoscaler \ -p project_id=value \ -p name=value \ -p gke_cluster_name=value \ -p location=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The ID of the project hosting the GKE Cluster | | `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster | | `location` | True | None | str | The zone or region of the GKE cluster | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Cluster Autoscaler Start](/runbook/steps/gke/cluster-autoscaler-start) - [Ca Out Of Resources](/runbook/steps/gke/ca-out-of-resources) - [Ca Quota Exceeded](/runbook/steps/gke/ca-quota-exceeded) - [Ca Instance Timeout](/runbook/steps/gke/ca-instance-timeout) - [Ca Ip Space Exhausted](/runbook/steps/gke/ca-ip-space-exhausted) - [Ca Service Account Deleted](/runbook/steps/gke/ca-service-account-deleted) - [Ca Min Size Reached](/runbook/steps/gke/ca-min-size-reached) - [Ca Failed To Evict Pods](/runbook/steps/gke/ca-failed-to-evict-pods) - [Ca Disabled Annotation](/runbook/steps/gke/ca-disabled-annotation) - [Ca Min Resource Limit Exceeded](/runbook/steps/gke/ca-min-resource-limit-exceeded) - [Ca No Place To Move Pods](/runbook/steps/gke/ca-no-place-to-move-pods) - [Ca Pods Not Backed By Controller](/runbook/steps/gke/ca-pods-not-backed-by-controller) - [Ca Not Safe To Evict Annotation](/runbook/steps/gke/ca-not-safe-to-evict-annotation) - [Ca Pod Kube System Unmovable](/runbook/steps/gke/ca-pod-kube-system-unmovable) - [Ca Pod Not Enough Pdb](/runbook/steps/gke/ca-pod-not-enough-pdb) - [Ca Pod Controller Not Found](/runbook/steps/gke/ca-pod-controller-not-found) - [Ca Pod Unexpected Error](/runbook/steps/gke/ca-pod-unexpected-error) - [Cluster Autoscaler End](/runbook/steps/gke/cluster-autoscaler-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/gke-ip-masq-standard.md ================================================ --- title: "gke/Gke Ip Masq Standard" linkTitle: "gke/gke-ip-masq-standard" weight: 3 type: docs description: > This runbook will analyze symptoms for IP Masquerading issues on GKE Cluster. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description It examines the following: - Are there any traffic logs to destination IP? - Is ip-masq-agent DaemonSet in kube-system namespace? - Is ip-masq-agent Configmap in kube-system namespace? - Is GKE node IP and Pod IP are under nonMasquerade CIDR? - Is Destination IP is under are under nonMasquerade CIDR? ### Executing this runbook ```shell gcpdiag runbook gke/gke-ip-masq-standard \ -p project_id=value \ -p src_ip=value \ -p dest_ip=value \ -p pod_ip=value \ -p name=value \ -p gke_cluster_name=value \ -p location=value \ -p node_ip=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `src_ip` | False | None | IPv4Address | The source IP from where connection is generated | | `dest_ip` | True | None | IPv4Address | The Destination IP is where the request is sending (Example : 8.8.8.8) | | `pod_ip` | False | None | str | GKE Pod IP address or pod address range(Example 192.168.1.0/24) | | `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `gke_cluster_name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `location` | False | None | str | The zone or region of the GKE cluster | | `node_ip` | False | None | str | GKE Node IP address or address range/CIDR (Example 192.168.1.0/24) | | `start_time` | False | None | datetime | Start time of the issue | | `end_time` | False | None | datetime | End time of the issue | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Gke Ip Masq Standard Start](/runbook/steps/gke/gke-ip-masq-standard-start) - [Nodeproblem](/runbook/steps/gke/nodeproblem) - [Check Daemon Set](/runbook/steps/gke/check-daemon-set) - [Check Config Map](/runbook/steps/gke/check-config-map) - [Check Pod Ip](/runbook/steps/gke/check-pod-ip) - [Check Node Ip](/runbook/steps/gke/check-node-ip) - [Check Destination Ip](/runbook/steps/gke/check-destination-ip) - [Gke Ip Masq Standard End](/runbook/steps/gke/gke-ip-masq-standard-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/image-pull.md ================================================ --- title: "gke/Image Pull" linkTitle: "gke/image-pull" weight: 3 type: docs description: > Analysis and Resolution of Image Pull Failures on GKE clusters. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description This runbook investigates the gke cluster for Image pull failures and recommends remediation steps. Areas Examined: - GKE cluster - Stackdriver logs ### Executing this runbook ```shell gcpdiag runbook gke/image-pull \ -p project_id=value \ -p name=value \ -p gke_cluster_name=value \ -p location=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster | | `location` | True | None | str | The zone or region of the GKE cluster | | `start_time` | False | None | datetime | (Optional) The start window to query the logs. Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | (Optional) The end window for the logs. Format: YYYY-MM-DDTHH:MM:SSZ | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Image Pull Start](/runbook/steps/gke/image-pull-start) - [Image Not Found](/runbook/steps/gke/image-not-found) - [Image Forbidden](/runbook/steps/gke/image-forbidden) - [Image Dns Issue](/runbook/steps/gke/image-dns-issue) - [Image Connection Timeout Restricted Private](/runbook/steps/gke/image-connection-timeout-restricted-private) - [Image Connection Timeout](/runbook/steps/gke/image-connection-timeout) - [Image Not Found Insufficient Scope](/runbook/steps/gke/image-not-found-insufficient-scope) - [Image Pull End](/runbook/steps/gke/image-pull-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/ip-exhaustion.md ================================================ --- title: "gke/Ip Exhaustion" linkTitle: "gke/ip-exhaustion" weight: 3 type: docs description: > Troubleshooting ip exhaustion issues on GKE clusters. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description This runbook investigates the gke cluster for ip exhaustion issues and recommends remediation steps. Areas Examined: - GKE cluster type. - GKE cluster and nodepool configuration - Stackdriver logs ### Executing this runbook ```shell gcpdiag runbook gke/ip-exhaustion \ -p project_id=value \ -p name=value \ -p gke_cluster_name=value \ -p location=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The ID of the project hosting the GKE Cluster | | `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster | | `location` | True | None | str | The zone or region of the GKE cluster | | `start_time` | False | None | datetime | The start window to investigate the ip exhaustion. Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | The end window to investigate the ip exhaustion. Format: YYYY-MM-DDTHH:MM:SSZ | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Ip Exhaustion Start](/runbook/steps/gke/ip-exhaustion-start) - [Node Ip Range Exhaustion](/runbook/steps/gke/node-ip-range-exhaustion) - [Pod Ip Range Exhaustion](/runbook/steps/gke/pod-ip-range-exhaustion) - [Ip Exhaustion End](/runbook/steps/gke/ip-exhaustion-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/logs.md ================================================ --- title: "gke/Logs" linkTitle: "gke/logs" weight: 3 type: docs description: > Provides a methodical approach to troubleshooting GKE logging issues. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description This runbook guides you through a systematic investigation of potential causes when logs from the Google Kubernetes Engine (GKE) cluster are missing or incomplete. The focus is on core configuration settings that are essential for proper logging functionality. The following areas are examined: - **Project-Level Logging:** Ensures that the Google Cloud project housing the GKE cluster has the Cloud Logging API enabled. - **Cluster-Level Logging:** Verifies that logging is explicitly enabled within the GKE cluster's configuration. - **Node Pool Permissions:** Confirms that the nodes within the cluster's node pools have the 'Cloud Logging Write' scope enabled, allowing them to send log data. - **Service Account Permissions:** Validates that the service account used by the node pools possesses the necessary IAM permissions to interact with Cloud Logging. Specifically, the "roles/logging.logWriter" role is typically required. - **Cloud Logging API Write Quotas:** Verifies that Cloud Logging API Write quotas have not been exceeded within the specified timeframe. ### Executing this runbook ```shell gcpdiag runbook gke/logs \ -p project_id=value \ -p name=value \ -p gke_cluster_name=value \ -p location=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The ID of the project hosting the GKE Cluster | | `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `gke_cluster_name` | True | None | str | The name of the GKE cluster | | `location` | True | None | str | The zone or region of the GKE cluster | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Logs Start](/runbook/steps/gke/logs-start) - [Logging Api Enabled](/runbook/steps/gke/logging-api-enabled) - [Cluster Level Logging Enabled](/runbook/steps/gke/cluster-level-logging-enabled) - [Node Pool Cloud Logging Access Scope](/runbook/steps/gke/node-pool-cloud-logging-access-scope) - [Service Account Logging Permission](/runbook/steps/gke/service-account-logging-permission) - [Logging Write Api Quota Exceeded](/runbook/steps/gke/logging-write-api-quota-exceeded) - [Logs End](/runbook/steps/gke/logs-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/monitoring-configuration.md ================================================ --- title: "gke/Monitoring Configuration" linkTitle: "gke/monitoring-configuration" weight: 3 type: docs description: > Verifies that GKE Monitoring and its components are correctly configured and operational. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description This runbook guides through a systematic investigation of potential causes when monitoring from the Google Kubernetes Engine (GKE) cluster are missing or incomplete. The focus is on core configuration settings that are essential for proper monitoring functionality. The following areas are examined: - **Project-Level Monitoring:** Ensures that the Google Cloud project housing the GKE cluster has the Cloud Monitoring API enabled. - **Cluster-Level Monitoring:** Verifies that monitoring is explicitly enabled within the GKE cluster's configuration. - **Node Pool Permissions:** Confirms that the nodes within the cluster's node pools have the 'Cloud Monitoring Write' scope enabled, allowing them to send metrics data. - **Service Account Permissions:** Validates that the service account used by the node pools possesses the necessary IAM permissions to interact with Cloud Monitoring. Specifically, the "roles/monitoring.metricWriter" role is typically required. ### Executing this runbook ```shell gcpdiag runbook gke/monitoring-configuration \ -p project_id=value \ -p gke_cluster_name=value \ -p location=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The ID of the project hosting the GKE Cluster | | `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster | | `location` | True | None | str | The zone or region of the GKE cluster | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Monitoring Configuration Start](/runbook/steps/gke/monitoring-configuration-start) - [Monitoring Api Configuration Enabled](/runbook/steps/gke/monitoring-api-configuration-enabled) - [Cluster Level Monitoring Configuration Enabled](/runbook/steps/gke/cluster-level-monitoring-configuration-enabled) - [Node Pool Cloud Monitoring Access Scope Configuration](/runbook/steps/gke/node-pool-cloud-monitoring-access-scope-configuration) - [Service Account Monitoring Permission Configuration](/runbook/steps/gke/service-account-monitoring-permission-configuration) - [Monitoring Configuration End](/runbook/steps/gke/monitoring-configuration-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/node-auto-repair.md ================================================ --- title: "gke/Node Auto Repair" linkTitle: "gke/node-auto-repair" weight: 3 type: docs description: > Provides the reason why a Node was auto-repaired --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description This runbook checks if: - Node auto-repair is enabled on the cluster - Nodes was repaired because it was in NotReady status for more than 10 minutes - Nodes was repaired because it had disk pressure - Nodes was repaired because of unallocatable GPUs - Nodes was repaired because of unallocatable TPUs ### Executing this runbook ```shell gcpdiag runbook gke/node-auto-repair \ -p project_id=value \ -p name=value \ -p gke_cluster_name=value \ -p node=value \ -p location=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The ID of the project hosting the GKE Cluster | | `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `gke_cluster_name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `node` | True | None | str | The node name with issues. | | `location` | False | None | str | The zone or region of the GKE cluster | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Node Auto Repair Start](/runbook/steps/gke/node-auto-repair-start) - [Node Not Ready](/runbook/steps/gke/node-not-ready) - [Node Disk Full](/runbook/steps/gke/node-disk-full) - [Unallocatable Gpu](/runbook/steps/gke/unallocatable-gpu) - [Unallocatable Tpu](/runbook/steps/gke/unallocatable-tpu) - [Node Auto Repair End](/runbook/steps/gke/node-auto-repair-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/node-bootstrapping.md ================================================ --- title: "gke/Node Bootstrapping" linkTitle: "gke/node-bootstrapping" weight: 3 type: docs description: > Analyses issues experienced when adding nodes to your GKE Standard cluster. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description This runbook requires at least - location and node parameters. Location here is the zone where the node is running, for example us-central1-c. - location, nodepool and cluster name parameters to be provided. Location is zone or region for a nodepool, if the cluster is a regional cluster, then location for a nodepool will be the cluster region. For example a region could be us-central1. If a location/node pair is provided, the runbook will check the Node Registration Checker output for the given location/node pair. If a location, nodepool and GKE cluster name parameters are provided, the runbook will check for any errors that might have occurred when the instances.insert method was invoked for the given parameters. ### Executing this runbook ```shell gcpdiag runbook gke/node-bootstrapping \ -p project_id=value \ -p location=value \ -p node=value \ -p nodepool=value \ -p name=value \ -p gke_cluster_name=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The ID of the project hosting the GKE Cluster | | `location` | True | None | str | The location where the node or nodepool is. For a node, location will be the zone where the node is running (i.e. us-central1-c). For a nodepool, this can be the zone or the region (i.e. us-central1) where the nodepool is configured | | `node` | False | None | str | The node name that is failing to register (if available). If node name is not available, please provide the nodepool name where nodes aren't registering | | `nodepool` | False | None | str | The nodepool name where nodes aren't registering, if a node name is not available | | `name` | False | None | str | The GKE cluster name. When providing nodepool name, please provide the GKE cluster name as well to be able to properly filter events in the logging query. | | `gke_cluster_name` | False | None | str | The GKE cluster name. When providing nodepool name, please provide the GKE cluster name as well to be able to properly filter events in the logging query. | | `start_time` | False | None | datetime | The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Node Bootstrapping Start](/runbook/steps/gke/node-bootstrapping-start) - [Node Insert Check](/runbook/steps/gke/node-insert-check) - [Node Registration Success](/runbook/steps/gke/node-registration-success) - [Node Bootstrapping End](/runbook/steps/gke/node-bootstrapping-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/node-unavailability.md ================================================ --- title: "gke/Node Unavailability" linkTitle: "gke/node-unavailability" weight: 3 type: docs description: > Identifies the reasons for a GKE node being unavailable. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description This runbook investigates various factors that may have caused a node to become unavailable, including: - Live Migration - Preemption - Removal by the Cluster Autoscaler - Node Pool Upgrade ### Executing this runbook ```shell gcpdiag runbook gke/node-unavailability \ -p project_id=value \ -p name=value \ -p gke_cluster_name=value \ -p node=value \ -p location=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The ID of the project hosting the GKE Cluster | | `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `gke_cluster_name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `node` | True | None | str | The node name that was started. | | `location` | False | None | str | The zone or region of the GKE cluster | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Node Unavailability Start](/runbook/steps/gke/node-unavailability-start) - [Live Migration](/runbook/steps/gke/live-migration) - [Preemption Condition](/runbook/steps/gke/preemption-condition) - [Node Removed By Autoscaler](/runbook/steps/gke/node-removed-by-autoscaler) - [Node Pool Upgrade](/runbook/steps/gke/node-pool-upgrade) - [Node Unavailability End](/runbook/steps/gke/node-unavailability-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/gke/resource-quotas.md ================================================ --- title: "gke/Resource Quotas" linkTitle: "gke/resource-quotas" weight: 3 type: docs description: > Analyses logs in the project where the cluster is running. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) **Kind**: Debugging Tree ### Description If there are log entries that contain messages listed in the public documentation https://cloud.google.com/knowledge/kb/google-kubernetes-engine-pods-fail-to-start-due-to-exceeded-quota-000004701 then provide details on how this issue can be solved. ### Executing this runbook ```shell gcpdiag runbook gke/resource-quotas \ -p project_id=value \ -p name=value \ -p gke_cluster_name=value \ -p location=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster | | `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster | | `location` | True | None | str | (Optional) The zone or region of the GKE cluster | | `start_time` | False | None | datetime | (Optional) The start window to query the logs. Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | (Optional) The end window for the logs. Format: YYYY-MM-DDTHH:MM:SSZ | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Resource Quotas Start](/runbook/steps/gke/resource-quotas-start) - [Service Api Status Check](/runbook/steps/gcp/service-api-status-check) - [Cluster Version](/runbook/steps/gke/cluster-version) - [Resource Quota Exceeded](/runbook/steps/gke/resource-quota-exceeded) - [Resource Quotas End](/runbook/steps/gke/resource-quotas-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/interconnect/_index.md ================================================ --- title: "INTERCONNECT" linkTitle: "interconnect" type: docs weight: 2 --- All diagnostic tree available in interconnect ================================================ FILE: website/content/en/runbook/diagnostic-trees/interconnect/bgp-down-flap.md ================================================ --- title: "interconnect/Bgp Down Flap" linkTitle: "interconnect/bgp-down-flap" weight: 3 type: docs description: > This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect) **Kind**: Debugging Tree ### Description The following steps are executed: - Check BGP down status: Check if any vlan attachment has BGP down state. - Check Interconnect maintenance: Check if there are interconnect maintenance events are associated with the BGP down vlan attachments. - Check BGP flap status: Check if any BGP flaps happened. - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events are associated with the BGP flaps. ### Executing this runbook ```shell gcpdiag runbook interconnect/bgp-down-flap \ -p project_id=value \ -p region=value \ -p attachment_name=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `region` | True | None | str | The region where the vlan attachment is located | | `attachment_name` | True | None | str | The attachment name(s) as comma-separated values or a regular expression. eg: vlan1,vlan2 or vlan.* or .* for all attachments | | `start_time` | False | None | datetime | The start window to investigate BGP flap. Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Bgp Down Flap Start](/runbook/steps/interconnect/bgp-down-flap-start) - [Check Bgp Down](/runbook/steps/interconnect/check-bgp-down) - [Check Interconnect Maintenance](/runbook/steps/interconnect/check-interconnect-maintenance) - [Check Bgp Flap](/runbook/steps/interconnect/check-bgp-flap) - [Check Cloud Router Maintenance](/runbook/steps/interconnect/check-cloud-router-maintenance) - [Bgp Down Flap End](/runbook/steps/interconnect/bgp-down-flap-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/lb/_index.md ================================================ --- title: "LB" linkTitle: "lb" type: docs weight: 2 --- All diagnostic tree available in lb ================================================ FILE: website/content/en/runbook/diagnostic-trees/lb/latency.md ================================================ --- title: "lb/Latency" linkTitle: "lb/latency" weight: 3 type: docs description: > This runbook diagnoses and troubleshoots latency issues with Application Load Balancers. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing) **Kind**: Debugging Tree ### Description It analyzes key metrics to identify potential bottlenecks and performance problems. Key Investigation Areas: - Backend Latency: - Measures the time taken for backends to respond to requests, checking if it exceeds a configurable threshold. - Request Count Per Second (QPS): - Monitors the rate of incoming requests to the load balancer, checking if it exceeds a configurable threshold. A high request count coupled with high latency might suggest overload. - 5xx Error Rate: - Calculates the percentage of 5xx server errors, indicating problems on the backend servers. This check uses a configurable threshold and considers the request count to provide a meaningful error rate. ### Executing this runbook ```shell gcpdiag runbook lb/latency \ -p project_id=value \ -p forwarding_rule_name=value \ -p region=value \ -p backend_latency_threshold=value \ -p request_count_threshold=value \ -p error_rate_threshold=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID where the load balancer is located | | `forwarding_rule_name` | True | None | str | The name of the forwarding rule associated with the Load Balancer to check | | `region` | False | None | str | The region where the forwarding rule is located | | `backend_latency_threshold` | False | None | float | Threshold for backend latency in milliseconds. | | `request_count_threshold` | False | None | float | Threshold for average request count per second. | | `error_rate_threshold` | False | None | float | Threshold for error rate (percentage of 5xx errors). | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Lb Latency Start](/runbook/steps/lb/lb-latency-start) - [Lb Backend Latency Check](/runbook/steps/lb/lb-backend-latency-check) - [Lb Request Count Check](/runbook/steps/lb/lb-request-count-check) - [Lb Error Rate Check](/runbook/steps/lb/lb-error-rate-check) - [Latency End](/runbook/steps/lb/latency-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/lb/ssl-certificates.md ================================================ --- title: "lb/Ssl Certificates" linkTitle: "lb/ssl-certificates" weight: 3 type: docs description: > This runbook diagnoses and troubleshoots issues with SSL certificates. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing) **Kind**: Debugging Tree ### Description The supported certificates are Google-managed classic certificates attached to load balancers. It helps identify and resolve common problems that prevent certificates from provisioning or functioning correctly. Key Investigation Area: - Certificate Status: - Checks the certificate's provisioning status and identifies any failed domains. - Domain Validation: - Verifies DNS configuration for each domain, ensuring proper A/AAAA records and the absence of conflicting records. - Load Balancer Configuration: - Confirms the certificate is correctly attached to a target proxy and associated with a forwarding rule using port 443. - Conflicting resources: - Ensures no certificate map is attached to the target proxy, which can interfere with Google-managed certificates. - Provisioning Time: - Checks Cloud Logging to determine when the certificate was attached and allows sufficient time for propagation. ### Executing this runbook ```shell gcpdiag runbook lb/ssl-certificates \ -p project_id=value \ -p certificate_name=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `certificate_name` | True | None | str | The name of the SSLcertificate that you want to investigate | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Ssl Certificates Start](/runbook/steps/lb/ssl-certificates-start) - [Analyze Certificate Status](/runbook/steps/lb/analyze-certificate-status) - [Analyze Domain Statuses](/runbook/steps/lb/analyze-domain-statuses) - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains) - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains) - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains) - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains) - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains) - [Ssl Certificates End](/runbook/steps/lb/ssl-certificates-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/lb/unhealthy-backends.md ================================================ --- title: "lb/Unhealthy Backends" linkTitle: "lb/unhealthy-backends" weight: 3 type: docs description: > Load Balancer Unhealthy Backends Analyzer. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing) **Kind**: Debugging Tree ### Description This runbook helps investigate why backends in a load balancer are unhealthy. It confirms and summarizes the current health status of the backends, aiding in identifying any unhealthy instances. Key Investigation Areas: - Firewalls: - Verifies if firewall rules are properly configured to allow health check traffic. - Port Configuration: - Checks if health check sends probe requests to the different port than serving port. This may be intentional or a potential configuration error, and the runbook will provide guidance on the implications. - Protocol Configuration: - Checks if health check uses the same protocol as backend service. This may be intentional or a potential configuration error, and the runbook will provide guidance on the implications. - Logging: - Checks if health check logging is enabled to aid in troubleshooting. - Health Check Logs (if enabled): - Analyzes the latest health check logs to identify the specific reasons for backend unhealthiness: - Timeouts: Identifies if the backend is timing out and provides potential causes and remediation steps. - Unhealthy: Indicates that the backend is reachable but doesn't meet the health check's criteria. It provides guidance on the expected health check behavior and suggests configuration checks. - Unknown: Explains the potential reasons for the "UNKNOWN" health state and suggests actions like adjusting timeouts or checking for Google Cloud outages. - Past Health Check Success: - Checks if the health check has worked successfully in the past to determine if the issue is recent or ongoing. - VM Performance: - Checks if the instances performance is degraded - disks, memory and cpu utilization are being checked. ### Executing this runbook ```shell gcpdiag runbook lb/unhealthy-backends \ -p project_id=value \ -p backend_service_name=value \ -p region=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `backend_service_name` | True | None | str | The name of the backend service that you want to investigate | | `region` | False | None | str | The region configured for the load balancer (backend service). If not provided, the backend service is assumed to be global. | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Unhealthy Backends Start](/runbook/steps/lb/unhealthy-backends-start) - [Verify Health Check Logging Enabled](/runbook/steps/lb/verify-health-check-logging-enabled) - [Analyze Latest Health Check Log](/runbook/steps/lb/analyze-latest-health-check-log) - [Check Past Health Check Success](/runbook/steps/lb/check-past-health-check-success) - [Validate Backend Service Port Configuration](/runbook/steps/lb/validate-backend-service-port-configuration) - [Validate Backend Service Protocol Configuration](/runbook/steps/lb/validate-backend-service-protocol-configuration) - [Verify Firewall Rules](/runbook/steps/lb/verify-firewall-rules) - [Check Vm Performance](/runbook/steps/lb/check-vm-performance) - [High Vm Memory Utilization](/runbook/steps/gce/high-vm-memory-utilization) - [High Vm Disk Utilization](/runbook/steps/gce/high-vm-disk-utilization) - [High Vm Cpu Utilization](/runbook/steps/gce/high-vm-cpu-utilization) - [Unhealthy Backends End](/runbook/steps/lb/unhealthy-backends-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/nat/_index.md ================================================ --- title: "NAT" linkTitle: "nat" type: docs weight: 2 --- All diagnostic tree available in nat ================================================ FILE: website/content/en/runbook/diagnostic-trees/nat/public-nat-ip-allocation-failed.md ================================================ --- title: "nat/Public Nat Ip Allocation Failed" linkTitle: "nat/public-nat-ip-allocation-failed" weight: 3 type: docs description: > Troubleshooting for IP Allocation issues for Cloud NAT. --- **Product**: [Cloud NAT](https://cloud.google.com/nat) **Kind**: Debugging Tree ### Description This runbook investigates Cloud NAT for NAT IP Allocation failed issue and proposes remediation steps. Areas Examined: - Metric check: Checks the NAT Allocation Failed metric for the provided NATGW if it is True or False. - NATGW Configuration: Checks the gateway if it is configured with manual or automatic IP allocation. - NAT IP and Port calculation: For source nic without an External IP address, verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW. ### Executing this runbook ```shell gcpdiag runbook nat/public-nat-ip-allocation-failed \ -p project_id=value \ -p nat_gateway_name=value \ -p cloud_router_name=value \ -p network=value \ -p nat_network=value \ -p region=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `nat_gateway_name` | True | None | str | The name of the NATGW | | `cloud_router_name` | True | None | str | The name of the Cloud Router of the NATGW | | `network` | False | None | str | The VPC network of the target NATGW | | `nat_network` | True | None | str | The VPC network of the target NATGW | | `region` | True | None | str | The region of the target NATGW | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Nat Ip Allocation Failed Start](/runbook/steps/nat/nat-ip-allocation-failed-start) - [Nat Allocation Failed Check](/runbook/steps/nat/nat-allocation-failed-check) - [Nat Ip Allocation Method Check](/runbook/steps/nat/nat-ip-allocation-method-check) - [Nat Ip Allocation Auto Only](/runbook/steps/nat/nat-ip-allocation-auto-only) - [Nat Ip Allocation Manual Only](/runbook/steps/nat/nat-ip-allocation-manual-only) - [Nat Ip Allocation Failed End](/runbook/steps/nat/nat-ip-allocation-failed-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/pubsub/_index.md ================================================ --- title: "PUBSUB" linkTitle: "pubsub" type: docs weight: 2 --- All diagnostic tree available in pubsub ================================================ FILE: website/content/en/runbook/diagnostic-trees/pubsub/bigquery-subscription-delivery.md ================================================ --- title: "pubsub/Bigquery Subscription Delivery" linkTitle: "pubsub/bigquery-subscription-delivery" weight: 3 type: docs description: > Troubleshoot BigQuery Subscription Errors --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/) **Kind**: Debugging Tree ### Description A diagnostic guide to help you resolve common issues causing message delivery failures from Pub/Sub to BigQuery. ### Executing this runbook ```shell gcpdiag runbook pubsub/bigquery-subscription-delivery \ -p project_id=value \ -p subscription_name=value \ -p table_id=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `subscription_name` | True | None | str | The Pub/Sub subscription ID | | `table_id` | True | None | str | The BigQuery table ID in the format "project_id:dataset.table" or "dataset.table" | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Start Step](/runbook/steps/gcpdiag/start-step) - [Subscription Existence Check](/runbook/steps/pubsub/subscription-existence-check) - [Big Query Table Existence Check](/runbook/steps/pubsub/big-query-table-existence-check) - [Big Query Writer Permission Check](/runbook/steps/pubsub/big-query-writer-permission-check) - [Subscription Status Check](/runbook/steps/pubsub/subscription-status-check) - [Pubsub Quotas](/runbook/steps/pubsub/pubsub-quotas) - [Investigate Bq Push Errors](/runbook/steps/pubsub/investigate-bq-push-errors) - [Throughput Qualification](/runbook/steps/pubsub/throughput-qualification) - [Dead Letter Topic](/runbook/steps/pubsub/dead-letter-topic) - [Dead Letter Topic Permissions](/runbook/steps/pubsub/dead-letter-topic-permissions) - [End Step](/runbook/steps/gcpdiag/end-step) ================================================ FILE: website/content/en/runbook/diagnostic-trees/pubsub/gcs-subscription-delivery.md ================================================ --- title: "pubsub/Gcs Subscription Delivery" linkTitle: "pubsub/gcs-subscription-delivery" weight: 3 type: docs description: > Troubleshoot Pub/Sub to Cloud Storage subscription issues. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/) **Kind**: Debugging Tree ### Description This runbook checks for common configuration problems with Pub/Sub subscriptions that are set up to write directly to a Google Cloud Storage bucket. Checks performed: - Subscription existence and type. - Cloud Storage bucket existence. - IAM permissions for the Pub/Sub service account on the bucket. - State of the Pub/Sub subscription. ### Executing this runbook ```shell gcpdiag runbook pubsub/gcs-subscription-delivery \ -p project_id=value \ -p subscription_name=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID containing the Pub/Sub subscription | | `subscription_name` | True | None | str | The Pub/Sub subscription ID | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Gcs Subscription Delivery Start](/runbook/steps/pubsub/gcs-subscription-delivery-start) - [Gcs Subscription Existence Check](/runbook/steps/pubsub/gcs-subscription-existence-check) - [Check Gcs Bucket](/runbook/steps/pubsub/check-gcs-bucket) - [Check Service Account Permissions](/runbook/steps/pubsub/check-service-account-permissions) - [Pubsub Quotas](/runbook/steps/pubsub/pubsub-quotas) - [Response Code Step](/runbook/steps/pubsub/response-code-step) - [Active Subscription](/runbook/steps/pubsub/active-subscription) - [Throughput Qualification](/runbook/steps/pubsub/throughput-qualification) - [Dead Letter Topic](/runbook/steps/pubsub/dead-letter-topic) - [Dead Letter Topic Permissions](/runbook/steps/pubsub/dead-letter-topic-permissions) - [Gcs Subscription Delivery End](/runbook/steps/pubsub/gcs-subscription-delivery-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/pubsub/pull-subscription-delivery.md ================================================ --- title: "pubsub/Pull Subscription Delivery" linkTitle: "pubsub/pull-subscription-delivery" weight: 3 type: docs description: > Diagnostic checks for Cloud Pub/Sub pull delivery issues. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/) **Kind**: Debugging Tree ### Description Provides a DiagnosticTree to check for issues related to delivery issues for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues experienced while using Pub/Sub pull subscriptions. - Areas: - delivery latency - quotas - pull rate - throughput rate ### Executing this runbook ```shell gcpdiag runbook pubsub/pull-subscription-delivery \ -p project_id=value \ -p subscription_name=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `subscription_name` | True | None | str | The name of subscription to evaluate in the runbook | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Pull Subscription Delivery Start](/runbook/steps/pubsub/pull-subscription-delivery-start) - [Pubsub Quotas](/runbook/steps/pubsub/pubsub-quotas) - [Pull Rate](/runbook/steps/pubsub/pull-rate) - [Throughput Qualification](/runbook/steps/pubsub/throughput-qualification) - [Pull Subscription Delivery End](/runbook/steps/pubsub/pull-subscription-delivery-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/pubsub/push-subscription-delivery.md ================================================ --- title: "pubsub/Push Subscription Delivery" linkTitle: "pubsub/push-subscription-delivery" weight: 3 type: docs description: > Diagnostic checks for Cloud Pub/Sub push delivery issues. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/) **Kind**: Debugging Tree ### Description Provides a DiagnosticTree to check for issues related to delivery issues for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues experienced while using Pub/Sub push subscriptions, including BQ & GCS subscriptions. - Areas: - subscription status - quotas - push responses - throughput rate - dead letter topic attachment and permissions - vpcsc enablement ### Executing this runbook ```shell gcpdiag runbook pubsub/push-subscription-delivery \ -p project_id=value \ -p subscription_name=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `subscription_name` | True | None | str | The name of subscription to evaluate in the runbook | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Push Subscription Delivery Start](/runbook/steps/pubsub/push-subscription-delivery-start) - [Active Subscription](/runbook/steps/pubsub/active-subscription) - [Pubsub Quotas](/runbook/steps/pubsub/pubsub-quotas) - [Response Code Step](/runbook/steps/pubsub/response-code-step) - [Throughput Qualification](/runbook/steps/pubsub/throughput-qualification) - [Dead Letter Topic](/runbook/steps/pubsub/dead-letter-topic) - [Dead Letter Topic Permissions](/runbook/steps/pubsub/dead-letter-topic-permissions) - [Vpc Sc Step](/runbook/steps/pubsub/vpc-sc-step) - [Push Subscription Delivery End](/runbook/steps/pubsub/push-subscription-delivery-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/vertex/_index.md ================================================ --- title: "VERTEX" linkTitle: "vertex" type: docs weight: 2 --- All diagnostic tree available in vertex ================================================ FILE: website/content/en/runbook/diagnostic-trees/vertex/workbench-instance-stuck-in-provisioning.md ================================================ --- title: "vertex/Workbench Instance Stuck In Provisioning" linkTitle: "vertex/workbench-instance-stuck-in-provisioning" weight: 3 type: docs description: > Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai) **Kind**: Debugging Tree ### Description This runbook investigates root causes for the Workbench Instance to be stuck in provisioning state Areas Examined: - Workbench Instance State: Checks the instance's current state ensuring that it is stuck in provisioning status and not stopped or active. - Workbench Instance Compute Engine VM Boot Disk Image: Checks if the instance has been created with a custom container, the official 'workbench-instances' images, deep learning VMs images, or unsupported images that might cause the instance to be stuck in provisioning state. - Workbench Instance Custom Scripts: Checks if the instance is not using custom scripts that may affect the default configuration of the instance by changing the Jupyter port or breaking dependencies that might cause the instance to be stuck in provisioning state. - Workbench Instance Environment Version: Checks if the instance is using the latest environment version by checking its upgradability. Old versions sometimes are the root cause for the instance to be stuck in provisioning state. - Workbench Instance Compute Engine VM Performance: Checks the VM's current performance, ensuring that it is not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt normal operations. - Workbench Instance Compute Engine Serial Port Logging: Checks if the instance has serial port logs which can be analyzed to ensure Jupyter is running on port 127.0.0.1:8080 which is mandatory. - Workbench Instance Compute Engine SSH and Terminal access: Checks if the instance's compute engine vm is running so the user can ssh and open a terminal to check for space usage in 'home/jupyter'. If no space is left, that may cause the instance to be stuck in provisioning state. - Workbench Instance External IP Disabled: Checks if the external IP disabled. Wrong networking configurations may cause the instance to be stuck in provisioning state. ### Executing this runbook ```shell gcpdiag runbook vertex/workbench-instance-stuck-in-provisioning \ -p project_id=value \ -p instance_name=value \ -p zone=value \ -p start_time=value \ -p end_time=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `instance_name` | True | | str | Name of the Workbench Instance | | `zone` | True | us-central1-a | str | Zone of the Workbench Instance. e.g. us-central1-a | | `start_time` | False | None | datetime | Start time of the issue | | `end_time` | False | None | datetime | End time of the issue | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Workbench Instance Stuck In Provisioning Start](/runbook/steps/vertex/workbench-instance-stuck-in-provisioning-start) - [Check Workbench Instance Using Custom Container](/runbook/steps/vertex/check-workbench-instance-using-custom-container) - [Check Workbench Instance Using Official Image](/runbook/steps/vertex/check-workbench-instance-using-official-image) - [Check Workbench Instance Custom Scripts](/runbook/steps/vertex/check-workbench-instance-custom-scripts) - [Check Workbench Instance Is Using Latest Env Version](/runbook/steps/vertex/check-workbench-instance-is-using-latest-env-version) - [Check Workbench Instance Performance](/runbook/steps/vertex/check-workbench-instance-performance) - [High Vm Memory Utilization](/runbook/steps/gce/high-vm-memory-utilization) - [High Vm Disk Utilization](/runbook/steps/gce/high-vm-disk-utilization) - [High Vm Cpu Utilization](/runbook/steps/gce/high-vm-cpu-utilization) - [Decision Check Workbench Instance System Logging](/runbook/steps/vertex/decision-check-workbench-instance-system-logging) - [Check Workbench Instance Syslogs Jupyter Running On Port 8080](/runbook/steps/vertex/check-workbench-instance-syslogs-jupyter-running-on-port-8080) - [Check Workbench Instance Compute Engine Ssh](/runbook/steps/vertex/check-workbench-instance-compute-engine-ssh) - [Check Workbench Instance Jupyter Space](/runbook/steps/vertex/check-workbench-instance-jupyter-space) - [Check Workbench Instance External Ip Disabled](/runbook/steps/vertex/check-workbench-instance-external-ip-disabled) - [Workbench Instance Stuck In Provisioning End](/runbook/steps/vertex/workbench-instance-stuck-in-provisioning-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/vpc/_index.md ================================================ --- title: "VPC" linkTitle: "vpc" type: docs weight: 2 --- All diagnostic tree available in vpc ================================================ FILE: website/content/en/runbook/diagnostic-trees/vpc/vm-external-ip-connectivity.md ================================================ --- title: "vpc/Vm External Ip Connectivity" linkTitle: "vpc/vm-external-ip-connectivity" weight: 3 type: docs description: > Troubleshooting for common issues which affect VM connectivity to external IP addresses. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc) **Kind**: Debugging Tree ### Description This runbook investigates components required for VMs to establish connectivity to external IP addresses Areas Examined: - VM Instance: - Verify that the VM exists and is running - VM Configuration: - Checks the source nic configuration on the VM if it has an External IP address or not. - VPC routes checks: - Checks the VPC routing rules are configured to allow external connectivity - VPC firewall and firewall policy checks: - Checks the VPC firewall and firewall policies allow external connectivity. - GCE Network Connectivity Tests: - Runs a VPC network connectivity test and reports the result. - NATGW Checks: - For source nics without an External IP address, verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW. ### Executing this runbook ```shell gcpdiag runbook vpc/vm-external-ip-connectivity \ -p project_id=value \ -p name=value \ -p instance_name=value \ -p dest_ip=value \ -p dest_port=value \ -p protocol_type=value \ -p src_nic=value \ -p zone=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `name` | False | None | str | The name of the GCE Instance | | `instance_name` | True | None | str | The name of the GCE Instance | | `dest_ip` | True | None | IPv4Address | External IP the VM is connecting to | | `dest_port` | False | 443 | int | External IP the VM is connecting to | | `protocol_type` | False | tcp | str | Protocol used to connect to SSH | | `src_nic` | True | None | str | VM source NIC | | `zone` | True | None | str | The zone of the target GCE Instance | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Vm External Ip Connectivity Start](/runbook/steps/vpc/vm-external-ip-connectivity-start) - [Service Api Status Check](/runbook/steps/gcp/service-api-status-check) - [Vm Has External Ip](/runbook/steps/vpc/vm-has-external-ip) - [External Interface Check](/runbook/steps/vpc/external-interface-check) - [Internal Interface Check](/runbook/steps/vpc/internal-interface-check) - [Vm External Ip Connectivity End](/runbook/steps/vpc/vm-external-ip-connectivity-end) ================================================ FILE: website/content/en/runbook/diagnostic-trees/vpn/_index.md ================================================ --- title: "VPN" linkTitle: "vpn" type: docs weight: 2 --- All diagnostic tree available in vpn ================================================ FILE: website/content/en/runbook/diagnostic-trees/vpn/vpn-tunnel-check.md ================================================ --- title: "vpn/Vpn Tunnel Check" linkTitle: "vpn/vpn-tunnel-check" weight: 3 type: docs description: > Runbook for diagnosing issues with a Cloud VPN Tunnel. --- **Product**: [Vpn](https://cloud.google.com/hybrid-connectivity) **Kind**: Debugging Tree ### Description This runbook performs several checks on a specified Cloud VPN tunnel: - **VPN Tunnel Status Check**: Verifies if the VPN tunnel is in an 'ESTABLISHED' state. - **Tunnel Down Status Reason**: If the tunnel is not established, it queries Cloud Logging for specific error messages and provide remediations . - **Tunnel Packet Drop Check**: If the tunnel is established, it examines monitoring metrics for various types of packet drops (e.g., due to MTU, invalid SA, throttling) and provides remediation based on the drop reason. - **Tunnel Packet Utilization Check**: Analyzes packet rates to identify if the tunnel is hitting max packet per second limits. ### Executing this runbook ```shell gcpdiag runbook vpn/vpn-tunnel-check \ -p project_id=value \ -p region=value \ -p name=value \ -p start_time=value \ -p end_time=value \ -p tunnel=value ``` #### Parameters | Name | Required | Default | Type | Help | |------|----------|---------|------|------| | `project_id` | True | None | str | The Project ID of the resource under investigation | | `region` | True | None | str | The region where the VPN Tunnel is located | | `name` | True | None | str | Name of the VPN Tunnel | | `start_time` | False | None | datetime | The start window to investigate BGP flap. Format: YYYY-MM-DDTHH:MM:SSZ | | `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ | | `tunnel` | False | None | str | This Flag will be added Automatically | Get help on available commands ```shell gcpdiag runbook --help ``` ### Potential Steps - [Vpn Tunnel Status](/runbook/steps/vpn/vpn-tunnel-status) - [Tunnel Down Status Reason](/runbook/steps/vpn/tunnel-down-status-reason) - [Tunnel Packets Drop Check](/runbook/steps/vpn/tunnel-packets-drop-check) - [Tunnel Packets Utilization Check](/runbook/steps/vpn/tunnel-packets-utilization-check) - [Vpn Tunnel Check End](/runbook/steps/vpn/vpn-tunnel-check-end) ================================================ FILE: website/content/en/runbook/steps/_index.md ================================================ --- title: "All Steps" linkTitle: "steps" type: docs weight: 1 --- All steps available in the runbook by products ================================================ FILE: website/content/en/runbook/steps/bigquery/_index.md ================================================ --- title: "BIGQUERY" linkTitle: "bigquery" type: docs weight: 2 --- All steps available in bigquery ================================================ FILE: website/content/en/runbook/steps/bigquery/big-query-end.md ================================================ --- title: "bigquery/Big Query End" linkTitle: "Big Query End" weight: 3 type: docs description: > End of the runbook. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: END ### Description No more checks to perform. ================================================ FILE: website/content/en/runbook/steps/bigquery/big-query-error-identification.md ================================================ --- title: "bigquery/Big Query Error Identification" linkTitle: "Big Query Error Identification" weight: 3 type: docs description: > Analyzes the job's error message to find a known mitigation. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: AUTOMATED STEP ### Description This is the final diagnostic step. It collects all error messages from the job and compares them against a dictionary of known issues (the ERROR_MAP). If a match is found, it provides a specific cause and remediation. Otherwise, it reports the full error for manual inspection. ### Failure Reason Job failed with error: {error_message} Job failure cause: {cause} ### Failure Remediation Suggested mitigation: {remediation} ### Uncertain Reason Job {job_id} failed with an error that does not have a publicly documented mitigation and root cause. Full error message(s) reported: "{error_message}" ### Uncertain Remediation Please retry the job to confirm whether the error is transient and can be mitigated through a retry with exponential backoff. See . If the issue persists, contact Google Cloud Support at and provide this report with the full BigQuery Job Id. ================================================ FILE: website/content/en/runbook/steps/bigquery/big-query-failed-query-start.md ================================================ --- title: "bigquery/Big Query Failed Query Start" linkTitle: "Big Query Failed Query Start" weight: 3 type: docs description: > Validates parameters and prerequisites before starting the diagnosis. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: START ### Description This initial step ensures that the provided project exists, valid job identifiers have been provided, the BigQuery API is enabled and also checks whether the user has the necessary permissions to execute the runbook. The runbook will terminate if any of these initial checks fail. ================================================ FILE: website/content/en/runbook/steps/bigquery/big-query-job-exists.md ================================================ --- title: "bigquery/Big Query Job Exists" linkTitle: "Big Query Job Exists" weight: 3 type: docs description: > Gateway that verifies the BigQuery Job exists. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: GATEWAY ### Description This step calls the BigQuery API to fetch the job. If the job is found, the runbook proceeds to the next step. If it is not found (e.g., due to a typo in the job ID or region), the runbook reports this and terminates this path. ### Failure Reason Job {job_id} does not exist. ### Failure Remediation Please check the corresponding job Region and make sure to provide the correct Job and Project identifiers. ### Success Reason Job {job_id} was successfully located. ================================================ FILE: website/content/en/runbook/steps/bigquery/check-bq-job-has-error.md ================================================ --- title: "bigquery/Check Bq Job Has Error" linkTitle: "Check Bq Job Has Error" weight: 3 type: docs description: > Gateway to verify that a completed job contains an error result. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: GATEWAY ### Description This step inspects the job details to see if an error was reported. If an error is present, the runbook proceeds to the final analysis step. If the job completed successfully, the runbook stops and informs the user. ### Failure Reason The completed job `{job_id}` finished successfully without any errors. ### Failure Remediation This runbook is designed to analyze failed jobs. Please provide the ID of a job that has completed with an error. ### Success Reason OK: The completed job `{job_id}` contains an error message, as expected for this analysis. The error reported was: {error_string} ================================================ FILE: website/content/en/runbook/steps/bigquery/check-bq-job-has-failed.md ================================================ --- title: "bigquery/Check Bq Job Has Failed" linkTitle: "Check Bq Job Has Failed" weight: 3 type: docs description: > Gateway to verify that a completed job contains an error result. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: GATEWAY ### Description This step inspects the job details to see if an error was reported. If an error is present, the runbook proceeds to the final analysis step. If the job completed successfully, the runbook stops and informs the user. ### Failure Reason Job successfully finished execution without any errors. ### Failure Remediation Only failed BigQuery jobs can be analyzed for failure reasons. Restart the investigation and provide a job that failed during execution. ### Success Reason Job finished execution with an error. Continuing the investigation. ================================================ FILE: website/content/en/runbook/steps/bigquery/check-permissions.md ================================================ --- title: "bigquery/Check Permissions" linkTitle: "Check Permissions" weight: 3 type: docs description: > Checks for necessary IAM permissions to execute the runbook's diagnostic steps. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: COMPOSITE STEP ### Description None ### Failure Reason Principal `{principal}` is missing the following required permissions for the {runbook_id}: {missing_permissions_or_roles}. ### Failure Remediation Grant the principal `{principal}` the necessary permissions, typically by assigning predefined IAM roles like '{required_roles}' at the project level. ### Success Reason Principal `{principal}` has all required permissions for the {runbook_id}: {present_permissions_or_roles}. ================================================ FILE: website/content/en/runbook/steps/bigquery/confirm-bq-job-is-done.md ================================================ --- title: "bigquery/Confirm Bq Job Is Done" linkTitle: "Confirm Bq Job Is Done" weight: 3 type: docs description: > Gateway to confirm that the BigQuery job has finished execution. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: GATEWAY ### Description This step checks the job's status. If the status is 'DONE', the runbook continues to the next check. If the job is still 'RUNNING' or 'PENDING', the runbook will stop and advise the user to wait for completion. ### Failure Reason Job {job_id} is currently in the {job_state} state and has not yet completed. ### Failure Remediation Wait for the job to finish execution and restart the investigation. ### Success Reason Job {job_id} has finished execution. ================================================ FILE: website/content/en/runbook/steps/bigquery/run-permission-checks.md ================================================ --- title: "bigquery/Run Permission Checks" linkTitle: "Run Permission Checks" weight: 3 type: docs description: > A comprehensive step to check all mandatory and optional permissions. --- **Product**: [BigQuery](https://cloud.google.com/bigquery)\ **Step Type**: GATEWAY ### Description This step is intended to check mandatory and optional permissions for the given BigQuery runbook type. It will terminate runbook execution if mandatory permissions are missing, or add 'SKIP' notifications for missing optional permissions. The step execution will skip altogether if the user is missing the resourcemanager.projects.get permission. Finally, it populates the global PERMISSION_RESULTS dictionary used throughout the runbook. ### Failure Reason Execution halted. The principal {principal} is missing the following mandatory IAM permission(s) required to run this runbook: {permissions}. ### Failure Remediation Grant the principal {principal} the missing permission(s) on the project to proceed. ================================================ FILE: website/content/en/runbook/steps/cloudrun/_index.md ================================================ --- title: "CLOUDRUN" linkTitle: "cloudrun" type: docs weight: 2 --- All steps available in cloudrun ================================================ FILE: website/content/en/runbook/steps/cloudrun/container-failed-to-start-step.md ================================================ --- title: "cloudrun/Container Failed To Start Step" linkTitle: "Container Failed To Start Step" weight: 3 type: docs description: > Checks if the deployment error was caused by container failed to start error. --- **Product**: [Cloud Run](https://cloud.google.com/run)\ **Step Type**: AUTOMATED STEP ### Description This step will check if the error is present and link to additional troubleshooting steps. ### Failure Reason Container failed to start in service {name}. ### Failure Remediation The container failed to start. Refer to for guidance. ================================================ FILE: website/content/en/runbook/steps/cloudrun/image-was-not-found-step.md ================================================ --- title: "cloudrun/Image Was Not Found Step" linkTitle: "Image Was Not Found Step" weight: 3 type: docs description: > Checks if if specified image exists. --- **Product**: [Cloud Run](https://cloud.google.com/run)\ **Step Type**: AUTOMATED STEP ### Description This step will check if the error is present and link to additional troubleshooting steps. ### Failure Reason Provided image {image} does not exist. ### Failure Remediation The provided image does not exist. Verify that the image name is correct. Refer to for guidance on specifying image names. ================================================ FILE: website/content/en/runbook/steps/cloudrun/no-permission-for-image-step.md ================================================ --- title: "cloudrun/No Permission For Image Step" linkTitle: "No Permission For Image Step" weight: 3 type: docs description: > Checks if Cloud Run service agent can fetch the image. --- **Product**: [Cloud Run](https://cloud.google.com/run)\ **Step Type**: AUTOMATED STEP ### Description This step will check if the error is present and link to additional troubleshooting steps. ### Failure Reason Cloud Run Service agent {sa} does not have permissions to read image {image}. ### Failure Remediation Grant {sa} the roles/storage.objectViewer role if the image is stored in Container Registry or the roles/artifactregistry.reader role if in Artifact Registry. Note that the role must be granted in the project where the image is stored. ================================================ FILE: website/content/en/runbook/steps/cloudrun/service-deployment-code-step.md ================================================ --- title: "cloudrun/Service Deployment Code Step" linkTitle: "Service Deployment Code Step" weight: 3 type: docs description: > Checks for container and code issues. --- **Product**: [Cloud Run](https://cloud.google.com/run)\ **Step Type**: COMPOSITE STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/cloudrun/service-deployment-start.md ================================================ --- title: "cloudrun/Service Deployment Start" linkTitle: "Service Deployment Start" weight: 3 type: docs description: > Prepare the parameters for cloudrun/service-deployment runbook. --- **Product**: [Cloud Run](https://cloud.google.com/run)\ **Step Type**: START ### Description Looks up the cloud run service making sure it exists. ================================================ FILE: website/content/en/runbook/steps/crm/_index.md ================================================ --- title: "CRM" linkTitle: "crm" type: docs weight: 2 --- All steps available in crm ================================================ FILE: website/content/en/runbook/steps/crm/org-policy-check.md ================================================ --- title: "crm/Org Policy Check" linkTitle: "Org Policy Check" weight: 3 type: docs description: > Checks if an organization policy is effective in a project --- **Product**: [Cloud Resource Manager](https://cloud.google.com/resource-manager)\ **Step Type**: AUTOMATED STEP ### Description Supports only boolean constraints and not list constraints. ### Failure Reason The organization policy {constraint} is set to {actual_state}, but it should be {expected_state}. ### Failure Remediation Follow Guide [1] to correct the constraint. Search for the constraint in [2] to better understand how it works. Note: Consider checking with organization administrators for the recommended approach. [1] [2] ### Success Reason The {constraint} is {actual_state}. ================================================ FILE: website/content/en/runbook/steps/dataflow/_index.md ================================================ --- title: "DATAFLOW" linkTitle: "dataflow" type: docs weight: 2 --- All steps available in dataflow ================================================ FILE: website/content/en/runbook/steps/dataflow/dataflow-permissions-end.md ================================================ --- title: "dataflow/Dataflow Permissions End" linkTitle: "Dataflow Permissions End" weight: 3 type: docs description: > RUNBOOK COMPLETED. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: END ### Description None ================================================ FILE: website/content/en/runbook/steps/dataflow/dataflow-resource-permissions.md ================================================ --- title: "dataflow/Dataflow Resource Permissions" linkTitle: "Dataflow Resource Permissions" weight: 3 type: docs description: > Check the Dataflow Resource permissions. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: AUTOMATED STEP ### Description Verify that Dataflow resources have the necessary permissions to be accessed and used by Dataflow jobs. Ensure that the your Dataflow project Worker Service Account have the required permissions to access and modify these resources. ================================================ FILE: website/content/en/runbook/steps/dataflow/dataflow-user-account-permissions.md ================================================ --- title: "dataflow/Dataflow User Account Permissions" linkTitle: "Dataflow User Account Permissions" weight: 3 type: docs description: > Check the User account permissions. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: AUTOMATED STEP ### Description "Dataflow Viewer" role allows the user to view/list the Dataflow jobs. But, cannot submit, update, drain, stop, or cancel the jobs. "Dataflow Developer" role does allows the user to create and modify (view, update, cancel etc) the dataflow jobs, but does not provide machine type, storage bucket configuration access. "Dataflow Admin" role provides complete access for creating and modifying the jobs along with the machine type and storage bucket configuration access. ================================================ FILE: website/content/en/runbook/steps/dataflow/dataflow-worker-service-account-permissions.md ================================================ --- title: "dataflow/Dataflow Worker Service Account Permissions" linkTitle: "Dataflow Worker Service Account Permissions" weight: 3 type: docs description: > Check the Dataflow Worker account permissions. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: GATEWAY ### Description Worker instances use the worker service account to access input and output resources after you submit your job. For the worker service account to be able to run a job, it must have the roles/dataflow.worker role. ### Failure Reason Service Account `{service_account}` associated with the Dataflow job was not found in project `{project_id}` or the specified cross-project. ### Failure Remediation Specify the project where the service account resides using the `cross_project_project` parameter. ================================================ FILE: website/content/en/runbook/steps/dataflow/failed-streaming-pipeline-end.md ================================================ --- title: "dataflow/Failed Streaming Pipeline End" linkTitle: "Failed Streaming Pipeline End" weight: 3 type: docs description: > End of the runbook. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: END ### Description No more checks to perform. ================================================ FILE: website/content/en/runbook/steps/dataflow/failed-streaming-pipeline-start.md ================================================ --- title: "dataflow/Failed Streaming Pipeline Start" linkTitle: "Failed Streaming Pipeline Start" weight: 3 type: docs description: > Start step. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: START ### Description Gets the job and confirms it exists. Usually this will be logged in Dataflow Monitoring Interface, but may not be logged if the job graph is not constructed. ### Failure Reason Failed to find job {job_id} in region {region} ### Success Reason Successfully found job {job_id} in region {region} ================================================ FILE: website/content/en/runbook/steps/dataflow/job-graph-is-constructed.md ================================================ --- title: "dataflow/Job Graph Is Constructed" linkTitle: "Job Graph Is Constructed" weight: 3 type: docs description: > Has common step to check if the job has an error in graph construction. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: GATEWAY ### Description If a job fails during graph construction, it's error is not logged in the Dataflow Monitoring Interface as it never launched. The error appears in the console or terminal window where job is ran and may be language-specific. Manual check if there's any error using the 3 supported languages: Java, Python, Go. ================================================ FILE: website/content/en/runbook/steps/dataflow/job-is-streaming.md ================================================ --- title: "dataflow/Job Is Streaming" linkTitle: "Job Is Streaming" weight: 3 type: docs description: > Has common step to check if the job is a streaming job. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: AUTOMATED STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/dataflow/job-logs-visible.md ================================================ --- title: "dataflow/Job Logs Visible" linkTitle: "Job Logs Visible" weight: 3 type: docs description: > Has step to check if the project has logs exclusion filter for dataflow logs. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: AUTOMATED STEP ### Description This affects visibility of the error causing job failure. If there are no logs on the Dataflow Monitoring Interface or the launching console/platform, this is a good check to make sure Dataflow logs are visible. ================================================ FILE: website/content/en/runbook/steps/dataflow/job-state.md ================================================ --- title: "dataflow/Job State" linkTitle: "Job State" weight: 3 type: docs description: > Has common step to check job state is not failed. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: AUTOMATED STEP ### Description Usually the specific error is logged in the Dataflow Monitoring Interface. ### Failure Reason Job state for job {job_id} is Failed. ### Failure Remediation Refer to the Dataflow Monitoring Interface for the specific error. Refer to the common errors documentation [1] to resolve the job errors. [1] ### Success Reason The Dataflow job state is {state}. ================================================ FILE: website/content/en/runbook/steps/dataflow/valid-sdk.md ================================================ --- title: "dataflow/Valid Sdk" linkTitle: "Valid Sdk" weight: 3 type: docs description: > Has common step to check if the job is running a valid SDK. --- **Product**: [Dataflow](https://cloud.google.com/dataflow)\ **Step Type**: AUTOMATED STEP ### Description Contains SDK check Step that are likely to be reused for most Dataflow Runbooks. ================================================ FILE: website/content/en/runbook/steps/dataproc/_index.md ================================================ --- title: "DATAPROC" linkTitle: "dataproc" type: docs weight: 2 --- All steps available in dataproc ================================================ FILE: website/content/en/runbook/steps/dataproc/check-autoscaling-policy.md ================================================ --- title: "dataproc/Check Autoscaling Policy" linkTitle: "Check Autoscaling Policy" weight: 3 type: docs description: > Verify autoscaling policies. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Autoscaling is enabled without graceful decommission timeout on cluster {cluster_name} ### Failure Remediation Enable graceful decommission timeout in the autoscaling policy to allow executors to fetch shuffle data before nodes are removed. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-bq-connector.md ================================================ --- title: "dataproc/Check Bq Connector" linkTitle: "Check Bq Connector" weight: 3 type: docs description: > Check for issues related to BigQuery connector such as version dependency conflicts. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ### Success Reason The cluster uses image version {image_version} which preinstalls the BigQuery connector, and no conflicting BigQuery JARs were provided. Dependency version conflicts on the BigQuery side are not expected. Refer to the Dataproc Version page to find out each component version preinstalled on your cluster: ### Uncertain Reason The cluster uses image version {image_version} which preinstalls the BigQuery connector, and a different version of the BigQuery connector is being installed at the cluster or job level. This might cause dependency version conflicts and lead to job failures. ### Uncertain Remediation Resolve potential BigQuery connector version conflicts using one of the following approaches: - If providing the BigQuery JAR at the cluster level: Create the Dataproc cluster without specifying any BigQuery JAR. - If providing the BigQuery JAR at the job level: Run the job without specifying any BigQuery JAR. - If installing a BigQuery JAR is necessary: Match the version of the BigQuery JAR to the version preinstalled on the cluster (version {bq_version} for image {image_version}). Refer to the Dataproc Version page to find out each component version preinstalled on your cluster: ================================================ FILE: website/content/en/runbook/steps/dataproc/check-cluster-network-connectivity.md ================================================ --- title: "dataproc/Check Cluster Network Connectivity" linkTitle: "Check Cluster Network Connectivity" weight: 3 type: docs description: > Verify that the nodes in the cluster can communicate with each other. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must be able to communicate with each other using ICMP, TCP (all ports), and UDP (all ports) protocols. ### Failure Reason The network communication among nodes in cluster {cluster_name} is blocked. ### Failure Remediation Create a firewall rule that meets Dataproc connectivity requirements[1] and apply it to the cluster's VPC network. Review the documentation[2] for more details. References: [1] [2] ### Success Reason The network communication among nodes in cluster {cluster_name} is working. ### Uncertain Reason The cluster has not been found, it may have been deleted. Skipping the connectivity test. ### Uncertain Remediation Verify that Dataproc connectivity requirements[1] are satisfied. References: [1] ================================================ FILE: website/content/en/runbook/steps/dataproc/check-cluster-network.md ================================================ --- title: "dataproc/Check Cluster Network" linkTitle: "Check Cluster Network" weight: 3 type: docs description: > Verify that the nodes in the cluster can communicate with each other. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must be able to communicate with each other using ICMP, TCP (all ports), and UDP (all ports) protocols. ### Failure Reason The network communication among nodes in cluster {cluster_name} is blocked. ### Failure Remediation Create a firewall rule that meets Dataproc connectivity requirements[1] and apply it to the cluster's VPC network. Review the documentation[2] for more details. References: [1] [2] ### Success Reason The network communication among nodes in cluster {cluster_name} is working. ### Uncertain Reason The cluster has not been found, it may have been deleted. Skipping the connectivity test. ### Uncertain Remediation Verify that Dataproc connectivity requirements[1] are satisfied. References: [1] ================================================ FILE: website/content/en/runbook/steps/dataproc/check-cluster-quota.md ================================================ --- title: "dataproc/Check Cluster Quota" linkTitle: "Check Cluster Quota" weight: 3 type: docs description: > Verify if the Dataproc cluster has quota issues. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: START ### Description Checks if the Dataproc cluster had creation issues due to quota. ### Failure Reason The cluster {cluster_name} in project {project_id} could not be created due to insufficient quota in the project. ### Failure Remediation This issue occurs when the requested Dataproc cluster exceeds the project's available quota for resources such as CPU, disk space, or IP addresses. To resolve this issue: - Request additional quota [1] via the Google Cloud console. - Create the cluster in a different project. [1] ### Success Reason No issues with insufficient quota identified for cluster {cluster_name} in project {project_id}. If the intended cluster does not appear in the Dataproc UI, verify the provided cluster_name parameter. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-cluster-stock-out.md ================================================ --- title: "dataproc/Check Cluster Stock Out" linkTitle: "Check Cluster Stock Out" weight: 3 type: docs description: > Verify if Dataproc cluster has stockout issue. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description Checks if the zone being used to create the cluster has sufficient resources. ### Failure Reason The cluster {cluster_name} creation in project {project_id} failed due to insufficient resources in the selected zone/region. ### Failure Remediation Dataproc cluster stockout occurs when there are insufficient resources available in a specific zone or region to create the requested cluster. To resolve this issue: - Create the cluster in a different zone or region. - Use the Dataproc Auto Zone placement feature by not specifying the zone [1]. [1] ### Success Reason No issues with stockouts identified for cluster {cluster_name} in project {project_id}. If the intended cluster does not appear in the Dataproc UI, verify the provided cluster_name parameter. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-cluster-version.md ================================================ --- title: "dataproc/Check Cluster Version" linkTitle: "Check Cluster Version" weight: 3 type: docs description: > Verify if the cluster version is supported. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The cluster {cluster_name} is using an unsupported Dataproc image version. Run the job on a supported image version. ### Failure Remediation Find supported Dataproc image versions in this document[1]. [1] ### Success Reason The cluster {cluster_name} is using a supported Dataproc image version. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-gc-pause.md ================================================ --- title: "dataproc/Check Gc Pause" linkTitle: "Check Gc Pause" weight: 3 type: docs description: > Verify if STW GC Pause has happened. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ### Failure Reason Log messages related to "{log}" were found on the cluster: {cluster_name}. ### Failure Remediation To address potential GC pause issues: - Increase the `spark.executor.memory` configuration to allocate additional memory if allocated memory appears insufficient [1]. - If memory allocation seems adequate, investigate potential garbage collection optimization. Refer to the Apache Spark documentation for a comprehensive guide on Garbage Collection Tuning [2]. - Additionally, tuning the `spark.memory.fraction` property can be effective, particularly for workloads that rely heavily on RDD caching. Refer to the Memory Management Overview [3] for a detailed discussion of this configuration property. [1] [2] [3] ### Success Reason No log messages related to "{log}" were found on the cluster: {cluster_name}. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-gcs-connector.md ================================================ --- title: "dataproc/Check Gcs Connector" linkTitle: "Check Gcs Connector" weight: 3 type: docs description: > Check for non-default GCS connector and for errors in logs connected to Cloud Storage. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ### Success Reason No user-specified Cloud Storage connector version was identified. The cluster is using the default version. ### Uncertain Reason A user-specified Cloud Storage connector version was identified for cluster. Using a non-default connector version can lead to issues if not required by the application, as Dataproc clusters include a default pre-installed GCS connector. ### Uncertain Remediation Verify the setup is correct if using a non-default Cloud Storage connector by following: ================================================ FILE: website/content/en/runbook/steps/dataproc/check-if-job-failed.md ================================================ --- title: "dataproc/Check If Job Failed" linkTitle: "Check If Job Failed" weight: 3 type: docs description: > Verify if dataproc job failed. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Job `{job_id}` completed successfully. ### Failure Remediation If the job experienced slow performance, potential causes include data skew, changes in data volume, or network latency. If performance issues persist, open a support case and share the Spark event log for both the fast and slow job runs. ### Success Reason Job `{job_id}` failed. Continue with the next steps to investigate the failure. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-init-script-failure.md ================================================ --- title: "dataproc/Check Init Script Failure" linkTitle: "Check Init Script Failure" weight: 3 type: docs description: > Verify if dataproc cluster init script failed. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description The initialization action provided during cluster creation failed to install. ### Failure Reason The cluster {cluster_name} creation failed because the initialization script encountered an error. ### Failure Remediation A Dataproc cluster initialization script failure means that a script intended to run during the cluster's setup did not complete successfully. To resolve this issue: - Review initialization actions considerations and guidelines [1]. - Examine the output logs. The error message should provide a link to the logs in Cloud Storage. [1] ### Success Reason The initialization actions for cluster {cluster_name} in project {project_id} completed successfully without errors. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-job-throttling.md ================================================ --- title: "dataproc/Check Job Throttling" linkTitle: "Check Job Throttling" weight: 3 type: docs description: > Verify the presence of Job Throttling logs. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/dataproc/check-killing-orphaned-application.md ================================================ --- title: "dataproc/Check Killing Orphaned Application" linkTitle: "Check Killing Orphaned Application" weight: 3 type: docs description: > Verify if the killing of Orphaned applications has happened. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ### Failure Reason Log messages related to "{log}" were found on the cluster: {cluster_name}. ### Failure Remediation To prevent orphaned YARN applications from being killed, set the cluster property `dataproc:dataproc.yarn.orphaned-app-termination.enable` to `false`. More details are available in the documentation [1]. [1] ### Success Reason No log messages related to "{log}" were found on the cluster: {cluster_name}. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-logs-exist.md ================================================ --- title: "dataproc/Check Logs Exist" linkTitle: "Check Logs Exist" weight: 3 type: docs description: > Checks if specified logs messages exist in the Dataproc cluster. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description This step supports checking for the presence of a concrete log message. Attributes: log_message (str): log message that is being looked for. ### Failure Reason Log messages related to "{log}" were found on the cluster: {cluster_name}. ### Failure Remediation Investigate the job logs further, focusing on eliminating the observed message. ### Success Reason No log messages related to "{log}" were found on the cluster: {cluster_name}. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-master-oom.md ================================================ --- title: "dataproc/Check Master Oom" linkTitle: "Check Master Oom" weight: 3 type: docs description: > Check if OOM has happened on master. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Found logs messages related to Master OOM on the cluster: {cluster_name}. ### Failure Remediation Follow the troubleshooting guide [1] to adjust the driver memory used for the job. [1] ### Success Reason Didn't find logs messages related to Master OOM on the cluster: {cluster_name}. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-permissions.md ================================================ --- title: "dataproc/Check Permissions" linkTitle: "Check Permissions" weight: 3 type: docs description: > Check if the permissions are set correctly. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ### Uncertain Reason Service Account {service_account} associated with Dataproc cluster was not found in project {project_id} or cross project (if specified). ### Uncertain Remediation Provide the project where the service account resides using the `cross_project` parameter. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-port-exhaustion.md ================================================ --- title: "dataproc/Check Port Exhaustion" linkTitle: "Check Port Exhaustion" weight: 3 type: docs description: > Verify if the port exhaustion has happened. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ### Failure Reason Log messages related to "{log}" were found on the cluster: {cluster_name}. ### Failure Remediation This issue occurs when Spark jobs cannot find an available port after 1000 retries. CLOSE_WAIT connections are a possible cause. To identify CLOSE_WAIT connections, analyze the netstat output: 1. Run `netstat -plant >> open_connections.txt`. 2. Run `cat open_connections.txt | grep "CLOSE_WAIT"`. If blocked connections are due to a specific application, restart that application. Alternatively, restart the master node to release the affected connections. ### Success Reason No log messages related to "{log}" were found on the cluster: {cluster_name}. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-preemptible.md ================================================ --- title: "dataproc/Check Preemptible" linkTitle: "Check Preemptible" weight: 3 type: docs description: > Verify preemptibility. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Cluster {cluster.name} uses preemptible workers and their count exceeds 50% of the total worker count leading to shuffle fetch failures. ### Failure Remediation To improve stability: - Reduce the number of preemptible workers. - Use non-preemptible workers. - Explore Enhanced Flexibility Mode (EFM) for better control over preemptible instances. ### Success Reason Cluster {cluster.name} uses preemptible workers. While within the recommended limit, preemptions might still lead to FetchFailedExceptions. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-private-google-access.md ================================================ --- title: "dataproc/Check Private Google Access" linkTitle: "Check Private Google Access" weight: 3 type: docs description: > Check if the subnetwork of the cluster has private google access enabled. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description Checking if the subnetwork of the cluster has private google access enabled. ### Failure Reason Google Private Access in subnet: {subnetwork_uri} is disabled. ### Failure Remediation Dataproc clusters isolated from the public internet require Private Google Access enabled on their subnetwork ({subnetwork_uri}) to allow cluster nodes to access Google APIs and services (e.g., Cloud Storage) using internal IPs [cluster VMs are not assigned public IP addresses](1). Enable Private Google Access for the subnetwork[2]. References: [1] [2] ### Success Reason Google Private Access in subnet: {subnetwork_uri} is enabled. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-python-import-failure.md ================================================ --- title: "dataproc/Check Python Import Failure" linkTitle: "Check Python Import Failure" weight: 3 type: docs description: > Check if the python import failure has happened. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/dataproc/check-shared-vpc-roles.md ================================================ --- title: "dataproc/Check Shared Vpc Roles" linkTitle: "Check Shared Vpc Roles" weight: 3 type: docs description: > Verify if dataproc cluster is using Shared VPC. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description Checks for missing roles. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-shuffle-failures.md ================================================ --- title: "dataproc/Check Shuffle Failures" linkTitle: "Check Shuffle Failures" weight: 3 type: docs description: > Check for logs indicating shuffle failures. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Cluster {cluster_name} experienced shuffle failures. Potential root causes: {root_causes} ### Success Reason No shuffle failure logs found for cluster {cluster_name} ================================================ FILE: website/content/en/runbook/steps/dataproc/check-shuffle-service-kill.md ================================================ --- title: "dataproc/Check Shuffle Service Kill" linkTitle: "Check Shuffle Service Kill" weight: 3 type: docs description: > Verify the presence of shuffle service kill related logs. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/dataproc/check-stackdriver-setting.md ================================================ --- title: "dataproc/Check Stackdriver Setting" linkTitle: "Check Stackdriver Setting" weight: 3 type: docs description: > Check if Stackdriver is enabled for the cluster. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description If the property is provided manually, It will be used if the cluster does not exist. ### Success Reason Stackdriver: Enabled ### Uncertain Reason Could not determine if the `dataproc:dataproc.logging.stackdriver.enable` property is enabled for cluster, possibly because the cluster was deleted. Subsequent checks requiring Cloud logging might be affected. ### Uncertain Remediation Enable Cloud logging by creating a cluster with property dataproc:dataproc.logging.stackdriver.enable = true. Refer to the guide for more details: ================================================ FILE: website/content/en/runbook/steps/dataproc/check-sw-preemption.md ================================================ --- title: "dataproc/Check Sw Preemption" linkTitle: "Check Sw Preemption" weight: 3 type: docs description: > Verify if secondary worker preemption has happened. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ### Failure Reason Found logs messages related to secondary worker preemption on the cluster: {cluster_name}. ### Failure Remediation This error occurs when secondary worker nodes are preempted. By default, Dataproc secondary workers are preemptible VMs. To resolve this issue: - Verify if the cluster uses secondary workers with preemptible instances. - Recreate the cluster configured with non-preemptible secondary workers to ensure secondary workers are not preempted [1]. [1] ### Success Reason Didn't find logs messages related to secondary worker preemption on the cluster: {cluster_name}. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-task-not-found.md ================================================ --- title: "dataproc/Check Task Not Found" linkTitle: "Check Task Not Found" weight: 3 type: docs description: > Verify if dataproc job failed due to task not found. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ### Failure Reason Job `{job_id}` failed due to a 'task not found' error. {additional_message} ### Failure Remediation This error typically indicates the associated cluster was terminated before job completion. Review automation workflows to ensure clusters remain active until all jobs are finalized. ### Success Reason Job `{job_id}` did not fail due to a 'task not found' error. {additional_message} ================================================ FILE: website/content/en/runbook/steps/dataproc/check-worker-disk-usage-issue.md ================================================ --- title: "dataproc/Check Worker Disk Usage Issue" linkTitle: "Check Worker Disk Usage Issue" weight: 3 type: docs description: > Verify if worker disk usage issue has happened. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/dataproc/check-worker-oom.md ================================================ --- title: "dataproc/Check Worker Oom" linkTitle: "Check Worker Oom" weight: 3 type: docs description: > Verify if OOM has happened on worker nodes. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Found logs messages related to Worker OOM on the cluster: {cluster_name}. ### Failure Remediation The logs indicate that worker OOM (out-of-memory) errors may have occurred on the cluster. To resolve this issue: - Use a high-memory machine type for the worker nodes. - Repartition the data to avoid data skew. Refer to the troubleshooting guide [1] for more details. If the issue persists, contact Google Cloud Support. [1] ### Success Reason Didn't find logs messages related to Worker OOM on the cluster: {cluster_name}. ================================================ FILE: website/content/en/runbook/steps/dataproc/check-yarn-runtime-exception.md ================================================ --- title: "dataproc/Check Yarn Runtime Exception" linkTitle: "Check Yarn Runtime Exception" weight: 3 type: docs description: > Verify presence of CheckYarnRuntimeException logs. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: COMPOSITE STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/dataproc/cluster-creation-end.md ================================================ --- title: "dataproc/Cluster Creation End" linkTitle: "Cluster Creation End" weight: 3 type: docs description: > The end step of the runbook. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: END ### Description It points out all the failed steps to the user. ================================================ FILE: website/content/en/runbook/steps/dataproc/cluster-creation-quota.md ================================================ --- title: "dataproc/Cluster Creation Quota" linkTitle: "Cluster Creation Quota" weight: 3 type: docs description: > Check for cluster creation errors due to insufficient quota --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/dataproc/cluster-creation-start.md ================================================ --- title: "dataproc/Cluster Creation Start" linkTitle: "Cluster Creation Start" weight: 3 type: docs description: > Initiates diagnostics for SSH Cluster Creation issues. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: START ### Description This step interacts with the Dataproc API to get the cluster for investigation. When the cluster is found and it is in `ERROR` state, the cluster details are then used to set variables to be used by the subsequent child steps. ================================================ FILE: website/content/en/runbook/steps/dataproc/cluster-creation-stockout.md ================================================ --- title: "dataproc/Cluster Creation Stockout" linkTitle: "Cluster Creation Stockout" weight: 3 type: docs description: > Check for cluster creation due to stockout --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/dataproc/cluster-details-dependency-gateway.md ================================================ --- title: "dataproc/Cluster Details Dependency Gateway" linkTitle: "Cluster Details Dependency Gateway" weight: 3 type: docs description: > Decision point for child steps that require cluster details and those that dont. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: GATEWAY ### Description Uses cluster details from the Dataproc API set in the start step to reduce scope of errors from invalid input ================================================ FILE: website/content/en/runbook/steps/dataproc/cluster-details.md ================================================ --- title: "dataproc/Cluster Details" linkTitle: "Cluster Details" weight: 3 type: docs description: > Gathers cluster parameters needed for further investigation. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description Additional parameters are needed for next steps. If values are provided manually they will be used instead of values gathered here. ### Success Reason Stackdriver: Enabled ### Uncertain Reason Could not determine if the `dataproc:dataproc.logging.stackdriver.enable` property is enabled for cluster, possibly because the cluster was deleted. Subsequent checks requiring Cloud logging might be affected. ### Uncertain Remediation Enable Cloud logging by creating a cluster with property dataproc:dataproc.logging.stackdriver.enable = true. Refer to the guide for more details: ================================================ FILE: website/content/en/runbook/steps/dataproc/cluster-exists.md ================================================ --- title: "dataproc/Cluster Exists" linkTitle: "Cluster Exists" weight: 3 type: docs description: > Prepares the parameters required for the dataproc/cluster-creation runbook. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description Ensures both project_id and cluster_name parameters are available. ### Failure Reason Cluster {cluster_name} does not exist in project {project_id} ### Failure Remediation Create the cluster again and keep it in the ERROR state in the Dataproc UI, or manually provide additional parameters using the gcpdiag command: `gcpdiag runbook dataproc/cluster-creation -p cluster_name=CLUSTER_NAME -p cluster_uuid=CLUSTER_UUID -p network=NETWORK_URI -p subnetwork=SUBNETWORK_URI -p service_account=SERVICE_ACCOUNT -p internal_ip_only=True/False --project=PROJECT_ID` Refer to for guidance on specifying additional parameters. ### Success Reason Cluster {cluster_name} exists in project {project_id} ================================================ FILE: website/content/en/runbook/steps/dataproc/cluster-in-error.md ================================================ --- title: "dataproc/Cluster In Error" linkTitle: "Cluster In Error" weight: 3 type: docs description: > Verifies if the cluster is in Error state and gathers additional parameters. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: GATEWAY ### Description This investigation is needed to identify if the issue is related to cluster creation. The issue happens only when the cluster is not able to provision successfully and ends up in ERROR state. ================================================ FILE: website/content/en/runbook/steps/dataproc/data-proc-cluster-exists.md ================================================ --- title: "dataproc/Data Proc Cluster Exists" linkTitle: "Data Proc Cluster Exists" weight: 3 type: docs description: > Verify if cluster exists in Dataproc UI. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The cluster `{cluster_name}` does not exist in project `{project_id}`. ### Failure Remediation Verify that the cluster has not been deleted. ### Success Reason The cluster `{cluster_name}` exists in project `{project_id}`. ================================================ FILE: website/content/en/runbook/steps/dataproc/internal-ip-gateway.md ================================================ --- title: "dataproc/Internal Ip Gateway" linkTitle: "Internal Ip Gateway" weight: 3 type: docs description: > Check if the cluster is using internal IP only. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: GATEWAY ### Description Check if the Dataproc cluster that is isolated from the public internet whose VM instances communicate over a private IP subnetwork (cluster VMs are not assigned public IP addresses). ================================================ FILE: website/content/en/runbook/steps/dataproc/job-details-dependency-gateway.md ================================================ --- title: "dataproc/Job Details Dependency Gateway" linkTitle: "Job Details Dependency Gateway" weight: 3 type: docs description: > Decision point for child steps that require cluster details and those that dont. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: GATEWAY ### Description Uses cluster details from the Dataproc API set in the start step to reduce scope of errors from invalid input ================================================ FILE: website/content/en/runbook/steps/dataproc/job-exists.md ================================================ --- title: "dataproc/Job Exists" linkTitle: "Job Exists" weight: 3 type: docs description: > Prepares the parameters required for the dataproc/spark_job_failures runbook. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: START ### Description Ensures both project_id, region and job_id parameters are available. ### Failure Reason The job `{job_id}` does not exist in project `{project_id}`. ### Failure Remediation Verify that the job ID and region are correct. ### Success Reason The job `{job_id}` exists in project `{project_id}`. ================================================ FILE: website/content/en/runbook/steps/dataproc/job-start.md ================================================ --- title: "dataproc/Job Start" linkTitle: "Job Start" weight: 3 type: docs description: > Prepares the parameters required for the dataproc/spark_job_failures runbook. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: START ### Description Ensures both project_id, region and job_id parameters are available. ### Success Reason The job `{job_id}` exists in project `{project_id}`. ### Skipped Reason The job `{job_id}` not found in project `{project_id}`. ================================================ FILE: website/content/en/runbook/steps/dataproc/service-account-exists.md ================================================ --- title: "dataproc/Service Account Exists" linkTitle: "Service Account Exists" weight: 3 type: docs description: > Verify service account and permissions in Dataproc cluster project or another project. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: GATEWAY ### Description Decides whether to check for service account roles - in CROSS_PROJECT_ID, if specified by customer - in PROJECT_ID ### Failure Reason Service Account {service_account} associated with Dataproc cluster was not found in project {project_id} or cross project {cross_project_id}. ### Failure Remediation Provide the project where the service account resides using the `cross_project` parameter. ### Uncertain Reason Service Account {service_account} associated with Dataproc cluster was not found in project {project_id}. It is possible that the service account is in a different project. ### Uncertain Remediation Provide the project where the service account resides using the `cross_project` parameter. ================================================ FILE: website/content/en/runbook/steps/dataproc/spark-job-end.md ================================================ --- title: "dataproc/Spark Job End" linkTitle: "Spark Job End" weight: 3 type: docs description: > The end step of the runbook. --- **Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\ **Step Type**: END ### Description Points out all the failed steps to the user. ================================================ FILE: website/content/en/runbook/steps/gce/_index.md ================================================ --- title: "GCE" linkTitle: "gce" type: docs weight: 2 --- All steps available in gce ================================================ FILE: website/content/en/runbook/steps/gce/analysing-serial-logs-end.md ================================================ --- title: "gce/Analysing Serial Logs End" linkTitle: "Analysing Serial Logs End" weight: 3 type: docs description: > Finalize Serial console Log Analysis. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: END ### Description None ================================================ FILE: website/content/en/runbook/steps/gce/check-live-migrations.md ================================================ --- title: "gce/Check Live Migrations" linkTitle: "Check Live Migrations" weight: 3 type: docs description: > Checking if live migrations happened for the instance --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Live migrations detected for the VM during mentioned period. ### Failure Remediation Simulate the migration (move the VM to another host) using the guidance provided here: Verify if the issue persists after simulation. If it does, contact Google Cloud Platform Support by creating a support case. Note: During live migration, VMs might experience a temporary decrease in performance (disk, CPU, memory, network). See the documentation for details: ### Success Reason No live migrations detected for the VM during mentioned period ### Skipped Reason There are no logs to examine ! ================================================ FILE: website/content/en/runbook/steps/gce/check-serial-port-logging.md ================================================ --- title: "gce/Check Serial Port Logging" linkTitle: "Check Serial Port Logging" weight: 3 type: docs description: > Checks if ops agent serial port logging --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: COMPOSITE STEP ### Description Verifies Organization policy and VM configuration to issue serial port logging to Stackdriver from Compute Engine VMs is feasible. ================================================ FILE: website/content/en/runbook/steps/gce/cloud-init-checks.md ================================================ --- title: "gce/Cloud Init Checks" linkTitle: "Cloud Init Checks" weight: 3 type: docs description: > Cloud init related checks --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: COMPOSITE STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/gce/compute-cluster-manager-termination.md ================================================ --- title: "gce/Compute Cluster Manager Termination" linkTitle: "Compute Cluster Manager Termination" weight: 3 type: docs description: > Investigate termination initiated by GCP GCE Compute Cluster Manager --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Google's Compute Cluster Manager can terminate instances due to billing issues or other reasons. This step investigates the root cause of the termination. ### Failure Reason Instance {full_resource_path} was terminated by account {stop_account}. ================================================ FILE: website/content/en/runbook/steps/gce/cpu-overcommitment-check.md ================================================ --- title: "gce/Cpu Overcommitment Check" linkTitle: "Cpu Overcommitment Check" weight: 3 type: docs description: > Checking if CPU overcommited beyond threshold --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/gce/disk-avg-io-latency-check.md ================================================ --- title: "gce/Disk Avg Io Latency Check" linkTitle: "Disk Avg Io Latency Check" weight: 3 type: docs description: > Check Disk Avg IO Latency --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The performance of the disk '{disk_name}' is currently degraded due to high IO latency exceeding optimal thresholds. This may result in slower read/write speeds and overall reduced performance. ### Failure Remediation Disk I/O latency is the time it takes for a read or write operation to complete on a disk. High disk I/O latency can significantly impact the performance of your applications and workloads running on the instance, leading to slow response times, increased processing time, and overall sluggishness. **Potential Bottlenecks** - Disk Type: To optimize disk performance, ensure your disk type is appropriate for your workload and provides acceptable latency for your system architecture. Choosing the right disk type can significantly impact performance. - Workload: The nature of your workload also influences latency. Workloads with many small, random I/O operations will generally have higher latency than those with sequential I/O **Optimize Disk Usage** - Reduce I/O Operations: Optimize your applications and database queries to minimize the number of disk I/O operations. - Increase I/O Request Size: Larger I/O requests can be more efficient than many small ones. Consider adjusting your application or database settings to increase the I/O request size. - Caching: Implement caching mechanisms to reduce the need to access the disk for frequently used data. Choose the Right Disk Type with lesser IO Latency - You may also look into Optimizing persistent disk performance - Please don't hesitate to reach out to Google Cloud Support if issue is not resolved. ### Success Reason Instance disk "{disk_name}"'s IO latency is within the optimal limits. ================================================ FILE: website/content/en/runbook/steps/gce/disk-health-check.md ================================================ --- title: "gce/Disk Health Check" linkTitle: "Disk Health Check" weight: 3 type: docs description: > Disk Health check --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason You might experience slower/poor performance with your disk '{disk_name}' due to an ongoing issue with our Compute Engine or Persistent Disk infrastructure. We're working to resolve this as quickly as possible. ### Failure Remediation To better understand the situation with your Compute Engine or Persistent Disks, could you please take a look at the Google Cloud Status page: This page provides real-time updates on the health of Google Cloud services. Additionally, it may be helpful to check the Service Health dashboard in your Google Cloud Console for any reported incidents: If you don't find any information about an ongoing issue related to your concern, please don't hesitate to reach out to Google Cloud Support by creating a support case. They'll be happy to investigate further and assist you. ### Success Reason Instance disk "{disk_name}" is healthy. ================================================ FILE: website/content/en/runbook/steps/gce/disk-iops-throughput-utilisation-checks.md ================================================ --- title: "gce/Disk Iops Throughput Utilisation Checks" linkTitle: "Disk Iops Throughput Utilisation Checks" weight: 3 type: docs description: > Checking if the Disk IOPS/throughput usage is within optimal levels --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Disk IOPS/Throughput usage is NOT within optimal limits ### Failure Remediation There can be multiple reasons which can cause Disk IOPS/Throughput usage to increase: - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs to the disk and cause IO operations to be queued, causing throttling at disk levels. - CPU Starvation - Small instances(with lesser CPUs) may not have enough CPU to serve all I/Os inflight. - Network Throttling - High sent/received network traffic can cause network throttling, that can also impacts disk operations. - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads, this can also cause CPU or Disk IOPS/throughput Starvation. To fix this issue: - Please optimize your application workloads. - If needed, please add more resources(CPU, Memory) to the VM. - Please optimize your Disk performance - - If needed, please change your disk type to get better Disk IOPS/throughput limits - ================================================ FILE: website/content/en/runbook/steps/gce/gce-firewall-allows-ssh.md ================================================ --- title: "gce/Gce Firewall Allows Ssh" linkTitle: "Gce Firewall Allows Ssh" weight: 3 type: docs description: > Assesses the VPC network configuration to ensure it allows SSH traffic to the target VM. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description This diagnostic step checks for ingress firewall rules that permit SSH traffic based on the operational context, such as the use of IAP for SSH or direct access from a specified source IP. It helps identify network configurations that might block SSH connections. ================================================ FILE: website/content/en/runbook/steps/gce/gce-iam-policy-check.md ================================================ --- title: "gce/Gce Iam Policy Check" linkTitle: "Gce Iam Policy Check" weight: 3 type: docs description: > Checks IAM policies by calling IamPolicyCheck with support for gce/constants.py. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step is a wrapper around iam.generalized_steps.IamPolicyCheck that adds support for resolving 'roles' or 'permissions' parameters from gce/constants.py if they are prefixed with 'ref:'. It also supports ';;' delimited strings for roles or permissions lists. Parameters retrieved via `op.get()`: project_id(str): Project ID to check policy against. principal(str): The principal to check (e.g., user:x@y.com, serviceAccount:a@b.com). roles(Optional[str]): ';;' separated list of roles or 'ref:CONSTANT' to check. permissions(Optional[str]): ';;' separated list of permissions or 'ref:CONSTANT' to check. require_all(bool): If True, all roles/permissions must be present. If False (default), at least one must be present. ================================================ FILE: website/content/en/runbook/steps/gce/gce-log-check.md ================================================ --- title: "gce/Gce Log Check" linkTitle: "Gce Log Check" weight: 3 type: docs description: > Executes a Cloud Logging query and checks results against optional patterns. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step queries Cloud Logging using the provided filter string by calling logs.generalized_steps.CheckIssueLogEntry. See CheckIssueLogEntry for logic on FAILED/UNCERTAIN status. Parameters retrieved via `op.get()`: project_id(str): Project ID to search for filter. filter_str(str): Filter in Cloud Logging query language: https://cloud.google.com/logging/docs/view/query-library. issue_pattern(Optional[str]): Semicolon-separated ';;' list of regex patterns to search for in `protoPayload.status.message`. If prefixed with 'ref:', it resolves to a list in `gce/constants.py`. If provided, logs matching pattern will result in FAILED status. resource_name(Optional[str]): Resource identifier for template messages. template(Optional[str]): Template name, defaults to 'logging::gce_log'. ================================================ FILE: website/content/en/runbook/steps/gce/gce-vpc-connectivity-check.md ================================================ --- title: "gce/Gce Vpc Connectivity Check" linkTitle: "Gce Vpc Connectivity Check" weight: 3 type: docs description: > Checks if ingress or egress traffic is allowed to a GCE Instance from a specified source IP. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Evaluates VPC firewall rules to verify if a GCE Instance permits ingress or egress traffic from a designated source IP through a specified port and protocol. ================================================ FILE: website/content/en/runbook/steps/gce/gcp-ssh-permissions.md ================================================ --- title: "gce/Gcp Ssh Permissions" linkTitle: "Gcp Ssh Permissions" weight: 3 type: docs description: > Evaluates the user's GCP permissions against the requirements for accessing a VM via SSH. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: COMPOSITE STEP ### Description This step checks if the user has the necessary project-level roles for both traditional SSH access and OS Login methods. It does not consider permissions inherited from higher-level resources such as folders, organizations, or groups. ================================================ FILE: website/content/en/runbook/steps/gce/guest-os-issued-shutdown.md ================================================ --- title: "gce/Guest Os Issued Shutdown" linkTitle: "Guest Os Issued Shutdown" weight: 3 type: docs description: > Investigate shutdowns issued from within the guest OS --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step investigates whether the VM termination was initiated by a user or a system fault within the guest OS. It provides insights into the root cause of the termination. ### Failure Reason {status_message} ### Failure Remediation Instance {full_resource_path} shutdown was initiated from the operating system. This is usually caused by a sudoer posix user issuing a shutdown or reboot command Review guest shell history to determine who or what application triggered the shutdown. ================================================ FILE: website/content/en/runbook/steps/gce/guestos-bootup-start.md ================================================ --- title: "gce/Guestos Bootup Start" linkTitle: "Guestos Bootup Start" weight: 3 type: docs description: > Fetches VM details and validates the instance state. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: START ### Description This step retrieves the VM instance details based on the provided project ID, zone, and instance name. It checks if the VM is running and updates the instance ID or name if missing. Additionally, it performs sanity checks on the provided serial console log files to ensure they are valid plain text files. ### Failure Reason The GCE Instance {full_resource_path} is in {status} state. ### Failure Remediation Restart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING. Consult the following documentation: - Restarting a compute instance: - Troubleshooting VM startup issues: ### Success Reason The GCE Instance {full_resource_path} is in {status} state. ### Skipped Reason Could not validate VM lifecycle for GCE Instance {full_resource_path}. ================================================ FILE: website/content/en/runbook/steps/gce/high-vm-cpu-utilization.md ================================================ --- title: "gce/High Vm Cpu Utilization" linkTitle: "High Vm Cpu Utilization" weight: 3 type: docs description: > Evaluates the CPU of a VM for high utilization that might indicate performance issues. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step determines whether the CPU utilization of the VM exceeds a predefined threshold, indicating potential performance degradation. It utilizes metrics from the Ops Agent if installed, or hypervisor-visible metrics as a fallback, to accurately assess CPU performance and identify any issues requiring attention. ### Failure Reason CPU utilization on this VM has surpassed recommended operational levels, which may affect its performance and SSH connectivity. ### Failure Remediation Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue. Consult the following documentation for guidance: - Stopping a VM: - Resizing a VM: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: - Accessing VM observability metrics: - Analyzing process utilization: If SSH is unavailable, connect via the serial console to stop offending processes: ### Success Reason The Compute Engine VM {full_resource_path}, has CPU utilization within the optimal range. ================================================ FILE: website/content/en/runbook/steps/gce/high-vm-disk-utilization.md ================================================ --- title: "gce/High Vm Disk Utilization" linkTitle: "High Vm Disk Utilization" weight: 3 type: docs description: > Assesses disk utilization on a VM, aiming to identify high usage that could impact performance. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step leverages monitoring data if the Ops Agent is exporting disk usage metrics. Alternatively, it scans the VM's serial port output for common disk space error messages. This approach ensures comprehensive coverage across different scenarios, including VMs without metrics data. ### Failure Reason Disk utilization on this VM's boot disk is critically high, potentially affecting application performance. ### Failure Remediation To mitigate high disk usage, consider expanding the VM's boot disk capacity. This action can help avoid performance issues and ensure smoother SSH connections. Consult the following guide to increase disk size: ### Success Reason The boot disk space usage for the Compute Engine VM {full_resource_path}, is within optimal levels. ### Skipped Reason No Google Cloud Ops Agent installed on the VM, making it difficult to retrieve disk utilization data via metrics. Falling back to checking for filesystem utilization-related messages in the serial logs. ================================================ FILE: website/content/en/runbook/steps/gce/high-vm-memory-utilization.md ================================================ --- title: "gce/High Vm Memory Utilization" linkTitle: "High Vm Memory Utilization" weight: 3 type: docs description: > Diagnoses high memory utilization issues in a Compute Engine VM. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step evaluates memory usage through available monitoring data or, as a fallback, scans serial logs for Out of Memory (OOM) indicators. It distinguishes between VMs which has exported metrics and those without, and employs a different strategy for 'e2' machine types to accurately assess memory utilization. ### Failure Reason Memory utilization on this VM has reached levels that may compromise its VM application performance. ### Failure Remediation Elevated memory usage can result in slow, unresponsive, or terminated applications. Enhance the VM's memory capacity by changing to a machine type with more memory. Consult the following documentation for guidance: - Changing machine type: Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes: If SSH is unavailable, connect via the serial console to mitigate the issue: ### Success Reason Memory utilization on this VM is within optimal range. ### Skipped Reason Serial logs are not available for examination. ================================================ FILE: website/content/en/runbook/steps/gce/host-error.md ================================================ --- title: "gce/Host Error" linkTitle: "Host Error" weight: 3 type: docs description: > Investigate the cause of a host error --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Host errors should be rare. This step provides insights into the root cause of the issue. ### Failure Reason {status_message} ### Failure Remediation A host error (compute.instances.hostError) means that there was a hardware or software issue on the physical machine hosting your VM that caused your VM to crash. A host error which involves total hardware/software failure might prevent a live migration of your VM. If your VM is set to automatically restart, which is the default setting, Google restarts your VM, typically within three minutes from the time the error was detected. Depending on the issue, the restart might take up to 5.5 minutes. Note that this is a known behavior that cannot be completely eliminated and should be planned for while designing your systems on GCE. Mitigation Strategies The following mitigation strategies are implemented by Google to prevent & minimize occurrence of such events: Live Migrations. Live migration lets Google Cloud perform maintenance without interrupting a workload, rebooting a VM, or modifying any of the VM's properties, such as IP addresses, metadata, block storage data, application state, and network settings. Additionally our systems proactively monitor for hardware or software failure symptoms on hosts. If a potential failure is detected, we initiate live migration to seamlessly relocate the VM and prevent termination. A 'hostError' will only occur in the rare instance where the failures prevent successful live migration. Google reliability engineering. We are continuously monitoring the health of GCP hosts and taking steps to prevent errors from occurring, while using a variety of HA techniques to detect and mitigate hardware failures, such as using redundant components and monitoring for signs of failure. Software Patching: We are continuously implementing a rigorous software patching schedule to ensure the timely application of security updates and bug fixes. This proactive approach is mitigating the risk of software defects, and bugs that could lead to operational instability. RCA Kindly note: RCA by Google for Host errors is not common practice. Host errors can happen occasionally and typically do not undergo individual RCA. Should you request an RCA for a host error, you must provide a compelling business justification for why further details are necessary. Any root cause provided will be limited to if the issue was hardware or software related and if it was related to a single host or a rack. Review Logs and Create Log-Based Metrics: For tracking HostErrors: To proactively track host errors within your projects, create a log-based metric dashboard. This will provide a visual representation of error trends. For customer-facing evidence: If you need root cause information as evidence for your own customers, utilize Cloud Logging to query and export relevant logs. These logs provide granular error messages and timestamps. For timely response to errors: To ensure prompt reaction to critical host errors, configure a log-based alert. Alerting (2) Follow the Instructions here using the below query to build a log based alert on your project to get notified in case of a hostError. Make sure to include labels with the information you need exposed on the notification. resource.type="gce_instance" protoPayload.serviceName="compute.googleapis.com" (protoPayload.methodName:"compute.instances.hostError" OR operation.producer:"compute.instances.hostError") log_id("cloudaudit.googleapis.com/system_event") Resources: [1] ================================================ FILE: website/content/en/runbook/steps/gce/instance-property-check.md ================================================ --- title: "gce/Instance Property Check" linkTitle: "Instance Property Check" weight: 3 type: docs description: > Checks that a Instance property meets a given condition. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step fetches a VM instance and checks if a specified property meets the condition defined by an expected value and an operator. It supports nested properties via getattr and various operators including 'eq', 'ne', 'lt', 'le', 'gt', 'ge', 'contains', and 'matches'. Parameters: - property_path: The path of the property to check on the Instance object (e.g., 'status', 'boot_disk_licenses'). - expected_value: The value to compare against. Supports 'ref:' prefix to resolve constants from gce/constants.py (e.g., 'ref:RHEL_PATTERN'). - operator: The comparison operator to use. Supported: 'eq', 'ne', 'lt', 'le', 'gt', 'ge', 'contains', 'matches'. Default is 'eq'. Operator Notes: - `contains`: Checks for exact membership in lists (e.g., 'item' in ['item']) or substring in strings. - `matches`: Treats `expected_value` as a regex and checks if the pattern is found in the string or in *any* element of a list. Useful for partial matches (e.g., pattern 'sles' matching license 'sles-12-sap'). ### Failure Reason Instance {instance_name} property '{property_path}' with value '{actual_value}' does not meet condition: {operator} '{expected_value}'. ### Failure Remediation Ensure that property '{property_path}' for instance {instance_name} is configured to meet the condition: {operator} '{expected_value}'. ### Success Reason Instance property '{property_path}' with value '{actual_value}' meets condition: {operator} '{expected_value}'. ================================================ FILE: website/content/en/runbook/steps/gce/investigate-guest-os-issued-shutdown.md ================================================ --- title: "gce/Investigate Guest Os Issued Shutdown" linkTitle: "Investigate Guest Os Issued Shutdown" weight: 3 type: docs description: > Analyse Guest OS related logs which would explain a shutdown --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description It analyzes log entries to identify whether the termination was normal or abnormal from a guest os perspective. Was the shutdown intentially issued by a user or a system fault ================================================ FILE: website/content/en/runbook/steps/gce/investigate-logging-monitoring.md ================================================ --- title: "gce/Investigate Logging Monitoring" linkTitle: "Investigate Logging Monitoring" weight: 3 type: docs description: > A Decision Point for to check Logging and/or Monitoring related issues --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description Decides whether to check for ops agent - logging related issues if CHECK_LOGGING is set to true - monitoring related issues if CHECK_MONITORING is set to true ================================================ FILE: website/content/en/runbook/steps/gce/investigate-vm-creation-log-failure.md ================================================ --- title: "gce/Investigate Vm Creation Log Failure" linkTitle: "Investigate Vm Creation Log Failure" weight: 3 type: docs description: > Investigate VM creation failure logs. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description This step queries logs to identify the root cause of VM creation failures, such as quota issues, permission errors, or resource conflicts. ### Failure Reason {error_message} ### Failure Remediation The VM creation process failed because the VM `{instance_name}` already exists in zone `{zone}` within project `{project_id}`. Delete the existing VM or choose a different name for the new VM. ### Failure Reason [Alternative 2] {error_message} ### Failure Remediation [Alternative 2] Grant the user or service account attempting the VM creation the required permissions to create a VM instance. Consult the following guide for details on required permissions: ================================================ FILE: website/content/en/runbook/steps/gce/linux-guest-os-checks.md ================================================ --- title: "gce/Linux Guest Os Checks" linkTitle: "Linux Guest Os Checks" weight: 3 type: docs description: > Examines Linux-based guest OS's serial log entries for guest os level issues. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: COMPOSITE STEP ### Description This composite step scrutinizes the VM's serial logs for patterns indicative of kernel panics, problems with the SSH daemon, and blocks by SSH Guard - each of which could signify underlying issues affecting the VM's stability and accessibility. By identifying these specific patterns, the step aims to isolate common Linux OS and application issues, facilitating targeted troubleshooting. ================================================ FILE: website/content/en/runbook/steps/gce/managed-instance-group-recreation.md ================================================ --- title: "gce/Managed Instance Group Recreation" linkTitle: "Managed Instance Group Recreation" weight: 3 type: docs description: > Investigate if an instance recreation by MIG was normal --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Determines if the instance was recreated as part of a normal Managed Instance Group (MIG) process. ### Failure Reason {status_message} ### Failure Remediation Instance "{full_resource_path}" was terminated as part of a normal Managed Instance Group recreation process and a replacement instance has been created after this termination. No action required. [1] [2] ================================================ FILE: website/content/en/runbook/steps/gce/mig-autoscaling-policy-check.md ================================================ --- title: "gce/Mig Autoscaling Policy Check" linkTitle: "Mig Autoscaling Policy Check" weight: 3 type: docs description: > Checks MIG autoscaling policy attributes. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step performs checks on attributes within a Managed Instance Group (MIG)'s autoscaling policy. It requires both 'property_path' and 'expected_value' to be specified. The MIG can be identified either by providing 'instance_name' and 'zone' (the step will find the MIG associated with the instance) or by providing 'mig_name' and 'location' (zone or region). Parameters: - property_path: The nested path of the property to check within the MIG or autoscaler resource (e.g., 'autoscalingPolicy.mode'). If the path starts with 'autoscalingPolicy', the autoscaler resource is queried. - expected_value: The value to compare against. Supports 'ref:' prefix to resolve constants from gce/constants.py (e.g., 'ref:AUTOSCALING_MODE_ON'). - operator: The comparison operator to use. Supported: 'eq' (default), 'ne', 'lt', 'le', 'gt', 'ge'. ### Failure Reason MIG {mig_name} property '{property_path}' with value '{actual_value}' does not meet condition: {operator} '{expected_value}'. ### Failure Remediation Review the autoscaling policy for MIG {mig_name} and ensure it meets the required configuration. See: ### Success Reason MIG {mig_name} property '{property_path}' with value '{actual_value}' meets condition: {operator} '{expected_value}'. ### Skipped Reason MIG could not be determined or found. ================================================ FILE: website/content/en/runbook/steps/gce/multiple-termination-check.md ================================================ --- title: "gce/Multiple Termination Check" linkTitle: "Multiple Termination Check" weight: 3 type: docs description: > IInvestigates multiple VM terminations within a given project to determine the causes. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Similar to SingleTerminationCheck, it analyzes log entries but for multiple instances, focusing on the first occurring termination per instance to identify normal or abnormal patterns. Prepares a Root Cause Analysis (RCA) of the terminations based on the gathered details. ================================================ FILE: website/content/en/runbook/steps/gce/number-of-terminations.md ================================================ --- title: "gce/Number Of Terminations" linkTitle: "Number Of Terminations" weight: 3 type: docs description: > A decision point that determines the scope of VM terminations to investigation. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description This class decides whether an investigation should focus on a single termination or multiple terminations. It makes this determination based on the operational parameters provided to it, specifically checking if the investigation is scoped to a single virtual machine (VM). ================================================ FILE: website/content/en/runbook/steps/gce/ops-agent-end.md ================================================ --- title: "gce/Ops Agent End" linkTitle: "Ops Agent End" weight: 3 type: docs description: > Finalizes the OpsAgent checks. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: END ### Description Checks if logs or metrics are currently present after diagnosing the issue. ================================================ FILE: website/content/en/runbook/steps/gce/ops-agent-start.md ================================================ --- title: "gce/Ops Agent Start" linkTitle: "Ops Agent Start" weight: 3 type: docs description: > Prepares the parameters required for the gce/ops-agent runbook. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: START ### Description Looks up the GCE resource running the ops agent binary Ensures both instance_id and instance_name parameters are available. ================================================ FILE: website/content/en/runbook/steps/gce/os-login-status-check.md ================================================ --- title: "gce/Os Login Status Check" linkTitle: "Os Login Status Check" weight: 3 type: docs description: > Checks for OS Login setup and and non OS login setup on a VM to guide further diagnostics. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description If using OS Login investigates OS Login related configuration and permission and if not Checks Keybased Configuration. ================================================ FILE: website/content/en/runbook/steps/gce/posix-user-has-valid-ssh-key-check.md ================================================ --- title: "gce/Posix User Has Valid Ssh Key Check" linkTitle: "Posix User Has Valid Ssh Key Check" weight: 3 type: docs description: > Verifies the existence of a valid SSH key for the specified local Proxy user on a (VM). --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Ensures that the local user has at least one valid SSH key configured in the VM's metadata, which is essential for secure SSH access. The check is performed against the SSH keys stored within the VM's metadata. A successful verification indicates that the user is likely able to SSH into the VM using their key. ### Failure Reason The local user "{local_user}" lacks at least one valid SSH key for VM: "{full_resource_path}". ### Failure Remediation Ensure "{local_user}" has a valid SSH key by following the guide: ### Success Reason The local user "{local_user}" is confirmed to have at least one valid SSH key configured on the GCE Instance: "{full_resource_path}". ================================================ FILE: website/content/en/runbook/steps/gce/preemptible-instance.md ================================================ --- title: "gce/Preemptible Instance" linkTitle: "Preemptible Instance" weight: 3 type: docs description: > Investigate the cause of a preemptible VM termination --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Preemptible VMs are short-lived instances. This step investigates normal or abnormal circumstances leading to termination. ### Failure Reason {status_message} ### Failure Remediation Instance {full_resource_path} were preempted as part of a spot VM normal process. Spot VMs have significant discounts, but Compute Engine might preemptively stop or delete (preempt) Spot VMs to reclaim capacity at any time. Read more on here the preemption process occurs here [1][2] This is a normal process and no action is required. [1] [2] ================================================ FILE: website/content/en/runbook/steps/gce/scheduled-stop-policy.md ================================================ --- title: "gce/Scheduled Stop Policy" linkTitle: "Scheduled Stop Policy" weight: 3 type: docs description: > Investigate the cause of a scheduled stop policy --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step investigates whether the VM termination was initiated by a scheduled stop policy. ### Failure Reason Instance {full_resource_path} was terminated by account {stop_account} due to a scheduled stop policy. ### Failure Remediation No action required. VM is currently running. ================================================ FILE: website/content/en/runbook/steps/gce/serial-log-analyzer-start.md ================================================ --- title: "gce/Serial Log Analyzer Start" linkTitle: "Serial Log Analyzer Start" weight: 3 type: docs description: > Fetching VM details. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: START ### Description None ### Failure Reason The GCE Instance {full_resource_path} is in {status} state. ### Failure Remediation Restart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING. Consult the following documentation: - Restarting a compute instance: - Troubleshooting VM startup issues: ### Success Reason The GCE Instance {full_resource_path} is in {status} state. ### Skipped Reason Could not validate VM lifecycle for GCE Instance {full_resource_path}. ================================================ FILE: website/content/en/runbook/steps/gce/shielded-vm-integrity-failure.md ================================================ --- title: "gce/Shielded Vm Integrity Failure" linkTitle: "Shielded Vm Integrity Failure" weight: 3 type: docs description: > Investigate the cause of a shielded VM integrity failure --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Shielded VMs are hardened VMs that are protected against tampering and boot-time attacks. This step investigates the root cause of the integrity failure. ### Failure Reason Instance {full_resource_path} was terminated by account {stop_account} due to a scheduled stop policy. ### Failure Remediation No action required. VM is currently running. ================================================ FILE: website/content/en/runbook/steps/gce/single-termination-check.md ================================================ --- title: "gce/Single Termination Check" linkTitle: "Single Termination Check" weight: 3 type: docs description: > Investigates the cause of a single VM termination. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description It analyzes log entries to identify whether the termination was normal or abnormal and prepares a Root Cause Analysis (RCA) based on the findings. The investigation focuses on the first occurring termination, assuming that any subsequent terminations are inconsequential ### Success Reason No GCE Instance was terminated between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gce/ssh-end.md ================================================ --- title: "gce/Ssh End" linkTitle: "Ssh End" weight: 3 type: docs description: > Concludes the SSH diagnostics process, offering guidance based on the user's feedback. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: END ### Description If SSH issues persist, it directs the user to helpful resources and suggests contacting support with a detailed report ================================================ FILE: website/content/en/runbook/steps/gce/ssh-in-browser-check.md ================================================ --- title: "gce/Ssh In Browser Check" linkTitle: "Ssh In Browser Check" weight: 3 type: docs description: > Investigate SSH in Browser components --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: COMPOSITE STEP ### Description SSH can be done via SSH in Browser feature, if desired by user, check components required for SSH in browser to work correctly ================================================ FILE: website/content/en/runbook/steps/gce/ssh-start.md ================================================ --- title: "gce/Ssh Start" linkTitle: "Ssh Start" weight: 3 type: docs description: > Initiates diagnostics for SSH connectivity issues. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: START ### Description This step prepares the environment for SSH diagnostics by gathering necessary information about the target VM. It verifies the existence of the VM, checks user-supplied parameters for validity, and sets up initial conditions for further diagnostic steps. ================================================ FILE: website/content/en/runbook/steps/gce/stop-operation-gateway.md ================================================ --- title: "gce/Stop Operation Gateway" linkTitle: "Stop Operation Gateway" weight: 3 type: docs description: > Determine the kind of stop operation --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description Stop operations can be caused by a user, customer-owned service account, or Google workflows due to billing issues or resource policies. ================================================ FILE: website/content/en/runbook/steps/gce/terminate-on-host-maintenance.md ================================================ --- title: "gce/Terminate On Host Maintenance" linkTitle: "Terminate On Host Maintenance" weight: 3 type: docs description: > Investigate the cause of termination related to host maintenance --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Termination on host maintenance is normal behavior. This step verifies if it was expected. This will typically happen during a failed live migration. ### Failure Reason {status_message} ### Failure Remediation Instance {full_resource_path} maintenance policy is set to TERMINATE, Compute Engine stops your VM when there is a maintenance event where Google must move your VM to another host. If you want to change your VM's onHostMaintenance policy to restart automatically or live migrate [1]. Read more about Host Events [2] and how to set your termination policies[3]. [1] [2] [3] ================================================ FILE: website/content/en/runbook/steps/gce/termination-operation-type.md ================================================ --- title: "gce/Termination Operation Type" linkTitle: "Termination Operation Type" weight: 3 type: docs description: > Determine the type of termination --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description Analyzes log entries to identify whether the termination was normal or abnormal from a guest OS perspective. Was the shutdown intentionally issued by a user or a system fault? ================================================ FILE: website/content/en/runbook/steps/gce/user-or-service-account-initiated-stop.md ================================================ --- title: "gce/User Or Service Account Initiated Stop" linkTitle: "User Or Service Account Initiated Stop" weight: 3 type: docs description: > Investigate the cause of a user-initiated VM termination --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step investigates whether the VM termination was initiated by a user or a system fault. ### Failure Reason Account {stop_account} stopped the VM. ### Failure Remediation Instance {full_resource_path} was intentionally stopped by account {stop_account}. Simply restart the VM when safe to do so by following [1] [1] ================================================ FILE: website/content/en/runbook/steps/gce/vm-duplicate-ssh-keys-check.md ================================================ --- title: "gce/Vm Duplicate Ssh Keys Check" linkTitle: "Vm Duplicate Ssh Keys Check" weight: 3 type: docs description: > Check if there are duplicate ssh keys in VM metadata. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason VM {instance_name} has {count} duplicate SSH key(s) in its metadata: {keys} ### Failure Remediation Remove duplicate SSH keys from the instance or project metadata to avoid potential SSH issues and improve security hygiene. ### Success Reason No duplicate SSH keys were found in metadata for VM {instance_name}. ================================================ FILE: website/content/en/runbook/steps/gce/vm-guest-os-type.md ================================================ --- title: "gce/Vm Guest Os Type" linkTitle: "Vm Guest Os Type" weight: 3 type: docs description: > Distinguishes between Windows and Linux operating systems on a VM to guide further diagnostics. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description Based on the OS type, it directs the diagnostic process towards OS-specific checks, ensuring relevancy and efficiency in troubleshooting efforts. ================================================ FILE: website/content/en/runbook/steps/gce/vm-has-a-service-account.md ================================================ --- title: "gce/Vm Has A Service Account" linkTitle: "Vm Has A Service Account" weight: 3 type: docs description: > Verifies the existence of a service account for the Ops Agent to use. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This investigation only happens from the perspective googleapis and user provided input. We don't look inside the VM for cases like GOOGLE_APPLICATION_CREDENTIALS. User will have to know and specify that if They are using the application ### Failure Reason The Ops Agent on instance {full_resource_path} is not configured with a service account for exporting logs and metrics. ### Failure Remediation Attach an active service account to the GCE Instance {full_resource_path}. Consult the following documentation for guidance: - Attaching or changing a service account: - Authorizing the Ops Agent: ### Success Reason The Ops Agent on instance {full_resource_path} is configured with service account {sa} for exporting logs and metrics. ================================================ FILE: website/content/en/runbook/steps/gce/vm-has-ops-agent.md ================================================ --- title: "gce/Vm Has Ops Agent" linkTitle: "Vm Has Ops Agent" weight: 3 type: docs description: > Verifies that a GCE Instance has at ops agent installed and --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description You can check for sub agents for logging and metrics Attributes - Set `check_logging` to check for logging sub agent. Defaults is True - Set `check_metrics` to check for metrics sub agent. Default is True ### Failure Reason GCE Instance "{full_resource_path}" does not have {subagent} agent installed and is not exporting data. ### Failure Remediation Install the {subagent} agent on GCE Instance "{full_resource_path}". Consult the following documentation for troubleshooting assistance: ### Success Reason GCE Instance "{full_resource_path}" has {subagent} agent installed and is exporting data. ================================================ FILE: website/content/en/runbook/steps/gce/vm-lifecycle-state.md ================================================ --- title: "gce/Vm Lifecycle State" linkTitle: "Vm Lifecycle State" weight: 3 type: docs description: > Validates that a specified VM is in the 'RUNNING' state. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step is crucial for confirming the VM's availability and operational readiness. It checks the VM's lifecycle state and reports success if the VM is running or fails the check if the VM is in any other state, providing detailed status information for troubleshooting. ### Failure Reason The GCE Instance {full_resource_path} is in {status} state. ### Failure Remediation Restart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING. Consult the following documentation: - Restarting a compute instance: - Troubleshooting VM startup issues: ### Success Reason The GCE Instance {full_resource_path} is in {status} state. ### Skipped Reason Could not validate VM lifecycle for GCE Instance {full_resource_path}. ================================================ FILE: website/content/en/runbook/steps/gce/vm-metadata-check.md ================================================ --- title: "gce/Vm Metadata Check" linkTitle: "Vm Metadata Check" weight: 3 type: docs description: > Validates a specific boolean metadata key-value pair on a GCE Instance instance. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This step checks if the VM's metadata contains a specified key with the expected boolean value, facilitating configuration verification and compliance checks. ### Failure Reason GCE Instance metadata `{metadata_key}` doesn't have the expected value: {expected_value} of type {expected_value_type} ### Failure Remediation Update the metadata `{metadata_key}` to have the expected value {expected_value} Follow guide [1] one to update the a metadata value. [1] ### Success Reason GCE Instance metadata `{metadata_key}` has the expected value: {expected_value} of type {expected_value_type} ================================================ FILE: website/content/en/runbook/steps/gce/vm-performance-checks.md ================================================ --- title: "gce/Vm Performance Checks" linkTitle: "Vm Performance Checks" weight: 3 type: docs description: > Assesses the overall performance of a VM by evaluating its memory, CPU, and disk utilization. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: COMPOSITE STEP ### Description This composite diagnostic step sequentially checks for high memory utilization, high disk utilization, and CPU performance issues. It adds specific child steps designed to identify and report potential performance bottlenecks that could impact the VM's operation and efficiency. ================================================ FILE: website/content/en/runbook/steps/gce/vm-performance-end.md ================================================ --- title: "gce/Vm Performance End" linkTitle: "Vm Performance End" weight: 3 type: docs description: > Finalize VM performance diagnostics. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: END ### Description None ================================================ FILE: website/content/en/runbook/steps/gce/vm-performance-start.md ================================================ --- title: "gce/Vm Performance Start" linkTitle: "Vm Performance Start" weight: 3 type: docs description: > Fetching VM details. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: START ### Description None ### Failure Reason The GCE Instance {full_resource_path} is in {status} state. ### Failure Remediation Restart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING. Consult the following documentation: - Restarting a compute instance: - Troubleshooting VM startup issues: ### Success Reason The GCE Instance {full_resource_path} is in {status} state. ### Skipped Reason Could not validate VM lifecycle for GCE Instance {full_resource_path}. ================================================ FILE: website/content/en/runbook/steps/gce/vm-scope.md ================================================ --- title: "gce/Vm Scope" linkTitle: "Vm Scope" weight: 3 type: docs description: > Verifies that a GCE Instance has at least one of a list of required access scopes --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description Confirms that the VM has the necessary OAuth scope https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam Attributes - Use `access_scopes` to specify eligible access scopes - Set `require_all` to True if the VM should have all the required access. False (default) means to check if it has at least one of the required access scopes ### Failure Reason GCE Instance {full_resource_path} doesn't have any of the required access scopes: {required_access_scope} ### Failure Remediation Access scopes are the legacy method of specifying authorization for your VM instance. They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries. Access scopes don't apply for calls made using gRPC. Update `{full_resource_path}` to enable at least one of the following access scopes: {required_access_scope} Consult the following documentation for guidance on changing the service account and scopes: ### Success Reason GCE instance {full_resource_path} has at least one of the required scope: {present_access_scopes} ================================================ FILE: website/content/en/runbook/steps/gce/vm-serial-logs-check.md ================================================ --- title: "gce/Vm Serial Logs Check" linkTitle: "Vm Serial Logs Check" weight: 3 type: docs description: > Searches for predefined good or bad patterns in the serial logs of a GCE Instance. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: AUTOMATED STEP ### Description This diagnostic step checks the VM's serial logs for patterns that are indicative of successful operations ('GOOD_PATTERN') or potential issues ('BAD_PATTERN'). Based on the presence of these patterns, the step categorizes the VM's status as 'OK', 'Failed', or 'Uncertain'. ### Failure Reason Anomalies detected in the serial logs which align with the investigated bad patterns ### Failure Remediation Investigate potential issues via the serial console. If GRUB_TIMEOUT is greater than 0, access the interactive session for more insights. Explore rescue options for inaccessible VMs or review possible guest OS issues. - Interactive Serial Console: - Rescuing VMs: If escalating Guest OS related issues to Google Cloud Support, verify that the issue is in line with Google Cloud Platform's Guest OS support policy - Google Cloud Platform Support Scope: ### Success Reason The VM's Linux OS shows no signs of anomalies, indicating a *likely* stable operational state. ### Uncertain Reason Lack of serial log data prevented a thorough assessment of the VM's operational state. Result is inconclusive ### Uncertain Remediation Verify the VM's operational status by reviewing available serial logs. Address any detected guest OS issues using the provided documentation, keeping in mind certain guest OS faults may be beyond Google Cloud Platform's support scope. - Viewing Serial Port Output: - Resolving Kernel Panic: - Google Cloud Platform Support Scope: ### Skipped Reason There are no logs to examine. ================================================ FILE: website/content/en/runbook/steps/gce/vm-termination-end.md ================================================ --- title: "gce/Vm Termination End" linkTitle: "Vm Termination End" weight: 3 type: docs description: > Finalize the diagnostics process for VM terminations --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: END ### Description This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for VM terminations. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. ================================================ FILE: website/content/en/runbook/steps/gce/vm-termination-start.md ================================================ --- title: "gce/Vm Termination Start" linkTitle: "Vm Termination Start" weight: 3 type: docs description: > VM termination pre-runbook checks --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: START ### Description None ================================================ FILE: website/content/en/runbook/steps/gce/vm-termination-type.md ================================================ --- title: "gce/Vm Termination Type" linkTitle: "Vm Termination Type" weight: 3 type: docs description: > --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: GATEWAY ### Description It analyzes log entries to identify whether the termination was normal or abnormal from a guest os perspective. Was the shutdown intentionally issued by a user or a system fault ================================================ FILE: website/content/en/runbook/steps/gce/windows-guest-os-checks.md ================================================ --- title: "gce/Windows Guest Os Checks" linkTitle: "Windows Guest Os Checks" weight: 3 type: docs description: > Diagnoses common issues related to Windows Guest OS, focusing on boot-up processes and SSHD. --- **Product**: [Compute Engine](https://cloud.google.com/compute)\ **Step Type**: COMPOSITE STEP ### Description This composite diagnostic step evaluates the VM's metadata to ensure SSH is enabled for Windows, checks serial logs for successful boot-up patterns, and involves a manual check on the Windows SSH agent status. It aims to identify and help troubleshoot potential issues that could impact the VM's accessibility via SSHD. ================================================ FILE: website/content/en/runbook/steps/gcf/_index.md ================================================ --- title: "GCF" linkTitle: "gcf" type: docs weight: 2 --- All steps available in gcf ================================================ FILE: website/content/en/runbook/steps/gcf/default-service-account-check.md ================================================ --- title: "gcf/Default Service Account Check" linkTitle: "Default Service Account Check" weight: 3 type: docs description: > Check if cloud run function default service account and agent exists and is enabled. --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The Cloud Functions service agent or the default runtime service account does not exist or is not enabled: ### Failure Remediation Refer to the IAM roles guide for providing default roles to the Cloud Run function default service account and the service agent: ### Success Reason The service agent and default service account exist and are enabled. ================================================ FILE: website/content/en/runbook/steps/gcf/failed-deployment-end-step.md ================================================ --- title: "gcf/Failed Deployment End Step" linkTitle: "Failed Deployment End Step" weight: 3 type: docs description: > Finalizing cloud run function deployment failures --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Step Type**: END ### Description None ================================================ FILE: website/content/en/runbook/steps/gcf/failed-deployments-start.md ================================================ --- title: "gcf/Failed Deployments Start" linkTitle: "Failed Deployments Start" weight: 3 type: docs description: > Check for function status and existence of function in project. --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Step Type**: START ### Description None ================================================ FILE: website/content/en/runbook/steps/gcf/function-global-scope-check.md ================================================ --- title: "gcf/Function Global Scope Check" linkTitle: "Function Global Scope Check" weight: 3 type: docs description: > Check for deployment failures due to global scope code errors --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason A problem with the function code was detected. The deployment pipeline completed the function deployment, but failed at the last step- sending a health check to the function. This health check executes the function's global scope, which may be throwing an exception, crashing, or timing out. ### Failure Remediation Refer to the following document to address this error: ### Success Reason No issues found with function global scope. ================================================ FILE: website/content/en/runbook/steps/gcf/location-constraint-check.md ================================================ --- title: "gcf/Location Constraint Check" linkTitle: "Location Constraint Check" weight: 3 type: docs description: > Check for deployment failures due to resource location constraint --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason An active resource location constraint policy in the organization restricts function deployment in the regions specified by the policy. ### Failure Remediation Refer to the following document to address this error: ### Success Reason No resource location constraints blocking function deployment. ================================================ FILE: website/content/en/runbook/steps/gcf/user-service-account-check.md ================================================ --- title: "gcf/User Service Account Check" linkTitle: "User Service Account Check" weight: 3 type: docs description: > Check if User/Service account has permissions on Cloud function runtime service account --- **Product**: [Cloud Functions](https://cloud.google.com/functions)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The user principal '{user_principal}' does not have roles/iam.serviceAccountUser role on the runtime Service Account '{runtime_account}' ### Failure Remediation Assign the Service Account User role (roles/iam.serviceAccountUser) to the user on the default or non-default runtime service account. This role includes the iam.serviceAccounts.actAs permission. ### Success Reason The user principal '{user_principal}' has roles/iam.serviceAccountUser role on the runtime Service Account '{runtime_account}' ================================================ FILE: website/content/en/runbook/steps/gcp/_index.md ================================================ --- title: "GCP" linkTitle: "gcp" type: docs weight: 2 --- All steps available in gcp ================================================ FILE: website/content/en/runbook/steps/gcp/human-task.md ================================================ --- title: "gcp/Human Task" linkTitle: "Human Task" weight: 3 type: docs description: > Defines a manual approach verification step involving human intervention. --- **Product**: \ **Step Type**: MANUAL STEP ### Description This is special step in a runbook designed for situations where automated verification is not possible, and human judgment is required. It prompts the operator (a human user) to manually check and confirm whether an issue is occurring. This can involve accessing a system, reviewing configurations, or validating the state of a resource based on provided instructions. ================================================ FILE: website/content/en/runbook/steps/gcp/resource-attribute-check.md ================================================ --- title: "gcp/Resource Attribute Check" linkTitle: "Resource Attribute Check" weight: 3 type: docs description: > Generalized step used to verify the value of a GCP resource's attribute. --- **Product**: \ **Step Type**: AUTOMATED STEP ### Description This step enables the flexible verification of attributes within any JSON-viewable GCP resource, such as GCE instances or Cloud Storage buckets. It checks if a specific resource's attribute matches an expected value and optionally supports custom evaluation logic for more complex verification scenarios. Attributes: resource_query (Callable): Function to fetch the target GCP resource. Must return a `Resource` object. Typically, this is one of the `gcpdiag.queries.*` methods. query_kwargs (dict): Keyword arguments to pass to `resource_query`. resource (Resource): The GCP resource fetched by `resource_query`. attribute (Optional[tuple]): Path to the nested attribute within the resource to be verified, represented as a tuple of strings. Utilizes `boltons.iterutils.get_path` for navigation. evaluator (Optional[Callable]): A custom function for performing complex evaluations on a resource attribute. Should return a dict: {'success_reason': {'key1': 'value1', ...}, 'failure_reason': {...}} expected_value (str): The expected value of the target attribute. expected_value_type (type): Data type of the expected attribute value. Defaults to `str`. extract_args (dict): Configuration for extracting additional information for message formatting, with keys specifying the argument name and values specifying the source and attribute path. message_args (dict): Extracted arguments used for formatting outcome messages. Usage: An example to check the status of a GCE instance: ```python status_check = ResourceAttributeCheck() status_check.resource_query = gce.get_instance status_check.query_kwargs = { 'project_id': op.get(flags.PROJECT_ID), 'zone': op.get(flags.ZONE), 'instance_name': op.get(flags.INSTANCE_NAME) } status_check.attribute = ('status',) status_check.expected_value = 'RUNNING' status_check.extract_args = { 'vm_name': {'source': models.Resource, 'attribute': 'name'}, 'status': {'source': models.Resource, 'attribute': 'status'}, 'resource_project_id': {'source': models.Parameter, 'attribute': 'project_id'} } ``` `get_path`: https://boltons.readthedocs.io/en/latest/_modules/boltons/iterutils.html#get_path ### Failure Reason Resource doesn't have the expected value ### Failure Remediation Update the resource to have the expected value ### Success Reason Resource has the expected value ================================================ FILE: website/content/en/runbook/steps/gcp/service-api-status-check.md ================================================ --- title: "gcp/Service Api Status Check" linkTitle: "Service Api Status Check" weight: 3 type: docs description: > Check whether or not a service has been enabled for use by a consumer --- **Product**: \ **Step Type**: AUTOMATED STEP ### Description Checks is a Cloud API service is enabled or not. Guides the user to enable the service if it's expected to be enabled and vice versa. Attributes: api_name (str): The name of the service to check. expected_state (str): The expected state of the service, used to verify against the actual service state retrieved during execution. API state has to be one of the value of gcp.constants.APIState ### Failure Reason The `{service_name}` service is not in the expected state `{expected_state}` ### Failure Remediation This service is expected to be enabled. Execute the command below to enable {service_name} in {project_id} gcloud services enable {service_name} --project={project_id} Resources ### Success Reason The `{service_name}` service is currently in the expected state: `{expected_state}`. ================================================ FILE: website/content/en/runbook/steps/gcpdiag/_index.md ================================================ --- title: "GCPDIAG" linkTitle: "gcpdiag" type: docs weight: 2 --- All steps available in gcpdiag ================================================ FILE: website/content/en/runbook/steps/gcpdiag/end-step.md ================================================ --- title: "gcpdiag/End Step" linkTitle: "End Step" weight: 3 type: docs description: > End Event of a Diagnostic Tree --- **Product**: \ **Step Type**: END ### Description None ================================================ FILE: website/content/en/runbook/steps/gcpdiag/start-step.md ================================================ --- title: "gcpdiag/Start Step" linkTitle: "Start Step" weight: 3 type: docs description: > Start Event of a Diagnostic tree --- **Product**: \ **Step Type**: START ### Description None ================================================ FILE: website/content/en/runbook/steps/gke/_index.md ================================================ --- title: "GKE" linkTitle: "gke" type: docs weight: 2 --- All steps available in gke ================================================ FILE: website/content/en/runbook/steps/gke/api-enabled.md ================================================ --- title: "gke/Api Enabled" linkTitle: "Api Enabled" weight: 3 type: docs description: > Step to verify if a given Google Cloud API is enabled for the project. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Attributes: api_name (str): the API service name (e.g. 'monitoring', 'logging'). template (str): the runbook template path for this check. ================================================ FILE: website/content/en/runbook/steps/gke/ca-disabled-annotation.md ================================================ --- title: "gke/Ca Disabled Annotation" linkTitle: "Ca Disabled Annotation" weight: 3 type: docs description: > Check for "no.scale.down.node.scale.down.disabled.annotation" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleDown event failed because the node is annotated with cluster-autoscaler.kubernetes.io/scale-down-disabled: true. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Cluster autoscaler skips nodes with this annotation without considering their utilization and this message is logged regardless of the node's utilization factor. If you want cluster autoscaler to scale down these nodes, remove the annotation. ### Success Reason No "no.scale.down.node.scale.down.disabled.annotation" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-failed-to-evict-pods.md ================================================ --- title: "gke/Ca Failed To Evict Pods" linkTitle: "Ca Failed To Evict Pods" weight: 3 type: docs description: > Check for "scale.down.error.failed.to.evict.pods" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleDown event failed because some of the Pods could not be evicted from a node. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Review best practices for Pod Disruption Budgets to ensure that the rules allow for eviction of application replicas when acceptable. ### Success Reason No "scale.down.error.failed.to.evict.pods" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-instance-timeout.md ================================================ --- title: "gke/Ca Instance Timeout" linkTitle: "Ca Instance Timeout" weight: 3 type: docs description: > Check for "scale.up.error.waiting.for.instances.timeout" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleUp event failed because instances in some of the MIGs failed to appear in time. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation This message is transient. If it persists, engage Google Cloud Support for further investigation. ### Success Reason No "scale.up.error.waiting.for.instances.timeout" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-ip-space-exhausted.md ================================================ --- title: "gke/Ca Ip Space Exhausted" linkTitle: "Ca Ip Space Exhausted" weight: 3 type: docs description: > Check for "scale.up.error.ip.space.exhausted" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleUp event failed because the cluster doesn't have enough unallocated IP address space to use to add new nodes or Pods. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Refer to the troubleshooting steps to address the lack of IP address space for the nodes or pods. ### Success Reason No "scale.up.error.ip.space.exhausted" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-min-resource-limit-exceeded.md ================================================ --- title: "gke/Ca Min Resource Limit Exceeded" linkTitle: "Ca Min Resource Limit Exceeded" weight: 3 type: docs description: > Check for "no.scale.down.node.minimal.resource.limits.exceeded" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleDown event failed because it would violate cluster-wide minimal resource limits. These are the resource limits set for node auto-provisioning. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Review your limits for memory and vCPU and, if you want cluster autoscaler to scale down this node, decrease the limits by following the documentation ### Success Reason No "no.scale.down.node.minimal.resource.limits.exceeded" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-min-size-reached.md ================================================ --- title: "gke/Ca Min Size Reached" linkTitle: "Ca Min Size Reached" weight: 3 type: docs description: > Check for "no.scale.down.node.node.group.min.size.reached" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Node cannot be removed because its node group is already at its minimum size. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Review and adjust the minimum value set for node pool autoscaling. ### Success Reason No "no.scale.down.node.node.group.min.size.reached" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-no-place-to-move-pods.md ================================================ --- title: "gke/Ca No Place To Move Pods" linkTitle: "Ca No Place To Move Pods" weight: 3 type: docs description: > Check for "no.scale.down.node.no.place.to.move.pods" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleDown event failed because there's no place to move Pods. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation If you expect that the Pod should be rescheduled, review the scheduling requirements of the Pods on the underutilized node to determine if they can be moved to another node in the cluster. To learn more, see the link ### Success Reason No "no.scale.down.node.no.place.to.move.pods" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-not-safe-to-evict-annotation.md ================================================ --- title: "gke/Ca Not Safe To Evict Annotation" linkTitle: "Ca Not Safe To Evict Annotation" weight: 3 type: docs description: > Check for "no.scale.down.node.pod.not.safe.to.evict.annotation" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleDown event failed because a Pod on the node has the safe-to-evict=false annotation Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation If the Pod can be safely evicted, edit the manifest of the Pod and update the annotation to "cluster-autoscaler.kubernetes.io/safe-to-evict": "true". ### Success Reason No "no.scale.down.node.pod.not.safe.to.evict.annotation" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-out-of-resources.md ================================================ --- title: "gke/Ca Out Of Resources" linkTitle: "Ca Out Of Resources" weight: 3 type: docs description: > Check for "scale.up.error.out.of.resources" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleUp event failed because some of the MIGs could not be increased due to lack of resources. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Follow the documentation: ### Success Reason No "scale.up.error.out.of.resources" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-pod-controller-not-found.md ================================================ --- title: "gke/Ca Pod Controller Not Found" linkTitle: "Ca Pod Controller Not Found" weight: 3 type: docs description: > Check for "no.scale.down.node.pod.controller.not.found" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Pod is blocking the ScaleDown event because its controller (for example, a Deployment or ReplicaSet) can't be found. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation To determine what actions were taken that left the Pod running after its controller was removed, review the logs. To resolve this issue, manually delete the Pod. ### Success Reason No "no.scale.down.node.pod.controller.not.found" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-pod-kube-system-unmovable.md ================================================ --- title: "gke/Ca Pod Kube System Unmovable" linkTitle: "Ca Pod Kube System Unmovable" weight: 3 type: docs description: > Check for "no.scale.down.node.pod.kube.system.unmovable" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleDown event failed because the pod is a non-DaemonSet, non-mirrored, Pod without a PodDisruptionBudget in the kube-system namespace. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation By default, Pods in the kube-system namespace aren't removed by cluster autoscaler. To resolve this issue, either add a PodDisruptionBudget for the kube-system Pods or use a combination of node pools taints and tolerations to separate kube-system Pods from your application Pods. To learn more, see ### Success Reason No "no.scale.down.node.pod.kube.system.unmovable" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-pod-not-enough-pdb.md ================================================ --- title: "gke/Ca Pod Not Enough Pdb" linkTitle: "Ca Pod Not Enough Pdb" weight: 3 type: docs description: > Check for "no.scale.down.node.pod.not.enough.pdb" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleDown event failed the pod doesn't have enough PodDisruptionBudget. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Review the PodDisruptionBudget for the Pod and consider making it less restrictive. To learn more, see ### Success Reason No "no.scale.down.node.pod.not.enough.pdb" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-pod-unexpected-error.md ================================================ --- title: "gke/Ca Pod Unexpected Error" linkTitle: "Ca Pod Unexpected Error" weight: 3 type: docs description: > Check for "no.scale.down.node.pod.unexpected.error" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Pod is blocking the ScaleDown event because of an unexpected error. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation The root cause of this error is unknown. Contact Cloud Customer Care for further investigation. ### Success Reason No "no.scale.down.node.pod.unexpected.error" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-pods-not-backed-by-controller.md ================================================ --- title: "gke/Ca Pods Not Backed By Controller" linkTitle: "Ca Pods Not Backed By Controller" weight: 3 type: docs description: > Check for "no.scale.down.node.pod.not.backed.by.controller" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleDown event failed because a Pod is not backed by a controller such as ReplicationController, DaemonSet, Job, StatefulSet, or ReplicaSet. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Set the annotation "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" for the Pod or define an acceptable controller ### Success Reason No "no.scale.down.node.pod.not.backed.by.controller" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-quota-exceeded.md ================================================ --- title: "gke/Ca Quota Exceeded" linkTitle: "Ca Quota Exceeded" weight: 3 type: docs description: > Check for "scale.up.error.quota.exceeded" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleUp event failed because some of the MIGs could not be increased, due to exceeded Compute Engine quota. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Check the Errors tab of the MIG in Google Cloud console to see what quota is being exceeded. Follow the instructions to request a quota increase: ### Success Reason No "scale.up.error.quota.exceeded errors" found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/ca-service-account-deleted.md ================================================ --- title: "gke/Ca Service Account Deleted" linkTitle: "Ca Service Account Deleted" weight: 3 type: docs description: > Check for "scale.up.error.service.account.deleted" log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The scaleUp event failed because a service account used by Cluster Autoscaler has been deleted. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Engage Google Cloud Support for further investigation. ### Success Reason No "scale.up.error.service.account.deleted" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/check-config-map.md ================================================ --- title: "gke/Check Config Map" linkTitle: "Check Config Map" weight: 3 type: docs description: > This will confirm config map is present as that llow user to make changes on ip-agent. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description This will check if config map is present ? ### Uncertain Reason When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] ### Uncertain Remediation If you needs to customize the configmap, then follow the steps [1] to deploy ip-masq-agent ConfigMap in the kube-system namespace. [1] ================================================ FILE: website/content/en/runbook/steps/gke/check-daemon-set.md ================================================ --- title: "gke/Check Daemon Set" linkTitle: "Check Daemon Set" weight: 3 type: docs description: > On GKE for ip-masq can be deployed or automatically in cluster. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description This step will verify if Daemon set present? ### Uncertain Reason Check for ip-masq-agent daemonSet is deployed in the Cluster. If yes follow check next step. ### Uncertain Remediation If No, please follow [1] to deploy ip-masq-agent DaemonSet in the kube-system namespace and wait for around 5 minutes for the DaemonSet to be ready. [1] ================================================ FILE: website/content/en/runbook/steps/gke/check-destination-ip.md ================================================ --- title: "gke/Check Destination Ip" linkTitle: "Check Destination Ip" weight: 3 type: docs description: > GKE is expected not to IP masquerade. If needed then it should be added on nonMasqueradeCIDRs. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description This will confirm if pod IP is present on the list. ### Uncertain Reason When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] ### Uncertain Remediation Follow the steps for including the Destination IP CIDRs in nonMasqueradeCIDRs [1]. [1] ================================================ FILE: website/content/en/runbook/steps/gke/check-node-ip.md ================================================ --- title: "gke/Check Node Ip" linkTitle: "Check Node Ip" weight: 3 type: docs description: > When Node IP is present under non-masquerade list, it will allow node IP to not get natted . --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description This will check node IP address is present default non-masquerade destinations. ### Uncertain Reason When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] ### Uncertain Remediation Follow the steps for including the Node IP CIDRs in nonMasqueradeCIDRs [1]. [1] ================================================ FILE: website/content/en/runbook/steps/gke/check-pod-ip.md ================================================ --- title: "gke/Check Pod Ip" linkTitle: "Check Pod Ip" weight: 3 type: docs description: > GKE preserves the Pod IP addresses sent to destinations in the nonMasqueradeCIDRs list. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description This will confirm if pod IP is present on the list. ### Uncertain Reason When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1]. [1] ### Uncertain Remediation Follow the steps for including the pod IP CIDRs in nonMasqueradeCIDRs [1]. [1] ================================================ FILE: website/content/en/runbook/steps/gke/cluster-autoscaler-end.md ================================================ --- title: "gke/Cluster Autoscaler End" linkTitle: "Cluster Autoscaler End" weight: 3 type: docs description: > Finalizes the diagnostics process for `Cluster Autoscaler`. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for `Cluster Autoscaler`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. ================================================ FILE: website/content/en/runbook/steps/gke/cluster-autoscaler-start.md ================================================ --- title: "gke/Cluster Autoscaler Start" linkTitle: "Cluster Autoscaler Start" weight: 3 type: docs description: > Initiates diagnostics for Cluster Autoscaler. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description Check - if logging API is enabled - verify that the cluster exists at that location ================================================ FILE: website/content/en/runbook/steps/gke/cluster-level-logging-enabled.md ================================================ --- title: "gke/Cluster Level Logging Enabled" linkTitle: "Cluster Level Logging Enabled" weight: 3 type: docs description: > Verifies that logging is enabled at the GKE cluster level. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Confirms that the GKE cluster configuration explicitly enables logging. Even if the project has the Cloud Logging API enabled and other settings are correct, logs won't be collected if cluster-level logging is disabled. ### Failure Reason The logging health check failed because cluster-level logging is not enabled. ### Failure Remediation Enable cluster-level logging for your Kubernetes cluster. This can be done through the Google Cloud Console or GKE-specific tools. See instructions: ### Success Reason Cluster-level logging is enabled for the cluster. ================================================ FILE: website/content/en/runbook/steps/gke/cluster-level-monitoring-configuration-enabled.md ================================================ --- title: "gke/Cluster Level Monitoring Configuration Enabled" linkTitle: "Cluster Level Monitoring Configuration Enabled" weight: 3 type: docs description: > Verifies that monitoring is enabled at the GKE cluster level. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Confirms that the GKE cluster configuration explicitly enables monitoring. Even if the project has the Cloud Monitoring API enabled and other settings are correct, monitoring won't be collected if cluster-level monitoring is disabled . ### Failure Reason The monitoring health check failed because cluster-level monitoring is not enabled. ### Failure Remediation Enable cluster-level monitoring for the Kubernetes cluster. This can be done through the Google Cloud Console or GKE-specific tools. See instructions: ### Success Reason Cluster-level monitoring is enabled for the cluster. ================================================ FILE: website/content/en/runbook/steps/gke/cluster-version.md ================================================ --- title: "gke/Cluster Version" linkTitle: "Cluster Version" weight: 3 type: docs description: > Check for cluster version --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/gke/gke-ip-masq-standard-end.md ================================================ --- title: "gke/Gke Ip Masq Standard End" linkTitle: "Gke Ip Masq Standard End" weight: 3 type: docs description: > Concludes the the diagnostics process. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description If connectivity issue presits from pod, it directs the user to helpful resources and suggests contacting support with a detailed report. ================================================ FILE: website/content/en/runbook/steps/gke/gke-ip-masq-standard-start.md ================================================ --- title: "gke/Gke Ip Masq Standard Start" linkTitle: "Gke Ip Masq Standard Start" weight: 3 type: docs description: > Check if the project ID, GKE cluster and its location is valid. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description Based on information provided would direct toward further troubleshooting. ================================================ FILE: website/content/en/runbook/steps/gke/image-connection-timeout-restricted-private.md ================================================ --- title: "gke/Image Connection Timeout Restricted Private" linkTitle: "Image Connection Timeout Restricted Private" weight: 3 type: docs description: > The connection to restricted.googleapis.com or private.googleapis.com is timing out --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Connections from node to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30) timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to these IP ranges. Example log entry: {log_entry} ### Failure Remediation Ensure firewall rules permit egress traffic to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30). Refer to the documentation: ### Success Reason No "Failed to pull image.*dial tcp.*199.36.153.\d:443: i/o timeout" errors were found for cluster between {start_time} and {end_time}. ================================================ FILE: website/content/en/runbook/steps/gke/image-connection-timeout.md ================================================ --- title: "gke/Image Connection Timeout" linkTitle: "Image Connection Timeout" weight: 3 type: docs description: > The connection to Google APIs is timing out --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Connections from node to Google APIs timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to Google APIs. The specific blocked IP range might be indicated in the log entry. Example log entry: {log_entry} ### Failure Remediation Ensure firewall rules permit egress traffic to Google APIs. Refer to the documentation: ### Success Reason No "Failed to pull image.*dial tcp.*i/o timeout" errors were found for cluster between {start_time} and {end_time}. ================================================ FILE: website/content/en/runbook/steps/gke/image-dns-issue.md ================================================ --- title: "gke/Image Dns Issue" linkTitle: "Image Dns Issue" weight: 3 type: docs description: > Node DNS sever cannot resolve the IP of the repository --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The DNS resolver (metadata server 169.254.169.254:53) on node was unable to resolve the image repository's IP address, preventing image pull. This often indicates issues with networking or DNS configuration. Example log entry: {log_entry} ### Failure Remediation Verify networking and DNS requirements, particularly for Private Google Access. Refer to the documentation: ### Success Reason No "Failed to pull image.*lookup.*server misbehaving" errors were found for cluster between {start_time} and {end_time}. ================================================ FILE: website/content/en/runbook/steps/gke/image-forbidden.md ================================================ --- title: "gke/Image Forbidden" linkTitle: "Image Forbidden" weight: 3 type: docs description: > Image cannot be pulled, insufficiente permissions --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Image cannot be pulled by a container on Pod, because there are not enough permissions to pull it from the repository. Verify the node SA has the correct permissions. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation Ensure the node service account has the necessary permissions to pull the image. Refer to the documentation: ### Success Reason No "Failed to pull image.*403 Forbidden" errors were found for cluster between {start_time} and {end_time}. ================================================ FILE: website/content/en/runbook/steps/gke/image-not-found-insufficient-scope.md ================================================ --- title: "gke/Image Not Found Insufficient Scope" linkTitle: "Image Not Found Insufficient Scope" weight: 3 type: docs description: > Check for Image not found log entries with insufficient_scope server message --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Either user or service account that's trying to pull the image doesn't have the necessary permissions to access it or Image doesn't exist. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation 1. Verify that the image name is correct. 2. Ensure the node's service account has the necessary permissions. Refer to the documentation: ### Success Reason No "Failed to pull image.*insufficient_scope" errors found between {start_time} and {end_time} ================================================ FILE: website/content/en/runbook/steps/gke/image-not-found.md ================================================ --- title: "gke/Image Not Found" linkTitle: "Image Not Found" weight: 3 type: docs description: > Check for Image not found log entries --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason A container on pod on node failed to pull image because the image was not found in the repository. Example log entry: {log_entry} ### Failure Remediation Refer to the troubleshooting documentation: ### Success Reason No "Failed to pull image.*not found" errors were found for cluster between {start_time} and {end_time}. ================================================ FILE: website/content/en/runbook/steps/gke/image-pull-end.md ================================================ --- title: "gke/Image Pull End" linkTitle: "Image Pull End" weight: 3 type: docs description: > Finalizes the diagnostics process for `GKE Image Pull runbbok`. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description This step prompts the user to confirm satisfaction with the analysis performed for `GKE Image Pull runbbok`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. ================================================ FILE: website/content/en/runbook/steps/gke/image-pull-start.md ================================================ --- title: "gke/Image Pull Start" linkTitle: "Image Pull Start" weight: 3 type: docs description: > Initiates diagnostics for Image pull runbook. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description Check - if logging API is enabled - verify that the cluster exists at that location ================================================ FILE: website/content/en/runbook/steps/gke/ip-exhaustion-end.md ================================================ --- title: "gke/Ip Exhaustion End" linkTitle: "Ip Exhaustion End" weight: 3 type: docs description: > Concludes the CLuster IP Exhaustion diagnostics process. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description If the issue persists, it directs the user to helpful resources and suggests contacting support with a detailed report. ================================================ FILE: website/content/en/runbook/steps/gke/ip-exhaustion-start.md ================================================ --- title: "gke/Ip Exhaustion Start" linkTitle: "Ip Exhaustion Start" weight: 3 type: docs description: > Start IP Exhaustion Checks --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description None ================================================ FILE: website/content/en/runbook/steps/gke/live-migration.md ================================================ --- title: "gke/Live Migration" linkTitle: "Live Migration" weight: 3 type: docs description: > Checks if the node was unavailable due to a live migration event. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Live migration check failed for node {node}. ### Failure Remediation There was a live migration event for the node {node}. For more details about Live migration process during maintenance events, please consult the documentation: ### Success Reason The node {node} was unavailable for reasons other than live migration. ================================================ FILE: website/content/en/runbook/steps/gke/logging-api-enabled.md ================================================ --- title: "gke/Logging Api Enabled" linkTitle: "Logging Api Enabled" weight: 3 type: docs description: > Verifies if the Cloud Logging API is enabled for the project hosting the GKE cluster. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description This initial step ensures that the fundamental infrastructure for logging within the project is operational. If the Cloud Logging API is disabled, logs from the GKE cluster won't be collected or stored by Google Cloud. ### Failure Reason The logging health check failed because the Cloud Logging API is not enabled for the project. ### Failure Remediation Enable the Cloud Logging API for your project through the Google Cloud Console or relevant API calls. See instructions: ### Success Reason The Cloud Logging API is enabled for the project. ================================================ FILE: website/content/en/runbook/steps/gke/logging-write-api-quota-exceeded.md ================================================ --- title: "gke/Logging Write Api Quota Exceeded" linkTitle: "Logging Write Api Quota Exceeded" weight: 3 type: docs description: > Verifies that Cloud Logging API write quotas have not been exceeded. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Checks if the project has exceeded any Cloud Logging write quotas within the defined timeframe. Exceeding the quota could prevent nodes from sending log data, even if other configurations are correct. ### Failure Reason The logging health check failed because your project has exceeded its Cloud Logging Write API quota. ### Failure Remediation Review logging usage and either reduce log volume or request a quota increase. See instructions: ### Success Reason The project is within its Cloud Logging Write API quota between {start_time} and {end_time}. ================================================ FILE: website/content/en/runbook/steps/gke/logs-end.md ================================================ --- title: "gke/Logs End" linkTitle: "Logs End" weight: 3 type: docs description: > Finalizes the 'GKE logs' diagnostic process. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description Prompts the user for satisfaction with the Root Cause Analysis (RCA) and takes appropriate actions based on their response: * **Confirmation:** Concludes the runbook execution. * **Further Action:** Triggers additional steps, such as report generation, if necessary. ================================================ FILE: website/content/en/runbook/steps/gke/logs-start.md ================================================ --- title: "gke/Logs Start" linkTitle: "Logs Start" weight: 3 type: docs description: > Initiates diagnostics for GKE Clusters. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description - **Initial Checks:** - Verifies if logging API is enabled for the project. - Validates that there are GKE clusters in the project. - (Optional) If a cluster name is provided, checks if that cluster exists in the project. - (Optional) If a location is provided, verifies there are clusters in that location. - (Optional) If both a location and a name are provided, verifies that the cluster exists at that location. ================================================ FILE: website/content/en/runbook/steps/gke/monitoring-api-configuration-enabled.md ================================================ --- title: "gke/Monitoring Api Configuration Enabled" linkTitle: "Monitoring Api Configuration Enabled" weight: 3 type: docs description: > Verifies if the Cloud Monitoring API is enabled for the project. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description This initial step ensures that the fundamental infrastructure for monitoring within the project is operational. If the Cloud Monitoring API is disabled, monitoring from the GKE cluster won't be collected or stored by Google Cloud. ### Failure Reason The Monitoring health check failed because the Cloud Monitoring API is not enabled for the project. ### Failure Remediation Enable the Cloud Monitoring API for the project through the Google Cloud Console or relevant API calls. See instructions: ### Success Reason The Cloud Monitoring API is enabled for the project. ================================================ FILE: website/content/en/runbook/steps/gke/monitoring-configuration-end.md ================================================ --- title: "gke/Monitoring Configuration End" linkTitle: "Monitoring Configuration End" weight: 3 type: docs description: > Finalizes diagnostics for GKE Monitoring. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description Prompts the user for satisfaction with the Root Cause Analysis (RCA) and takes appropriate actions based on their response: * **Confirmation:** Concludes the runbook execution. * **Further Action:** Triggers additional steps, such as report generation, if necessary. ================================================ FILE: website/content/en/runbook/steps/gke/monitoring-configuration-start.md ================================================ --- title: "gke/Monitoring Configuration Start" linkTitle: "Monitoring Configuration Start" weight: 3 type: docs description: > Initiates diagnostics for GKE Clusters. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description - **Initial Checks:** - Verifies if Monitoring API is enabled for the project. - Validates that there are GKE clusters in the project. - (Optional) If a cluster name is provided, checks if that cluster exists in the project. - (Optional) If a location is provided, verifies there are clusters in that location. - (Optional) If both a location and a name are provided, verifies that the cluster exists at that location. ================================================ FILE: website/content/en/runbook/steps/gke/node-auto-repair-end.md ================================================ --- title: "gke/Node Auto Repair End" linkTitle: "Node Auto Repair End" weight: 3 type: docs description: > Finalizes the diagnostics process for `Node AutoRepair`. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for `Node AutoRepair`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. ================================================ FILE: website/content/en/runbook/steps/gke/node-auto-repair-start.md ================================================ --- title: "gke/Node Auto Repair Start" linkTitle: "Node Auto Repair Start" weight: 3 type: docs description: > Check inputs and verify if there actually was a repair event --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description None ================================================ FILE: website/content/en/runbook/steps/gke/node-bootstrapping-end.md ================================================ --- title: "gke/Node Bootstrapping End" linkTitle: "Node Bootstrapping End" weight: 3 type: docs description: > Finalizes the diagnostics process for `GKE Node Bootstrapping`. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description This step prompts the user to confirm satisfaction with the analysis performed for `GKE Node Bootstrapping`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. ================================================ FILE: website/content/en/runbook/steps/gke/node-bootstrapping-start.md ================================================ --- title: "gke/Node Bootstrapping Start" linkTitle: "Node Bootstrapping Start" weight: 3 type: docs description: > Initiates diagnostics for Node Bootstrapping. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description Check - if there are GKE clusters in the project - if the instance provided is a GKE node - if serial logs are enabled - if there are any logs for the provided inputs ================================================ FILE: website/content/en/runbook/steps/gke/node-disk-full.md ================================================ --- title: "gke/Node Disk Full" linkTitle: "Node Disk Full" weight: 3 type: docs description: > Checks if node disks are full. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The node {node} was auto-repaired because it had disk pressure for more than 30 minutes. ### Failure Remediation The auto-repair should have fixed the detected disk pressure. For more details check: ### Success Reason The node {node} was auto-repaired for reasons other than disk pressure. ================================================ FILE: website/content/en/runbook/steps/gke/node-insert-check.md ================================================ --- title: "gke/Node Insert Check" linkTitle: "Node Insert Check" weight: 3 type: docs description: > Check for any errors during instances.insert method --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason There were {NR_ERRORS} errors found for instances.insert method for nodepool {NODEPOOL} in the cluster {NAME} in location {location} between {start_time} and {end_time}. Below is the latest log entry found that can help you identify the issue and involved objects: {log_entry} ### Failure Remediation Please refer to the troubleshooting steps to learn how to resolve the errors: ### Success Reason No errors found for instances.insert method for nodepool {NODEPOOL} in the cluster {NAME} in location {location} between {start_time} and {end_time}. ================================================ FILE: website/content/en/runbook/steps/gke/node-ip-range-exhaustion.md ================================================ --- title: "gke/Node Ip Range Exhaustion" linkTitle: "Node Ip Range Exhaustion" weight: 3 type: docs description: > Check Node IP Range Exhaustion and offer remediation. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Checks Node IP range exhaustion and offers remediation step. ### Failure Reason Node IP exhaustion is detected in the cluster {cluster_name} for the subnet {node_subnet} ### Failure Remediation Please follow the below documentation [1] to expand the ip range of the node subnet. The subnet that has exhausted its IP space is {node_subnet}. [1] ### Success Reason No Node IP exhaustion detected in the cluster {cluster_name} ================================================ FILE: website/content/en/runbook/steps/gke/node-not-ready.md ================================================ --- title: "gke/Node Not Ready" linkTitle: "Node Not Ready" weight: 3 type: docs description: > Checks if nodes have been in NotReady status for an extended period (e.g., 10 minutes). --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The node {node} was auto-repaired because it was in a NotReady state for more than approximately 10 minutes. ### Failure Remediation The auto-repair should have fixed the detected NotReady state. For more details check: ### Success Reason The node {node} was auto-repaired for reasons other than being in a NotReady state. ================================================ FILE: website/content/en/runbook/steps/gke/node-pool-cloud-logging-access-scope.md ================================================ --- title: "gke/Node Pool Cloud Logging Access Scope" linkTitle: "Node Pool Cloud Logging Access Scope" weight: 3 type: docs description: > Verifies that GKE node pools have the required Cloud Logging access scopes. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Confirms that the nodes within the GKE cluster's node pools have the necessary scopes to write log data to Cloud Logging. These scopes include 'https://www.googleapis.com/auth/logging.write' and potentially others, such as 'https://www.googleapis.com/auth/cloud-platform' and 'https://www.googleapis.com/auth/logging.admin', depending on the configuration. ### Failure Reason The logging health check failed because node pools have insufficient access scope for Cloud Logging. ### Failure Remediation Adjust node pool access scope to grant necessary logging permissions. See instructions: ### Success Reason Node pools have sufficient access scope for Cloud Logging. ================================================ FILE: website/content/en/runbook/steps/gke/node-pool-cloud-monitoring-access-scope-configuration.md ================================================ --- title: "gke/Node Pool Cloud Monitoring Access Scope Configuration" linkTitle: "Node Pool Cloud Monitoring Access Scope Configuration" weight: 3 type: docs description: > Verifies that GKE node pools have the required Cloud Monitoring access scopes. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Confirms that the nodes within the GKE cluster's node pools have the necessary scopes to write metrics data to Cloud Monitoring. These scopes include 'https://www.googleapis.com/auth/monitoring' and potentially others, such as 'https://www.googleapis.com/auth/cloud-platform' and 'https://www.googleapis.com/auth/monitoring.write', depending on the configuration. ### Failure Reason The monitoring health check failed because node pools have insufficient access scope for Cloud Monitoring. ### Failure Remediation Adjust node pool access scope to grant necessary monitoring permissions. See instructions: ### Success Reason Node pools have sufficient access scope for Cloud Monitoring. ================================================ FILE: website/content/en/runbook/steps/gke/node-pool-scope.md ================================================ --- title: "gke/Node Pool Scope" linkTitle: "Node Pool Scope" weight: 3 type: docs description: > Step to verify that each GKE node pool has at least one of the required OAuth scopes. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Attributes: required_scopes (list): a list of OAuth scope URLs to check. template (str): the runbook template path for this check. service_name (str) the service whose role need to be check. ================================================ FILE: website/content/en/runbook/steps/gke/node-pool-upgrade.md ================================================ --- title: "gke/Node Pool Upgrade" linkTitle: "Node Pool Upgrade" weight: 3 type: docs description: > Checks if the node was removed by Cluster Upgrade Operation. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The node {node} was unavailable due to a node pool upgrade. ### Failure Remediation This is expected behavior, when the upgrade is performed, nodes are drained and re-created to match the desired version. To list the node upgrade operations, please issue the following gcloud command: ``` gcloud container operations list --filter=operationType:UPGRADE_NODES ``` For more details about node upgrades please consult the documentation: ### Success Reason The node {node} was unavailable for reasons other than a node pool upgrade. ================================================ FILE: website/content/en/runbook/steps/gke/node-registration-success.md ================================================ --- title: "gke/Node Registration Success" linkTitle: "Node Registration Success" weight: 3 type: docs description: > Verify Node Registration Checker output --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Node {node} in zone {location} is currently running, but it failed registration with kube-apiserver, below is the Node Registration Checker summary: {log_entries[0]} {log_entries[1]} {log_entries[2]} {log_entries[3]} {log_entries[4]} {log_entries[5]} {log_entries[6]} {log_entries[7]} {log_entries[8]} {log_entries[9]} {log_entries[10]} {log_entries[11]} {log_entries[12]} {log_entries[13]} {log_entries[14]} {log_entries[15]} ### Failure Remediation To understand why the node failed registration with kube-apiserver, please check the following documentation page: ### Success Reason Node {node} is currently running and, according to the output from Node Registration Checker, it was registered successfully. Below is the log entry that shows successful registration: {log_entry} ### Uncertain Reason The node {node} in the zone {location} is running, but there are no logs generated by Node Registration Checker in the provided time range {start_time} - {end_time}. ### Uncertain Remediation This runbook looks for logs generated by Node Registration Checker. Because there are no logs from Node Registration Checker for the node {node}, but it is running, there could be a different issue with the node. Please try the runbook with a different node in the same nodepool. ### Failure Reason [Alternative 2] Node {node} in zone {location} is not currently running. While checking logs it was found that it failed registration with kube-apiserver. Below is the Node Registration Checker summary: {log_entries[0]} {log_entries[1]} {log_entries[2]} {log_entries[3]} {log_entries[4]} {log_entries[5]} {log_entries[6]} {log_entries[7]} {log_entries[8]} {log_entries[9]} {log_entries[10]} {log_entries[11]} {log_entries[12]} {log_entries[13]} {log_entries[14]} {log_entries[15]} ### Failure Reason [Alternative 3] Could not find summary from Node Registration Checker for node {node} in zone {location}. The node might have been deleted before Node Registration Checker could finish running. ### Failure Remediation [Alternative 3] Try to run the runbook with a node that is currently running. ================================================ FILE: website/content/en/runbook/steps/gke/node-removed-by-autoscaler.md ================================================ --- title: "gke/Node Removed By Autoscaler" linkTitle: "Node Removed By Autoscaler" weight: 3 type: docs description: > Checks if the node was removed by Cluster Autoscaler. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The node {node} was removed by the cluster autoscaler. ### Failure Remediation This is expected behavior. GKE's cluster autoscaler automatically resizes the number of nodes in a given node pool, based on the demands of your workloads. When demand is low, the cluster autoscaler scales back down to a minimum size that you designate. For more details about Cluster Autoscaler ScaleDown events please consult the documentation: ### Success Reason The node {node} was unavailable for reasons other than scale down by the cluster autoscaler. ================================================ FILE: website/content/en/runbook/steps/gke/node-unavailability-end.md ================================================ --- title: "gke/Node Unavailability End" linkTitle: "Node Unavailability End" weight: 3 type: docs description: > Finalizes the diagnostics process for `Node Unavailability`. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for `Node Unavailability`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. ================================================ FILE: website/content/en/runbook/steps/gke/node-unavailability-start.md ================================================ --- title: "gke/Node Unavailability Start" linkTitle: "Node Unavailability Start" weight: 3 type: docs description: > Check inputs and verify if the node was unavailable --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description None ================================================ FILE: website/content/en/runbook/steps/gke/nodeproblem.md ================================================ --- title: "gke/Nodeproblem" linkTitle: "Nodeproblem" weight: 3 type: docs description: > This will confirm if there is any VPC flow logs to destination IP. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description This will either rule out ip-masq issue or points to ip-mas-agent issue. ### Failure Reason There are no egress traffic to Destination IP which indicates that GKE NODE is also having issue to connect to destination IP. ### Failure Remediation Enable VPC flow logs by following the documentation and look if traffic id going out to destination: ### Success Reason When VPC flow logs shows traffic is going out, then GKE IP masquerading may be working as intended. If the end-to-end case is still failing, the problem is likely to be somewhere in the networking path between Dest-IP and node on which impacted Pod is scheduled. ================================================ FILE: website/content/en/runbook/steps/gke/pod-ip-range-exhaustion.md ================================================ --- title: "gke/Pod Ip Range Exhaustion" linkTitle: "Pod Ip Range Exhaustion" weight: 3 type: docs description: > Check Pod IP Range Exhaustion and offer remediation. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Checks Pod IP range exhaustion and offers remediation step. ### Failure Reason Pod IP exhaustion is detected in the cluster {cluster_name} ### Failure Remediation Please follow the below documentation [1] to add ipv4 range to the autopilot cluster to mitgate the issue. [1] ================================================ FILE: website/content/en/runbook/steps/gke/preemption-condition.md ================================================ --- title: "gke/Preemption Condition" linkTitle: "Preemption Condition" weight: 3 type: docs description: > Checks if the node was preempted. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The node {node} was preempted. ### Failure Remediation Compute Engine might stop (preempt) preemptible instances if it needs to reclaim the compute capacity for allocation to other VMs. For more details about preemptible VMs in GKE please consult the documentation: ### Success Reason The node {node} was unavailable for reasons other than preemption. ================================================ FILE: website/content/en/runbook/steps/gke/resource-quota-exceeded.md ================================================ --- title: "gke/Resource Quota Exceeded" linkTitle: "Resource Quota Exceeded" weight: 3 type: docs description: > Verify that Kubernetes resource quotas have not been exceeded. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The cluster projects/{project}/locations/{location}/clusters/{cluster} has exceeded its Kubernetes resource quota between {start_time} and {end_time}. Example log entry that would help identify involved objects: {log_entry} ### Failure Remediation For clusters with under 100 nodes, GKE applies a Kubernetes resource quota to every namespace. These quotas protect the cluster's control plane from instability caused by potential bugs in applications deployed to the cluster. These quotas cannot be removed because they are enforced by GKE. See details: To list resource quotas in the cluster, use the following command: `kubectl get resourcequota --all-namespaces` Refer to the Kubernetes documentation for more information about resource quotas: For the GKE resource quotas named "gke-resource-quotas", open a GCP support case to request either an increase to a specific quota limit or the disabling of GKE resource quotas for the cluster. ### Success Reason The cluster projects/{project}/locations/{location}/clusters/{cluster} was within its Kubernetes resource quota between {start_time} and {end_time}. ================================================ FILE: website/content/en/runbook/steps/gke/resource-quotas-end.md ================================================ --- title: "gke/Resource Quotas End" linkTitle: "Resource Quotas End" weight: 3 type: docs description: > Finalizes the diagnostics process for `Resource Quotas`. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: END ### Description This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed for `Resource Quotas`. Depending on the user's response, it may conclude the runbook execution or trigger additional steps, such as generating a report of the findings. ================================================ FILE: website/content/en/runbook/steps/gke/resource-quotas-start.md ================================================ --- title: "gke/Resource Quotas Start" linkTitle: "Resource Quotas Start" weight: 3 type: docs description: > Initiates diagnostics for Resource Quotas. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: START ### Description Check - if logging API is enabled - if there are GKE clusters in the project - if a cluster name is provided, verify if that cluster exists in the project - if a location is provided, verify there are clusters in that location - if both a location and a name are provided, verify that the cluster exists at that location ================================================ FILE: website/content/en/runbook/steps/gke/service-account-logging-permission.md ================================================ --- title: "gke/Service Account Logging Permission" linkTitle: "Service Account Logging Permission" weight: 3 type: docs description: > Verifies the service accounts associated with node pools have 'logging.logWriter' permissions. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Checks that the service accounts used by nodes in the GKE cluster have the essential "roles/logging.logWriter" IAM permission. This permission is required to send log data to Google Cloud Logging. ### Failure Reason The logging health check failed because the service account lacks necessary permissions to write logs. ### Failure Remediation Grant the service account the 'roles/logging.logWriter' role or equivalent permissions. See instructions: ### Success Reason The service account has necessary permissions to write logs. ================================================ FILE: website/content/en/runbook/steps/gke/service-account-monitoring-permission-configuration.md ================================================ --- title: "gke/Service Account Monitoring Permission Configuration" linkTitle: "Service Account Monitoring Permission Configuration" weight: 3 type: docs description: > Verifies that service accounts in GKE node pools have monitoring permissions. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Checks that the service accounts used by nodes in the GKE cluster have the essential "roles/monitoring.metricWriter" IAM permission. This permission is required to send metric data to Google Cloud Monitoring. ### Failure Reason The monitoring health check failed because the service account lacks necessary permissions to write metrics. ### Failure Remediation Grant the service account the 'roles/monitoring.metricWriter' role or equivalent permissions. See instructions: ### Success Reason The service account has necessary permissions to write metrics. ================================================ FILE: website/content/en/runbook/steps/gke/service-account-permission.md ================================================ --- title: "gke/Service Account Permission" linkTitle: "Service Account Permission" weight: 3 type: docs description: > Step to verify that service accounts in GKE node pools have the required IAM roles. --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description Attributes: required_roles (list): list of IAM roles to check on each node-pool service account. template (str): the runbook template path for this check. service_name (str) the service for which service account permissions need to be check. ================================================ FILE: website/content/en/runbook/steps/gke/unallocatable-gpu.md ================================================ --- title: "gke/Unallocatable Gpu" linkTitle: "Unallocatable Gpu" weight: 3 type: docs description: > Checks GPU allocation --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The node {node} was auto-repaired because it had unallocatable GPU(s) for more than 15 minutes. ### Failure Remediation The auto-repair should have fixed the detected unallocatable GPU(s). For more details check: ### Success Reason The node {node} was auto-repaired for reasons other than unallocatable GPU(s). ================================================ FILE: website/content/en/runbook/steps/gke/unallocatable-tpu.md ================================================ --- title: "gke/Unallocatable Tpu" linkTitle: "Unallocatable Tpu" weight: 3 type: docs description: > Checks TPU allocation --- **Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The node {node} was auto-repaired because it had unallocatable TPU(s) for more than 10 minutes. ### Failure Remediation The auto-repair should have fixed the detected unallocatable TPU(s). For more details check: ### Success Reason The node {node} was auto-repaired for reasons other than unallocatable TPU(s). ================================================ FILE: website/content/en/runbook/steps/iam/_index.md ================================================ --- title: "IAM" linkTitle: "iam" type: docs weight: 2 --- All steps available in iam ================================================ FILE: website/content/en/runbook/steps/iam/iam-policy-check.md ================================================ --- title: "iam/Iam Policy Check" linkTitle: "Iam Policy Check" weight: 3 type: docs description: > Verify if specificd principal has permissions or roles permission/role in project. --- **Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\ **Step Type**: AUTOMATED STEP ### Description This step supports checking for either all specified permissions/roles are present or at least one for the principal (user or service account). It reports the present and missing permissions/roles accordingly. Also, identifying which permissions or roles are present and which are missing. Attributes: principal (str): The identifier for the principal whose permissions are being checked. permissions (Optional[Set[str]]): A set of IAM permissions to check. Specify this or `roles`. roles (Optional[Set[str]]): A set of IAM roles to check. Specify this or `permissions`. require_all (bool): If True, requires all specified permissions or roles to be present. If False, requires at least one of the specified permissions or roles to be present. template (str): The template used for generating reports for the step. ### Failure Reason {principal} does not have at least one of the expected {permissions_or_roles}: {missing_permissions_or_roles}. ### Failure Remediation Grant a role containing the missing permissions by following the instructions in [1]. Refer to [2] for a list of Google Cloud predefined roles. Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant. [1] [2] ### Success Reason {principal} has expected {permissions_or_roles}. {present_permissions_or_roles}. ================================================ FILE: website/content/en/runbook/steps/iam/vm-has-an-active-service-account.md ================================================ --- title: "iam/Vm Has An Active Service Account" linkTitle: "Vm Has An Active Service Account" weight: 3 type: docs description: > Investigates if a VM's service account is active. --- **Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\ **Step Type**: AUTOMATED STEP ### Description This step checks if the specified service account is neither disabled nor deleted. It verifies the existence of the service account and its active status within the specified project. Attributes: template (str): Template identifier for reporting the service account status. service_account (str, optional): The email address of the service account to check. If not provided, it is obtained from the operation's context. project_id (str, optional): The ID of the Google Cloud project within which to check the service account. If not provided, it is obtained from the operation's context. ### Failure Reason Service account {sa} is deleted. ### Failure Remediation Service account {sa} has been deleted. Deleted service accounts can be undeleted within 30 days of deletion [2]. After 30 days, IAM permanently removes the service account, and it cannot be recovered. Refer to [1] for details on deleting service accounts and [2] for undeleting them. [1] [2] ### Success Reason Service account {sa} is active. ### Uncertain Reason Could not find service account {sa}. ### Uncertain Remediation Could not determine the status (e.g., active, disabled, or deleted) for service account `{sa}`. - To manually verify the service account, refer to the [documentation for listing and checking service accounts](https://cloud.google.com/iam/docs/service-accounts-list-edit#listing). - For information on deleted service accounts, see [deleted service account details](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#deleting). - If the service account was deleted, review [how to undelete a service account](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting) to recover it if feasible. ================================================ FILE: website/content/en/runbook/steps/interconnect/_index.md ================================================ --- title: "INTERCONNECT" linkTitle: "interconnect" type: docs weight: 2 --- All steps available in interconnect ================================================ FILE: website/content/en/runbook/steps/interconnect/bgp-down-flap-end.md ================================================ --- title: "interconnect/Bgp Down Flap End" linkTitle: "Bgp Down Flap End" weight: 3 type: docs description: > Concludes the diagnostics process. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Step Type**: END ### Description The following are considered error and need further debugging: 1> BGP down events found without interconnect maintenance 2> BGP flaps with duration over graceful restart timer 3> BGP flaps with duration less than graceful restart timer but no Cloud Router maintenance event Please contact GCP support for further debugging. ================================================ FILE: website/content/en/runbook/steps/interconnect/bgp-down-flap-start.md ================================================ --- title: "interconnect/Bgp Down Flap Start" linkTitle: "Bgp Down Flap Start" weight: 3 type: docs description: > Check if the project and other parameters are valid and vlan attachments are available. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Step Type**: START ### Description This step starts the BGP issue debugging process by verifying the correct input parameters have been provided and checking to ensure that the following resources exist. - The Project - Region - The vlan attachments exist for the given project ### Success Reason Total `{total_num}` vlan attachments found in `{region}` in project `{project_id}`. ### Skipped Reason Unable to fetch any vlan attachments in any region in project `{project_id}`. ================================================ FILE: website/content/en/runbook/steps/interconnect/check-bgp-down.md ================================================ --- title: "interconnect/Check Bgp Down" linkTitle: "Check Bgp Down" weight: 3 type: docs description: > Check if vlan attachments have BGP down state. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Step Type**: AUTOMATED STEP ### Description Check if any vlan attachments have in BGP down state. ### Failure Reason Attachment:{attachment_name}, Interconnect:{interconnect_name}, Cloud_Router_Name:{router_name} ### Failure Remediation For any interconnects in BGP down state, continue runbook check if the interconnect is in maintenance state. Check the public documentation for guidance. ### Success Reason No VLAN attachments have BGP down in region `{region}` in project `{project_id}`. ================================================ FILE: website/content/en/runbook/steps/interconnect/check-bgp-flap.md ================================================ --- title: "interconnect/Check Bgp Flap" linkTitle: "Check Bgp Flap" weight: 3 type: docs description: > Check if any BGP flap events, report error flaps with duration over 60 seconds. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Step Type**: AUTOMATED STEP ### Description Check if any BGP flap events, report error flaps with duration over 60 seconds. ### Failure Reason Abnormal long BGP flaps: crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details} ### Failure Remediation BGP flaps lasting longer than `{timer}` seconds are unlikely to be caused by Cloud Router maintenance events. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance. or contact GCP support.Logging query example {example_query} ### Success Reason No BGP flaps are found in region `{region}` in project `{project_id}`. ### Uncertain Reason Short duration BGP flaps: crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details} ### Uncertain Remediation Continue runbook to check if there are `cloud router maintenance` events align with BGP flaps. ### Skipped Reason Unable to fetch any vlan attachments to check BGP flap in any region in project `{project_id}`. ================================================ FILE: website/content/en/runbook/steps/interconnect/check-cloud-router-maintenance.md ================================================ --- title: "interconnect/Check Cloud Router Maintenance" linkTitle: "Check Cloud Router Maintenance" weight: 3 type: docs description: > Check if any Cloud Router had maintenance event. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Step Type**: AUTOMATED STEP ### Description Check if any Cloud Router had maintenance event. Report BGP flaps without Cloud Router maintenance event. ### Failure Reason Error BGP : crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details} ### Failure Remediation BGP flaps lasting less than {timer} seconds have been observed without Cloud Router maintenance. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.Logging query example or contact GCP support.{example_query} ### Success Reason BGP flaps less than {timer} seconds are all caused by Cloud Router maintenance events. ### Skipped Reason No BGP flaps, skip cloud router mainteance check in in region `{region}` in project `{project_id}`. ================================================ FILE: website/content/en/runbook/steps/interconnect/check-interconnect-maintenance.md ================================================ --- title: "interconnect/Check Interconnect Maintenance" linkTitle: "Check Interconnect Maintenance" weight: 3 type: docs description: > Check if interconnects with BGP down are in maintenance state. --- **Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\ **Step Type**: AUTOMATED STEP ### Description Check if any interconnects with BGP down are in maintenance state. ### Failure Reason The interconnect `{interconnect_name}` with BGP down status has no planned maintenance. ### Failure Remediation Interconnect BGP down can be caused by various reasons. Suggested remediation: {remediation} ### Success Reason The interconnects with BGP down status align with the planned interconnect maintenance events. ### Skipped Reason No interconnects have BGP down status, skip interconnect mainteance check in in region `{region}` in project `{project_id}`. ================================================ FILE: website/content/en/runbook/steps/lb/_index.md ================================================ --- title: "LB" linkTitle: "lb" type: docs weight: 2 --- All steps available in lb ================================================ FILE: website/content/en/runbook/steps/lb/analyze-certificate-status.md ================================================ --- title: "lb/Analyze Certificate Status" linkTitle: "Analyze Certificate Status" weight: 3 type: docs description: > Analyze the status of the Google-managed certificate. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: GATEWAY ### Description None ### Failure Reason The Google-managed SSL certificate "{name}" is in the PROVISIONING_FAILED_PERMANENTLY state. This is a non-recoverable state. ### Failure Remediation Recreate the certificate. Refer to the documentation for instructions on creating SSL certificates. ### Success Reason The Google-managed SSL certificate "{name}" is in {status} state. ### Uncertain Reason The Google-managed SSL certificate "{name}" is in the {status} state. {context}. ================================================ FILE: website/content/en/runbook/steps/lb/analyze-domain-statuses.md ================================================ --- title: "lb/Analyze Domain Statuses" linkTitle: "Analyze Domain Statuses" weight: 3 type: docs description: > Check the status of each individual domain associated with the SSL certificate. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: GATEWAY ### Description None ### Success Reason All domains associated with the SSL certificate "{name}" are in the ACTIVE state. Domain provisioning appears successful. ================================================ FILE: website/content/en/runbook/steps/lb/analyze-failed-caa-check.md ================================================ --- title: "lb/Analyze Failed Caa Check" linkTitle: "Analyze Failed Caa Check" weight: 3 type: docs description: > Analyze domains in "FAILED_CAA_CHECKING" or "FAILED_CAA_FORBIDDEN" state. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The following domains are in FAILED_CAA_CHECKING or FAILED_CAA_FORBIDDEN state: {domains} for SSL certificate "{name}". This indicates misconfigured CAA records. CAA records authorize specific Certificate Authorities to issue certificates for the domain. ### Failure Remediation Ensure the CAA records are configured correctly. Refer to the documentation for instructions on configuring CAA records: ================================================ FILE: website/content/en/runbook/steps/lb/analyze-failed-not-visible-domains.md ================================================ --- title: "lb/Analyze Failed Not Visible Domains" linkTitle: "Analyze Failed Not Visible Domains" weight: 3 type: docs description: > Analyze domains in "FAILED_NOT_VISIBLE" state. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The following domains are in FAILED_NOT_VISIBLE state: {domains} for SSL certificate "{name}". This usually means the domain's DNS records are not correctly pointing to the load balancer. ================================================ FILE: website/content/en/runbook/steps/lb/analyze-latest-health-check-log.md ================================================ --- title: "lb/Analyze Latest Health Check Log" linkTitle: "Analyze Latest Health Check Log" weight: 3 type: docs description: > Look for the latest health check logs and based on that decide what to do next. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: GATEWAY ### Description None ================================================ FILE: website/content/en/runbook/steps/lb/analyze-provisioning-domains.md ================================================ --- title: "lb/Analyze Provisioning Domains" linkTitle: "Analyze Provisioning Domains" weight: 3 type: docs description: > Analyze domains in "PROVISIONING" state. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Uncertain Reason The following domains are in PROVISIONING state: {domains} for SSL certificate "{name}". ### Uncertain Remediation The provisioning process can take some time. The diagnostic process will continue checking other potential issues while the domains are provisioning. ================================================ FILE: website/content/en/runbook/steps/lb/analyze-rate-limited-domains.md ================================================ --- title: "lb/Analyze Rate Limited Domains" linkTitle: "Analyze Rate Limited Domains" weight: 3 type: docs description: > Analyze domains in "FAILED_RATE_LIMITED" state. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The following domains are in FAILED_RATE_LIMITED state: {domains} for SSL certificate "{name}". This indicates rate limiting by the Certificate Authority. This likely means the allowed number of certificate requests in a short period was exceeded. ### Failure Remediation Wait for a while and then check the certificate status again. If the issue persists, contact Google Cloud Support. ================================================ FILE: website/content/en/runbook/steps/lb/analyze-timeout-health-check-log.md ================================================ --- title: "lb/Analyze Timeout Health Check Log" linkTitle: "Analyze Timeout Health Check Log" weight: 3 type: docs description: > Analyzes logs with the detailed health check state TIMEOUT --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Health check logs for backend service {bs_url} show the detailed health state "TIMEOUT". Responses received from backends: {probe_results_text_str} The backend might be timing out because: 1. The application is overloaded and taking too long to respond. 2. The backend service or health check timeout is too low. 3. Connection to the endpoint cannot be established - the backend instance has crashed or is otherwise unresponsive. The following responses were received from your backends: {probe_results_text_str} ### Failure Remediation 1. Make sure that the backend service timeout (current value: {bs_timeout_sec}s) and health check timeout (current value: {hc_timeout_sec}s) are appropriately configured to accommodate the application's expected response time. 2. Investigate the application's configuration to ensure it is correctly handling health check probe requests. {success_criteria} 3. Check if firewall rules or iptables configurations are blocking the health check probes from reaching the backend instances, resulting in timeouts. ================================================ FILE: website/content/en/runbook/steps/lb/analyze-unhealthy-health-check-log.md ================================================ --- title: "lb/Analyze Unhealthy Health Check Log" linkTitle: "Analyze Unhealthy Health Check Log" weight: 3 type: docs description: > Analyzes logs with detailed health state UNHEALTHY. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Health check logs for backend service {bs_url} indicate a detailed health state of UNHEALTHY. The backend instances are reachable but are not passing the health check requirements. Responses received from backends: {probe_results_text_str} ### Failure Remediation {success_criteria} Investigate the configuration of the application to ensure it aligns with these health check expectations. If a different endpoint should be checked or a different response is expected, adjust the health check settings accordingly. Common reasons for UNHEALTHY detailed state: * Health check is configured for a path to which application is not responding. In this case, the probes are responded with 404 response. Solution is to either change the health check path or configure the application to provide a successful response on the path configured on the health check. * Backend server has received a HTTP request, which is not compliant with the application's expectations, from the health check probers. In this case, the probes are responded with 400 response. The failure message is 'Bad Request [Code: 400]'. Possible reason for the backend server to serve 400 response is: * A missing or wrong Host header received. * The health checker sends a request using a protocol version that the application doesn't support or expects in a different format. Examples: * Client sends HTTP/1.0 but server requires HTTP/1.1+ and interprets the request as invalid. * Client sends HTTP/2 frames to a plain HTTP/1.1 endpoint (without proper upgrade negotiation). * Client sends TLS-encrypted data to an HTTP (non-TLS) port — server tries to parse the Client Hello as an HTTP request, resulting in an improper request, and returns 400. * Unexpected query parameters in the request sent by the health check probers. * TLS version mismatch between the health check probers and the backend server. The failure message will be Connect failed. * Health check probes are responded with Service Unavailable, Service Temporarily Unavailable, Internal Server Error. In this case, the probes are responded with 5XX. Solution is to check: * if the backend instances are experiencing high CPU, memory, or network utilization, and as a result the customer backends are responding with 5XX. * if the instances are running a bad image. Bad instance images might have missing or improperly configured services, broken or ignored startup scripts, stale environment configurations. * CheckInterval config on the health check might be too short, leading to an excessive number of health checks sent to the backends, leading to high network utilization on the backends * Some backends are configured to use a different port/protocol for health checks, than the named port assigned for traffic by the load balancer. In such a case, if the correct port is not configured in the backend, this can become problematic. In the health check logs, the failure explanation is visible as Connection refused, HTTP response: , Error: Connection refused or HTTP response: , Error: Connection reset by peer. Solution is to make the backend application listen on the port that is configured for the health check purposes or to change the health check port to the port on which the application is listening. ================================================ FILE: website/content/en/runbook/steps/lb/analyze-unknown-health-check-log.md ================================================ --- title: "lb/Analyze Unknown Health Check Log" linkTitle: "Analyze Unknown Health Check Log" weight: 3 type: docs description: > Analyze logs with detailed health state UNKNOWN. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Health check logs for backend service {bs_url} show entries with the detailed health state UNKNOWN. This indicates that the health checking system is aware of the instance, but its health status is undetermined. This situation can arise when a new endpoint is unresponsive to health checks and there's a substantial configured timeout period (approximately 25 seconds or longer). In such cases, the "UNKNOWN" state might be published while the health checker waits for the timeout to expire. Additionally, "UNKNOWN" could also be published during outage scenarios if the health checkers themselves are crashing. In this critical situation, endpoints that previously had known health states could transition to "UNKNOWN". ### Failure Remediation For new endpoints: Consider reducing the timeout period for health checks if appropriate, especially during initial setup or testing phases. For potential Google Cloud outages: Use Personalized Service Health to check for any ongoing incidents that might be affecting the project or the specific service in question. If an incident is identified, follow any recommended mitigation steps or wait for the issue to be resolved by Google Cloud. ================================================ FILE: website/content/en/runbook/steps/lb/check-certificate-attachment.md ================================================ --- title: "lb/Check Certificate Attachment" linkTitle: "Check Certificate Attachment" weight: 3 type: docs description: > Check if the SSL certificate is attached to a target proxy. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: GATEWAY ### Description This target proxy needs to be in use by a forwarding rule for the provisioning to succeed. ### Failure Reason The SSL certificate "{name}" is not attached to any target proxies. Attach the certificate to a target proxy. ### Failure Remediation Follow the documentation to attach the certificate to a target proxy: ### Success Reason The SSL certificate "{name}" is attached to target proxies ({target_proxies}) that are in use by forwarding rules. ================================================ FILE: website/content/en/runbook/steps/lb/check-past-health-check-success.md ================================================ --- title: "lb/Check Past Health Check Success" linkTitle: "Check Past Health Check Success" weight: 3 type: docs description: > Checks if the health check has worked successfully in the past. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Uncertain Remediation Check the logs and monitoring metrics for the instances associated with backend service {bs_url}, focusing on recent timeframes to see if there were any errors, crashes, or resource exhaustion issues. Also inspect any application-specific logs for errors or warnings. ================================================ FILE: website/content/en/runbook/steps/lb/check-provisioning-time.md ================================================ --- title: "lb/Check Provisioning Time" linkTitle: "Check Provisioning Time" weight: 3 type: docs description: > Checks if the SSL certificate associated resources has been updated recently. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Success Reason No recent changes were detected for forwarding rules and target proxies associated with the SSL certificate "{name}". ### Uncertain Reason The SSL certificate "{name}" has recently had associated resources modified. This might affect DNS validation. Details are below: {recently_changed} ### Uncertain Remediation DNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If {name} was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete. ================================================ FILE: website/content/en/runbook/steps/lb/check-vm-performance.md ================================================ --- title: "lb/Check Vm Performance" linkTitle: "Check Vm Performance" weight: 3 type: docs description: > Checks if the instances performance is degraded. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: COMPOSITE STEP ### Description None ================================================ FILE: website/content/en/runbook/steps/lb/latency-end.md ================================================ --- title: "lb/Latency End" linkTitle: "Latency End" weight: 3 type: docs description: > Concludes the latency diagnostics process. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: END ### Description If the issue persists, it directs the user to helpful resources and suggests contacting support with a detailed report. ================================================ FILE: website/content/en/runbook/steps/lb/lb-backend-latency-check.md ================================================ --- title: "lb/Lb Backend Latency Check" linkTitle: "Lb Backend Latency Check" weight: 3 type: docs description: > Check if backend latency exceeds the threshold --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The forwarding rule has a backend latency of {average_latency} ms. This is higher than the threshold value of {threshold} ms. ### Failure Remediation Investigate the increased backend latency. Check the health and performance of the backend instances, examining metrics such as CPU utilization, memory usage, and disk I/O. ### Success Reason The forwarding rule has a backend latency of {average_latency} ms. This is less than the threshold value of {threshold} ms. ================================================ FILE: website/content/en/runbook/steps/lb/lb-error-rate-check.md ================================================ --- title: "lb/Lb Error Rate Check" linkTitle: "Lb Error Rate Check" weight: 3 type: docs description: > Check if error exceeds the threshold --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The forwarding rule has an average error rate of {average_error_rate}% in the last 15 minutes. This is higher than the threshold value of {threshold}%. ### Failure Remediation A high error rate indicates potential problems with the backend service. Check the logs for 5xx errors and investigate the root cause. Common issues include application errors and resource exhaustion. If the errors correlate with specific requests, examine those requests for patterns or anomalies. ### Success Reason The forwarding rule has an average error rate of {average_error_rate}% in the last 15 minutes. This is less than the threshold value of {threshold}%. ================================================ FILE: website/content/en/runbook/steps/lb/lb-latency-start.md ================================================ --- title: "lb/Lb Latency Start" linkTitle: "Lb Latency Start" weight: 3 type: docs description: > Fetch the specified forwarding rule --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: START ### Description None ================================================ FILE: website/content/en/runbook/steps/lb/lb-request-count-check.md ================================================ --- title: "lb/Lb Request Count Check" linkTitle: "Lb Request Count Check" weight: 3 type: docs description: > Check if request count per second exceeds the threshold --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The forwarding rule has an average request count of {average_request_count} requests/s in the last 15 minutes. This is higher than the threshold value of {threshold}. ### Failure Remediation The high request count suggests the backend may be overloaded. Consider scaling up the backend by adding more instances or increasing the resources of existing instances. ### Success Reason The forwarding rule has an average request count of {average_request_count} requests/s in the last 15 minutes. This is less than the threshold value of {threshold}. ================================================ FILE: website/content/en/runbook/steps/lb/ssl-certificates-end.md ================================================ --- title: "lb/Ssl Certificates End" linkTitle: "Ssl Certificates End" weight: 3 type: docs description: > Concludes the SSL Certificate diagnostics process. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: END ### Description None ================================================ FILE: website/content/en/runbook/steps/lb/ssl-certificates-start.md ================================================ --- title: "lb/Ssl Certificates Start" linkTitle: "Ssl Certificates Start" weight: 3 type: docs description: > Verify the existence type and status of the SSL certificate. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: START ### Description None ### Failure Reason The Google-managed SSL certificate "{name}" is not in ACTIVE state. ### Success Reason The SSL certificate "{name}" is in ACTIVE state. ### Skipped Reason The SSL certificate "{name}" does not exist or project {project_id} does not exist. ================================================ FILE: website/content/en/runbook/steps/lb/unhealthy-backends-end.md ================================================ --- title: "lb/Unhealthy Backends End" linkTitle: "Unhealthy Backends End" weight: 3 type: docs description: > Concludes the unhealthy backends diagnostics process. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: END ### Description If the issue persists, it directs the user to helpful resources and suggests contacting support with a detailed report. ================================================ FILE: website/content/en/runbook/steps/lb/unhealthy-backends-start.md ================================================ --- title: "lb/Unhealthy Backends Start" linkTitle: "Unhealthy Backends Start" weight: 3 type: docs description: > Start step for Unhealthy Backends runbook. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: START ### Description None ### Failure Reason The backend service {name} in the {region} scope has unhealthy backends. {detailed_reason} The backend service {name} uses the following health check: {hc_name}. {success_criteria} {timing_and_threshold} ### Success Reason All backends are currently healthy in backend service {name} in scope {region}. ### Uncertain Reason All backends are currently healthy in backend service {name} in scope {region}. However, health check logging is disabled, so recent unhealthy events could not be checked. ================================================ FILE: website/content/en/runbook/steps/lb/validate-backend-service-port-configuration.md ================================================ --- title: "lb/Validate Backend Service Port Configuration" linkTitle: "Validate Backend Service Port Configuration" weight: 3 type: docs description: > Checks if health check sends probe requests to the different port than serving port. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Success Reason The load balancer is performing health checks on the same port used for serving traffic. This is the standard configuration. {port_mapping} ### Uncertain Reason The load balancer is conducting health checks on port {hc_port} for the backend service {bs_resource}. However, this health check port differs from the port used by the load balancer for serving traffic on some backend instance groups. The backend service is configured to use the "{serving_port_name}" port, which is then translated to a specific port number based on the "{serving_port_name}" port mapping within each backend instance group. Affected backends: {formatted_igs} This configuration can be problematic unless the load balancer has been configured to use a different port for health checks purposefully. ### Uncertain Remediation 1. **Verify Intent:** Confirm if the health check port `{hc_port}` is *meant* to be different from the serving port defined by "{serving_port_name}" on the backends. 2. **Test Port on Backend VMs:** Check if port `{hc_port}` is listening on an instance from the affected groups. Run this command from your local machine/Cloud Shell: ```bash gcloud compute ssh [INSTANCE_NAME] --zone [ZONE] --project {project_id} --command="sudo ss -tlnp | grep ':{hc_port}'" ``` * Output showing `LISTEN` indicates the port is open and your application is likely listening. * No output suggests the port is not in a listening state on that VM. 3. **Adjust Configuration:** * **If Mismatch is Unintentional:** Align the load balancer's health check port in the backend service `{bs_resource}` to match the actual port number used by "{serving_port_name}" in the instance groups. * **If Mismatch is Intentional:** Ensure your application on the VMs is correctly configured to listen on port `{hc_port}`. * **If Port Not Listening:** Troubleshoot your application on the VM to ensure it's running and bound to port `{hc_port}`. Check the VM's local firewall as well. If the health check port `{hc_port}` is meant to be different from the serving port (e.g., a dedicated management/health endpoint), confirm that your application is correctly configured to listen on the health check port. ================================================ FILE: website/content/en/runbook/steps/lb/validate-backend-service-protocol-configuration.md ================================================ --- title: "lb/Validate Backend Service Protocol Configuration" linkTitle: "Validate Backend Service Protocol Configuration" weight: 3 type: docs description: > Checks if health check uses the same protocol as backend service for serving traffic. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Success Reason The load balancer is performing health checks using the same protocol ({hc_protocol}) used for serving traffic on backend service {bs_resource}. This is the standard configuration. ### Uncertain Reason The load balancer uses {serving_protocol} for traffic but {hc_protocol} for health checks on backend service {bs_resource}. If not intended, this protocol mismatch can lead to incorrect health assessments, potentially causing traffic to be sent to failing backends or triggering unnecessary failovers. Here are some examples of potentially problematic mismatches: * **TLS vs. Non-TLS:** * Health Check: HTTPS, Backend: HTTP - The health check will try to initiate a TLS handshake, which will fail against a non-TLS server. * Health Check: HTTP, Backend: HTTPS - The health check sends plaintext, but the server expects TLS, likely resulting in a connection reset or protocol error. * **Application Protocol Mismatch:** * Health Check: GRPC, Backend: HTTP - The health check speaks the GRPC protocol, but the backend expects standard HTTP requests. * Health Check: HTTP, Backend: SSL - The health check expects an HTTP application response, but the backend is configured for generic SSL, which might not involve HTTP. * **Protocol Version/Feature Mismatch (Subtler issues even with the same base protocol):** * An HTTP/1.0 health check request to a server strictly requiring HTTP/1.1 features. * An HTTP/2 health check to a server only supporting HTTP/1.1 without proper negotiation. **Important:** Health checks using {hc_protocol} might be passing while the application serving {serving_protocol} traffic is failing because the success criteria for the two protocols can differ. More details on the health check success criteria can be found in [docs](https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-protocol-http). ### Uncertain Remediation 1. Verify if this protocol difference is intentional and well-understood. 2. If not, **align the health check protocol with the serving protocol ({serving_protocol})** to ensure health checks accurately represent the backend's ability to serve traffic. 3. Consult the [Health Checks Overview](https://cloud.google.com/load-balancing/docs/health-check-concepts) for best practices. ================================================ FILE: website/content/en/runbook/steps/lb/verify-dns-records.md ================================================ --- title: "lb/Verify Dns Records" linkTitle: "Verify Dns Records" weight: 3 type: docs description: > Check the DNS records for specific domain associated with the SSL certificate. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: GATEWAY ### Description None ### Failure Reason DNS records for domain {domain} currently resolve to the following IP addresses: {unresolved_ip_addresses}. These IP addresses do not point to any load balancer associated with certificate {name}. Certificate provisioning is therefore blocked. ### Failure Remediation Configure DNS records for {domain} to point to the correct load balancer IP address(es) for certificate {name}. The following load balancer IP addresses are associated with this certificate: {fr_ip_message} Check: ### Success Reason DNS records for domain {domain} are correctly configured. All resolved IP addresses ({ip_addresses}) point to the load balancer(s) associated with certificate {name}. ### Uncertain Reason Some DNS records for domain {domain} resolve to the following unexpected IP address(es): {unresolved_ip_addresses}. While other records point to the expected IP addresses: {resolved_ip_addresses}. The unexpected IP addresses do not point to any load balancer associated with certificate {name}. This can cause certificate provisioning issues. ### Uncertain Remediation Configure DNS records for {domain} to point to the correct load balancer IP address(es) for certificate {name}. The following load balancer IP addresses are associated with this certificate: {fr_ip_message} Check: ================================================ FILE: website/content/en/runbook/steps/lb/verify-firewall-rules.md ================================================ --- title: "lb/Verify Firewall Rules" linkTitle: "Verify Firewall Rules" weight: 3 type: docs description: > Checks if firewall rules are configured correctly. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason {insight} The health checks are currently failing due to a misconfigured firewall. This prevents Google Cloud probers from connecting to the backends, causing the load balancer to consider them unhealthy. ### Failure Remediation Update the firewall rules to allow inbound traffic from the Google Cloud health check IP ranges (found at ) to the backends. ### Success Reason Firewall rules are correctly configured and are not blocking health check probes for backend service {bs_url}. ================================================ FILE: website/content/en/runbook/steps/lb/verify-forwarding-rules-port.md ================================================ --- title: "lb/Verify Forwarding Rules Port" linkTitle: "Verify Forwarding Rules Port" weight: 3 type: docs description: > Checks if the load balancer is configured to listen on port 443. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description More specifically, check if all IP addresses associated with the certificate have forwarding rules that listen on port 443 ### Failure Reason {misconfigured_entities} There must be at least one load balancer's forwarding rule that uses TCP port 443 for the Google-managed certificate to be initially provisioned and automatically renewed. ### Failure Remediation Configure the load balancer to listen on port 443 for SSL certificate "{name}". ### Success Reason The SSL certificate "{name}" has forwarding rules configured for HTTPS (port 443) on all associated IP addresses. ================================================ FILE: website/content/en/runbook/steps/lb/verify-health-check-logging-enabled.md ================================================ --- title: "lb/Verify Health Check Logging Enabled" linkTitle: "Verify Health Check Logging Enabled" weight: 3 type: docs description: > Check if health check logging is enabled. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: GATEWAY ### Description None ### Success Reason Health check logging is enabled for health check {hc_url}. ### Uncertain Reason Logging is not enabled for health check {hc_url}. Lack of logs hinders troubleshooting, as logs provide visibility into health check state changes and probe details needed to diagnose failures. ### Uncertain Remediation Enable logging for the health check using the following `gcloud` command: ``` gcloud compute health-checks update {protocol} {hc_name} {additional_flags} --enable-logging ``` This will log any future changes in health status, but won't show past activity. Note that new health check logs will only appear when a health state transition occurs. ================================================ FILE: website/content/en/runbook/steps/lb/verify-no-certificate-map-conflict.md ================================================ --- title: "lb/Verify No Certificate Map Conflict" linkTitle: "Verify No Certificate Map Conflict" weight: 3 type: docs description: > Checks for conflicting certificate map set on a target proxy. --- **Product**: [Load balancing](https://cloud.google.com/load-balancing)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The following target proxies have a conflicting certificate map: {conflicting_target_proxies}. If certificate map is set on a target proxy, the classic SSL certificates are ignored. ### Failure Remediation If this configuration is unintended, detach the certificate map from the target proxies. ### Success Reason All target proxies associated with the SSL certificate "{name}" do not have a certificate map. ================================================ FILE: website/content/en/runbook/steps/logs/_index.md ================================================ --- title: "LOGS" linkTitle: "logs" type: docs weight: 2 --- All steps available in logs ================================================ FILE: website/content/en/runbook/steps/logs/check-issue-log-entry.md ================================================ --- title: "logs/Check Issue Log Entry" linkTitle: "Check Issue Log Entry" weight: 3 type: docs description: > Checks logs for problematic entry using filter string provided. --- **Product**: [Cloud Logging](https://cloud.google.com/logging)\ **Step Type**: AUTOMATED STEP ### Description Attributes: project_id(str): Project ID to search for filter filter_str(str): Filter written in log querying language: https://cloud.google.com/logging/docs/view/query-library. This field required because an empty filter matches all log entries. template(str): Custom template for logging issues related to a resource type resource_name (Optional[str]): Resource identifier that will be used in the custom template provided. ### Failure Reason Problematic log entries found matching query: {query} ### Failure Remediation Run the following Cloud Logging query in the Google Cloud console to find the log entry indicating the problem: Query: {query} ### Uncertain Reason No problematic log entries found in the time range matching the following query: {query} ### Uncertain Remediation 1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly. Query: {query} 2. Verify that logging for the resource has not been disabled due to cost management: ### Skipped Reason Could not fetch log entries for the following due to {api_err}. Query: {query} ================================================ FILE: website/content/en/runbook/steps/logs/logs-check.md ================================================ --- title: "logs/Logs Check" linkTitle: "Logs Check" weight: 3 type: docs description: > Assess if a given log query is present or not.. --- **Product**: [Cloud Logging](https://cloud.google.com/logging)\ **Step Type**: AUTOMATED STEP ### Description Checks if a log attribute has a bad or good pattern ### Failure Reason A known bad value is present within the checked log entry indicating a problem ### Failure Remediation Run the following Cloud Logging query in the Google Cloud console to find the log entry indicating the problem: Query: {query} ### Success Reason The expected good value is present within the checked log entry. ### Uncertain Reason The outcome could not be determined automatically. Manually verify the relevant details in [Cloud Logging](https://cloud.google.com/logging). ### Uncertain Remediation Run the following Cloud Logging query in the Google Cloud console to manually review the relevant log entries: Query: {query} ================================================ FILE: website/content/en/runbook/steps/monitoring/_index.md ================================================ --- title: "MONITORING" linkTitle: "monitoring" type: docs weight: 2 --- All steps available in monitoring ================================================ FILE: website/content/en/runbook/steps/monitoring/time-series-check.md ================================================ --- title: "monitoring/Time Series Check" linkTitle: "Time Series Check" weight: 3 type: docs description: > Assess if a given metric is has expected values.. --- **Product**: https://cloud.google.com/monitoring\ **Step Type**: AUTOMATED STEP ### Description Currently checks if an attribute - Currently checks if metrics exists indicating a problem - Improve to be more flexible. ### Failure Reason A known bad value is present within the checked metric collection. ### Failure Remediation Review the metric data in Cloud Monitoring for more details. Alternatively, run the following Cloud Logging query: Query: {query} ### Success Reason The expected good value is present within the checked metric collection. ### Uncertain Reason The metric data analysis was inconclusive. Manual investigation using Cloud Logging is recommended. ### Uncertain Remediation Review the metric data in Cloud Monitoring for more details. Alternatively, run the following Cloud Logging query: Query: {query} ================================================ FILE: website/content/en/runbook/steps/nat/_index.md ================================================ --- title: "NAT" linkTitle: "nat" type: docs weight: 2 --- All steps available in nat ================================================ FILE: website/content/en/runbook/steps/nat/nat-allocation-failed-check.md ================================================ --- title: "nat/Nat Allocation Failed Check" linkTitle: "Nat Allocation Failed Check" weight: 3 type: docs description: > Checks NAT Allocation failed metric for the NATGW. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: AUTOMATED STEP ### Description This step determines whether Cloud NAT has run into issues due to insufficient NAT IP addresses. by checking the NAT Allocation failed metric. ### Failure Reason NAT IP allocation failure found on the NAT Gateway: {nat_gateway_name} ### Failure Remediation Continue the runbook for further diagnostic and remediation steps for the IP exhaustion issue on {nat_gateway_name} ### Success Reason No issues noticed on the NAT allocation failed metric for the NAT Gateway: {nat_gateway_name} ### Uncertain Reason Unable to fetch the the nat_allocation_failed metric for the gateway: {nat_gateway_name} ### Uncertain Remediation Confirm that the NAT Gateway name {nat_gateway_name} provided is correct and metric for the gateway is visible on cloud console. ### Skipped Reason No issues detected on the nat_allocation_failed metric for the gateway: {nat_gateway_name}. Checks on the status of the cloud router for the NAT gateway: {router_name} does not indicate extra IPs are needed. ================================================ FILE: website/content/en/runbook/steps/nat/nat-dropped-received-packet-check.md ================================================ --- title: "nat/Nat Dropped Received Packet Check" linkTitle: "Nat Dropped Received Packet Check" weight: 3 type: docs description: > Evaluates NATGW received_packets_dropped metric for issues. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: AUTOMATED STEP ### Description This step determines whether the NATGW is dropping packets. NAT gateways could be dropping packets for various reasons; however, the drops are not always indicative of an issue ### Success Reason No received_packet_drop on NAT GW {nat_gateway_name} seen. ### Uncertain Reason Elevated received_packet_drop_count metric noticed for NAT GW {nat_gateway_name} dropped_received_packet: {metric_value} ### Uncertain Remediation NAT gateways could be dropping packets for various reasons; however, the drops are not always indicative of an issue. Checking received_packet_drop metrics at the VM level as well. Open a case to GCP Support for confirmation of the reason for the drops See more on troubleshooting cloud NAT reducing the drops here [1] and [2]: [1] [2] ================================================ FILE: website/content/en/runbook/steps/nat/nat-ip-allocation-auto-only.md ================================================ --- title: "nat/Nat Ip Allocation Auto Only" linkTitle: "Nat Ip Allocation Auto Only" weight: 3 type: docs description: > Provides recommendations when NAT IP allocation is AUTO_ONLY. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: AUTOMATED STEP ### Description NAT IP allocation is configured as AUTO_ONLY, either: - Switch to Manual NAT IP assignment or - Add one more gateway in the same network and region ### Failure Reason The NAT Gateway {nat_gateway_name} is configured for automatic IP allocation ### Failure Remediation To resolve this issue, consider implementing the following options: 1. Add one more NAT gateway in the same network and region. 2. Switch to Manual NAT IP assignment. ================================================ FILE: website/content/en/runbook/steps/nat/nat-ip-allocation-failed-end.md ================================================ --- title: "nat/Nat Ip Allocation Failed End" linkTitle: "Nat Ip Allocation Failed End" weight: 3 type: docs description: > Concludes the NAT IP allocation failed diagnostics process. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: END ### Description If NAT allocation issues persist, it directs the user to helpful resources and suggests contacting support with a detailed report. ================================================ FILE: website/content/en/runbook/steps/nat/nat-ip-allocation-failed-start.md ================================================ --- title: "nat/Nat Ip Allocation Failed Start" linkTitle: "Nat Ip Allocation Failed Start" weight: 3 type: docs description: > Start Nat IP Allocation Failed Checks. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: START ### Description This step steps starts the NAT IP Allocation Failed Check debugging process by verifying the correct input parameters have been provided and checking to ensure that the following resources exist. - The Project - VPC Network - The NAT Cloud Router ### Skipped Reason Unable to fetch the network {network} confirm it exists in the project {project_id}. ### Skipped Reason [Alternative 2] Cannot find the NAT cloud router: {cloud_router} in the region {region} for the project {project_id} Check the cloud router name to ensure it exists in the project and rerun. ### Skipped Reason [Alternative 3] Cannot find the NAT Gateway: {nat_gateway} in the region {region} for the project {project_id} Check the cloud router name to ensure it exists in the project and rerun. ================================================ FILE: website/content/en/runbook/steps/nat/nat-ip-allocation-manual-only.md ================================================ --- title: "nat/Nat Ip Allocation Manual Only" linkTitle: "Nat Ip Allocation Manual Only" weight: 3 type: docs description: > Investigates when NAT IP allocation is MANUAL_ONLY. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: AUTOMATED STEP ### Description If the NAT IP allocation is configured as MANUAL_ONLY: - Confirm if the number of NAT IP's required by the gateway is over 300 - Follow the NAT IP Quota Increase Process ### Failure Reason The number of NAT IPs in use on the NAT Gateway is >= 300 which is above the quota limit [1]. 1. ### Failure Remediation Consider creating additional NAT gateways or optimise port usage [1]: 1. ### Success Reason Checking on the status and configuration of the Cloud NAT Router {router_name} and Gateway: 1. Minimum extra NAT IPs Needed: {extra_ips_needed} 2. Number of VM Endpoints With NAT mappings: {vms_with_nat_mappings} 3. Dynamic port allocation enabled: {enable_dynamic_port_allocation} 4. Number of NAT Gateway IPs in use: {nat_gw_ips_in_use} ================================================ FILE: website/content/en/runbook/steps/nat/nat-ip-allocation-method-check.md ================================================ --- title: "nat/Nat Ip Allocation Method Check" linkTitle: "Nat Ip Allocation Method Check" weight: 3 type: docs description: > Checks the NATGW configuration to determine next troubleshooting steps. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: GATEWAY ### Description Checks if the NATGW router is configured with manual or automatic IP allocation ================================================ FILE: website/content/en/runbook/steps/nat/nat-ip-exhaustion-check.md ================================================ --- title: "nat/Nat Ip Exhaustion Check" linkTitle: "Nat Ip Exhaustion Check" weight: 3 type: docs description: > Evaluates NATGW for NAT IP exhaustion/allocation issues. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: AUTOMATED STEP ### Description This step determines whether Cloud NAT has run into issues due to insufficient NAT IP addresses. ### Failure Reason NAT IP allocation failure found on the NAT GW {nat_gateway_name} ### Failure Remediation IP exhaustion issues on {nat_gateway_name} can be remediated by taking the following steps in [1]: [1] ### Success Reason No IP exhaustion issues found on the NAT GW {nat_gateway_name} ================================================ FILE: website/content/en/runbook/steps/nat/nat-resource-exhaustion-check.md ================================================ --- title: "nat/Nat Resource Exhaustion Check" linkTitle: "Nat Resource Exhaustion Check" weight: 3 type: docs description: > Evaluates NATGW for OUT_OF_RESOURCES and ENDPOINT_INDEPENDENCE_CONFLICT issues. --- **Product**: [Cloud NAT](https://cloud.google.com/nat)\ **Step Type**: AUTOMATED STEP ### Description This step determines whether Cloud NAT has run into resource issues. ### Failure Reason {metric_reason} issue found on the dropped_sent_packet metric on the NAT GW {nat_gateway_name} ### Failure Remediation Resource exhaustion issues can be remediated by taking the following steps in [1]: [1] ### Success Reason No {metric_reason} issues on the dropped_sent_packet metric for the NAT GW {nat_gateway_name} seen. ================================================ FILE: website/content/en/runbook/steps/pubsub/_index.md ================================================ --- title: "PUBSUB" linkTitle: "pubsub" type: docs weight: 2 --- All steps available in pubsub ================================================ FILE: website/content/en/runbook/steps/pubsub/active-subscription.md ================================================ --- title: "pubsub/Active Subscription" linkTitle: "Active Subscription" weight: 3 type: docs description: > Has common step to validate if the subscription is active. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks if the subscription is in active (valid) state. ### Failure Remediation Increase subscription throughput to keep it active, or amend the persistence configuration. [1]. [1] . ================================================ FILE: website/content/en/runbook/steps/pubsub/big-query-table-existence-check.md ================================================ --- title: "pubsub/Big Query Table Existence Check" linkTitle: "Big Query Table Existence Check" weight: 3 type: docs description: > Check that the BigQuery table exists. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason BigQuery table {table_full_id} not found. ### Failure Remediation Please ensure the BigQuery table exists. ================================================ FILE: website/content/en/runbook/steps/pubsub/big-query-writer-permission-check.md ================================================ --- title: "pubsub/Big Query Writer Permission Check" linkTitle: "Big Query Writer Permission Check" weight: 3 type: docs description: > Check that the Pub/Sub service agent has writer permissions on the table. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason The Pub/Sub service account '{service_account}' does not have required BigQuery permissionson project '{project_id}' ### Failure Remediation Grant the "BigQuery Data Editor" role (roles/bigquery.dataEditor) to the Pub/Sub service account: '{service_account}' ================================================ FILE: website/content/en/runbook/steps/pubsub/check-gcs-bucket.md ================================================ --- title: "pubsub/Check Gcs Bucket" linkTitle: "Check Gcs Bucket" weight: 3 type: docs description: > Checks if the target Cloud Storage bucket exists. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks if the target Cloud Storage bucket exists. ### Failure Reason Bucket not found. ### Failure Remediation Please ensure the Bucket exists. ================================================ FILE: website/content/en/runbook/steps/pubsub/check-service-account-permissions.md ================================================ --- title: "pubsub/Check Service Account Permissions" linkTitle: "Check Service Account Permissions" weight: 3 type: docs description: > Checks if the Pub/Sub service account has correct permissions on the bucket. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks if the Pub/Sub service account has correct permissions on the bucket ### Failure Reason Pub/Sub service account '{service_account}' is MISSING permission on bucket '{bucket_name}' ### Failure Remediation Grant the Pub/Sub service account '{service_account}' at least the storage.objects.create and storage.buckets.get permissions on the bucket '{bucket_name}'. ================================================ FILE: website/content/en/runbook/steps/pubsub/dead-letter-topic-permissions.md ================================================ --- title: "pubsub/Dead Letter Topic Permissions" linkTitle: "Dead Letter Topic Permissions" weight: 3 type: docs description: > "Verifies that the Pub/Sub service agent has the necessary IAM permissions for the configured Dead Letter Topic. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks if the pubsub agent has the relevant permissions to move messages whose processing has failed continuously to the dead letter topic. ### Failure Remediation Please ensure both the publisher role to the dead letter topic/project level and the subscriber role at the subscription/project level to the pubsub agent {} are assigned ================================================ FILE: website/content/en/runbook/steps/pubsub/dead-letter-topic.md ================================================ --- title: "pubsub/Dead Letter Topic" linkTitle: "Dead Letter Topic" weight: 3 type: docs description: > Has common step to check if the subscription has a dead letter topic. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks if the subscription has a Dead Letter Topic attached. This is important to remove the messages that have failed processing out of the main subscription. ### Failure Reason No dead letter topic attached. [1] [1] ### Failure Remediation Add dead letter topic to deliver to the topic any messages whose delivery retries has exceeded the threshold. Be aware that this is on best effort [1] and ensure the proper permissions are assigned [2]. Monitor dead-lettered message count[3] and pull from the subscription attached to the dead letter topic to investigate the message processing failures [4]. [1] [2] [3] [4] ================================================ FILE: website/content/en/runbook/steps/pubsub/end-step.md ================================================ --- title: "pubsub/End Step" linkTitle: "End Step" weight: 3 type: docs description: > Finalizing the runbook. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: END ### Description None ================================================ FILE: website/content/en/runbook/steps/pubsub/gcs-subscription-delivery-end.md ================================================ --- title: "pubsub/Gcs Subscription Delivery End" linkTitle: "Gcs Subscription Delivery End" weight: 3 type: docs description: > End Step --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: END ### Description No more checks. ================================================ FILE: website/content/en/runbook/steps/pubsub/gcs-subscription-delivery-start.md ================================================ --- title: "pubsub/Gcs Subscription Delivery Start" linkTitle: "Gcs Subscription Delivery Start" weight: 3 type: docs description: > Start GCS Subscription check --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: START ### Description Check that the project exists and is reachable. ### Failure Reason Project '{project_id}' not found or no permission to access it. ### Failure Remediation Please check the project ID and your permissions. ================================================ FILE: website/content/en/runbook/steps/pubsub/gcs-subscription-existence-check.md ================================================ --- title: "pubsub/Gcs Subscription Existence Check" linkTitle: "Gcs Subscription Existence Check" weight: 3 type: docs description: > Check that the Pub/Sub subscription exists. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks that the Pub/Sub subscription exists and is a gcs subscription. ### Failure Reason Pub/Sub subscription '{subscription_name}' not found. ### Failure Remediation Please check the subscription ID and your permissions. ================================================ FILE: website/content/en/runbook/steps/pubsub/investigate-bq-push-errors.md ================================================ --- title: "pubsub/Investigate Bq Push Errors" linkTitle: "Investigate Bq Push Errors" weight: 3 type: docs description: > Investigate message backlog issues for BigQuery subscriptions using push metrics. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Message failures detected. [1] ### Failure Remediation Handle message failures When a Pub/Sub message cannot be written to BigQuery, the message cannot be acknowledged. The Pub/Sub message forwarded to the dead-letter topic contains an attribute CloudPubSubDeadLetterSourceDeliveryErrorMessage that has the reason that the Pub/Sub message couldn't be written to BigQuery. [1] . ================================================ FILE: website/content/en/runbook/steps/pubsub/pubsub-quotas.md ================================================ --- title: "pubsub/Pubsub Quotas" linkTitle: "Pubsub Quotas" weight: 3 type: docs description: > Has common step to check if any Pub/Sub quotas are being exceeded in the project. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks if any quotas have been exceeded. ### Failure Reason Quota exceeded errors found for the Pub/Sub service. ### Failure Remediation Refer to [1] for guidance on quota limits and how to resolve quota errors. [1] . ================================================ FILE: website/content/en/runbook/steps/pubsub/pull-rate.md ================================================ --- title: "pubsub/Pull Rate" linkTitle: "Pull Rate" weight: 3 type: docs description: > Has common step to check the high backlog vs the delivery rate ratio. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: GATEWAY ### Description None ================================================ FILE: website/content/en/runbook/steps/pubsub/pull-subscription-delivery-end.md ================================================ --- title: "pubsub/Pull Subscription Delivery End" linkTitle: "Pull Subscription Delivery End" weight: 3 type: docs description: > End of this runbook. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: END ### Description No more checks to perform. ================================================ FILE: website/content/en/runbook/steps/pubsub/pull-subscription-delivery-start.md ================================================ --- title: "pubsub/Pull Subscription Delivery Start" linkTitle: "Pull Subscription Delivery Start" weight: 3 type: docs description: > Start step of runbook. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: START ### Description Gets the subscription and confirms it exists in the project. ================================================ FILE: website/content/en/runbook/steps/pubsub/push-subscription-delivery-end.md ================================================ --- title: "pubsub/Push Subscription Delivery End" linkTitle: "Push Subscription Delivery End" weight: 3 type: docs description: > End Step --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: END ### Description No more checks. ================================================ FILE: website/content/en/runbook/steps/pubsub/push-subscription-delivery-start.md ================================================ --- title: "pubsub/Push Subscription Delivery Start" linkTitle: "Push Subscription Delivery Start" weight: 3 type: docs description: > Start step of runbook. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: START ### Description Gets the subscription and confirms it exists in the project. ================================================ FILE: website/content/en/runbook/steps/pubsub/push_subscription_delivery-end.md ================================================ --- title: "pubsub/PushSubscriptionDelivery End" linkTitle: "Push_subscription_delivery End" weight: 3 type: docs description: > End Step --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: END ### Description No more checks. ================================================ FILE: website/content/en/runbook/steps/pubsub/response-code-step.md ================================================ --- title: "pubsub/Response Code Step" linkTitle: "Response Code Step" weight: 3 type: docs description: > Check push request responses from the endpoint. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks the responses coming from the endpoint and the success rates. ### Failure Reason Non-OK responses from the endpoint detected [1]. [1] ### Failure Remediation Resolve the endpoint errors processing messages to enable successful delivery. Common errors codes: - 431: payload exceeds allowed header limits. Disable write metadata [1] - 401/403: if enabled, ensure the push subscription authentication abides by the requirements. [2] Otherwise check permission errors at the endpoint. - 400: investigate the correctness of the message attributes & the http endpoint. [1] . [2] . ================================================ FILE: website/content/en/runbook/steps/pubsub/start-step.md ================================================ --- title: "pubsub/Start Step" linkTitle: "Start Step" weight: 3 type: docs description: > Check that the project exists and is reachable. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: START ### Description None ### Failure Reason Project '{project_id}' not found or no permission to access it. ### Failure Remediation Please check the project ID and your permissions. ================================================ FILE: website/content/en/runbook/steps/pubsub/subscription-existence-check.md ================================================ --- title: "pubsub/Subscription Existence Check" linkTitle: "Subscription Existence Check" weight: 3 type: docs description: > Check that the Pub/Sub subscription exists. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason Pub/Sub subscription '{subscription_name}' not found. ### Failure Remediation Please check the subscription ID and your permissions. ================================================ FILE: website/content/en/runbook/steps/pubsub/subscription-status-check.md ================================================ --- title: "pubsub/Subscription Status Check" linkTitle: "Subscription Status Check" weight: 3 type: docs description: > Check the status of the BigQuery subscription. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Remediation The topic schema and the BigQuery table schema might be incompatible. Please check the schemas and ensure they are compatible. ================================================ FILE: website/content/en/runbook/steps/pubsub/throughput-qualification.md ================================================ --- title: "pubsub/Throughput Qualification" linkTitle: "Throughput Qualification" weight: 3 type: docs description: > Has common step to validate subscription qualification attributes. --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step checks if the throughput qualification is in a good state. ### Failure Reason Low Health Score for the subscription for metrics {low_health_metrics}. ### Failure Remediation Monitor and resolve the health issues of the subscription by referring to [1]. [1] . ================================================ FILE: website/content/en/runbook/steps/pubsub/vpc-sc-step.md ================================================ --- title: "pubsub/Vpc Sc Step" linkTitle: "Vpc Sc Step" weight: 3 type: docs description: > Check if the VPC-SC api is enabled --- **Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\ **Step Type**: AUTOMATED STEP ### Description This step highlights caveats of using VPC-SC with push subscriptions ### Failure Remediation Beware of limitations when using push subscriptions with VPCSC [1] such as: - You can't update existing push subscriptions, they continue to function but aren't protected by VPC Service Controls - Custom domains don't work, you can only create new push subscriptions for which the push endpoint is set to a Cloud Run service - You can only create new push subscriptions through Eventarc for Eventarc workflows - Use the fully qualified name of the topic if terraform/deployment manager is used to attach dead letter topics [1] ================================================ FILE: website/content/en/runbook/steps/vertex/_index.md ================================================ --- title: "VERTEX" linkTitle: "vertex" type: docs weight: 2 --- All steps available in vertex ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-compute-engine-ssh.md ================================================ --- title: "vertex/Check Workbench Instance Compute Engine Ssh" linkTitle: "Check Workbench Instance Compute Engine Ssh" weight: 3 type: docs description: > Check if user is able to SSH to the Workbench Instance Compute Engine VM --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: COMPOSITE STEP ### Description Compute Engine might be running so the user can ssh to inspect the VM ### Success Reason OK! User can SHH and open a terminal in the Workbench Instance {instance_name}'s Compute Engine VM. ### Uncertain Reason Workbench Instance {instance_name}'s Compute Engine VM is not running. Status: {status} You cannot ssh to use terminal access and check for certain issues in the VM. For example, space in "/home/jupyter" directory should remain below 85% ### Uncertain Remediation Try restarting your instance or start your instance's VM via Compute Engine ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-custom-scripts.md ================================================ --- title: "vertex/Check Workbench Instance Custom Scripts" linkTitle: "Check Workbench Instance Custom Scripts" weight: 3 type: docs description: > Check if the Workbench Instance is using custom scripts --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: AUTOMATED STEP ### Description Users have the option to add scripts to a Workbench Instance via the metadata fields. However, scripts may change the default behaviour or install libraries that break dependencies ### Success Reason OK! Workbench Instance {instance_name} is not using custom post-startup or startup scripts. ### Uncertain Reason Workbench Instance {instance_name} has custom post-startup or startup scripts: - post-startup-script: {post_startup_script} - startup-script: {startup_script} - startup-script-url: {startup_script_url} ### Uncertain Remediation Scripts must ensure: - Jupyter runs on port 127.0.0.1:8080 - If packages are installed they should not add breaking changes to the Jupyter configuration ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-external-ip-disabled.md ================================================ --- title: "vertex/Check Workbench Instance External Ip Disabled" linkTitle: "Check Workbench Instance External Ip Disabled" weight: 3 type: docs description: > Check if the Workbench Instance has external IP disabled --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: AUTOMATED STEP ### Description If the instance has external IP disabled, user must configure Private networking correctly ### Success Reason OK! Workbench Instance {instance_name} has an external IP ### Uncertain Reason Workbench Instance {instance_name} has external IP disabled. - network: {network} - subnetwork: {subnetwork} This may cause networking issues if configuration was not done correctly. ### Uncertain Remediation Follow the public documentation to configure Private Networking for a Workbench Instance [1] [2] [3] [4] [1] [2] [3] [4] ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-is-using-latest-env-version.md ================================================ --- title: "vertex/Check Workbench Instance Is Using Latest Env Version" linkTitle: "Check Workbench Instance Is Using Latest Env Version" weight: 3 type: docs description: > Check if the Workbench Instance is using the latest environment version --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: AUTOMATED STEP ### Description Workbench Instances can be upgraded regularly to have the latest fixes ### Failure Reason Workbench Instance {instance_name} is using a previous environment version M{environment_version} ### Failure Remediation Upgrade the instance to use the latest version {upgrade_version} which has the latest updates and fixes [1] Upgrade version image: {upgrade_image} Remember to backup your data before an upgrade. [1] ### Success Reason OK! Workbench Instance {instance_name} is using the latest environment version M{environment_version} ### Uncertain Reason Workbench Instance {instance_name} should be in STOPPED state to check its upgradability. Upgradability info: {upgrade_info} ### Uncertain Remediation Stop the instance. ### Uncertain Reason [Alternative 2] Workbench Instance {instance_name} upgradability info: {upgrade_info} ### Uncertain Remediation [Alternative 2] Make sure instance has the latest environment version. ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-jupyter-space.md ================================================ --- title: "vertex/Check Workbench Instance Jupyter Space" linkTitle: "Check Workbench Instance Jupyter Space" weight: 3 type: docs description: > Check if Jupyter space in "home/jupyter" is below 85% --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: AUTOMATED STEP ### Description If Jupyter has ran out of space, the Workbench Instance might not be able to start ### Failure Reason Workbench Instance {instance_name}'s space in "/home/jupyter" should remain below 85% This will allow the instance to start correctly. ### Failure Remediation Delete large files in "/home/jupyter" and restart the instance. You may also run the following command to list large cache files and then manually delete them. - "du -h /home/jupyter/.cache | sort -h" ### Success Reason OK! Workbench Instance {instance_name}'s "/home/jupyter" space usage is below 85% ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-performance.md ================================================ --- title: "vertex/Check Workbench Instance Performance" linkTitle: "Check Workbench Instance Performance" weight: 3 type: docs description: > Checks performance of a Workbench Instance by evaluating its memory, CPU, and disk utilization. --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: COMPOSITE STEP ### Description This composite diagnostic step sequentially checks for high memory utilization, high disk utilization, and CPU performance issues. It adds specific child steps designed to identify and report potential performance bottlenecks that could impact the instance's operation. ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-syslogs-jupyter-running-on-port-8080.md ================================================ --- title: "vertex/Check Workbench Instance Syslogs Jupyter Running On Port 8080" linkTitle: "Check Workbench Instance Syslogs Jupyter Running On Port 8080" weight: 3 type: docs description: > Check Jupyter is running on port 127.0.0.1:8080 --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: AUTOMATED STEP ### Description Jupyter should always run on port 127.0.0.1:8080 for the Workbench Instance to work correctly ### Failure Reason Workbench Instance {instance_name} syslogs indicate Jupyter is NOT running on port 127.0.0.1:8080 ### Failure Remediation If the instance is stopped, start it and rerun this check. You may also need to extend the logging query start and end times. Only port 8080 is supported. Installed extensions, packages or custom scripts may cause the port to change. 1. Try following documentation [1] [2] [3] 2. If it doesn't work, recover data by diagnosing the instance with the --enable-copy-home-files [4] 3. Create a new Instance and migrate your data [5] [1] [2] [3] [4] [5] ### Success Reason OK! Workbench Instance {instance_name} syslogs indicate Jupyter is running on port 127.0.0.1:8080 ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-using-custom-container.md ================================================ --- title: "vertex/Check Workbench Instance Using Custom Container" linkTitle: "Check Workbench Instance Using Custom Container" weight: 3 type: docs description: > Check if the Workbench Instance is using a custom container --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: AUTOMATED STEP ### Description Users have the option to use custom containers to create Workbench Instances If this is the case, this runbook doesn't apply ### Success Reason OK! Workbench Instance {instance_name} is not using a custom container. ### Uncertain Reason WARNING: This runbook may not be applicable for Workbench Instances created with a custom container. ### Uncertain Remediation Follow the documentation to create a Workbench Instance with a custom container [1] [1] ================================================ FILE: website/content/en/runbook/steps/vertex/check-workbench-instance-using-official-image.md ================================================ --- title: "vertex/Check Workbench Instance Using Official Image" linkTitle: "Check Workbench Instance Using Official Image" weight: 3 type: docs description: > Check if the Workbench Instance is using the official images --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: AUTOMATED STEP ### Description Users have the option to create Workbench Instances with any image However, only 'workbench-instances' official images are supported ### Failure Reason image: {image} images without '{images_family}' text in the image name are not supported but might work with Workbench Instances [1] [1] ### Failure Remediation Users are responsible for customizing unsupported images or custom containers Create a Workbench Instance with the official '{images_family}' family of images. Officially supported images are found in the Google Cloud Console: Vertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown. You may also follow the documentation [1] to use Custom Containers [1] ### Success Reason OK! Workbench Instance {instance_name} is using an official '{image_family}' image: {image} ### Uncertain Reason image: {image} '{images_family}' images might work with Workbench Instances, but are unsupported [1] [1] ### Uncertain Remediation Officially supported images are found in the Google Cloud Console: Vertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown. ================================================ FILE: website/content/en/runbook/steps/vertex/decision-check-workbench-instance-system-logging.md ================================================ --- title: "vertex/Decision Check Workbench Instance System Logging" linkTitle: "Decision Check Workbench Instance System Logging" weight: 3 type: docs description: > Decision point to investigate Serial Port Logs --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: GATEWAY ### Description Decides whether its possible to check syslogs for the Workbench Instance ### Success Reason OK! Workbench Instance {instance_name} Serial Port Logging is enabled and instance is initializing. Checking Workbench Instance syslogs for issues ### Uncertain Reason Workbench Instance {instance_name} Serial Port Logging is disabled by org constraint '{constraint}' ### Uncertain Remediation Remove org constraint '{constraint}' to analyze Workbench Instance system serial port logs. ### Uncertain Reason [Alternative 2] Workbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state. Current state: {state} ### Uncertain Remediation [Alternative 2] Try to start the instance. ================================================ FILE: website/content/en/runbook/steps/vertex/workbench-instance-stuck-in-provisioning-end.md ================================================ --- title: "vertex/Workbench Instance Stuck In Provisioning End" linkTitle: "Workbench Instance Stuck In Provisioning End" weight: 3 type: docs description: > Checking if the Workbench Instance is now in ACTIVE state. --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: END ### Description If Workbench Instance is still stuck in PROVISIONING state, then Diagnostic Logs should be captured and analyzed by the user or support ### Failure Reason Workbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state. ### Failure Remediation Try to start the instance. ### Success Reason OK! Workbench Instance {instance_name} is already in ACTIVE state. WARNING: This runbook is intended for instances that are stuck in PROVISIONING state. ### Uncertain Reason Workbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state. ### Uncertain Remediation Try to start the instance. ### Success Reason [Alternative 2] OK! Workbench Instance {instance_name} is already in ACTIVE state. The issue is solved!!! ================================================ FILE: website/content/en/runbook/steps/vertex/workbench-instance-stuck-in-provisioning-start.md ================================================ --- title: "vertex/Workbench Instance Stuck In Provisioning Start" linkTitle: "Workbench Instance Stuck In Provisioning Start" weight: 3 type: docs description: > Checking if the Workbench Instance is in PROVISIONING state and gathering its details. --- **Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\ **Step Type**: START ### Description If the instance is stopped, user must try to start it to start the checks ### Failure Reason Workbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state. ### Failure Remediation Try to start the instance. ### Success Reason OK! Workbench Instance {instance_name} is already in ACTIVE state. WARNING: This runbook is intended for instances that are stuck in PROVISIONING state. ### Uncertain Reason Workbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state. ### Uncertain Remediation Try to start the instance. ### Success Reason [Alternative 2] OK! Workbench Instance {instance_name} is already in ACTIVE state. The issue is solved!!! ================================================ FILE: website/content/en/runbook/steps/vpc/_index.md ================================================ --- title: "VPC" linkTitle: "vpc" type: docs weight: 2 --- All steps available in vpc ================================================ FILE: website/content/en/runbook/steps/vpc/external-interface-check.md ================================================ --- title: "vpc/External Interface Check" linkTitle: "External Interface Check" weight: 3 type: docs description: > Check connectivity to external endpoint when the VM has an external IP address. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Step Type**: COMPOSITE STEP ### Description This step checks firewall and routing rules exist to allow for connectivity to the external IP address. It also runs and reports a connectivity test. ================================================ FILE: website/content/en/runbook/steps/vpc/internal-interface-check.md ================================================ --- title: "vpc/Internal Interface Check" linkTitle: "Internal Interface Check" weight: 3 type: docs description: > Check connectivity to external endpoint when the VM source NIC is an internal interface. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Step Type**: COMPOSITE STEP ### Description This step checks firewall and routing rules exist to allow for connectivity to the external IP address. It also runs and reports a connectivity test. ================================================ FILE: website/content/en/runbook/steps/vpc/vm-external-ip-connectivity-end.md ================================================ --- title: "vpc/Vm External Ip Connectivity End" linkTitle: "Vm External Ip Connectivity End" weight: 3 type: docs description: > Concludes the VM External IP connectivity diagnostics process. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Step Type**: END ### Description If external connectivity issues persist, it directs the user to helpful resources and suggests contacting support with a detailed report. ================================================ FILE: website/content/en/runbook/steps/vpc/vm-external-ip-connectivity-start.md ================================================ --- title: "vpc/Vm External Ip Connectivity Start" linkTitle: "Vm External Ip Connectivity Start" weight: 3 type: docs description: > Start VM external connectivity checks --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Step Type**: START ### Description None ================================================ FILE: website/content/en/runbook/steps/vpc/vm-external-ip-connectivity-test.md ================================================ --- title: "vpc/Vm External Ip Connectivity Test" linkTitle: "Vm External Ip Connectivity Test" weight: 3 type: docs description: > Runs a network connectivity test from VM to a destination endpoint. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Step Type**: AUTOMATED STEP ### Description Evaluates the connectivity test for any issues and reports to the user. ================================================ FILE: website/content/en/runbook/steps/vpc/vm-has-external-ip.md ================================================ --- title: "vpc/Vm Has External Ip" linkTitle: "Vm Has External Ip" weight: 3 type: docs description: > Checks if the source NIC provided has an external IP address or not. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Step Type**: GATEWAY ### Description Based on the source NIC, IP address type, diagnostic process would be directed towards troubleshooting NATGW or direct external connectivity ================================================ FILE: website/content/en/runbook/steps/vpc/vpc-firewall-check.md ================================================ --- title: "vpc/Vpc Firewall Check" linkTitle: "Vpc Firewall Check" weight: 3 type: docs description: > Checks if ingress or egress traffic is allowed to a GCE Instance from a specified source IP. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Step Type**: AUTOMATED STEP ### Description Evaluates VPC firewall rules to verify if a GCE Instance permits ingress or egress traffic from a designated source IP through a specified port and protocol. ================================================ FILE: website/content/en/runbook/steps/vpc/vpc-route-check.md ================================================ --- title: "vpc/Vpc Route Check" linkTitle: "Vpc Route Check" weight: 3 type: docs description: > Checks VPC route for routing rule exists to the destination IP address. --- **Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\ **Step Type**: AUTOMATED STEP ### Description Evaluates the VPC routing rules for the most specific route that - matches the destination IP address on the VPC route selection order. ================================================ FILE: website/content/en/runbook/steps/vpn/_index.md ================================================ --- title: "VPN" linkTitle: "vpn" type: docs weight: 2 --- All steps available in vpn ================================================ FILE: website/content/en/runbook/steps/vpn/tunnel-down-status-reason.md ================================================ --- title: "vpn/Tunnel Down Status Reason" linkTitle: "Tunnel Down Status Reason" weight: 3 type: docs description: > Checks the status of the tunnel and provides reasons for failure. --- **Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': {issue} ### Failure Remediation {remediations} ### Success Reason VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': No relevant logs found during the chosen TimeFrame ### Skipped Reason Please verify the tunnel and project details provided are accurate. ================================================ FILE: website/content/en/runbook/steps/vpn/tunnel-packets-drop-check.md ================================================ --- title: "vpn/Tunnel Packets Drop Check" linkTitle: "Tunnel Packets Drop Check" weight: 3 type: docs description: > Checking the VPN Tunnel Packet Drop --- **Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason {issue} ### Failure Remediation {remediations} ### Success Reason VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': No Packet drop during the chosen TimeFrame ### Skipped Reason {issue} ================================================ FILE: website/content/en/runbook/steps/vpn/tunnel-packets-utilization-check.md ================================================ --- title: "vpn/Tunnel Packets Utilization Check" linkTitle: "Tunnel Packets Utilization Check" weight: 3 type: docs description: > Checking the VPN Tunnel Packet Utilization --- **Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\ **Step Type**: AUTOMATED STEP ### Description None ### Failure Reason VPN tunnel '{tunnel}' in project '{project}': {issue} ### Failure Remediation {remediations} ### Success Reason VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': Packet did not reach max value during the chosen TimeFrame ### Skipped Reason {issue} ================================================ FILE: website/content/en/runbook/steps/vpn/vpn-tunnel-check-end.md ================================================ --- title: "vpn/Vpn Tunnel Check End" linkTitle: "Vpn Tunnel Check End" weight: 3 type: docs description: > Concludes the diagnostics process. --- **Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\ **Step Type**: END ### Description None ================================================ FILE: website/content/en/runbook/steps/vpn/vpn-tunnel-status.md ================================================ --- title: "vpn/Vpn Tunnel Status" linkTitle: "Vpn Tunnel Status" weight: 3 type: docs description: > Checking the VPN Tunnel status --- **Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\ **Step Type**: START ### Description None ### Failure Reason VPN tunnel '{tunnel}' in project '{project}': {issue} ### Failure Remediation {remediations} ### Success Reason VPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}'. ================================================ FILE: website/content/en/search.md ================================================ --- title: Search Results layout: search hide_summary: true --- ================================================ FILE: website/go.mod ================================================ module gcpdiag/website go 1.24.5 require ( github.com/google/docsy v0.12.0 // indirect github.com/google/docsy/dependencies v0.7.2 // indirect ) ================================================ FILE: website/go.sum ================================================ github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= github.com/FortAwesome/Font-Awesome v0.0.0-20241216213156-af620534bfc3/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= github.com/google/docsy v0.12.0 h1:CddZKL39YyJzawr8GTVaakvcUTCJRAAYdz7W0qfZ2P4= github.com/google/docsy v0.12.0/go.mod h1:1bioDqA493neyFesaTvQ9reV0V2vYy+xUAnlnz7+miM= github.com/google/docsy/dependencies v0.7.2 h1:+t5ufoADQAj4XneFphz4A+UU0ICAxmNaRHVWtMYXPSI= github.com/google/docsy/dependencies v0.7.2/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4= github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= github.com/twbs/bootstrap v5.3.6+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= ================================================ FILE: website/hugo.sh ================================================ #!/bin/bash set -eu # set bash strict mode to catch subtle bugs IMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-hugo:0.3 SUPPORTED_RUNTIME="docker podman" # If no arguments are provided, default to 'server' in interactive shells # and 'build' in non-interactive (CI/CD) shells. if [ "$#" -eq 0 ]; then if [ -t 0 ]; then set -- "server" else set -- "build" fi fi # If the command is 'server', add default arguments for local development if [ "$1" = "server" ]; then shift set -- "server" "--bind" "0.0.0.0" "-b" "http://localhost:1313" "$@" fi mkdir -p "$HOME/.config/gcloud" [ -t 0 ] && USE_TTY="-it" # Set RUNTIME based on available container runtime cmd for r in $SUPPORTED_RUNTIME; do if command -v "$r" >/dev/null; then RUNTIME="$r" break fi done if [ -z "$RUNTIME" ]; then >&2 echo "No container runtime found - supported: $SUPPORTED_RUNTIME" exit 1 fi if [ "$RUNTIME" = podman ]; then export PODMAN_USERNS=keep-id fi exec "$RUNTIME" run ${USE_TTY:-} \ --rm \ -u "$(id -u):$(id -g)" \ -e "USER=$(id -n -u)" \ -e "GROUP=$(id -n -g)" \ -e "SHELL=/bin/bash" \ -e HOME -e LANG \ -e GOOGLE_APPLICATION_CREDENTIALS \ -w /src \ -v "$(pwd):/src" \ -v "$HOME/.config/gcloud:$HOME/.config/gcloud" \ -p 1313:1313 \ "$IMAGE" \ "$@" ================================================ FILE: website/i18n/en.toml ================================================ # original version: "Create documentation issue" # we make it shorter so that it doesn't wrap [post_create_issue] other = "Create issue" ================================================ FILE: website/layouts/404.html ================================================ {{ define "main"}}

Not found

Oops! This page doesn't exist. Try going back to our home page.

{{ end }} ================================================ FILE: website/layouts/docs/baseof.html ================================================ {{ partial "head.html" . }}
{{ partial "navbar.html" . }}
{{ partial "version-banner.html" . }} {{ if not .Site.Params.ui.breadcrumb_disable }}{{ partial "breadcrumb.html" . }}{{ end }} {{ block "main" . }}{{ end }}
{{ partial "footer.html" . }}
{{ partial "scripts.html" . }} ================================================ FILE: website/layouts/partials/navbar.html ================================================ {{ $cover := .HasShortcode "blocks/cover" }} ================================================ FILE: website/layouts/partials/page-meta-links.html ================================================ {{ if .Path }} {{ $pathFormatted := replace .Path "\\" "/" }} {{ $gh_repo := ($.Param "github_repo") }} {{ $gh_subdir := ($.Param "github_subdir") }} {{ $gh_project_repo := ($.Param "github_project_repo") }} {{ $gh_branch := (default "master" ($.Param "github_branch")) }}
{{ if $gh_repo }} {{ $gh_repo_path := printf "%s/content/%s" $gh_branch $pathFormatted }} {{ if and ($gh_subdir) (.Site.Language.Lang) }} {{ $gh_repo_path = printf "%s/%s/content/%s/%s" $gh_branch $gh_subdir ($.Site.Language.Lang) $pathFormatted }} {{ else if .Site.Language.Lang }} {{ $gh_repo_path = printf "%s/content/%s/%s" $gh_branch ($.Site.Language.Lang) $pathFormatted }} {{ else if $gh_subdir }} {{ $gh_repo_path = printf "%s/%s/content/%s" $gh_branch $gh_subdir $pathFormatted }} {{ end }} {{ $editURL := printf "%s/edit/%s" $gh_repo $gh_repo_path }} {{ $createURL := printf "%s/edit/%s" $gh_repo $gh_repo_path }} {{ $issuesURL := printf "%s/issues/new?title=%s" $gh_repo (htmlEscape $.Title )}} {{ $newPageStub := resources.Get "stubs/new-page-template.md" }} {{ $newPageQS := querify "value" $newPageStub.Content "filename" "change-me.md" | safeURL }} {{ $newPageURL := printf "%s/new/%s?%s" $gh_repo $gh_repo_path $newPageQS }} {{ T "post_edit_this" }} {{ T "post_create_issue" }} {{ if $gh_project_repo }} {{ $project_issueURL := printf "%s/issues/new" $gh_project_repo }} {{ T "post_create_project_issue" }} {{ end }} {{ end }} {{ with .CurrentSection.AlternativeOutputFormats.Get "print" }} {{ T "print_entire_section" }} {{ end }}
{{ end }} ================================================ FILE: website/layouts/shortcodes/blocks/cover.html ================================================ {{ $col_id := .Get "color" | default "dark" }} {{/* Height can be one of: auto, min, med, max, full. */}} {{ $height := .Get "height" | default "max" }}

gcpdiag logo gcpdiag

Diagnostics for
Google Cloud Platform

{{ .Inner }}
================================================ FILE: website/layouts/shortcodes/blocks/feature.html ================================================
{{ with .Get "icon" }}
{{ end }}

{{ .Get "title" }}

{{ .Inner }}

{{ with .Get "url" }} Read more... {{ end }}
================================================ FILE: website/layouts/shortcodes/blocks/section.html ================================================
{{ .Inner }}